diff --git a/frontend/src/components/spoolbuddy/SpoolBuddyLayout.tsx b/frontend/src/components/spoolbuddy/SpoolBuddyLayout.tsx index 47f8a518b..a3971fe2c 100644 --- a/frontend/src/components/spoolbuddy/SpoolBuddyLayout.tsx +++ b/frontend/src/components/spoolbuddy/SpoolBuddyLayout.tsx @@ -167,12 +167,9 @@ export function SpoolBuddyLayout() { touchStartRef.current = null; swipeLockedRef.current = false; - // Vertical swipe: open/close quick menu - if (Math.abs(dy) >= SWIPE_THRESHOLD && Math.abs(dy) > Math.abs(dx)) { - if (dy > 0 && startY < 80) { - // Swipe down from top area → open quick menu - setQuickMenuOpen(true); - } + // Vertical swipe down from top edge → open quick menu + if (dy >= SWIPE_THRESHOLD && Math.abs(dy) > Math.abs(dx) && startY < 80) { + setQuickMenuOpen(true); return; } diff --git a/static/assets/index-DPDJoHI3.js b/static/assets/index-C5rdBDsu.js similarity index 99% rename from static/assets/index-DPDJoHI3.js rename to static/assets/index-C5rdBDsu.js index 2f3010ff5..5683a11ea 100644 --- a/static/assets/index-DPDJoHI3.js +++ b/static/assets/index-C5rdBDsu.js @@ -8731,7 +8731,7 @@ Difference: ${l}g (mismatch!)`;return a.jsxs("div",{className:`flex items-center In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)})()}function f(B,W){if(B){if(typeof B=="string")return y(B,W);var D={}.toString.call(B).slice(8,-1);return D==="Object"&&B.constructor&&(D=B.constructor.name),D==="Map"||D==="Set"?Array.from(B):D==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(D)?y(B,W):void 0}}function y(B,W){(W==null||W>B.length)&&(W=B.length);for(var D=0,j=Array(W);D"u"||"remove"in Element.prototype||(Element.prototype.remove=function(){this.parentNode&&this.parentNode.removeChild(this)}),typeof self<"u"&&"document"in self&&((!("classList"in document.createElement("_"))||document.createElementNS&&!("classList"in document.createElementNS("http://www.w3.org/2000/svg","g")))&&(function(B){if("Element"in B){var W="classList",D="prototype",j=B.Element[D],z=Object,K=String[D].trim||function(){return this.replace(/^\s+|\s+$/g,"")},q=Array[D].indexOf||function(ie){for(var me=0,pe=this.length;me2&&arguments[2]!==void 0&&arguments[2]?Object.assign({},this.getDefaultDiplay(),z):z||this.getDefaultDiplay())[j]||j}},{key:"getUpdatedInput",value:function(j,z,K){var q=arguments.length>3&&arguments[3]!==void 0?arguments[3]:K,ce=arguments.length>4&&arguments[4]!==void 0&&arguments[4],O=this.getOptions(),G=[K,q,ce],X=z;return(j==="{bksp}"||j==="{backspace}")&&X.length>0?X=this.removeAt.apply(this,[X].concat(G)):(j==="{delete}"||j==="{forwarddelete}")&&X.length>0?X=this.removeForwardsAt.apply(this,[X].concat(G)):j==="{space}"?X=this.addStringAt.apply(this,[X," "].concat(G)):j!=="{tab}"||typeof O.tabCharOnTab=="boolean"&&O.tabCharOnTab===!1?j!=="{enter}"&&j!=="{numpadenter}"||!O.newLineOnEnter?j.includes("numpad")&&Number.isInteger(Number(j[j.length-2]))?X=this.addStringAt.apply(this,[X,j[j.length-2]].concat(G)):j==="{numpaddivide}"?X=this.addStringAt.apply(this,[X,"/"].concat(G)):j==="{numpadmultiply}"?X=this.addStringAt.apply(this,[X,"*"].concat(G)):j==="{numpadsubtract}"?X=this.addStringAt.apply(this,[X,"-"].concat(G)):j==="{numpadadd}"?X=this.addStringAt.apply(this,[X,"+"].concat(G)):j==="{numpaddecimal}"?X=this.addStringAt.apply(this,[X,"."].concat(G)):j==="{"||j==="}"?X=this.addStringAt.apply(this,[X,j].concat(G)):j.includes("{")||j.includes("}")||(X=this.addStringAt.apply(this,[X,j].concat(G))):X=this.addStringAt.apply(this,[X,` `].concat(G)):X=this.addStringAt.apply(this,[X," "].concat(G)),O.debug&&console.log("Input will be: "+X),X}},{key:"updateCaretPos",value:function(j){var z=arguments.length>1&&arguments[1]!==void 0&&arguments[1],K=this.updateCaretPosAction(j,z);this.dispatch((function(q){q.setCaretPosition(K)}))}},{key:"updateCaretPosAction",value:function(j){var z=arguments.length>1&&arguments[1]!==void 0&&arguments[1],K=this.getOptions(),q=this.getCaretPosition();return q!=null&&(z?q>0&&(q-=j):q+=j),K.debug&&console.log("Caret at:",q),q}},{key:"addStringAt",value:function(j,z){var K,q=arguments.length>2&&arguments[2]!==void 0?arguments[2]:j.length,ce=arguments.length>3&&arguments[3]!==void 0?arguments[3]:j.length,O=arguments.length>4&&arguments[4]!==void 0&&arguments[4];return q||q===0?(K=[j.slice(0,q),z,j.slice(ce)].join(""),this.isMaxLengthReached()||O&&this.updateCaretPos(z.length)):K=j+z,K}},{key:"removeAt",value:function(j){var z,K=arguments.length>1&&arguments[1]!==void 0?arguments[1]:j.length,q=arguments.length>2&&arguments[2]!==void 0?arguments[2]:j.length,ce=arguments.length>3&&arguments[3]!==void 0&&arguments[3];if(K===0&&q===0)return j;if(K===q){var O=/([\uD800-\uDBFF][\uDC00-\uDFFF])/g;K&&K>=0?j.substring(K-2,K).match(O)?(z=j.substr(0,K-2)+j.substr(K),ce&&this.updateCaretPos(2,!0)):(z=j.substr(0,K-1)+j.substr(K),ce&&this.updateCaretPos(1,!0)):j.slice(-2).match(O)?(z=j.slice(0,-2),ce&&this.updateCaretPos(2,!0)):(z=j.slice(0,-1),ce&&this.updateCaretPos(1,!0))}else z=j.slice(0,K)+j.slice(q),ce&&this.dispatch((function(G){G.setCaretPosition(K)}));return z}},{key:"removeForwardsAt",value:function(j){var z,K=arguments.length>1&&arguments[1]!==void 0?arguments[1]:j.length,q=arguments.length>2&&arguments[2]!==void 0?arguments[2]:j.length,ce=arguments.length>3&&arguments[3]!==void 0&&arguments[3];return j!=null&&j.length&&K!==null?(K===q?z=j.substring(K,K+2).match(/([\uD800-\uDBFF][\uDC00-\uDFFF])/g)?j.substr(0,K)+j.substr(K+2):j.substr(0,K)+j.substr(K+1):(z=j.slice(0,K)+j.slice(q),ce&&this.dispatch((function(O){O.setCaretPosition(K)}))),z):j}},{key:"handleMaxLength",value:function(j,z){var K=this.getOptions(),q=K.maxLength,ce=j[K.inputName||"default"],O=z.length-1>=q;if(z.length<=ce.length)return!1;if(Number.isInteger(q))return K.debug&&console.log("maxLength (num) reached:",O),O?(this.maxLengthReached=!0,!0):(this.maxLengthReached=!1,!1);if(v(q)==="object"){var G=z.length-1>=q[K.inputName||"default"];return K.debug&&console.log("maxLength (obj) reached:",G),G?(this.maxLengthReached=!0,!0):(this.maxLengthReached=!1,!1)}}},{key:"isMaxLengthReached",value:function(){return!!this.maxLengthReached}},{key:"isTouchDevice",value:function(){return"ontouchstart"in window||navigator.maxTouchPoints}},{key:"pointerEventsSupported",value:function(){return!!window.PointerEvent}},{key:"camelCase",value:function(j){return j?j.toLowerCase().trim().split(/[.\-_\s]/g).reduce((function(z,K){return K.length?z+K[0].toUpperCase()+K.slice(1):z})):""}},{key:"chunkArray",value:function(j,z){return p(Array(Math.ceil(j.length/z))).map((function(K,q){return j.slice(z*q,z+z*q)}))}},{key:"escapeRegex",value:function(j){return j.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}},{key:"getRtlOffset",value:function(j,z){var K=j,q=z.indexOf("‫");return q=O.length?{done:!0}:{done:!1,value:O[V++]}},e:function(oe){throw oe},f:J}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var ie,me=!0,pe=!1;return{s:function(){X=X.call(O)},n:function(){var oe=X.next();return me=oe.done,oe},e:function(oe){pe=!0,ie=oe},f:function(){try{me||X.return==null||X.return()}finally{if(pe)throw ie}}}})(Object.getOwnPropertyNames(j.prototype));try{for(q.s();!(K=q.n()).done;){var ce=K.value;ce==="constructor"||ce==="bindMethods"||(z[ce]=z[ce].bind(z))}}catch(O){q.e(O)}finally{q.f()}}}],W&&g(B.prototype,W),D&&g(B,D),Object.defineProperty(B,"prototype",{writable:!1}),B;var B,W,D})();b(N,"noop",(function(){}));var P=N;function k(B){return k=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(W){return typeof W}:function(W){return W&&typeof Symbol=="function"&&W.constructor===Symbol&&W!==Symbol.prototype?"symbol":typeof W},k(B)}function M(B,W){for(var D=0;D1?(z=K)===null||z===void 0?void 0:z.toLowerCase():K}},{key:"keyCodeToKey",value:function(j){return{8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",65:"A",66:"B",67:"C",68:"D",69:"E",70:"F",71:"G",72:"H",73:"I",74:"J",75:"K",76:"L",77:"M",78:"N",79:"O",80:"P",81:"Q",82:"R",83:"S",84:"T",85:"U",86:"V",87:"W",88:"X",89:"Y",90:"Z",91:"Meta",96:"Numpad0",97:"Numpad1",98:"Numpad2",99:"Numpad3",100:"Numpad4",101:"Numpad5",102:"Numpad6",103:"Numpad7",104:"Numpad8",105:"Numpad9",106:"NumpadMultiply",107:"NumpadAdd",109:"NumpadSubtract",110:"NumpadDecimal",111:"NumpadDivide",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"}[j]||""}}],W&&M(B.prototype,W),D&&M(B,D),Object.defineProperty(B,"prototype",{writable:!1}),B;var B,W,D})();function F(B){return F=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(W){return typeof W}:function(W){return W&&typeof Symbol=="function"&&W.constructor===Symbol&&W!==Symbol.prototype?"symbol":typeof W},F(B)}function $(B,W){for(var D=0;D0&&arguments[0]!==void 0?arguments[0]:we();return X(R,xe)},V.appendChild(be)}));var J=O>0,ie=document.createElement("div");ie.classList.add("hg-candidate-box-prev"),J&&ie.classList.add("hg-candidate-box-btn-active");var me=function(){J&&K.renderPage({candidateListPages:q,targetElement:ce,pageIndex:O-1,nbPages:G,onItemSelected:X})};this.options.useTouchEvents?ie.ontouchstart=me:ie.onclick=me,this.candidateBoxElement.appendChild(ie),this.candidateBoxElement.appendChild(V);var pe=OB.length)&&(W=B.length);for(var D=0,j=Array(W);D1&&arguments[1]!==void 0?arguments[1]:j;this.caretPosition=j,this.caretPositionEnd=z}},{key:"getInputCandidates",value:function(j){var z=this,K=this.options,q=K.layoutCandidates,ce=K.layoutCandidatesCaseSensitiveMatch;if(!q||de(q)!=="object")return{};var O=Object.keys(q).filter((function(V){var J=j.substring(0,z.getCaretPositionEnd()||0)||j,ie=new RegExp("".concat(z.utilities.escapeRegex(V),"$"),ce?"g":"gi");return!!ae(J.matchAll(ie)).length}));if(O.length>1){var G=O.sort((function(V,J){return J.length-V.length}))[0];return{candidateKey:G,candidateValue:q[G]}}if(O.length){var X=O[0];return{candidateKey:X,candidateValue:q[X]}}return{}}},{key:"showCandidatesBox",value:function(j,z,K){var q=this;this.candidateBox&&this.candidateBox.show({candidateValue:z,targetElement:K,onSelect:function(ce,O){var G=q.options,X=G.layoutCandidatesCaseSensitiveMatch,V=G.disableCandidateNormalization,J=G.enableLayoutCandidatesKeyPress,ie=ce;V||(ie=ce.normalize("NFD")),typeof q.options.beforeInputUpdate=="function"&&q.options.beforeInputUpdate(q);var me=q.getInput(q.options.inputName,!0),pe=q.getCaretPositionEnd()||0,oe=me.substring(0,pe||0)||me,U=new RegExp("".concat(q.utilities.escapeRegex(j),"$"),X?"g":"gi"),R=oe.replace(U,ie),ne=me.replace(oe,R),be=R.length-oe.length,we=(pe||me.length)+be;we<0&&(we=0),q.setInput(ne,q.options.inputName,!0),q.setCaretPosition(we),J&&typeof q.options.onKeyPress=="function"&&q.options.onKeyPress(ce,O),typeof q.options.onChange=="function"&&q.options.onChange(q.getInput(q.options.inputName,!0),O),typeof q.options.onChangeAll=="function"&&q.options.onChangeAll(q.getAllInputs(),O)}})}},{key:"handleButtonClicked",value:function(j,z){var K=this.options,q=K.inputName,ce=q===void 0?this.defaultName:q,O=K.debug;if(j!=="{//}"){this.input[ce]||(this.input[ce]=""),typeof this.options.beforeInputUpdate=="function"&&this.options.beforeInputUpdate(this);var G=this.utilities.getUpdatedInput(j,this.input[ce],this.caretPosition,this.caretPositionEnd);if(this.utilities.isStandardButton(j)&&this.activeInputElement&&this.input[ce]&&this.input[ce]===G&&this.caretPosition===0&&this.caretPositionEnd===G.length)return this.setInput("",this.options.inputName,!0),this.setCaretPosition(0),this.activeInputElement.value="",this.activeInputElement.setSelectionRange(0,0),void this.handleButtonClicked(j,z);if(typeof this.options.onKeyPress=="function"&&this.options.onKeyPress(j,z),this.input[ce]!==G&&(!this.options.inputPattern||this.options.inputPattern&&this.inputPatternIsValid(G))){if(this.options.maxLength&&this.utilities.handleMaxLength(this.input,G))return;var X=this.utilities.getUpdatedInput(j,this.input[ce],this.caretPosition,this.caretPositionEnd,!0);if(this.setInput(X,this.options.inputName,!0),O&&console.log("Input changed:",this.getAllInputs()),this.options.debug&&console.log("Caret at: ",this.getCaretPosition(),this.getCaretPositionEnd(),"(".concat(this.keyboardDOMClass,")"),z?.type),this.options.syncInstanceInputs&&this.syncInstanceInputs(),typeof this.options.onChange=="function"&&this.options.onChange(this.getInput(this.options.inputName,!0),z),typeof this.options.onChangeAll=="function"&&this.options.onChangeAll(this.getAllInputs(),z),z!=null&&z.target&&this.options.enableLayoutCandidates){var V,J=this.getInputCandidates(G),ie=J.candidateKey,me=J.candidateValue;ie&&me?this.showCandidatesBox(ie,me,this.keyboardDOM):(V=this.candidateBox)===null||V===void 0||V.destroy()}}this.caretPositionEnd&&this.caretPosition!==this.caretPositionEnd&&(this.setCaretPosition(this.caretPositionEnd,this.caretPositionEnd),this.activeInputElement&&this.activeInputElement.setSelectionRange(this.caretPositionEnd,this.caretPositionEnd),this.options.debug&&console.log("Caret position aligned",this.caretPosition)),O&&console.log("Key pressed:",j)}}},{key:"getMouseHold",value:function(){return this.isMouseHold}},{key:"setMouseHold",value:function(j){this.options.syncInstanceInputs?this.dispatch((function(z){z.isMouseHold=j})):this.isMouseHold=j}},{key:"handleButtonMouseDown",value:function(j,z){var K=this;z&&(this.options.preventMouseDownDefault&&z.preventDefault(),this.options.stopMouseDownPropagation&&z.stopPropagation(),z.target.classList.add(this.activeButtonClass)),this.holdInteractionTimeout&&clearTimeout(this.holdInteractionTimeout),this.holdTimeout&&clearTimeout(this.holdTimeout),this.setMouseHold(!0),this.options.disableButtonHold||(this.holdTimeout=window.setTimeout((function(){(K.getMouseHold()&&(!j.includes("{")&&!j.includes("}")||j==="{delete}"||j==="{backspace}"||j==="{bksp}"||j==="{space}"||j==="{tab}")||j==="{arrowright}"||j==="{arrowleft}"||j==="{arrowup}"||j==="{arrowdown}")&&(K.options.debug&&console.log("Button held:",j),K.handleButtonHold(j)),clearTimeout(K.holdTimeout)}),500))}},{key:"handleButtonMouseUp",value:function(j,z){var K=this;z&&(this.options.preventMouseUpDefault&&z.preventDefault&&z.preventDefault(),this.options.stopMouseUpPropagation&&z.stopPropagation&&z.stopPropagation(),!(z.target===this.keyboardDOM||z.target&&this.keyboardDOM.contains(z.target)||this.candidateBox&&this.candidateBox.candidateBoxElement&&(z.target===this.candidateBox.candidateBoxElement||z.target&&this.candidateBox.candidateBoxElement.contains(z.target)))&&this.candidateBox&&this.candidateBox.destroy()),this.recurseButtons((function(q){q.classList.remove(K.activeButtonClass)})),this.setMouseHold(!1),this.holdInteractionTimeout&&clearTimeout(this.holdInteractionTimeout),j&&typeof this.options.onKeyReleased=="function"&&this.options.onKeyReleased(j,z)}},{key:"handleKeyboardContainerMouseDown",value:function(j){this.options.preventMouseDownDefault&&j.preventDefault()}},{key:"handleButtonHold",value:function(j){var z=this;this.holdInteractionTimeout&&clearTimeout(this.holdInteractionTimeout),this.holdInteractionTimeout=window.setTimeout((function(){z.getMouseHold()?(z.handleButtonClicked(j),z.handleButtonHold(j)):clearTimeout(z.holdInteractionTimeout)}),100)}},{key:"syncInstanceInputs",value:function(){var j=this;this.dispatch((function(z){z.replaceInput(j.input),z.setCaretPosition(j.caretPosition,j.caretPositionEnd)}))}},{key:"clearInput",value:function(){var j=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.options.inputName||this.defaultName;this.input[j]="",this.setCaretPosition(0),this.options.syncInstanceInputs&&this.syncInstanceInputs()}},{key:"getInput",value:function(){var j=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.options.inputName||this.defaultName,z=arguments.length>1&&arguments[1]!==void 0&&arguments[1];return this.options.syncInstanceInputs&&!z&&this.syncInstanceInputs(),this.options.rtl?"‫"+this.input[j].replace("‫","").replace("‬","")+"‬":this.input[j]}},{key:"getAllInputs",value:function(){var j=this,z={};return Object.keys(this.input).forEach((function(K){z[K]=j.getInput(K,!0)})),z}},{key:"setInput",value:function(j){var z=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.options.inputName||this.defaultName,K=arguments.length>2?arguments[2]:void 0;this.input[z]=j,!K&&this.options.syncInstanceInputs&&this.syncInstanceInputs()}},{key:"replaceInput",value:function(j){this.input=j}},{key:"setOptions",value:function(){var j=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},z=this.changedOptions(j);this.options=Object.assign(this.options,j),z.length&&(this.options.debug&&console.log("changedOptions",z),this.onSetOptions(z),this.render())}},{key:"changedOptions",value:function(j){var z=this;return Object.keys(j).filter((function(K){return JSON.stringify(j[K])!==JSON.stringify(z.options[K])}))}},{key:"onSetOptions",value:function(){var j=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];j.includes("layoutName")&&this.candidateBox&&this.candidateBox.destroy(),(j.includes("layoutCandidatesPageSize")||j.includes("layoutCandidates"))&&this.candidateBox&&(this.candidateBox.destroy(),this.candidateBox=new re({utilities:this.utilities,options:this.options}))}},{key:"resetRows",value:function(){this.keyboardRowsDOM&&this.keyboardRowsDOM.remove(),this.keyboardDOM.className=this.keyboardDOMClass,this.keyboardDOM.setAttribute("data-skInstance",this.currentInstanceName),this.buttonElements={}}},{key:"dispatch",value:function(j){if(!window.SimpleKeyboardInstances)throw console.warn("SimpleKeyboardInstances is not defined. Dispatch cannot be called."),new Error("INSTANCES_VAR_ERROR");return Object.keys(window.SimpleKeyboardInstances).forEach((function(z){j(window.SimpleKeyboardInstances[z],z)}))}},{key:"addButtonTheme",value:function(j,z){var K=this;z&&j&&(j.split(" ").forEach((function(q){z.split(" ").forEach((function(ce){K.options.buttonTheme||(K.options.buttonTheme=[]);var O=!1;K.options.buttonTheme.map((function(G){if(G!=null&&G.class.split(" ").includes(ce)){O=!0;var X=G.buttons.split(" ");X.includes(q)||(O=!0,X.push(q),G.buttons=X.join(" "))}return G})),O||K.options.buttonTheme.push({class:ce,buttons:j})}))})),this.render())}},{key:"removeButtonTheme",value:function(j,z){var K=this;if(!j&&!z)return this.options.buttonTheme=[],void this.render();j&&Array.isArray(this.options.buttonTheme)&&this.options.buttonTheme.length&&(j.split(" ").forEach((function(q){var ce;(ce=K.options)===null||ce===void 0||(ce=ce.buttonTheme)===null||ce===void 0||ce.map((function(O,G){if(O&&z&&z.includes(O.class)||!z){var X,V,J=(X=O)===null||X===void 0?void 0:X.buttons.split(" ").filter((function(ie){return ie!==q}));O&&J!=null&&J.length?O.buttons=J.join(" "):((V=K.options.buttonTheme)===null||V===void 0||V.splice(G,1),O=null)}return O}))})),this.render())}},{key:"getButtonElement",value:function(j){var z,K=this.buttonElements[j];return K&&(z=K.length>1?K:K[0]),z}},{key:"inputPatternIsValid",value:function(j){var z,K=this.options.inputPattern;if((z=K instanceof RegExp?K:K[this.options.inputName||this.defaultName])&&j){var q=z.test(j);return this.options.debug&&console.log('inputPattern ("'.concat(z,'"): ').concat(q?"passed":"did not pass!")),q}return!0}},{key:"setEventListeners",value:function(){if(this.isFirstKeyboardInstance||!this.allKeyboardInstances){this.options.debug&&console.log("Caret handling started (".concat(this.keyboardDOMClass,")"));var j=this.options.physicalKeyboardHighlightPreventDefault,z=j!==void 0&&j;document.addEventListener("keyup",this.handleKeyUp,z),document.addEventListener("keydown",this.handleKeyDown,z),document.addEventListener("mouseup",this.handleMouseUp),document.addEventListener("touchend",this.handleTouchEnd),this.options.updateCaretOnSelectionChange&&document.addEventListener("selectionchange",this.handleSelectionChange),document.addEventListener("select",this.handleSelect)}}},{key:"handleKeyUp",value:function(j){this.caretEventHandler(j),this.options.physicalKeyboardHighlight&&this.physicalKeyboard.handleHighlightKeyUp(j)}},{key:"handleKeyDown",value:function(j){this.options.physicalKeyboardHighlight&&this.physicalKeyboard.handleHighlightKeyDown(j)}},{key:"handleMouseUp",value:function(j){this.caretEventHandler(j)}},{key:"handleTouchEnd",value:function(j){this.caretEventHandler(j)}},{key:"handleSelect",value:function(j){this.caretEventHandler(j)}},{key:"handleSelectionChange",value:function(j){navigator.userAgent.includes("Firefox")||this.caretEventHandler(j)}},{key:"caretEventHandler",value:function(j){var z,K=this;j.target.tagName&&(z=j.target.tagName.toLowerCase()),this.dispatch((function(q){var ce=j.target===q.keyboardDOM||j.target&&q.keyboardDOM.contains(j.target);if(K.options.syncInstanceInputs&&Array.isArray(j.path)&&(ce=j.path.some((function(X){var V;return X==null||(V=X.hasAttribute)===null||V===void 0?void 0:V.call(X,"data-skInstance")}))),(z==="textarea"||z==="input"&&["text","search","url","tel","password"].includes(j.target.type))&&!q.options.disableCaretPositioning){var O=j.target.selectionStart,G=j.target.selectionEnd;q.options.rtl&&(O=q.utilities.getRtlOffset(O,q.getInput()),G=q.utilities.getRtlOffset(G,q.getInput())),q.setCaretPosition(O,G),q.activeInputElement=j.target,q.options.debug&&console.log("Caret at: ",q.getCaretPosition(),q.getCaretPositionEnd(),j&&j.target.tagName.toLowerCase(),"(".concat(q.keyboardDOMClass,")"),j?.type)}else!q.options.disableCaretPositioning&&ce||j?.type==="selectionchange"||(q.setCaretPosition(null),q.activeInputElement=null,q.options.debug&&console.log('Caret position reset due to "'.concat(j?.type,'" event'),j))}))}},{key:"recurseButtons",value:function(j){var z=this;j&&Object.keys(this.buttonElements).forEach((function(K){return z.buttonElements[K].forEach(j)}))}},{key:"destroy",value:function(){this.options.debug&&console.log("Destroying simple-keyboard instance: ".concat(this.currentInstanceName));var j=this.options.physicalKeyboardHighlightPreventDefault,z=j!==void 0&&j;document.removeEventListener("keyup",this.handleKeyUp,z),document.removeEventListener("keydown",this.handleKeyDown,z),document.removeEventListener("mouseup",this.handleMouseUp),document.removeEventListener("touchend",this.handleTouchEnd),document.removeEventListener("select",this.handleSelect),this.options.updateCaretOnSelectionChange&&document.removeEventListener("selectionchange",this.handleSelectionChange),document.onpointerup=null,document.ontouchend=null,document.ontouchcancel=null,document.onmouseup=null,this.recurseButtons((function(K){K&&(K.onpointerdown=null,K.onpointerup=null,K.onpointercancel=null,K.ontouchstart=null,K.ontouchend=null,K.ontouchcancel=null,K.onclick=null,K.onmousedown=null,K.onmouseup=null,K.remove(),K=null)})),this.keyboardDOM.onpointerdown=null,this.keyboardDOM.ontouchstart=null,this.keyboardDOM.onmousedown=null,this.resetRows(),this.candidateBox&&(this.candidateBox.destroy(),this.candidateBox=null),this.activeInputElement=null,this.keyboardDOM.removeAttribute("data-skInstance"),this.keyboardDOM.innerHTML="",window.SimpleKeyboardInstances[this.currentInstanceName]=null,delete window.SimpleKeyboardInstances[this.currentInstanceName],this.initialized=!1}},{key:"getButtonThemeClasses",value:function(j){var z=this.options.buttonTheme,K=[];return Array.isArray(z)&&z.forEach((function(q){if(q&&q.class&&typeof q.class=="string"&&q.buttons&&typeof q.buttons=="string"){var ce=q.class.split(" ");q.buttons.split(" ").includes(j)&&(K=[].concat(ae(K),ae(ce)))}else console.warn('Incorrect "buttonTheme". Please check the documentation.',q)})),K}},{key:"setDOMButtonAttributes",value:function(j,z){var K=this.options.buttonAttributes;Array.isArray(K)&&K.forEach((function(q){q.attribute&&typeof q.attribute=="string"&&q.value&&typeof q.value=="string"?q.buttons&&typeof q.buttons=="string"?q.buttons.split(" ").includes(j)&&z(q.attribute,q.value):z(q.attribute,q.value):console.warn('Incorrect "buttonAttributes". Please check the documentation.',q)}))}},{key:"onTouchDeviceDetected",value:function(){this.processAutoTouchEvents(),this.disableContextualWindow()}},{key:"disableContextualWindow",value:function(){window.oncontextmenu=function(j){var z;if((z=j.target.classList)!==null&&z!==void 0&&z.contains("hg-button"))return j.preventDefault(),j.stopPropagation(),!1}}},{key:"processAutoTouchEvents",value:function(){this.options.autoUseTouchEvents&&(this.options.useTouchEvents=!0,this.options.debug&&console.log("autoUseTouchEvents: Touch device detected, useTouchEvents enabled."))}},{key:"onInit",value:function(){this.options.debug&&console.log("".concat(this.keyboardDOMClass," Initialized")),this.setEventListeners(),typeof this.options.onInit=="function"&&this.options.onInit(this)}},{key:"beforeFirstRender",value:function(){this.utilities.isTouchDevice()&&this.onTouchDeviceDetected(),typeof this.options.beforeFirstRender=="function"&&this.options.beforeFirstRender(this),this.isFirstKeyboardInstance&&this.utilities.pointerEventsSupported()&&!this.options.useTouchEvents&&!this.options.useMouseEvents&&this.options.debug&&console.log("Using PointerEvents as it is supported by this browser"),this.options.useTouchEvents&&this.options.debug&&console.log("useTouchEvents has been enabled. Only touch events will be used.")}},{key:"beforeRender",value:function(){typeof this.options.beforeRender=="function"&&this.options.beforeRender(this)}},{key:"onRender",value:function(){typeof this.options.onRender=="function"&&this.options.onRender(this)}},{key:"onModulesLoaded",value:function(){typeof this.options.onModulesLoaded=="function"&&this.options.onModulesLoaded(this)}},{key:"loadModules",value:function(){var j=this;Array.isArray(this.options.modules)&&(this.options.modules.forEach((function(z){var K=j.utilities.isConstructor(z)?new z(j):z(j);K.init&&K.init(j)})),this.keyboardPluginClasses="modules-loaded",this.render(),this.onModulesLoaded())}},{key:"getModuleProp",value:function(j,z){return!!this.modules[j]&&this.modules[j][z]}},{key:"getModulesList",value:function(){return Object.keys(this.modules)}},{key:"parseRowDOMContainers",value:function(j,z,K,q){var ce=this,O=Array.from(j.children),G=0;return O.length&&K.forEach((function(X,V){var J=q[V];if(!(J&&J>X))return!1;var ie=X-G,me=J-G,pe=document.createElement("div");pe.className+="hg-button-container";var oe="".concat(ce.options.layoutName,"-r").concat(z,"c").concat(V);pe.setAttribute("data-skUID",oe);var U=O.splice(ie,me-ie+1);G+=me-ie,U.forEach((function(R){return pe.appendChild(R)})),O.splice(ie,0,pe),j.innerHTML="",O.forEach((function(R){return j.appendChild(R)})),ce.options.debug&&console.log("rowDOMContainer",U,ie,me,G+1)})),j}},{key:"render",value:function(){var j=this;this.resetRows(),this.initialized||this.beforeFirstRender(),this.beforeRender();var z="hg-layout-".concat(this.options.layoutName),K=this.options.layout||{default:["` 1 2 3 4 5 6 7 8 9 0 - = {bksp}","{tab} q w e r t y u i o p [ ] \\","{lock} a s d f g h j k l ; ' {enter}","{shift} z x c v b n m , . / {shift}",".com @ {space}"],shift:["~ ! @ # $ % ^ & * ( ) _ + {bksp}","{tab} Q W E R T Y U I O P { } |",'{lock} A S D F G H J K L : " {enter}',"{shift} Z X C V B N M < > ? {shift}",".com @ {space}"]},q=this.options.useTouchEvents||!1,ce=q?"hg-touch-events":"",O=this.options.useMouseEvents||!1,G=this.options.disableRowButtonContainers;this.keyboardDOM.className=this.getKeyboardClassString(this.options.theme,z,this.keyboardPluginClasses,ce),this.keyboardDOM.setAttribute("data-skInstance",this.currentInstanceName),this.keyboardRowsDOM=document.createElement("div"),this.keyboardRowsDOM.className="hg-rows",K[this.options.layoutName||this.defaultName].forEach((function(X,V){var J=X.split(" ");j.options.excludeFromLayout&&j.options.excludeFromLayout[j.options.layoutName||j.defaultName]&&(J=J.filter((function(oe){return j.options.excludeFromLayout&&!j.options.excludeFromLayout[j.options.layoutName||j.defaultName].includes(oe)})));var ie=document.createElement("div");ie.className+="hg-row";var me=[],pe=[];J.forEach((function(oe,U){var R,ne=!G&&typeof oe=="string"&&oe.length>1&&oe.indexOf("[")===0,be=!G&&typeof oe=="string"&&oe.length>1&&oe.indexOf("]")===oe.length-1;ne&&(me.push(U),oe=oe.replace(/\[/g,"")),be&&(pe.push(U),oe=oe.replace(/\]/g,""));var we=j.utilities.getButtonClass(oe),xe=j.utilities.getButtonDisplayName(oe,j.options.display,j.options.mergeDisplay),ye=j.options.useButtonTag?"button":"div",fe=document.createElement(ye);fe.className+="hg-button ".concat(we),(R=fe.classList).add.apply(R,ae(j.getButtonThemeClasses(oe))),j.setDOMButtonAttributes(oe,(function(Me,_e){fe.setAttribute(Me,_e)})),j.activeButtonClass="hg-activeButton",!j.utilities.pointerEventsSupported()||q||O?q?(fe.ontouchstart=function(Me){j.handleButtonClicked(oe,Me),j.handleButtonMouseDown(oe,Me)},fe.ontouchend=function(Me){j.handleButtonMouseUp(oe,Me)},fe.ontouchcancel=function(Me){j.handleButtonMouseUp(oe,Me)}):(fe.onclick=function(Me){j.setMouseHold(!1),typeof j.options.onKeyReleased=="function"||j.options.useMouseEvents&&j.options.clickOnMouseDown||j.handleButtonClicked(oe,Me)},fe.onmousedown=function(Me){(typeof j.options.onKeyReleased=="function"||j.options.useMouseEvents&&j.options.clickOnMouseDown)&&!j.isMouseHold&&j.handleButtonClicked(oe,Me),j.handleButtonMouseDown(oe,Me)},fe.onmouseup=function(Me){j.handleButtonMouseUp(oe,Me)}):(fe.onpointerdown=function(Me){j.handleButtonClicked(oe,Me),j.handleButtonMouseDown(oe,Me)},fe.onpointerup=function(Me){j.handleButtonMouseUp(oe,Me)},fe.onpointercancel=function(Me){j.handleButtonMouseUp(oe,Me)}),fe.setAttribute("data-skBtn",oe);var Se="".concat(j.options.layoutName,"-r").concat(V,"b").concat(U);fe.setAttribute("data-skBtnUID",Se);var Ee=document.createElement("span");Ee.innerHTML=xe,fe.appendChild(Ee),j.buttonElements[oe]||(j.buttonElements[oe]=[]),j.buttonElements[oe].push(fe),ie.appendChild(fe)})),ie=j.parseRowDOMContainers(ie,V,me,pe),j.keyboardRowsDOM.appendChild(ie)})),this.keyboardDOM.appendChild(this.keyboardRowsDOM),this.onRender(),this.initialized||(this.initialized=!0,!this.utilities.pointerEventsSupported()||q||O?q?(document.ontouchend=function(X){return j.handleButtonMouseUp(void 0,X)},document.ontouchcancel=function(X){return j.handleButtonMouseUp(void 0,X)},this.keyboardDOM.ontouchstart=function(X){return j.handleKeyboardContainerMouseDown(X)}):q||(document.onmouseup=function(X){return j.handleButtonMouseUp(void 0,X)},this.keyboardDOM.onmousedown=function(X){return j.handleKeyboardContainerMouseDown(X)}):(document.onpointerup=function(X){return j.handleButtonMouseUp(void 0,X)},this.keyboardDOM.onpointerdown=function(X){return j.handleKeyboardContainerMouseDown(X)}),this.onInit())}}],W&&ue(B.prototype,W),D&&ue(B,D),Object.defineProperty(B,"prototype",{writable:!1}),B;var B,W,D})(),ge=se,Ne=ge;return m})()},442:function(l){l.exports=n}},i={};function s(l){var c=i[l];if(c!==void 0)return c.exports;var d=i[l]={exports:{}};return r[l].call(d.exports,d,d.exports,s),d.exports}s.n=function(l){var c=l&&l.__esModule?function(){return l.default}:function(){return l};return s.d(c,{a:c}),c},s.d=function(l,c){for(var d in c)s.o(c,d)&&!s.o(l,d)&&Object.defineProperty(l,d,{enumerable:!0,get:c[d]})},s.o=function(l,c){return Object.prototype.hasOwnProperty.call(l,c)},s.r=function(l){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(l,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(l,"__esModule",{value:!0})};var o={};return(function(){s.r(o),s.d(o,{KeyboardReact:function(){return v},default:function(){return g}}),s(981);var l=s(442),c=s(548),d=s.n(c);function u(b){return u=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(_){return typeof _}:function(_){return _&&typeof Symbol=="function"&&_.constructor===Symbol&&_!==Symbol.prototype?"symbol":typeof _},u(b)}function m(b,_){var N=Object.keys(b);if(Object.getOwnPropertySymbols){var P=Object.getOwnPropertySymbols(b);_&&(P=P.filter((function(k){return Object.getOwnPropertyDescriptor(b,k).enumerable}))),N.push.apply(N,P)}return N}function p(b){for(var _=1;_{t?.(e)},[e,t]);const m=w.useCallback(v=>{if(s.current)return;const g=v.target;if(!g.closest('[data-vkb="false"]')){if(g instanceof HTMLInputElement){if(!grt.has(g.type))return}else if(!(g instanceof HTMLTextAreaElement))return;c.current=g,n(!0),l("default"),d.current?.setInput?.(c.current.value),setTimeout(()=>{(g.closest(".bg-zinc-800, .rounded-lg, [data-vkb-group]")??g).scrollIntoView({behavior:"smooth",block:"nearest"})},100)}},[]),p=w.useCallback(()=>{setTimeout(()=>{const v=document.activeElement;v&&(u.current?.contains(v)||v===c.current)||(n(!1),c.current=null)},150)},[]);w.useEffect(()=>(document.addEventListener("focusin",m),document.addEventListener("focusout",p),()=>{document.removeEventListener("focusin",m),document.removeEventListener("focusout",p)}),[m,p]);const f=w.useCallback(()=>{s.current=!0,i(!0),c.current?.blur(),c.current=null,setTimeout(()=>{n(!1),i(!1),s.current=!1},400)},[]),y=w.useCallback(v=>{const g=c.current;if(g){if(v==="{shift}"){l(b=>b==="default"?"shift":"default");return}if(v==="{lock}"){l(b=>b==="default"?"shift":"default");return}if(v==="{close}"){f();return}v==="{bksp}"?b3(g,g.value.slice(0,-1)):v==="{space}"?b3(g,g.value+" "):(b3(g,g.value+v),o==="shift"&&l("default")),g.focus(),d.current?.setInput?.(g.value)}},[o,f]);return e?a.jsxs(a.Fragment,{children:[a.jsx("div",{className:"fixed inset-0 z-[9998] bg-transparent",onMouseDown:v=>{v.preventDefault(),v.stopPropagation(),r||f()},onTouchStart:v=>{v.preventDefault(),v.stopPropagation(),r||f()},onClick:v=>{v.preventDefault(),v.stopPropagation()}}),!r&&a.jsx("div",{ref:u,className:"relative z-[9999] shrink-0",onMouseDown:v=>v.preventDefault(),onTouchStart:v=>{v.target.closest(".hg-button")||v.preventDefault()},children:a.jsx(frt,{keyboardRef:v=>{d.current=v},layoutName:o,onKeyPress:y,theme:"simple-keyboard vkb-theme",layout:{default:["1 2 3 4 5 6 7 8 9 0 {bksp}","q w e r t y u i o p","{lock} a s d f g h j k l","{shift} z x c v b n m . @","{space} {close}"],shift:["! @ # $ % ^ & * ( ) {bksp}","Q W E R T Y U I O P","{lock} A S D F G H J K L","{shift} Z X C V B N M , _","{space} {close}"]},display:{"{bksp}":"⌫","{close}":"✕ Close","{shift}":"⇧","{lock}":"⇪","{space}":" "}})})]}):null}function xrt(){const[t,e]=w.useState(null),[n,r]=w.useState(null),[i,s]=w.useState(!1),[o,l]=w.useState(100),[c,d]=w.useState(0),u=w.useRef(Date.now()),{i18n:m}=Rt(),p=Uo(),f=qc(),y=urt(),{data:v}=Je({queryKey:["settings"],queryFn:he.getSettings});w.useEffect(()=>{v?.language&&v.language!==m.language&&m.changeLanguage(v.language)},[v?.language,m]);const{data:g=[]}=Je({queryKey:["spoolbuddy-devices"],queryFn:()=>ka.getDevices(),refetchInterval:3e4}),b=g[0],_=y.deviceOnline||!!b?.online,N=w.useMemo(()=>({...y,deviceOnline:_}),[y,_]),P=w.useRef(!1);w.useEffect(()=>{b&&!P.current&&(l(b.display_brightness),d(b.display_blank_timeout),P.current=!0)},[b]),w.useEffect(()=>{const ge=document.documentElement,Ne=ge.classList.contains("dark");return ge.classList.add("dark"),()=>{Ne||ge.classList.remove("dark")}},[]);const{data:k}=Je({queryKey:["spoolbuddy-update-check",b?.device_id],queryFn:()=>b?ka.checkDaemonUpdate(b.device_id):Promise.resolve(null),enabled:!!b,refetchInterval:300*1e3,staleTime:0}),M=w.useRef(null);w.useEffect(()=>{if(_)if(k?.update_available&&k.latest_version){const ge=`Update available: v${k.latest_version}`;r({type:"info",message:ge}),M.current=ge}else M.current&&(r(null),M.current=null);else{const ge="SpoolBuddy device disconnected";r({type:"warning",message:ge}),M.current=ge}},[_,k?.update_available,k?.latest_version]);const T=w.useCallback(()=>{u.current=Date.now(),s(!1)},[]);w.useEffect(()=>(window.addEventListener("pointerdown",T),window.addEventListener("keydown",T),()=>{window.removeEventListener("pointerdown",T),window.removeEventListener("keydown",T)}),[T]);const A=!!(y.matchedSpool||y.unknownTagUid),C=w.useRef(!1);w.useEffect(()=>{A&&!C.current&&(T(),f.pathname!=="/spoolbuddy"&&p("/spoolbuddy")),C.current=A},[A,f.pathname,p,T]),w.useEffect(()=>{if(c<=0)return;const ge=setInterval(()=>{Date.now()-u.current>=c*1e3&&s(!0)},1e3);return()=>clearInterval(ge)},[c]);const{data:F=[]}=Je({queryKey:["printers"],queryFn:()=>he.getPrinters()}),$=ip({queries:F.map(ge=>({queryKey:["printerStatus",ge.id],queryFn:()=>he.getPrinterStatus(ge.id),refetchInterval:1e4,select:Ne=>({connected:Ne?.connected})}))}),I=w.useMemo(()=>F.filter((ge,Ne)=>$[Ne]?.data?.connected),[F,$]),Q=w.useRef(null),L=w.useRef(!1),re=50,ae=w.useRef(null),ee=w.useCallback(ge=>{Q.current={x:ge.touches[0].clientX,y:ge.touches[0].clientY},L.current=!1},[]),de=w.useCallback(ge=>{if(!Q.current)return;const Ne=ge.changedTouches[0].clientX-Q.current.x,B=ge.changedTouches[0].clientY-Q.current.y,W=Q.current.y;if(Q.current=null,L.current=!1,Math.abs(B)>=re&&Math.abs(B)>Math.abs(Ne)){B>0&&W<80&&te(!0);return}if(I.length<2||Math.abs(Ne)Math.abs(Ne))return;const D=I.findIndex(z=>z.id===t),j=Ne<0?(D+1)%I.length:(D-1+I.length)%I.length;e(I[j].id)},[I,t,e]);w.useEffect(()=>{const ge=ae.current;if(!ge)return;const Ne=B=>{if(!Q.current)return;const W=Math.abs(B.touches[0].clientX-Q.current.x),D=Math.abs(B.touches[0].clientY-Q.current.y);if(L.current){B.preventDefault();return}W>10&&W>D&&(L.current=!0,B.preventDefault())};return ge.addEventListener("touchmove",Ne,{passive:!1}),()=>ge.removeEventListener("touchmove",Ne)},[]);const[le,ue]=w.useState(!1),[Y,te]=w.useState(!1),se=o<100?{filter:`brightness(${o/100})`}:void 0;return a.jsxs(a.Fragment,{children:[a.jsxs("div",{ref:ae,"data-spoolbuddy-kiosk":!0,className:"w-screen h-screen bg-bambu-dark text-white flex flex-col overflow-hidden",style:{...se,overscrollBehaviorX:"none"},onTouchStart:ee,onTouchEnd:de,children:[a.jsx(art,{selectedPrinterId:t,onPrinterChange:e,deviceOnline:_}),a.jsx("main",{className:"flex-1 overflow-y-auto",children:a.jsx(HX,{context:{selectedPrinterId:t,setSelectedPrinterId:e,sbState:N,setAlert:r,displayBrightness:o,setDisplayBrightness:l,displayBlankTimeout:c,setDisplayBlankTimeout:d}})}),!le&&a.jsx(ort,{alert:n}),!le&&a.jsx(srt,{}),a.jsx(brt,{onVisibilityChange:ue})]}),a.jsx(lrt,{isOpen:Y,onClose:()=>te(!1),deviceId:b?.device_id??null,deviceOnline:_}),i&&a.jsx("div",{className:"fixed inset-0 bg-black z-[9999]",onPointerDown:ge=>{ge.stopPropagation(),T()}})]})}function nA({color:t,isEmpty:e,size:n=32}){return e?a.jsx("div",{className:"rounded-full border-2 border-dashed border-zinc-500 flex items-center justify-center",style:{width:n,height:n},children:a.jsx("div",{className:"w-2 h-2 rounded-full bg-zinc-600"})}):a.jsxs("svg",{width:n,height:n,viewBox:"0 0 32 32",children:[a.jsx("circle",{cx:"16",cy:"16",r:"14",fill:t,stroke:"white",strokeWidth:"1.5",strokeOpacity:"0.7"}),a.jsx("circle",{cx:"16",cy:"16",r:"11",fill:t,style:{filter:"brightness(0.85)"}})]})}const yrt="spoolbuddy-default-core-weight";function Mle(){try{const t=localStorage.getItem(yrt);if(t){const e=parseInt(t,10);if(e>=0&&e<=500)return e}}catch{}return 250}function vrt({spool:t,scaleWeight:e,onClose:n,onSyncWeight:r,onAssignToAms:i}){const{t:s}=Rt(),[o,l]=w.useState(!1),[c,d]=w.useState(!1),u=t.rgba?`#${t.rgba.slice(0,6)}`:"#808080",m=t.core_weight&&t.core_weight>0?t.core_weight:Mle(),p=e!==null?Math.round(Math.max(0,e)):null,f=p!==null?Math.round(Math.max(0,p-m)):null,y=Math.round(t.label_weight||1e3),v=f!==null?Math.min(100,Math.round(f/y*100)):null,g=v!==null?v>50?"#22c55e":v>20?"#eab308":"#ef4444":"#808080",_=Math.max(0,(t.label_weight||0)-(t.weight_used||0))+m,N=p!==null?p-_:null,P=N!==null?Math.abs(N)<=50:null,k=async()=>{if(e!==null){l(!0);try{await ka.updateSpoolWeight(t.id,Math.round(e)),d(!0),r?.(),setTimeout(()=>d(!1),3e3)}catch(M){console.error("Failed to sync weight:",M)}finally{l(!1)}}};return a.jsxs("div",{className:"flex flex-col items-center space-y-4 max-w-md",children:[a.jsxs("div",{className:"flex items-start gap-5",children:[a.jsxs("div",{className:"relative shrink-0",children:[a.jsx(nA,{color:u,isEmpty:!1,size:100}),v!==null&&a.jsxs("div",{className:"absolute -bottom-2 -right-2 px-2 py-0.5 rounded-full text-xs font-bold text-white shadow-lg",style:{backgroundColor:g},children:[v,"%"]})]}),a.jsxs("div",{className:"flex-1 min-w-0 pt-1",children:[a.jsx("h3",{className:"text-lg font-semibold text-zinc-100",children:t.color_name||"Unknown color"}),a.jsxs("p",{className:"text-sm text-zinc-400",children:[t.brand," • ",t.material,t.subtype&&` ${t.subtype}`]}),f!==null&&a.jsxs("div",{className:"mt-3",children:[a.jsxs("div",{className:"flex items-baseline gap-2",children:[a.jsxs("span",{className:"text-3xl font-bold font-mono text-zinc-100",children:[f,"g"]}),a.jsxs("span",{className:"text-sm text-zinc-500",children:["/ ",y,"g"]})]}),a.jsx("p",{className:"text-xs text-zinc-500 mt-0.5",children:s("spoolbuddy.spool.remaining","Remaining")}),a.jsx("div",{className:"mt-2 max-w-xs",children:a.jsx("div",{className:"h-2 bg-zinc-700 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full rounded-full transition-all duration-500",style:{width:`${v}%`,backgroundColor:g}})})})]})]})]}),a.jsxs("div",{className:"grid grid-cols-2 gap-x-6 gap-y-2 text-sm bg-zinc-800 rounded-lg p-4 w-full",children:[a.jsxs("div",{className:"flex justify-between",children:[a.jsx("span",{className:"text-zinc-500",children:s("spoolbuddy.dashboard.grossWeight","Gross weight")}),a.jsx("span",{className:"font-mono text-zinc-300",children:p!==null?`${p}g`:"—"})]}),a.jsxs("div",{className:"flex justify-between",children:[a.jsx("span",{className:"text-zinc-500",children:s("spoolbuddy.spool.coreWeight","Core")}),a.jsxs("span",{className:"font-mono text-zinc-300",children:[m,"g"]})]}),a.jsxs("div",{className:"flex justify-between",children:[a.jsx("span",{className:"text-zinc-500",children:s("spoolbuddy.dashboard.spoolSize","Spool size")}),a.jsxs("span",{className:"font-mono text-zinc-300",children:[y,"g"]})]}),a.jsxs("div",{className:"flex justify-between items-center",children:[a.jsx("span",{className:"text-zinc-500",children:s("spoolbuddy.spool.scaleWeight","Scale")}),p!==null?a.jsxs("span",{className:`flex items-center gap-1 font-mono ${P?"text-green-500":"text-yellow-500"}`,children:[p,"g",P?a.jsx(Xr,{className:"w-3.5 h-3.5"}):a.jsxs(a.Fragment,{children:[a.jsx(Fn,{className:"w-3.5 h-3.5"}),a.jsx("button",{onClick:k,className:"p-1 hover:bg-green-500/20 rounded transition-colors text-green-500",title:s("spoolbuddy.dashboard.syncWeight","Sync Weight"),children:a.jsx(wr,{className:"w-4 h-4"})})]})]}):a.jsx("span",{className:"text-zinc-500",children:"—"})]}),a.jsxs("div",{className:"flex justify-between items-center",children:[a.jsx("span",{className:"text-zinc-500",children:s("spoolbuddy.dashboard.tagId","Tag")}),a.jsx("span",{className:"font-mono text-xs text-zinc-400 truncate max-w-[120px]",title:t.tag_uid||"",children:t.tag_uid?t.tag_uid.slice(-8):"—"})]})]}),a.jsxs("div",{className:"flex gap-2 justify-center",children:[i&&a.jsx("button",{onClick:i,className:"px-5 py-2.5 rounded-lg text-sm font-medium bg-green-600 text-white hover:bg-green-700 transition-colors min-h-[44px]",children:s("spoolbuddy.modal.assignToAms","Assign to AMS")}),a.jsx("button",{onClick:k,disabled:e===null||o,className:`px-5 py-2.5 rounded-lg text-sm font-medium transition-colors min-h-[44px] ${c?"bg-green-600/20 text-green-400":i?"bg-zinc-700 text-zinc-300 hover:bg-zinc-600 disabled:opacity-40 disabled:cursor-not-allowed":"bg-green-600 text-white hover:bg-green-700 disabled:opacity-40 disabled:cursor-not-allowed"}`,children:o?"...":c?s("spoolbuddy.dashboard.weightSynced","Synced!"):s("spoolbuddy.dashboard.syncWeight","Sync Weight")}),n&&a.jsx("button",{onClick:n,className:"px-5 py-2.5 rounded-lg text-sm font-medium bg-zinc-700 text-zinc-300 hover:bg-zinc-600 transition-colors min-h-[44px]",children:s("spoolbuddy.dashboard.close","Close")})]})]})}function wrt({tagUid:t,scaleWeight:e,coreWeight:n,onLinkSpool:r,onAddToInventory:i,onClose:s}){const{t:o}=Rt(),l=n??Mle(),c=e!==null?Math.round(Math.max(0,e)):null,d=c!==null?Math.round(Math.max(0,c-l)):null;return a.jsxs("div",{className:"flex flex-col items-center text-center space-y-5",children:[a.jsx("div",{className:"w-20 h-20 rounded-2xl bg-green-500/15 flex items-center justify-center",children:a.jsx("svg",{className:"w-10 h-10 text-green-500",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:a.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"2",d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A2 2 0 013 12V7a4 4 0 014-4z"})})}),a.jsxs("div",{children:[a.jsx("h3",{className:"text-lg font-semibold text-zinc-100",children:o("spoolbuddy.dashboard.newTag","New Tag Detected")}),a.jsx("p",{className:"text-sm text-zinc-500 font-mono mt-1",children:t})]}),c!==null&&a.jsxs("div",{className:"text-sm text-zinc-400",children:[a.jsxs("span",{className:"font-mono font-semibold",children:[c,"g"]})," ",o("spoolbuddy.dashboard.onScale","on scale"),d!==null&&d>0&&a.jsxs("span",{className:"text-zinc-500",children:[" • ~",d,"g filament"]})]}),a.jsxs("div",{className:"flex flex-wrap gap-2 justify-center",children:[i&&a.jsx("button",{onClick:i,className:"px-5 py-2.5 rounded-lg text-sm font-medium bg-green-600 text-white hover:bg-green-700 transition-colors min-h-[44px]",children:o("spoolbuddy.modal.addToInventory","Add to Inventory")}),r&&a.jsxs("button",{onClick:r,className:"px-5 py-2.5 rounded-lg text-sm font-medium bg-zinc-700 text-zinc-300 hover:bg-zinc-600 transition-colors min-h-[44px]",children:[a.jsx("svg",{className:"w-4 h-4 inline-block mr-1.5 -mt-0.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:a.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"2",d:"M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"})}),o("spoolbuddy.dashboard.linkSpool","Link to Spool")]}),s&&a.jsx("button",{onClick:s,className:"px-5 py-2.5 rounded-lg text-sm font-medium bg-zinc-700 text-zinc-300 hover:bg-zinc-600 transition-colors min-h-[44px]",children:o("spoolbuddy.dashboard.close","Close")})]})]})}function Srt(t){return t?`#${t.slice(0,6)}`:"#808080"}function jle(t){return!t.tray_type||t.tray_type===""}function _rt(t){return t<=3?`AMS ${String.fromCharCode(65+t)}`:t>=128&&t<=135?`AMS HT ${String.fromCharCode(65+t-128)}`:`AMS ${t}`}function Nrt({className:t}){return a.jsx("svg",{className:t,viewBox:"0 0 36 54",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:a.jsx("path",{d:"M17.8131 0.00538C18.4463 -0.15091 20.3648 3.14642 20.8264 3.84781C25.4187 10.816 35.3089 26.9368 35.9383 34.8694C37.4182 53.5822 11.882 61.3357 2.53721 45.3789C-1.73471 38.0791 0.016 32.2049 3.178 25.0232C6.99221 16.3662 12.6411 7.90372 17.8131 0.00538ZM18.3738 7.24807L17.5881 7.48441C14.4452 12.9431 10.917 18.2341 8.19369 23.9368C4.6808 31.29 1.18317 38.5479 7.69403 45.5657C17.3058 55.9228 34.9847 46.8808 31.4604 32.8681C29.2558 24.0969 22.4207 15.2913 18.3776 7.24807H18.3738Z",fill:"#C3C2C1"})})}function krt({className:t}){return a.jsxs("svg",{className:t,viewBox:"0 0 35 53",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[a.jsx("path",{d:"M17.3165 0.0038C17.932 -0.14959 19.7971 3.08645 20.2458 3.77481C24.7103 10.6135 34.3251 26.4346 34.937 34.2198C36.3757 52.5848 11.5505 60.1942 2.46584 44.534C-1.68714 37.3735 0.0148 31.6085 3.08879 24.5603C6.79681 16.0605 12.2884 7.75907 17.3165 0.0038ZM17.8615 7.11561L17.0977 7.34755C14.0423 12.7048 10.6124 17.8974 7.96483 23.4941C4.54975 30.7107 1.14949 37.8337 7.47908 44.721C16.8233 54.8856 34.01 46.0117 30.5838 32.2595C28.4405 23.6512 21.7957 15.0093 17.8652 7.11561H17.8615Z",fill:"#C3C2C1"}),a.jsx("path",{d:"M5.03547 30.112C9.64453 30.4936 11.632 35.7985 16.4154 35.791C19.6339 35.7873 20.2161 33.2283 22.3853 31.6197C31.6776 24.7286 33.5835 37.4894 27.9881 44.4254C18.1878 56.5653 -1.16063 44.6013 5.03917 30.1158L5.03547 30.112Z",fill:"#1F8FEB"})]})}function Crt({className:t}){return a.jsxs("svg",{className:t,viewBox:"0 0 36 54",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[a.jsx("path",{d:"M17.9625 4.48059L4.77216 26.3154L2.08228 40.2175L10.0224 50.8414H23.1594L33.3246 42.1693V30.2455L17.9625 4.48059Z",fill:"#1F8FEB"}),a.jsx("path",{d:"M17.7948 0.00538C18.4273 -0.15091 20.3438 3.14642 20.8048 3.84781C25.3921 10.816 35.2715 26.9368 35.9001 34.8694C37.3784 53.5822 11.8702 61.3357 2.53562 45.3789C-1.73163 38.0829 0.0134 32.2087 3.1757 25.027C6.98574 16.3662 12.6284 7.90372 17.7948 0.00538ZM18.3549 7.24807L17.57 7.48441C14.4306 12.9431 10.9063 18.2341 8.1859 23.9368C4.67686 31.29 1.18305 38.5479 7.68679 45.5657C17.2881 55.9228 34.9476 46.8808 31.4271 32.8681C29.2249 24.0969 22.3974 15.2913 18.3587 7.24807H18.3549Z",fill:"#C3C2C1"})]})}function Prt({className:t}){return a.jsxs("svg",{className:t,viewBox:"0 0 12 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[a.jsx("path",{d:"M6 0.5C4.6 0.5 3.5 1.6 3.5 3V12.1C2.6 12.8 2 13.9 2 15C2 17.2 3.8 19 6 19C8.2 19 10 17.2 10 15C10 13.9 9.4 12.8 8.5 12.1V3C8.5 1.6 7.4 0.5 6 0.5Z",stroke:"#C3C2C1",strokeWidth:"1",fill:"none"}),a.jsx("circle",{cx:"6",cy:"15",r:"2.5",stroke:"#C3C2C1",strokeWidth:"1",fill:"none"})]})}function Trt({className:t}){return a.jsxs("svg",{className:t,viewBox:"0 0 12 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[a.jsx("rect",{x:"4.5",y:"8",width:"3",height:"4.5",fill:"#d4a017",rx:"0.5"}),a.jsx("circle",{cx:"6",cy:"15",r:"2",fill:"#d4a017"}),a.jsx("path",{d:"M6 0.5C4.6 0.5 3.5 1.6 3.5 3V12.1C2.6 12.8 2 13.9 2 15C2 17.2 3.8 19 6 19C8.2 19 10 17.2 10 15C10 13.9 9.4 12.8 8.5 12.1V3C8.5 1.6 7.4 0.5 6 0.5Z",stroke:"#C3C2C1",strokeWidth:"1",fill:"none"})]})}function Art({className:t}){return a.jsxs("svg",{className:t,viewBox:"0 0 12 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[a.jsx("rect",{x:"4.5",y:"3",width:"3",height:"9.5",fill:"#c62828",rx:"0.5"}),a.jsx("circle",{cx:"6",cy:"15",r:"2",fill:"#c62828"}),a.jsx("path",{d:"M6 0.5C4.6 0.5 3.5 1.6 3.5 3V12.1C2.6 12.8 2 13.9 2 15C2 17.2 3.8 19 6 19C8.2 19 10 17.2 10 15C10 13.9 9.4 12.8 8.5 12.1V3C8.5 1.6 7.4 0.5 6 0.5Z",stroke:"#C3C2C1",strokeWidth:"1",fill:"none"})]})}function Ele({humidity:t,goodThreshold:e=40,fairThreshold:n=60}){let r,i;return t<=e?(r="#22a352",i=Nrt):t<=n?(r="#d4a017",i=krt):(r="#c62828",i=Crt),a.jsxs("div",{className:"flex items-center gap-0.5",children:[a.jsx(i,{className:"w-3 h-3.5"}),a.jsxs("span",{className:"font-medium tabular-nums text-xs",style:{color:r},children:[t,"%"]})]})}function Dle({temp:t,goodThreshold:e=28,fairThreshold:n=35}){let r,i;return t<=e?(r="#22a352",i=Prt):t<=n?(r="#d4a017",i=Trt):(r="#c62828",i=Art),a.jsxs("div",{className:"flex items-center gap-0.5",children:[a.jsx(i,{className:"w-3 h-3.5"}),a.jsxs("span",{className:"font-medium tabular-nums text-xs",style:{color:r},children:[t,"°C"]})]})}function Kz({side:t}){return a.jsx("span",{className:"inline-flex items-center justify-center w-4 h-4 text-[9px] font-bold rounded",style:{backgroundColor:"#1a4d2e",color:"#00ae42"},children:t})}function Mrt({tray:t,slotIndex:e,isActive:n,fillOverride:r,spoolmanFill:i,onClick:s}){const o=jle(t),l=Srt(t.tray_color),c=t.remain!==null&&t.remain!==void 0&&t.remain>=0?t.remain:null,d=r===0&&c!==null&&c>0?null:r,u=i??d??c;return a.jsxs("div",{className:`relative flex flex-col items-center p-2.5 rounded-lg transition-all ${n?"ring-2 ring-bambu-green":""} ${s?"cursor-pointer hover:bg-white/5":""}`,onClick:s,children:[a.jsxs("div",{className:"relative w-16 h-16 mb-1",children:[o?a.jsx("div",{className:"w-full h-full rounded-full border-2 border-dashed border-gray-500 flex items-center justify-center",children:a.jsx("div",{className:"w-3 h-3 rounded-full bg-gray-600"})}):a.jsxs("svg",{viewBox:"0 0 56 56",className:"w-full h-full",children:[a.jsx("circle",{cx:"28",cy:"28",r:"26",fill:l}),a.jsx("circle",{cx:"28",cy:"28",r:"20",fill:l,style:{filter:"brightness(0.85)"}}),a.jsx("ellipse",{cx:"20",cy:"20",rx:"6",ry:"4",fill:"white",opacity:"0.3"}),a.jsx("circle",{cx:"28",cy:"28",r:"8",fill:"#2d2d2d"}),a.jsx("circle",{cx:"28",cy:"28",r:"5",fill:"#1a1a1a"})]}),n&&a.jsx("div",{className:"absolute -bottom-1 left-1/2 -translate-x-1/2 w-2.5 h-2.5 bg-bambu-green rounded-full"})]}),a.jsx("span",{className:"text-sm text-white/70 truncate max-w-full",children:o?"Empty":t.tray_type||"Unknown"}),!o&&u!==null&&u>=0&&a.jsx("div",{className:"w-full h-1 bg-bambu-dark-tertiary rounded-full overflow-hidden mt-1",children:a.jsx("div",{className:"h-full rounded-full transition-all",style:{width:`${u}%`,backgroundColor:hx(u)}})}),a.jsx("span",{className:"absolute top-1 right-1 text-xs text-white/30",children:e+1})]})}function Fle({unit:t,activeSlot:e,onConfigureSlot:n,isDualNozzle:r,nozzleSide:i,thresholds:s,fillOverrides:o,spoolmanFillOverrides:l}){const c=t.tray||[],d=t.is_ams_ht,u=d?1:4;return a.jsxs("div",{className:"bg-bambu-dark-secondary rounded-lg p-3",children:[a.jsxs("div",{className:"flex items-center justify-between mb-2",children:[a.jsxs("div",{className:"flex items-center gap-1.5",children:[a.jsx("span",{className:"text-white font-medium text-base",children:_rt(t.id)}),r&&i&&a.jsx(Kz,{side:i})]}),a.jsxs("div",{className:"flex items-center gap-2",children:[t.temp!=null&&a.jsx(Dle,{temp:t.temp,goodThreshold:s?.tempGood,fairThreshold:s?.tempFair}),t.humidity!=null&&a.jsx(Ele,{humidity:t.humidity,goodThreshold:s?.humidityGood,fairThreshold:s?.humidityFair})]})]}),a.jsx("div",{className:`grid ${d?"grid-cols-1 max-w-[100px] mx-auto":"grid-cols-4"} gap-2`,children:Array.from({length:u}).map((m,p)=>{const f=c[p]||{id:p,tray_color:null,tray_type:"",tray_sub_brands:null,tray_id_name:null,tray_info_idx:null,remain:-1,k:null,cali_idx:null,tag_uid:null,tray_uuid:null,nozzle_temp_min:null,nozzle_temp_max:null};return a.jsx(Mrt,{tray:f,slotIndex:p,isActive:e===p,fillOverride:o?.[`${t.id}-${p}`]??null,spoolmanFill:l?.[`${t.id}-${p}`]??null,onClick:n?()=>n(t.id,p,jle(f)?null:f):void 0},p)})})]})}function x3(t){return t<=3?`AMS ${String.fromCharCode(65+t)}`:t>=128&&t<=135?`AMS HT ${String.fromCharCode(65+t-128)}`:`AMS ${t}`}function y3(t){return!t.tray_type||t.tray_type===""}function jrt(t){return t?`#${t.slice(0,6)}`:"#808080"}const gP=t=>(t??"").trim().toUpperCase();function Ert(t,e){const n=gP(t),r=gP(e);return!n||!r?"none":n===r?"exact":r.includes(n)||n.includes(r)?"partial":"none"}function Drt(t,e){const n=gP(t),r=gP(e);return!n||!r?!1:n===r}function Rle({isOpen:t,onClose:e,spool:n,printerId:r}){const{t:i}=Rt(),s=mn(),[o,l]=w.useState(null),[c,d]=w.useState(null),[u,m]=w.useState(!1),[p,f]=w.useState(null),[y,v]=w.useState(null);w.useEffect(()=>{t&&(l(null),d(null),m(!1),f(null),v(null))},[t]);const g=w.useCallback(Ne=>{Ne.key==="Escape"&&e()},[e]);w.useEffect(()=>(t&&document.addEventListener("keydown",g),()=>document.removeEventListener("keydown",g)),[t,g]);const{data:b}=Je({queryKey:["printerStatus",r],queryFn:()=>he.getPrinterStatus(r),enabled:t&&r!==null,refetchInterval:5e3}),{data:_}=Je({queryKey:["printer",r],queryFn:()=>he.getPrinter(r),enabled:t&&r!==null}),{data:N}=Je({queryKey:["settings"],queryFn:()=>he.getSettings(),enabled:t,staleTime:300*1e3}),{data:P}=Je({queryKey:["spool-assignments",r],queryFn:()=>he.getAssignments(r),enabled:t&&r!==null,staleTime:30*1e3}),k=w.useMemo(()=>{const Ne={};if(!P)return Ne;for(const B of P){const W=B.spool;if(W&&W.label_weight>0&&W.weight_used!=null){const D=Math.round(Math.max(0,W.label_weight-W.weight_used)/W.label_weight*100);Ne[`${B.ams_id}-${B.tray_id}`]=D}}return Ne},[P]),M=N?{humidityGood:Number(N.ams_humidity_good)||40,humidityFair:Number(N.ams_humidity_fair)||60,tempGood:Number(N.ams_temp_good)||28,tempFair:Number(N.ams_temp_fair)||35}:void 0,T=b?.connected??!1,A=w.useMemo(()=>b?.ams??[],[b?.ams]),C=w.useMemo(()=>A.filter(Ne=>!Ne.is_ams_ht),[A]),F=w.useMemo(()=>A.filter(Ne=>Ne.is_ams_ht),[A]),$=w.useMemo(()=>[...b?.vt_tray??[]].sort((Ne,B)=>(Ne.id??254)-(B.id??254)),[b?.vt_tray]),I=_?.nozzle_count===2||b?.temperatures?.nozzle_2!==void 0,Q=w.useRef({});w.useEffect(()=>{b?.ams_extruder_map&&Object.keys(b.ams_extruder_map).length>0&&(Q.current=b.ams_extruder_map)},[b?.ams_extruder_map]);const L=b?.ams_extruder_map&&Object.keys(b.ams_extruder_map).length>0?b.ams_extruder_map:Q.current,re=w.useCallback(Ne=>{if(!I)return null;const B=L[String(Ne)],W=Ne>=128?Ne-128:Ne;return(B!==void 0?B:W)===1?"L":"R"},[I,L]),ae=ct({mutationFn:async({amsId:Ne,trayId:B})=>{if(!r)throw new Error("No printer selected");await he.assignSpool({spool_id:n.id,printer_id:r,ams_id:Ne,tray_id:B})},onSuccess:()=>{d("success"),l(i("spoolbuddy.modal.assignSuccess","Assigned!")),s.invalidateQueries({queryKey:["slotPresets"]}),setTimeout(()=>e(),1500)},onError:Ne=>{d("error"),l(Ne instanceof Error?Ne.message:i("spoolbuddy.modal.assignError","Failed to assign spool."))}}),ee=ae.isPending,de=w.useCallback((Ne,B)=>{if(Ne===254||Ne===255){const D=Ne===254?254:254+B;return $.find(j=>(j.id??254)===D)||null}return A.find(D=>D.id===Ne)?.tray?.find(D=>D.id===B)||null},[A,$]),le=w.useCallback((Ne,B)=>Ne<=3?`${x3(Ne)} ${i("ams.slot","Slot")} ${B+1}`:Ne>=128&&Ne<=135?x3(Ne):Ne===254?i("printers.extL","Ext-L"):I?i("printers.extR","Ext-R"):i("printers.ext","Ext"),[i,I]),ue=w.useCallback((Ne,B)=>{d("info"),l(i("spoolbuddy.modal.assigning","Configuring slot...")),ae.mutate({amsId:Ne,trayId:B})},[ae,i]),Y=w.useCallback((Ne,B)=>{if(!ee){if(!N?.disable_filament_warnings){const W=de(Ne,B);if(W&&!y3(W)){const D=W.tray_sub_brands||W.tray_type||"",j=Ert(n.material,D),z=n.slicer_filament_name||n.slicer_filament,K=W.tray_type||"",q=Drt(z,K);if(j!=="exact"||!q){let ce="profile";j==="none"&&!q?ce="material_profile":j==="partial"&&!q?ce="partial_profile":j==="none"?ce="material":j==="partial"&&(ce="partial");const O=le(Ne,B);v({amsId:Ne,trayId:B}),f({type:ce,spoolMaterial:n.material||"",trayMaterial:D||"",spoolProfile:z||void 0,trayProfile:K||void 0,location:O}),m(!0);return}}}ue(Ne,B)}},[ee,N?.disable_filament_warnings,n,de,le,ue]),te=w.useCallback(()=>{y&&(m(!1),f(null),ue(y.amsId,y.trayId),v(null))},[y,ue]),se=w.useMemo(()=>{const Ne=[];for(const B of F){const W=B.tray?.[0]||{id:0,tray_color:null,tray_type:"",tray_sub_brands:null,tray_id_name:null,tray_info_idx:null,remain:-1,k:null,cali_idx:null,tag_uid:null,tray_uuid:null,nozzle_temp_min:null,nozzle_temp_max:null},D=k[`${B.id}-0`]??null,j=W.remain!=null&&W.remain>=0?W.remain:null,z=D===0&&j!==null&&j>0?null:D;Ne.push({key:`ht-${B.id}`,label:x3(B.id),amsId:B.id,trayId:0,tray:W,isEmpty:y3(W),nozzleSide:re(B.id),effectiveFill:z??j})}for(const B of $){const W=B.id??254,D=W-254,j=k[`255-${D}`]??null,z=B.remain!=null&&B.remain>=0?B.remain:null,K=j===0&&z!==null&&z>0?null:j;Ne.push({key:`ext-${W}`,label:I?W===254?i("printers.extL","Ext-L"):i("printers.extR","Ext-R"):i("printers.ext","Ext"),amsId:255,trayId:D,tray:B,isEmpty:y3(B),nozzleSide:I?W===254?"L":"R":null,effectiveFill:K??z})}return Ne},[F,$,I,i,re,k]);if(!t)return null;const ge=n.rgba?`#${n.rgba.slice(0,6)}`:"#808080";return a.jsxs(a.Fragment,{children:[a.jsxs("div",{className:"fixed inset-0 z-[60] bg-bambu-dark flex flex-col",children:[a.jsxs("div",{className:"flex items-center justify-between px-5 py-3 border-b border-zinc-800 shrink-0",children:[a.jsxs("div",{className:"flex items-center gap-3 min-w-0",children:[a.jsx("div",{className:"w-7 h-7 rounded-full shrink-0",style:{backgroundColor:ge}}),a.jsx("div",{className:"min-w-0",children:a.jsxs("h2",{className:"text-sm font-semibold text-zinc-100 truncate",children:[i("spoolbuddy.modal.assignToAmsTitle","Assign to AMS"),a.jsxs("span",{className:"font-normal text-zinc-500 ml-2",children:[n.color_name||"Unknown"," • ",n.brand," ",n.material,n.subtype&&` ${n.subtype}`]})]})})]}),a.jsx("button",{onClick:e,disabled:ee,className:"p-2 rounded-lg text-zinc-500 hover:text-zinc-300 hover:bg-zinc-800 transition-colors shrink-0 disabled:opacity-50",children:a.jsx(Ht,{className:"w-5 h-5"})})]}),o&&a.jsxs("div",{className:`mx-5 mt-3 p-3 rounded-lg flex items-center gap-3 border shrink-0 ${c==="info"?"bg-blue-500/10 border-blue-500/40":c==="success"?"bg-green-500/10 border-green-500/40":"bg-red-500/10 border-red-500/40"}`,children:[c==="info"&&a.jsx(dt,{className:"w-4 h-4 text-blue-400 animate-spin shrink-0"}),c==="success"&&a.jsx(br,{className:"w-4 h-4 text-green-400 shrink-0"}),c==="error"&&a.jsx(Ka,{className:"w-4 h-4 text-red-400 shrink-0"}),a.jsx("span",{className:`text-sm ${c==="info"?"text-blue-300":c==="success"?"text-green-300":"text-red-300"}`,children:o})]}),a.jsx("div",{className:"flex-1 flex flex-col gap-3 p-4 min-h-0 overflow-y-auto",children:!T&&r?a.jsx("div",{className:"flex-1 flex items-center justify-center",children:a.jsx("div",{className:"text-center text-white/50",children:a.jsx("p",{className:"text-lg mb-2",children:i("spoolbuddy.ams.printerDisconnected","Printer disconnected")})})}):A.length===0&&$.length===0?a.jsx("div",{className:"flex-1 flex items-center justify-center",children:a.jsxs("div",{className:"text-center text-white/50",children:[a.jsx(na,{className:"w-12 h-12 mx-auto mb-3 opacity-50"}),a.jsx("p",{className:"text-lg mb-2",children:i("spoolbuddy.ams.noData","No AMS detected")}),a.jsx("p",{className:"text-sm",children:i("spoolbuddy.ams.connectAms","Connect an AMS to see filament slots")})]})}):a.jsxs(a.Fragment,{children:[C.length>0&&a.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3 flex-1 min-h-0",children:C.map(Ne=>a.jsx(Fle,{unit:Ne,activeSlot:null,onConfigureSlot:(B,W)=>Y(Ne.id,W),isDualNozzle:I,nozzleSide:re(Ne.id),thresholds:M,fillOverrides:k},Ne.id))}),se.length>0&&a.jsx("div",{className:"flex gap-2 shrink-0",children:se.map(({key:Ne,label:B,amsId:W,trayId:D,tray:j,isEmpty:z,nozzleSide:K,effectiveFill:q})=>{const ce=jrt(j.tray_color);return a.jsxs("div",{onClick:()=>Y(W,D),className:`bg-bambu-dark-secondary rounded-lg px-3 py-2 cursor-pointer hover:bg-bambu-dark-secondary/80 transition-all flex items-center gap-2 ${ee?"opacity-50 pointer-events-none":""}`,children:[a.jsx("div",{className:"relative w-10 h-10 shrink-0",children:z?a.jsx("div",{className:"w-full h-full rounded-full border-2 border-dashed border-gray-500 flex items-center justify-center",children:a.jsx("div",{className:"w-1.5 h-1.5 rounded-full bg-gray-600"})}):a.jsxs("svg",{viewBox:"0 0 56 56",className:"w-full h-full",children:[a.jsx("circle",{cx:"28",cy:"28",r:"26",fill:ce}),a.jsx("circle",{cx:"28",cy:"28",r:"20",fill:ce,style:{filter:"brightness(0.85)"}}),a.jsx("ellipse",{cx:"20",cy:"20",rx:"6",ry:"4",fill:"white",opacity:"0.3"}),a.jsx("circle",{cx:"28",cy:"28",r:"8",fill:"#2d2d2d"}),a.jsx("circle",{cx:"28",cy:"28",r:"5",fill:"#1a1a1a"})]})}),a.jsxs("div",{className:"min-w-0",children:[a.jsxs("div",{className:"flex items-center gap-1",children:[a.jsx("span",{className:"text-xs text-white/50 font-medium",children:B}),K&&a.jsx(Kz,{side:K})]}),a.jsx("div",{className:"text-sm text-white/80 truncate",children:z?"Empty":j.tray_type||"?"})]}),!z&&q!=null&&q>=0&&a.jsx("div",{className:"w-1.5 h-8 bg-bambu-dark-tertiary rounded-full overflow-hidden shrink-0 flex flex-col-reverse",children:a.jsx("div",{className:"w-full rounded-full",style:{height:`${q}%`,backgroundColor:hx(q)}})})]},Ne)})})]})}),a.jsx("div",{className:"flex justify-end gap-3 px-5 py-3 border-t border-zinc-800 shrink-0",children:a.jsx("button",{onClick:e,disabled:ee,className:"px-5 py-2.5 rounded-lg text-sm font-medium bg-zinc-800 text-zinc-300 hover:bg-zinc-700 transition-colors min-h-[44px] disabled:opacity-50",children:c==="success"?i("spoolbuddy.dashboard.close","Close"):i("spoolbuddy.modal.cancel","Cancel")})})]}),u&&p&&(()=>{let Ne="";return p.type==="material"?Ne=i("inventory.assignMismatchMessage",{spoolMaterial:p.spoolMaterial,trayMaterial:p.trayMaterial,location:p.location}):p.type==="partial"?Ne=i("inventory.assignPartialMismatchMessage",{spoolMaterial:p.spoolMaterial,trayMaterial:p.trayMaterial,location:p.location}):p.type==="material_profile"?Ne=`${i("inventory.assignMismatchMessage",{spoolMaterial:p.spoolMaterial,trayMaterial:p.trayMaterial,location:p.location})} +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)})()}function ee(B,W){(W==null||W>B.length)&&(W=B.length);for(var D=0,j=Array(W);D1&&arguments[1]!==void 0?arguments[1]:j;this.caretPosition=j,this.caretPositionEnd=z}},{key:"getInputCandidates",value:function(j){var z=this,K=this.options,q=K.layoutCandidates,ce=K.layoutCandidatesCaseSensitiveMatch;if(!q||de(q)!=="object")return{};var O=Object.keys(q).filter((function(V){var J=j.substring(0,z.getCaretPositionEnd()||0)||j,ie=new RegExp("".concat(z.utilities.escapeRegex(V),"$"),ce?"g":"gi");return!!ae(J.matchAll(ie)).length}));if(O.length>1){var G=O.sort((function(V,J){return J.length-V.length}))[0];return{candidateKey:G,candidateValue:q[G]}}if(O.length){var X=O[0];return{candidateKey:X,candidateValue:q[X]}}return{}}},{key:"showCandidatesBox",value:function(j,z,K){var q=this;this.candidateBox&&this.candidateBox.show({candidateValue:z,targetElement:K,onSelect:function(ce,O){var G=q.options,X=G.layoutCandidatesCaseSensitiveMatch,V=G.disableCandidateNormalization,J=G.enableLayoutCandidatesKeyPress,ie=ce;V||(ie=ce.normalize("NFD")),typeof q.options.beforeInputUpdate=="function"&&q.options.beforeInputUpdate(q);var me=q.getInput(q.options.inputName,!0),pe=q.getCaretPositionEnd()||0,oe=me.substring(0,pe||0)||me,U=new RegExp("".concat(q.utilities.escapeRegex(j),"$"),X?"g":"gi"),R=oe.replace(U,ie),ne=me.replace(oe,R),be=R.length-oe.length,we=(pe||me.length)+be;we<0&&(we=0),q.setInput(ne,q.options.inputName,!0),q.setCaretPosition(we),J&&typeof q.options.onKeyPress=="function"&&q.options.onKeyPress(ce,O),typeof q.options.onChange=="function"&&q.options.onChange(q.getInput(q.options.inputName,!0),O),typeof q.options.onChangeAll=="function"&&q.options.onChangeAll(q.getAllInputs(),O)}})}},{key:"handleButtonClicked",value:function(j,z){var K=this.options,q=K.inputName,ce=q===void 0?this.defaultName:q,O=K.debug;if(j!=="{//}"){this.input[ce]||(this.input[ce]=""),typeof this.options.beforeInputUpdate=="function"&&this.options.beforeInputUpdate(this);var G=this.utilities.getUpdatedInput(j,this.input[ce],this.caretPosition,this.caretPositionEnd);if(this.utilities.isStandardButton(j)&&this.activeInputElement&&this.input[ce]&&this.input[ce]===G&&this.caretPosition===0&&this.caretPositionEnd===G.length)return this.setInput("",this.options.inputName,!0),this.setCaretPosition(0),this.activeInputElement.value="",this.activeInputElement.setSelectionRange(0,0),void this.handleButtonClicked(j,z);if(typeof this.options.onKeyPress=="function"&&this.options.onKeyPress(j,z),this.input[ce]!==G&&(!this.options.inputPattern||this.options.inputPattern&&this.inputPatternIsValid(G))){if(this.options.maxLength&&this.utilities.handleMaxLength(this.input,G))return;var X=this.utilities.getUpdatedInput(j,this.input[ce],this.caretPosition,this.caretPositionEnd,!0);if(this.setInput(X,this.options.inputName,!0),O&&console.log("Input changed:",this.getAllInputs()),this.options.debug&&console.log("Caret at: ",this.getCaretPosition(),this.getCaretPositionEnd(),"(".concat(this.keyboardDOMClass,")"),z?.type),this.options.syncInstanceInputs&&this.syncInstanceInputs(),typeof this.options.onChange=="function"&&this.options.onChange(this.getInput(this.options.inputName,!0),z),typeof this.options.onChangeAll=="function"&&this.options.onChangeAll(this.getAllInputs(),z),z!=null&&z.target&&this.options.enableLayoutCandidates){var V,J=this.getInputCandidates(G),ie=J.candidateKey,me=J.candidateValue;ie&&me?this.showCandidatesBox(ie,me,this.keyboardDOM):(V=this.candidateBox)===null||V===void 0||V.destroy()}}this.caretPositionEnd&&this.caretPosition!==this.caretPositionEnd&&(this.setCaretPosition(this.caretPositionEnd,this.caretPositionEnd),this.activeInputElement&&this.activeInputElement.setSelectionRange(this.caretPositionEnd,this.caretPositionEnd),this.options.debug&&console.log("Caret position aligned",this.caretPosition)),O&&console.log("Key pressed:",j)}}},{key:"getMouseHold",value:function(){return this.isMouseHold}},{key:"setMouseHold",value:function(j){this.options.syncInstanceInputs?this.dispatch((function(z){z.isMouseHold=j})):this.isMouseHold=j}},{key:"handleButtonMouseDown",value:function(j,z){var K=this;z&&(this.options.preventMouseDownDefault&&z.preventDefault(),this.options.stopMouseDownPropagation&&z.stopPropagation(),z.target.classList.add(this.activeButtonClass)),this.holdInteractionTimeout&&clearTimeout(this.holdInteractionTimeout),this.holdTimeout&&clearTimeout(this.holdTimeout),this.setMouseHold(!0),this.options.disableButtonHold||(this.holdTimeout=window.setTimeout((function(){(K.getMouseHold()&&(!j.includes("{")&&!j.includes("}")||j==="{delete}"||j==="{backspace}"||j==="{bksp}"||j==="{space}"||j==="{tab}")||j==="{arrowright}"||j==="{arrowleft}"||j==="{arrowup}"||j==="{arrowdown}")&&(K.options.debug&&console.log("Button held:",j),K.handleButtonHold(j)),clearTimeout(K.holdTimeout)}),500))}},{key:"handleButtonMouseUp",value:function(j,z){var K=this;z&&(this.options.preventMouseUpDefault&&z.preventDefault&&z.preventDefault(),this.options.stopMouseUpPropagation&&z.stopPropagation&&z.stopPropagation(),!(z.target===this.keyboardDOM||z.target&&this.keyboardDOM.contains(z.target)||this.candidateBox&&this.candidateBox.candidateBoxElement&&(z.target===this.candidateBox.candidateBoxElement||z.target&&this.candidateBox.candidateBoxElement.contains(z.target)))&&this.candidateBox&&this.candidateBox.destroy()),this.recurseButtons((function(q){q.classList.remove(K.activeButtonClass)})),this.setMouseHold(!1),this.holdInteractionTimeout&&clearTimeout(this.holdInteractionTimeout),j&&typeof this.options.onKeyReleased=="function"&&this.options.onKeyReleased(j,z)}},{key:"handleKeyboardContainerMouseDown",value:function(j){this.options.preventMouseDownDefault&&j.preventDefault()}},{key:"handleButtonHold",value:function(j){var z=this;this.holdInteractionTimeout&&clearTimeout(this.holdInteractionTimeout),this.holdInteractionTimeout=window.setTimeout((function(){z.getMouseHold()?(z.handleButtonClicked(j),z.handleButtonHold(j)):clearTimeout(z.holdInteractionTimeout)}),100)}},{key:"syncInstanceInputs",value:function(){var j=this;this.dispatch((function(z){z.replaceInput(j.input),z.setCaretPosition(j.caretPosition,j.caretPositionEnd)}))}},{key:"clearInput",value:function(){var j=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.options.inputName||this.defaultName;this.input[j]="",this.setCaretPosition(0),this.options.syncInstanceInputs&&this.syncInstanceInputs()}},{key:"getInput",value:function(){var j=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.options.inputName||this.defaultName,z=arguments.length>1&&arguments[1]!==void 0&&arguments[1];return this.options.syncInstanceInputs&&!z&&this.syncInstanceInputs(),this.options.rtl?"‫"+this.input[j].replace("‫","").replace("‬","")+"‬":this.input[j]}},{key:"getAllInputs",value:function(){var j=this,z={};return Object.keys(this.input).forEach((function(K){z[K]=j.getInput(K,!0)})),z}},{key:"setInput",value:function(j){var z=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.options.inputName||this.defaultName,K=arguments.length>2?arguments[2]:void 0;this.input[z]=j,!K&&this.options.syncInstanceInputs&&this.syncInstanceInputs()}},{key:"replaceInput",value:function(j){this.input=j}},{key:"setOptions",value:function(){var j=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},z=this.changedOptions(j);this.options=Object.assign(this.options,j),z.length&&(this.options.debug&&console.log("changedOptions",z),this.onSetOptions(z),this.render())}},{key:"changedOptions",value:function(j){var z=this;return Object.keys(j).filter((function(K){return JSON.stringify(j[K])!==JSON.stringify(z.options[K])}))}},{key:"onSetOptions",value:function(){var j=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];j.includes("layoutName")&&this.candidateBox&&this.candidateBox.destroy(),(j.includes("layoutCandidatesPageSize")||j.includes("layoutCandidates"))&&this.candidateBox&&(this.candidateBox.destroy(),this.candidateBox=new re({utilities:this.utilities,options:this.options}))}},{key:"resetRows",value:function(){this.keyboardRowsDOM&&this.keyboardRowsDOM.remove(),this.keyboardDOM.className=this.keyboardDOMClass,this.keyboardDOM.setAttribute("data-skInstance",this.currentInstanceName),this.buttonElements={}}},{key:"dispatch",value:function(j){if(!window.SimpleKeyboardInstances)throw console.warn("SimpleKeyboardInstances is not defined. Dispatch cannot be called."),new Error("INSTANCES_VAR_ERROR");return Object.keys(window.SimpleKeyboardInstances).forEach((function(z){j(window.SimpleKeyboardInstances[z],z)}))}},{key:"addButtonTheme",value:function(j,z){var K=this;z&&j&&(j.split(" ").forEach((function(q){z.split(" ").forEach((function(ce){K.options.buttonTheme||(K.options.buttonTheme=[]);var O=!1;K.options.buttonTheme.map((function(G){if(G!=null&&G.class.split(" ").includes(ce)){O=!0;var X=G.buttons.split(" ");X.includes(q)||(O=!0,X.push(q),G.buttons=X.join(" "))}return G})),O||K.options.buttonTheme.push({class:ce,buttons:j})}))})),this.render())}},{key:"removeButtonTheme",value:function(j,z){var K=this;if(!j&&!z)return this.options.buttonTheme=[],void this.render();j&&Array.isArray(this.options.buttonTheme)&&this.options.buttonTheme.length&&(j.split(" ").forEach((function(q){var ce;(ce=K.options)===null||ce===void 0||(ce=ce.buttonTheme)===null||ce===void 0||ce.map((function(O,G){if(O&&z&&z.includes(O.class)||!z){var X,V,J=(X=O)===null||X===void 0?void 0:X.buttons.split(" ").filter((function(ie){return ie!==q}));O&&J!=null&&J.length?O.buttons=J.join(" "):((V=K.options.buttonTheme)===null||V===void 0||V.splice(G,1),O=null)}return O}))})),this.render())}},{key:"getButtonElement",value:function(j){var z,K=this.buttonElements[j];return K&&(z=K.length>1?K:K[0]),z}},{key:"inputPatternIsValid",value:function(j){var z,K=this.options.inputPattern;if((z=K instanceof RegExp?K:K[this.options.inputName||this.defaultName])&&j){var q=z.test(j);return this.options.debug&&console.log('inputPattern ("'.concat(z,'"): ').concat(q?"passed":"did not pass!")),q}return!0}},{key:"setEventListeners",value:function(){if(this.isFirstKeyboardInstance||!this.allKeyboardInstances){this.options.debug&&console.log("Caret handling started (".concat(this.keyboardDOMClass,")"));var j=this.options.physicalKeyboardHighlightPreventDefault,z=j!==void 0&&j;document.addEventListener("keyup",this.handleKeyUp,z),document.addEventListener("keydown",this.handleKeyDown,z),document.addEventListener("mouseup",this.handleMouseUp),document.addEventListener("touchend",this.handleTouchEnd),this.options.updateCaretOnSelectionChange&&document.addEventListener("selectionchange",this.handleSelectionChange),document.addEventListener("select",this.handleSelect)}}},{key:"handleKeyUp",value:function(j){this.caretEventHandler(j),this.options.physicalKeyboardHighlight&&this.physicalKeyboard.handleHighlightKeyUp(j)}},{key:"handleKeyDown",value:function(j){this.options.physicalKeyboardHighlight&&this.physicalKeyboard.handleHighlightKeyDown(j)}},{key:"handleMouseUp",value:function(j){this.caretEventHandler(j)}},{key:"handleTouchEnd",value:function(j){this.caretEventHandler(j)}},{key:"handleSelect",value:function(j){this.caretEventHandler(j)}},{key:"handleSelectionChange",value:function(j){navigator.userAgent.includes("Firefox")||this.caretEventHandler(j)}},{key:"caretEventHandler",value:function(j){var z,K=this;j.target.tagName&&(z=j.target.tagName.toLowerCase()),this.dispatch((function(q){var ce=j.target===q.keyboardDOM||j.target&&q.keyboardDOM.contains(j.target);if(K.options.syncInstanceInputs&&Array.isArray(j.path)&&(ce=j.path.some((function(X){var V;return X==null||(V=X.hasAttribute)===null||V===void 0?void 0:V.call(X,"data-skInstance")}))),(z==="textarea"||z==="input"&&["text","search","url","tel","password"].includes(j.target.type))&&!q.options.disableCaretPositioning){var O=j.target.selectionStart,G=j.target.selectionEnd;q.options.rtl&&(O=q.utilities.getRtlOffset(O,q.getInput()),G=q.utilities.getRtlOffset(G,q.getInput())),q.setCaretPosition(O,G),q.activeInputElement=j.target,q.options.debug&&console.log("Caret at: ",q.getCaretPosition(),q.getCaretPositionEnd(),j&&j.target.tagName.toLowerCase(),"(".concat(q.keyboardDOMClass,")"),j?.type)}else!q.options.disableCaretPositioning&&ce||j?.type==="selectionchange"||(q.setCaretPosition(null),q.activeInputElement=null,q.options.debug&&console.log('Caret position reset due to "'.concat(j?.type,'" event'),j))}))}},{key:"recurseButtons",value:function(j){var z=this;j&&Object.keys(this.buttonElements).forEach((function(K){return z.buttonElements[K].forEach(j)}))}},{key:"destroy",value:function(){this.options.debug&&console.log("Destroying simple-keyboard instance: ".concat(this.currentInstanceName));var j=this.options.physicalKeyboardHighlightPreventDefault,z=j!==void 0&&j;document.removeEventListener("keyup",this.handleKeyUp,z),document.removeEventListener("keydown",this.handleKeyDown,z),document.removeEventListener("mouseup",this.handleMouseUp),document.removeEventListener("touchend",this.handleTouchEnd),document.removeEventListener("select",this.handleSelect),this.options.updateCaretOnSelectionChange&&document.removeEventListener("selectionchange",this.handleSelectionChange),document.onpointerup=null,document.ontouchend=null,document.ontouchcancel=null,document.onmouseup=null,this.recurseButtons((function(K){K&&(K.onpointerdown=null,K.onpointerup=null,K.onpointercancel=null,K.ontouchstart=null,K.ontouchend=null,K.ontouchcancel=null,K.onclick=null,K.onmousedown=null,K.onmouseup=null,K.remove(),K=null)})),this.keyboardDOM.onpointerdown=null,this.keyboardDOM.ontouchstart=null,this.keyboardDOM.onmousedown=null,this.resetRows(),this.candidateBox&&(this.candidateBox.destroy(),this.candidateBox=null),this.activeInputElement=null,this.keyboardDOM.removeAttribute("data-skInstance"),this.keyboardDOM.innerHTML="",window.SimpleKeyboardInstances[this.currentInstanceName]=null,delete window.SimpleKeyboardInstances[this.currentInstanceName],this.initialized=!1}},{key:"getButtonThemeClasses",value:function(j){var z=this.options.buttonTheme,K=[];return Array.isArray(z)&&z.forEach((function(q){if(q&&q.class&&typeof q.class=="string"&&q.buttons&&typeof q.buttons=="string"){var ce=q.class.split(" ");q.buttons.split(" ").includes(j)&&(K=[].concat(ae(K),ae(ce)))}else console.warn('Incorrect "buttonTheme". Please check the documentation.',q)})),K}},{key:"setDOMButtonAttributes",value:function(j,z){var K=this.options.buttonAttributes;Array.isArray(K)&&K.forEach((function(q){q.attribute&&typeof q.attribute=="string"&&q.value&&typeof q.value=="string"?q.buttons&&typeof q.buttons=="string"?q.buttons.split(" ").includes(j)&&z(q.attribute,q.value):z(q.attribute,q.value):console.warn('Incorrect "buttonAttributes". Please check the documentation.',q)}))}},{key:"onTouchDeviceDetected",value:function(){this.processAutoTouchEvents(),this.disableContextualWindow()}},{key:"disableContextualWindow",value:function(){window.oncontextmenu=function(j){var z;if((z=j.target.classList)!==null&&z!==void 0&&z.contains("hg-button"))return j.preventDefault(),j.stopPropagation(),!1}}},{key:"processAutoTouchEvents",value:function(){this.options.autoUseTouchEvents&&(this.options.useTouchEvents=!0,this.options.debug&&console.log("autoUseTouchEvents: Touch device detected, useTouchEvents enabled."))}},{key:"onInit",value:function(){this.options.debug&&console.log("".concat(this.keyboardDOMClass," Initialized")),this.setEventListeners(),typeof this.options.onInit=="function"&&this.options.onInit(this)}},{key:"beforeFirstRender",value:function(){this.utilities.isTouchDevice()&&this.onTouchDeviceDetected(),typeof this.options.beforeFirstRender=="function"&&this.options.beforeFirstRender(this),this.isFirstKeyboardInstance&&this.utilities.pointerEventsSupported()&&!this.options.useTouchEvents&&!this.options.useMouseEvents&&this.options.debug&&console.log("Using PointerEvents as it is supported by this browser"),this.options.useTouchEvents&&this.options.debug&&console.log("useTouchEvents has been enabled. Only touch events will be used.")}},{key:"beforeRender",value:function(){typeof this.options.beforeRender=="function"&&this.options.beforeRender(this)}},{key:"onRender",value:function(){typeof this.options.onRender=="function"&&this.options.onRender(this)}},{key:"onModulesLoaded",value:function(){typeof this.options.onModulesLoaded=="function"&&this.options.onModulesLoaded(this)}},{key:"loadModules",value:function(){var j=this;Array.isArray(this.options.modules)&&(this.options.modules.forEach((function(z){var K=j.utilities.isConstructor(z)?new z(j):z(j);K.init&&K.init(j)})),this.keyboardPluginClasses="modules-loaded",this.render(),this.onModulesLoaded())}},{key:"getModuleProp",value:function(j,z){return!!this.modules[j]&&this.modules[j][z]}},{key:"getModulesList",value:function(){return Object.keys(this.modules)}},{key:"parseRowDOMContainers",value:function(j,z,K,q){var ce=this,O=Array.from(j.children),G=0;return O.length&&K.forEach((function(X,V){var J=q[V];if(!(J&&J>X))return!1;var ie=X-G,me=J-G,pe=document.createElement("div");pe.className+="hg-button-container";var oe="".concat(ce.options.layoutName,"-r").concat(z,"c").concat(V);pe.setAttribute("data-skUID",oe);var U=O.splice(ie,me-ie+1);G+=me-ie,U.forEach((function(R){return pe.appendChild(R)})),O.splice(ie,0,pe),j.innerHTML="",O.forEach((function(R){return j.appendChild(R)})),ce.options.debug&&console.log("rowDOMContainer",U,ie,me,G+1)})),j}},{key:"render",value:function(){var j=this;this.resetRows(),this.initialized||this.beforeFirstRender(),this.beforeRender();var z="hg-layout-".concat(this.options.layoutName),K=this.options.layout||{default:["` 1 2 3 4 5 6 7 8 9 0 - = {bksp}","{tab} q w e r t y u i o p [ ] \\","{lock} a s d f g h j k l ; ' {enter}","{shift} z x c v b n m , . / {shift}",".com @ {space}"],shift:["~ ! @ # $ % ^ & * ( ) _ + {bksp}","{tab} Q W E R T Y U I O P { } |",'{lock} A S D F G H J K L : " {enter}',"{shift} Z X C V B N M < > ? {shift}",".com @ {space}"]},q=this.options.useTouchEvents||!1,ce=q?"hg-touch-events":"",O=this.options.useMouseEvents||!1,G=this.options.disableRowButtonContainers;this.keyboardDOM.className=this.getKeyboardClassString(this.options.theme,z,this.keyboardPluginClasses,ce),this.keyboardDOM.setAttribute("data-skInstance",this.currentInstanceName),this.keyboardRowsDOM=document.createElement("div"),this.keyboardRowsDOM.className="hg-rows",K[this.options.layoutName||this.defaultName].forEach((function(X,V){var J=X.split(" ");j.options.excludeFromLayout&&j.options.excludeFromLayout[j.options.layoutName||j.defaultName]&&(J=J.filter((function(oe){return j.options.excludeFromLayout&&!j.options.excludeFromLayout[j.options.layoutName||j.defaultName].includes(oe)})));var ie=document.createElement("div");ie.className+="hg-row";var me=[],pe=[];J.forEach((function(oe,U){var R,ne=!G&&typeof oe=="string"&&oe.length>1&&oe.indexOf("[")===0,be=!G&&typeof oe=="string"&&oe.length>1&&oe.indexOf("]")===oe.length-1;ne&&(me.push(U),oe=oe.replace(/\[/g,"")),be&&(pe.push(U),oe=oe.replace(/\]/g,""));var we=j.utilities.getButtonClass(oe),xe=j.utilities.getButtonDisplayName(oe,j.options.display,j.options.mergeDisplay),ye=j.options.useButtonTag?"button":"div",fe=document.createElement(ye);fe.className+="hg-button ".concat(we),(R=fe.classList).add.apply(R,ae(j.getButtonThemeClasses(oe))),j.setDOMButtonAttributes(oe,(function(Me,_e){fe.setAttribute(Me,_e)})),j.activeButtonClass="hg-activeButton",!j.utilities.pointerEventsSupported()||q||O?q?(fe.ontouchstart=function(Me){j.handleButtonClicked(oe,Me),j.handleButtonMouseDown(oe,Me)},fe.ontouchend=function(Me){j.handleButtonMouseUp(oe,Me)},fe.ontouchcancel=function(Me){j.handleButtonMouseUp(oe,Me)}):(fe.onclick=function(Me){j.setMouseHold(!1),typeof j.options.onKeyReleased=="function"||j.options.useMouseEvents&&j.options.clickOnMouseDown||j.handleButtonClicked(oe,Me)},fe.onmousedown=function(Me){(typeof j.options.onKeyReleased=="function"||j.options.useMouseEvents&&j.options.clickOnMouseDown)&&!j.isMouseHold&&j.handleButtonClicked(oe,Me),j.handleButtonMouseDown(oe,Me)},fe.onmouseup=function(Me){j.handleButtonMouseUp(oe,Me)}):(fe.onpointerdown=function(Me){j.handleButtonClicked(oe,Me),j.handleButtonMouseDown(oe,Me)},fe.onpointerup=function(Me){j.handleButtonMouseUp(oe,Me)},fe.onpointercancel=function(Me){j.handleButtonMouseUp(oe,Me)}),fe.setAttribute("data-skBtn",oe);var Se="".concat(j.options.layoutName,"-r").concat(V,"b").concat(U);fe.setAttribute("data-skBtnUID",Se);var Ee=document.createElement("span");Ee.innerHTML=xe,fe.appendChild(Ee),j.buttonElements[oe]||(j.buttonElements[oe]=[]),j.buttonElements[oe].push(fe),ie.appendChild(fe)})),ie=j.parseRowDOMContainers(ie,V,me,pe),j.keyboardRowsDOM.appendChild(ie)})),this.keyboardDOM.appendChild(this.keyboardRowsDOM),this.onRender(),this.initialized||(this.initialized=!0,!this.utilities.pointerEventsSupported()||q||O?q?(document.ontouchend=function(X){return j.handleButtonMouseUp(void 0,X)},document.ontouchcancel=function(X){return j.handleButtonMouseUp(void 0,X)},this.keyboardDOM.ontouchstart=function(X){return j.handleKeyboardContainerMouseDown(X)}):q||(document.onmouseup=function(X){return j.handleButtonMouseUp(void 0,X)},this.keyboardDOM.onmousedown=function(X){return j.handleKeyboardContainerMouseDown(X)}):(document.onpointerup=function(X){return j.handleButtonMouseUp(void 0,X)},this.keyboardDOM.onpointerdown=function(X){return j.handleKeyboardContainerMouseDown(X)}),this.onInit())}}],W&&ue(B.prototype,W),D&&ue(B,D),Object.defineProperty(B,"prototype",{writable:!1}),B;var B,W,D})(),ge=se,Ne=ge;return m})()},442:function(l){l.exports=n}},i={};function s(l){var c=i[l];if(c!==void 0)return c.exports;var d=i[l]={exports:{}};return r[l].call(d.exports,d,d.exports,s),d.exports}s.n=function(l){var c=l&&l.__esModule?function(){return l.default}:function(){return l};return s.d(c,{a:c}),c},s.d=function(l,c){for(var d in c)s.o(c,d)&&!s.o(l,d)&&Object.defineProperty(l,d,{enumerable:!0,get:c[d]})},s.o=function(l,c){return Object.prototype.hasOwnProperty.call(l,c)},s.r=function(l){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(l,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(l,"__esModule",{value:!0})};var o={};return(function(){s.r(o),s.d(o,{KeyboardReact:function(){return v},default:function(){return g}}),s(981);var l=s(442),c=s(548),d=s.n(c);function u(b){return u=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(_){return typeof _}:function(_){return _&&typeof Symbol=="function"&&_.constructor===Symbol&&_!==Symbol.prototype?"symbol":typeof _},u(b)}function m(b,_){var N=Object.keys(b);if(Object.getOwnPropertySymbols){var P=Object.getOwnPropertySymbols(b);_&&(P=P.filter((function(k){return Object.getOwnPropertyDescriptor(b,k).enumerable}))),N.push.apply(N,P)}return N}function p(b){for(var _=1;_{t?.(e)},[e,t]);const m=w.useCallback(v=>{if(s.current)return;const g=v.target;if(!g.closest('[data-vkb="false"]')){if(g instanceof HTMLInputElement){if(!grt.has(g.type))return}else if(!(g instanceof HTMLTextAreaElement))return;c.current=g,n(!0),l("default"),d.current?.setInput?.(c.current.value),setTimeout(()=>{(g.closest(".bg-zinc-800, .rounded-lg, [data-vkb-group]")??g).scrollIntoView({behavior:"smooth",block:"nearest"})},100)}},[]),p=w.useCallback(()=>{setTimeout(()=>{const v=document.activeElement;v&&(u.current?.contains(v)||v===c.current)||(n(!1),c.current=null)},150)},[]);w.useEffect(()=>(document.addEventListener("focusin",m),document.addEventListener("focusout",p),()=>{document.removeEventListener("focusin",m),document.removeEventListener("focusout",p)}),[m,p]);const f=w.useCallback(()=>{s.current=!0,i(!0),c.current?.blur(),c.current=null,setTimeout(()=>{n(!1),i(!1),s.current=!1},400)},[]),y=w.useCallback(v=>{const g=c.current;if(g){if(v==="{shift}"){l(b=>b==="default"?"shift":"default");return}if(v==="{lock}"){l(b=>b==="default"?"shift":"default");return}if(v==="{close}"){f();return}v==="{bksp}"?b3(g,g.value.slice(0,-1)):v==="{space}"?b3(g,g.value+" "):(b3(g,g.value+v),o==="shift"&&l("default")),g.focus(),d.current?.setInput?.(g.value)}},[o,f]);return e?a.jsxs(a.Fragment,{children:[a.jsx("div",{className:"fixed inset-0 z-[9998] bg-transparent",onMouseDown:v=>{v.preventDefault(),v.stopPropagation(),r||f()},onTouchStart:v=>{v.preventDefault(),v.stopPropagation(),r||f()},onClick:v=>{v.preventDefault(),v.stopPropagation()}}),!r&&a.jsx("div",{ref:u,className:"relative z-[9999] shrink-0",onMouseDown:v=>v.preventDefault(),onTouchStart:v=>{v.target.closest(".hg-button")||v.preventDefault()},children:a.jsx(frt,{keyboardRef:v=>{d.current=v},layoutName:o,onKeyPress:y,theme:"simple-keyboard vkb-theme",layout:{default:["1 2 3 4 5 6 7 8 9 0 {bksp}","q w e r t y u i o p","{lock} a s d f g h j k l","{shift} z x c v b n m . @","{space} {close}"],shift:["! @ # $ % ^ & * ( ) {bksp}","Q W E R T Y U I O P","{lock} A S D F G H J K L","{shift} Z X C V B N M , _","{space} {close}"]},display:{"{bksp}":"⌫","{close}":"✕ Close","{shift}":"⇧","{lock}":"⇪","{space}":" "}})})]}):null}function xrt(){const[t,e]=w.useState(null),[n,r]=w.useState(null),[i,s]=w.useState(!1),[o,l]=w.useState(100),[c,d]=w.useState(0),u=w.useRef(Date.now()),{i18n:m}=Rt(),p=Uo(),f=qc(),y=urt(),{data:v}=Je({queryKey:["settings"],queryFn:he.getSettings});w.useEffect(()=>{v?.language&&v.language!==m.language&&m.changeLanguage(v.language)},[v?.language,m]);const{data:g=[]}=Je({queryKey:["spoolbuddy-devices"],queryFn:()=>ka.getDevices(),refetchInterval:3e4}),b=g[0],_=y.deviceOnline||!!b?.online,N=w.useMemo(()=>({...y,deviceOnline:_}),[y,_]),P=w.useRef(!1);w.useEffect(()=>{b&&!P.current&&(l(b.display_brightness),d(b.display_blank_timeout),P.current=!0)},[b]),w.useEffect(()=>{const ge=document.documentElement,Ne=ge.classList.contains("dark");return ge.classList.add("dark"),()=>{Ne||ge.classList.remove("dark")}},[]);const{data:k}=Je({queryKey:["spoolbuddy-update-check",b?.device_id],queryFn:()=>b?ka.checkDaemonUpdate(b.device_id):Promise.resolve(null),enabled:!!b,refetchInterval:300*1e3,staleTime:0}),M=w.useRef(null);w.useEffect(()=>{if(_)if(k?.update_available&&k.latest_version){const ge=`Update available: v${k.latest_version}`;r({type:"info",message:ge}),M.current=ge}else M.current&&(r(null),M.current=null);else{const ge="SpoolBuddy device disconnected";r({type:"warning",message:ge}),M.current=ge}},[_,k?.update_available,k?.latest_version]);const T=w.useCallback(()=>{u.current=Date.now(),s(!1)},[]);w.useEffect(()=>(window.addEventListener("pointerdown",T),window.addEventListener("keydown",T),()=>{window.removeEventListener("pointerdown",T),window.removeEventListener("keydown",T)}),[T]);const A=!!(y.matchedSpool||y.unknownTagUid),C=w.useRef(!1);w.useEffect(()=>{A&&!C.current&&(T(),f.pathname!=="/spoolbuddy"&&p("/spoolbuddy")),C.current=A},[A,f.pathname,p,T]),w.useEffect(()=>{if(c<=0)return;const ge=setInterval(()=>{Date.now()-u.current>=c*1e3&&s(!0)},1e3);return()=>clearInterval(ge)},[c]);const{data:F=[]}=Je({queryKey:["printers"],queryFn:()=>he.getPrinters()}),$=ip({queries:F.map(ge=>({queryKey:["printerStatus",ge.id],queryFn:()=>he.getPrinterStatus(ge.id),refetchInterval:1e4,select:Ne=>({connected:Ne?.connected})}))}),I=w.useMemo(()=>F.filter((ge,Ne)=>$[Ne]?.data?.connected),[F,$]),Q=w.useRef(null),L=w.useRef(!1),re=50,ae=w.useRef(null),ee=w.useCallback(ge=>{Q.current={x:ge.touches[0].clientX,y:ge.touches[0].clientY},L.current=!1},[]),de=w.useCallback(ge=>{if(!Q.current)return;const Ne=ge.changedTouches[0].clientX-Q.current.x,B=ge.changedTouches[0].clientY-Q.current.y,W=Q.current.y;if(Q.current=null,L.current=!1,B>=re&&Math.abs(B)>Math.abs(Ne)&&W<80){te(!0);return}if(I.length<2||Math.abs(Ne)Math.abs(Ne))return;const D=I.findIndex(z=>z.id===t),j=Ne<0?(D+1)%I.length:(D-1+I.length)%I.length;e(I[j].id)},[I,t,e]);w.useEffect(()=>{const ge=ae.current;if(!ge)return;const Ne=B=>{if(!Q.current)return;const W=Math.abs(B.touches[0].clientX-Q.current.x),D=Math.abs(B.touches[0].clientY-Q.current.y);if(L.current){B.preventDefault();return}W>10&&W>D&&(L.current=!0,B.preventDefault())};return ge.addEventListener("touchmove",Ne,{passive:!1}),()=>ge.removeEventListener("touchmove",Ne)},[]);const[le,ue]=w.useState(!1),[Y,te]=w.useState(!1),se=o<100?{filter:`brightness(${o/100})`}:void 0;return a.jsxs(a.Fragment,{children:[a.jsxs("div",{ref:ae,"data-spoolbuddy-kiosk":!0,className:"w-screen h-screen bg-bambu-dark text-white flex flex-col overflow-hidden",style:{...se,overscrollBehaviorX:"none"},onTouchStart:ee,onTouchEnd:de,children:[a.jsx(art,{selectedPrinterId:t,onPrinterChange:e,deviceOnline:_}),a.jsx("main",{className:"flex-1 overflow-y-auto",children:a.jsx(HX,{context:{selectedPrinterId:t,setSelectedPrinterId:e,sbState:N,setAlert:r,displayBrightness:o,setDisplayBrightness:l,displayBlankTimeout:c,setDisplayBlankTimeout:d}})}),!le&&a.jsx(ort,{alert:n}),!le&&a.jsx(srt,{}),a.jsx(brt,{onVisibilityChange:ue})]}),a.jsx(lrt,{isOpen:Y,onClose:()=>te(!1),deviceId:b?.device_id??null,deviceOnline:_}),i&&a.jsx("div",{className:"fixed inset-0 bg-black z-[9999]",onPointerDown:ge=>{ge.stopPropagation(),T()}})]})}function nA({color:t,isEmpty:e,size:n=32}){return e?a.jsx("div",{className:"rounded-full border-2 border-dashed border-zinc-500 flex items-center justify-center",style:{width:n,height:n},children:a.jsx("div",{className:"w-2 h-2 rounded-full bg-zinc-600"})}):a.jsxs("svg",{width:n,height:n,viewBox:"0 0 32 32",children:[a.jsx("circle",{cx:"16",cy:"16",r:"14",fill:t,stroke:"white",strokeWidth:"1.5",strokeOpacity:"0.7"}),a.jsx("circle",{cx:"16",cy:"16",r:"11",fill:t,style:{filter:"brightness(0.85)"}})]})}const yrt="spoolbuddy-default-core-weight";function Mle(){try{const t=localStorage.getItem(yrt);if(t){const e=parseInt(t,10);if(e>=0&&e<=500)return e}}catch{}return 250}function vrt({spool:t,scaleWeight:e,onClose:n,onSyncWeight:r,onAssignToAms:i}){const{t:s}=Rt(),[o,l]=w.useState(!1),[c,d]=w.useState(!1),u=t.rgba?`#${t.rgba.slice(0,6)}`:"#808080",m=t.core_weight&&t.core_weight>0?t.core_weight:Mle(),p=e!==null?Math.round(Math.max(0,e)):null,f=p!==null?Math.round(Math.max(0,p-m)):null,y=Math.round(t.label_weight||1e3),v=f!==null?Math.min(100,Math.round(f/y*100)):null,g=v!==null?v>50?"#22c55e":v>20?"#eab308":"#ef4444":"#808080",_=Math.max(0,(t.label_weight||0)-(t.weight_used||0))+m,N=p!==null?p-_:null,P=N!==null?Math.abs(N)<=50:null,k=async()=>{if(e!==null){l(!0);try{await ka.updateSpoolWeight(t.id,Math.round(e)),d(!0),r?.(),setTimeout(()=>d(!1),3e3)}catch(M){console.error("Failed to sync weight:",M)}finally{l(!1)}}};return a.jsxs("div",{className:"flex flex-col items-center space-y-4 max-w-md",children:[a.jsxs("div",{className:"flex items-start gap-5",children:[a.jsxs("div",{className:"relative shrink-0",children:[a.jsx(nA,{color:u,isEmpty:!1,size:100}),v!==null&&a.jsxs("div",{className:"absolute -bottom-2 -right-2 px-2 py-0.5 rounded-full text-xs font-bold text-white shadow-lg",style:{backgroundColor:g},children:[v,"%"]})]}),a.jsxs("div",{className:"flex-1 min-w-0 pt-1",children:[a.jsx("h3",{className:"text-lg font-semibold text-zinc-100",children:t.color_name||"Unknown color"}),a.jsxs("p",{className:"text-sm text-zinc-400",children:[t.brand," • ",t.material,t.subtype&&` ${t.subtype}`]}),f!==null&&a.jsxs("div",{className:"mt-3",children:[a.jsxs("div",{className:"flex items-baseline gap-2",children:[a.jsxs("span",{className:"text-3xl font-bold font-mono text-zinc-100",children:[f,"g"]}),a.jsxs("span",{className:"text-sm text-zinc-500",children:["/ ",y,"g"]})]}),a.jsx("p",{className:"text-xs text-zinc-500 mt-0.5",children:s("spoolbuddy.spool.remaining","Remaining")}),a.jsx("div",{className:"mt-2 max-w-xs",children:a.jsx("div",{className:"h-2 bg-zinc-700 rounded-full overflow-hidden",children:a.jsx("div",{className:"h-full rounded-full transition-all duration-500",style:{width:`${v}%`,backgroundColor:g}})})})]})]})]}),a.jsxs("div",{className:"grid grid-cols-2 gap-x-6 gap-y-2 text-sm bg-zinc-800 rounded-lg p-4 w-full",children:[a.jsxs("div",{className:"flex justify-between",children:[a.jsx("span",{className:"text-zinc-500",children:s("spoolbuddy.dashboard.grossWeight","Gross weight")}),a.jsx("span",{className:"font-mono text-zinc-300",children:p!==null?`${p}g`:"—"})]}),a.jsxs("div",{className:"flex justify-between",children:[a.jsx("span",{className:"text-zinc-500",children:s("spoolbuddy.spool.coreWeight","Core")}),a.jsxs("span",{className:"font-mono text-zinc-300",children:[m,"g"]})]}),a.jsxs("div",{className:"flex justify-between",children:[a.jsx("span",{className:"text-zinc-500",children:s("spoolbuddy.dashboard.spoolSize","Spool size")}),a.jsxs("span",{className:"font-mono text-zinc-300",children:[y,"g"]})]}),a.jsxs("div",{className:"flex justify-between items-center",children:[a.jsx("span",{className:"text-zinc-500",children:s("spoolbuddy.spool.scaleWeight","Scale")}),p!==null?a.jsxs("span",{className:`flex items-center gap-1 font-mono ${P?"text-green-500":"text-yellow-500"}`,children:[p,"g",P?a.jsx(Xr,{className:"w-3.5 h-3.5"}):a.jsxs(a.Fragment,{children:[a.jsx(Fn,{className:"w-3.5 h-3.5"}),a.jsx("button",{onClick:k,className:"p-1 hover:bg-green-500/20 rounded transition-colors text-green-500",title:s("spoolbuddy.dashboard.syncWeight","Sync Weight"),children:a.jsx(wr,{className:"w-4 h-4"})})]})]}):a.jsx("span",{className:"text-zinc-500",children:"—"})]}),a.jsxs("div",{className:"flex justify-between items-center",children:[a.jsx("span",{className:"text-zinc-500",children:s("spoolbuddy.dashboard.tagId","Tag")}),a.jsx("span",{className:"font-mono text-xs text-zinc-400 truncate max-w-[120px]",title:t.tag_uid||"",children:t.tag_uid?t.tag_uid.slice(-8):"—"})]})]}),a.jsxs("div",{className:"flex gap-2 justify-center",children:[i&&a.jsx("button",{onClick:i,className:"px-5 py-2.5 rounded-lg text-sm font-medium bg-green-600 text-white hover:bg-green-700 transition-colors min-h-[44px]",children:s("spoolbuddy.modal.assignToAms","Assign to AMS")}),a.jsx("button",{onClick:k,disabled:e===null||o,className:`px-5 py-2.5 rounded-lg text-sm font-medium transition-colors min-h-[44px] ${c?"bg-green-600/20 text-green-400":i?"bg-zinc-700 text-zinc-300 hover:bg-zinc-600 disabled:opacity-40 disabled:cursor-not-allowed":"bg-green-600 text-white hover:bg-green-700 disabled:opacity-40 disabled:cursor-not-allowed"}`,children:o?"...":c?s("spoolbuddy.dashboard.weightSynced","Synced!"):s("spoolbuddy.dashboard.syncWeight","Sync Weight")}),n&&a.jsx("button",{onClick:n,className:"px-5 py-2.5 rounded-lg text-sm font-medium bg-zinc-700 text-zinc-300 hover:bg-zinc-600 transition-colors min-h-[44px]",children:s("spoolbuddy.dashboard.close","Close")})]})]})}function wrt({tagUid:t,scaleWeight:e,coreWeight:n,onLinkSpool:r,onAddToInventory:i,onClose:s}){const{t:o}=Rt(),l=n??Mle(),c=e!==null?Math.round(Math.max(0,e)):null,d=c!==null?Math.round(Math.max(0,c-l)):null;return a.jsxs("div",{className:"flex flex-col items-center text-center space-y-5",children:[a.jsx("div",{className:"w-20 h-20 rounded-2xl bg-green-500/15 flex items-center justify-center",children:a.jsx("svg",{className:"w-10 h-10 text-green-500",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:a.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"2",d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A2 2 0 013 12V7a4 4 0 014-4z"})})}),a.jsxs("div",{children:[a.jsx("h3",{className:"text-lg font-semibold text-zinc-100",children:o("spoolbuddy.dashboard.newTag","New Tag Detected")}),a.jsx("p",{className:"text-sm text-zinc-500 font-mono mt-1",children:t})]}),c!==null&&a.jsxs("div",{className:"text-sm text-zinc-400",children:[a.jsxs("span",{className:"font-mono font-semibold",children:[c,"g"]})," ",o("spoolbuddy.dashboard.onScale","on scale"),d!==null&&d>0&&a.jsxs("span",{className:"text-zinc-500",children:[" • ~",d,"g filament"]})]}),a.jsxs("div",{className:"flex flex-wrap gap-2 justify-center",children:[i&&a.jsx("button",{onClick:i,className:"px-5 py-2.5 rounded-lg text-sm font-medium bg-green-600 text-white hover:bg-green-700 transition-colors min-h-[44px]",children:o("spoolbuddy.modal.addToInventory","Add to Inventory")}),r&&a.jsxs("button",{onClick:r,className:"px-5 py-2.5 rounded-lg text-sm font-medium bg-zinc-700 text-zinc-300 hover:bg-zinc-600 transition-colors min-h-[44px]",children:[a.jsx("svg",{className:"w-4 h-4 inline-block mr-1.5 -mt-0.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:a.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"2",d:"M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"})}),o("spoolbuddy.dashboard.linkSpool","Link to Spool")]}),s&&a.jsx("button",{onClick:s,className:"px-5 py-2.5 rounded-lg text-sm font-medium bg-zinc-700 text-zinc-300 hover:bg-zinc-600 transition-colors min-h-[44px]",children:o("spoolbuddy.dashboard.close","Close")})]})]})}function Srt(t){return t?`#${t.slice(0,6)}`:"#808080"}function jle(t){return!t.tray_type||t.tray_type===""}function _rt(t){return t<=3?`AMS ${String.fromCharCode(65+t)}`:t>=128&&t<=135?`AMS HT ${String.fromCharCode(65+t-128)}`:`AMS ${t}`}function Nrt({className:t}){return a.jsx("svg",{className:t,viewBox:"0 0 36 54",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:a.jsx("path",{d:"M17.8131 0.00538C18.4463 -0.15091 20.3648 3.14642 20.8264 3.84781C25.4187 10.816 35.3089 26.9368 35.9383 34.8694C37.4182 53.5822 11.882 61.3357 2.53721 45.3789C-1.73471 38.0791 0.016 32.2049 3.178 25.0232C6.99221 16.3662 12.6411 7.90372 17.8131 0.00538ZM18.3738 7.24807L17.5881 7.48441C14.4452 12.9431 10.917 18.2341 8.19369 23.9368C4.6808 31.29 1.18317 38.5479 7.69403 45.5657C17.3058 55.9228 34.9847 46.8808 31.4604 32.8681C29.2558 24.0969 22.4207 15.2913 18.3776 7.24807H18.3738Z",fill:"#C3C2C1"})})}function krt({className:t}){return a.jsxs("svg",{className:t,viewBox:"0 0 35 53",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[a.jsx("path",{d:"M17.3165 0.0038C17.932 -0.14959 19.7971 3.08645 20.2458 3.77481C24.7103 10.6135 34.3251 26.4346 34.937 34.2198C36.3757 52.5848 11.5505 60.1942 2.46584 44.534C-1.68714 37.3735 0.0148 31.6085 3.08879 24.5603C6.79681 16.0605 12.2884 7.75907 17.3165 0.0038ZM17.8615 7.11561L17.0977 7.34755C14.0423 12.7048 10.6124 17.8974 7.96483 23.4941C4.54975 30.7107 1.14949 37.8337 7.47908 44.721C16.8233 54.8856 34.01 46.0117 30.5838 32.2595C28.4405 23.6512 21.7957 15.0093 17.8652 7.11561H17.8615Z",fill:"#C3C2C1"}),a.jsx("path",{d:"M5.03547 30.112C9.64453 30.4936 11.632 35.7985 16.4154 35.791C19.6339 35.7873 20.2161 33.2283 22.3853 31.6197C31.6776 24.7286 33.5835 37.4894 27.9881 44.4254C18.1878 56.5653 -1.16063 44.6013 5.03917 30.1158L5.03547 30.112Z",fill:"#1F8FEB"})]})}function Crt({className:t}){return a.jsxs("svg",{className:t,viewBox:"0 0 36 54",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[a.jsx("path",{d:"M17.9625 4.48059L4.77216 26.3154L2.08228 40.2175L10.0224 50.8414H23.1594L33.3246 42.1693V30.2455L17.9625 4.48059Z",fill:"#1F8FEB"}),a.jsx("path",{d:"M17.7948 0.00538C18.4273 -0.15091 20.3438 3.14642 20.8048 3.84781C25.3921 10.816 35.2715 26.9368 35.9001 34.8694C37.3784 53.5822 11.8702 61.3357 2.53562 45.3789C-1.73163 38.0829 0.0134 32.2087 3.1757 25.027C6.98574 16.3662 12.6284 7.90372 17.7948 0.00538ZM18.3549 7.24807L17.57 7.48441C14.4306 12.9431 10.9063 18.2341 8.1859 23.9368C4.67686 31.29 1.18305 38.5479 7.68679 45.5657C17.2881 55.9228 34.9476 46.8808 31.4271 32.8681C29.2249 24.0969 22.3974 15.2913 18.3587 7.24807H18.3549Z",fill:"#C3C2C1"})]})}function Prt({className:t}){return a.jsxs("svg",{className:t,viewBox:"0 0 12 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[a.jsx("path",{d:"M6 0.5C4.6 0.5 3.5 1.6 3.5 3V12.1C2.6 12.8 2 13.9 2 15C2 17.2 3.8 19 6 19C8.2 19 10 17.2 10 15C10 13.9 9.4 12.8 8.5 12.1V3C8.5 1.6 7.4 0.5 6 0.5Z",stroke:"#C3C2C1",strokeWidth:"1",fill:"none"}),a.jsx("circle",{cx:"6",cy:"15",r:"2.5",stroke:"#C3C2C1",strokeWidth:"1",fill:"none"})]})}function Trt({className:t}){return a.jsxs("svg",{className:t,viewBox:"0 0 12 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[a.jsx("rect",{x:"4.5",y:"8",width:"3",height:"4.5",fill:"#d4a017",rx:"0.5"}),a.jsx("circle",{cx:"6",cy:"15",r:"2",fill:"#d4a017"}),a.jsx("path",{d:"M6 0.5C4.6 0.5 3.5 1.6 3.5 3V12.1C2.6 12.8 2 13.9 2 15C2 17.2 3.8 19 6 19C8.2 19 10 17.2 10 15C10 13.9 9.4 12.8 8.5 12.1V3C8.5 1.6 7.4 0.5 6 0.5Z",stroke:"#C3C2C1",strokeWidth:"1",fill:"none"})]})}function Art({className:t}){return a.jsxs("svg",{className:t,viewBox:"0 0 12 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[a.jsx("rect",{x:"4.5",y:"3",width:"3",height:"9.5",fill:"#c62828",rx:"0.5"}),a.jsx("circle",{cx:"6",cy:"15",r:"2",fill:"#c62828"}),a.jsx("path",{d:"M6 0.5C4.6 0.5 3.5 1.6 3.5 3V12.1C2.6 12.8 2 13.9 2 15C2 17.2 3.8 19 6 19C8.2 19 10 17.2 10 15C10 13.9 9.4 12.8 8.5 12.1V3C8.5 1.6 7.4 0.5 6 0.5Z",stroke:"#C3C2C1",strokeWidth:"1",fill:"none"})]})}function Ele({humidity:t,goodThreshold:e=40,fairThreshold:n=60}){let r,i;return t<=e?(r="#22a352",i=Nrt):t<=n?(r="#d4a017",i=krt):(r="#c62828",i=Crt),a.jsxs("div",{className:"flex items-center gap-0.5",children:[a.jsx(i,{className:"w-3 h-3.5"}),a.jsxs("span",{className:"font-medium tabular-nums text-xs",style:{color:r},children:[t,"%"]})]})}function Dle({temp:t,goodThreshold:e=28,fairThreshold:n=35}){let r,i;return t<=e?(r="#22a352",i=Prt):t<=n?(r="#d4a017",i=Trt):(r="#c62828",i=Art),a.jsxs("div",{className:"flex items-center gap-0.5",children:[a.jsx(i,{className:"w-3 h-3.5"}),a.jsxs("span",{className:"font-medium tabular-nums text-xs",style:{color:r},children:[t,"°C"]})]})}function Kz({side:t}){return a.jsx("span",{className:"inline-flex items-center justify-center w-4 h-4 text-[9px] font-bold rounded",style:{backgroundColor:"#1a4d2e",color:"#00ae42"},children:t})}function Mrt({tray:t,slotIndex:e,isActive:n,fillOverride:r,spoolmanFill:i,onClick:s}){const o=jle(t),l=Srt(t.tray_color),c=t.remain!==null&&t.remain!==void 0&&t.remain>=0?t.remain:null,d=r===0&&c!==null&&c>0?null:r,u=i??d??c;return a.jsxs("div",{className:`relative flex flex-col items-center p-2.5 rounded-lg transition-all ${n?"ring-2 ring-bambu-green":""} ${s?"cursor-pointer hover:bg-white/5":""}`,onClick:s,children:[a.jsxs("div",{className:"relative w-16 h-16 mb-1",children:[o?a.jsx("div",{className:"w-full h-full rounded-full border-2 border-dashed border-gray-500 flex items-center justify-center",children:a.jsx("div",{className:"w-3 h-3 rounded-full bg-gray-600"})}):a.jsxs("svg",{viewBox:"0 0 56 56",className:"w-full h-full",children:[a.jsx("circle",{cx:"28",cy:"28",r:"26",fill:l}),a.jsx("circle",{cx:"28",cy:"28",r:"20",fill:l,style:{filter:"brightness(0.85)"}}),a.jsx("ellipse",{cx:"20",cy:"20",rx:"6",ry:"4",fill:"white",opacity:"0.3"}),a.jsx("circle",{cx:"28",cy:"28",r:"8",fill:"#2d2d2d"}),a.jsx("circle",{cx:"28",cy:"28",r:"5",fill:"#1a1a1a"})]}),n&&a.jsx("div",{className:"absolute -bottom-1 left-1/2 -translate-x-1/2 w-2.5 h-2.5 bg-bambu-green rounded-full"})]}),a.jsx("span",{className:"text-sm text-white/70 truncate max-w-full",children:o?"Empty":t.tray_type||"Unknown"}),!o&&u!==null&&u>=0&&a.jsx("div",{className:"w-full h-1 bg-bambu-dark-tertiary rounded-full overflow-hidden mt-1",children:a.jsx("div",{className:"h-full rounded-full transition-all",style:{width:`${u}%`,backgroundColor:hx(u)}})}),a.jsx("span",{className:"absolute top-1 right-1 text-xs text-white/30",children:e+1})]})}function Fle({unit:t,activeSlot:e,onConfigureSlot:n,isDualNozzle:r,nozzleSide:i,thresholds:s,fillOverrides:o,spoolmanFillOverrides:l}){const c=t.tray||[],d=t.is_ams_ht,u=d?1:4;return a.jsxs("div",{className:"bg-bambu-dark-secondary rounded-lg p-3",children:[a.jsxs("div",{className:"flex items-center justify-between mb-2",children:[a.jsxs("div",{className:"flex items-center gap-1.5",children:[a.jsx("span",{className:"text-white font-medium text-base",children:_rt(t.id)}),r&&i&&a.jsx(Kz,{side:i})]}),a.jsxs("div",{className:"flex items-center gap-2",children:[t.temp!=null&&a.jsx(Dle,{temp:t.temp,goodThreshold:s?.tempGood,fairThreshold:s?.tempFair}),t.humidity!=null&&a.jsx(Ele,{humidity:t.humidity,goodThreshold:s?.humidityGood,fairThreshold:s?.humidityFair})]})]}),a.jsx("div",{className:`grid ${d?"grid-cols-1 max-w-[100px] mx-auto":"grid-cols-4"} gap-2`,children:Array.from({length:u}).map((m,p)=>{const f=c[p]||{id:p,tray_color:null,tray_type:"",tray_sub_brands:null,tray_id_name:null,tray_info_idx:null,remain:-1,k:null,cali_idx:null,tag_uid:null,tray_uuid:null,nozzle_temp_min:null,nozzle_temp_max:null};return a.jsx(Mrt,{tray:f,slotIndex:p,isActive:e===p,fillOverride:o?.[`${t.id}-${p}`]??null,spoolmanFill:l?.[`${t.id}-${p}`]??null,onClick:n?()=>n(t.id,p,jle(f)?null:f):void 0},p)})})]})}function x3(t){return t<=3?`AMS ${String.fromCharCode(65+t)}`:t>=128&&t<=135?`AMS HT ${String.fromCharCode(65+t-128)}`:`AMS ${t}`}function y3(t){return!t.tray_type||t.tray_type===""}function jrt(t){return t?`#${t.slice(0,6)}`:"#808080"}const gP=t=>(t??"").trim().toUpperCase();function Ert(t,e){const n=gP(t),r=gP(e);return!n||!r?"none":n===r?"exact":r.includes(n)||n.includes(r)?"partial":"none"}function Drt(t,e){const n=gP(t),r=gP(e);return!n||!r?!1:n===r}function Rle({isOpen:t,onClose:e,spool:n,printerId:r}){const{t:i}=Rt(),s=mn(),[o,l]=w.useState(null),[c,d]=w.useState(null),[u,m]=w.useState(!1),[p,f]=w.useState(null),[y,v]=w.useState(null);w.useEffect(()=>{t&&(l(null),d(null),m(!1),f(null),v(null))},[t]);const g=w.useCallback(Ne=>{Ne.key==="Escape"&&e()},[e]);w.useEffect(()=>(t&&document.addEventListener("keydown",g),()=>document.removeEventListener("keydown",g)),[t,g]);const{data:b}=Je({queryKey:["printerStatus",r],queryFn:()=>he.getPrinterStatus(r),enabled:t&&r!==null,refetchInterval:5e3}),{data:_}=Je({queryKey:["printer",r],queryFn:()=>he.getPrinter(r),enabled:t&&r!==null}),{data:N}=Je({queryKey:["settings"],queryFn:()=>he.getSettings(),enabled:t,staleTime:300*1e3}),{data:P}=Je({queryKey:["spool-assignments",r],queryFn:()=>he.getAssignments(r),enabled:t&&r!==null,staleTime:30*1e3}),k=w.useMemo(()=>{const Ne={};if(!P)return Ne;for(const B of P){const W=B.spool;if(W&&W.label_weight>0&&W.weight_used!=null){const D=Math.round(Math.max(0,W.label_weight-W.weight_used)/W.label_weight*100);Ne[`${B.ams_id}-${B.tray_id}`]=D}}return Ne},[P]),M=N?{humidityGood:Number(N.ams_humidity_good)||40,humidityFair:Number(N.ams_humidity_fair)||60,tempGood:Number(N.ams_temp_good)||28,tempFair:Number(N.ams_temp_fair)||35}:void 0,T=b?.connected??!1,A=w.useMemo(()=>b?.ams??[],[b?.ams]),C=w.useMemo(()=>A.filter(Ne=>!Ne.is_ams_ht),[A]),F=w.useMemo(()=>A.filter(Ne=>Ne.is_ams_ht),[A]),$=w.useMemo(()=>[...b?.vt_tray??[]].sort((Ne,B)=>(Ne.id??254)-(B.id??254)),[b?.vt_tray]),I=_?.nozzle_count===2||b?.temperatures?.nozzle_2!==void 0,Q=w.useRef({});w.useEffect(()=>{b?.ams_extruder_map&&Object.keys(b.ams_extruder_map).length>0&&(Q.current=b.ams_extruder_map)},[b?.ams_extruder_map]);const L=b?.ams_extruder_map&&Object.keys(b.ams_extruder_map).length>0?b.ams_extruder_map:Q.current,re=w.useCallback(Ne=>{if(!I)return null;const B=L[String(Ne)],W=Ne>=128?Ne-128:Ne;return(B!==void 0?B:W)===1?"L":"R"},[I,L]),ae=ct({mutationFn:async({amsId:Ne,trayId:B})=>{if(!r)throw new Error("No printer selected");await he.assignSpool({spool_id:n.id,printer_id:r,ams_id:Ne,tray_id:B})},onSuccess:()=>{d("success"),l(i("spoolbuddy.modal.assignSuccess","Assigned!")),s.invalidateQueries({queryKey:["slotPresets"]}),setTimeout(()=>e(),1500)},onError:Ne=>{d("error"),l(Ne instanceof Error?Ne.message:i("spoolbuddy.modal.assignError","Failed to assign spool."))}}),ee=ae.isPending,de=w.useCallback((Ne,B)=>{if(Ne===254||Ne===255){const D=Ne===254?254:254+B;return $.find(j=>(j.id??254)===D)||null}return A.find(D=>D.id===Ne)?.tray?.find(D=>D.id===B)||null},[A,$]),le=w.useCallback((Ne,B)=>Ne<=3?`${x3(Ne)} ${i("ams.slot","Slot")} ${B+1}`:Ne>=128&&Ne<=135?x3(Ne):Ne===254?i("printers.extL","Ext-L"):I?i("printers.extR","Ext-R"):i("printers.ext","Ext"),[i,I]),ue=w.useCallback((Ne,B)=>{d("info"),l(i("spoolbuddy.modal.assigning","Configuring slot...")),ae.mutate({amsId:Ne,trayId:B})},[ae,i]),Y=w.useCallback((Ne,B)=>{if(!ee){if(!N?.disable_filament_warnings){const W=de(Ne,B);if(W&&!y3(W)){const D=W.tray_sub_brands||W.tray_type||"",j=Ert(n.material,D),z=n.slicer_filament_name||n.slicer_filament,K=W.tray_type||"",q=Drt(z,K);if(j!=="exact"||!q){let ce="profile";j==="none"&&!q?ce="material_profile":j==="partial"&&!q?ce="partial_profile":j==="none"?ce="material":j==="partial"&&(ce="partial");const O=le(Ne,B);v({amsId:Ne,trayId:B}),f({type:ce,spoolMaterial:n.material||"",trayMaterial:D||"",spoolProfile:z||void 0,trayProfile:K||void 0,location:O}),m(!0);return}}}ue(Ne,B)}},[ee,N?.disable_filament_warnings,n,de,le,ue]),te=w.useCallback(()=>{y&&(m(!1),f(null),ue(y.amsId,y.trayId),v(null))},[y,ue]),se=w.useMemo(()=>{const Ne=[];for(const B of F){const W=B.tray?.[0]||{id:0,tray_color:null,tray_type:"",tray_sub_brands:null,tray_id_name:null,tray_info_idx:null,remain:-1,k:null,cali_idx:null,tag_uid:null,tray_uuid:null,nozzle_temp_min:null,nozzle_temp_max:null},D=k[`${B.id}-0`]??null,j=W.remain!=null&&W.remain>=0?W.remain:null,z=D===0&&j!==null&&j>0?null:D;Ne.push({key:`ht-${B.id}`,label:x3(B.id),amsId:B.id,trayId:0,tray:W,isEmpty:y3(W),nozzleSide:re(B.id),effectiveFill:z??j})}for(const B of $){const W=B.id??254,D=W-254,j=k[`255-${D}`]??null,z=B.remain!=null&&B.remain>=0?B.remain:null,K=j===0&&z!==null&&z>0?null:j;Ne.push({key:`ext-${W}`,label:I?W===254?i("printers.extL","Ext-L"):i("printers.extR","Ext-R"):i("printers.ext","Ext"),amsId:255,trayId:D,tray:B,isEmpty:y3(B),nozzleSide:I?W===254?"L":"R":null,effectiveFill:K??z})}return Ne},[F,$,I,i,re,k]);if(!t)return null;const ge=n.rgba?`#${n.rgba.slice(0,6)}`:"#808080";return a.jsxs(a.Fragment,{children:[a.jsxs("div",{className:"fixed inset-0 z-[60] bg-bambu-dark flex flex-col",children:[a.jsxs("div",{className:"flex items-center justify-between px-5 py-3 border-b border-zinc-800 shrink-0",children:[a.jsxs("div",{className:"flex items-center gap-3 min-w-0",children:[a.jsx("div",{className:"w-7 h-7 rounded-full shrink-0",style:{backgroundColor:ge}}),a.jsx("div",{className:"min-w-0",children:a.jsxs("h2",{className:"text-sm font-semibold text-zinc-100 truncate",children:[i("spoolbuddy.modal.assignToAmsTitle","Assign to AMS"),a.jsxs("span",{className:"font-normal text-zinc-500 ml-2",children:[n.color_name||"Unknown"," • ",n.brand," ",n.material,n.subtype&&` ${n.subtype}`]})]})})]}),a.jsx("button",{onClick:e,disabled:ee,className:"p-2 rounded-lg text-zinc-500 hover:text-zinc-300 hover:bg-zinc-800 transition-colors shrink-0 disabled:opacity-50",children:a.jsx(Ht,{className:"w-5 h-5"})})]}),o&&a.jsxs("div",{className:`mx-5 mt-3 p-3 rounded-lg flex items-center gap-3 border shrink-0 ${c==="info"?"bg-blue-500/10 border-blue-500/40":c==="success"?"bg-green-500/10 border-green-500/40":"bg-red-500/10 border-red-500/40"}`,children:[c==="info"&&a.jsx(dt,{className:"w-4 h-4 text-blue-400 animate-spin shrink-0"}),c==="success"&&a.jsx(br,{className:"w-4 h-4 text-green-400 shrink-0"}),c==="error"&&a.jsx(Ka,{className:"w-4 h-4 text-red-400 shrink-0"}),a.jsx("span",{className:`text-sm ${c==="info"?"text-blue-300":c==="success"?"text-green-300":"text-red-300"}`,children:o})]}),a.jsx("div",{className:"flex-1 flex flex-col gap-3 p-4 min-h-0 overflow-y-auto",children:!T&&r?a.jsx("div",{className:"flex-1 flex items-center justify-center",children:a.jsx("div",{className:"text-center text-white/50",children:a.jsx("p",{className:"text-lg mb-2",children:i("spoolbuddy.ams.printerDisconnected","Printer disconnected")})})}):A.length===0&&$.length===0?a.jsx("div",{className:"flex-1 flex items-center justify-center",children:a.jsxs("div",{className:"text-center text-white/50",children:[a.jsx(na,{className:"w-12 h-12 mx-auto mb-3 opacity-50"}),a.jsx("p",{className:"text-lg mb-2",children:i("spoolbuddy.ams.noData","No AMS detected")}),a.jsx("p",{className:"text-sm",children:i("spoolbuddy.ams.connectAms","Connect an AMS to see filament slots")})]})}):a.jsxs(a.Fragment,{children:[C.length>0&&a.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3 flex-1 min-h-0",children:C.map(Ne=>a.jsx(Fle,{unit:Ne,activeSlot:null,onConfigureSlot:(B,W)=>Y(Ne.id,W),isDualNozzle:I,nozzleSide:re(Ne.id),thresholds:M,fillOverrides:k},Ne.id))}),se.length>0&&a.jsx("div",{className:"flex gap-2 shrink-0",children:se.map(({key:Ne,label:B,amsId:W,trayId:D,tray:j,isEmpty:z,nozzleSide:K,effectiveFill:q})=>{const ce=jrt(j.tray_color);return a.jsxs("div",{onClick:()=>Y(W,D),className:`bg-bambu-dark-secondary rounded-lg px-3 py-2 cursor-pointer hover:bg-bambu-dark-secondary/80 transition-all flex items-center gap-2 ${ee?"opacity-50 pointer-events-none":""}`,children:[a.jsx("div",{className:"relative w-10 h-10 shrink-0",children:z?a.jsx("div",{className:"w-full h-full rounded-full border-2 border-dashed border-gray-500 flex items-center justify-center",children:a.jsx("div",{className:"w-1.5 h-1.5 rounded-full bg-gray-600"})}):a.jsxs("svg",{viewBox:"0 0 56 56",className:"w-full h-full",children:[a.jsx("circle",{cx:"28",cy:"28",r:"26",fill:ce}),a.jsx("circle",{cx:"28",cy:"28",r:"20",fill:ce,style:{filter:"brightness(0.85)"}}),a.jsx("ellipse",{cx:"20",cy:"20",rx:"6",ry:"4",fill:"white",opacity:"0.3"}),a.jsx("circle",{cx:"28",cy:"28",r:"8",fill:"#2d2d2d"}),a.jsx("circle",{cx:"28",cy:"28",r:"5",fill:"#1a1a1a"})]})}),a.jsxs("div",{className:"min-w-0",children:[a.jsxs("div",{className:"flex items-center gap-1",children:[a.jsx("span",{className:"text-xs text-white/50 font-medium",children:B}),K&&a.jsx(Kz,{side:K})]}),a.jsx("div",{className:"text-sm text-white/80 truncate",children:z?"Empty":j.tray_type||"?"})]}),!z&&q!=null&&q>=0&&a.jsx("div",{className:"w-1.5 h-8 bg-bambu-dark-tertiary rounded-full overflow-hidden shrink-0 flex flex-col-reverse",children:a.jsx("div",{className:"w-full rounded-full",style:{height:`${q}%`,backgroundColor:hx(q)}})})]},Ne)})})]})}),a.jsx("div",{className:"flex justify-end gap-3 px-5 py-3 border-t border-zinc-800 shrink-0",children:a.jsx("button",{onClick:e,disabled:ee,className:"px-5 py-2.5 rounded-lg text-sm font-medium bg-zinc-800 text-zinc-300 hover:bg-zinc-700 transition-colors min-h-[44px] disabled:opacity-50",children:c==="success"?i("spoolbuddy.dashboard.close","Close"):i("spoolbuddy.modal.cancel","Cancel")})})]}),u&&p&&(()=>{let Ne="";return p.type==="material"?Ne=i("inventory.assignMismatchMessage",{spoolMaterial:p.spoolMaterial,trayMaterial:p.trayMaterial,location:p.location}):p.type==="partial"?Ne=i("inventory.assignPartialMismatchMessage",{spoolMaterial:p.spoolMaterial,trayMaterial:p.trayMaterial,location:p.location}):p.type==="material_profile"?Ne=`${i("inventory.assignMismatchMessage",{spoolMaterial:p.spoolMaterial,trayMaterial:p.trayMaterial,location:p.location})} ${i("inventory.assignProfileMismatchMessage",{spoolProfile:p.spoolProfile||i("common.unknown"),trayProfile:p.trayProfile||i("common.unknown"),location:p.location})}`:p.type==="partial_profile"?Ne=`${i("inventory.assignPartialMismatchMessage",{spoolMaterial:p.spoolMaterial,trayMaterial:p.trayMaterial,location:p.location})} diff --git a/static/index.html b/static/index.html index c2171b3b6..c0108a697 100644 --- a/static/index.html +++ b/static/index.html @@ -23,7 +23,7 @@ - +