) {
+ server.use(
+ http.get('/api/v1/printers/', () => HttpResponse.json([printer])),
+ http.get('/api/v1/printers/:id/status', () => HttpResponse.json(status)),
+ http.get('/api/v1/printers/:id/print/objects', () =>
+ HttpResponse.json({ objects: [], total: 0, skipped_count: 0, is_printing: true, bbox_all: null }),
+ ),
+ );
+}
+
+// The whole live-status block waits on the status query, so find rather than get.
+const skipButton = () => screen.findByRole('button', { name: /skip objects/i });
+
+describe('skip objects button gate', () => {
+ beforeEach(() => {
+ localStorage.removeItem('printerCardSize');
+ });
+
+ it('stays enabled while printing when the object list is not loaded', async () => {
+ serveStatus({ ...printing, printable_objects_count: 0 });
+
+ render( );
+
+ expect(await skipButton()).toBeEnabled();
+ });
+
+ it('is disabled for a single-object print, where there is nothing to skip', async () => {
+ serveStatus({ ...printing, printable_objects_count: 1 });
+
+ render( );
+
+ const button = await skipButton();
+ expect(button).toBeDisabled();
+ expect(button).toHaveAttribute('title', 'Skip objects (requires 2+ objects)');
+ });
+
+ it('is enabled for the ordinary multi-object print', async () => {
+ serveStatus({ ...printing, printable_objects_count: 8 });
+
+ render( );
+
+ expect(await skipButton()).toBeEnabled();
+ });
+
+ it('is disabled when the printer is not printing', async () => {
+ serveStatus({ ...printing, state: 'IDLE', printable_objects_count: 0 });
+
+ render( );
+
+ const button = await skipButton();
+ expect(button).toBeDisabled();
+ expect(button).toHaveAttribute('title', 'Skip objects (only while printing)');
+ });
+});
diff --git a/frontend/src/pages/PrintersPage.tsx b/frontend/src/pages/PrintersPage.tsx
index 6b846383a..da5b962ca 100644
--- a/frontend/src/pages/PrintersPage.tsx
+++ b/frontend/src/pages/PrintersPage.tsx
@@ -4258,13 +4258,23 @@ function PrinterCard({
const coverUrl = isActivePrint ? status.cover_url : showRetainedPrint ? retainedPrintJob.coverUrl : null;
const progress = isActivePrint ? (status.progress || 0) : showRetainedPrint ? 100 : 0;
+ // A running print always has at least one object, so a count of
+ // zero means "not loaded", not "nothing to skip" — after a
+ // restart mid-print the list is empty until something rebuilds
+ // it. Treating that as nothing-to-skip disabled the only
+ // control that opens the modal, and the modal's own fetch is
+ // what rebuilds the list, so the print could never get it back.
+ // Exactly one object is the real nothing-to-skip case.
+ const objectCount = status.printable_objects_count ?? 0;
+ const canSkipObjects = isActivePrint && objectCount !== 1 && hasPermission('printers:control');
+
return (
setShowSkipObjectsModal(true)}
- disabled={!isActivePrint || (status.printable_objects_count ?? 0) < 2 || !hasPermission('printers:control')}
+ disabled={!canSkipObjects}
className={`absolute top-2 right-2 p-1.5 rounded transition-colors z-10 ${
- isActivePrint && (status.printable_objects_count ?? 0) >= 2 && hasPermission('printers:control')
+ canSkipObjects
? 'text-bambu-gray hover:text-white hover:bg-white/10'
: 'text-bambu-gray/30 cursor-not-allowed'
}`}
@@ -4273,9 +4283,9 @@ function PrinterCard({
? t('printers.permission.noControl')
: !isActivePrint
? t('printers.skipObjects.onlyWhilePrinting')
- : (status.printable_objects_count ?? 0) >= 2
- ? t('printers.skipObjects.tooltip')
- : t('printers.skipObjects.requiresMultiple')
+ : objectCount === 1
+ ? t('printers.skipObjects.requiresMultiple')
+ : t('printers.skipObjects.tooltip')
}
>
diff --git a/static/assets/index-CweAJSEj.js b/static/assets/index-CVKc5Khd.js
similarity index 99%
rename from static/assets/index-CweAJSEj.js
rename to static/assets/index-CVKc5Khd.js
index 5b8a44894..d493fdaab 100644
--- a/static/assets/index-CweAJSEj.js
+++ b/static/assets/index-CVKc5Khd.js
@@ -4204,7 +4204,7 @@ void main() {
absolute left-0 z-50
${u===`top`?`bottom-full mb-2`:`top-full mt-2`}
animate-in fade-in-0 zoom-in-95 duration-150
- `,style:{maxWidth:`calc(100vw - 24px)`},onMouseEnter:w,onMouseLeave:T,children:(0,G.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:[(0,G.jsx)(`div`,{className:`text-[length:var(--pc-t10,10px)] uppercase tracking-wider text-bambu-gray font-medium`,children:n}),(0,G.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,G.jsx)(`span`,{className:`text-[length:var(--pc-t10,10px)] tracking-wide text-bambu-gray font-medium shrink-0`,children:s(`printers.amsPopup.serialNumber`)}),(0,G.jsx)(`span`,{className:`text-[length:var(--pc-t10,10px)] text-white font-mono truncate`,children:e.serial_number||`—`})]}),(0,G.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,G.jsx)(`span`,{className:`text-[length:var(--pc-t10,10px)] tracking-wide text-bambu-gray font-medium shrink-0`,children:s(`printers.amsPopup.firmwareVersion`)}),(0,G.jsx)(`span`,{className:`text-[length:var(--pc-t10,10px)] text-white font-mono truncate`,children:e.sw_ver||`—`})]}),(0,G.jsxs)(`div`,{className:`space-y-1`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(`span`,{className:`text-[length:var(--pc-t10,10px)] text-bambu-gray font-medium shrink-0`,children:s(`printers.amsPopup.friendlyName`)}),(0,G.jsx)(`div`,{className:`flex-1 h-[2px] bg-bambu-dark-tertiary/50`})]}),(0,G.jsx)(`input`,{type:`text`,value:f,onChange:e=>i&&p(e.target.value),onKeyDown:e=>e.key===`Enter`&&E(),onFocus:()=>b(!0),onBlur:()=>{b(!1),C.current&&clearTimeout(C.current),C.current=setTimeout(()=>l(!1),200)},placeholder:i?s(`printers.amsPopup.friendlyNamePlaceholder`):r?.[e.id]||`—`,disabled:!i,title:i?void 0:s(`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&&(0,G.jsxs)(`div`,{className:`space-y-1`,children:[g&&(0,G.jsx)(`p`,{className:`text-[length:var(--pc-t10,10px)] text-red-700 dark:text-red-400 break-words`,children:g}),(0,G.jsxs)(`div`,{className:`flex gap-1 justify-end`,children:[(0,G.jsx)(`button`,{onClick:E,disabled:m,className:`px-2 py-0.5 text-[length:var(--pc-t10,10px)] bg-bambu-green text-white rounded hover:bg-bambu-green/80 disabled:opacity-50`,children:s(`printers.amsPopup.save`)}),r?.[e.id]&&(0,G.jsx)(`button`,{onClick:async()=>{if(i){h(!0),_(null);try{await Z.deleteAmsLabel(t,e.id,e.serial_number),a(),l(!1)}catch(e){_(e instanceof Error?e.message:String(e))}finally{h(!1)}}},disabled:m,className:`px-2 py-0.5 text-[length:var(--pc-t10,10px)] bg-bambu-dark-tertiary text-bambu-gray rounded hover:bg-bambu-dark-tertiary/70 disabled:opacity-50`,children:s(`printers.amsPopup.clear`)})]})]})]})]})})]})}var pG={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}},mG={1:1,2:1,3:1.2,4:1.4};function NOe(e){let t=mG[e]??1,n=e=>`${Math.round(e*t*10)/10}px`;return{"--pc-t8":n(8),"--pc-t9":n(9),"--pc-t10":n(10),"--pc-t11":n(11),"--pc-i2":n(8),"--pc-i25":n(10),"--pc-i3":n(12),"--pc-i35":n(14),"--pc-i4":n(16),"--pc-i5":n(20),"--pc-i7":n(28)}}function POe({printerId:e,dryingActive:t,timeFormat:n}){let{t:r}=U(),i=co(),{showToast:a}=zd(),{data:o=[]}=K({queryKey:KW,queryFn:()=>Z.listScheduledDryings(),refetchInterval:3e4});(0,y.useEffect)(()=>{t&&i.invalidateQueries({queryKey:KW})},[t,i]);let s=q({mutationFn:e=>Z.cancelScheduledDrying(e),onSuccess:()=>i.invalidateQueries({queryKey:KW}),onError:e=>a(e.message||r(`printers.drying.scheduleFailed`),`error`)}),c=o.filter(t=>t.printer_id===e&&(t.status===`pending`||t.status===`failed`));return c.length===0?null:(0,G.jsx)(`div`,{className:`mt-2 space-y-1`,children:c.map(e=>{let t=e.status===`failed`,i=dOe(e.waiting_reason);return(0,G.jsxs)(`div`,{"data-testid":t?`scheduled-drying-failed`:`scheduled-drying-pending`,className:`flex items-center justify-between px-2 py-1 rounded-lg text-[length:var(--pc-t11,11px)] ${t?`bg-red-500/10 border border-red-500/30`:`bg-amber-500/10 border border-amber-500/30`}`,children:[(0,G.jsx)(`span`,{className:t?`text-red-700 dark:text-red-400`:`text-amber-700 dark:text-amber-400`,children:t?r(`printers.drying.scheduleFailedReason`,{reason:e.error_message||r(`printers.drying.scheduleFailedUnknown`)}):(0,G.jsxs)(G.Fragment,{children:[e.start_after?r(`printers.drying.scheduledFor`,{time:Yf(e.start_after,n)}):r(`printers.drying.scheduledAsap`),i&&(0,G.jsx)(`span`,{className:`ml-1 opacity-80`,children:r(i)})]})}),(0,G.jsx)(`button`,{onClick:()=>s.mutate(e.id),disabled:s.isPending,title:r(t?`printers.drying.dismissFailed`:`printers.drying.cancelScheduled`),className:`text-bambu-gray hover:text-red-400 transition-colors disabled:opacity-50 disabled:cursor-not-allowed`,children:(0,G.jsx)(Qu,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`})})]},e.id)})})}function hG({printer:e,hideIfDisconnected:t,maintenanceInfo:n,viewMode:r=`expanded`,cardSize:i=2,amsThresholds:a,spoolmanEnabled:o=!1,linkedSpools:s,spoolmanUrl:c,spoolmanSyncMode:l,onGetAssignment:u,onUnassignSpool:d,spoolmanSpools:f,spoolmanSlotAssignments:p,spoolmanLoading:m=!1,onUnassignSpoolmanSpool:h,timeFormat:g=`system`,cameraViewMode:_=`window`,onOpenEmbeddedCamera:v,onSelectCameraViewMode:b,checkPrinterFirmware:x=!0,dryingPresets:S=pG,requirePlateClear:C=!1,selectionMode:w=!1,isSelected:T=!1,onToggleSelect:E,onOpenCompactCard:D,nozzleTempPresets:O=mm,bedTempPresets:k=hm,chamberTempPresets:A=gm,fanSpeedPresets:j=_m,aiDetectionEnabled:M=!1,aiDetection:N,aiLastError:P=null}){let{t:F}=U(),I=co(),L=or(),{showToast:R}=zd(),{hasPermission:z}=Td(),[B,V]=(0,y.useState)(!1),[ee,te]=(0,y.useState)(!1),[ne,re]=(0,y.useState)(!0),[ie,ae]=(0,y.useState)(!1),[oe,se]=(0,y.useState)(!1),[H,ce]=(0,y.useState)(!1),[le,ue]=(0,y.useState)(!1),[de,fe]=(0,y.useState)(!1),[pe,me]=(0,y.useState)(null),[he,ge]=(0,y.useState)(!1),[_e,ve]=(0,y.useState)(!1),[ye,be]=(0,y.useState)(!1),[xe,Se]=(0,y.useState)(()=>kee(e.id)),Ce=(0,y.useCallback)(()=>{Se(t=>{let n=!t;return Aee(e.id,n),n})},[e.id]),[we,Te]=(0,y.useState)(!1),[Ee,De]=(0,y.useState)(!1),[Oe,ke]=(0,y.useState)(null),[Ae,je]=(0,y.useState)(null),[Me,Ne]=(0,y.useState)(null),[Pe,Fe]=(0,y.useState)(null),[Ie,Le]=(0,y.useState)(10),[Re,ze]=(0,y.useState)(!1),[Be,Ve]=(0,y.useState)(!1),[He,Ue]=(0,y.useState)(!1),[We,Ge]=(0,y.useState)(!1),[Ke,qe]=(0,y.useState)(!1),Je=(0,y.useCallback)(()=>Ge(!1),[]),[Ye,Xe]=(0,y.useState)(null),[Ze,Qe]=(0,y.useState)(null),[$e,et]=(0,y.useState)(`n3f`),[tt,nt]=(0,y.useState)(`PLA`),[rt,it]=(0,y.useState)(50),[at,ot]=(0,y.useState)(4),[st,ct]=(0,y.useState)(!1),[lt,ut]=(0,y.useState)(`now`),[dt,ft]=(0,y.useState)(120),[pt,mt]=(0,y.useState)(``),[ht,gt]=(0,y.useState)(null),[_t,vt]=(0,y.useState)(null),yt=(0,y.useCallback)((e,t)=>{let n=Dee(e.tray.find(e=>e.tray_type)?.tray_type,S),r=S[n]??pG.PLA,i=e.module_type;nt(n),it(r[i]||r.n3f),ot(i===`n3s`?r.n3s_hours:r.n3f_hours),ct(!1),ut(`now`),ft(120),mt(``),et(e.module_type),Qe(e.id),vt(t)},[S]);(0,y.useLayoutEffect)(()=>{if(Ze===null||!_t)return;let e=()=>{gt(im({triggerRect:_t.getBoundingClientRect(),popoverWidth:sOe,estimatedHeight:cOe,horizontalAlign:`center`}))};return e(),window.addEventListener(`resize`,e),window.addEventListener(`scroll`,e,!0),()=>{window.removeEventListener(`resize`,e),window.removeEventListener(`scroll`,e,!0)}},[Ze,_t]);let bt=(0,y.useRef)(null),xt=(0,y.useRef)(!1),[St,Ct]=(0,y.useState)(null),[wt,Tt]=(0,y.useState)(!1),[Et,Dt]=(0,y.useState)(!1),Ot=(0,y.useRef)(null),[kt,At]=(0,y.useState)(null),jt=(0,y.useRef)(0),[Mt,Nt]=(0,y.useState)(null),[Pt,Ft]=(0,y.useState)(null),[It,Lt]=(0,y.useState)(null),[Rt,zt]=(0,y.useState)(null),[Bt,Vt]=(0,y.useState)(null),[Ht,Ut]=(0,y.useState)(!1),[Wt,Gt]=(0,y.useState)(null),[Kt,qt]=(0,y.useState)(!1),[Jt,Yt]=(0,y.useState)(!1),[Xt,Zt]=(0,y.useState)(null),[Qt,$t]=(0,y.useState)(!1),[en,tn]=(0,y.useState)(!1),{data:W}=K({queryKey:[`printerStatus`,e.id],queryFn:()=>Z.getPrinterStatus(e.id),refetchInterval:3e4}),{data:nn}=K({queryKey:[`firmwareUpdate`,e.id],queryFn:()=>vd.checkPrinterUpdate(e.id),staleTime:300*1e3,refetchInterval:300*1e3,enabled:x&&z(`firmware:read`)}),rn=(0,y.useMemo)(()=>{let e=new Set;if(W?.ams)for(let t of W.ams)for(let n of t.tray||[])n.tray_info_idx&&e.add(n.tray_info_idx);for(let t of W?.vt_tray??[])t.tray_info_idx&&e.add(t.tray_info_idx);if(W?.nozzle_rack)for(let t of W.nozzle_rack)t.filament_id&&e.add(t.filament_id);return Array.from(e)},[W?.ams,W?.vt_tray,W?.nozzle_rack]),an=(0,y.useMemo)(()=>{let e=new Set;if(W?.ams)for(let t of W.ams)for(let n of t.tray||[])n.tray_type&&e.add(n.tray_type.toUpperCase());for(let t of W?.vt_tray??[])t.tray_type&&e.add(t.tray_type.toUpperCase());return e},[W?.ams,W?.vt_tray]),on=(0,y.useMemo)(()=>{let e=new Set;if(W?.ams){for(let t of W.ams)for(let n of t.tray||[])if(n.tray_type&&n.tray_color){let t=n.tray_color.replace(`#`,``).toLowerCase().slice(0,6);e.add(`${n.tray_type.toUpperCase()}:${t}`)}}for(let t of W?.vt_tray??[])if(t.tray_type&&t.tray_color){let n=t.tray_color.replace(`#`,``).toLowerCase().slice(0,6);e.add(`${t.tray_type.toUpperCase()}:${n}`)}return e},[W?.ams,W?.vt_tray]),sn=(0,y.useMemo)(()=>{let e=new Set;if(W?.ams){for(let t of W.ams)for(let n of t.tray||[])if(n.tray_type&&n.tray_color){let t=n.tray_color.replace(`#`,``).toLowerCase().slice(0,6);e.add(`${n.tray_type.toUpperCase()}:${t}:${n.tray_info_idx||``}`)}}for(let t of W?.vt_tray??[])if(t.tray_type&&t.tray_color){let n=t.tray_color.replace(`#`,``).toLowerCase().slice(0,6);e.add(`${t.tray_type.toUpperCase()}:${n}:${t.tray_info_idx||``}`)}return e},[W?.ams,W?.vt_tray]),{data:cn}=K({queryKey:[`filamentInfo`,rn],queryFn:()=>Z.getFilamentInfo(rn),enabled:rn.length>0,staleTime:300*1e3}),{data:ln}=K({queryKey:[`slotPresets`,e.id],queryFn:()=>Z.getSlotPresets(e.id),staleTime:120*1e3}),un=W?.state===`RUNNING`||W?.state===`PAUSE`?W?.current_archive_id??null:null,{data:dn}=K({queryKey:[`archive-plates`,un],queryFn:()=>Z.getArchivePlates(un),enabled:un!=null,staleTime:300*1e3}),fn=!dn?.is_multi_plate||W?.current_plate_id==null?null:dn.plates.find(e=>e.index===W.current_plate_id)?.name||F(`printers.plateNumber`,`Plate {{number}}`,{number:W.current_plate_id}),{data:pn,refetch:mn}=K({queryKey:[`amsLabels`,e.id],queryFn:()=>Z.getAmsLabels(e.id),staleTime:300*1e3}),[hn,gn]=(0,y.useState)(null);(0,y.useEffect)(()=>{W?.wifi_signal!=null&&gn(W.wifi_signal)},[W?.wifi_signal]);let _n=W?.wifi_signal??hn,vn=(0,y.useRef)(void 0);(0,y.useEffect)(()=>{W?.connected!==void 0&&(vn.current=W.connected)},[W?.connected]);let yn=W?.connected??vn.current,bn=(0,y.useRef)({});(0,y.useEffect)(()=>{W?.ams_extruder_map&&Object.keys(W.ams_extruder_map).length>0&&(bn.current=W.ams_extruder_map)},[W?.ams_extruder_map]);let xn=W?.ams_extruder_map&&Object.keys(W.ams_extruder_map).length>0?W.ams_extruder_map:bn.current,Sn=(0,y.useRef)({});(0,y.useEffect)(()=>{W?.ams_switch_inlet&&Object.keys(W.ams_switch_inlet).length>0&&(Sn.current=W.ams_switch_inlet)},[W?.ams_switch_inlet]);let Cn=W?.fila_switch?.installed===!0,wn=W?.ams_switch_inlet&&Object.keys(W.ams_switch_inlet).length>0?W.ams_switch_inlet:Sn.current,Tn=(0,y.useRef)([]);(0,y.useEffect)(()=>{W?.ams&&W.ams.length>0&&(Tn.current=W.ams)},[W?.ams]);let En=W?.ams&&W.ams.length>0?W.ams:Tn.current;(0,y.useEffect)(()=>{if(!St)return;let e=En.find(e=>e.id===St.amsId);e&&(e.dry_time>0||e.dry_status>0)&&Ct(null)},[St,En]),(0,y.useEffect)(()=>{if(!St)return;let e=setTimeout(()=>{Ct(null),R(F(`printers.drying.toastNotStarted`),`error`)},TOe);return()=>clearTimeout(e)},[St,R,F]);let Dn=(0,y.useRef)(void 0),On=W?.tray_now;On!==void 0&&On!==255?Dn.current=On:On===255&&(Dn.current=void 0);let kn=On!==void 0&&On!==255?On:Dn.current,An=W?.expected_tray??null,jn=W?.previous_tray??null,Mn=e=>{if(e===null)return null;if(e===254)return F(`printers.expectedSlot.external`);if(e>=128&&e<=135)return pn?.[e]||cp(e,1);let t=Math.floor(e/4),n=e%4;return F(`printers.expectedSlot.label`,{ams:pn?.[t]||cp(t,4),slot:n+1})},Nn=W?.state===`PAUSE`?{expectedSlotLabel:Mn(An),ranOutSlotLabel:Mn(jn)}:null,{data:Pn}=K({queryKey:[`smartPlugByPrinter`,e.id],queryFn:()=>Z.getSmartPlugByPrinter(e.id)}),{data:Fn}=K({queryKey:[`scriptPlugsByPrinter`,e.id],queryFn:()=>Z.getScriptPlugsByPrinter(e.id)}),{data:In}=K({queryKey:[`smartPlugStatus`,Pn?.id],queryFn:()=>Pn?Z.getSmartPlugStatus(Pn.id):null,enabled:!!Pn,refetchInterval:1e4}),{data:Ln}=K({queryKey:[`queue`,e.id,`pending`],queryFn:()=>Z.getQueue(e.id,`pending`)}),Rn=(0,y.useMemo)(()=>Ln?.length?pm(Ln,an,on,sn).length:0,[Ln,an,on,sn]),{data:zn}=K({queryKey:[`queue`,e.id,`printing`],queryFn:()=>Z.getQueue(e.id,`printing`),enabled:W?.state===`RUNNING`}),{data:Bn}=K({queryKey:[`currentPrintUser`,e.id],queryFn:()=>Z.getCurrentPrintUser(e.id),enabled:W?.state===`RUNNING`}),Vn=zn?.[0]?.created_by_username||Bn?.username,{data:Hn}=K({queryKey:[`archives`,e.id,`last`],queryFn:()=>Z.getArchives(e.id,1,0),enabled:W?.connected&&W?.state!==`RUNNING`}),Un=Hn?.[0],Wn=W?.state===`RUNNING`||W?.state===`PAUSE`,Gn=C&&W?.awaiting_plate_clear===!0,Kn=Gn&&!Wn,qn=W?.current_print&&Wn?xee(W.subtask_name||W.current_print||null,W.gcode_file,F,fn):null,[Jn,Yn]=(0,y.useState)(null);(0,y.useEffect)(()=>{qn?Yn({name:qn,coverUrl:W?.cover_url??null}):Gn||Yn(null)},[qn,Gn,W?.cover_url]);let Xn=!C||!W?.connected?null:Wn?{label:F(`printers.plateStatus.inUse`),className:`bg-blue-100 dark:bg-blue-500/20 text-blue-700 dark:text-blue-400`}:W.awaiting_plate_clear?{label:F(`printers.plateStatus.notCleared`),className:`bg-yellow-100 dark:bg-yellow-500/20 text-yellow-700 dark:text-yellow-400`}:{label:F(`printers.plateStatus.cleared`),className:`bg-status-ok/20 text-status-ok`},Zn=Xn?(0,G.jsx)(`span`,{className:`inline-flex flex-shrink-0 items-center rounded-full px-2 py-0.5 text-[length:var(--pc-t10,10px)] font-medium ${Xn.className}`,children:Xn.label}):null,Qn=t&&yn===!1,$n=q({mutationFn:t=>Z.deletePrinter(e.id,t.deleteArchives),onSuccess:()=>{I.invalidateQueries({queryKey:[`printers`]}),I.invalidateQueries({queryKey:[`archives`]}),I.invalidateQueries({queryKey:[`maintenanceOverview`]})},onError:e=>R(e.message||F(`printers.toast.failedToDelete`),`error`)}),er=q({mutationFn:()=>Z.connectPrinter(e.id),onSuccess:()=>{I.invalidateQueries({queryKey:[`printerStatus`,e.id]})}}),tr=q({mutationFn:()=>Z.refreshPrinterStatus(e.id),onSuccess:()=>{I.invalidateQueries({queryKey:[`printerStatus`,e.id]}),R(F(`printers.forceRefreshSuccess`),`success`)},onError:e=>R(e.message||F(`printers.toast.failedToSendCommand`),`error`)}),nr=q({mutationFn:e=>Z.unlinkSpool(e),onSuccess:e=>{R(F(`spoolman.unlinkSuccess`)||e?.message,`success`),I.invalidateQueries({queryKey:[`linked-spools`]}),I.invalidateQueries({queryKey:[`unlinked-spools`]}),I.invalidateQueries({queryKey:[`spoolman-slot-assignments`]})},onError:e=>{R(e.message||F(`spoolman.unlinkFailed`),`error`)}}),rr=q({mutationFn:({amsId:t,temp:n,duration:r,filament:i,rotateTray:a})=>Z.startDrying(e.id,t,n,r,i,a),onSuccess:(t,{amsId:n})=>{Qe(null),Ct({amsId:n}),R(F(`printers.drying.toastCommandSent`),`success`),I.invalidateQueries({queryKey:[`printerStatus`,e.id]})},onError:e=>R(e.message||F(`printers.toast.failedToSendCommand`),`error`)}),ir=q({mutationFn:t=>Z.createScheduledDrying({printer_id:e.id,ams_id:t.amsId,temp:t.temp,duration_hours:t.duration,filament:t.filament,rotate_tray:t.rotateTray,start_after:t.startAfter}),onSuccess:()=>{I.invalidateQueries({queryKey:KW}),Qe(null)},onError:e=>R(e.message||F(`printers.drying.scheduleFailed`),`error`)}),ar=q({mutationFn:t=>Z.stopDrying(e.id,t),onSuccess:()=>{Ct(null),R(F(`printers.drying.toastStopped`),`success`),I.invalidateQueries({queryKey:[`printerStatus`,e.id]})},onError:e=>R(e.message||F(`printers.toast.failedToSendCommand`),`error`)}),sr=q({mutationFn:t=>Z.setAmsFilamentBackup(e.id,t),onSuccess:(t,n)=>{I.invalidateQueries({queryKey:[`printerStatus`,e.id]}),I.invalidateQueries({queryKey:[`printer-status`,e.id]}),R(F(n?`printers.amsBackup.toastEnabled`:`printers.amsBackup.toastDisabled`),`success`)},onError:e=>R(e.message||F(`printers.toast.failedToSendCommand`),`error`)}),cr=q({mutationFn:e=>Pn?Z.controlSmartPlug(Pn.id,e):Promise.reject(`No plug`),onSuccess:()=>{I.invalidateQueries({queryKey:[`smartPlugStatus`,Pn?.id]})}}),lr=q({mutationFn:e=>Pn?Z.updateSmartPlug(Pn.id,{auto_off:e}):Promise.reject(`No plug`),onSuccess:()=>{I.invalidateQueries({queryKey:[`smartPlugByPrinter`,e.id]}),I.invalidateQueries({queryKey:[`smart-plugs`]})}}),ur=q({mutationFn:({id:e,action:t})=>Z.controlSmartPlug(e,t),onSuccess:()=>{R(F(`printers.toast.scriptTriggered`))},onError:e=>R(e.message||F(`printers.toast.failedToRunScript`),`error`)}),dr=q({mutationFn:()=>Z.stopPrint(e.id),onSuccess:()=>{R(F(`printers.toast.printStopped`)),I.invalidateQueries({queryKey:[`printerStatus`,e.id]})},onError:e=>R(e.message||F(`printers.toast.failedToStopPrint`),`error`)}),fr=q({mutationFn:()=>Z.pausePrint(e.id),onSuccess:()=>{R(F(`printers.toast.printPaused`)),I.invalidateQueries({queryKey:[`printerStatus`,e.id]})},onError:e=>R(e.message||F(`printers.toast.failedToPausePrint`),`error`)}),pr=q({mutationFn:()=>Z.resumePrint(e.id),onSuccess:()=>{R(F(`printers.toast.printResumed`)),I.invalidateQueries({queryKey:[`printerStatus`,e.id]})},onError:e=>R(e.message||F(`printers.toast.failedToResumePrint`),`error`)}),mr=q({mutationFn:()=>Z.clearPlate(e.id),onSuccess:()=>{R(F(`queue.clearPlateSuccess`)),I.setQueryData([`printerStatus`,e.id],e=>e&&{...e,awaiting_plate_clear:!1}),I.invalidateQueries({queryKey:[`printerStatus`,e.id]}),I.invalidateQueries({queryKey:[`queue`,e.id]})},onError:e=>R(e.message||F(`printers.toast.failedToSendCommand`),`error`)}),hr=(0,G.jsxs)(`button`,{type:`button`,onClick:()=>mr.mutate(),disabled:mr.isPending||!z(`printers:clear_plate`),className:`mt-2 w-full inline-flex items-center justify-center gap-2 px-3 py-1.5 rounded-lg bg-yellow-100 dark:bg-yellow-500/20 border border-yellow-300 dark:border-yellow-400/40 text-yellow-700 dark:text-yellow-400 hover:bg-yellow-500/30 transition-colors text-xs font-medium disabled:opacity-50`,title:z(`printers:clear_plate`)?F(`printers.plateStatus.markCleared`):F(`printers.permission.noControl`),children:[mr.isPending?(0,G.jsx)(Y,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)] animate-spin`}):(0,G.jsx)(bW,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`}),F(`printers.plateStatus.markCleared`)]}),gr=q({mutationFn:({target:t,nozzle:n})=>Z.setNozzleTemperature(e.id,t,n),onSuccess:t=>{Fe(null),R(t.message),I.invalidateQueries({queryKey:[`printerStatus`,e.id]})},onError:e=>R(e.message||F(`printers.toast.failedToSendCommand`),`error`)}),_r=q({mutationFn:t=>Z.setBedTemperature(e.id,t),onSuccess:t=>{Fe(null),R(t.message),I.invalidateQueries({queryKey:[`printerStatus`,e.id]})},onError:e=>R(e.message||F(`printers.toast.failedToSendCommand`),`error`)}),vr=q({mutationFn:t=>Z.setChamberTemperature(e.id,t),onSuccess:t=>{Fe(null),R(t.message),I.invalidateQueries({queryKey:[`printerStatus`,e.id]})},onError:e=>R(e.message||F(`printers.toast.failedToSendCommand`),`error`)}),yr=q({mutationFn:({fan:t,speed:n})=>Z.setFanSpeed(e.id,t,n),onMutate:async({fan:t,speed:n})=>{await I.cancelQueries({queryKey:[`printerStatus`,e.id]});let r=I.getQueryData([`printerStatus`,e.id]),i={part:`cooling_fan_speed`,aux:`big_fan1_speed`,aux2:`left_aux_fan_speed`,chamber:`big_fan2_speed`}[t];return I.setQueryData([`printerStatus`,e.id],e=>e&&{...e,[i]:n}),{previousStatus:r}},onSuccess:t=>{Fe(null),R(t.message),I.invalidateQueries({queryKey:[`printerStatus`,e.id]})},onError:(t,n,r)=>{r?.previousStatus&&I.setQueryData([`printerStatus`,e.id],r.previousStatus),R(t.message||F(`printers.toast.failedToSendCommand`),`error`)}}),br=q({mutationFn:t=>Z.selectExtruder(e.id,t),onMutate:async t=>{await I.cancelQueries({queryKey:[`printerStatus`,e.id]});let n=I.getQueryData([`printerStatus`,e.id]);return I.setQueryData([`printerStatus`,e.id],e=>e&&{...e,active_extruder:t}),{previousStatus:n}},onSuccess:t=>{Fe(null),R(t.message),I.invalidateQueries({queryKey:[`printerStatus`,e.id]})},onError:(t,n,r)=>{r?.previousStatus&&I.setQueryData([`printerStatus`,e.id],r.previousStatus),R(t.message||F(`printers.toast.failedToSendCommand`),`error`)}}),xr=q({mutationFn:t=>Z.setChamberLight(e.id,t),onMutate:async t=>{await I.cancelQueries({queryKey:[`printerStatus`,e.id]});let n=I.getQueryData([`printerStatus`,e.id]);return I.setQueryData([`printerStatus`,e.id],e=>({...e,chamber_light:t})),{previousStatus:n}},onSuccess:(e,t)=>{R(`Chamber light ${t?`on`:`off`}`)},onError:(t,n,r)=>{r?.previousStatus&&I.setQueryData([`printerStatus`,e.id],r.previousStatus),R(t.message||F(`printers.toast.failedToControlChamberLight`),`error`)}}),Sr=q({mutationFn:t=>Z.setPrintSpeed(e.id,t),onMutate:async t=>{await I.cancelQueries({queryKey:[`printerStatus`,e.id]});let n=I.getQueryData([`printerStatus`,e.id]);return I.setQueryData([`printerStatus`,e.id],e=>({...e,speed_level:t})),{previousStatus:n}},onError:(t,n,r)=>{r?.previousStatus&&I.setQueryData([`printerStatus`,e.id],r.previousStatus),R(t.message||F(`printers.toast.failedToSetSpeed`),`error`)}}),Cr=q({mutationFn:t=>Z.setAirductMode(e.id,t),onMutate:async t=>{await I.cancelQueries({queryKey:[`printerStatus`,e.id]});let n=I.getQueryData([`printerStatus`,e.id]);return I.setQueryData([`printerStatus`,e.id],e=>({...e,airduct_mode:t===`cooling`?0:1})),{previousStatus:n}},onError:(t,n,r)=>{r?.previousStatus&&I.setQueryData([`printerStatus`,e.id],r.previousStatus),R(t.message||F(`printers.toast.failedToSendCommand`),`error`)}}),wr=q({mutationFn:({distance:t})=>Z.bedJog(e.id,t),onError:e=>R(e.message||F(`printers.toast.failedToSendCommand`),`error`)}),Tr=q({mutationFn:({x:t,y:n})=>Z.xyJog(e.id,t,n),onError:e=>R(e.message||F(`printers.toast.failedToSendCommand`),`error`)}),Er=q({mutationFn:t=>Z.extruderJog(e.id,t),onError:e=>R(e.message||F(`printers.toast.failedToSendCommand`),`error`)}),Dr=q({mutationFn:t=>Z.homeAxes(e.id,t),onSuccess:()=>{R(F(`printers.bedJog.homingStarted`))},onError:e=>R(e.message||F(`printers.toast.failedToSendCommand`),`error`)}),Or=q({mutationFn:t=>Z.updatePrinter(e.id,{plate_detection_enabled:t}),onSuccess:()=>{I.invalidateQueries({queryKey:[`printers`]}),R(Or.variables?F(`printers.toast.plateCheckEnabled`):F(`printers.toast.plateCheckDisabled`))},onError:e=>R(e.message||F(`printers.toast.failedToUpdateSetting`),`error`)}),kr=q({mutationFn:t=>Z.updatePrinter(e.id,{is_active:t}),onSuccess:(t,n)=>{I.invalidateQueries({queryKey:[`printers`]}),I.invalidateQueries({queryKey:[`printerStatus`,e.id]}),R(F(n?`printers.maintenance.toastExited`:`printers.maintenance.toastEntered`,{name:e.name}),`success`)},onError:e=>R(e.message||F(`printers.toast.failedToUpdateSetting`),`error`)}),[Ar,jr]=(0,y.useState)(!1),Mr=()=>{W?.state===`RUNNING`||W?.state===`PAUSE`?jr(!0):kr.mutate(!1)},Nr=(W?.state===`RUNNING`||W?.state===`PAUSE`)&&(W?.printable_objects_count??0)>=2,{data:Pr}=K({queryKey:[`printableObjects`,e.id],queryFn:()=>Z.getPrintableObjects(e.id),enabled:Be||Nr,refetchInterval:Be?5e3:Nr?3e4:!1}),[Fr,Ir]=(0,y.useState)(null),Lr=(0,y.useRef)(!1),Rr=(0,y.useRef)(null),zr=(0,y.useRef)(!1),Br=q({mutationFn:({amsId:t,slotId:n})=>Z.refreshAmsSlot(e.id,t,n),onMutate:({amsId:e,slotId:t})=>{Rr.current&&clearTimeout(Rr.current),Lr.current=!1,zr.current=!1,Ir({amsId:e,slotId:t}),setTimeout(()=>{zr.current=!0},2e3),Rr.current=setTimeout(()=>{Ir(null)},3e4)},onSuccess:e=>{R(e.message||F(`printers.toast.rfidRereadInitiated`))},onError:e=>{R(e.message||F(`printers.toast.failedToRereadRfid`),`error`),Rr.current&&clearTimeout(Rr.current),Ir(null)}}),Vr=q({mutationFn:({trayId:t})=>Z.loadAmsTray(e.id,t),onSuccess:e=>{R(e.message||F(`printers.toast.loadInitiated`))},onError:e=>{R(e.message||F(`printers.toast.failedToLoad`),`error`)}}),Hr=q({mutationFn:()=>Z.unloadAms(e.id),onSuccess:e=>{R(e.message||F(`printers.toast.unloadInitiated`))},onError:e=>{R(e.message||F(`printers.toast.failedToUnload`),`error`)}}),[Ur,Wr]=(0,y.useState)(null),[Gr,Kr]=(0,y.useState)(null),qr=async()=>{try{Wr(await Z.getPlateReferences(e.id))}catch{}},Jr=()=>{Or.mutate(!e.plate_detection_enabled)},Yr=async()=>{qt(!0),Gt(null);let t=W?.chamber_light===!1;tn(t),t&&(await Z.setChamberLight(e.id,!0),await new Promise(e=>setTimeout(e,2500)));try{Gt(await Z.checkPlateEmpty(e.id,{includeDebugImage:!0})),qr()}catch(n){R(n instanceof Error?n.message:F(`printers.toast.failedToCheckPlate`),`error`),t&&(await Z.setChamberLight(e.id,!1),tn(!1))}finally{qt(!1)}},Xr=(0,y.useCallback)(async()=>{Gt(null),en&&(await Z.setChamberLight(e.id,!1),tn(!1))},[en,e.id]),Zr=async t=>{Yt(!0);try{let n=await Z.calibratePlateDetection(e.id,{label:t});n.success?(R(n.message||F(`printers.toast.calibrationSaved`),`success`),qr(),Gt(await Z.checkPlateEmpty(e.id,{includeDebugImage:!0}))):R(n.message||F(`printers.toast.calibrationFailed`),`error`)}catch(e){R(e instanceof Error?e.message:F(`printers.toast.calibrationFailed`),`error`)}finally{Yt(!1)}},Qr=async(t,n)=>{try{await Z.updatePlateReferenceLabel(e.id,t,n),Kr(null),qr()}catch(e){R(e instanceof Error?e.message:F(`printers.toast.failedToUpdateLabel`),`error`)}},$r=async t=>{try{await Z.deletePlateReference(e.id,t),R(F(`printers.toast.referenceDeleted`),`success`),qr(),Gt(await Z.checkPlateEmpty(e.id,{includeDebugImage:!0}))}catch(e){R(e instanceof Error?e.message:F(`printers.toast.failedToDeleteReference`),`error`)}},ei=async()=>{if(Xt){$t(!0);try{await Z.updatePrinter(e.id,{plate_detection_roi:Xt}),R(F(`printers.toast.detectionAreaSaved`),`success`),Zt(null),Gt(await Z.checkPlateEmpty(e.id,{includeDebugImage:!0}))}catch(e){R(e instanceof Error?e.message:F(`printers.toast.failedToSaveDetectionArea`),`error`)}finally{$t(!1)}}};(0,y.useEffect)(()=>{let e=e=>{e.key===`Escape`&&Wt&&Xr()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[Wt,Xr]);let ti=(0,y.useRef)(null);if((0,y.useEffect)(()=>{if(!Fr)return;let e=W?.ams_status_main??0;return e!==0&&(Lr.current=!0,ti.current&&=(clearTimeout(ti.current),null)),Lr.current&&e===0&&(zr.current?(Rr.current&&clearTimeout(Rr.current),Ir(null)):ti.current||=setTimeout(()=>{Rr.current&&clearTimeout(Rr.current),Ir(null)},2e3)),()=>{ti.current&&clearTimeout(ti.current)}},[W?.ams_status_main,Fr]),(0,y.useEffect)(()=>{if(!B)return;let e=e=>{let t=e.target;Ot.current?.contains(t)||V(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[B]),Qn)return null;let ni=NOe(i),ri=()=>{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`}},ii=()=>{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`}},ai=()=>{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`}},oi=z(`library:upload`)&&z(`queue:create`),si=!fm(W),ci=e=>{e.preventDefault(),jt.current++,jt.current===1&&Tt(!0)},li=e=>{e.preventDefault(),e.dataTransfer.dropEffect=oi?`copy`:`none`},ui=e=>{e.preventDefault(),jt.current--,jt.current===0&&Tt(!1)},di=async t=>{if(t.preventDefault(),jt.current=0,Tt(!1),!oi)return;let n=Array.from(t.dataTransfer.files)[0];if(!n)return;let r=n.name.toLowerCase();if(!r.endsWith(`.gcode`)&&!r.includes(`.gcode.`)){R(F(`printers.dropNotPrintable`,`Only .gcode and .gcode.3mf files can be printed`),`error`);return}Dt(!0);try{let t=await Z.uploadLibraryFile(n,null),r=t.metadata?.sliced_for_model,i=dG(e.model);if(r&&i&&r.toLowerCase()!==i.toLowerCase()){await Z.deleteLibraryFile(t.id).catch(()=>{}),R(F(`printers.incompatibleFile`,`This file was sliced for {{slicedFor}}, but this printer is a {{printerModel}}`,{slicedFor:r,printerModel:i}),`error`);return}Xe({id:t.id,filename:t.filename})}catch{R(F(`common.uploadFailed`,`Upload failed`),`error`)}finally{Dt(!1)}},fi=t=>{r!==`compact`||w||t.target.closest(`button, a, input, select, textarea, [role="button"]`)||D?.(e.id)},pi=`!h-8 !min-h-8 !w-8 !px-0 !py-0`,mi=t=>{t===`embedded`&&v?v(e.id,e.name):om(e.id)},hi=[{mode:`window`,icon:(0,G.jsx)(tc,{className:`w-4 h-4`}),label:F(`settings.newWindow`),title:F(`settings.cameraWindowDescription`)},{mode:`embedded`,icon:(0,G.jsx)(Ol,{className:`w-4 h-4`}),label:F(`settings.embeddedOverlay`),title:F(`settings.cameraOverlayDescription`)}].map(({mode:e,icon:t,label:n,title:r})=>({icon:t,label:e===_?`${n} ✓`:n,title:r,onClick:()=>{b?.(e),mi(e)}})),gi=({amsId:e,slotId:t,loadTrayId:n,isRefreshing:r,includeRfid:i=!0})=>{let a=W?.state===`RUNNING`;return(0,G.jsxs)(G.Fragment,{children:[i&&(0,G.jsxs)(`button`,{className:`w-full px-2 py-1.5 text-left text-xs flex items-center gap-2 rounded transition-colors ${z(`printers:ams_rfid`)?`text-white hover:bg-bambu-dark-tertiary`:`text-bambu-gray/50 cursor-not-allowed`}`,onClick:n=>{n.stopPropagation(),!(a||!z(`printers:ams_rfid`))&&Br.mutate({amsId:e,slotId:t})},disabled:a||r||!z(`printers:ams_rfid`),title:a?F(`printers.bedJog.disabledWhilePrinting`):z(`printers:ams_rfid`)?void 0:F(`printers.permission.noAmsRfid`),children:[(0,G.jsx)(Rl,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)] ${r?`animate-spin`:``}`}),F(`printers.rfid.reread`)]}),(0,G.jsxs)(`button`,{className:`w-full px-2 py-1.5 text-left text-xs flex items-center gap-2 rounded transition-colors ${z(`printers:control`)?`text-white hover:bg-bambu-dark-tertiary`:`text-bambu-gray/50 cursor-not-allowed`}`,onClick:e=>{e.stopPropagation(),!(a||!z(`printers:control`))&&Vr.mutate({trayId:n})},disabled:a||!z(`printers:control`),title:a?F(`printers.bedJog.disabledWhilePrinting`):z(`printers:control`)?void 0:F(`printers.permission.noControl`),children:[(0,G.jsx)(el,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),F(`printers.ams.load`)]}),(0,G.jsxs)(`button`,{className:`w-full px-2 py-1.5 text-left text-xs flex items-center gap-2 rounded transition-colors ${z(`printers:control`)?`text-white hover:bg-bambu-dark-tertiary`:`text-bambu-gray/50 cursor-not-allowed`}`,onClick:e=>{e.stopPropagation(),!(a||!z(`printers:control`))&&Hr.mutate()},disabled:a||!z(`printers:control`),title:a?F(`printers.bedJog.disabledWhilePrinting`):z(`printers:control`)?void 0:F(`printers.permission.noControl`),children:[(0,G.jsx)(tl,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),F(`printers.ams.unload`)]})]})},_i=(0,G.jsxs)(`div`,{ref:Ot,className:`relative flex-shrink-0`,children:[(0,G.jsx)(Q,{variant:`secondary`,size:`sm`,onClick:()=>V(!B),title:F(`common.more`,`More`),className:pi,children:(0,G.jsx)(Zs,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})}),B&&(0,G.jsxs)(`div`,{className:`absolute left-0 bottom-full mb-2 w-48 bg-bambu-dark-secondary border border-bambu-dark-tertiary rounded-lg shadow-lg z-20`,children:[(0,G.jsxs)(`button`,{className:`w-full px-4 py-2 text-left text-sm flex items-center gap-2 ${z(`printers:update`)?`hover:bg-bambu-dark-tertiary`:`opacity-50 cursor-not-allowed`}`,onClick:()=>{z(`printers:update`)&&(ae(!0),V(!1))},title:z(`printers:update`)?void 0:F(`printers.permission.noEdit`),children:[(0,G.jsx)(El,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`}),F(`common.edit`)]}),(0,G.jsxs)(`button`,{className:`w-full px-4 py-2 text-left text-sm hover:bg-bambu-dark-tertiary flex items-center gap-2`,onClick:()=>{Ge(!0),V(!1)},children:[(0,G.jsx)(Bc,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`}),F(`printers.printerInformation`)]}),(0,G.jsxs)(`button`,{className:`w-full px-4 py-2 text-left text-sm flex items-center gap-2 ${z(`printers:update`)?`hover:bg-bambu-dark-tertiary`:`opacity-50 cursor-not-allowed`}`,disabled:kr.isPending||!z(`printers:update`),onClick:()=>{z(`printers:update`)&&(V(!1),e.is_active===!1?kr.mutate(!0):Mr())},title:z(`printers:update`)?void 0:F(`printers.permission.noEdit`),children:[(0,G.jsx)(Zu,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`}),e.is_active===!1?F(`printers.maintenance.menuExit`):F(`printers.maintenance.menuEnter`)]}),(0,G.jsxs)(`button`,{className:`w-full px-4 py-2 text-left text-sm hover:bg-bambu-dark-tertiary flex items-center gap-2`,onClick:()=>{er.mutate(),V(!1)},children:[(0,G.jsx)(Rl,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`}),F(`printers.reconnect`)]}),(0,G.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:tr.isPending,onClick:()=>{tr.mutate(),V(!1)},children:[(0,G.jsx)(Vl,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)] ${tr.isPending?`animate-spin`:``}`}),F(`printers.forceRefresh`)]}),(0,G.jsxs)(`button`,{className:`w-full px-4 py-2 text-left text-sm hover:bg-bambu-dark-tertiary flex items-center gap-2`,onClick:()=>{ce(!0),V(!1)},children:[(0,G.jsx)(wu,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`}),F(`printers.mqttDebug`)]}),(0,G.jsxs)(`button`,{className:`w-full px-4 py-2 text-left text-sm hover:bg-bambu-dark-tertiary flex items-center gap-2`,onClick:()=>{qe(!0),V(!1)},children:[(0,G.jsx)(vu,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`}),F(`diagnostic.runButton`)]}),(0,G.jsxs)(`button`,{className:`w-full px-4 py-2 text-left text-sm flex items-center gap-2 ${z(`printers:delete`)?`text-red-700 dark:text-red-400 hover:bg-bambu-dark-tertiary`:`text-red-700/50 dark:text-red-400/50 cursor-not-allowed`}`,onClick:()=>{z(`printers:delete`)&&(te(!0),V(!1))},title:z(`printers:delete`)?void 0:F(`printers.permission.noDelete`),children:[(0,G.jsx)(Au,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`}),F(`common.delete`)]})]})]});return(0,G.jsxs)(jd,{id:`printer-card-${e.id}`,className:`relative flex h-full flex-col ${T?`ring-2 ring-bambu-green`:``} ${w||r===`compact`?`cursor-pointer`:``}`,style:ni,onClick:fi,onDragEnter:ci,onDragOver:li,onDragLeave:ui,onDrop:di,children:[w&&(0,G.jsx)(`div`,{className:`absolute inset-0 z-20 flex items-start p-2`,onClick:t=>{t.stopPropagation(),E?.(e.id)},children:T?(0,G.jsx)(mu,{className:`w-[var(--pc-i5,1.25rem)] h-[var(--pc-i5,1.25rem)] text-bambu-green`}):(0,G.jsx)(gu,{className:`w-[var(--pc-i5,1.25rem)] h-[var(--pc-i5,1.25rem)] text-bambu-gray`})}),(wt||Et)&&(0,G.jsx)(`div`,{className:`absolute inset-0 z-10 rounded-xl border-2 border-dashed flex items-center justify-center transition-colors ${Et?`bg-bambu-green/10 border-bambu-green/50`:oi?`bg-bambu-green/10 border-bambu-green`:`bg-red-50 dark:bg-red-500/10 border-red-300 dark:border-red-500/50`}`,children:(0,G.jsx)(`div`,{className:`text-center`,children:Et?(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(Y,{className:`w-8 h-8 mx-auto mb-2 text-bambu-green animate-spin`}),(0,G.jsx)(`p`,{className:`text-sm font-medium text-bambu-green`,children:F(`common.uploading`,`Uploading...`)})]}):oi?(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(Pl,{className:`w-8 h-8 mx-auto mb-2 text-bambu-green`}),(0,G.jsx)(`p`,{className:`text-sm font-medium text-bambu-green`,children:F(si?`printers.dropToQueue`:`printers.dropToPrint`)})]}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(Qu,{className:`w-8 h-8 mx-auto mb-2 text-red-600 dark:text-red-400`}),(0,G.jsx)(`p`,{className:`text-sm font-medium text-red-700 dark:text-red-400`,children:z(`library:upload`)?F(`fileManager.noPermissionAddToQueue`):F(`fileManager.noPermissionUpload`)})]})})}),(0,G.jsxs)(Nd,{className:`${i>=3?`p-5`:``} flex flex-1 flex-col`,children:[(0,G.jsxs)(`div`,{className:ai(),children:[(0,G.jsx)(`div`,{className:`flex items-start justify-between gap-2`,children:(0,G.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0 flex-1`,children:[(0,G.jsx)(`img`,{src:lm(e.model),alt:e.model||F(`common.printer`),className:`object-contain rounded-lg flex-shrink-0 ${ri()}`}),(0,G.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,G.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,G.jsx)(`h3`,{className:`font-semibold text-white ${ii()}`,children:e.name}),r===`compact`&&(()=>{let e=W?.connected&&W.hms_errors?Cm(W.hms_errors):[],t=e.some(e=>e.severity<=2),n=e.length>0,r=W?.connected?t?`bg-status-error`:n?`bg-status-warning`:`bg-status-ok`:`bg-status-error`,i=W?.connected?n?`${e.length} HMS ${e.length===1?`error`:`errors`}`:F(`printers.connection.connected`):F(`printers.connection.offline`);return(0,G.jsx)(`div`,{className:`w-[var(--pc-i2,0.5rem)] h-[var(--pc-i2,0.5rem)] rounded-full flex-shrink-0 ${r}`,title:i})})()]}),r===`compact`&&Kn&&(0,G.jsx)(`button`,{type:`button`,onClick:()=>mr.mutate(),disabled:mr.isPending||!z(`printers:clear_plate`),"aria-label":F(`printers.plateStatus.markCleared`),className:`inline-flex h-5 w-5 flex-shrink-0 items-center justify-center rounded-md bg-yellow-100 dark:bg-yellow-500/20 border border-yellow-300 dark:border-yellow-400/40 text-yellow-700 dark:text-yellow-400 hover:bg-yellow-500/30 transition-colors disabled:opacity-50`,title:z(`printers:clear_plate`)?F(`printers.plateStatus.markCleared`):F(`printers.permission.noControl`),children:mr.isPending?(0,G.jsx)(Y,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)] animate-spin`}):(0,G.jsx)(bW,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`})})]}),(0,G.jsxs)(`p`,{className:`text-sm text-bambu-gray`,children:[e.model||`Unknown Model`,r===`expanded`&&W?.nozzles&&W.nozzles[0]?.nozzle_diameter&&(0,G.jsxs)(`span`,{className:`ml-1.5 text-bambu-gray`,title:W.nozzles[0].nozzle_type||`Nozzle`,children:[`• `,W.nozzles[0].nozzle_diameter,`mm`]}),r===`expanded`&&n&&n.total_print_hours>0&&(0,G.jsxs)(`span`,{className:`ml-2 text-bambu-gray`,children:[(0,G.jsx)(As,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)] inline-block mr-1`}),Math.round(n.total_print_hours),`h`]})]})]})]})}),r===`expanded`&&(0,G.jsx)(`div`,{className:`mt-2`,children:(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[e.is_active===!1?(0,G.jsxs)(`span`,{className:`flex items-center gap-1.5 px-2 py-1 rounded-full text-xs bg-amber-100 dark:bg-amber-500/20 text-amber-700 dark:text-amber-400`,title:F(`printers.maintenance.subtitle`),children:[(0,G.jsx)(Zu,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),F(`printers.maintenance.pillLabel`)]}):(0,G.jsxs)(`span`,{className:`flex items-center gap-1.5 px-2 py-1 rounded-full text-xs ${W?.connected?`bg-status-ok/20 text-status-ok`:`bg-status-error/20 text-status-error`}`,children:[W?.connected?(0,G.jsx)(Jc,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}):(0,G.jsx)(Iu,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),W?.connected?F(`printers.connection.connected`):F(`printers.connection.offline`)]}),e.is_active!==!1&&!W?.connected&&(0,G.jsxs)(`button`,{onClick:()=>qe(!0),className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs cursor-pointer bg-bambu-dark-tertiary text-bambu-gray hover:text-white transition-colors`,title:F(`diagnostic.runButton`),children:[(0,G.jsx)(vu,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),F(`diagnostic.runButton`)]}),W?.connected&&W?.wired_network&&(0,G.jsxs)(`span`,{className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs bg-status-ok/20 text-status-ok`,title:F(`printers.connection.ethernet`,`Ethernet`),children:[(0,G.jsx)(es,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),F(`printers.connection.ethernet`,`Ethernet`)]}),W?.connected&&!W?.wired_network&&_n!=null&&(0,G.jsxs)(`span`,{className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs ${_n>=-50||_n>=-60?`bg-status-ok/20 text-status-ok`:_n>=-70?`bg-status-warning/20 text-status-warning`:_n>=-80?`bg-orange-500/20 text-orange-600`:`bg-status-error/20 text-status-error`}`,title:`WiFi: ${_n} dBm - ${F(dm(_n).labelKey)}`,children:[(0,G.jsx)(au,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),_n,`dBm`]}),W?.connected&&(()=>{let e=W.hms_errors?Cm(W.hms_errors):[];return(0,G.jsxs)(`button`,{onClick:()=>ge(!0),className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs cursor-pointer hover:opacity-80 transition-opacity ${e.length>0?e.some(e=>e.severity<=2)?`bg-status-error/20 text-status-error`:`bg-status-warning/20 text-status-warning`:`bg-status-ok/20 text-status-ok`}`,title:F(`printers.clickToViewHmsErrors`),children:[(0,G.jsx)(Nu,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),e.length>0?e.length:`OK`]})})(),M&&(()=>{let e=N?N.class===`failure`||N.class===`warning`?N.class:`safe`:`idle`;return(0,G.jsxs)(`button`,{onClick:()=>ve(!0),className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs cursor-pointer hover:opacity-80 transition-opacity ${e===`failure`?`bg-status-error/20 text-status-error`:e===`warning`?`bg-status-warning/20 text-status-warning`:e===`safe`?`bg-status-ok/20 text-status-ok`:`bg-bambu-dark-tertiary text-bambu-gray`}`,title:N?F(`printers.aiDetection.tooltip`,{status:F(`printers.aiDetection.${e}`),score:N.score.toFixed(3)}):F(`printers.aiDetection.tooltipIdle`),children:[(0,G.jsx)(Gl,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),F(`printers.aiDetection.${e}`)]})})(),n&&(0,G.jsxs)(`button`,{onClick:()=>L(`/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`:F(`printers.maintenanceUpToDate`),children:[(0,G.jsx)(Zu,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),n.due_count>0||n.warning_count>0?n.due_count+n.warning_count:`OK`]}),Rn>0&&(0,G.jsxs)(`button`,{onClick:()=>L(`/queue`),className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs bg-indigo-100 dark:bg-indigo-500/20 text-indigo-700 dark:text-indigo-400 hover:opacity-80 transition-opacity`,title:F(`printers.queue.inQueue`,{count:Rn}),children:[(0,G.jsx)(Wc,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),Rn]}),x&&nn?.current_version&&nn?.latest_version?(0,G.jsxs)(`button`,{onClick:()=>Ut(!0),className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs hover:opacity-80 transition-opacity ${nn.update_available?`bg-orange-100 dark:bg-orange-500/20 text-orange-700 dark:text-orange-400`:`bg-status-ok/20 text-status-ok`}`,title:nn.update_available?F(`printers.firmwareUpdateAvailable`,{current:nn.current_version,latest:nn.latest_version}):F(`printers.firmwareUpToDate`,{version:nn.current_version}),children:[nn.update_available?(0,G.jsx)(Js,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}):(0,G.jsx)(bs,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),nn.current_version]}):W?.firmware_version?(0,G.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:W.firmware_version}):null,W?.connected&&[`X1C`,`X1`,`X1E`,`X2D`,`P2S`,`H2D`,`H2D Pro`,`H2C`,`H2S`].includes(e.model??``)&&(0,G.jsx)(`span`,{className:`flex items-center px-2 py-1 rounded-full text-xs ${W.door_open?`bg-yellow-100 dark:bg-yellow-500/20 text-yellow-700 dark:text-yellow-400`:`bg-status-ok/20 text-status-ok`}`,title:W.door_open?F(`printers.door.open`):F(`printers.door.closed`),children:W.door_open?(0,G.jsx)(qs,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}):(0,G.jsx)(Ks,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`})})]})})]}),ee&&(0,G.jsx)(`div`,{className:`fixed inset-0 bg-black/50 flex items-center justify-center z-50`,children:(0,G.jsx)(jd,{className:`w-full max-w-md mx-4`,children:(0,G.jsxs)(Nd,{children:[(0,G.jsxs)(`div`,{className:`flex items-start gap-3 mb-4`,children:[(0,G.jsx)(`div`,{className:`p-2 rounded-full bg-red-100 dark:bg-red-500/20`,children:(0,G.jsx)(Nu,{className:`w-[var(--pc-i5,1.25rem)] h-[var(--pc-i5,1.25rem)] text-red-600 dark:text-red-400`})}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`h3`,{className:`text-lg font-semibold text-white`,children:F(`printers.confirm.deleteTitle`)}),(0,G.jsx)(`p`,{className:`text-sm text-bambu-gray mt-1`,children:F(`printers.confirm.deleteMessage`,{name:e.name})})]})]}),(0,G.jsx)(`div`,{className:`bg-bambu-dark rounded-lg p-3 mb-4`,children:(0,G.jsxs)(`label`,{className:`flex items-start gap-3 cursor-pointer`,children:[(0,G.jsx)(`input`,{type:`checkbox`,checked:ne,onChange:e=>re(e.target.checked),className:`mt-0.5 w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)] rounded border-bambu-gray bg-bambu-dark-secondary text-bambu-green focus:ring-bambu-green focus:ring-offset-0`}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`span`,{className:`text-sm text-white`,children:F(`printers.deleteArchives`)}),(0,G.jsx)(`p`,{className:`text-xs text-bambu-gray mt-0.5`,children:F(ne?`printers.confirm.deleteArchivesNote`:`printers.confirm.keepArchivesNote`)})]})]})}),(0,G.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,G.jsx)(Q,{variant:`secondary`,onClick:()=>{te(!1),re(!0)},children:F(`common.cancel`)}),(0,G.jsx)(Q,{variant:`danger`,onClick:()=>{$n.mutate({deleteArchives:ne}),te(!1),re(!0)},children:`Delete`})]})]})})}),e.is_active===!1?(0,G.jsx)(G.Fragment,{children:r===`compact`?(0,G.jsxs)(`div`,{className:`mt-2 flex items-center gap-2 px-2 py-1.5 rounded-full bg-amber-50 dark:bg-amber-500/15 border border-amber-300 dark:border-amber-500/30`,children:[(0,G.jsx)(Zu,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)] text-amber-600 dark:text-amber-400 shrink-0`}),(0,G.jsx)(`span`,{className:`text-[length:var(--pc-t11,11px)] text-amber-700 dark:text-amber-400 font-medium truncate`,children:F(`printers.maintenance.pillLabel`)})]}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2 mb-2`,children:[(0,G.jsx)(`span`,{className:`text-[length:var(--pc-t10,10px)] uppercase tracking-wider text-bambu-gray font-medium`,children:F(`printers.status.title`,`Status`)}),(0,G.jsx)(`div`,{className:`flex-1 h-[2px] bg-bambu-dark-tertiary`})]}),(0,G.jsxs)(`div`,{className:`p-3 bg-amber-50 dark:bg-amber-500/10 border border-amber-300 dark:border-amber-500/30 rounded-[10px] flex items-center gap-3`,children:[(0,G.jsx)(Zu,{className:`w-6 h-6 text-amber-600 dark:text-amber-400 shrink-0`}),(0,G.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,G.jsx)(`p`,{className:`text-sm text-amber-700 dark:text-amber-400 font-medium`,children:F(`printers.maintenance.title`)}),(0,G.jsx)(`p`,{className:`text-xs text-bambu-gray mt-0.5`,children:F(`printers.maintenance.subtitle`)})]}),(0,G.jsx)(Q,{variant:`secondary`,size:`sm`,disabled:kr.isPending||!z(`printers:update`),onClick:()=>kr.mutate(!0),title:z(`printers:update`)?void 0:F(`printers.permission.noEdit`),children:F(`printers.maintenance.exitButton`)})]})]})}):W?.connected&&(0,G.jsxs)(G.Fragment,{children:[r===`compact`?(()=>{let e=W.hms_errors?Cm(W.hms_errors):[],t=W.state===`FAILED`||e.length>0,n=W.state===`RUNNING`||W.state===`PAUSE`?Math.max(0,Math.min(100,W.progress||0)):Kn||t?100:0,r=W.state===`RUNNING`||W.state===`PAUSE`,i=t?`bg-status-error`:W.state===`PAUSE`?`bg-status-warning`:`bg-bambu-green`,a=r&&W.remaining_time!=null&&W.remaining_time>0,o=r&&W.layer_num!=null&&W.total_layers!=null&&W.total_layers>0;return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`div`,{className:`relative mt-2 flex items-center gap-2`,children:[(0,G.jsx)(`div`,{className:`h-1.5 min-w-0 flex-1 overflow-hidden rounded-full bg-bambu-dark-tertiary`,children:(0,G.jsx)(`div`,{className:`${i} h-1.5 rounded-full transition-all`,style:{width:`${n}%`}})}),(0,G.jsx)(`span`,{className:`w-9 shrink-0 text-right text-[length:var(--pc-t11,11px)] leading-none ${r?`text-white`:`text-bambu-gray`}`,children:r?`${Math.round(n)}%`:`---%`})]}),(0,G.jsxs)(`div`,{className:`mt-1 flex min-h-[14px] items-center gap-2 overflow-hidden text-[length:var(--pc-t11,11px)] leading-none text-bambu-gray`,children:[a&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`span`,{className:`flex shrink-0 items-center gap-1`,children:[(0,G.jsx)(As,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),Qf(W.remaining_time*60)]}),(0,G.jsxs)(`span`,{className:`shrink-0 font-medium text-bambu-green`,title:F(`printers.estimatedCompletion`),children:[`ETA `,Zf(W.remaining_time,g,F)]})]}),o&&(0,G.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1 truncate`,children:[(0,G.jsx)(Wc,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)] shrink-0`}),W.layer_num,`/`,W.total_layers]})]})]})})():(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2 mb-2`,children:[(0,G.jsx)(`span`,{className:`text-[length:var(--pc-t10,10px)] uppercase tracking-wider text-bambu-gray font-medium`,children:F(`printers.status.title`,`Status`)}),(0,G.jsx)(`div`,{className:`flex-1 h-[2px] bg-bambu-dark-tertiary`})]}),(()=>{let t=!!(W.current_print&&(W.state===`RUNNING`||W.state===`PAUSE`)),n=!t&&Gn&&Jn,r=t?qn:n?Jn.name:null,i=t?W.cover_url:n?Jn.coverUrl:null,a=t?W.progress||0:n?100:0;return(0,G.jsxs)(`div`,{className:`p-2 bg-bambu-dark rounded-[10px] relative overflow-hidden`,children:[(0,G.jsxs)(`button`,{onClick:()=>Ve(!0),disabled:!t||(W.printable_objects_count??0)<2||!z(`printers:control`),className:`absolute top-2 right-2 p-1.5 rounded transition-colors z-10 ${t&&(W.printable_objects_count??0)>=2&&z(`printers:control`)?`text-bambu-gray hover:text-white hover:bg-white/10`:`text-bambu-gray/30 cursor-not-allowed`}`,title:z(`printers:control`)?t?(W.printable_objects_count??0)>=2?F(`printers.skipObjects.tooltip`):F(`printers.skipObjects.requiresMultiple`):F(`printers.skipObjects.onlyWhilePrinting`):F(`printers.permission.noControl`),children:[(0,G.jsx)(ST,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`}),Pr&&Pr.skipped_count>0&&(0,G.jsx)(`span`,{className:`absolute -top-1 -right-1 min-w-[16px] h-4 px-1 flex items-center justify-center text-[length:var(--pc-t10,10px)] font-bold bg-red-500 text-white rounded-full`,children:Pr.skipped_count})]}),(0,G.jsxs)(`div`,{className:`flex items-stretch gap-2`,children:[(0,G.jsx)(EOe,{url:i,printName:r||void 0,className:`w-24 h-24 max-[520px]:w-20 max-[520px]:h-20`}),(0,G.jsxs)(`div`,{className:`flex h-24 max-[520px]:h-20 min-w-0 flex-1 flex-col justify-between pt-1`,children:[(0,G.jsxs)(`div`,{className:`flex min-h-[18px] items-center gap-2 pr-8`,children:[(0,G.jsx)(`p`,{className:`min-w-0 truncate text-sm text-bambu-gray`,children:AOe(W.state,W.stg_cur_name)}),Zn]}),(0,G.jsx)(`p`,{className:`min-h-[18px] truncate pr-8 text-sm ${r?`text-white`:`text-bambu-gray/70`}`,children:r||F(`printers.noActiveJob`,`No active job`)}),(0,G.jsxs)(`div`,{className:`flex h-3 items-center gap-2 text-sm`,children:[(0,G.jsx)(`div`,{className:`h-1.5 min-w-0 flex-1 rounded-full bg-bambu-dark-tertiary`,children:(0,G.jsx)(`div`,{className:`${t?W.state===`PAUSE`?`bg-status-warning`:`bg-bambu-green`:n?`bg-bambu-green`:`bg-bambu-dark-tertiary`} h-1.5 rounded-full transition-all`,style:{width:`${a}%`}})}),(0,G.jsx)(`span`,{className:`w-9 shrink-0 pr-1 text-right text-[length:var(--pc-t11,11px)] leading-none ${t||n?`text-white`:`text-bambu-gray`}`,children:t||n?`${Math.round(a)}%`:`---%`})]}),(0,G.jsx)(`div`,{className:`flex min-h-[16px] items-center gap-2 text-xs text-bambu-gray`,children:t?(0,G.jsxs)(G.Fragment,{children:[W.remaining_time!=null&&W.remaining_time>0&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,G.jsx)(As,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),Qf(W.remaining_time*60)]}),(0,G.jsxs)(`span`,{className:`text-bambu-green font-medium`,title:F(`printers.estimatedCompletion`),children:[`ETA `,Zf(W.remaining_time,g,F)]})]}),W.layer_num!=null&&W.total_layers!=null&&W.total_layers>0&&(0,G.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,G.jsx)(Wc,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),W.layer_num,`/`,W.total_layers]}),Vn&&(0,G.jsxs)(`span`,{className:`flex items-center gap-1`,title:`Started by ${Vn}`,children:[(0,G.jsx)(Ru,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),Vn]})]}):Un?(0,G.jsxs)(`p`,{className:`truncate`,title:Un.print_name||Un.filename,children:[`Last: `,Un.print_name||Un.filename,Un.completed_at&&(0,G.jsxs)(`span`,{className:`ml-1 text-bambu-gray/60`,children:[`• `,Jf(Un.completed_at,{month:`short`,day:`numeric`})]})]}):(0,G.jsx)(`span`,{children:F(`printers.readyToPrint`)})})]})]}),(0,G.jsx)(Wse,{printerId:e.id,printerModel:e.model,loadedFilamentTypes:an,loadedFilaments:on,loadedVariants:sn,variant:`panelExtension`})]})})()]}),W.temperatures&&r===`expanded`&&(()=>{let t=W.temperatures.nozzle_heating||W.temperatures.nozzle_2_heating||!1,n=W.temperatures.bed_heating||!1,r=W.temperatures.chamber_heating||!1,i=e.nozzle_count===2||W.temperatures.nozzle_2!==void 0,a=(()=>{let e=[`nozzle`];return W.temperatures.nozzle_2!==void 0&&e.push(`nozzle_2`),e.push(`bed`),W.temperatures.chamber!==void 0&&e.push(`chamber`),e})(),o=W.active_extruder===1?`L`:`R`,s=W.nozzle_rack?.find(e=>e.id===1),c=W.nozzle_rack?.find(e=>e.id===0),l=c||s,u=W.connected&&z(`printers:control`),d=u?void 0:F(`printers.permission.noControl`),f=`relative text-center px-2 py-1.5 bg-bambu-dark rounded-lg flex-1 flex flex-col justify-center items-center transition-colors ${u?`cursor-pointer hover:bg-bambu-dark-tertiary`:`cursor-default opacity-80`}`,p=jOe.has(e.model??``),m=MOe.has(e.model??``),h=F(m?`printers.fans.exhaust`:`printers.fans.chamber`),g=p&&(!m||W.exhaust_fan_present),_=[{key:`part`,label:F(`printers.fans.partCooling`),value:W.cooling_fan_speed??0,Icon:ic,activeClass:`text-cyan-600 dark:text-cyan-400`},...W.left_aux_fan_speed==null?[]:[{key:`aux2`,label:F(`printers.fans.leftAuxiliary`),value:W.left_aux_fan_speed,Icon:Yu,activeClass:`text-indigo-600 dark:text-indigo-400`}],{key:`aux`,label:F(`printers.fans.auxiliary`),value:W.big_fan1_speed??0,Icon:Yu,activeClass:`text-blue-600 dark:text-blue-400`},...g?[{key:`chamber`,label:h,value:W.big_fan2_speed??0,Icon:No,activeClass:`text-green-600 dark:text-green-400`}]:[]];return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`div`,{className:`mt-2 flex items-stretch gap-1.5 flex-wrap`,children:[(0,G.jsxs)(`div`,{className:f,title:d,onClick:()=>u&&Fe(Pe===`nozzle-temp`?null:`nozzle-temp`),children:[(0,G.jsx)(`button`,{type:`button`,className:`absolute top-0.5 right-0.5 p-0.5 rounded text-bambu-gray hover:text-white hover:bg-white/10 transition-colors`,title:F(`printers.heaterHistory.openLabel`,`View heater history`),onClick:e=>{e.stopPropagation(),Ft({initialKind:`nozzle`,availableKinds:a})},children:(0,G.jsx)(cs,{className:`w-[var(--pc-i25,0.625rem)] h-[var(--pc-i25,0.625rem)]`})}),(0,G.jsx)(tG,{className:`w-[var(--pc-i35,0.875rem)] h-[var(--pc-i35,0.875rem)] mb-0.5`,color:`text-orange-400`,isHeating:t}),W.temperatures.nozzle_2===void 0?l?(0,G.jsx)(eG,{slot:l,index:0,activeStatus:!0,filamentName:l.filament_id?cn?.[l.filament_id]?.name:void 0,children:(0,G.jsxs)(`div`,{className:`cursor-default`,children:[(0,G.jsx)(`p`,{className:`text-[length:var(--pc-t9,9px)] text-bambu-gray`,children:F(`printers.temperatures.nozzle`)}),(0,G.jsxs)(`p`,{className:`text-[length:var(--pc-t11,11px)] text-white`,children:[Math.round(W.temperatures.nozzle||0),`°C`]})]})}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`p`,{className:`text-[length:var(--pc-t9,9px)] text-bambu-gray`,children:F(`printers.temperatures.nozzle`)}),(0,G.jsxs)(`p`,{className:`text-[length:var(--pc-t11,11px)] text-white`,children:[Math.round(W.temperatures.nozzle||0),`°C`]})]}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`p`,{className:`text-[length:var(--pc-t9,9px)] text-bambu-gray`,children:`L / R`}),(0,G.jsxs)(`p`,{className:`text-[length:var(--pc-t11,11px)] text-white`,children:[Math.round(W.temperatures.nozzle||0),`° / `,Math.round(W.temperatures.nozzle_2||0),`°`]})]}),Pe===`nozzle-temp`&&(i?(0,G.jsx)(sG,{title:`Set Nozzle Temperatures`,widthClass:`w-[300px]`,popoverWidth:300,popoverHeight:260,isPending:gr.isPending,onClose:()=>Fe(null),children:(0,G.jsxs)(`div`,{className:`grid grid-cols-2 gap-2 px-3 py-2.5`,children:[(0,G.jsx)(cG,{label:`Left Temp`,current:W.temperatures.nozzle,target:W.temperatures.nozzle_target,isActive:o===`L`,isPending:gr.isPending,onSubmit:e=>gr.mutate({target:e,nozzle:1}),options:ym(O,`C`)}),(0,G.jsx)(cG,{label:`Right Temp`,current:W.temperatures.nozzle_2,target:W.temperatures.nozzle_2_target,isActive:o===`R`,isPending:gr.isPending,onSubmit:e=>gr.mutate({target:e,nozzle:0}),options:ym(O,`C`)})]})}):(0,G.jsx)(sG,{title:`Set Nozzle Temperature`,unit:`°C`,customMin:0,customMax:320,isPending:gr.isPending,options:ym(O,`C`),onClose:()=>Fe(null),onSubmit:e=>gr.mutate({target:e,nozzle:W.active_extruder??0})}))]}),(0,G.jsxs)(`div`,{className:f,title:d,onClick:()=>u&&Fe(Pe===`bed-temp`?null:`bed-temp`),children:[(0,G.jsx)(`button`,{type:`button`,className:`absolute top-0.5 right-0.5 p-0.5 rounded text-bambu-gray hover:text-white hover:bg-white/10 transition-colors`,title:F(`printers.heaterHistory.openLabel`,`View heater history`),onClick:e=>{e.stopPropagation(),Ft({initialKind:`bed`,availableKinds:a})},children:(0,G.jsx)(cs,{className:`w-[var(--pc-i25,0.625rem)] h-[var(--pc-i25,0.625rem)]`})}),(0,G.jsx)(tG,{className:`w-[var(--pc-i35,0.875rem)] h-[var(--pc-i35,0.875rem)] mb-0.5`,color:`text-blue-400`,isHeating:n}),(0,G.jsx)(`p`,{className:`text-[length:var(--pc-t9,9px)] text-bambu-gray`,children:F(`printers.temperatures.bed`)}),(0,G.jsxs)(`p`,{className:`text-[length:var(--pc-t11,11px)] text-white`,children:[Math.round(W.temperatures.bed||0),`°C`]}),Pe===`bed-temp`&&(0,G.jsx)(sG,{title:`Set Bed Temperature`,unit:`°C`,customMin:0,customMax:140,isPending:_r.isPending,options:ym(k,`C`),onClose:()=>Fe(null),onSubmit:e=>_r.mutate(e)})]}),W.temperatures.chamber!==void 0&&(()=>{let e=W.supports_chamber_heater===!0;return(0,G.jsxs)(`div`,{className:e?f:`relative text-center px-2 py-1.5 bg-bambu-dark rounded-lg flex-1 flex flex-col justify-center items-center`,title:e?d:void 0,onClick:e?()=>u&&Fe(Pe===`chamber-temp`?null:`chamber-temp`):void 0,children:[(0,G.jsx)(`button`,{type:`button`,className:`absolute top-0.5 right-0.5 p-0.5 rounded text-bambu-gray hover:text-white hover:bg-white/10 transition-colors`,title:F(`printers.heaterHistory.openLabel`,`View heater history`),onClick:e=>{e.stopPropagation(),Ft({initialKind:`chamber`,availableKinds:a})},children:(0,G.jsx)(cs,{className:`w-[var(--pc-i25,0.625rem)] h-[var(--pc-i25,0.625rem)]`})}),(0,G.jsx)(tG,{className:`w-[var(--pc-i35,0.875rem)] h-[var(--pc-i35,0.875rem)] mb-0.5`,color:`text-green-400`,isHeating:r}),(0,G.jsx)(`p`,{className:`text-[length:var(--pc-t9,9px)] text-bambu-gray`,children:F(`printers.temperatures.chamber`)}),(0,G.jsxs)(`p`,{className:`text-[length:var(--pc-t11,11px)] text-white`,children:[Math.round(W.temperatures.chamber||0),`°C`]}),e&&Pe===`chamber-temp`&&(0,G.jsx)(sG,{title:`Set Chamber Temperature`,unit:`°C`,customMin:0,customMax:65,isPending:vr.isPending,options:ym(A,`C`),onClose:()=>Fe(null),onSubmit:e=>vr.mutate(e)})]})})(),i&&(0,G.jsx)(mOe,{leftSlot:s,rightSlot:c,activeNozzle:o,filamentInfo:cn,children:(0,G.jsxs)(`div`,{className:`relative text-center px-3 py-1.5 bg-bambu-dark rounded-lg h-full flex flex-col justify-center items-center transition-colors ${u?`cursor-pointer hover:bg-bambu-dark-tertiary`:`cursor-default opacity-80`}`,title:u?F(`printers.activeNozzle`,{nozzle:F(o===`L`?`common.left`:`common.right`)}):d,onClick:()=>u&&Fe(Pe===`nozzle-select`?null:`nozzle-select`),children:[(0,G.jsx)(SOe,{className:`w-[var(--pc-i35,0.875rem)] h-[var(--pc-i35,0.875rem)] mb-0.5 text-amber-600 dark:text-amber-400`}),(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsxs)(`span`,{className:`text-[length:var(--pc-t11,11px)] font-bold ${o===`L`?`text-amber-700 dark:text-amber-400`:`text-gray-500`}`,children:[`L`,s?.nozzle_diameter?` ${s.nozzle_diameter}`:``]}),(0,G.jsx)(`span`,{className:`text-[length:var(--pc-t9,9px)] text-bambu-gray/40`,children:`·`}),(0,G.jsxs)(`span`,{className:`text-[length:var(--pc-t11,11px)] font-bold ${o===`R`?`text-amber-700 dark:text-amber-400`:`text-gray-500`}`,children:[`R`,c?.nozzle_diameter?` ${c.nozzle_diameter}`:``]})]}),(0,G.jsx)(`p`,{className:`text-[length:var(--pc-t9,9px)] text-bambu-gray`,children:F(`printers.temperatures.nozzle`)}),Pe===`nozzle-select`&&(0,G.jsx)(sG,{title:`Set Nozzle Selection`,widthClass:`w-[300px]`,popoverWidth:300,popoverHeight:140,isPending:br.isPending,options:[{label:`Left`,value:1},{label:`Right`,value:0}],onClose:()=>Fe(null),onSubmit:e=>br.mutate(e)})]})}),W.nozzle_rack&&W.nozzle_rack.some(e=>e.id>=2)&&(0,G.jsx)(hOe,{slots:W.nozzle_rack,filamentInfo:cn})]}),(0,G.jsx)(`div`,{className:`mt-2 flex items-center gap-1.5`,children:_.map(({key:e,label:t,value:n,Icon:r,activeClass:i})=>{let a=n>0;return(0,G.jsxs)(`div`,{className:`relative px-2 py-1.5 bg-bambu-dark rounded-lg flex-1 min-w-0 flex items-center justify-center gap-1 transition-colors ${u?`cursor-pointer hover:bg-bambu-dark-tertiary`:`cursor-default opacity-80`}`,title:u?t:d,onClick:()=>u&&Fe(Pe===`fan-${e}`?null:`fan-${e}`),children:[(0,G.jsx)(r,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)] shrink-0 ${a?i:`text-bambu-gray/50`}`}),(0,G.jsxs)(`span`,{className:`text-[length:var(--pc-t10,10px)] leading-none ${a?`text-white`:`text-bambu-gray/50`}`,children:[n,`%`]}),Pe===`fan-${e}`&&(0,G.jsx)(sG,{title:`Set ${t} Speed`,unit:`%`,customMin:0,customMax:100,isPending:yr.isPending,options:ym(j,`%`),onClose:()=>Fe(null),onSubmit:t=>yr.mutate({fan:e,speed:t})})]},e)})})]})})(),r===`expanded`&&Kn&&hr,r===`expanded`&&(()=>{let t=W.state===`RUNNING`,n=W.state===`PAUSE`,r=t||n,i=dr.isPending||fr.isPending||pr.isPending,a=`bg-bambu-dark text-bambu-gray/50 cursor-not-allowed opacity-50`,o=`flex h-8 w-8 items-center justify-center rounded-lg text-xs font-medium transition-colors disabled:opacity-50 disabled:cursor-not-allowed`,s=`flex h-8 w-20 items-center justify-center gap-1 px-2 rounded-lg text-xs font-medium transition-colors`;return(0,G.jsxs)(`div`,{className:`mt-3`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2 mb-2`,children:[(0,G.jsx)(`span`,{className:`text-[length:var(--pc-t10,10px)] uppercase tracking-wider text-bambu-gray font-medium`,children:F(`printers.controls`)}),(0,G.jsx)(`div`,{className:`flex-1 h-[2px] bg-bambu-dark-tertiary`})]}),(0,G.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-x-2 gap-y-2`,children:[(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 min-w-0`,children:[(0,G.jsx)(`button`,{onClick:()=>xr.mutate(!W.chamber_light),disabled:!W.connected||xr.isPending||!z(`printers:control`),className:`${o} ${W.chamber_light?`bg-yellow-50 dark:bg-yellow-500/10 text-yellow-700 dark:text-yellow-400 hover:bg-yellow-500/20`:`bg-bambu-dark text-bambu-gray/50 hover:bg-bambu-dark-tertiary hover:text-white`}`,title:z(`printers:control`)?W.chamber_light?F(`printers.chamberLightOff`):F(`printers.chamberLightOn`):F(`printers.permission.noControl`),children:(0,G.jsx)(xT,{on:W.chamber_light??!1,className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})}),[`P2S`,`X2D`,`H2D`,`H2C`,`H2S`].includes(e.model??``)&&(()=>{let t=W.airduct_mode===1,n=t?fc:fu,r=t?`text-orange-600 dark:text-orange-400`:`text-sky-600 dark:text-sky-400`,i=t?`bg-orange-50 dark:bg-orange-500/10 text-orange-700 dark:text-orange-400 hover:bg-orange-500/20`:`bg-sky-50 dark:bg-sky-500/10 text-sky-700 dark:text-sky-400 hover:bg-sky-500/20`;return(0,G.jsxs)(`div`,{className:`relative`,children:[(0,G.jsx)(`button`,{onClick:()=>je(Ae===e.id?null:e.id),disabled:!z(`printers:control`),className:`${o} ${i}`,title:`${F(`printers.airduct.title`)}: ${F(t?`printers.airduct.heating`:`printers.airduct.cooling`)}`,children:(0,G.jsx)(n,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)] ${r}`})}),Ae===e.id&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`div`,{className:`fixed inset-0 z-40`,onClick:()=>je(null)}),(0,G.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:F(`printers.airduct.cooling`),modeId:0},{mode:`heating`,label:F(`printers.airduct.heating`),modeId:1}].map(({mode:e,label:t,modeId:n})=>(0,G.jsxs)(`button`,{onClick:()=>{Cr.mutate(e),je(null)},className:`w-full text-left px-3 py-1.5 text-xs transition-colors flex items-center gap-2 ${W.airduct_mode===n?`text-bambu-green bg-bambu-green/10`:`text-white hover:bg-bambu-dark-tertiary`}`,children:[e===`heating`?(0,G.jsx)(fc,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}):(0,G.jsx)(fu,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),t]},e))})]})]})})(),(()=>{let t=z(`printers:control`),n=r||!t,i=`flex h-8 w-8 items-center justify-center rounded bg-indigo-100 dark:bg-indigo-500/15 text-indigo-700 dark:text-indigo-300 transition-colors hover:bg-indigo-200 dark:hover:bg-indigo-500/30 disabled:cursor-not-allowed disabled:opacity-50`,a=e=>{let t=e*Ie*1;wr.mutate({distance:t})},s=(e,t)=>{Tr.mutate({x:e,y:t})},c=e=>{Er.mutate(e)};return(0,G.jsxs)(`div`,{className:`relative`,children:[(0,G.jsx)(`button`,{onClick:()=>Ne(Me===e.id?null:e.id),disabled:n,className:`${o} ${n?`bg-bambu-dark text-bambu-gray/50 cursor-not-allowed`:`bg-indigo-50 dark:bg-indigo-500/10 text-indigo-700 dark:text-indigo-400 hover:bg-indigo-500/20`}`,title:F(t?r?`printers.bedJog.disabledWhilePrinting`:`printers.bedJog.title`:`printers.permission.noControl`),children:(0,G.jsx)(hl,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})}),Me===e.id&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`div`,{className:`fixed inset-0 z-40`,onClick:()=>Ne(null)}),(0,G.jsxs)(`div`,{className:`absolute bottom-full left-0 mb-1 z-50 flex w-[216px] flex-col overflow-hidden rounded-xl border border-bambu-dark-tertiary bg-bambu-dark-secondary shadow-2xl`,children:[(0,G.jsx)(`div`,{className:`shrink-0 px-3 py-2.5 text-center text-sm font-medium text-white`,children:F(`printers.bedJog.title`)}),(0,G.jsx)(`div`,{className:`h-px bg-bambu-dark-tertiary`}),(0,G.jsxs)(`div`,{className:`flex items-start gap-1.5 bg-yellow-500/10 px-3 py-2 text-[length:var(--pc-t11,11px)] leading-snug text-yellow-700 dark:text-yellow-400`,children:[(0,G.jsx)(Nu,{className:`mt-0.5 h-3.5 w-3.5 shrink-0`}),(0,G.jsx)(`span`,{children:F(`printers.bedJog.limitWarning`)})]}),(0,G.jsx)(`div`,{className:`h-px bg-bambu-dark-tertiary`}),(0,G.jsx)(`div`,{className:`flex justify-center px-3 py-2.5`,children:(0,G.jsxs)(`div`,{className:`flex items-center justify-center gap-3`,children:[(0,G.jsxs)(`div`,{className:`grid grid-cols-3 gap-1`,children:[(0,G.jsx)(`div`,{}),(0,G.jsx)(`button`,{onClick:()=>s(0,Ie),disabled:Tr.isPending,className:i,"aria-label":`Move Y forward`,children:(0,G.jsx)(Ho,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})}),(0,G.jsx)(`div`,{}),(0,G.jsx)(`button`,{onClick:()=>s(-Ie,0),disabled:Tr.isPending,className:i,"aria-label":`Move X left`,children:(0,G.jsx)(Lo,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})}),(0,G.jsx)(`button`,{onClick:()=>{Ne(null),Dr.mutate(`all`)},disabled:Dr.isPending,className:i,"aria-label":F(`printers.bedJog.homeZ`),children:(0,G.jsx)(Ic,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})}),(0,G.jsx)(`button`,{onClick:()=>s(Ie,0),disabled:Tr.isPending,className:i,"aria-label":`Move X right`,children:(0,G.jsx)(zo,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})}),(0,G.jsx)(`div`,{}),(0,G.jsx)(`button`,{onClick:()=>s(0,-Ie),disabled:Tr.isPending,className:i,"aria-label":`Move Y back`,children:(0,G.jsx)(Io,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})}),(0,G.jsx)(`div`,{})]}),(0,G.jsxs)(`div`,{className:`flex flex-col items-center gap-1`,children:[(0,G.jsx)(`button`,{onClick:()=>a(-1),disabled:wr.isPending,className:i,"aria-label":F(`printers.bedJog.up`),children:(0,G.jsx)(Ho,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})}),(0,G.jsx)(`div`,{className:`flex h-8 w-8 items-center justify-center text-bambu-gray/80`,children:(0,G.jsx)(Wc,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})}),(0,G.jsx)(`button`,{onClick:()=>a(1),disabled:wr.isPending,className:i,"aria-label":F(`printers.bedJog.down`),children:(0,G.jsx)(Io,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})})]}),(0,G.jsxs)(`div`,{className:`flex flex-col items-center gap-1`,children:[(0,G.jsx)(`button`,{onClick:()=>c(-Ie),disabled:Er.isPending,className:i,"aria-label":`Retract filament`,children:(0,G.jsx)(Ho,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})}),(0,G.jsx)(`div`,{className:`flex h-8 w-8 items-center justify-center text-bambu-gray/80`,children:(0,G.jsx)(`span`,{className:`text-sm font-semibold leading-none`,children:`E`})}),(0,G.jsx)(`button`,{onClick:()=>c(Ie),disabled:Er.isPending,className:i,"aria-label":`Extrude filament`,children:(0,G.jsx)(Io,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})})]})]})}),(0,G.jsx)(`div`,{className:`h-px bg-bambu-dark-tertiary`}),(0,G.jsxs)(`div`,{className:`px-3 pt-2.5 pb-3`,children:[(0,G.jsx)(`div`,{className:`mb-1 text-[length:var(--pc-t9,9px)] uppercase tracking-wider text-bambu-gray/70`,children:F(`printers.bedJog.step`)}),(0,G.jsx)(`div`,{className:`flex gap-1`,children:[1,10,50].map(e=>(0,G.jsx)(`button`,{onClick:()=>Le(e),className:`flex-1 px-1 py-1 rounded text-[length:var(--pc-t10,10px)] transition-colors ${Ie===e?`bg-bambu-green/20 text-bambu-green`:`bg-bambu-dark text-bambu-gray hover:bg-bambu-dark-tertiary`}`,children:e},e))})]})]})]})]})})(),(0,G.jsxs)(`div`,{className:`inline-flex rounded-lg ${e.plate_detection_enabled?`ring-1 ring-green-500`:``}`,children:[(0,G.jsx)(`button`,{onClick:Jr,disabled:!W.connected||Or.isPending||!z(`printers:update`),className:`${o} rounded-r-none ${e.plate_detection_enabled?`bg-green-50 dark:bg-green-500/10 text-green-700 dark:text-green-400 hover:bg-green-500/20`:`bg-bambu-dark text-bambu-gray/50 hover:bg-bambu-dark-tertiary hover:text-white`}`,title:z(`printers:update`)?e.plate_detection_enabled?F(`printers.plateDetection.enabledClick`):F(`printers.plateDetection.disabledClick`):F(`printers.plateDetection.noPermission`),children:Or.isPending?(0,G.jsx)(Y,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)] animate-spin`}):(0,G.jsx)(Kl,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})}),(0,G.jsx)(`button`,{onClick:Yr,disabled:!W.connected||Kt||!z(`printers:update`),className:`flex h-8 w-8 items-center justify-center rounded-r-lg border-l border-bambu-dark-tertiary transition-colors disabled:opacity-50 disabled:cursor-not-allowed ${e.plate_detection_enabled?`bg-green-50 dark:bg-green-500/10 text-green-700 dark:text-green-400 hover:bg-green-500/20`:`bg-bambu-dark text-bambu-gray/50 hover:bg-bambu-dark-tertiary hover:text-white`}`,title:z(`printers:update`)?F(`printers.plateDetection.manageCalibration`):F(`printers.plateDetection.noPermission`),children:Kt?(0,G.jsx)(Y,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)] animate-spin`}):(0,G.jsx)(fs,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})})]}),(0,G.jsxs)(`div`,{className:`relative`,children:[(0,G.jsx)(`button`,{"data-testid":`speed-control`,onClick:()=>ke(Oe===e.id?null:e.id),disabled:!r||!z(`printers:control`),className:`${o} ${r?`bg-amber-50 dark:bg-amber-500/10 text-amber-700 dark:text-amber-400 hover:bg-amber-500/20`:`bg-bambu-dark text-bambu-gray/50 cursor-not-allowed`}`,title:r?F(`printers.speed.title`):void 0,children:(0,G.jsx)(Sc,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})}),Oe===e.id&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`div`,{className:`fixed inset-0 z-40`,onClick:()=>ke(null)}),(0,G.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:F(`printers.speed.silent`)},{mode:2,label:F(`printers.speed.standard`)},{mode:3,label:F(`printers.speed.sport`)},{mode:4,label:F(`printers.speed.ludicrous`)}].map(({mode:e,label:t})=>(0,G.jsx)(`button`,{onClick:()=>{Sr.mutate(e),ke(null)},className:`w-full text-left px-3 py-1.5 text-xs transition-colors ${W.speed_level===e?`text-bambu-green bg-bambu-green/10`:`text-white hover:bg-bambu-dark-tertiary`}`,children:t},e))})]})]})]}),(0,G.jsxs)(`div`,{className:`ml-auto flex items-center justify-end gap-2 flex-shrink-0`,children:[(()=>{let e=!r||i||!z(`printers:control`);return(0,G.jsxs)(`button`,{onClick:()=>n?ze(!0):De(!0),disabled:e,className:`
+ `,style:{maxWidth:`calc(100vw - 24px)`},onMouseEnter:w,onMouseLeave:T,children:(0,G.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:[(0,G.jsx)(`div`,{className:`text-[length:var(--pc-t10,10px)] uppercase tracking-wider text-bambu-gray font-medium`,children:n}),(0,G.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,G.jsx)(`span`,{className:`text-[length:var(--pc-t10,10px)] tracking-wide text-bambu-gray font-medium shrink-0`,children:s(`printers.amsPopup.serialNumber`)}),(0,G.jsx)(`span`,{className:`text-[length:var(--pc-t10,10px)] text-white font-mono truncate`,children:e.serial_number||`—`})]}),(0,G.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,G.jsx)(`span`,{className:`text-[length:var(--pc-t10,10px)] tracking-wide text-bambu-gray font-medium shrink-0`,children:s(`printers.amsPopup.firmwareVersion`)}),(0,G.jsx)(`span`,{className:`text-[length:var(--pc-t10,10px)] text-white font-mono truncate`,children:e.sw_ver||`—`})]}),(0,G.jsxs)(`div`,{className:`space-y-1`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(`span`,{className:`text-[length:var(--pc-t10,10px)] text-bambu-gray font-medium shrink-0`,children:s(`printers.amsPopup.friendlyName`)}),(0,G.jsx)(`div`,{className:`flex-1 h-[2px] bg-bambu-dark-tertiary/50`})]}),(0,G.jsx)(`input`,{type:`text`,value:f,onChange:e=>i&&p(e.target.value),onKeyDown:e=>e.key===`Enter`&&E(),onFocus:()=>b(!0),onBlur:()=>{b(!1),C.current&&clearTimeout(C.current),C.current=setTimeout(()=>l(!1),200)},placeholder:i?s(`printers.amsPopup.friendlyNamePlaceholder`):r?.[e.id]||`—`,disabled:!i,title:i?void 0:s(`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&&(0,G.jsxs)(`div`,{className:`space-y-1`,children:[g&&(0,G.jsx)(`p`,{className:`text-[length:var(--pc-t10,10px)] text-red-700 dark:text-red-400 break-words`,children:g}),(0,G.jsxs)(`div`,{className:`flex gap-1 justify-end`,children:[(0,G.jsx)(`button`,{onClick:E,disabled:m,className:`px-2 py-0.5 text-[length:var(--pc-t10,10px)] bg-bambu-green text-white rounded hover:bg-bambu-green/80 disabled:opacity-50`,children:s(`printers.amsPopup.save`)}),r?.[e.id]&&(0,G.jsx)(`button`,{onClick:async()=>{if(i){h(!0),_(null);try{await Z.deleteAmsLabel(t,e.id,e.serial_number),a(),l(!1)}catch(e){_(e instanceof Error?e.message:String(e))}finally{h(!1)}}},disabled:m,className:`px-2 py-0.5 text-[length:var(--pc-t10,10px)] bg-bambu-dark-tertiary text-bambu-gray rounded hover:bg-bambu-dark-tertiary/70 disabled:opacity-50`,children:s(`printers.amsPopup.clear`)})]})]})]})]})})]})}var pG={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}},mG={1:1,2:1,3:1.2,4:1.4};function NOe(e){let t=mG[e]??1,n=e=>`${Math.round(e*t*10)/10}px`;return{"--pc-t8":n(8),"--pc-t9":n(9),"--pc-t10":n(10),"--pc-t11":n(11),"--pc-i2":n(8),"--pc-i25":n(10),"--pc-i3":n(12),"--pc-i35":n(14),"--pc-i4":n(16),"--pc-i5":n(20),"--pc-i7":n(28)}}function POe({printerId:e,dryingActive:t,timeFormat:n}){let{t:r}=U(),i=co(),{showToast:a}=zd(),{data:o=[]}=K({queryKey:KW,queryFn:()=>Z.listScheduledDryings(),refetchInterval:3e4});(0,y.useEffect)(()=>{t&&i.invalidateQueries({queryKey:KW})},[t,i]);let s=q({mutationFn:e=>Z.cancelScheduledDrying(e),onSuccess:()=>i.invalidateQueries({queryKey:KW}),onError:e=>a(e.message||r(`printers.drying.scheduleFailed`),`error`)}),c=o.filter(t=>t.printer_id===e&&(t.status===`pending`||t.status===`failed`));return c.length===0?null:(0,G.jsx)(`div`,{className:`mt-2 space-y-1`,children:c.map(e=>{let t=e.status===`failed`,i=dOe(e.waiting_reason);return(0,G.jsxs)(`div`,{"data-testid":t?`scheduled-drying-failed`:`scheduled-drying-pending`,className:`flex items-center justify-between px-2 py-1 rounded-lg text-[length:var(--pc-t11,11px)] ${t?`bg-red-500/10 border border-red-500/30`:`bg-amber-500/10 border border-amber-500/30`}`,children:[(0,G.jsx)(`span`,{className:t?`text-red-700 dark:text-red-400`:`text-amber-700 dark:text-amber-400`,children:t?r(`printers.drying.scheduleFailedReason`,{reason:e.error_message||r(`printers.drying.scheduleFailedUnknown`)}):(0,G.jsxs)(G.Fragment,{children:[e.start_after?r(`printers.drying.scheduledFor`,{time:Yf(e.start_after,n)}):r(`printers.drying.scheduledAsap`),i&&(0,G.jsx)(`span`,{className:`ml-1 opacity-80`,children:r(i)})]})}),(0,G.jsx)(`button`,{onClick:()=>s.mutate(e.id),disabled:s.isPending,title:r(t?`printers.drying.dismissFailed`:`printers.drying.cancelScheduled`),className:`text-bambu-gray hover:text-red-400 transition-colors disabled:opacity-50 disabled:cursor-not-allowed`,children:(0,G.jsx)(Qu,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`})})]},e.id)})})}function hG({printer:e,hideIfDisconnected:t,maintenanceInfo:n,viewMode:r=`expanded`,cardSize:i=2,amsThresholds:a,spoolmanEnabled:o=!1,linkedSpools:s,spoolmanUrl:c,spoolmanSyncMode:l,onGetAssignment:u,onUnassignSpool:d,spoolmanSpools:f,spoolmanSlotAssignments:p,spoolmanLoading:m=!1,onUnassignSpoolmanSpool:h,timeFormat:g=`system`,cameraViewMode:_=`window`,onOpenEmbeddedCamera:v,onSelectCameraViewMode:b,checkPrinterFirmware:x=!0,dryingPresets:S=pG,requirePlateClear:C=!1,selectionMode:w=!1,isSelected:T=!1,onToggleSelect:E,onOpenCompactCard:D,nozzleTempPresets:O=mm,bedTempPresets:k=hm,chamberTempPresets:A=gm,fanSpeedPresets:j=_m,aiDetectionEnabled:M=!1,aiDetection:N,aiLastError:P=null}){let{t:F}=U(),I=co(),L=or(),{showToast:R}=zd(),{hasPermission:z}=Td(),[B,V]=(0,y.useState)(!1),[ee,te]=(0,y.useState)(!1),[ne,re]=(0,y.useState)(!0),[ie,ae]=(0,y.useState)(!1),[oe,se]=(0,y.useState)(!1),[H,ce]=(0,y.useState)(!1),[le,ue]=(0,y.useState)(!1),[de,fe]=(0,y.useState)(!1),[pe,me]=(0,y.useState)(null),[he,ge]=(0,y.useState)(!1),[_e,ve]=(0,y.useState)(!1),[ye,be]=(0,y.useState)(!1),[xe,Se]=(0,y.useState)(()=>kee(e.id)),Ce=(0,y.useCallback)(()=>{Se(t=>{let n=!t;return Aee(e.id,n),n})},[e.id]),[we,Te]=(0,y.useState)(!1),[Ee,De]=(0,y.useState)(!1),[Oe,ke]=(0,y.useState)(null),[Ae,je]=(0,y.useState)(null),[Me,Ne]=(0,y.useState)(null),[Pe,Fe]=(0,y.useState)(null),[Ie,Le]=(0,y.useState)(10),[Re,ze]=(0,y.useState)(!1),[Be,Ve]=(0,y.useState)(!1),[He,Ue]=(0,y.useState)(!1),[We,Ge]=(0,y.useState)(!1),[Ke,qe]=(0,y.useState)(!1),Je=(0,y.useCallback)(()=>Ge(!1),[]),[Ye,Xe]=(0,y.useState)(null),[Ze,Qe]=(0,y.useState)(null),[$e,et]=(0,y.useState)(`n3f`),[tt,nt]=(0,y.useState)(`PLA`),[rt,it]=(0,y.useState)(50),[at,ot]=(0,y.useState)(4),[st,ct]=(0,y.useState)(!1),[lt,ut]=(0,y.useState)(`now`),[dt,ft]=(0,y.useState)(120),[pt,mt]=(0,y.useState)(``),[ht,gt]=(0,y.useState)(null),[_t,vt]=(0,y.useState)(null),yt=(0,y.useCallback)((e,t)=>{let n=Dee(e.tray.find(e=>e.tray_type)?.tray_type,S),r=S[n]??pG.PLA,i=e.module_type;nt(n),it(r[i]||r.n3f),ot(i===`n3s`?r.n3s_hours:r.n3f_hours),ct(!1),ut(`now`),ft(120),mt(``),et(e.module_type),Qe(e.id),vt(t)},[S]);(0,y.useLayoutEffect)(()=>{if(Ze===null||!_t)return;let e=()=>{gt(im({triggerRect:_t.getBoundingClientRect(),popoverWidth:sOe,estimatedHeight:cOe,horizontalAlign:`center`}))};return e(),window.addEventListener(`resize`,e),window.addEventListener(`scroll`,e,!0),()=>{window.removeEventListener(`resize`,e),window.removeEventListener(`scroll`,e,!0)}},[Ze,_t]);let bt=(0,y.useRef)(null),xt=(0,y.useRef)(!1),[St,Ct]=(0,y.useState)(null),[wt,Tt]=(0,y.useState)(!1),[Et,Dt]=(0,y.useState)(!1),Ot=(0,y.useRef)(null),[kt,At]=(0,y.useState)(null),jt=(0,y.useRef)(0),[Mt,Nt]=(0,y.useState)(null),[Pt,Ft]=(0,y.useState)(null),[It,Lt]=(0,y.useState)(null),[Rt,zt]=(0,y.useState)(null),[Bt,Vt]=(0,y.useState)(null),[Ht,Ut]=(0,y.useState)(!1),[Wt,Gt]=(0,y.useState)(null),[Kt,qt]=(0,y.useState)(!1),[Jt,Yt]=(0,y.useState)(!1),[Xt,Zt]=(0,y.useState)(null),[Qt,$t]=(0,y.useState)(!1),[en,tn]=(0,y.useState)(!1),{data:W}=K({queryKey:[`printerStatus`,e.id],queryFn:()=>Z.getPrinterStatus(e.id),refetchInterval:3e4}),{data:nn}=K({queryKey:[`firmwareUpdate`,e.id],queryFn:()=>vd.checkPrinterUpdate(e.id),staleTime:300*1e3,refetchInterval:300*1e3,enabled:x&&z(`firmware:read`)}),rn=(0,y.useMemo)(()=>{let e=new Set;if(W?.ams)for(let t of W.ams)for(let n of t.tray||[])n.tray_info_idx&&e.add(n.tray_info_idx);for(let t of W?.vt_tray??[])t.tray_info_idx&&e.add(t.tray_info_idx);if(W?.nozzle_rack)for(let t of W.nozzle_rack)t.filament_id&&e.add(t.filament_id);return Array.from(e)},[W?.ams,W?.vt_tray,W?.nozzle_rack]),an=(0,y.useMemo)(()=>{let e=new Set;if(W?.ams)for(let t of W.ams)for(let n of t.tray||[])n.tray_type&&e.add(n.tray_type.toUpperCase());for(let t of W?.vt_tray??[])t.tray_type&&e.add(t.tray_type.toUpperCase());return e},[W?.ams,W?.vt_tray]),on=(0,y.useMemo)(()=>{let e=new Set;if(W?.ams){for(let t of W.ams)for(let n of t.tray||[])if(n.tray_type&&n.tray_color){let t=n.tray_color.replace(`#`,``).toLowerCase().slice(0,6);e.add(`${n.tray_type.toUpperCase()}:${t}`)}}for(let t of W?.vt_tray??[])if(t.tray_type&&t.tray_color){let n=t.tray_color.replace(`#`,``).toLowerCase().slice(0,6);e.add(`${t.tray_type.toUpperCase()}:${n}`)}return e},[W?.ams,W?.vt_tray]),sn=(0,y.useMemo)(()=>{let e=new Set;if(W?.ams){for(let t of W.ams)for(let n of t.tray||[])if(n.tray_type&&n.tray_color){let t=n.tray_color.replace(`#`,``).toLowerCase().slice(0,6);e.add(`${n.tray_type.toUpperCase()}:${t}:${n.tray_info_idx||``}`)}}for(let t of W?.vt_tray??[])if(t.tray_type&&t.tray_color){let n=t.tray_color.replace(`#`,``).toLowerCase().slice(0,6);e.add(`${t.tray_type.toUpperCase()}:${n}:${t.tray_info_idx||``}`)}return e},[W?.ams,W?.vt_tray]),{data:cn}=K({queryKey:[`filamentInfo`,rn],queryFn:()=>Z.getFilamentInfo(rn),enabled:rn.length>0,staleTime:300*1e3}),{data:ln}=K({queryKey:[`slotPresets`,e.id],queryFn:()=>Z.getSlotPresets(e.id),staleTime:120*1e3}),un=W?.state===`RUNNING`||W?.state===`PAUSE`?W?.current_archive_id??null:null,{data:dn}=K({queryKey:[`archive-plates`,un],queryFn:()=>Z.getArchivePlates(un),enabled:un!=null,staleTime:300*1e3}),fn=!dn?.is_multi_plate||W?.current_plate_id==null?null:dn.plates.find(e=>e.index===W.current_plate_id)?.name||F(`printers.plateNumber`,`Plate {{number}}`,{number:W.current_plate_id}),{data:pn,refetch:mn}=K({queryKey:[`amsLabels`,e.id],queryFn:()=>Z.getAmsLabels(e.id),staleTime:300*1e3}),[hn,gn]=(0,y.useState)(null);(0,y.useEffect)(()=>{W?.wifi_signal!=null&&gn(W.wifi_signal)},[W?.wifi_signal]);let _n=W?.wifi_signal??hn,vn=(0,y.useRef)(void 0);(0,y.useEffect)(()=>{W?.connected!==void 0&&(vn.current=W.connected)},[W?.connected]);let yn=W?.connected??vn.current,bn=(0,y.useRef)({});(0,y.useEffect)(()=>{W?.ams_extruder_map&&Object.keys(W.ams_extruder_map).length>0&&(bn.current=W.ams_extruder_map)},[W?.ams_extruder_map]);let xn=W?.ams_extruder_map&&Object.keys(W.ams_extruder_map).length>0?W.ams_extruder_map:bn.current,Sn=(0,y.useRef)({});(0,y.useEffect)(()=>{W?.ams_switch_inlet&&Object.keys(W.ams_switch_inlet).length>0&&(Sn.current=W.ams_switch_inlet)},[W?.ams_switch_inlet]);let Cn=W?.fila_switch?.installed===!0,wn=W?.ams_switch_inlet&&Object.keys(W.ams_switch_inlet).length>0?W.ams_switch_inlet:Sn.current,Tn=(0,y.useRef)([]);(0,y.useEffect)(()=>{W?.ams&&W.ams.length>0&&(Tn.current=W.ams)},[W?.ams]);let En=W?.ams&&W.ams.length>0?W.ams:Tn.current;(0,y.useEffect)(()=>{if(!St)return;let e=En.find(e=>e.id===St.amsId);e&&(e.dry_time>0||e.dry_status>0)&&Ct(null)},[St,En]),(0,y.useEffect)(()=>{if(!St)return;let e=setTimeout(()=>{Ct(null),R(F(`printers.drying.toastNotStarted`),`error`)},TOe);return()=>clearTimeout(e)},[St,R,F]);let Dn=(0,y.useRef)(void 0),On=W?.tray_now;On!==void 0&&On!==255?Dn.current=On:On===255&&(Dn.current=void 0);let kn=On!==void 0&&On!==255?On:Dn.current,An=W?.expected_tray??null,jn=W?.previous_tray??null,Mn=e=>{if(e===null)return null;if(e===254)return F(`printers.expectedSlot.external`);if(e>=128&&e<=135)return pn?.[e]||cp(e,1);let t=Math.floor(e/4),n=e%4;return F(`printers.expectedSlot.label`,{ams:pn?.[t]||cp(t,4),slot:n+1})},Nn=W?.state===`PAUSE`?{expectedSlotLabel:Mn(An),ranOutSlotLabel:Mn(jn)}:null,{data:Pn}=K({queryKey:[`smartPlugByPrinter`,e.id],queryFn:()=>Z.getSmartPlugByPrinter(e.id)}),{data:Fn}=K({queryKey:[`scriptPlugsByPrinter`,e.id],queryFn:()=>Z.getScriptPlugsByPrinter(e.id)}),{data:In}=K({queryKey:[`smartPlugStatus`,Pn?.id],queryFn:()=>Pn?Z.getSmartPlugStatus(Pn.id):null,enabled:!!Pn,refetchInterval:1e4}),{data:Ln}=K({queryKey:[`queue`,e.id,`pending`],queryFn:()=>Z.getQueue(e.id,`pending`)}),Rn=(0,y.useMemo)(()=>Ln?.length?pm(Ln,an,on,sn).length:0,[Ln,an,on,sn]),{data:zn}=K({queryKey:[`queue`,e.id,`printing`],queryFn:()=>Z.getQueue(e.id,`printing`),enabled:W?.state===`RUNNING`}),{data:Bn}=K({queryKey:[`currentPrintUser`,e.id],queryFn:()=>Z.getCurrentPrintUser(e.id),enabled:W?.state===`RUNNING`}),Vn=zn?.[0]?.created_by_username||Bn?.username,{data:Hn}=K({queryKey:[`archives`,e.id,`last`],queryFn:()=>Z.getArchives(e.id,1,0),enabled:W?.connected&&W?.state!==`RUNNING`}),Un=Hn?.[0],Wn=W?.state===`RUNNING`||W?.state===`PAUSE`,Gn=C&&W?.awaiting_plate_clear===!0,Kn=Gn&&!Wn,qn=W?.current_print&&Wn?xee(W.subtask_name||W.current_print||null,W.gcode_file,F,fn):null,[Jn,Yn]=(0,y.useState)(null);(0,y.useEffect)(()=>{qn?Yn({name:qn,coverUrl:W?.cover_url??null}):Gn||Yn(null)},[qn,Gn,W?.cover_url]);let Xn=!C||!W?.connected?null:Wn?{label:F(`printers.plateStatus.inUse`),className:`bg-blue-100 dark:bg-blue-500/20 text-blue-700 dark:text-blue-400`}:W.awaiting_plate_clear?{label:F(`printers.plateStatus.notCleared`),className:`bg-yellow-100 dark:bg-yellow-500/20 text-yellow-700 dark:text-yellow-400`}:{label:F(`printers.plateStatus.cleared`),className:`bg-status-ok/20 text-status-ok`},Zn=Xn?(0,G.jsx)(`span`,{className:`inline-flex flex-shrink-0 items-center rounded-full px-2 py-0.5 text-[length:var(--pc-t10,10px)] font-medium ${Xn.className}`,children:Xn.label}):null,Qn=t&&yn===!1,$n=q({mutationFn:t=>Z.deletePrinter(e.id,t.deleteArchives),onSuccess:()=>{I.invalidateQueries({queryKey:[`printers`]}),I.invalidateQueries({queryKey:[`archives`]}),I.invalidateQueries({queryKey:[`maintenanceOverview`]})},onError:e=>R(e.message||F(`printers.toast.failedToDelete`),`error`)}),er=q({mutationFn:()=>Z.connectPrinter(e.id),onSuccess:()=>{I.invalidateQueries({queryKey:[`printerStatus`,e.id]})}}),tr=q({mutationFn:()=>Z.refreshPrinterStatus(e.id),onSuccess:()=>{I.invalidateQueries({queryKey:[`printerStatus`,e.id]}),R(F(`printers.forceRefreshSuccess`),`success`)},onError:e=>R(e.message||F(`printers.toast.failedToSendCommand`),`error`)}),nr=q({mutationFn:e=>Z.unlinkSpool(e),onSuccess:e=>{R(F(`spoolman.unlinkSuccess`)||e?.message,`success`),I.invalidateQueries({queryKey:[`linked-spools`]}),I.invalidateQueries({queryKey:[`unlinked-spools`]}),I.invalidateQueries({queryKey:[`spoolman-slot-assignments`]})},onError:e=>{R(e.message||F(`spoolman.unlinkFailed`),`error`)}}),rr=q({mutationFn:({amsId:t,temp:n,duration:r,filament:i,rotateTray:a})=>Z.startDrying(e.id,t,n,r,i,a),onSuccess:(t,{amsId:n})=>{Qe(null),Ct({amsId:n}),R(F(`printers.drying.toastCommandSent`),`success`),I.invalidateQueries({queryKey:[`printerStatus`,e.id]})},onError:e=>R(e.message||F(`printers.toast.failedToSendCommand`),`error`)}),ir=q({mutationFn:t=>Z.createScheduledDrying({printer_id:e.id,ams_id:t.amsId,temp:t.temp,duration_hours:t.duration,filament:t.filament,rotate_tray:t.rotateTray,start_after:t.startAfter}),onSuccess:()=>{I.invalidateQueries({queryKey:KW}),Qe(null)},onError:e=>R(e.message||F(`printers.drying.scheduleFailed`),`error`)}),ar=q({mutationFn:t=>Z.stopDrying(e.id,t),onSuccess:()=>{Ct(null),R(F(`printers.drying.toastStopped`),`success`),I.invalidateQueries({queryKey:[`printerStatus`,e.id]})},onError:e=>R(e.message||F(`printers.toast.failedToSendCommand`),`error`)}),sr=q({mutationFn:t=>Z.setAmsFilamentBackup(e.id,t),onSuccess:(t,n)=>{I.invalidateQueries({queryKey:[`printerStatus`,e.id]}),I.invalidateQueries({queryKey:[`printer-status`,e.id]}),R(F(n?`printers.amsBackup.toastEnabled`:`printers.amsBackup.toastDisabled`),`success`)},onError:e=>R(e.message||F(`printers.toast.failedToSendCommand`),`error`)}),cr=q({mutationFn:e=>Pn?Z.controlSmartPlug(Pn.id,e):Promise.reject(`No plug`),onSuccess:()=>{I.invalidateQueries({queryKey:[`smartPlugStatus`,Pn?.id]})}}),lr=q({mutationFn:e=>Pn?Z.updateSmartPlug(Pn.id,{auto_off:e}):Promise.reject(`No plug`),onSuccess:()=>{I.invalidateQueries({queryKey:[`smartPlugByPrinter`,e.id]}),I.invalidateQueries({queryKey:[`smart-plugs`]})}}),ur=q({mutationFn:({id:e,action:t})=>Z.controlSmartPlug(e,t),onSuccess:()=>{R(F(`printers.toast.scriptTriggered`))},onError:e=>R(e.message||F(`printers.toast.failedToRunScript`),`error`)}),dr=q({mutationFn:()=>Z.stopPrint(e.id),onSuccess:()=>{R(F(`printers.toast.printStopped`)),I.invalidateQueries({queryKey:[`printerStatus`,e.id]})},onError:e=>R(e.message||F(`printers.toast.failedToStopPrint`),`error`)}),fr=q({mutationFn:()=>Z.pausePrint(e.id),onSuccess:()=>{R(F(`printers.toast.printPaused`)),I.invalidateQueries({queryKey:[`printerStatus`,e.id]})},onError:e=>R(e.message||F(`printers.toast.failedToPausePrint`),`error`)}),pr=q({mutationFn:()=>Z.resumePrint(e.id),onSuccess:()=>{R(F(`printers.toast.printResumed`)),I.invalidateQueries({queryKey:[`printerStatus`,e.id]})},onError:e=>R(e.message||F(`printers.toast.failedToResumePrint`),`error`)}),mr=q({mutationFn:()=>Z.clearPlate(e.id),onSuccess:()=>{R(F(`queue.clearPlateSuccess`)),I.setQueryData([`printerStatus`,e.id],e=>e&&{...e,awaiting_plate_clear:!1}),I.invalidateQueries({queryKey:[`printerStatus`,e.id]}),I.invalidateQueries({queryKey:[`queue`,e.id]})},onError:e=>R(e.message||F(`printers.toast.failedToSendCommand`),`error`)}),hr=(0,G.jsxs)(`button`,{type:`button`,onClick:()=>mr.mutate(),disabled:mr.isPending||!z(`printers:clear_plate`),className:`mt-2 w-full inline-flex items-center justify-center gap-2 px-3 py-1.5 rounded-lg bg-yellow-100 dark:bg-yellow-500/20 border border-yellow-300 dark:border-yellow-400/40 text-yellow-700 dark:text-yellow-400 hover:bg-yellow-500/30 transition-colors text-xs font-medium disabled:opacity-50`,title:z(`printers:clear_plate`)?F(`printers.plateStatus.markCleared`):F(`printers.permission.noControl`),children:[mr.isPending?(0,G.jsx)(Y,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)] animate-spin`}):(0,G.jsx)(bW,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`}),F(`printers.plateStatus.markCleared`)]}),gr=q({mutationFn:({target:t,nozzle:n})=>Z.setNozzleTemperature(e.id,t,n),onSuccess:t=>{Fe(null),R(t.message),I.invalidateQueries({queryKey:[`printerStatus`,e.id]})},onError:e=>R(e.message||F(`printers.toast.failedToSendCommand`),`error`)}),_r=q({mutationFn:t=>Z.setBedTemperature(e.id,t),onSuccess:t=>{Fe(null),R(t.message),I.invalidateQueries({queryKey:[`printerStatus`,e.id]})},onError:e=>R(e.message||F(`printers.toast.failedToSendCommand`),`error`)}),vr=q({mutationFn:t=>Z.setChamberTemperature(e.id,t),onSuccess:t=>{Fe(null),R(t.message),I.invalidateQueries({queryKey:[`printerStatus`,e.id]})},onError:e=>R(e.message||F(`printers.toast.failedToSendCommand`),`error`)}),yr=q({mutationFn:({fan:t,speed:n})=>Z.setFanSpeed(e.id,t,n),onMutate:async({fan:t,speed:n})=>{await I.cancelQueries({queryKey:[`printerStatus`,e.id]});let r=I.getQueryData([`printerStatus`,e.id]),i={part:`cooling_fan_speed`,aux:`big_fan1_speed`,aux2:`left_aux_fan_speed`,chamber:`big_fan2_speed`}[t];return I.setQueryData([`printerStatus`,e.id],e=>e&&{...e,[i]:n}),{previousStatus:r}},onSuccess:t=>{Fe(null),R(t.message),I.invalidateQueries({queryKey:[`printerStatus`,e.id]})},onError:(t,n,r)=>{r?.previousStatus&&I.setQueryData([`printerStatus`,e.id],r.previousStatus),R(t.message||F(`printers.toast.failedToSendCommand`),`error`)}}),br=q({mutationFn:t=>Z.selectExtruder(e.id,t),onMutate:async t=>{await I.cancelQueries({queryKey:[`printerStatus`,e.id]});let n=I.getQueryData([`printerStatus`,e.id]);return I.setQueryData([`printerStatus`,e.id],e=>e&&{...e,active_extruder:t}),{previousStatus:n}},onSuccess:t=>{Fe(null),R(t.message),I.invalidateQueries({queryKey:[`printerStatus`,e.id]})},onError:(t,n,r)=>{r?.previousStatus&&I.setQueryData([`printerStatus`,e.id],r.previousStatus),R(t.message||F(`printers.toast.failedToSendCommand`),`error`)}}),xr=q({mutationFn:t=>Z.setChamberLight(e.id,t),onMutate:async t=>{await I.cancelQueries({queryKey:[`printerStatus`,e.id]});let n=I.getQueryData([`printerStatus`,e.id]);return I.setQueryData([`printerStatus`,e.id],e=>({...e,chamber_light:t})),{previousStatus:n}},onSuccess:(e,t)=>{R(`Chamber light ${t?`on`:`off`}`)},onError:(t,n,r)=>{r?.previousStatus&&I.setQueryData([`printerStatus`,e.id],r.previousStatus),R(t.message||F(`printers.toast.failedToControlChamberLight`),`error`)}}),Sr=q({mutationFn:t=>Z.setPrintSpeed(e.id,t),onMutate:async t=>{await I.cancelQueries({queryKey:[`printerStatus`,e.id]});let n=I.getQueryData([`printerStatus`,e.id]);return I.setQueryData([`printerStatus`,e.id],e=>({...e,speed_level:t})),{previousStatus:n}},onError:(t,n,r)=>{r?.previousStatus&&I.setQueryData([`printerStatus`,e.id],r.previousStatus),R(t.message||F(`printers.toast.failedToSetSpeed`),`error`)}}),Cr=q({mutationFn:t=>Z.setAirductMode(e.id,t),onMutate:async t=>{await I.cancelQueries({queryKey:[`printerStatus`,e.id]});let n=I.getQueryData([`printerStatus`,e.id]);return I.setQueryData([`printerStatus`,e.id],e=>({...e,airduct_mode:t===`cooling`?0:1})),{previousStatus:n}},onError:(t,n,r)=>{r?.previousStatus&&I.setQueryData([`printerStatus`,e.id],r.previousStatus),R(t.message||F(`printers.toast.failedToSendCommand`),`error`)}}),wr=q({mutationFn:({distance:t})=>Z.bedJog(e.id,t),onError:e=>R(e.message||F(`printers.toast.failedToSendCommand`),`error`)}),Tr=q({mutationFn:({x:t,y:n})=>Z.xyJog(e.id,t,n),onError:e=>R(e.message||F(`printers.toast.failedToSendCommand`),`error`)}),Er=q({mutationFn:t=>Z.extruderJog(e.id,t),onError:e=>R(e.message||F(`printers.toast.failedToSendCommand`),`error`)}),Dr=q({mutationFn:t=>Z.homeAxes(e.id,t),onSuccess:()=>{R(F(`printers.bedJog.homingStarted`))},onError:e=>R(e.message||F(`printers.toast.failedToSendCommand`),`error`)}),Or=q({mutationFn:t=>Z.updatePrinter(e.id,{plate_detection_enabled:t}),onSuccess:()=>{I.invalidateQueries({queryKey:[`printers`]}),R(Or.variables?F(`printers.toast.plateCheckEnabled`):F(`printers.toast.plateCheckDisabled`))},onError:e=>R(e.message||F(`printers.toast.failedToUpdateSetting`),`error`)}),kr=q({mutationFn:t=>Z.updatePrinter(e.id,{is_active:t}),onSuccess:(t,n)=>{I.invalidateQueries({queryKey:[`printers`]}),I.invalidateQueries({queryKey:[`printerStatus`,e.id]}),R(F(n?`printers.maintenance.toastExited`:`printers.maintenance.toastEntered`,{name:e.name}),`success`)},onError:e=>R(e.message||F(`printers.toast.failedToUpdateSetting`),`error`)}),[Ar,jr]=(0,y.useState)(!1),Mr=()=>{W?.state===`RUNNING`||W?.state===`PAUSE`?jr(!0):kr.mutate(!1)},Nr=(W?.state===`RUNNING`||W?.state===`PAUSE`)&&(W?.printable_objects_count??0)>=2,{data:Pr}=K({queryKey:[`printableObjects`,e.id],queryFn:()=>Z.getPrintableObjects(e.id),enabled:Be||Nr,refetchInterval:Be?5e3:Nr?3e4:!1}),[Fr,Ir]=(0,y.useState)(null),Lr=(0,y.useRef)(!1),Rr=(0,y.useRef)(null),zr=(0,y.useRef)(!1),Br=q({mutationFn:({amsId:t,slotId:n})=>Z.refreshAmsSlot(e.id,t,n),onMutate:({amsId:e,slotId:t})=>{Rr.current&&clearTimeout(Rr.current),Lr.current=!1,zr.current=!1,Ir({amsId:e,slotId:t}),setTimeout(()=>{zr.current=!0},2e3),Rr.current=setTimeout(()=>{Ir(null)},3e4)},onSuccess:e=>{R(e.message||F(`printers.toast.rfidRereadInitiated`))},onError:e=>{R(e.message||F(`printers.toast.failedToRereadRfid`),`error`),Rr.current&&clearTimeout(Rr.current),Ir(null)}}),Vr=q({mutationFn:({trayId:t})=>Z.loadAmsTray(e.id,t),onSuccess:e=>{R(e.message||F(`printers.toast.loadInitiated`))},onError:e=>{R(e.message||F(`printers.toast.failedToLoad`),`error`)}}),Hr=q({mutationFn:()=>Z.unloadAms(e.id),onSuccess:e=>{R(e.message||F(`printers.toast.unloadInitiated`))},onError:e=>{R(e.message||F(`printers.toast.failedToUnload`),`error`)}}),[Ur,Wr]=(0,y.useState)(null),[Gr,Kr]=(0,y.useState)(null),qr=async()=>{try{Wr(await Z.getPlateReferences(e.id))}catch{}},Jr=()=>{Or.mutate(!e.plate_detection_enabled)},Yr=async()=>{qt(!0),Gt(null);let t=W?.chamber_light===!1;tn(t),t&&(await Z.setChamberLight(e.id,!0),await new Promise(e=>setTimeout(e,2500)));try{Gt(await Z.checkPlateEmpty(e.id,{includeDebugImage:!0})),qr()}catch(n){R(n instanceof Error?n.message:F(`printers.toast.failedToCheckPlate`),`error`),t&&(await Z.setChamberLight(e.id,!1),tn(!1))}finally{qt(!1)}},Xr=(0,y.useCallback)(async()=>{Gt(null),en&&(await Z.setChamberLight(e.id,!1),tn(!1))},[en,e.id]),Zr=async t=>{Yt(!0);try{let n=await Z.calibratePlateDetection(e.id,{label:t});n.success?(R(n.message||F(`printers.toast.calibrationSaved`),`success`),qr(),Gt(await Z.checkPlateEmpty(e.id,{includeDebugImage:!0}))):R(n.message||F(`printers.toast.calibrationFailed`),`error`)}catch(e){R(e instanceof Error?e.message:F(`printers.toast.calibrationFailed`),`error`)}finally{Yt(!1)}},Qr=async(t,n)=>{try{await Z.updatePlateReferenceLabel(e.id,t,n),Kr(null),qr()}catch(e){R(e instanceof Error?e.message:F(`printers.toast.failedToUpdateLabel`),`error`)}},$r=async t=>{try{await Z.deletePlateReference(e.id,t),R(F(`printers.toast.referenceDeleted`),`success`),qr(),Gt(await Z.checkPlateEmpty(e.id,{includeDebugImage:!0}))}catch(e){R(e instanceof Error?e.message:F(`printers.toast.failedToDeleteReference`),`error`)}},ei=async()=>{if(Xt){$t(!0);try{await Z.updatePrinter(e.id,{plate_detection_roi:Xt}),R(F(`printers.toast.detectionAreaSaved`),`success`),Zt(null),Gt(await Z.checkPlateEmpty(e.id,{includeDebugImage:!0}))}catch(e){R(e instanceof Error?e.message:F(`printers.toast.failedToSaveDetectionArea`),`error`)}finally{$t(!1)}}};(0,y.useEffect)(()=>{let e=e=>{e.key===`Escape`&&Wt&&Xr()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[Wt,Xr]);let ti=(0,y.useRef)(null);if((0,y.useEffect)(()=>{if(!Fr)return;let e=W?.ams_status_main??0;return e!==0&&(Lr.current=!0,ti.current&&=(clearTimeout(ti.current),null)),Lr.current&&e===0&&(zr.current?(Rr.current&&clearTimeout(Rr.current),Ir(null)):ti.current||=setTimeout(()=>{Rr.current&&clearTimeout(Rr.current),Ir(null)},2e3)),()=>{ti.current&&clearTimeout(ti.current)}},[W?.ams_status_main,Fr]),(0,y.useEffect)(()=>{if(!B)return;let e=e=>{let t=e.target;Ot.current?.contains(t)||V(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[B]),Qn)return null;let ni=NOe(i),ri=()=>{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`}},ii=()=>{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`}},ai=()=>{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`}},oi=z(`library:upload`)&&z(`queue:create`),si=!fm(W),ci=e=>{e.preventDefault(),jt.current++,jt.current===1&&Tt(!0)},li=e=>{e.preventDefault(),e.dataTransfer.dropEffect=oi?`copy`:`none`},ui=e=>{e.preventDefault(),jt.current--,jt.current===0&&Tt(!1)},di=async t=>{if(t.preventDefault(),jt.current=0,Tt(!1),!oi)return;let n=Array.from(t.dataTransfer.files)[0];if(!n)return;let r=n.name.toLowerCase();if(!r.endsWith(`.gcode`)&&!r.includes(`.gcode.`)){R(F(`printers.dropNotPrintable`,`Only .gcode and .gcode.3mf files can be printed`),`error`);return}Dt(!0);try{let t=await Z.uploadLibraryFile(n,null),r=t.metadata?.sliced_for_model,i=dG(e.model);if(r&&i&&r.toLowerCase()!==i.toLowerCase()){await Z.deleteLibraryFile(t.id).catch(()=>{}),R(F(`printers.incompatibleFile`,`This file was sliced for {{slicedFor}}, but this printer is a {{printerModel}}`,{slicedFor:r,printerModel:i}),`error`);return}Xe({id:t.id,filename:t.filename})}catch{R(F(`common.uploadFailed`,`Upload failed`),`error`)}finally{Dt(!1)}},fi=t=>{r!==`compact`||w||t.target.closest(`button, a, input, select, textarea, [role="button"]`)||D?.(e.id)},pi=`!h-8 !min-h-8 !w-8 !px-0 !py-0`,mi=t=>{t===`embedded`&&v?v(e.id,e.name):om(e.id)},hi=[{mode:`window`,icon:(0,G.jsx)(tc,{className:`w-4 h-4`}),label:F(`settings.newWindow`),title:F(`settings.cameraWindowDescription`)},{mode:`embedded`,icon:(0,G.jsx)(Ol,{className:`w-4 h-4`}),label:F(`settings.embeddedOverlay`),title:F(`settings.cameraOverlayDescription`)}].map(({mode:e,icon:t,label:n,title:r})=>({icon:t,label:e===_?`${n} ✓`:n,title:r,onClick:()=>{b?.(e),mi(e)}})),gi=({amsId:e,slotId:t,loadTrayId:n,isRefreshing:r,includeRfid:i=!0})=>{let a=W?.state===`RUNNING`;return(0,G.jsxs)(G.Fragment,{children:[i&&(0,G.jsxs)(`button`,{className:`w-full px-2 py-1.5 text-left text-xs flex items-center gap-2 rounded transition-colors ${z(`printers:ams_rfid`)?`text-white hover:bg-bambu-dark-tertiary`:`text-bambu-gray/50 cursor-not-allowed`}`,onClick:n=>{n.stopPropagation(),!(a||!z(`printers:ams_rfid`))&&Br.mutate({amsId:e,slotId:t})},disabled:a||r||!z(`printers:ams_rfid`),title:a?F(`printers.bedJog.disabledWhilePrinting`):z(`printers:ams_rfid`)?void 0:F(`printers.permission.noAmsRfid`),children:[(0,G.jsx)(Rl,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)] ${r?`animate-spin`:``}`}),F(`printers.rfid.reread`)]}),(0,G.jsxs)(`button`,{className:`w-full px-2 py-1.5 text-left text-xs flex items-center gap-2 rounded transition-colors ${z(`printers:control`)?`text-white hover:bg-bambu-dark-tertiary`:`text-bambu-gray/50 cursor-not-allowed`}`,onClick:e=>{e.stopPropagation(),!(a||!z(`printers:control`))&&Vr.mutate({trayId:n})},disabled:a||!z(`printers:control`),title:a?F(`printers.bedJog.disabledWhilePrinting`):z(`printers:control`)?void 0:F(`printers.permission.noControl`),children:[(0,G.jsx)(el,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),F(`printers.ams.load`)]}),(0,G.jsxs)(`button`,{className:`w-full px-2 py-1.5 text-left text-xs flex items-center gap-2 rounded transition-colors ${z(`printers:control`)?`text-white hover:bg-bambu-dark-tertiary`:`text-bambu-gray/50 cursor-not-allowed`}`,onClick:e=>{e.stopPropagation(),!(a||!z(`printers:control`))&&Hr.mutate()},disabled:a||!z(`printers:control`),title:a?F(`printers.bedJog.disabledWhilePrinting`):z(`printers:control`)?void 0:F(`printers.permission.noControl`),children:[(0,G.jsx)(tl,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),F(`printers.ams.unload`)]})]})},_i=(0,G.jsxs)(`div`,{ref:Ot,className:`relative flex-shrink-0`,children:[(0,G.jsx)(Q,{variant:`secondary`,size:`sm`,onClick:()=>V(!B),title:F(`common.more`,`More`),className:pi,children:(0,G.jsx)(Zs,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})}),B&&(0,G.jsxs)(`div`,{className:`absolute left-0 bottom-full mb-2 w-48 bg-bambu-dark-secondary border border-bambu-dark-tertiary rounded-lg shadow-lg z-20`,children:[(0,G.jsxs)(`button`,{className:`w-full px-4 py-2 text-left text-sm flex items-center gap-2 ${z(`printers:update`)?`hover:bg-bambu-dark-tertiary`:`opacity-50 cursor-not-allowed`}`,onClick:()=>{z(`printers:update`)&&(ae(!0),V(!1))},title:z(`printers:update`)?void 0:F(`printers.permission.noEdit`),children:[(0,G.jsx)(El,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`}),F(`common.edit`)]}),(0,G.jsxs)(`button`,{className:`w-full px-4 py-2 text-left text-sm hover:bg-bambu-dark-tertiary flex items-center gap-2`,onClick:()=>{Ge(!0),V(!1)},children:[(0,G.jsx)(Bc,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`}),F(`printers.printerInformation`)]}),(0,G.jsxs)(`button`,{className:`w-full px-4 py-2 text-left text-sm flex items-center gap-2 ${z(`printers:update`)?`hover:bg-bambu-dark-tertiary`:`opacity-50 cursor-not-allowed`}`,disabled:kr.isPending||!z(`printers:update`),onClick:()=>{z(`printers:update`)&&(V(!1),e.is_active===!1?kr.mutate(!0):Mr())},title:z(`printers:update`)?void 0:F(`printers.permission.noEdit`),children:[(0,G.jsx)(Zu,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`}),e.is_active===!1?F(`printers.maintenance.menuExit`):F(`printers.maintenance.menuEnter`)]}),(0,G.jsxs)(`button`,{className:`w-full px-4 py-2 text-left text-sm hover:bg-bambu-dark-tertiary flex items-center gap-2`,onClick:()=>{er.mutate(),V(!1)},children:[(0,G.jsx)(Rl,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`}),F(`printers.reconnect`)]}),(0,G.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:tr.isPending,onClick:()=>{tr.mutate(),V(!1)},children:[(0,G.jsx)(Vl,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)] ${tr.isPending?`animate-spin`:``}`}),F(`printers.forceRefresh`)]}),(0,G.jsxs)(`button`,{className:`w-full px-4 py-2 text-left text-sm hover:bg-bambu-dark-tertiary flex items-center gap-2`,onClick:()=>{ce(!0),V(!1)},children:[(0,G.jsx)(wu,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`}),F(`printers.mqttDebug`)]}),(0,G.jsxs)(`button`,{className:`w-full px-4 py-2 text-left text-sm hover:bg-bambu-dark-tertiary flex items-center gap-2`,onClick:()=>{qe(!0),V(!1)},children:[(0,G.jsx)(vu,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`}),F(`diagnostic.runButton`)]}),(0,G.jsxs)(`button`,{className:`w-full px-4 py-2 text-left text-sm flex items-center gap-2 ${z(`printers:delete`)?`text-red-700 dark:text-red-400 hover:bg-bambu-dark-tertiary`:`text-red-700/50 dark:text-red-400/50 cursor-not-allowed`}`,onClick:()=>{z(`printers:delete`)&&(te(!0),V(!1))},title:z(`printers:delete`)?void 0:F(`printers.permission.noDelete`),children:[(0,G.jsx)(Au,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`}),F(`common.delete`)]})]})]});return(0,G.jsxs)(jd,{id:`printer-card-${e.id}`,className:`relative flex h-full flex-col ${T?`ring-2 ring-bambu-green`:``} ${w||r===`compact`?`cursor-pointer`:``}`,style:ni,onClick:fi,onDragEnter:ci,onDragOver:li,onDragLeave:ui,onDrop:di,children:[w&&(0,G.jsx)(`div`,{className:`absolute inset-0 z-20 flex items-start p-2`,onClick:t=>{t.stopPropagation(),E?.(e.id)},children:T?(0,G.jsx)(mu,{className:`w-[var(--pc-i5,1.25rem)] h-[var(--pc-i5,1.25rem)] text-bambu-green`}):(0,G.jsx)(gu,{className:`w-[var(--pc-i5,1.25rem)] h-[var(--pc-i5,1.25rem)] text-bambu-gray`})}),(wt||Et)&&(0,G.jsx)(`div`,{className:`absolute inset-0 z-10 rounded-xl border-2 border-dashed flex items-center justify-center transition-colors ${Et?`bg-bambu-green/10 border-bambu-green/50`:oi?`bg-bambu-green/10 border-bambu-green`:`bg-red-50 dark:bg-red-500/10 border-red-300 dark:border-red-500/50`}`,children:(0,G.jsx)(`div`,{className:`text-center`,children:Et?(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(Y,{className:`w-8 h-8 mx-auto mb-2 text-bambu-green animate-spin`}),(0,G.jsx)(`p`,{className:`text-sm font-medium text-bambu-green`,children:F(`common.uploading`,`Uploading...`)})]}):oi?(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(Pl,{className:`w-8 h-8 mx-auto mb-2 text-bambu-green`}),(0,G.jsx)(`p`,{className:`text-sm font-medium text-bambu-green`,children:F(si?`printers.dropToQueue`:`printers.dropToPrint`)})]}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(Qu,{className:`w-8 h-8 mx-auto mb-2 text-red-600 dark:text-red-400`}),(0,G.jsx)(`p`,{className:`text-sm font-medium text-red-700 dark:text-red-400`,children:z(`library:upload`)?F(`fileManager.noPermissionAddToQueue`):F(`fileManager.noPermissionUpload`)})]})})}),(0,G.jsxs)(Nd,{className:`${i>=3?`p-5`:``} flex flex-1 flex-col`,children:[(0,G.jsxs)(`div`,{className:ai(),children:[(0,G.jsx)(`div`,{className:`flex items-start justify-between gap-2`,children:(0,G.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0 flex-1`,children:[(0,G.jsx)(`img`,{src:lm(e.model),alt:e.model||F(`common.printer`),className:`object-contain rounded-lg flex-shrink-0 ${ri()}`}),(0,G.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,G.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,G.jsx)(`h3`,{className:`font-semibold text-white ${ii()}`,children:e.name}),r===`compact`&&(()=>{let e=W?.connected&&W.hms_errors?Cm(W.hms_errors):[],t=e.some(e=>e.severity<=2),n=e.length>0,r=W?.connected?t?`bg-status-error`:n?`bg-status-warning`:`bg-status-ok`:`bg-status-error`,i=W?.connected?n?`${e.length} HMS ${e.length===1?`error`:`errors`}`:F(`printers.connection.connected`):F(`printers.connection.offline`);return(0,G.jsx)(`div`,{className:`w-[var(--pc-i2,0.5rem)] h-[var(--pc-i2,0.5rem)] rounded-full flex-shrink-0 ${r}`,title:i})})()]}),r===`compact`&&Kn&&(0,G.jsx)(`button`,{type:`button`,onClick:()=>mr.mutate(),disabled:mr.isPending||!z(`printers:clear_plate`),"aria-label":F(`printers.plateStatus.markCleared`),className:`inline-flex h-5 w-5 flex-shrink-0 items-center justify-center rounded-md bg-yellow-100 dark:bg-yellow-500/20 border border-yellow-300 dark:border-yellow-400/40 text-yellow-700 dark:text-yellow-400 hover:bg-yellow-500/30 transition-colors disabled:opacity-50`,title:z(`printers:clear_plate`)?F(`printers.plateStatus.markCleared`):F(`printers.permission.noControl`),children:mr.isPending?(0,G.jsx)(Y,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)] animate-spin`}):(0,G.jsx)(bW,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`})})]}),(0,G.jsxs)(`p`,{className:`text-sm text-bambu-gray`,children:[e.model||`Unknown Model`,r===`expanded`&&W?.nozzles&&W.nozzles[0]?.nozzle_diameter&&(0,G.jsxs)(`span`,{className:`ml-1.5 text-bambu-gray`,title:W.nozzles[0].nozzle_type||`Nozzle`,children:[`• `,W.nozzles[0].nozzle_diameter,`mm`]}),r===`expanded`&&n&&n.total_print_hours>0&&(0,G.jsxs)(`span`,{className:`ml-2 text-bambu-gray`,children:[(0,G.jsx)(As,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)] inline-block mr-1`}),Math.round(n.total_print_hours),`h`]})]})]})]})}),r===`expanded`&&(0,G.jsx)(`div`,{className:`mt-2`,children:(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[e.is_active===!1?(0,G.jsxs)(`span`,{className:`flex items-center gap-1.5 px-2 py-1 rounded-full text-xs bg-amber-100 dark:bg-amber-500/20 text-amber-700 dark:text-amber-400`,title:F(`printers.maintenance.subtitle`),children:[(0,G.jsx)(Zu,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),F(`printers.maintenance.pillLabel`)]}):(0,G.jsxs)(`span`,{className:`flex items-center gap-1.5 px-2 py-1 rounded-full text-xs ${W?.connected?`bg-status-ok/20 text-status-ok`:`bg-status-error/20 text-status-error`}`,children:[W?.connected?(0,G.jsx)(Jc,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}):(0,G.jsx)(Iu,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),W?.connected?F(`printers.connection.connected`):F(`printers.connection.offline`)]}),e.is_active!==!1&&!W?.connected&&(0,G.jsxs)(`button`,{onClick:()=>qe(!0),className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs cursor-pointer bg-bambu-dark-tertiary text-bambu-gray hover:text-white transition-colors`,title:F(`diagnostic.runButton`),children:[(0,G.jsx)(vu,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),F(`diagnostic.runButton`)]}),W?.connected&&W?.wired_network&&(0,G.jsxs)(`span`,{className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs bg-status-ok/20 text-status-ok`,title:F(`printers.connection.ethernet`,`Ethernet`),children:[(0,G.jsx)(es,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),F(`printers.connection.ethernet`,`Ethernet`)]}),W?.connected&&!W?.wired_network&&_n!=null&&(0,G.jsxs)(`span`,{className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs ${_n>=-50||_n>=-60?`bg-status-ok/20 text-status-ok`:_n>=-70?`bg-status-warning/20 text-status-warning`:_n>=-80?`bg-orange-500/20 text-orange-600`:`bg-status-error/20 text-status-error`}`,title:`WiFi: ${_n} dBm - ${F(dm(_n).labelKey)}`,children:[(0,G.jsx)(au,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),_n,`dBm`]}),W?.connected&&(()=>{let e=W.hms_errors?Cm(W.hms_errors):[];return(0,G.jsxs)(`button`,{onClick:()=>ge(!0),className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs cursor-pointer hover:opacity-80 transition-opacity ${e.length>0?e.some(e=>e.severity<=2)?`bg-status-error/20 text-status-error`:`bg-status-warning/20 text-status-warning`:`bg-status-ok/20 text-status-ok`}`,title:F(`printers.clickToViewHmsErrors`),children:[(0,G.jsx)(Nu,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),e.length>0?e.length:`OK`]})})(),M&&(()=>{let e=N?N.class===`failure`||N.class===`warning`?N.class:`safe`:`idle`;return(0,G.jsxs)(`button`,{onClick:()=>ve(!0),className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs cursor-pointer hover:opacity-80 transition-opacity ${e===`failure`?`bg-status-error/20 text-status-error`:e===`warning`?`bg-status-warning/20 text-status-warning`:e===`safe`?`bg-status-ok/20 text-status-ok`:`bg-bambu-dark-tertiary text-bambu-gray`}`,title:N?F(`printers.aiDetection.tooltip`,{status:F(`printers.aiDetection.${e}`),score:N.score.toFixed(3)}):F(`printers.aiDetection.tooltipIdle`),children:[(0,G.jsx)(Gl,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),F(`printers.aiDetection.${e}`)]})})(),n&&(0,G.jsxs)(`button`,{onClick:()=>L(`/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`:F(`printers.maintenanceUpToDate`),children:[(0,G.jsx)(Zu,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),n.due_count>0||n.warning_count>0?n.due_count+n.warning_count:`OK`]}),Rn>0&&(0,G.jsxs)(`button`,{onClick:()=>L(`/queue`),className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs bg-indigo-100 dark:bg-indigo-500/20 text-indigo-700 dark:text-indigo-400 hover:opacity-80 transition-opacity`,title:F(`printers.queue.inQueue`,{count:Rn}),children:[(0,G.jsx)(Wc,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),Rn]}),x&&nn?.current_version&&nn?.latest_version?(0,G.jsxs)(`button`,{onClick:()=>Ut(!0),className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs hover:opacity-80 transition-opacity ${nn.update_available?`bg-orange-100 dark:bg-orange-500/20 text-orange-700 dark:text-orange-400`:`bg-status-ok/20 text-status-ok`}`,title:nn.update_available?F(`printers.firmwareUpdateAvailable`,{current:nn.current_version,latest:nn.latest_version}):F(`printers.firmwareUpToDate`,{version:nn.current_version}),children:[nn.update_available?(0,G.jsx)(Js,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}):(0,G.jsx)(bs,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),nn.current_version]}):W?.firmware_version?(0,G.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:W.firmware_version}):null,W?.connected&&[`X1C`,`X1`,`X1E`,`X2D`,`P2S`,`H2D`,`H2D Pro`,`H2C`,`H2S`].includes(e.model??``)&&(0,G.jsx)(`span`,{className:`flex items-center px-2 py-1 rounded-full text-xs ${W.door_open?`bg-yellow-100 dark:bg-yellow-500/20 text-yellow-700 dark:text-yellow-400`:`bg-status-ok/20 text-status-ok`}`,title:W.door_open?F(`printers.door.open`):F(`printers.door.closed`),children:W.door_open?(0,G.jsx)(qs,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}):(0,G.jsx)(Ks,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`})})]})})]}),ee&&(0,G.jsx)(`div`,{className:`fixed inset-0 bg-black/50 flex items-center justify-center z-50`,children:(0,G.jsx)(jd,{className:`w-full max-w-md mx-4`,children:(0,G.jsxs)(Nd,{children:[(0,G.jsxs)(`div`,{className:`flex items-start gap-3 mb-4`,children:[(0,G.jsx)(`div`,{className:`p-2 rounded-full bg-red-100 dark:bg-red-500/20`,children:(0,G.jsx)(Nu,{className:`w-[var(--pc-i5,1.25rem)] h-[var(--pc-i5,1.25rem)] text-red-600 dark:text-red-400`})}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`h3`,{className:`text-lg font-semibold text-white`,children:F(`printers.confirm.deleteTitle`)}),(0,G.jsx)(`p`,{className:`text-sm text-bambu-gray mt-1`,children:F(`printers.confirm.deleteMessage`,{name:e.name})})]})]}),(0,G.jsx)(`div`,{className:`bg-bambu-dark rounded-lg p-3 mb-4`,children:(0,G.jsxs)(`label`,{className:`flex items-start gap-3 cursor-pointer`,children:[(0,G.jsx)(`input`,{type:`checkbox`,checked:ne,onChange:e=>re(e.target.checked),className:`mt-0.5 w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)] rounded border-bambu-gray bg-bambu-dark-secondary text-bambu-green focus:ring-bambu-green focus:ring-offset-0`}),(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`span`,{className:`text-sm text-white`,children:F(`printers.deleteArchives`)}),(0,G.jsx)(`p`,{className:`text-xs text-bambu-gray mt-0.5`,children:F(ne?`printers.confirm.deleteArchivesNote`:`printers.confirm.keepArchivesNote`)})]})]})}),(0,G.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,G.jsx)(Q,{variant:`secondary`,onClick:()=>{te(!1),re(!0)},children:F(`common.cancel`)}),(0,G.jsx)(Q,{variant:`danger`,onClick:()=>{$n.mutate({deleteArchives:ne}),te(!1),re(!0)},children:`Delete`})]})]})})}),e.is_active===!1?(0,G.jsx)(G.Fragment,{children:r===`compact`?(0,G.jsxs)(`div`,{className:`mt-2 flex items-center gap-2 px-2 py-1.5 rounded-full bg-amber-50 dark:bg-amber-500/15 border border-amber-300 dark:border-amber-500/30`,children:[(0,G.jsx)(Zu,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)] text-amber-600 dark:text-amber-400 shrink-0`}),(0,G.jsx)(`span`,{className:`text-[length:var(--pc-t11,11px)] text-amber-700 dark:text-amber-400 font-medium truncate`,children:F(`printers.maintenance.pillLabel`)})]}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2 mb-2`,children:[(0,G.jsx)(`span`,{className:`text-[length:var(--pc-t10,10px)] uppercase tracking-wider text-bambu-gray font-medium`,children:F(`printers.status.title`,`Status`)}),(0,G.jsx)(`div`,{className:`flex-1 h-[2px] bg-bambu-dark-tertiary`})]}),(0,G.jsxs)(`div`,{className:`p-3 bg-amber-50 dark:bg-amber-500/10 border border-amber-300 dark:border-amber-500/30 rounded-[10px] flex items-center gap-3`,children:[(0,G.jsx)(Zu,{className:`w-6 h-6 text-amber-600 dark:text-amber-400 shrink-0`}),(0,G.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,G.jsx)(`p`,{className:`text-sm text-amber-700 dark:text-amber-400 font-medium`,children:F(`printers.maintenance.title`)}),(0,G.jsx)(`p`,{className:`text-xs text-bambu-gray mt-0.5`,children:F(`printers.maintenance.subtitle`)})]}),(0,G.jsx)(Q,{variant:`secondary`,size:`sm`,disabled:kr.isPending||!z(`printers:update`),onClick:()=>kr.mutate(!0),title:z(`printers:update`)?void 0:F(`printers.permission.noEdit`),children:F(`printers.maintenance.exitButton`)})]})]})}):W?.connected&&(0,G.jsxs)(G.Fragment,{children:[r===`compact`?(()=>{let e=W.hms_errors?Cm(W.hms_errors):[],t=W.state===`FAILED`||e.length>0,n=W.state===`RUNNING`||W.state===`PAUSE`?Math.max(0,Math.min(100,W.progress||0)):Kn||t?100:0,r=W.state===`RUNNING`||W.state===`PAUSE`,i=t?`bg-status-error`:W.state===`PAUSE`?`bg-status-warning`:`bg-bambu-green`,a=r&&W.remaining_time!=null&&W.remaining_time>0,o=r&&W.layer_num!=null&&W.total_layers!=null&&W.total_layers>0;return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`div`,{className:`relative mt-2 flex items-center gap-2`,children:[(0,G.jsx)(`div`,{className:`h-1.5 min-w-0 flex-1 overflow-hidden rounded-full bg-bambu-dark-tertiary`,children:(0,G.jsx)(`div`,{className:`${i} h-1.5 rounded-full transition-all`,style:{width:`${n}%`}})}),(0,G.jsx)(`span`,{className:`w-9 shrink-0 text-right text-[length:var(--pc-t11,11px)] leading-none ${r?`text-white`:`text-bambu-gray`}`,children:r?`${Math.round(n)}%`:`---%`})]}),(0,G.jsxs)(`div`,{className:`mt-1 flex min-h-[14px] items-center gap-2 overflow-hidden text-[length:var(--pc-t11,11px)] leading-none text-bambu-gray`,children:[a&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`span`,{className:`flex shrink-0 items-center gap-1`,children:[(0,G.jsx)(As,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),Qf(W.remaining_time*60)]}),(0,G.jsxs)(`span`,{className:`shrink-0 font-medium text-bambu-green`,title:F(`printers.estimatedCompletion`),children:[`ETA `,Zf(W.remaining_time,g,F)]})]}),o&&(0,G.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1 truncate`,children:[(0,G.jsx)(Wc,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)] shrink-0`}),W.layer_num,`/`,W.total_layers]})]})]})})():(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2 mb-2`,children:[(0,G.jsx)(`span`,{className:`text-[length:var(--pc-t10,10px)] uppercase tracking-wider text-bambu-gray font-medium`,children:F(`printers.status.title`,`Status`)}),(0,G.jsx)(`div`,{className:`flex-1 h-[2px] bg-bambu-dark-tertiary`})]}),(()=>{let t=!!(W.current_print&&(W.state===`RUNNING`||W.state===`PAUSE`)),n=!t&&Gn&&Jn,r=t?qn:n?Jn.name:null,i=t?W.cover_url:n?Jn.coverUrl:null,a=t?W.progress||0:n?100:0,o=W.printable_objects_count??0,s=t&&o!==1&&z(`printers:control`);return(0,G.jsxs)(`div`,{className:`p-2 bg-bambu-dark rounded-[10px] relative overflow-hidden`,children:[(0,G.jsxs)(`button`,{onClick:()=>Ve(!0),disabled:!s,className:`absolute top-2 right-2 p-1.5 rounded transition-colors z-10 ${s?`text-bambu-gray hover:text-white hover:bg-white/10`:`text-bambu-gray/30 cursor-not-allowed`}`,title:z(`printers:control`)?F(t?o===1?`printers.skipObjects.requiresMultiple`:`printers.skipObjects.tooltip`:`printers.skipObjects.onlyWhilePrinting`):F(`printers.permission.noControl`),children:[(0,G.jsx)(ST,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`}),Pr&&Pr.skipped_count>0&&(0,G.jsx)(`span`,{className:`absolute -top-1 -right-1 min-w-[16px] h-4 px-1 flex items-center justify-center text-[length:var(--pc-t10,10px)] font-bold bg-red-500 text-white rounded-full`,children:Pr.skipped_count})]}),(0,G.jsxs)(`div`,{className:`flex items-stretch gap-2`,children:[(0,G.jsx)(EOe,{url:i,printName:r||void 0,className:`w-24 h-24 max-[520px]:w-20 max-[520px]:h-20`}),(0,G.jsxs)(`div`,{className:`flex h-24 max-[520px]:h-20 min-w-0 flex-1 flex-col justify-between pt-1`,children:[(0,G.jsxs)(`div`,{className:`flex min-h-[18px] items-center gap-2 pr-8`,children:[(0,G.jsx)(`p`,{className:`min-w-0 truncate text-sm text-bambu-gray`,children:AOe(W.state,W.stg_cur_name)}),Zn]}),(0,G.jsx)(`p`,{className:`min-h-[18px] truncate pr-8 text-sm ${r?`text-white`:`text-bambu-gray/70`}`,children:r||F(`printers.noActiveJob`,`No active job`)}),(0,G.jsxs)(`div`,{className:`flex h-3 items-center gap-2 text-sm`,children:[(0,G.jsx)(`div`,{className:`h-1.5 min-w-0 flex-1 rounded-full bg-bambu-dark-tertiary`,children:(0,G.jsx)(`div`,{className:`${t?W.state===`PAUSE`?`bg-status-warning`:`bg-bambu-green`:n?`bg-bambu-green`:`bg-bambu-dark-tertiary`} h-1.5 rounded-full transition-all`,style:{width:`${a}%`}})}),(0,G.jsx)(`span`,{className:`w-9 shrink-0 pr-1 text-right text-[length:var(--pc-t11,11px)] leading-none ${t||n?`text-white`:`text-bambu-gray`}`,children:t||n?`${Math.round(a)}%`:`---%`})]}),(0,G.jsx)(`div`,{className:`flex min-h-[16px] items-center gap-2 text-xs text-bambu-gray`,children:t?(0,G.jsxs)(G.Fragment,{children:[W.remaining_time!=null&&W.remaining_time>0&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,G.jsx)(As,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),Qf(W.remaining_time*60)]}),(0,G.jsxs)(`span`,{className:`text-bambu-green font-medium`,title:F(`printers.estimatedCompletion`),children:[`ETA `,Zf(W.remaining_time,g,F)]})]}),W.layer_num!=null&&W.total_layers!=null&&W.total_layers>0&&(0,G.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,G.jsx)(Wc,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),W.layer_num,`/`,W.total_layers]}),Vn&&(0,G.jsxs)(`span`,{className:`flex items-center gap-1`,title:`Started by ${Vn}`,children:[(0,G.jsx)(Ru,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),Vn]})]}):Un?(0,G.jsxs)(`p`,{className:`truncate`,title:Un.print_name||Un.filename,children:[`Last: `,Un.print_name||Un.filename,Un.completed_at&&(0,G.jsxs)(`span`,{className:`ml-1 text-bambu-gray/60`,children:[`• `,Jf(Un.completed_at,{month:`short`,day:`numeric`})]})]}):(0,G.jsx)(`span`,{children:F(`printers.readyToPrint`)})})]})]}),(0,G.jsx)(Wse,{printerId:e.id,printerModel:e.model,loadedFilamentTypes:an,loadedFilaments:on,loadedVariants:sn,variant:`panelExtension`})]})})()]}),W.temperatures&&r===`expanded`&&(()=>{let t=W.temperatures.nozzle_heating||W.temperatures.nozzle_2_heating||!1,n=W.temperatures.bed_heating||!1,r=W.temperatures.chamber_heating||!1,i=e.nozzle_count===2||W.temperatures.nozzle_2!==void 0,a=(()=>{let e=[`nozzle`];return W.temperatures.nozzle_2!==void 0&&e.push(`nozzle_2`),e.push(`bed`),W.temperatures.chamber!==void 0&&e.push(`chamber`),e})(),o=W.active_extruder===1?`L`:`R`,s=W.nozzle_rack?.find(e=>e.id===1),c=W.nozzle_rack?.find(e=>e.id===0),l=c||s,u=W.connected&&z(`printers:control`),d=u?void 0:F(`printers.permission.noControl`),f=`relative text-center px-2 py-1.5 bg-bambu-dark rounded-lg flex-1 flex flex-col justify-center items-center transition-colors ${u?`cursor-pointer hover:bg-bambu-dark-tertiary`:`cursor-default opacity-80`}`,p=jOe.has(e.model??``),m=MOe.has(e.model??``),h=F(m?`printers.fans.exhaust`:`printers.fans.chamber`),g=p&&(!m||W.exhaust_fan_present),_=[{key:`part`,label:F(`printers.fans.partCooling`),value:W.cooling_fan_speed??0,Icon:ic,activeClass:`text-cyan-600 dark:text-cyan-400`},...W.left_aux_fan_speed==null?[]:[{key:`aux2`,label:F(`printers.fans.leftAuxiliary`),value:W.left_aux_fan_speed,Icon:Yu,activeClass:`text-indigo-600 dark:text-indigo-400`}],{key:`aux`,label:F(`printers.fans.auxiliary`),value:W.big_fan1_speed??0,Icon:Yu,activeClass:`text-blue-600 dark:text-blue-400`},...g?[{key:`chamber`,label:h,value:W.big_fan2_speed??0,Icon:No,activeClass:`text-green-600 dark:text-green-400`}]:[]];return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`div`,{className:`mt-2 flex items-stretch gap-1.5 flex-wrap`,children:[(0,G.jsxs)(`div`,{className:f,title:d,onClick:()=>u&&Fe(Pe===`nozzle-temp`?null:`nozzle-temp`),children:[(0,G.jsx)(`button`,{type:`button`,className:`absolute top-0.5 right-0.5 p-0.5 rounded text-bambu-gray hover:text-white hover:bg-white/10 transition-colors`,title:F(`printers.heaterHistory.openLabel`,`View heater history`),onClick:e=>{e.stopPropagation(),Ft({initialKind:`nozzle`,availableKinds:a})},children:(0,G.jsx)(cs,{className:`w-[var(--pc-i25,0.625rem)] h-[var(--pc-i25,0.625rem)]`})}),(0,G.jsx)(tG,{className:`w-[var(--pc-i35,0.875rem)] h-[var(--pc-i35,0.875rem)] mb-0.5`,color:`text-orange-400`,isHeating:t}),W.temperatures.nozzle_2===void 0?l?(0,G.jsx)(eG,{slot:l,index:0,activeStatus:!0,filamentName:l.filament_id?cn?.[l.filament_id]?.name:void 0,children:(0,G.jsxs)(`div`,{className:`cursor-default`,children:[(0,G.jsx)(`p`,{className:`text-[length:var(--pc-t9,9px)] text-bambu-gray`,children:F(`printers.temperatures.nozzle`)}),(0,G.jsxs)(`p`,{className:`text-[length:var(--pc-t11,11px)] text-white`,children:[Math.round(W.temperatures.nozzle||0),`°C`]})]})}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`p`,{className:`text-[length:var(--pc-t9,9px)] text-bambu-gray`,children:F(`printers.temperatures.nozzle`)}),(0,G.jsxs)(`p`,{className:`text-[length:var(--pc-t11,11px)] text-white`,children:[Math.round(W.temperatures.nozzle||0),`°C`]})]}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`p`,{className:`text-[length:var(--pc-t9,9px)] text-bambu-gray`,children:`L / R`}),(0,G.jsxs)(`p`,{className:`text-[length:var(--pc-t11,11px)] text-white`,children:[Math.round(W.temperatures.nozzle||0),`° / `,Math.round(W.temperatures.nozzle_2||0),`°`]})]}),Pe===`nozzle-temp`&&(i?(0,G.jsx)(sG,{title:`Set Nozzle Temperatures`,widthClass:`w-[300px]`,popoverWidth:300,popoverHeight:260,isPending:gr.isPending,onClose:()=>Fe(null),children:(0,G.jsxs)(`div`,{className:`grid grid-cols-2 gap-2 px-3 py-2.5`,children:[(0,G.jsx)(cG,{label:`Left Temp`,current:W.temperatures.nozzle,target:W.temperatures.nozzle_target,isActive:o===`L`,isPending:gr.isPending,onSubmit:e=>gr.mutate({target:e,nozzle:1}),options:ym(O,`C`)}),(0,G.jsx)(cG,{label:`Right Temp`,current:W.temperatures.nozzle_2,target:W.temperatures.nozzle_2_target,isActive:o===`R`,isPending:gr.isPending,onSubmit:e=>gr.mutate({target:e,nozzle:0}),options:ym(O,`C`)})]})}):(0,G.jsx)(sG,{title:`Set Nozzle Temperature`,unit:`°C`,customMin:0,customMax:320,isPending:gr.isPending,options:ym(O,`C`),onClose:()=>Fe(null),onSubmit:e=>gr.mutate({target:e,nozzle:W.active_extruder??0})}))]}),(0,G.jsxs)(`div`,{className:f,title:d,onClick:()=>u&&Fe(Pe===`bed-temp`?null:`bed-temp`),children:[(0,G.jsx)(`button`,{type:`button`,className:`absolute top-0.5 right-0.5 p-0.5 rounded text-bambu-gray hover:text-white hover:bg-white/10 transition-colors`,title:F(`printers.heaterHistory.openLabel`,`View heater history`),onClick:e=>{e.stopPropagation(),Ft({initialKind:`bed`,availableKinds:a})},children:(0,G.jsx)(cs,{className:`w-[var(--pc-i25,0.625rem)] h-[var(--pc-i25,0.625rem)]`})}),(0,G.jsx)(tG,{className:`w-[var(--pc-i35,0.875rem)] h-[var(--pc-i35,0.875rem)] mb-0.5`,color:`text-blue-400`,isHeating:n}),(0,G.jsx)(`p`,{className:`text-[length:var(--pc-t9,9px)] text-bambu-gray`,children:F(`printers.temperatures.bed`)}),(0,G.jsxs)(`p`,{className:`text-[length:var(--pc-t11,11px)] text-white`,children:[Math.round(W.temperatures.bed||0),`°C`]}),Pe===`bed-temp`&&(0,G.jsx)(sG,{title:`Set Bed Temperature`,unit:`°C`,customMin:0,customMax:140,isPending:_r.isPending,options:ym(k,`C`),onClose:()=>Fe(null),onSubmit:e=>_r.mutate(e)})]}),W.temperatures.chamber!==void 0&&(()=>{let e=W.supports_chamber_heater===!0;return(0,G.jsxs)(`div`,{className:e?f:`relative text-center px-2 py-1.5 bg-bambu-dark rounded-lg flex-1 flex flex-col justify-center items-center`,title:e?d:void 0,onClick:e?()=>u&&Fe(Pe===`chamber-temp`?null:`chamber-temp`):void 0,children:[(0,G.jsx)(`button`,{type:`button`,className:`absolute top-0.5 right-0.5 p-0.5 rounded text-bambu-gray hover:text-white hover:bg-white/10 transition-colors`,title:F(`printers.heaterHistory.openLabel`,`View heater history`),onClick:e=>{e.stopPropagation(),Ft({initialKind:`chamber`,availableKinds:a})},children:(0,G.jsx)(cs,{className:`w-[var(--pc-i25,0.625rem)] h-[var(--pc-i25,0.625rem)]`})}),(0,G.jsx)(tG,{className:`w-[var(--pc-i35,0.875rem)] h-[var(--pc-i35,0.875rem)] mb-0.5`,color:`text-green-400`,isHeating:r}),(0,G.jsx)(`p`,{className:`text-[length:var(--pc-t9,9px)] text-bambu-gray`,children:F(`printers.temperatures.chamber`)}),(0,G.jsxs)(`p`,{className:`text-[length:var(--pc-t11,11px)] text-white`,children:[Math.round(W.temperatures.chamber||0),`°C`]}),e&&Pe===`chamber-temp`&&(0,G.jsx)(sG,{title:`Set Chamber Temperature`,unit:`°C`,customMin:0,customMax:65,isPending:vr.isPending,options:ym(A,`C`),onClose:()=>Fe(null),onSubmit:e=>vr.mutate(e)})]})})(),i&&(0,G.jsx)(mOe,{leftSlot:s,rightSlot:c,activeNozzle:o,filamentInfo:cn,children:(0,G.jsxs)(`div`,{className:`relative text-center px-3 py-1.5 bg-bambu-dark rounded-lg h-full flex flex-col justify-center items-center transition-colors ${u?`cursor-pointer hover:bg-bambu-dark-tertiary`:`cursor-default opacity-80`}`,title:u?F(`printers.activeNozzle`,{nozzle:F(o===`L`?`common.left`:`common.right`)}):d,onClick:()=>u&&Fe(Pe===`nozzle-select`?null:`nozzle-select`),children:[(0,G.jsx)(SOe,{className:`w-[var(--pc-i35,0.875rem)] h-[var(--pc-i35,0.875rem)] mb-0.5 text-amber-600 dark:text-amber-400`}),(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsxs)(`span`,{className:`text-[length:var(--pc-t11,11px)] font-bold ${o===`L`?`text-amber-700 dark:text-amber-400`:`text-gray-500`}`,children:[`L`,s?.nozzle_diameter?` ${s.nozzle_diameter}`:``]}),(0,G.jsx)(`span`,{className:`text-[length:var(--pc-t9,9px)] text-bambu-gray/40`,children:`·`}),(0,G.jsxs)(`span`,{className:`text-[length:var(--pc-t11,11px)] font-bold ${o===`R`?`text-amber-700 dark:text-amber-400`:`text-gray-500`}`,children:[`R`,c?.nozzle_diameter?` ${c.nozzle_diameter}`:``]})]}),(0,G.jsx)(`p`,{className:`text-[length:var(--pc-t9,9px)] text-bambu-gray`,children:F(`printers.temperatures.nozzle`)}),Pe===`nozzle-select`&&(0,G.jsx)(sG,{title:`Set Nozzle Selection`,widthClass:`w-[300px]`,popoverWidth:300,popoverHeight:140,isPending:br.isPending,options:[{label:`Left`,value:1},{label:`Right`,value:0}],onClose:()=>Fe(null),onSubmit:e=>br.mutate(e)})]})}),W.nozzle_rack&&W.nozzle_rack.some(e=>e.id>=2)&&(0,G.jsx)(hOe,{slots:W.nozzle_rack,filamentInfo:cn})]}),(0,G.jsx)(`div`,{className:`mt-2 flex items-center gap-1.5`,children:_.map(({key:e,label:t,value:n,Icon:r,activeClass:i})=>{let a=n>0;return(0,G.jsxs)(`div`,{className:`relative px-2 py-1.5 bg-bambu-dark rounded-lg flex-1 min-w-0 flex items-center justify-center gap-1 transition-colors ${u?`cursor-pointer hover:bg-bambu-dark-tertiary`:`cursor-default opacity-80`}`,title:u?t:d,onClick:()=>u&&Fe(Pe===`fan-${e}`?null:`fan-${e}`),children:[(0,G.jsx)(r,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)] shrink-0 ${a?i:`text-bambu-gray/50`}`}),(0,G.jsxs)(`span`,{className:`text-[length:var(--pc-t10,10px)] leading-none ${a?`text-white`:`text-bambu-gray/50`}`,children:[n,`%`]}),Pe===`fan-${e}`&&(0,G.jsx)(sG,{title:`Set ${t} Speed`,unit:`%`,customMin:0,customMax:100,isPending:yr.isPending,options:ym(j,`%`),onClose:()=>Fe(null),onSubmit:t=>yr.mutate({fan:e,speed:t})})]},e)})})]})})(),r===`expanded`&&Kn&&hr,r===`expanded`&&(()=>{let t=W.state===`RUNNING`,n=W.state===`PAUSE`,r=t||n,i=dr.isPending||fr.isPending||pr.isPending,a=`bg-bambu-dark text-bambu-gray/50 cursor-not-allowed opacity-50`,o=`flex h-8 w-8 items-center justify-center rounded-lg text-xs font-medium transition-colors disabled:opacity-50 disabled:cursor-not-allowed`,s=`flex h-8 w-20 items-center justify-center gap-1 px-2 rounded-lg text-xs font-medium transition-colors`;return(0,G.jsxs)(`div`,{className:`mt-3`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2 mb-2`,children:[(0,G.jsx)(`span`,{className:`text-[length:var(--pc-t10,10px)] uppercase tracking-wider text-bambu-gray font-medium`,children:F(`printers.controls`)}),(0,G.jsx)(`div`,{className:`flex-1 h-[2px] bg-bambu-dark-tertiary`})]}),(0,G.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-x-2 gap-y-2`,children:[(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 min-w-0`,children:[(0,G.jsx)(`button`,{onClick:()=>xr.mutate(!W.chamber_light),disabled:!W.connected||xr.isPending||!z(`printers:control`),className:`${o} ${W.chamber_light?`bg-yellow-50 dark:bg-yellow-500/10 text-yellow-700 dark:text-yellow-400 hover:bg-yellow-500/20`:`bg-bambu-dark text-bambu-gray/50 hover:bg-bambu-dark-tertiary hover:text-white`}`,title:z(`printers:control`)?W.chamber_light?F(`printers.chamberLightOff`):F(`printers.chamberLightOn`):F(`printers.permission.noControl`),children:(0,G.jsx)(xT,{on:W.chamber_light??!1,className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})}),[`P2S`,`X2D`,`H2D`,`H2C`,`H2S`].includes(e.model??``)&&(()=>{let t=W.airduct_mode===1,n=t?fc:fu,r=t?`text-orange-600 dark:text-orange-400`:`text-sky-600 dark:text-sky-400`,i=t?`bg-orange-50 dark:bg-orange-500/10 text-orange-700 dark:text-orange-400 hover:bg-orange-500/20`:`bg-sky-50 dark:bg-sky-500/10 text-sky-700 dark:text-sky-400 hover:bg-sky-500/20`;return(0,G.jsxs)(`div`,{className:`relative`,children:[(0,G.jsx)(`button`,{onClick:()=>je(Ae===e.id?null:e.id),disabled:!z(`printers:control`),className:`${o} ${i}`,title:`${F(`printers.airduct.title`)}: ${F(t?`printers.airduct.heating`:`printers.airduct.cooling`)}`,children:(0,G.jsx)(n,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)] ${r}`})}),Ae===e.id&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`div`,{className:`fixed inset-0 z-40`,onClick:()=>je(null)}),(0,G.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:F(`printers.airduct.cooling`),modeId:0},{mode:`heating`,label:F(`printers.airduct.heating`),modeId:1}].map(({mode:e,label:t,modeId:n})=>(0,G.jsxs)(`button`,{onClick:()=>{Cr.mutate(e),je(null)},className:`w-full text-left px-3 py-1.5 text-xs transition-colors flex items-center gap-2 ${W.airduct_mode===n?`text-bambu-green bg-bambu-green/10`:`text-white hover:bg-bambu-dark-tertiary`}`,children:[e===`heating`?(0,G.jsx)(fc,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}):(0,G.jsx)(fu,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),t]},e))})]})]})})(),(()=>{let t=z(`printers:control`),n=r||!t,i=`flex h-8 w-8 items-center justify-center rounded bg-indigo-100 dark:bg-indigo-500/15 text-indigo-700 dark:text-indigo-300 transition-colors hover:bg-indigo-200 dark:hover:bg-indigo-500/30 disabled:cursor-not-allowed disabled:opacity-50`,a=e=>{let t=e*Ie*1;wr.mutate({distance:t})},s=(e,t)=>{Tr.mutate({x:e,y:t})},c=e=>{Er.mutate(e)};return(0,G.jsxs)(`div`,{className:`relative`,children:[(0,G.jsx)(`button`,{onClick:()=>Ne(Me===e.id?null:e.id),disabled:n,className:`${o} ${n?`bg-bambu-dark text-bambu-gray/50 cursor-not-allowed`:`bg-indigo-50 dark:bg-indigo-500/10 text-indigo-700 dark:text-indigo-400 hover:bg-indigo-500/20`}`,title:F(t?r?`printers.bedJog.disabledWhilePrinting`:`printers.bedJog.title`:`printers.permission.noControl`),children:(0,G.jsx)(hl,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})}),Me===e.id&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`div`,{className:`fixed inset-0 z-40`,onClick:()=>Ne(null)}),(0,G.jsxs)(`div`,{className:`absolute bottom-full left-0 mb-1 z-50 flex w-[216px] flex-col overflow-hidden rounded-xl border border-bambu-dark-tertiary bg-bambu-dark-secondary shadow-2xl`,children:[(0,G.jsx)(`div`,{className:`shrink-0 px-3 py-2.5 text-center text-sm font-medium text-white`,children:F(`printers.bedJog.title`)}),(0,G.jsx)(`div`,{className:`h-px bg-bambu-dark-tertiary`}),(0,G.jsxs)(`div`,{className:`flex items-start gap-1.5 bg-yellow-500/10 px-3 py-2 text-[length:var(--pc-t11,11px)] leading-snug text-yellow-700 dark:text-yellow-400`,children:[(0,G.jsx)(Nu,{className:`mt-0.5 h-3.5 w-3.5 shrink-0`}),(0,G.jsx)(`span`,{children:F(`printers.bedJog.limitWarning`)})]}),(0,G.jsx)(`div`,{className:`h-px bg-bambu-dark-tertiary`}),(0,G.jsx)(`div`,{className:`flex justify-center px-3 py-2.5`,children:(0,G.jsxs)(`div`,{className:`flex items-center justify-center gap-3`,children:[(0,G.jsxs)(`div`,{className:`grid grid-cols-3 gap-1`,children:[(0,G.jsx)(`div`,{}),(0,G.jsx)(`button`,{onClick:()=>s(0,Ie),disabled:Tr.isPending,className:i,"aria-label":`Move Y forward`,children:(0,G.jsx)(Ho,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})}),(0,G.jsx)(`div`,{}),(0,G.jsx)(`button`,{onClick:()=>s(-Ie,0),disabled:Tr.isPending,className:i,"aria-label":`Move X left`,children:(0,G.jsx)(Lo,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})}),(0,G.jsx)(`button`,{onClick:()=>{Ne(null),Dr.mutate(`all`)},disabled:Dr.isPending,className:i,"aria-label":F(`printers.bedJog.homeZ`),children:(0,G.jsx)(Ic,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})}),(0,G.jsx)(`button`,{onClick:()=>s(Ie,0),disabled:Tr.isPending,className:i,"aria-label":`Move X right`,children:(0,G.jsx)(zo,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})}),(0,G.jsx)(`div`,{}),(0,G.jsx)(`button`,{onClick:()=>s(0,-Ie),disabled:Tr.isPending,className:i,"aria-label":`Move Y back`,children:(0,G.jsx)(Io,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})}),(0,G.jsx)(`div`,{})]}),(0,G.jsxs)(`div`,{className:`flex flex-col items-center gap-1`,children:[(0,G.jsx)(`button`,{onClick:()=>a(-1),disabled:wr.isPending,className:i,"aria-label":F(`printers.bedJog.up`),children:(0,G.jsx)(Ho,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})}),(0,G.jsx)(`div`,{className:`flex h-8 w-8 items-center justify-center text-bambu-gray/80`,children:(0,G.jsx)(Wc,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})}),(0,G.jsx)(`button`,{onClick:()=>a(1),disabled:wr.isPending,className:i,"aria-label":F(`printers.bedJog.down`),children:(0,G.jsx)(Io,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})})]}),(0,G.jsxs)(`div`,{className:`flex flex-col items-center gap-1`,children:[(0,G.jsx)(`button`,{onClick:()=>c(-Ie),disabled:Er.isPending,className:i,"aria-label":`Retract filament`,children:(0,G.jsx)(Ho,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})}),(0,G.jsx)(`div`,{className:`flex h-8 w-8 items-center justify-center text-bambu-gray/80`,children:(0,G.jsx)(`span`,{className:`text-sm font-semibold leading-none`,children:`E`})}),(0,G.jsx)(`button`,{onClick:()=>c(Ie),disabled:Er.isPending,className:i,"aria-label":`Extrude filament`,children:(0,G.jsx)(Io,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})})]})]})}),(0,G.jsx)(`div`,{className:`h-px bg-bambu-dark-tertiary`}),(0,G.jsxs)(`div`,{className:`px-3 pt-2.5 pb-3`,children:[(0,G.jsx)(`div`,{className:`mb-1 text-[length:var(--pc-t9,9px)] uppercase tracking-wider text-bambu-gray/70`,children:F(`printers.bedJog.step`)}),(0,G.jsx)(`div`,{className:`flex gap-1`,children:[1,10,50].map(e=>(0,G.jsx)(`button`,{onClick:()=>Le(e),className:`flex-1 px-1 py-1 rounded text-[length:var(--pc-t10,10px)] transition-colors ${Ie===e?`bg-bambu-green/20 text-bambu-green`:`bg-bambu-dark text-bambu-gray hover:bg-bambu-dark-tertiary`}`,children:e},e))})]})]})]})]})})(),(0,G.jsxs)(`div`,{className:`inline-flex rounded-lg ${e.plate_detection_enabled?`ring-1 ring-green-500`:``}`,children:[(0,G.jsx)(`button`,{onClick:Jr,disabled:!W.connected||Or.isPending||!z(`printers:update`),className:`${o} rounded-r-none ${e.plate_detection_enabled?`bg-green-50 dark:bg-green-500/10 text-green-700 dark:text-green-400 hover:bg-green-500/20`:`bg-bambu-dark text-bambu-gray/50 hover:bg-bambu-dark-tertiary hover:text-white`}`,title:z(`printers:update`)?e.plate_detection_enabled?F(`printers.plateDetection.enabledClick`):F(`printers.plateDetection.disabledClick`):F(`printers.plateDetection.noPermission`),children:Or.isPending?(0,G.jsx)(Y,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)] animate-spin`}):(0,G.jsx)(Kl,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})}),(0,G.jsx)(`button`,{onClick:Yr,disabled:!W.connected||Kt||!z(`printers:update`),className:`flex h-8 w-8 items-center justify-center rounded-r-lg border-l border-bambu-dark-tertiary transition-colors disabled:opacity-50 disabled:cursor-not-allowed ${e.plate_detection_enabled?`bg-green-50 dark:bg-green-500/10 text-green-700 dark:text-green-400 hover:bg-green-500/20`:`bg-bambu-dark text-bambu-gray/50 hover:bg-bambu-dark-tertiary hover:text-white`}`,title:z(`printers:update`)?F(`printers.plateDetection.manageCalibration`):F(`printers.plateDetection.noPermission`),children:Kt?(0,G.jsx)(Y,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)] animate-spin`}):(0,G.jsx)(fs,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})})]}),(0,G.jsxs)(`div`,{className:`relative`,children:[(0,G.jsx)(`button`,{"data-testid":`speed-control`,onClick:()=>ke(Oe===e.id?null:e.id),disabled:!r||!z(`printers:control`),className:`${o} ${r?`bg-amber-50 dark:bg-amber-500/10 text-amber-700 dark:text-amber-400 hover:bg-amber-500/20`:`bg-bambu-dark text-bambu-gray/50 cursor-not-allowed`}`,title:r?F(`printers.speed.title`):void 0,children:(0,G.jsx)(Sc,{className:`w-[var(--pc-i4,1rem)] h-[var(--pc-i4,1rem)]`})}),Oe===e.id&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`div`,{className:`fixed inset-0 z-40`,onClick:()=>ke(null)}),(0,G.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:F(`printers.speed.silent`)},{mode:2,label:F(`printers.speed.standard`)},{mode:3,label:F(`printers.speed.sport`)},{mode:4,label:F(`printers.speed.ludicrous`)}].map(({mode:e,label:t})=>(0,G.jsx)(`button`,{onClick:()=>{Sr.mutate(e),ke(null)},className:`w-full text-left px-3 py-1.5 text-xs transition-colors ${W.speed_level===e?`text-bambu-green bg-bambu-green/10`:`text-white hover:bg-bambu-dark-tertiary`}`,children:t},e))})]})]})]}),(0,G.jsxs)(`div`,{className:`ml-auto flex items-center justify-end gap-2 flex-shrink-0`,children:[(()=>{let e=!r||i||!z(`printers:control`);return(0,G.jsxs)(`button`,{onClick:()=>n?ze(!0):De(!0),disabled:e,className:`
${s}
${e?a:n?`bg-bambu-green/20 text-bambu-green hover:bg-bambu-green/30`:`bg-yellow-100 dark:bg-yellow-500/20 text-yellow-700 dark:text-yellow-400 hover:bg-yellow-500/30`}
`,title:z(`printers:control`)?F(n?`printers.resume`:`printers.pause`):F(`printers.permission.noControl`),children:[n?(0,G.jsx)(kl,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}):(0,G.jsx)(Cl,{className:`w-[var(--pc-i3,0.75rem)] h-[var(--pc-i3,0.75rem)]`}),F(n?`printers.resume`:`printers.pause`)]})})(),(()=>{let e=!r||i||!z(`printers:control`);return(0,G.jsxs)(`button`,{onClick:()=>Te(!0),disabled:e,className:`
diff --git a/static/index.html b/static/index.html
index f7b48ef95..422b29efc 100644
--- a/static/index.html
+++ b/static/index.html
@@ -26,7 +26,7 @@
-
+