import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{C as t,S as n,T as r,a as i,k as a,l as o,w as s}from"./client-Bol9xAus.js";import{n as c}from"./QueryClientProvider-CPZTuCm3.js";import{t as l}from"./useMutation-Bln19oAR.js";import{t as u}from"./useQueries-CL8SxBuQ.js";import{t as d}from"./box-DQ5Stc2a.js";import{r as f,t as p}from"./info-DlBw4lHQ.js";import{n as m}from"./ToastContext-Ba_la89E.js";import{t as h}from"./external-link-D5VtTrmD.js";import{t as g}from"./flame-Dm8_SQj6.js";import{t as _}from"./loader-circle-DCtnN61i.js";import{t as v}from"./pause-CWYsqQLY.js";import{t as y}from"./play-CujqwF3x.js";import{t as b}from"./settings-CByFkn2t.js";import{t as x}from"./square-REm-F-YU.js";import{t as S}from"./trash-2-flS03FnS.js";import{t as C}from"./triangle-alert-DEkj7Xqd.js";import{t as w}from"./wifi-off-BQAxVX9R.js";import{t as T}from"./x-CDFhisoK.js";import{n as E}from"./AuthContext-D0GViS03.js";import{t as D}from"./ConfirmModal-Bw8npIQH.js";import{c as O,o as k}from"./date-G9KUauqz.js";import{n as A,t as ee}from"./useCameraViewerId-B2brCNCm.js";import{n as te,r as ne,t as re}from"./useSidewaysBox-SmRKCeQX.js";var ie=t(`rectangle-horizontal`,[[`rect`,{width:`20`,height:`12`,x:`2`,y:`6`,rx:`2`,key:`9lu3g6`}]]),j=t(`video-off`,[[`path`,{d:`M10.66 6H14a2 2 0 0 1 2 2v2.5l5.248-3.062A.5.5 0 0 1 22 7.87v8.196`,key:`w8jjjt`}],[`path`,{d:`M16 16a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h2`,key:`1xawa7`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]),M=e(a(),1),ae=[`s`,`m`,`l`,`xl`];function N(e){switch(e){case 1:return`grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5`;case 3:return`grid-cols-1 lg:grid-cols-2`;case 4:return`grid-cols-1`;default:return`grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4`}}var P=s(),oe=8,se=6e4,ce=200,le=5e3,ue=15e3;function de(e,t){if(t>0)return`error`;switch(e){case`RUNNING`:return`printing`;case`PAUSE`:return`paused`;case`FINISH`:case`FAILED`:return`finished`;default:return`idle`}}var fe={printing:`bg-bambu-green/85 text-black`,paused:`bg-amber-500/85 text-black`,finished:`bg-sky-500/80 text-white`,error:`bg-red-500/85 text-white`,idle:`bg-bambu-dark-tertiary/80 text-bambu-gray`};function F({printerId:e,printerName:t,cameraRotation:i=0,mode:a,snapshotIntervalMs:s,connected:c,onClick:l,statusMode:u=`off`,printerState:f=null,progress:p=null,remainingMin:m=null,layerNum:h=null,totalLayers:_=null,printName:v=null,hmsErrorCount:y=0,temperatures:b=null,timeFormat:x=`system`}){let{t:S}=r(),[T,E]=(0,M.useState)(0),[D,A]=(0,M.useState)(!1),[ae,N]=(0,M.useState)(!1),F=(0,M.useRef)(a),I=(0,M.useRef)(null),L=ee(),R=(0,M.useRef)(`none`),z=(0,M.useRef)(!1),B=(0,M.useRef)(null),V=(0,M.useRef)(null);(0,M.useEffect)(()=>{let t=F.current===`live`,n=a===`live`;if(F.current=a,t&&!n){let t={},n=o();n&&(t.Authorization=`Bearer ${n}`),fetch(`/api/v1/printers/${e}/camera/stop?viewer=${L}`,{method:`POST`,keepalive:!0,headers:t}).catch(()=>{})}A(!1),z.current=!1,E(e=>e+1)},[a,e,L]),(0,M.useEffect)(()=>()=>{if(F.current===`live`){let t={},n=o();n&&(t.Authorization=`Bearer ${n}`),fetch(`/api/v1/printers/${e}/camera/stop?viewer=${L}`,{method:`POST`,keepalive:!0,headers:t}).catch(()=>{})}},[e,L]),(0,M.useEffect)(()=>{if(a!==`snapshot`)return;let e=setInterval(()=>E(e=>e+1),s);return()=>clearInterval(e)},[a,s]);let{clearFirstFrameTimer:H,streamFailed:U,reopenAfter:W}=(0,M.useMemo)(()=>{let e=()=>{V.current!==null&&clearTimeout(V.current),V.current=null},t=()=>{if(e(),R.current===`renewed`){R.current=`retried`,n(le);return}R.current=`none`,A(!0)},n=n=>{I.current?.removeAttribute(`src`),N(!0),B.current!==null&&clearTimeout(B.current),B.current=setTimeout(()=>{B.current=null,N(!1),E(e=>e+1),e();let n=()=>{if(document.hidden){V.current=setTimeout(n,ue);return}t()};V.current=setTimeout(n,ue)},n)};return{clearFirstFrameTimer:e,streamFailed:t,reopenAfter:n}},[]);(0,M.useEffect)(()=>{if(R.current=`none`,a!==`live`||!c)return;let e=setInterval(()=>{document.hidden||!I.current||B.current!==null||(R.current=`renewed`,W(ce))},se);return()=>{clearInterval(e),B.current!==null&&clearTimeout(B.current),B.current=null,H(),N(!1)}},[a,c,W,H]);let G=n(`/api/v1/printers/${e}/camera/stream?fps=${oe}&t=${T}&viewer=${L}`),pe=n(`/api/v1/printers/${e}/camera/snapshot?t=${T}`),me=ne(I,ae?void 0:a===`live`?G:pe),K=l!=null,q=(0,M.useRef)(null),J=re(i),Y=te(q,J),X=J&&Y?{position:`absolute`,left:`50%`,top:`50%`,width:Y.height,height:Y.width,maxWidth:`none`,transform:`translate(-50%, -50%) rotate(${i}deg)`}:i?{transform:`rotate(${i}deg)`}:void 0,Z=de(f,y),he=c&&u!==`off`&&Z!==`idle`,ge=c&&u===`full`&&(Z===`printing`||Z===`paused`),Q=v??null,$=p==null?null:Math.round(p),_e=h!=null&&_!=null&&_>0,ve=m!=null&&m>0,ye=c&&u===`full`&&b!=null,be=[b?.nozzle,b?.nozzle_2].filter(e=>e!=null),xe=`group relative aspect-video w-full overflow-hidden rounded-lg border border-bambu-dark-tertiary bg-black text-left ${K?`focus:outline-none focus:ring-2 focus:ring-bambu-green`:`cursor-default`}`,Se=(0,P.jsxs)(P.Fragment,{children:[!c||a===`paused`?(0,P.jsx)(`div`,{className:`absolute inset-0 flex items-center justify-center bg-bambu-dark/60`,children:c?(0,P.jsx)(j,{className:`h-8 w-8 text-bambu-gray/70`,"aria-hidden":`true`}):(0,P.jsx)(w,{className:`h-8 w-8 text-bambu-gray/70`,"aria-hidden":`true`})}):D?(0,P.jsxs)(`div`,{className:`absolute inset-0 flex flex-col items-center justify-center gap-1 bg-black/80 text-bambu-gray`,children:[(0,P.jsx)(j,{className:`h-7 w-7`,"aria-hidden":`true`}),(0,P.jsx)(`span`,{className:`text-xs`,children:S(`printers.camWall.noSignal`)})]}):(0,P.jsx)(`img`,{ref:me,alt:t,draggable:!1,loading:`lazy`,className:`h-full w-full select-none object-contain`,style:X,onLoad:()=>{H(),R.current=`none`,z.current=!1},onError:e=>{if(e.currentTarget.getAttribute(`src`)){if(a===`snapshot`&&!z.current){z.current=!0;return}U()}}},`${a}-${T}`),he&&(0,P.jsxs)(`span`,{className:`absolute left-2 top-2 flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide ${fe[Z]}`,children:[y>0&&(0,P.jsx)(C,{className:`h-3 w-3`,"aria-hidden":`true`}),(0,P.jsx)(`span`,{children:S(`printers.status.${Z}`)})]}),(0,P.jsx)(`span`,{className:`absolute right-2 top-2 rounded px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide ${a===`live`?`bg-red-500/80 text-white`:a===`snapshot`?`bg-amber-500/70 text-black`:`bg-bambu-dark-tertiary/70 text-bambu-gray`}`,children:S(a===`live`?`printers.camWall.live`:a===`snapshot`?`printers.camWall.snap`:`printers.camWall.off`)}),(0,P.jsxs)(`div`,{className:`absolute inset-x-0 bottom-0 bg-gradient-to-t from-black/85 via-black/55 to-transparent px-2 pb-1.5 pt-3 text-white`,children:[ge&&(0,P.jsxs)(`div`,{className:`mb-0.5 space-y-0.5 text-[11px] leading-tight text-white/90`,children:[Q&&(0,P.jsx)(`div`,{className:`truncate`,title:Q,children:Q}),(0,P.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-0.5 text-bambu-gray`,children:[$!=null&&(0,P.jsxs)(`span`,{className:`font-semibold text-white`,children:[$,`%`]}),_e&&(0,P.jsx)(`span`,{children:S(`printers.camWall.layer`,{cur:h,total:_})}),ve&&(0,P.jsx)(`span`,{children:S(`printers.camWall.timeLeft`,{time:k((m??0)*60)})}),ve&&Z===`printing`&&(0,P.jsx)(`span`,{children:S(`printers.camWall.eta`,{time:O(m??0,x,S)})})]})]}),ye&&(0,P.jsxs)(`div`,{className:`mb-0.5 flex flex-wrap items-center gap-x-2 text-[11px] leading-tight text-bambu-gray`,children:[be.length>0&&(0,P.jsxs)(`span`,{className:`flex items-center gap-0.5`,title:S(`printers.temperatures.nozzle`),children:[(0,P.jsx)(g,{className:`h-3 w-3`,"aria-label":S(`printers.temperatures.nozzle`)}),be.map(e=>`${Math.round(e)}°`).join(` / `)]}),b?.bed!=null&&(0,P.jsxs)(`span`,{className:`flex items-center gap-0.5`,title:S(`printers.temperatures.bed`),children:[(0,P.jsx)(ie,{className:`h-3 w-3`,"aria-label":S(`printers.temperatures.bed`)}),Math.round(b.bed),`°`]}),b?.chamber!=null&&(0,P.jsxs)(`span`,{className:`flex items-center gap-0.5`,title:S(`printers.temperatures.chamber`),children:[(0,P.jsx)(d,{className:`h-3 w-3`,"aria-label":S(`printers.temperatures.chamber`)}),Math.round(b.chamber),`°`]})]}),(0,P.jsx)(`span`,{className:`block truncate text-xs font-medium`,children:t})]})]});return K?(0,P.jsx)(`button`,{ref:q,type:`button`,onClick:l,className:xe,title:t,children:Se}):(0,P.jsx)(`div`,{ref:q,className:xe,title:t,children:Se})}var I=`flex h-7 w-7 items-center justify-center rounded-md bg-black/70 text-white backdrop-blur-sm transition-colors hover:bg-black/90 focus:outline-none focus:ring-2 focus:ring-bambu-green disabled:cursor-not-allowed disabled:opacity-50`;function L({printerId:e,printerName:t,connected:n,printerState:a,chamberLight:o}){let{t:s}=r(),{hasPermission:u}=E(),{showToast:d}=m(),f=c(),[p,h]=(0,M.useState)(null),g=()=>f.invalidateQueries({queryKey:[`printerStatus`,e]}),_=l({mutationFn:()=>i.stopPrint(e),onSuccess:()=>{d(s(`printers.toast.printStopped`)),g()},onError:e=>d(e.message||s(`printers.toast.failedToStopPrint`),`error`)}),b=l({mutationFn:()=>i.pausePrint(e),onSuccess:()=>{d(s(`printers.toast.printPaused`)),g()},onError:e=>d(e.message||s(`printers.toast.failedToPausePrint`),`error`)}),S=l({mutationFn:()=>i.resumePrint(e),onSuccess:()=>{d(s(`printers.toast.printResumed`)),g()},onError:e=>d(e.message||s(`printers.toast.failedToResumePrint`),`error`)}),C=l({mutationFn:t=>i.setChamberLight(e,t),onMutate:async t=>{await f.cancelQueries({queryKey:[`printerStatus`,e]});let n=f.getQueryData([`printerStatus`,e]);return n&&f.setQueryData([`printerStatus`,e],{...n,chamber_light:t}),{previous:n}},onError:(t,n,r)=>{r?.previous&&f.setQueryData([`printerStatus`,e],r.previous),d(t.message||s(`printers.toast.failedToControlChamberLight`),`error`)}});if(!u(`printers:control`)||!n)return null;let w=a===`PAUSE`,T=a===`RUNNING`||w,O=_.isPending||b.isPending||S.isPending,k=o??!1;return(0,P.jsxs)(P.Fragment,{children:[(0,P.jsxs)(`div`,{className:`flex gap-1`,children:[T&&(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(`button`,{type:`button`,className:I,disabled:O,onClick:()=>h(w?`resume`:`pause`),title:s(w?`printers.resume`:`printers.pause`),"aria-label":s(w?`printers.resume`:`printers.pause`),children:w?(0,P.jsx)(y,{className:`h-3.5 w-3.5`}):(0,P.jsx)(v,{className:`h-3.5 w-3.5`})}),(0,P.jsx)(`button`,{type:`button`,className:`${I} hover:text-red-400`,disabled:O,onClick:()=>h(`stop`),title:s(`printers.stop`),"aria-label":s(`printers.stop`),children:(0,P.jsx)(x,{className:`h-3.5 w-3.5`})})]}),(0,P.jsx)(`button`,{type:`button`,className:I,disabled:C.isPending,"aria-pressed":k,onClick:()=>C.mutate(!k),title:s(k?`printers.chamberLightOff`:`printers.chamberLightOn`),"aria-label":s(k?`printers.chamberLightOff`:`printers.chamberLightOn`),children:(0,P.jsx)(A,{on:k,className:`h-4 w-4`})})]}),p===`stop`&&(0,P.jsx)(D,{title:s(`printers.confirm.stopTitle`),message:s(`printers.confirm.stopMessage`,{name:t}),confirmText:s(`printers.confirm.stopButton`),variant:`danger`,onConfirm:()=>{_.mutate(),h(null)},onCancel:()=>h(null)}),p===`pause`&&(0,P.jsx)(D,{title:s(`printers.confirm.pauseTitle`),message:s(`printers.confirm.pauseMessage`,{name:t}),confirmText:s(`printers.confirm.pauseButton`),onConfirm:()=>{b.mutate(),h(null)},onCancel:()=>h(null)}),p===`resume`&&(0,P.jsx)(D,{title:s(`printers.confirm.resumeTitle`),message:s(`printers.confirm.resumeMessage`,{name:t}),confirmText:s(`printers.confirm.resumeButton`),onConfirm:()=>{S.mutate(),h(null)},onCancel:()=>h(null)})]})}var R=new Set([`0700_8011`,`0701_8011`,`0702_8011`,`0703_8011`,`0704_8011`,`0705_8011`,`0706_8011`,`0707_8011`,`07FF_8011`]),z=`0500050000010007`;function B(e){switch(e){case 1:return{labelKey:`hmsErrors.severityError`,color:`text-red-600 dark:text-red-400`,bgColor:`bg-red-100 dark:bg-red-500/20`,Icon:C};case 2:return{labelKey:`hmsErrors.severityWarning`,color:`text-orange-700 dark:text-orange-400`,bgColor:`bg-orange-100 dark:bg-orange-500/20`,Icon:C};case 3:return{labelKey:`hmsErrors.severityNotice`,color:`text-blue-700 dark:text-blue-400`,bgColor:`bg-blue-100 dark:bg-blue-500/20`,Icon:p};default:return{labelKey:`hmsErrors.severityUnknown`,color:`text-bambu-gray`,bgColor:`bg-bambu-dark-tertiary`,Icon:f}}}function V(e){return e.severity===1||e.severity===2}function H(e,t){let n=e>>16&65535||(e>>8&255)<<8|e&255,r=t&65535;return`${n.toString(16).padStart(4,`0`).toUpperCase()}_${r.toString(16).padStart(4,`0`).toUpperCase()}`}function U(e){if(e.full_code&&e.full_code.length===16)return e.full_code.match(/.{4}/g).join(`-`);let t=parseInt(e.code.replace(`0x`,``),16)||0;return H(e.attr,t).replace(`_`,`-`)}function W(e){if(!(e.severity>=1))return!1;if((e.actions?.length??0)>0)return!0;let t=e.full_code?.length===16&&e.severity===3;return!!e.description&&!t}function G(e){return e.filter(W)}function pe(e){return e.filter(e=>!W(e))}function me(){return`https://wiki.bambulab.com/en/hms/home`}function K({printerName:e,errors:t,onClose:n,printerId:a,hasPermission:o,runoutGuidance:s}){let{t:u}=r(),{showToast:d}=m(),p=c(),g=l({mutationFn:()=>i.clearHMSErrors(a),onSuccess:()=>{d(u(`hmsErrors.clearSuccess`),`success`),n()},onError:()=>{d(u(`hmsErrors.clearFailed`),`error`)}}),v=G(t),y=pe(t);(0,M.useEffect)(()=>{let e=e=>{e.key===`Escape`&&n()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[n]);let b=l({mutationFn:e=>i.executeHMSAction(a,{action:e.action,print_error:e.print_error,job_id:e.job_id}),onSuccess:()=>{p.invalidateQueries({queryKey:[`printerStatus`,a]}),d(u(`hmsErrors.actionSuccess`,`Action sent to printer`),`success`),n()},onError:e=>{d(`${u(`hmsErrors.actionFailed`,`Failed to send action`)}: ${e.message}`,`error`)}});return(0,P.jsx)(`div`,{className:`fixed inset-0 bg-black/50 flex items-center justify-center z-50 p-4`,children:(0,P.jsxs)(`div`,{className:`bg-bambu-dark-secondary rounded-lg shadow-xl max-w-lg w-full max-h-[80vh] flex flex-col`,children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between p-4 border-b border-bambu-dark-tertiary`,children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,P.jsx)(C,{className:`w-5 h-5 text-orange-600 dark:text-orange-400`}),(0,P.jsx)(`h2`,{className:`text-lg font-semibold text-white`,children:u(`hmsErrors.title`,{name:e})})]}),(0,P.jsx)(`button`,{onClick:n,className:`p-1 hover:bg-bambu-dark-tertiary rounded-lg transition-colors`,children:(0,P.jsx)(T,{className:`w-5 h-5 text-bambu-gray`})})]}),(0,P.jsx)(`div`,{className:`flex-1 overflow-y-auto p-4`,children:v.length===0&&y.length===0?(0,P.jsxs)(`div`,{className:`text-center py-8 text-bambu-gray`,children:[(0,P.jsx)(f,{className:`w-12 h-12 mx-auto mb-3 opacity-30`}),(0,P.jsx)(`p`,{children:u(`hmsErrors.noErrors`)})]}):(0,P.jsxs)(`div`,{className:`space-y-3`,children:[v.map((e,t)=>{let{labelKey:n,color:r,bgColor:i,Icon:a}=B(e.severity),c=parseInt(e.code.replace(`0x`,``),16)||0,l=H(e.attr,c),d=e.description||u(`hmsErrors.unknownCode`),f=e.full_code===z;f&&(d=u(`hmsErrors.mqttVerifyFailedDescription`));let p=f?u(`hmsErrors.mqttVerifyFailedRemedy`):null;s&&R.has(l)&&(d=s.expectedSlotLabel&&s.ranOutSlotLabel?u(`hmsErrors.runoutExpectedSlot`,{expected:s.expectedSlotLabel,ranOut:s.ranOutSlotLabel}):s.expectedSlotLabel?u(`hmsErrors.runoutExpectedSlotOnly`,{expected:s.expectedSlotLabel}):u(`hmsErrors.runoutSlotUnknown`));let m=me(),g=U(e);return(0,P.jsx)(`div`,{className:`p-4 rounded-lg ${i} border border-white/10`,children:(0,P.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,P.jsx)(a,{className:`w-5 h-5 ${r} flex-shrink-0 mt-0.5`}),(0,P.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-2 mb-1`,children:[(0,P.jsxs)(`span`,{className:`font-mono text-sm ${r}`,children:[`[`,g,`]`]}),(0,P.jsx)(`span`,{className:`text-xs px-2 py-0.5 rounded-full ${i} ${r}`,children:u(n)})]}),(0,P.jsx)(`p`,{className:`text-sm text-bambu-gray mb-2`,children:d}),p&&(0,P.jsx)(`p`,{className:`text-sm text-bambu-gray mb-2`,children:p}),e.actions&&e.actions.length>0&&(0,P.jsx)(`div`,{className:`flex flex-wrap gap-2 my-2`,children:e.actions.map(t=>{let n=b.variables,r=b.isPending&&n?.action===t&&n?.print_error===(e.full_code||l.replace(`_`,``));return(0,P.jsxs)(`button`,{onClick:()=>{b.mutate({action:t,print_error:e.full_code||l.replace(`_`,``),job_id:e.job_id??null})},disabled:!o(`printers:control`)||b.isPending,className:`flex items-center gap-1.5 px-3 py-1.5 text-sm font-medium rounded-lg bg-white/10 hover:bg-white/20 active:bg-white/30 text-white border border-white/20 hover:border-white/30 transition-colors disabled:opacity-50 disabled:cursor-not-allowed flex-shrink-0`,children:[r&&(0,P.jsx)(_,{className:`w-4 h-4 animate-spin`}),u(`hmsErrors.actions.${t}`,t)]},t)})}),(0,P.jsxs)(`a`,{href:m,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1 text-xs text-bambu-green hover:underline`,children:[(0,P.jsx)(h,{className:`w-3 h-3`}),u(`hmsErrors.viewOnWiki`)]})]})]})},`${e.code}-${t}`)}),y.length>0&&(0,P.jsxs)(`details`,{className:`rounded-lg border border-white/10 p-3`,"data-testid":`hms-uncounted`,children:[(0,P.jsx)(`summary`,{className:`cursor-pointer text-sm text-bambu-gray`,children:u(`hmsErrors.uncountedSummary`,{n:y.length})}),(0,P.jsx)(`p`,{className:`mt-2 text-xs text-bambu-gray`,children:u(`hmsErrors.uncountedHint`)}),(0,P.jsx)(`ul`,{className:`mt-2 space-y-2`,children:y.map((e,t)=>(0,P.jsxs)(`li`,{className:`text-xs`,children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,P.jsxs)(`span`,{className:`font-mono text-bambu-gray`,children:[`[`,U(e),`]`]}),(0,P.jsx)(`span`,{className:`text-bambu-gray`,children:u(B(e.severity).labelKey)})]}),e.description&&(0,P.jsx)(`p`,{className:`mt-0.5 text-bambu-gray`,children:e.description})]},`${e.full_code||e.code}-${t}`))})]})]})}),(0,P.jsxs)(`div`,{className:`p-4 border-t border-bambu-dark-tertiary flex items-center justify-between gap-3`,children:[(0,P.jsx)(`p`,{className:`text-xs text-bambu-gray`,children:u(`hmsErrors.clearInstructions`)}),t.length>0&&(0,P.jsxs)(`button`,{onClick:()=>g.mutate(),disabled:!o(`printers:control`)||g.isPending,className:`flex items-center gap-1.5 px-3 py-1.5 text-sm font-medium rounded-lg bg-red-100 dark:bg-red-500/20 text-red-700 dark:text-red-400 hover:bg-red-200 dark:hover:bg-red-500/30 transition-colors disabled:opacity-50 disabled:cursor-not-allowed flex-shrink-0`,children:[g.isPending?(0,P.jsx)(_,{className:`w-4 h-4 animate-spin`}):(0,P.jsx)(S,{className:`w-4 h-4`}),u(`hmsErrors.clearErrors`)]})]})]})})}var q=1,J=16,Y=2,X=60,Z=[`off`,`compact`,`full`],he=[`hover`,`always`];function ge({printers:e,maxLive:t,snapshotIntervalSec:n,statusMode:a,onTileClick:o,onChangeMaxLive:s,onChangeSnapshotIntervalSec:c,onChangeStatusMode:l,statuses:d,showSettings:f=!0,tileSize:p=2,showControls:m=!1,controlsMode:h=`hover`,onChangeControlsMode:g,timeFormat:_=`system`}){let{t:v}=r(),y=(0,M.useRef)(new Map),x=d?[]:e,S=u({queries:x.map(e=>({queryKey:[`printerStatus`,e.id],queryFn:()=>i.getPrinterStatus(e.id),staleTime:5e3}))}),C=(0,M.useMemo)(()=>{let e=new Map;return x.forEach((t,n)=>{e.set(t.id,S[n]?.data)}),e},[e,S,d]),w=d??C,[T,E]=(0,M.useState)(()=>new Set),[D,O]=(0,M.useState)(!1),k=(0,M.useRef)(null);(0,M.useEffect)(()=>{if(!D)return;let e=e=>{k.current&&!k.current.contains(e.target)&&O(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[D]),(0,M.useEffect)(()=>{let e=new IntersectionObserver(e=>{E(t=>{let n=new Set(t);for(let t of e){let e=Number(t.target.dataset.printerId);Number.isFinite(e)&&(t.isIntersecting?n.add(e):n.delete(e))}return n})},{threshold:.4});for(let[,t]of y.current)t&&e.observe(t);return()=>e.disconnect()},[e]);let A=(0,M.useMemo)(()=>{let n=new Map,r=Math.max(0,t);for(let t of e){let e=w.get(t.id)?.connected??!1;if(!T.has(t.id)||!e){n.set(t.id,`paused`);continue}r>0?(n.set(t.id,`live`),--r):n.set(t.id,`snapshot`)}return n},[e,T,t,w]);return e.length===0?(0,P.jsx)(`div`,{className:`rounded-lg border border-bambu-dark-tertiary bg-bambu-dark p-6 text-center text-bambu-gray`,children:v(`printers.camWall.noPrinters`)}):(0,P.jsxs)(`div`,{className:`space-y-3`,children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between text-xs text-bambu-gray`,children:[(0,P.jsx)(`span`,{children:v(`printers.camWall.summary`,{live:Array.from(A.values()).filter(e=>e===`live`).length,snap:Array.from(A.values()).filter(e=>e===`snapshot`).length,total:e.length})}),f&&(0,P.jsxs)(`div`,{className:`relative`,ref:k,children:[(0,P.jsxs)(`button`,{type:`button`,onClick:()=>O(e=>!e),className:`flex h-7 items-center gap-1 rounded-md border border-bambu-dark-tertiary bg-bambu-dark px-2 text-white hover:bg-bambu-dark-tertiary`,title:v(`printers.camWall.settings.title`),children:[(0,P.jsx)(b,{className:`h-3.5 w-3.5`}),(0,P.jsx)(`span`,{children:v(`printers.camWall.settings.title`)})]}),D&&(0,P.jsxs)(`div`,{className:`absolute right-0 top-9 z-30 w-72 space-y-3 rounded-lg border border-bambu-dark-tertiary bg-bambu-dark-secondary p-3 shadow-xl`,children:[(0,P.jsxs)(`label`,{className:`block space-y-1`,children:[(0,P.jsx)(`span`,{className:`text-xs font-medium text-white`,children:v(`printers.camWall.settings.maxLive`)}),(0,P.jsx)(`input`,{type:`number`,min:q,max:J,value:t,onChange:e=>{s(Math.min(J,Math.max(q,Number(e.target.value)||q)))},className:`w-full rounded-md border border-bambu-dark-tertiary bg-bambu-dark px-2 py-1 text-sm text-white`}),(0,P.jsx)(`span`,{className:`block text-[11px] text-bambu-gray`,children:v(`printers.camWall.settings.maxLiveHint`)})]}),(0,P.jsxs)(`label`,{className:`block space-y-1`,children:[(0,P.jsx)(`span`,{className:`text-xs font-medium text-white`,children:v(`printers.camWall.settings.snapshotInterval`)}),(0,P.jsx)(`input`,{type:`number`,min:Y,max:X,value:n,onChange:e=>{c(Math.min(X,Math.max(Y,Number(e.target.value)||Y)))},className:`w-full rounded-md border border-bambu-dark-tertiary bg-bambu-dark px-2 py-1 text-sm text-white`}),(0,P.jsx)(`span`,{className:`block text-[11px] text-bambu-gray`,children:v(`printers.camWall.settings.snapshotIntervalHint`)})]}),(0,P.jsxs)(`div`,{className:`space-y-1`,children:[(0,P.jsx)(`span`,{className:`block text-xs font-medium text-white`,children:v(`printers.camWall.settings.statusOverlay`)}),(0,P.jsx)(`div`,{role:`radiogroup`,"aria-label":v(`printers.camWall.settings.statusOverlay`),className:`flex overflow-hidden rounded-md border border-bambu-dark-tertiary`,children:Z.map(e=>(0,P.jsx)(`button`,{type:`button`,role:`radio`,"aria-checked":a===e,onClick:()=>l(e),className:`flex-1 px-2 py-1 text-xs ${a===e?`bg-bambu-green text-black font-semibold`:`bg-bambu-dark text-white hover:bg-bambu-dark-tertiary`}`,children:v(`printers.camWall.statusMode.${e}`)},e))}),(0,P.jsx)(`span`,{className:`block text-[11px] text-bambu-gray`,children:v(`printers.camWall.settings.statusOverlayHint`)})]}),m&&g&&(0,P.jsxs)(`div`,{className:`space-y-1`,children:[(0,P.jsx)(`span`,{className:`block text-xs font-medium text-white`,children:v(`printers.camWall.settings.controls`)}),(0,P.jsx)(`div`,{role:`radiogroup`,"aria-label":v(`printers.camWall.settings.controls`),className:`flex overflow-hidden rounded-md border border-bambu-dark-tertiary`,children:he.map(e=>(0,P.jsx)(`button`,{type:`button`,role:`radio`,"aria-checked":h===e,onClick:()=>g(e),className:`flex-1 px-2 py-1 text-xs ${h===e?`bg-bambu-green text-black font-semibold`:`bg-bambu-dark text-white hover:bg-bambu-dark-tertiary`}`,children:v(`printers.camWall.controlsMode.${e}`)},e))}),(0,P.jsx)(`span`,{className:`block text-[11px] text-bambu-gray`,children:v(`printers.camWall.settings.controlsHint`)})]})]})]})]}),(0,P.jsx)(`div`,{className:`grid gap-3 ${N(p)}`,"data-testid":`camwall-grid`,children:e.map(e=>{let t=A.get(e.id)??`paused`,r=w.get(e.id);return(0,P.jsxs)(`div`,{ref:t=>{y.current.set(e.id,t)},"data-printer-id":e.id,className:`group/tile relative`,children:[(0,P.jsx)(F,{printerId:e.id,printerName:e.name,cameraRotation:e.camera_rotation,mode:t,snapshotIntervalMs:n*1e3,connected:w.get(e.id)?.connected??!1,statusMode:a,printerState:w.get(e.id)?.state??null,progress:w.get(e.id)?.progress??null,remainingMin:w.get(e.id)?.remaining_time??null,layerNum:w.get(e.id)?.layer_num??null,totalLayers:w.get(e.id)?.total_layers??null,printName:w.get(e.id)?.subtask_name??w.get(e.id)?.gcode_file??null,hmsErrorCount:G(w.get(e.id)?.hms_errors??[]).length,temperatures:r?.temperatures??null,timeFormat:_,onClick:o?()=>o(e.id,e.name):void 0}),m&&(0,P.jsx)(`div`,{"data-testid":`camwall-tile-controls`,className:`absolute right-2 top-8 ${h===`always`?``:`opacity-0 transition-opacity focus-within:opacity-100 group-hover/tile:opacity-100 [@media(hover:none)]:opacity-100`}`,children:(0,P.jsx)(L,{printerId:e.id,printerName:e.name,connected:r?.connected??!1,printerState:r?.state??null,chamberLight:r?.chamber_light??null})})]},e.id)})})]})}var Q=`camWallControls`;function $(){return localStorage.getItem(`camWallControls`)===`always`?`always`:`hover`}function _e(e){localStorage.setItem(Q,e)}export{G as a,K as i,$ as n,V as o,ge as r,ae as s,_e as t};