diff --git a/backend/app/api/routes/printers.py b/backend/app/api/routes/printers.py index 6073bb115..31e9ef23f 100644 --- a/backend/app/api/routes/printers.py +++ b/backend/app/api/routes/printers.py @@ -117,7 +117,10 @@ async def delete_printer( delete_archives: If True (default), delete all print archives for this printer. If False, keep archives but remove their printer association. """ + from sqlalchemy import delete as sql_delete + from backend.app.models.archive import PrintArchive + from backend.app.models.maintenance import MaintenanceHistory, PrinterMaintenance result = await db.execute(select(Printer).where(Printer.id == printer_id)) printer = result.scalar_one_or_none() @@ -132,6 +135,19 @@ async def delete_printer( await db.execute(update(PrintArchive).where(PrintArchive.printer_id == printer_id).values(printer_id=None)) + # Delete maintenance history and items for this printer + # (SQLite doesn't enforce FK cascades, so do it explicitly) + maintenance_ids = ( + (await db.execute(select(PrinterMaintenance.id).where(PrinterMaintenance.printer_id == printer_id))) + .scalars() + .all() + ) + if maintenance_ids: + await db.execute( + sql_delete(MaintenanceHistory).where(MaintenanceHistory.printer_maintenance_id.in_(maintenance_ids)) + ) + await db.execute(sql_delete(PrinterMaintenance).where(PrinterMaintenance.printer_id == printer_id)) + await db.delete(printer) await db.commit() diff --git a/frontend/src/pages/PrintersPage.tsx b/frontend/src/pages/PrintersPage.tsx index 637953589..bee68fb20 100644 --- a/frontend/src/pages/PrintersPage.tsx +++ b/frontend/src/pages/PrintersPage.tsx @@ -1034,6 +1034,7 @@ function PrinterCard({ onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['printers'] }); queryClient.invalidateQueries({ queryKey: ['archives'] }); + queryClient.invalidateQueries({ queryKey: ['maintenanceOverview'] }); }, }); @@ -3674,6 +3675,7 @@ export function PrintersPage() { mutationFn: api.createPrinter, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['printers'] }); + queryClient.invalidateQueries({ queryKey: ['maintenanceOverview'] }); setShowAddModal(false); }, }); diff --git a/static/assets/index-CLcf9MNg.js b/static/assets/index-BSqss_Fl.js similarity index 95% rename from static/assets/index-CLcf9MNg.js rename to static/assets/index-BSqss_Fl.js index d522fce2e..5b19c7c3e 100644 --- a/static/assets/index-CLcf9MNg.js +++ b/static/assets/index-BSqss_Fl.js @@ -74,7 +74,7 @@ Please change the parent to _e.linkSpool(f,n),onSuccess:()=>{i.invalidateQueries({queryKey:["unlinked-spools"]}),i.invalidateQueries({queryKey:["spoolman-status"]}),e()}});if(!t)return null;const d=()=>{a&&u.mutate(a)};return o.jsxs("div",{className:"fixed inset-0 z-50 flex items-center justify-center",children:[o.jsx("div",{className:"absolute inset-0 bg-black/60 backdrop-blur-sm",onClick:e}),o.jsxs("div",{className:"relative w-full max-w-md mx-4 bg-bambu-dark-secondary border border-bambu-dark-tertiary rounded-xl shadow-2xl",children:[o.jsxs("div",{className:"flex items-center justify-between p-4 border-b border-bambu-dark-tertiary",children:[o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx(Tp,{className:"w-5 h-5 text-bambu-green"}),o.jsx("h2",{className:"text-lg font-semibold text-white",children:"Link to Spoolman"})]}),o.jsx("button",{onClick:e,className:"p-1 text-bambu-gray hover:text-white rounded transition-colors",children:o.jsx(Wt,{className:"w-5 h-5"})})]}),o.jsxs("div",{className:"p-4 space-y-4",children:[r&&o.jsxs("div",{className:"p-3 bg-bambu-dark rounded-lg border border-bambu-dark-tertiary",children:[o.jsx("p",{className:"text-xs text-bambu-gray mb-1",children:"Linking AMS tray:"}),o.jsxs("div",{className:"flex items-center gap-2",children:[r.color&&o.jsx("span",{className:"w-4 h-4 rounded-full border border-white/20",style:{backgroundColor:`#${r.color}`}}),o.jsx("span",{className:"text-white font-medium",children:r.type}),o.jsxs("span",{className:"text-bambu-gray",children:["(",r.location,")"]})]})]}),o.jsxs("div",{className:"p-3 bg-bambu-dark rounded-lg border border-bambu-dark-tertiary",children:[o.jsx("p",{className:"text-xs text-bambu-gray mb-1",children:"Spool UUID:"}),o.jsx("code",{className:"text-xs text-bambu-green font-mono break-all",children:n})]}),o.jsxs("div",{children:[o.jsx("p",{className:"text-sm text-bambu-gray mb-2",children:"Select a Spoolman spool to link:"}),c?o.jsx("div",{className:"flex justify-center py-8",children:o.jsx(xt,{className:"w-6 h-6 text-bambu-green animate-spin"})}):l&&l.length>0?o.jsx("div",{className:"max-h-64 overflow-y-auto space-y-2",children:l.map(f=>o.jsx("button",{onClick:()=>s(f.id),className:`w-full p-3 rounded-lg border text-left transition-colors ${a===f.id?"bg-bambu-green/20 border-bambu-green":"bg-bambu-dark border-bambu-dark-tertiary hover:border-bambu-gray"}`,children:o.jsxs("div",{className:"flex items-center gap-2",children:[f.filament_color_hex&&o.jsx("span",{className:"w-4 h-4 rounded-full border border-white/20 flex-shrink-0",style:{backgroundColor:`#${f.filament_color_hex}`}}),o.jsxs("div",{className:"flex-1 min-w-0",children:[o.jsx("p",{className:"text-white font-medium truncate",children:f.filament_name||"Unknown filament"}),o.jsxs("p",{className:"text-xs text-bambu-gray",children:[f.filament_material||"Unknown",f.remaining_weight!==null&&` - ${Math.round(f.remaining_weight)}g`,f.location&&` - ${f.location}`]})]}),a===f.id&&o.jsx(go,{className:"w-4 h-4 text-bambu-green flex-shrink-0"})]})},f.id))}):o.jsxs("div",{className:"text-center py-8 text-bambu-gray",children:[o.jsx("p",{children:"No unlinked spools found in Spoolman."}),o.jsx("p",{className:"text-xs mt-1",children:"All spools are already linked to AMS trays."})]})]})]}),o.jsxs("div",{className:"flex justify-end gap-2 p-4 border-t border-bambu-dark-tertiary",children:[o.jsx(Pe,{variant:"secondary",onClick:e,children:"Cancel"}),o.jsx(Pe,{onClick:d,disabled:!a||u.isPending,children:u.isPending?o.jsxs(o.Fragment,{children:[o.jsx(xt,{className:"w-4 h-4 animate-spin"}),"Linking..."]}):o.jsxs(o.Fragment,{children:[o.jsx(Tp,{className:"w-4 h-4"}),"Link Spool"]})})]}),u.isError&&o.jsx("div",{className:"mx-4 mb-4 p-2 bg-red-500/20 border border-red-500/50 rounded text-sm text-red-400",children:u.error.message})]})]})}const sH=({className:t})=>o.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:t,children:[o.jsx("rect",{x:"2",y:"15",width:"5",height:"5",rx:"0.5"}),o.jsx("rect",{x:"9.5",y:"15",width:"5",height:"5",rx:"0.5",fill:"currentColor",opacity:"0.3"}),o.jsx("rect",{x:"17",y:"15",width:"5",height:"5",rx:"0.5"}),o.jsx("path",{d:"M4 12 C4 6, 14 6, 14 12"}),o.jsx("polyline",{points:"12,10 14,12 12,14"})]}),oH={"A00-W1":"Jade White","A00-P0":"Beige","A00-D2":"Light Gray","A00-Y0":"Yellow","A00-Y2":"Sunflower Yellow","A00-A1":"Pumpkin Orange","A00-A0":"Orange","A00-Y4":"Gold","A00-G3":"Bright Green","A00-G1":"Bambu Green","A00-G2":"Mistletoe Green","A00-R3":"Hot Pink","A00-P6":"Magenta","A00-R0":"Red","A00-R2":"Maroon Red","A00-P5":"Purple","A00-P2":"Indigo Purple","A00-B5":"Turquoise","A00-B8":"Cyan","A00-B3":"Cobalt Blue","A00-N0":"Brown","A00-N1":"Cocoa Brown","A00-Y3":"Bronze","A00-D0":"Gray","A00-D1":"Silver","A00-B1":"Blue Grey","A00-D3":"Dark Gray","A00-K0":"Black","A00-M3":"Pink Citrus","A00-M6":"Dusk Glare","A00-M0":"Arctic Whisper","A00-M1":"Solar Breeze","A00-M5":"Blueberry Bubblegum","A00-M4":"Mint Lime","A00-M2":"Ocean to Meadow","A00-M7":"Cotton Candy Cloud","A18-K0":"Black","A18-D0":"Gray","A18-W0":"White","A18-R0":"Red","A18-Y0":"Yellow","A18-B0":"Cyan","A18-B1":"Blue","A18-P0":"Matte Beige","A01-W2":"Ivory White","A01-W3":"Bone White","A01-Y2":"Lemon Yellow","A01-A2":"Mandarin Orange","A01-P3":"Sakura Pink","A01-P4":"Lilac Purple","A01-R3":"Plum","A01-R1":"Scarlet Red","A01-R4":"Dark Red","A01-G0":"Apple Green","A01-G1":"Grass Green","A01-G7":"Dark Green","A01-B4":"Ice Blue","A01-B0":"Sky Blue","A01-B3":"Marine Blue","A01-B6":"Dark Blue","A01-Y3":"Desert Tan","A01-N1":"Latte Brown","A01-N3":"Caramel","A01-R2":"Terracotta","A01-N2":"Dark Brown","A01-N0":"Dark Chocolate","A01-D3":"Ash Gray","A01-D0":"Nardo Gray","A01-K1":"Charcoal","A12-G0":"Green","A12-R0":"Pink","A12-A0":"Orange","A12-Y0":"Yellow","A12-B0":"Blue","A07-R5":"Red Granite","A07-D4":"White Marble","A11-W0":"White","A11-K0":"Black","A08-G3":"Alpine Green Sparkle","A08-D5":"Slate Gray Sparkle","A08-B7":"Royal Purple Sparkle","A08-R2":"Crimson Red Sparkle","A08-K2":"Onyx Black Sparkle","A08-Y1":"Classic Gold Sparkle","A02-B2":"Cobalt Blue Metallic","A02-G2":"Oxide Green Metallic","A02-Y1":"Iridium Gold Metallic","A02-D2":"Iron Gray Metallic","A17-B1":"Blue","A17-A0":"Orange","A17-P0":"Purple","A06-Y1":"Gold","A06-D0":"Titan Gray","A06-D1":"Silver","A06-W0":"White","A06-R0":"Candy Red","A06-G0":"Candy Green","A06-G1":"Mint","A06-B1":"Blue","A06-B0":"Baby Blue","A06-P0":"Purple","A06-R1":"Rose Gold","A06-R2":"Pink","A06-Y0":"Champagne","A05-M8":"Dawn Radiance","A05-M4":"Aurora Purple","A05-M1":"South Beach","A05-T3":"Neon City","A05-T2":"Midnight Blaze","A05-T1":"Gilded Rose","A05-T4":"Blue Hawaii","A05-T5":"Velvet Eclipse","A15-B0":"Purple","A15-G0":"Green","A15-G1":"Nebulae","A15-R0":"Brown","A16-K0":"Black Walnut","A16-R0":"Rosewood","A16-N0":"Clay Brown","A16-G0":"Classic Birch","A16-W0":"White Oak","A16-Y0":"Ochre Yellow","A50-D6":"Lava Gray","A50-K0":"Black","A50-B6":"Royal Blue","A10-W0":"White","A10-D0":"Gray","A09-B5":"Lavender Blue","A09-B4":"Light Blue","A09-A0":"Orange","A09-D1":"Silver","A09-R3":"Vermilion Red","A09-Y0":"Yellow","G02-K0":"Black","G02-W0":"White","G02-R0":"Red","G02-D0":"Gray","G02-D1":"Dark Gray","G02-Y1":"Cream","G02-Y0":"Yellow","G02-A0":"Orange","G02-N1":"Peanut Brown","G02-G1":"Lime Green","G02-G0":"Green","G02-G2":"Forest Green","G02-B1":"Lake Blue","G02-B0":"Blue","G01-G1":"Translucent Teal","G01-B0":"Translucent Light Blue","G01-C0":"Clear","G01-D0":"Translucent Gray","G01-G0":"Translucent Olive","G01-N0":"Translucent Brown","G01-A0":"Translucent Orange","G01-P1":"Translucent Pink","G01-P0":"Translucent Purple","G50-P7":"Violet Purple","G50-K0":"Black","B00-D1":"Silver","B00-K0":"Black","B00-W0":"White","B00-G6":"Bambu Green","B00-G7":"Olive","B00-Y1":"Tangerine Yellow","B00-A0":"Orange","B00-R0":"Red","B00-B4":"Azure","B00-B0":"Blue","B00-B6":"Navy Blue","B50-A0":"Orange","B50-K0":"Black","B01-W0":"White","B01-K0":"Black","B01-D0":"Gray","B02-W0":"White","C00-C1":"Transparent","C00-C0":"Clear Black","C00-K0":"Black","C00-W0":"White","C01-K0":"Black","U02-B0":"Blue","U02-D0":"Gray","U02-K0":"Black","N04-K0":"Black","N08-K0":"Black","S02-W0":"Nature","S02-W1":"White","S05-C0":"Black","S06-W0":"White","S03-G1":"Green","S04-Y0":"Clear"},rCe={W0:"White",W1:"Jade White",W2:"Ivory White",W3:"Bone White",Y0:"Yellow",Y1:"Gold",Y2:"Sunflower Yellow",Y3:"Bronze",Y4:"Gold",A0:"Orange",A1:"Pumpkin Orange",A2:"Mandarin Orange",R0:"Red",R1:"Scarlet Red",R2:"Maroon Red",R3:"Hot Pink",R4:"Dark Red",R5:"Red Granite",P0:"Beige",P1:"Pink",P2:"Indigo Purple",P3:"Sakura Pink",P4:"Lilac Purple",P5:"Purple",P6:"Magenta",P7:"Violet Purple",B0:"Blue",B1:"Blue Grey",B2:"Cobalt Blue",B3:"Cobalt Blue",B4:"Ice Blue",B5:"Turquoise",B6:"Navy Blue",B7:"Royal Purple",B8:"Cyan",G0:"Green",G1:"Grass Green",G2:"Mistletoe Green",G3:"Bright Green",G6:"Bambu Green",G7:"Dark Green",N0:"Brown",N1:"Peanut Brown",N2:"Dark Brown",N3:"Caramel",D0:"Gray",D1:"Silver",D2:"Light Gray",D3:"Dark Gray",D4:"White Marble",D5:"Slate Gray",D6:"Lava Gray",K0:"Black",K1:"Charcoal",K2:"Onyx Black",C0:"Clear Black",C1:"Transparent",M0:"Arctic Whisper",M1:"Solar Breeze",M2:"Ocean to Meadow",M3:"Pink Citrus",M4:"Aurora Purple",M5:"Blueberry Bubblegum",M6:"Dusk Glare",M7:"Cotton Candy Cloud",M8:"Dawn Radiance",T1:"Gilded Rose",T2:"Midnight Blaze",T3:"Neon City",T4:"Blue Hawaii",T5:"Velvet Eclipse"};function PN(t){if(!t)return null;if(oH[t])return oH[t];const e=t.split("-");if(e.length<2)return null;const n=e[1];return rCe[n]||null}function jN(t){if(!t||t.length<6)return"Unknown";const e=parseInt(t.substring(0,2),16),n=parseInt(t.substring(2,4),16),r=parseInt(t.substring(4,6),16),i=Math.max(e,n,r)/255,a=Math.min(e,n,r)/255,s=(i+a)/2;let l=0,c=0;if(i!==a){const u=i-a;c=s>.5?u/(2-i-a):u/(i+a);const d=e/255,f=n/255,g=r/255;i===d?l=((f-g)/u+(f.85?"White":c<.15?s<.4?"Dark Gray":s>.6?"Light Gray":"Gray":l<15||l>=345?"Red":l<45?"Orange":l<70?"Yellow":l<150?"Green":l<200?"Cyan":l<260?"Blue":l<290?"Purple":l<345?"Pink":"Unknown"}function RN(t){return(t??.02).toFixed(3)}function lH({side:t}){const{mode:e}=og(),n=e==="dark"?"#1a4d2e":"#e7f5e9";return o.jsx("span",{className:"inline-flex items-center justify-center w-4 h-4 text-[10px] font-bold rounded",style:{backgroundColor:n,color:"#00ae42"},children:t})}function cH({className:t}){return o.jsx("svg",{className:t,viewBox:"0 0 36 54",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:o.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 iCe({className:t}){return o.jsxs("svg",{className:t,viewBox:"0 0 35 53",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[o.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"}),o.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 aCe({className:t}){return o.jsxs("svg",{className:t,viewBox:"0 0 36 54",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[o.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"}),o.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 sCe({className:t}){return o.jsxs("svg",{className:t,viewBox:"0 0 12 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[o.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"}),o.jsx("circle",{cx:"6",cy:"15",r:"2.5",stroke:"#C3C2C1",strokeWidth:"1",fill:"none"})]})}function oCe({className:t}){return o.jsxs("svg",{className:t,viewBox:"0 0 12 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[o.jsx("rect",{x:"4.5",y:"8",width:"3",height:"4.5",fill:"#d4a017",rx:"0.5"}),o.jsx("circle",{cx:"6",cy:"15",r:"2",fill:"#d4a017"}),o.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 lCe({className:t}){return o.jsxs("svg",{className:t,viewBox:"0 0 12 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[o.jsx("rect",{x:"4.5",y:"3",width:"3",height:"9.5",fill:"#c62828",rx:"0.5"}),o.jsx("circle",{cx:"6",cy:"15",r:"2",fill:"#c62828"}),o.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 DN({className:t,color:e,isHeating:n}){const i={"text-orange-400":"#fb923c","text-blue-400":"#60a5fa","text-green-400":"#4ade80"}[e]||"#888",a=n?{filter:`drop-shadow(0 0 4px ${i}) drop-shadow(0 0 8px ${i})`}:{};return n?o.jsxs("svg",{className:t,style:a,viewBox:"0 0 12 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[o.jsx("rect",{x:"4.5",y:"3",width:"3",height:"9.5",fill:i,rx:"0.5"}),o.jsx("circle",{cx:"6",cy:"15",r:"2",fill:i}),o.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:i,strokeWidth:"1",fill:"none"})]}):o.jsxs("svg",{className:t,viewBox:"0 0 12 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[o.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:i,strokeWidth:"1",fill:"none"}),o.jsx("circle",{cx:"6",cy:"15",r:"2.5",stroke:i,strokeWidth:"1",fill:"none"})]})}function uH({humidity:t,goodThreshold:e=40,fairThreshold:n=60,onClick:r,compact:i}){const a=typeof t=="string"?parseInt(t,10):t,s=typeof e=="number"?e:40,l=typeof n=="number"?n:60;let c,u;isNaN(a)?(c="#C3C2C1",u="Unknown"):a<=s?(c="#22a352",u="Good"):a<=l?(c="#d4a017",u="Fair"):(c="#c62828",u="Bad");let d;return isNaN(a)||a<=s?d=cH:a<=l?d=iCe:d=aCe,o.jsxs("button",{type:"button",onClick:r,className:`flex items-center gap-1 ${r?"cursor-pointer hover:opacity-80 transition-opacity":""}`,title:`Humidity: ${a}% - ${u}${r?" (click for history)":""}`,children:[o.jsx(d,{className:i?"w-2.5 h-3":"w-3 h-4"}),o.jsxs("span",{className:`font-medium tabular-nums ${i?"text-[10px]":"text-xs"}`,style:{color:c},children:[a,"%"]})]})}function dH({temp:t,goodThreshold:e=28,fairThreshold:n=35,onClick:r,compact:i}){const a=typeof e=="number"?e:28,s=typeof n=="number"?n:35;let l,c,u;return t<=a?(l="#22a352",c="Good",u=sCe):t<=s?(l="#d4a017",c="Fair",u=oCe):(l="#c62828",c="Bad",u=lCe),o.jsxs("button",{type:"button",onClick:r,className:`flex items-center gap-1 ${r?"cursor-pointer hover:opacity-80 transition-opacity":""}`,title:`Temperature: ${t}°C - ${c}${r?" (click for history)":""}`,children:[o.jsx(u,{className:i?"w-2.5 h-3":"w-3 h-4"}),o.jsxs("span",{className:`tabular-nums text-right ${i?"text-[10px] w-8":"w-12"}`,style:{color:l},children:[t,"°C"]})]})}function Au(t,e){const n=typeof t=="string"?parseInt(t,10):t,r=isNaN(n)?0:n,i=e===1,a=r>=128?r-128:r,s=String.fromCharCode(65+a);return i?`HT-${s}`:`AMS-${s}`}function hH(t){return t>50?"#00ae42":t>=15?"#f59e0b":"#ef4444"}function cCe(t){const e=Math.floor(t/3600),n=Math.floor(t%3600/60);return e>0?`${e}h ${n}m`:`${n}m`}function uCe(t){const e=new Date,n=new Date(e.getTime()+t*60*1e3),r=new Date;r.setHours(0,0,0,0);const i=new Date(n);i.setHours(0,0,0,0);const a=n.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),s=Math.floor((i.getTime()-r.getTime())/(1e3*60*60*24));return s===0?a:s===1?`Tomorrow ${a}`:n.toLocaleDateString([],{weekday:"short"})+" "+a}function dCe(t){if(!t)return"/img/printers/default.png";const e=t.toLowerCase().replace(/\s+/g,"");return e.includes("x1e")?"/img/printers/x1e.png":e.includes("x1c")||e.includes("x1carbon")||e.includes("x1")?"/img/printers/x1c.png":e.includes("h2d")||e.includes("h2c")||e.includes("h2s")?"/img/printers/h2d.png":e.includes("p2s")||e.includes("p1s")?"/img/printers/p1s.png":e.includes("p1p")?"/img/printers/p1p.png":e.includes("a1mini")?"/img/printers/a1mini.png":e.includes("a1")?"/img/printers/a1.png":"/img/printers/default.png"}function hCe(t){return t==null?{label:"",color:"text-bambu-gray",bars:0}:t>=-50?{label:"Excellent",color:"text-bambu-green",bars:4}:t>=-60?{label:"Good",color:"text-bambu-green",bars:3}:t>=-70?{label:"Fair",color:"text-yellow-400",bars:2}:t>=-80?{label:"Weak",color:"text-orange-400",bars:1}:{label:"Very weak",color:"text-red-400",bars:1}}function fCe({url:t,printName:e}){const[n,r]=S.useState(!1),[i,a]=S.useState(!1),[s,l]=S.useState(!1);return o.jsxs(o.Fragment,{children:[o.jsx("div",{className:`w-20 h-20 flex-shrink-0 rounded-lg overflow-hidden bg-bambu-dark-tertiary flex items-center justify-center ${t&&n?"cursor-pointer":""}`,onClick:()=>t&&n&&l(!0),children:t&&!i?o.jsxs(o.Fragment,{children:[o.jsx("img",{src:t,alt:"Print preview",className:`w-full h-full object-cover ${n?"block":"hidden"}`,onLoad:()=>r(!0),onError:()=>a(!0)}),!n&&o.jsx(bd,{className:"w-8 h-8 text-bambu-gray"})]}):o.jsx(bd,{className:"w-8 h-8 text-bambu-gray"})}),s&&t&&o.jsx("div",{className:"fixed inset-0 bg-black/80 flex items-center justify-center z-50 p-8",onClick:()=>l(!1),children:o.jsxs("div",{className:"relative max-w-2xl max-h-full",children:[o.jsx("img",{src:t,alt:"Print preview",className:"max-w-full max-h-[80vh] rounded-lg shadow-2xl"}),e&&o.jsx("p",{className:"text-white text-center mt-4 text-lg",children:e})]})})]})}function mCe({printers:t}){const e=dn(),n=S.useMemo(()=>{let i=0,a=0,s=0,l=0;return t?.forEach(c=>{const u=e.getQueryData(["printerStatus",c.id]);u===void 0?l++:u.connected?u.state==="RUNNING"?i++:a++:s++}),{printing:i,idle:a,offline:s,loading:l,total:t?.length||0}},[t,e]),[,r]=S.useState(0);return S.useEffect(()=>{let i=!1;const a=e.getQueryCache().subscribe(()=>{i||(i=!0,requestAnimationFrame(()=>{r(s=>s+1),i=!1}))});return()=>a()},[e]),t?.length?o.jsxs("div",{className:"flex items-center gap-4 text-sm",children:[n.printing>0&&o.jsxs("div",{className:"flex items-center gap-1.5",children:[o.jsx("div",{className:"w-2 h-2 rounded-full bg-bambu-green animate-pulse"}),o.jsxs("span",{className:"text-bambu-gray",children:[o.jsx("span",{className:"text-white font-medium",children:n.printing})," printing"]})]}),n.idle>0&&o.jsxs("div",{className:"flex items-center gap-1.5",children:[o.jsx("div",{className:"w-2 h-2 rounded-full bg-blue-400"}),o.jsxs("span",{className:"text-bambu-gray",children:[o.jsx("span",{className:"text-white font-medium",children:n.idle})," idle"]})]}),n.offline>0&&o.jsxs("div",{className:"flex items-center gap-1.5",children:[o.jsx("div",{className:"w-2 h-2 rounded-full bg-gray-400"}),o.jsxs("span",{className:"text-bambu-gray",children:[o.jsx("span",{className:"text-white font-medium",children:n.offline})," offline"]})]})]}):null}function fH(t,e){if(e)return e;switch(t){case"RUNNING":return"Printing";case"PAUSE":return"Paused";case"FINISH":return"Finished";case"FAILED":return"Failed";case"IDLE":return"Idle";default:return t?t.charAt(0)+t.slice(1).toLowerCase():"Idle"}}function mH({printer:t,hideIfDisconnected:e,maintenanceInfo:n,viewMode:r="expanded",cardSize:i=2,amsThresholds:a,spoolmanEnabled:s=!1,hasUnlinkedSpools:l=!1}){const c=dn(),u=Eb(),{showToast:d}=vr(),[f,g]=S.useState(!1),[p,b]=S.useState(!1),[v,x]=S.useState(!0),[y,E]=S.useState(!1),[w,A]=S.useState(!1),[T,C]=S.useState(!1),[N,O]=S.useState(!1),[k,j]=S.useState(!1),[z,I]=S.useState(!1),[q,R]=S.useState(!1),[W,K]=S.useState(!1),[G,J]=S.useState(!1),[ee,Z]=S.useState(!1),[F,V]=S.useState(null),[ne,le]=S.useState(null),[oe,pe]=S.useState(!1),{data:Q}=pt({queryKey:["printerStatus",t.id],queryFn:()=>_e.getPrinterStatus(t.id),refetchInterval:3e4}),{data:Ee}=pt({queryKey:["firmwareUpdate",t.id],queryFn:()=>m1.checkPrinterUpdate(t.id),staleTime:300*1e3,refetchInterval:300*1e3}),he=S.useMemo(()=>{const bt=new Set;if(Q?.ams)for(const Ht of Q.ams)for(const an of Ht.tray||[])an.tray_info_idx&&bt.add(an.tray_info_idx);return Q?.vt_tray?.tray_info_idx&&bt.add(Q.vt_tray.tray_info_idx),Array.from(bt)},[Q?.ams,Q?.vt_tray]),{data:ue}=pt({queryKey:["filamentInfo",he],queryFn:()=>_e.getFilamentInfo(he),enabled:he.length>0,staleTime:300*1e3}),[Ae,fe]=S.useState(null);S.useEffect(()=>{Q?.wifi_signal!=null&&fe(Q.wifi_signal)},[Q?.wifi_signal]);const at=Q?.wifi_signal??Ae,B=S.useRef(void 0);S.useEffect(()=>{Q?.connected!==void 0&&(B.current=Q.connected)},[Q?.connected]);const $=Q?.connected??B.current,ie=S.useRef({});S.useEffect(()=>{Q?.ams_extruder_map&&Object.keys(Q.ams_extruder_map).length>0&&(ie.current=Q.ams_extruder_map)},[Q?.ams_extruder_map]);const H=Q?.ams_extruder_map&&Object.keys(Q.ams_extruder_map).length>0?Q.ams_extruder_map:ie.current,Y=S.useRef([]);S.useEffect(()=>{Q?.ams&&Q.ams.length>0&&(Y.current=Q.ams)},[Q?.ams]);const se=Q?.ams&&Q.ams.length>0?Q.ams:Y.current,ve=S.useRef(255),Ne=Q?.tray_now;Ne!==void 0&&Ne!==255&&(ve.current=Ne);const Se=Ne===void 0||Ne===255?ve.current:Ne,{data:U}=pt({queryKey:["smartPlugByPrinter",t.id],queryFn:()=>_e.getSmartPlugByPrinter(t.id)}),{data:L}=pt({queryKey:["smartPlugStatus",U?.id],queryFn:()=>U?_e.getSmartPlugStatus(U.id):null,enabled:!!U,refetchInterval:1e4}),{data:te}=pt({queryKey:["queue",t.id,"pending"],queryFn:()=>_e.getQueue(t.id,"pending")}),ye=te?.length||0,{data:Me}=pt({queryKey:["archives",t.id,"last"],queryFn:()=>_e.getArchives(t.id,1,0),enabled:Q?.connected&&Q?.state!=="RUNNING"}),be=Me?.[0],qe=e&&$===!1,Ve=_t({mutationFn:bt=>_e.deletePrinter(t.id,bt.deleteArchives),onSuccess:()=>{c.invalidateQueries({queryKey:["printers"]}),c.invalidateQueries({queryKey:["archives"]})}}),We=_t({mutationFn:()=>_e.connectPrinter(t.id),onSuccess:()=>{c.invalidateQueries({queryKey:["printerStatus",t.id]})}}),lt=_t({mutationFn:bt=>U?_e.controlSmartPlug(U.id,bt):Promise.reject("No plug"),onSuccess:()=>{c.invalidateQueries({queryKey:["smartPlugStatus",U?.id]})}}),me=_t({mutationFn:bt=>U?_e.updateSmartPlug(U.id,{auto_off:bt}):Promise.reject("No plug"),onSuccess:()=>{c.invalidateQueries({queryKey:["smartPlugByPrinter",t.id]}),c.invalidateQueries({queryKey:["smart-plugs"]})}}),ae=_t({mutationFn:()=>_e.stopPrint(t.id),onSuccess:()=>{d("Print stopped"),c.invalidateQueries({queryKey:["printerStatus",t.id]})},onError:bt=>d(bt.message||"Failed to stop print","error")}),He=_t({mutationFn:()=>_e.pausePrint(t.id),onSuccess:()=>{d("Print paused"),c.invalidateQueries({queryKey:["printerStatus",t.id]})},onError:bt=>d(bt.message||"Failed to pause print","error")}),Be=_t({mutationFn:()=>_e.resumePrint(t.id),onSuccess:()=>{d("Print resumed"),c.invalidateQueries({queryKey:["printerStatus",t.id]})},onError:bt=>d(bt.message||"Failed to resume print","error")}),Ye=(Q?.state==="RUNNING"||Q?.state==="PAUSE"||Q?.state==="PAUSED")&&(Q?.printable_objects_count??0)>=2,{data:ot,refetch:ge}=pt({queryKey:["printableObjects",t.id],queryFn:()=>_e.getPrintableObjects(t.id),enabled:ee||Ye,refetchInterval:ee?5e3:Ye?3e4:!1}),nt=_t({mutationFn:bt=>_e.skipObjects(t.id,bt),onSuccess:bt=>{d(bt.message||"Objects skipped"),ge()},onError:bt=>d(bt.message||"Failed to skip objects","error")}),[xe,ze]=S.useState(null),Re=S.useRef(!1),we=S.useRef(null),Ke=S.useRef(!1),ft=_t({mutationFn:({amsId:bt,slotId:Ht})=>_e.refreshAmsSlot(t.id,bt,Ht),onMutate:({amsId:bt,slotId:Ht})=>{we.current&&clearTimeout(we.current),Re.current=!1,Ke.current=!1,ze({amsId:bt,slotId:Ht}),setTimeout(()=>{Ke.current=!0},2e3),we.current=setTimeout(()=>{ze(null)},3e4)},onSuccess:bt=>{d(bt.message||"RFID re-read initiated")},onError:bt=>{d(bt.message||"Failed to re-read RFID","error"),we.current&&clearTimeout(we.current),ze(null)}}),Et=S.useRef(null);S.useEffect(()=>{if(!xe)return;const bt=Q?.ams_status_main??0;return bt!==0&&(Re.current=!0,Et.current&&(clearTimeout(Et.current),Et.current=null)),Re.current&&bt===0&&(Ke.current?(we.current&&clearTimeout(we.current),ze(null)):Et.current||(Et.current=setTimeout(()=>{we.current&&clearTimeout(we.current),ze(null)},2e3))),()=>{Et.current&&clearTimeout(Et.current)}},[Q?.ams_status_main,xe]);const[wt,Qt]=S.useState(null);if(qe)return null;const Ft=()=>{switch(i){case 1:return"w-10 h-10";case 2:return"w-14 h-14";case 3:return"w-16 h-16";case 4:return"w-20 h-20";default:return"w-14 h-14"}},hn=()=>{switch(i){case 1:return"text-base truncate";case 2:return"text-lg";case 3:return"text-xl";case 4:return"text-2xl";default:return"text-lg"}},Hn=()=>{switch(i){case 1:return"mb-2";case 2:return"mb-4";case 3:return"mb-5";case 4:return"mb-6";default:return"mb-4"}};return o.jsxs(At,{className:"relative",children:[o.jsxs(Tt,{className:i>=3?"p-5":"",children:[o.jsxs("div",{className:Hn(),children:[o.jsxs("div",{className:"flex items-start justify-between gap-2",children:[o.jsxs("div",{className:"flex items-center gap-3 min-w-0 flex-1",children:[o.jsx("img",{src:dCe(t.model),alt:t.model||"Printer",className:`object-contain rounded-lg bg-bambu-dark flex-shrink-0 ${Ft()}`}),o.jsxs("div",{className:"min-w-0 flex-1",children:[o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx("h3",{className:`font-semibold text-white ${hn()}`,children:t.name}),r==="compact"&&o.jsx("div",{className:`w-2 h-2 rounded-full flex-shrink-0 ${Q?.connected?"bg-bambu-green":"bg-red-500"}`,title:Q?.connected?"Connected":"Offline"})]}),o.jsxs("p",{className:"text-sm text-bambu-gray",children:[t.model||"Unknown Model",r==="expanded"&&Q?.nozzles&&Q.nozzles[0]?.nozzle_diameter&&o.jsxs("span",{className:"ml-1.5 text-bambu-gray",title:Q.nozzles[0].nozzle_type||"Nozzle",children:["• ",Q.nozzles[0].nozzle_diameter,"mm"]}),r==="expanded"&&n&&n.total_print_hours>0&&o.jsxs("span",{className:"ml-2 text-bambu-gray",children:[o.jsx(ur,{className:"w-3 h-3 inline-block mr-1"}),Math.round(n.total_print_hours),"h"]})]})]})]}),o.jsxs("div",{className:"relative flex-shrink-0",children:[o.jsx(Pe,{variant:"ghost",size:"sm",onClick:()=>g(!f),children:o.jsx(o0,{className:"w-4 h-4"})}),f&&o.jsxs("div",{className:"absolute right-0 mt-2 w-48 bg-bambu-dark-secondary border border-bambu-dark-tertiary rounded-lg shadow-lg z-10",children:[o.jsxs("button",{className:"w-full px-4 py-2 text-left text-sm hover:bg-bambu-dark-tertiary flex items-center gap-2",onClick:()=>{E(!0),g(!1)},children:[o.jsx(Bc,{className:"w-4 h-4"}),"Edit"]}),o.jsxs("button",{className:"w-full px-4 py-2 text-left text-sm hover:bg-bambu-dark-tertiary flex items-center gap-2",onClick:()=>{We.mutate(),g(!1)},children:[o.jsx(li,{className:"w-4 h-4"}),"Reconnect"]}),o.jsxs("button",{className:"w-full px-4 py-2 text-left text-sm hover:bg-bambu-dark-tertiary flex items-center gap-2",onClick:()=>{C(!0),g(!1)},children:[o.jsx(Y9,{className:"w-4 h-4"}),"MQTT Debug"]}),o.jsxs("button",{className:"w-full px-4 py-2 text-left text-sm text-red-400 hover:bg-bambu-dark-tertiary flex items-center gap-2",onClick:()=>{b(!0),g(!1)},children:[o.jsx(Rn,{className:"w-4 h-4"}),"Delete"]})]})]})]}),r==="expanded"&&o.jsxs("div",{className:"flex flex-wrap items-center gap-2 mt-2",children:[o.jsxs("span",{className:`flex items-center gap-1.5 px-2 py-1 rounded-full text-xs ${Q?.connected?"bg-bambu-green/20 text-bambu-green":"bg-red-500/20 text-red-400"}`,children:[Q?.connected?o.jsx(Cb,{className:"w-3 h-3"}):o.jsx(J9,{className:"w-3 h-3"}),Q?.connected?"Connected":"Offline"]}),Q?.connected&&at!=null&&o.jsxs("span",{className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs ${at>=-50||at>=-60?"bg-bambu-green/20 text-bambu-green":at>=-70?"bg-amber-500/20 text-amber-600":at>=-80?"bg-orange-500/20 text-orange-600":"bg-red-500/20 text-red-600"}`,title:`WiFi: ${at} dBm - ${hCe(at).label}`,children:[o.jsx(Kue,{className:"w-3 h-3"}),at,"dBm"]}),Q?.connected&&(()=>{const bt=Q.hms_errors?ahe(Q.hms_errors):[];return o.jsxs("button",{onClick:()=>I(!0),className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs cursor-pointer hover:opacity-80 transition-opacity ${bt.length>0?bt.some(Ht=>Ht.severity<=2)?"bg-red-500/20 text-red-400":"bg-orange-500/20 text-orange-400":"bg-bambu-green/20 text-bambu-green"}`,title:"Click to view HMS errors",children:[o.jsx(qn,{className:"w-3 h-3"}),bt.length>0?bt.length:"OK"]})})(),n&&o.jsxs("button",{onClick:()=>u("/maintenance"),className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs cursor-pointer hover:opacity-80 transition-opacity ${n.due_count>0?"bg-red-500/20 text-red-400":n.warning_count>0?"bg-orange-500/20 text-orange-400":"bg-bambu-green/20 text-bambu-green"}`,title:n.due_count>0||n.warning_count>0?`${n.due_count>0?`${n.due_count} maintenance due`:""}${n.due_count>0&&n.warning_count>0?", ":""}${n.warning_count>0?`${n.warning_count} due soon`:""} - Click to view`:"All maintenance up to date - Click to view",children:[o.jsx(_d,{className:"w-3 h-3"}),n.due_count>0||n.warning_count>0?n.due_count+n.warning_count:"OK"]}),ye>0&&o.jsxs("button",{onClick:()=>u("/queue"),className:"flex items-center gap-1 px-2 py-1 rounded-full text-xs bg-purple-500/20 text-purple-400 hover:opacity-80 transition-opacity",title:`${ye} print${ye>1?"s":""} in queue`,children:[o.jsx(vd,{className:"w-3 h-3"}),ye]}),Ee?.update_available&&o.jsxs("button",{onClick:()=>pe(!0),className:"flex items-center gap-1 px-2 py-1 rounded-full text-xs bg-orange-500/20 text-orange-400 hover:opacity-80 transition-opacity",title:`Firmware update available: ${Ee.current_version} → ${Ee.latest_version}`,children:[o.jsx(Wi,{className:"w-3 h-3"}),"Update"]})]})]}),p&&o.jsx("div",{className:"fixed inset-0 bg-black/50 flex items-center justify-center z-50",children:o.jsx(At,{className:"w-full max-w-md mx-4",children:o.jsxs(Tt,{children:[o.jsxs("div",{className:"flex items-start gap-3 mb-4",children:[o.jsx("div",{className:"p-2 rounded-full bg-red-500/20",children:o.jsx(qn,{className:"w-5 h-5 text-red-400"})}),o.jsxs("div",{children:[o.jsx("h3",{className:"text-lg font-semibold text-white",children:"Delete Printer"}),o.jsxs("p",{className:"text-sm text-bambu-gray mt-1",children:['Are you sure you want to delete "',t.name,'"? This will remove all connection settings.']})]})]}),o.jsx("div",{className:"bg-bambu-dark rounded-lg p-3 mb-4",children:o.jsxs("label",{className:"flex items-start gap-3 cursor-pointer",children:[o.jsx("input",{type:"checkbox",checked:v,onChange:bt=>x(bt.target.checked),className:"mt-0.5 w-4 h-4 rounded border-bambu-gray bg-bambu-dark-secondary text-bambu-green focus:ring-bambu-green focus:ring-offset-0"}),o.jsxs("div",{children:[o.jsx("span",{className:"text-sm text-white",children:"Delete print archives"}),o.jsx("p",{className:"text-xs text-bambu-gray mt-0.5",children:v?"All print history for this printer will be permanently deleted.":"Print history will be kept but no longer associated with this printer."})]})]})}),o.jsxs("div",{className:"flex justify-end gap-2",children:[o.jsx(Pe,{variant:"secondary",onClick:()=>{b(!1),x(!0)},children:"Cancel"}),o.jsx(Pe,{variant:"danger",onClick:()=>{Ve.mutate({deleteArchives:v}),b(!1),x(!0)},children:"Delete"})]})]})})}),Q?.connected&&o.jsxs(o.Fragment,{children:[r==="compact"?o.jsx("div",{className:"mt-2",children:Q.state==="RUNNING"?o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx("div",{className:"flex-1 bg-bambu-dark-tertiary rounded-full h-1.5",children:o.jsx("div",{className:"bg-bambu-green h-1.5 rounded-full transition-all",style:{width:`${Q.progress||0}%`}})}),o.jsxs("span",{className:"text-xs text-white",children:[Math.round(Q.progress||0),"%"]})]}):o.jsx("p",{className:"text-xs text-bambu-gray",children:fH(Q.state,Q.stg_cur_name)})}):o.jsxs(o.Fragment,{children:[o.jsxs("div",{className:"mb-4 p-3 bg-bambu-dark rounded-lg relative",children:[o.jsxs("button",{onClick:()=>Z(!0),disabled:!(Q.state==="RUNNING"||Q.state==="PAUSE"||Q.state==="PAUSED")||(Q.printable_objects_count??0)<2,className:`absolute top-2 right-2 p-1.5 rounded transition-colors z-10 ${(Q.state==="RUNNING"||Q.state==="PAUSE"||Q.state==="PAUSED")&&(Q.printable_objects_count??0)>=2?"text-bambu-gray hover:text-white hover:bg-white/10":"text-bambu-gray/30 cursor-not-allowed"}`,title:Q.state==="RUNNING"||Q.state==="PAUSE"||Q.state==="PAUSED"?(Q.printable_objects_count??0)>=2?"Skip objects":"Skip objects (requires 2+ objects)":"Skip objects (only while printing)",children:[o.jsx(sH,{className:"w-4 h-4"}),ot&&ot.skipped_count>0&&o.jsx("span",{className:"absolute -top-1 -right-1 min-w-[16px] h-4 px-1 flex items-center justify-center text-[10px] font-bold bg-red-500 text-white rounded-full",children:ot.skipped_count})]}),o.jsxs("div",{className:"flex gap-3",children:[o.jsx(fCe,{url:Q.state==="RUNNING"?Q.cover_url:null,printName:Q.state==="RUNNING"&&(Q.subtask_name||Q.current_print)||void 0}),o.jsx("div",{className:"flex-1 min-w-0",children:Q.current_print&&Q.state==="RUNNING"?o.jsxs(o.Fragment,{children:[o.jsx("p",{className:"text-sm text-bambu-gray mb-1",children:Q.stg_cur_name||"Printing"}),o.jsx("p",{className:"text-white text-sm mb-2 truncate",children:Q.subtask_name||Q.current_print}),o.jsxs("div",{className:"flex items-center justify-between text-sm",children:[o.jsx("div",{className:"flex-1 bg-bambu-dark-tertiary rounded-full h-2 mr-3",children:o.jsx("div",{className:"bg-bambu-green h-2 rounded-full transition-all",style:{width:`${Q.progress||0}%`}})}),o.jsxs("span",{className:"text-white",children:[Math.round(Q.progress||0),"%"]})]}),o.jsxs("div",{className:"flex items-center gap-3 mt-2 text-xs text-bambu-gray",children:[Q.remaining_time!=null&&Q.remaining_time>0&&o.jsxs(o.Fragment,{children:[o.jsxs("span",{className:"flex items-center gap-1",children:[o.jsx(ur,{className:"w-3 h-3"}),cCe(Q.remaining_time*60)]}),o.jsxs("span",{className:"text-bambu-green font-medium",title:"Estimated completion time",children:["ETA ",uCe(Q.remaining_time)]})]}),Q.layer_num!=null&&Q.total_layers!=null&&Q.total_layers>0&&o.jsxs("span",{className:"flex items-center gap-1",children:[o.jsx(vd,{className:"w-3 h-3"}),Q.layer_num,"/",Q.total_layers]})]})]}):o.jsxs(o.Fragment,{children:[o.jsx("p",{className:"text-sm text-bambu-gray mb-1",children:"Status"}),o.jsx("p",{className:"text-white text-sm mb-2",children:fH(Q.state,Q.stg_cur_name)}),o.jsxs("div",{className:"flex items-center justify-between text-sm",children:[o.jsx("div",{className:"flex-1 bg-bambu-dark-tertiary rounded-full h-2 mr-3",children:o.jsx("div",{className:"bg-bambu-dark-tertiary h-2 rounded-full"})}),o.jsx("span",{className:"text-bambu-gray",children:"—"})]}),be?o.jsxs("p",{className:"text-xs text-bambu-gray mt-2 truncate",title:be.print_name||be.filename,children:["Last: ",be.print_name||be.filename,be.completed_at&&o.jsxs("span",{className:"ml-1 text-bambu-gray/60",children:["• ",new Date(be.completed_at).toLocaleDateString([],{month:"short",day:"numeric"})]})]}):o.jsx("p",{className:"text-xs text-bambu-gray mt-2",children:"Ready to print"})]})})]})]}),Q.state!=="RUNNING"&&o.jsx(che,{printerId:t.id})]}),Q.temperatures&&r==="expanded"&&(()=>{const bt=Q.temperatures.nozzle_heating||Q.temperatures.nozzle_2_heating||!1,Ht=Q.temperatures.bed_heating||!1,an=Q.temperatures.chamber_heating||!1;return o.jsxs("div",{className:"grid grid-cols-3 gap-2",children:[o.jsxs("div",{className:"text-center p-2 bg-bambu-dark rounded-lg",children:[o.jsx(DN,{className:"w-4 h-4 mx-auto mb-1",color:"text-orange-400",isHeating:bt}),Q.temperatures.nozzle_2!==void 0?o.jsxs(o.Fragment,{children:[o.jsx("p",{className:"text-[10px] text-bambu-gray",children:"L / R"}),o.jsxs("p",{className:"text-xs text-white",children:[Math.round(Q.temperatures.nozzle||0),"° / ",Math.round(Q.temperatures.nozzle_2||0),"°"]})]}):o.jsxs(o.Fragment,{children:[o.jsx("p",{className:"text-[10px] text-bambu-gray",children:"Nozzle"}),o.jsxs("p",{className:"text-xs text-white",children:[Math.round(Q.temperatures.nozzle||0),"°C"]})]})]}),o.jsxs("div",{className:"text-center p-2 bg-bambu-dark rounded-lg",children:[o.jsx(DN,{className:"w-4 h-4 mx-auto mb-1",color:"text-blue-400",isHeating:Ht}),o.jsx("p",{className:"text-[10px] text-bambu-gray",children:"Bed"}),o.jsxs("p",{className:"text-xs text-white",children:[Math.round(Q.temperatures.bed||0),"°C"]})]}),Q.temperatures.chamber!==void 0?o.jsxs("div",{className:"text-center p-2 bg-bambu-dark rounded-lg",children:[o.jsx(DN,{className:"w-4 h-4 mx-auto mb-1",color:"text-green-400",isHeating:an}),o.jsx("p",{className:"text-[10px] text-bambu-gray",children:"Chamber"}),o.jsxs("p",{className:"text-xs text-white",children:[Math.round(Q.temperatures.chamber||0),"°C"]})]}):o.jsx("div",{})]})})(),r==="expanded"&&(()=>{const bt=Q.state==="RUNNING",Ht=Q.state==="PAUSED"||Q.state==="PAUSE",an=bt||Ht,mt=ae.isPending||He.isPending||Be.isPending,Zt=Q.cooling_fan_speed,sn=Q.big_fan1_speed,Yt=Q.big_fan2_speed;return o.jsxs("div",{className:"mt-3",children:[o.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[o.jsx("span",{className:"text-[10px] uppercase tracking-wider text-bambu-gray font-medium",children:"Controls"}),o.jsx("div",{className:"flex-1 h-px bg-bambu-dark-tertiary/30"})]}),o.jsxs("div",{className:"flex items-center justify-between gap-2",children:[o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsxs("div",{className:`flex items-center gap-1 px-1.5 py-1 rounded ${Zt&&Zt>0?"bg-cyan-500/10":"bg-bambu-dark"}`,title:"Part Cooling Fan",children:[o.jsx($9,{className:`w-3.5 h-3.5 ${Zt&&Zt>0?"text-cyan-400":"text-bambu-gray/50"}`}),o.jsxs("span",{className:`text-[10px] ${Zt&&Zt>0?"text-cyan-400":"text-bambu-gray/50"}`,children:[Zt??0,"%"]})]}),o.jsxs("div",{className:`flex items-center gap-1 px-1.5 py-1 rounded ${sn&&sn>0?"bg-blue-500/10":"bg-bambu-dark"}`,title:"Auxiliary Fan",children:[o.jsx(tW,{className:`w-3.5 h-3.5 ${sn&&sn>0?"text-blue-400":"text-bambu-gray/50"}`}),o.jsxs("span",{className:`text-[10px] ${sn&&sn>0?"text-blue-400":"text-bambu-gray/50"}`,children:[sn??0,"%"]})]}),o.jsxs("div",{className:`flex items-center gap-1 px-1.5 py-1 rounded ${Yt&&Yt>0?"bg-green-500/10":"bg-bambu-dark"}`,title:"Chamber Fan",children:[o.jsx(joe,{className:`w-3.5 h-3.5 ${Yt&&Yt>0?"text-green-400":"text-bambu-gray/50"}`}),o.jsxs("span",{className:`text-[10px] ${Yt&&Yt>0?"text-green-400":"text-bambu-gray/50"}`,children:[Yt??0,"%"]})]})]}),o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsxs("button",{onClick:()=>R(!0),disabled:!an||mt,className:` + `})]})]})}function nCe({isOpen:t,onClose:e,trayUuid:n,trayInfo:r}){const i=dn(),[a,s]=S.useState(null),{data:l,isLoading:c}=pt({queryKey:["unlinked-spools"],queryFn:_e.getUnlinkedSpools,enabled:t}),u=_t({mutationFn:f=>_e.linkSpool(f,n),onSuccess:()=>{i.invalidateQueries({queryKey:["unlinked-spools"]}),i.invalidateQueries({queryKey:["spoolman-status"]}),e()}});if(!t)return null;const d=()=>{a&&u.mutate(a)};return o.jsxs("div",{className:"fixed inset-0 z-50 flex items-center justify-center",children:[o.jsx("div",{className:"absolute inset-0 bg-black/60 backdrop-blur-sm",onClick:e}),o.jsxs("div",{className:"relative w-full max-w-md mx-4 bg-bambu-dark-secondary border border-bambu-dark-tertiary rounded-xl shadow-2xl",children:[o.jsxs("div",{className:"flex items-center justify-between p-4 border-b border-bambu-dark-tertiary",children:[o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx(Tp,{className:"w-5 h-5 text-bambu-green"}),o.jsx("h2",{className:"text-lg font-semibold text-white",children:"Link to Spoolman"})]}),o.jsx("button",{onClick:e,className:"p-1 text-bambu-gray hover:text-white rounded transition-colors",children:o.jsx(Wt,{className:"w-5 h-5"})})]}),o.jsxs("div",{className:"p-4 space-y-4",children:[r&&o.jsxs("div",{className:"p-3 bg-bambu-dark rounded-lg border border-bambu-dark-tertiary",children:[o.jsx("p",{className:"text-xs text-bambu-gray mb-1",children:"Linking AMS tray:"}),o.jsxs("div",{className:"flex items-center gap-2",children:[r.color&&o.jsx("span",{className:"w-4 h-4 rounded-full border border-white/20",style:{backgroundColor:`#${r.color}`}}),o.jsx("span",{className:"text-white font-medium",children:r.type}),o.jsxs("span",{className:"text-bambu-gray",children:["(",r.location,")"]})]})]}),o.jsxs("div",{className:"p-3 bg-bambu-dark rounded-lg border border-bambu-dark-tertiary",children:[o.jsx("p",{className:"text-xs text-bambu-gray mb-1",children:"Spool UUID:"}),o.jsx("code",{className:"text-xs text-bambu-green font-mono break-all",children:n})]}),o.jsxs("div",{children:[o.jsx("p",{className:"text-sm text-bambu-gray mb-2",children:"Select a Spoolman spool to link:"}),c?o.jsx("div",{className:"flex justify-center py-8",children:o.jsx(xt,{className:"w-6 h-6 text-bambu-green animate-spin"})}):l&&l.length>0?o.jsx("div",{className:"max-h-64 overflow-y-auto space-y-2",children:l.map(f=>o.jsx("button",{onClick:()=>s(f.id),className:`w-full p-3 rounded-lg border text-left transition-colors ${a===f.id?"bg-bambu-green/20 border-bambu-green":"bg-bambu-dark border-bambu-dark-tertiary hover:border-bambu-gray"}`,children:o.jsxs("div",{className:"flex items-center gap-2",children:[f.filament_color_hex&&o.jsx("span",{className:"w-4 h-4 rounded-full border border-white/20 flex-shrink-0",style:{backgroundColor:`#${f.filament_color_hex}`}}),o.jsxs("div",{className:"flex-1 min-w-0",children:[o.jsx("p",{className:"text-white font-medium truncate",children:f.filament_name||"Unknown filament"}),o.jsxs("p",{className:"text-xs text-bambu-gray",children:[f.filament_material||"Unknown",f.remaining_weight!==null&&` - ${Math.round(f.remaining_weight)}g`,f.location&&` - ${f.location}`]})]}),a===f.id&&o.jsx(go,{className:"w-4 h-4 text-bambu-green flex-shrink-0"})]})},f.id))}):o.jsxs("div",{className:"text-center py-8 text-bambu-gray",children:[o.jsx("p",{children:"No unlinked spools found in Spoolman."}),o.jsx("p",{className:"text-xs mt-1",children:"All spools are already linked to AMS trays."})]})]})]}),o.jsxs("div",{className:"flex justify-end gap-2 p-4 border-t border-bambu-dark-tertiary",children:[o.jsx(Pe,{variant:"secondary",onClick:e,children:"Cancel"}),o.jsx(Pe,{onClick:d,disabled:!a||u.isPending,children:u.isPending?o.jsxs(o.Fragment,{children:[o.jsx(xt,{className:"w-4 h-4 animate-spin"}),"Linking..."]}):o.jsxs(o.Fragment,{children:[o.jsx(Tp,{className:"w-4 h-4"}),"Link Spool"]})})]}),u.isError&&o.jsx("div",{className:"mx-4 mb-4 p-2 bg-red-500/20 border border-red-500/50 rounded text-sm text-red-400",children:u.error.message})]})]})}const sH=({className:t})=>o.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:t,children:[o.jsx("rect",{x:"2",y:"15",width:"5",height:"5",rx:"0.5"}),o.jsx("rect",{x:"9.5",y:"15",width:"5",height:"5",rx:"0.5",fill:"currentColor",opacity:"0.3"}),o.jsx("rect",{x:"17",y:"15",width:"5",height:"5",rx:"0.5"}),o.jsx("path",{d:"M4 12 C4 6, 14 6, 14 12"}),o.jsx("polyline",{points:"12,10 14,12 12,14"})]}),oH={"A00-W1":"Jade White","A00-P0":"Beige","A00-D2":"Light Gray","A00-Y0":"Yellow","A00-Y2":"Sunflower Yellow","A00-A1":"Pumpkin Orange","A00-A0":"Orange","A00-Y4":"Gold","A00-G3":"Bright Green","A00-G1":"Bambu Green","A00-G2":"Mistletoe Green","A00-R3":"Hot Pink","A00-P6":"Magenta","A00-R0":"Red","A00-R2":"Maroon Red","A00-P5":"Purple","A00-P2":"Indigo Purple","A00-B5":"Turquoise","A00-B8":"Cyan","A00-B3":"Cobalt Blue","A00-N0":"Brown","A00-N1":"Cocoa Brown","A00-Y3":"Bronze","A00-D0":"Gray","A00-D1":"Silver","A00-B1":"Blue Grey","A00-D3":"Dark Gray","A00-K0":"Black","A00-M3":"Pink Citrus","A00-M6":"Dusk Glare","A00-M0":"Arctic Whisper","A00-M1":"Solar Breeze","A00-M5":"Blueberry Bubblegum","A00-M4":"Mint Lime","A00-M2":"Ocean to Meadow","A00-M7":"Cotton Candy Cloud","A18-K0":"Black","A18-D0":"Gray","A18-W0":"White","A18-R0":"Red","A18-Y0":"Yellow","A18-B0":"Cyan","A18-B1":"Blue","A18-P0":"Matte Beige","A01-W2":"Ivory White","A01-W3":"Bone White","A01-Y2":"Lemon Yellow","A01-A2":"Mandarin Orange","A01-P3":"Sakura Pink","A01-P4":"Lilac Purple","A01-R3":"Plum","A01-R1":"Scarlet Red","A01-R4":"Dark Red","A01-G0":"Apple Green","A01-G1":"Grass Green","A01-G7":"Dark Green","A01-B4":"Ice Blue","A01-B0":"Sky Blue","A01-B3":"Marine Blue","A01-B6":"Dark Blue","A01-Y3":"Desert Tan","A01-N1":"Latte Brown","A01-N3":"Caramel","A01-R2":"Terracotta","A01-N2":"Dark Brown","A01-N0":"Dark Chocolate","A01-D3":"Ash Gray","A01-D0":"Nardo Gray","A01-K1":"Charcoal","A12-G0":"Green","A12-R0":"Pink","A12-A0":"Orange","A12-Y0":"Yellow","A12-B0":"Blue","A07-R5":"Red Granite","A07-D4":"White Marble","A11-W0":"White","A11-K0":"Black","A08-G3":"Alpine Green Sparkle","A08-D5":"Slate Gray Sparkle","A08-B7":"Royal Purple Sparkle","A08-R2":"Crimson Red Sparkle","A08-K2":"Onyx Black Sparkle","A08-Y1":"Classic Gold Sparkle","A02-B2":"Cobalt Blue Metallic","A02-G2":"Oxide Green Metallic","A02-Y1":"Iridium Gold Metallic","A02-D2":"Iron Gray Metallic","A17-B1":"Blue","A17-A0":"Orange","A17-P0":"Purple","A06-Y1":"Gold","A06-D0":"Titan Gray","A06-D1":"Silver","A06-W0":"White","A06-R0":"Candy Red","A06-G0":"Candy Green","A06-G1":"Mint","A06-B1":"Blue","A06-B0":"Baby Blue","A06-P0":"Purple","A06-R1":"Rose Gold","A06-R2":"Pink","A06-Y0":"Champagne","A05-M8":"Dawn Radiance","A05-M4":"Aurora Purple","A05-M1":"South Beach","A05-T3":"Neon City","A05-T2":"Midnight Blaze","A05-T1":"Gilded Rose","A05-T4":"Blue Hawaii","A05-T5":"Velvet Eclipse","A15-B0":"Purple","A15-G0":"Green","A15-G1":"Nebulae","A15-R0":"Brown","A16-K0":"Black Walnut","A16-R0":"Rosewood","A16-N0":"Clay Brown","A16-G0":"Classic Birch","A16-W0":"White Oak","A16-Y0":"Ochre Yellow","A50-D6":"Lava Gray","A50-K0":"Black","A50-B6":"Royal Blue","A10-W0":"White","A10-D0":"Gray","A09-B5":"Lavender Blue","A09-B4":"Light Blue","A09-A0":"Orange","A09-D1":"Silver","A09-R3":"Vermilion Red","A09-Y0":"Yellow","G02-K0":"Black","G02-W0":"White","G02-R0":"Red","G02-D0":"Gray","G02-D1":"Dark Gray","G02-Y1":"Cream","G02-Y0":"Yellow","G02-A0":"Orange","G02-N1":"Peanut Brown","G02-G1":"Lime Green","G02-G0":"Green","G02-G2":"Forest Green","G02-B1":"Lake Blue","G02-B0":"Blue","G01-G1":"Translucent Teal","G01-B0":"Translucent Light Blue","G01-C0":"Clear","G01-D0":"Translucent Gray","G01-G0":"Translucent Olive","G01-N0":"Translucent Brown","G01-A0":"Translucent Orange","G01-P1":"Translucent Pink","G01-P0":"Translucent Purple","G50-P7":"Violet Purple","G50-K0":"Black","B00-D1":"Silver","B00-K0":"Black","B00-W0":"White","B00-G6":"Bambu Green","B00-G7":"Olive","B00-Y1":"Tangerine Yellow","B00-A0":"Orange","B00-R0":"Red","B00-B4":"Azure","B00-B0":"Blue","B00-B6":"Navy Blue","B50-A0":"Orange","B50-K0":"Black","B01-W0":"White","B01-K0":"Black","B01-D0":"Gray","B02-W0":"White","C00-C1":"Transparent","C00-C0":"Clear Black","C00-K0":"Black","C00-W0":"White","C01-K0":"Black","U02-B0":"Blue","U02-D0":"Gray","U02-K0":"Black","N04-K0":"Black","N08-K0":"Black","S02-W0":"Nature","S02-W1":"White","S05-C0":"Black","S06-W0":"White","S03-G1":"Green","S04-Y0":"Clear"},rCe={W0:"White",W1:"Jade White",W2:"Ivory White",W3:"Bone White",Y0:"Yellow",Y1:"Gold",Y2:"Sunflower Yellow",Y3:"Bronze",Y4:"Gold",A0:"Orange",A1:"Pumpkin Orange",A2:"Mandarin Orange",R0:"Red",R1:"Scarlet Red",R2:"Maroon Red",R3:"Hot Pink",R4:"Dark Red",R5:"Red Granite",P0:"Beige",P1:"Pink",P2:"Indigo Purple",P3:"Sakura Pink",P4:"Lilac Purple",P5:"Purple",P6:"Magenta",P7:"Violet Purple",B0:"Blue",B1:"Blue Grey",B2:"Cobalt Blue",B3:"Cobalt Blue",B4:"Ice Blue",B5:"Turquoise",B6:"Navy Blue",B7:"Royal Purple",B8:"Cyan",G0:"Green",G1:"Grass Green",G2:"Mistletoe Green",G3:"Bright Green",G6:"Bambu Green",G7:"Dark Green",N0:"Brown",N1:"Peanut Brown",N2:"Dark Brown",N3:"Caramel",D0:"Gray",D1:"Silver",D2:"Light Gray",D3:"Dark Gray",D4:"White Marble",D5:"Slate Gray",D6:"Lava Gray",K0:"Black",K1:"Charcoal",K2:"Onyx Black",C0:"Clear Black",C1:"Transparent",M0:"Arctic Whisper",M1:"Solar Breeze",M2:"Ocean to Meadow",M3:"Pink Citrus",M4:"Aurora Purple",M5:"Blueberry Bubblegum",M6:"Dusk Glare",M7:"Cotton Candy Cloud",M8:"Dawn Radiance",T1:"Gilded Rose",T2:"Midnight Blaze",T3:"Neon City",T4:"Blue Hawaii",T5:"Velvet Eclipse"};function PN(t){if(!t)return null;if(oH[t])return oH[t];const e=t.split("-");if(e.length<2)return null;const n=e[1];return rCe[n]||null}function jN(t){if(!t||t.length<6)return"Unknown";const e=parseInt(t.substring(0,2),16),n=parseInt(t.substring(2,4),16),r=parseInt(t.substring(4,6),16),i=Math.max(e,n,r)/255,a=Math.min(e,n,r)/255,s=(i+a)/2;let l=0,c=0;if(i!==a){const u=i-a;c=s>.5?u/(2-i-a):u/(i+a);const d=e/255,f=n/255,g=r/255;i===d?l=((f-g)/u+(f.85?"White":c<.15?s<.4?"Dark Gray":s>.6?"Light Gray":"Gray":l<15||l>=345?"Red":l<45?"Orange":l<70?"Yellow":l<150?"Green":l<200?"Cyan":l<260?"Blue":l<290?"Purple":l<345?"Pink":"Unknown"}function RN(t){return(t??.02).toFixed(3)}function lH({side:t}){const{mode:e}=og(),n=e==="dark"?"#1a4d2e":"#e7f5e9";return o.jsx("span",{className:"inline-flex items-center justify-center w-4 h-4 text-[10px] font-bold rounded",style:{backgroundColor:n,color:"#00ae42"},children:t})}function cH({className:t}){return o.jsx("svg",{className:t,viewBox:"0 0 36 54",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:o.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 iCe({className:t}){return o.jsxs("svg",{className:t,viewBox:"0 0 35 53",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[o.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"}),o.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 aCe({className:t}){return o.jsxs("svg",{className:t,viewBox:"0 0 36 54",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[o.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"}),o.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 sCe({className:t}){return o.jsxs("svg",{className:t,viewBox:"0 0 12 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[o.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"}),o.jsx("circle",{cx:"6",cy:"15",r:"2.5",stroke:"#C3C2C1",strokeWidth:"1",fill:"none"})]})}function oCe({className:t}){return o.jsxs("svg",{className:t,viewBox:"0 0 12 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[o.jsx("rect",{x:"4.5",y:"8",width:"3",height:"4.5",fill:"#d4a017",rx:"0.5"}),o.jsx("circle",{cx:"6",cy:"15",r:"2",fill:"#d4a017"}),o.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 lCe({className:t}){return o.jsxs("svg",{className:t,viewBox:"0 0 12 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[o.jsx("rect",{x:"4.5",y:"3",width:"3",height:"9.5",fill:"#c62828",rx:"0.5"}),o.jsx("circle",{cx:"6",cy:"15",r:"2",fill:"#c62828"}),o.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 DN({className:t,color:e,isHeating:n}){const i={"text-orange-400":"#fb923c","text-blue-400":"#60a5fa","text-green-400":"#4ade80"}[e]||"#888",a=n?{filter:`drop-shadow(0 0 4px ${i}) drop-shadow(0 0 8px ${i})`}:{};return n?o.jsxs("svg",{className:t,style:a,viewBox:"0 0 12 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[o.jsx("rect",{x:"4.5",y:"3",width:"3",height:"9.5",fill:i,rx:"0.5"}),o.jsx("circle",{cx:"6",cy:"15",r:"2",fill:i}),o.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:i,strokeWidth:"1",fill:"none"})]}):o.jsxs("svg",{className:t,viewBox:"0 0 12 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[o.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:i,strokeWidth:"1",fill:"none"}),o.jsx("circle",{cx:"6",cy:"15",r:"2.5",stroke:i,strokeWidth:"1",fill:"none"})]})}function uH({humidity:t,goodThreshold:e=40,fairThreshold:n=60,onClick:r,compact:i}){const a=typeof t=="string"?parseInt(t,10):t,s=typeof e=="number"?e:40,l=typeof n=="number"?n:60;let c,u;isNaN(a)?(c="#C3C2C1",u="Unknown"):a<=s?(c="#22a352",u="Good"):a<=l?(c="#d4a017",u="Fair"):(c="#c62828",u="Bad");let d;return isNaN(a)||a<=s?d=cH:a<=l?d=iCe:d=aCe,o.jsxs("button",{type:"button",onClick:r,className:`flex items-center gap-1 ${r?"cursor-pointer hover:opacity-80 transition-opacity":""}`,title:`Humidity: ${a}% - ${u}${r?" (click for history)":""}`,children:[o.jsx(d,{className:i?"w-2.5 h-3":"w-3 h-4"}),o.jsxs("span",{className:`font-medium tabular-nums ${i?"text-[10px]":"text-xs"}`,style:{color:c},children:[a,"%"]})]})}function dH({temp:t,goodThreshold:e=28,fairThreshold:n=35,onClick:r,compact:i}){const a=typeof e=="number"?e:28,s=typeof n=="number"?n:35;let l,c,u;return t<=a?(l="#22a352",c="Good",u=sCe):t<=s?(l="#d4a017",c="Fair",u=oCe):(l="#c62828",c="Bad",u=lCe),o.jsxs("button",{type:"button",onClick:r,className:`flex items-center gap-1 ${r?"cursor-pointer hover:opacity-80 transition-opacity":""}`,title:`Temperature: ${t}°C - ${c}${r?" (click for history)":""}`,children:[o.jsx(u,{className:i?"w-2.5 h-3":"w-3 h-4"}),o.jsxs("span",{className:`tabular-nums text-right ${i?"text-[10px] w-8":"w-12"}`,style:{color:l},children:[t,"°C"]})]})}function Au(t,e){const n=typeof t=="string"?parseInt(t,10):t,r=isNaN(n)?0:n,i=e===1,a=r>=128?r-128:r,s=String.fromCharCode(65+a);return i?`HT-${s}`:`AMS-${s}`}function hH(t){return t>50?"#00ae42":t>=15?"#f59e0b":"#ef4444"}function cCe(t){const e=Math.floor(t/3600),n=Math.floor(t%3600/60);return e>0?`${e}h ${n}m`:`${n}m`}function uCe(t){const e=new Date,n=new Date(e.getTime()+t*60*1e3),r=new Date;r.setHours(0,0,0,0);const i=new Date(n);i.setHours(0,0,0,0);const a=n.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),s=Math.floor((i.getTime()-r.getTime())/(1e3*60*60*24));return s===0?a:s===1?`Tomorrow ${a}`:n.toLocaleDateString([],{weekday:"short"})+" "+a}function dCe(t){if(!t)return"/img/printers/default.png";const e=t.toLowerCase().replace(/\s+/g,"");return e.includes("x1e")?"/img/printers/x1e.png":e.includes("x1c")||e.includes("x1carbon")||e.includes("x1")?"/img/printers/x1c.png":e.includes("h2d")||e.includes("h2c")||e.includes("h2s")?"/img/printers/h2d.png":e.includes("p2s")||e.includes("p1s")?"/img/printers/p1s.png":e.includes("p1p")?"/img/printers/p1p.png":e.includes("a1mini")?"/img/printers/a1mini.png":e.includes("a1")?"/img/printers/a1.png":"/img/printers/default.png"}function hCe(t){return t==null?{label:"",color:"text-bambu-gray",bars:0}:t>=-50?{label:"Excellent",color:"text-bambu-green",bars:4}:t>=-60?{label:"Good",color:"text-bambu-green",bars:3}:t>=-70?{label:"Fair",color:"text-yellow-400",bars:2}:t>=-80?{label:"Weak",color:"text-orange-400",bars:1}:{label:"Very weak",color:"text-red-400",bars:1}}function fCe({url:t,printName:e}){const[n,r]=S.useState(!1),[i,a]=S.useState(!1),[s,l]=S.useState(!1);return o.jsxs(o.Fragment,{children:[o.jsx("div",{className:`w-20 h-20 flex-shrink-0 rounded-lg overflow-hidden bg-bambu-dark-tertiary flex items-center justify-center ${t&&n?"cursor-pointer":""}`,onClick:()=>t&&n&&l(!0),children:t&&!i?o.jsxs(o.Fragment,{children:[o.jsx("img",{src:t,alt:"Print preview",className:`w-full h-full object-cover ${n?"block":"hidden"}`,onLoad:()=>r(!0),onError:()=>a(!0)}),!n&&o.jsx(bd,{className:"w-8 h-8 text-bambu-gray"})]}):o.jsx(bd,{className:"w-8 h-8 text-bambu-gray"})}),s&&t&&o.jsx("div",{className:"fixed inset-0 bg-black/80 flex items-center justify-center z-50 p-8",onClick:()=>l(!1),children:o.jsxs("div",{className:"relative max-w-2xl max-h-full",children:[o.jsx("img",{src:t,alt:"Print preview",className:"max-w-full max-h-[80vh] rounded-lg shadow-2xl"}),e&&o.jsx("p",{className:"text-white text-center mt-4 text-lg",children:e})]})})]})}function mCe({printers:t}){const e=dn(),n=S.useMemo(()=>{let i=0,a=0,s=0,l=0;return t?.forEach(c=>{const u=e.getQueryData(["printerStatus",c.id]);u===void 0?l++:u.connected?u.state==="RUNNING"?i++:a++:s++}),{printing:i,idle:a,offline:s,loading:l,total:t?.length||0}},[t,e]),[,r]=S.useState(0);return S.useEffect(()=>{let i=!1;const a=e.getQueryCache().subscribe(()=>{i||(i=!0,requestAnimationFrame(()=>{r(s=>s+1),i=!1}))});return()=>a()},[e]),t?.length?o.jsxs("div",{className:"flex items-center gap-4 text-sm",children:[n.printing>0&&o.jsxs("div",{className:"flex items-center gap-1.5",children:[o.jsx("div",{className:"w-2 h-2 rounded-full bg-bambu-green animate-pulse"}),o.jsxs("span",{className:"text-bambu-gray",children:[o.jsx("span",{className:"text-white font-medium",children:n.printing})," printing"]})]}),n.idle>0&&o.jsxs("div",{className:"flex items-center gap-1.5",children:[o.jsx("div",{className:"w-2 h-2 rounded-full bg-blue-400"}),o.jsxs("span",{className:"text-bambu-gray",children:[o.jsx("span",{className:"text-white font-medium",children:n.idle})," idle"]})]}),n.offline>0&&o.jsxs("div",{className:"flex items-center gap-1.5",children:[o.jsx("div",{className:"w-2 h-2 rounded-full bg-gray-400"}),o.jsxs("span",{className:"text-bambu-gray",children:[o.jsx("span",{className:"text-white font-medium",children:n.offline})," offline"]})]})]}):null}function fH(t,e){if(e)return e;switch(t){case"RUNNING":return"Printing";case"PAUSE":return"Paused";case"FINISH":return"Finished";case"FAILED":return"Failed";case"IDLE":return"Idle";default:return t?t.charAt(0)+t.slice(1).toLowerCase():"Idle"}}function mH({printer:t,hideIfDisconnected:e,maintenanceInfo:n,viewMode:r="expanded",cardSize:i=2,amsThresholds:a,spoolmanEnabled:s=!1,hasUnlinkedSpools:l=!1}){const c=dn(),u=Eb(),{showToast:d}=vr(),[f,g]=S.useState(!1),[p,b]=S.useState(!1),[v,x]=S.useState(!0),[y,E]=S.useState(!1),[w,A]=S.useState(!1),[T,C]=S.useState(!1),[N,O]=S.useState(!1),[k,j]=S.useState(!1),[z,I]=S.useState(!1),[q,R]=S.useState(!1),[W,K]=S.useState(!1),[G,J]=S.useState(!1),[ee,Z]=S.useState(!1),[F,V]=S.useState(null),[ne,le]=S.useState(null),[oe,pe]=S.useState(!1),{data:Q}=pt({queryKey:["printerStatus",t.id],queryFn:()=>_e.getPrinterStatus(t.id),refetchInterval:3e4}),{data:Ee}=pt({queryKey:["firmwareUpdate",t.id],queryFn:()=>m1.checkPrinterUpdate(t.id),staleTime:300*1e3,refetchInterval:300*1e3}),he=S.useMemo(()=>{const bt=new Set;if(Q?.ams)for(const Ht of Q.ams)for(const an of Ht.tray||[])an.tray_info_idx&&bt.add(an.tray_info_idx);return Q?.vt_tray?.tray_info_idx&&bt.add(Q.vt_tray.tray_info_idx),Array.from(bt)},[Q?.ams,Q?.vt_tray]),{data:ue}=pt({queryKey:["filamentInfo",he],queryFn:()=>_e.getFilamentInfo(he),enabled:he.length>0,staleTime:300*1e3}),[Ae,fe]=S.useState(null);S.useEffect(()=>{Q?.wifi_signal!=null&&fe(Q.wifi_signal)},[Q?.wifi_signal]);const at=Q?.wifi_signal??Ae,B=S.useRef(void 0);S.useEffect(()=>{Q?.connected!==void 0&&(B.current=Q.connected)},[Q?.connected]);const $=Q?.connected??B.current,ie=S.useRef({});S.useEffect(()=>{Q?.ams_extruder_map&&Object.keys(Q.ams_extruder_map).length>0&&(ie.current=Q.ams_extruder_map)},[Q?.ams_extruder_map]);const H=Q?.ams_extruder_map&&Object.keys(Q.ams_extruder_map).length>0?Q.ams_extruder_map:ie.current,Y=S.useRef([]);S.useEffect(()=>{Q?.ams&&Q.ams.length>0&&(Y.current=Q.ams)},[Q?.ams]);const se=Q?.ams&&Q.ams.length>0?Q.ams:Y.current,ve=S.useRef(255),Ne=Q?.tray_now;Ne!==void 0&&Ne!==255&&(ve.current=Ne);const Se=Ne===void 0||Ne===255?ve.current:Ne,{data:U}=pt({queryKey:["smartPlugByPrinter",t.id],queryFn:()=>_e.getSmartPlugByPrinter(t.id)}),{data:L}=pt({queryKey:["smartPlugStatus",U?.id],queryFn:()=>U?_e.getSmartPlugStatus(U.id):null,enabled:!!U,refetchInterval:1e4}),{data:te}=pt({queryKey:["queue",t.id,"pending"],queryFn:()=>_e.getQueue(t.id,"pending")}),ye=te?.length||0,{data:Me}=pt({queryKey:["archives",t.id,"last"],queryFn:()=>_e.getArchives(t.id,1,0),enabled:Q?.connected&&Q?.state!=="RUNNING"}),be=Me?.[0],qe=e&&$===!1,Ve=_t({mutationFn:bt=>_e.deletePrinter(t.id,bt.deleteArchives),onSuccess:()=>{c.invalidateQueries({queryKey:["printers"]}),c.invalidateQueries({queryKey:["archives"]}),c.invalidateQueries({queryKey:["maintenanceOverview"]})}}),We=_t({mutationFn:()=>_e.connectPrinter(t.id),onSuccess:()=>{c.invalidateQueries({queryKey:["printerStatus",t.id]})}}),lt=_t({mutationFn:bt=>U?_e.controlSmartPlug(U.id,bt):Promise.reject("No plug"),onSuccess:()=>{c.invalidateQueries({queryKey:["smartPlugStatus",U?.id]})}}),me=_t({mutationFn:bt=>U?_e.updateSmartPlug(U.id,{auto_off:bt}):Promise.reject("No plug"),onSuccess:()=>{c.invalidateQueries({queryKey:["smartPlugByPrinter",t.id]}),c.invalidateQueries({queryKey:["smart-plugs"]})}}),ae=_t({mutationFn:()=>_e.stopPrint(t.id),onSuccess:()=>{d("Print stopped"),c.invalidateQueries({queryKey:["printerStatus",t.id]})},onError:bt=>d(bt.message||"Failed to stop print","error")}),He=_t({mutationFn:()=>_e.pausePrint(t.id),onSuccess:()=>{d("Print paused"),c.invalidateQueries({queryKey:["printerStatus",t.id]})},onError:bt=>d(bt.message||"Failed to pause print","error")}),Be=_t({mutationFn:()=>_e.resumePrint(t.id),onSuccess:()=>{d("Print resumed"),c.invalidateQueries({queryKey:["printerStatus",t.id]})},onError:bt=>d(bt.message||"Failed to resume print","error")}),Ye=(Q?.state==="RUNNING"||Q?.state==="PAUSE"||Q?.state==="PAUSED")&&(Q?.printable_objects_count??0)>=2,{data:ot,refetch:ge}=pt({queryKey:["printableObjects",t.id],queryFn:()=>_e.getPrintableObjects(t.id),enabled:ee||Ye,refetchInterval:ee?5e3:Ye?3e4:!1}),nt=_t({mutationFn:bt=>_e.skipObjects(t.id,bt),onSuccess:bt=>{d(bt.message||"Objects skipped"),ge()},onError:bt=>d(bt.message||"Failed to skip objects","error")}),[xe,ze]=S.useState(null),Re=S.useRef(!1),we=S.useRef(null),Ke=S.useRef(!1),ft=_t({mutationFn:({amsId:bt,slotId:Ht})=>_e.refreshAmsSlot(t.id,bt,Ht),onMutate:({amsId:bt,slotId:Ht})=>{we.current&&clearTimeout(we.current),Re.current=!1,Ke.current=!1,ze({amsId:bt,slotId:Ht}),setTimeout(()=>{Ke.current=!0},2e3),we.current=setTimeout(()=>{ze(null)},3e4)},onSuccess:bt=>{d(bt.message||"RFID re-read initiated")},onError:bt=>{d(bt.message||"Failed to re-read RFID","error"),we.current&&clearTimeout(we.current),ze(null)}}),Et=S.useRef(null);S.useEffect(()=>{if(!xe)return;const bt=Q?.ams_status_main??0;return bt!==0&&(Re.current=!0,Et.current&&(clearTimeout(Et.current),Et.current=null)),Re.current&&bt===0&&(Ke.current?(we.current&&clearTimeout(we.current),ze(null)):Et.current||(Et.current=setTimeout(()=>{we.current&&clearTimeout(we.current),ze(null)},2e3))),()=>{Et.current&&clearTimeout(Et.current)}},[Q?.ams_status_main,xe]);const[wt,Qt]=S.useState(null);if(qe)return null;const Ft=()=>{switch(i){case 1:return"w-10 h-10";case 2:return"w-14 h-14";case 3:return"w-16 h-16";case 4:return"w-20 h-20";default:return"w-14 h-14"}},hn=()=>{switch(i){case 1:return"text-base truncate";case 2:return"text-lg";case 3:return"text-xl";case 4:return"text-2xl";default:return"text-lg"}},Hn=()=>{switch(i){case 1:return"mb-2";case 2:return"mb-4";case 3:return"mb-5";case 4:return"mb-6";default:return"mb-4"}};return o.jsxs(At,{className:"relative",children:[o.jsxs(Tt,{className:i>=3?"p-5":"",children:[o.jsxs("div",{className:Hn(),children:[o.jsxs("div",{className:"flex items-start justify-between gap-2",children:[o.jsxs("div",{className:"flex items-center gap-3 min-w-0 flex-1",children:[o.jsx("img",{src:dCe(t.model),alt:t.model||"Printer",className:`object-contain rounded-lg bg-bambu-dark flex-shrink-0 ${Ft()}`}),o.jsxs("div",{className:"min-w-0 flex-1",children:[o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx("h3",{className:`font-semibold text-white ${hn()}`,children:t.name}),r==="compact"&&o.jsx("div",{className:`w-2 h-2 rounded-full flex-shrink-0 ${Q?.connected?"bg-bambu-green":"bg-red-500"}`,title:Q?.connected?"Connected":"Offline"})]}),o.jsxs("p",{className:"text-sm text-bambu-gray",children:[t.model||"Unknown Model",r==="expanded"&&Q?.nozzles&&Q.nozzles[0]?.nozzle_diameter&&o.jsxs("span",{className:"ml-1.5 text-bambu-gray",title:Q.nozzles[0].nozzle_type||"Nozzle",children:["• ",Q.nozzles[0].nozzle_diameter,"mm"]}),r==="expanded"&&n&&n.total_print_hours>0&&o.jsxs("span",{className:"ml-2 text-bambu-gray",children:[o.jsx(ur,{className:"w-3 h-3 inline-block mr-1"}),Math.round(n.total_print_hours),"h"]})]})]})]}),o.jsxs("div",{className:"relative flex-shrink-0",children:[o.jsx(Pe,{variant:"ghost",size:"sm",onClick:()=>g(!f),children:o.jsx(o0,{className:"w-4 h-4"})}),f&&o.jsxs("div",{className:"absolute right-0 mt-2 w-48 bg-bambu-dark-secondary border border-bambu-dark-tertiary rounded-lg shadow-lg z-10",children:[o.jsxs("button",{className:"w-full px-4 py-2 text-left text-sm hover:bg-bambu-dark-tertiary flex items-center gap-2",onClick:()=>{E(!0),g(!1)},children:[o.jsx(Bc,{className:"w-4 h-4"}),"Edit"]}),o.jsxs("button",{className:"w-full px-4 py-2 text-left text-sm hover:bg-bambu-dark-tertiary flex items-center gap-2",onClick:()=>{We.mutate(),g(!1)},children:[o.jsx(li,{className:"w-4 h-4"}),"Reconnect"]}),o.jsxs("button",{className:"w-full px-4 py-2 text-left text-sm hover:bg-bambu-dark-tertiary flex items-center gap-2",onClick:()=>{C(!0),g(!1)},children:[o.jsx(Y9,{className:"w-4 h-4"}),"MQTT Debug"]}),o.jsxs("button",{className:"w-full px-4 py-2 text-left text-sm text-red-400 hover:bg-bambu-dark-tertiary flex items-center gap-2",onClick:()=>{b(!0),g(!1)},children:[o.jsx(Rn,{className:"w-4 h-4"}),"Delete"]})]})]})]}),r==="expanded"&&o.jsxs("div",{className:"flex flex-wrap items-center gap-2 mt-2",children:[o.jsxs("span",{className:`flex items-center gap-1.5 px-2 py-1 rounded-full text-xs ${Q?.connected?"bg-bambu-green/20 text-bambu-green":"bg-red-500/20 text-red-400"}`,children:[Q?.connected?o.jsx(Cb,{className:"w-3 h-3"}):o.jsx(J9,{className:"w-3 h-3"}),Q?.connected?"Connected":"Offline"]}),Q?.connected&&at!=null&&o.jsxs("span",{className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs ${at>=-50||at>=-60?"bg-bambu-green/20 text-bambu-green":at>=-70?"bg-amber-500/20 text-amber-600":at>=-80?"bg-orange-500/20 text-orange-600":"bg-red-500/20 text-red-600"}`,title:`WiFi: ${at} dBm - ${hCe(at).label}`,children:[o.jsx(Kue,{className:"w-3 h-3"}),at,"dBm"]}),Q?.connected&&(()=>{const bt=Q.hms_errors?ahe(Q.hms_errors):[];return o.jsxs("button",{onClick:()=>I(!0),className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs cursor-pointer hover:opacity-80 transition-opacity ${bt.length>0?bt.some(Ht=>Ht.severity<=2)?"bg-red-500/20 text-red-400":"bg-orange-500/20 text-orange-400":"bg-bambu-green/20 text-bambu-green"}`,title:"Click to view HMS errors",children:[o.jsx(qn,{className:"w-3 h-3"}),bt.length>0?bt.length:"OK"]})})(),n&&o.jsxs("button",{onClick:()=>u("/maintenance"),className:`flex items-center gap-1 px-2 py-1 rounded-full text-xs cursor-pointer hover:opacity-80 transition-opacity ${n.due_count>0?"bg-red-500/20 text-red-400":n.warning_count>0?"bg-orange-500/20 text-orange-400":"bg-bambu-green/20 text-bambu-green"}`,title:n.due_count>0||n.warning_count>0?`${n.due_count>0?`${n.due_count} maintenance due`:""}${n.due_count>0&&n.warning_count>0?", ":""}${n.warning_count>0?`${n.warning_count} due soon`:""} - Click to view`:"All maintenance up to date - Click to view",children:[o.jsx(_d,{className:"w-3 h-3"}),n.due_count>0||n.warning_count>0?n.due_count+n.warning_count:"OK"]}),ye>0&&o.jsxs("button",{onClick:()=>u("/queue"),className:"flex items-center gap-1 px-2 py-1 rounded-full text-xs bg-purple-500/20 text-purple-400 hover:opacity-80 transition-opacity",title:`${ye} print${ye>1?"s":""} in queue`,children:[o.jsx(vd,{className:"w-3 h-3"}),ye]}),Ee?.update_available&&o.jsxs("button",{onClick:()=>pe(!0),className:"flex items-center gap-1 px-2 py-1 rounded-full text-xs bg-orange-500/20 text-orange-400 hover:opacity-80 transition-opacity",title:`Firmware update available: ${Ee.current_version} → ${Ee.latest_version}`,children:[o.jsx(Wi,{className:"w-3 h-3"}),"Update"]})]})]}),p&&o.jsx("div",{className:"fixed inset-0 bg-black/50 flex items-center justify-center z-50",children:o.jsx(At,{className:"w-full max-w-md mx-4",children:o.jsxs(Tt,{children:[o.jsxs("div",{className:"flex items-start gap-3 mb-4",children:[o.jsx("div",{className:"p-2 rounded-full bg-red-500/20",children:o.jsx(qn,{className:"w-5 h-5 text-red-400"})}),o.jsxs("div",{children:[o.jsx("h3",{className:"text-lg font-semibold text-white",children:"Delete Printer"}),o.jsxs("p",{className:"text-sm text-bambu-gray mt-1",children:['Are you sure you want to delete "',t.name,'"? This will remove all connection settings.']})]})]}),o.jsx("div",{className:"bg-bambu-dark rounded-lg p-3 mb-4",children:o.jsxs("label",{className:"flex items-start gap-3 cursor-pointer",children:[o.jsx("input",{type:"checkbox",checked:v,onChange:bt=>x(bt.target.checked),className:"mt-0.5 w-4 h-4 rounded border-bambu-gray bg-bambu-dark-secondary text-bambu-green focus:ring-bambu-green focus:ring-offset-0"}),o.jsxs("div",{children:[o.jsx("span",{className:"text-sm text-white",children:"Delete print archives"}),o.jsx("p",{className:"text-xs text-bambu-gray mt-0.5",children:v?"All print history for this printer will be permanently deleted.":"Print history will be kept but no longer associated with this printer."})]})]})}),o.jsxs("div",{className:"flex justify-end gap-2",children:[o.jsx(Pe,{variant:"secondary",onClick:()=>{b(!1),x(!0)},children:"Cancel"}),o.jsx(Pe,{variant:"danger",onClick:()=>{Ve.mutate({deleteArchives:v}),b(!1),x(!0)},children:"Delete"})]})]})})}),Q?.connected&&o.jsxs(o.Fragment,{children:[r==="compact"?o.jsx("div",{className:"mt-2",children:Q.state==="RUNNING"?o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx("div",{className:"flex-1 bg-bambu-dark-tertiary rounded-full h-1.5",children:o.jsx("div",{className:"bg-bambu-green h-1.5 rounded-full transition-all",style:{width:`${Q.progress||0}%`}})}),o.jsxs("span",{className:"text-xs text-white",children:[Math.round(Q.progress||0),"%"]})]}):o.jsx("p",{className:"text-xs text-bambu-gray",children:fH(Q.state,Q.stg_cur_name)})}):o.jsxs(o.Fragment,{children:[o.jsxs("div",{className:"mb-4 p-3 bg-bambu-dark rounded-lg relative",children:[o.jsxs("button",{onClick:()=>Z(!0),disabled:!(Q.state==="RUNNING"||Q.state==="PAUSE"||Q.state==="PAUSED")||(Q.printable_objects_count??0)<2,className:`absolute top-2 right-2 p-1.5 rounded transition-colors z-10 ${(Q.state==="RUNNING"||Q.state==="PAUSE"||Q.state==="PAUSED")&&(Q.printable_objects_count??0)>=2?"text-bambu-gray hover:text-white hover:bg-white/10":"text-bambu-gray/30 cursor-not-allowed"}`,title:Q.state==="RUNNING"||Q.state==="PAUSE"||Q.state==="PAUSED"?(Q.printable_objects_count??0)>=2?"Skip objects":"Skip objects (requires 2+ objects)":"Skip objects (only while printing)",children:[o.jsx(sH,{className:"w-4 h-4"}),ot&&ot.skipped_count>0&&o.jsx("span",{className:"absolute -top-1 -right-1 min-w-[16px] h-4 px-1 flex items-center justify-center text-[10px] font-bold bg-red-500 text-white rounded-full",children:ot.skipped_count})]}),o.jsxs("div",{className:"flex gap-3",children:[o.jsx(fCe,{url:Q.state==="RUNNING"?Q.cover_url:null,printName:Q.state==="RUNNING"&&(Q.subtask_name||Q.current_print)||void 0}),o.jsx("div",{className:"flex-1 min-w-0",children:Q.current_print&&Q.state==="RUNNING"?o.jsxs(o.Fragment,{children:[o.jsx("p",{className:"text-sm text-bambu-gray mb-1",children:Q.stg_cur_name||"Printing"}),o.jsx("p",{className:"text-white text-sm mb-2 truncate",children:Q.subtask_name||Q.current_print}),o.jsxs("div",{className:"flex items-center justify-between text-sm",children:[o.jsx("div",{className:"flex-1 bg-bambu-dark-tertiary rounded-full h-2 mr-3",children:o.jsx("div",{className:"bg-bambu-green h-2 rounded-full transition-all",style:{width:`${Q.progress||0}%`}})}),o.jsxs("span",{className:"text-white",children:[Math.round(Q.progress||0),"%"]})]}),o.jsxs("div",{className:"flex items-center gap-3 mt-2 text-xs text-bambu-gray",children:[Q.remaining_time!=null&&Q.remaining_time>0&&o.jsxs(o.Fragment,{children:[o.jsxs("span",{className:"flex items-center gap-1",children:[o.jsx(ur,{className:"w-3 h-3"}),cCe(Q.remaining_time*60)]}),o.jsxs("span",{className:"text-bambu-green font-medium",title:"Estimated completion time",children:["ETA ",uCe(Q.remaining_time)]})]}),Q.layer_num!=null&&Q.total_layers!=null&&Q.total_layers>0&&o.jsxs("span",{className:"flex items-center gap-1",children:[o.jsx(vd,{className:"w-3 h-3"}),Q.layer_num,"/",Q.total_layers]})]})]}):o.jsxs(o.Fragment,{children:[o.jsx("p",{className:"text-sm text-bambu-gray mb-1",children:"Status"}),o.jsx("p",{className:"text-white text-sm mb-2",children:fH(Q.state,Q.stg_cur_name)}),o.jsxs("div",{className:"flex items-center justify-between text-sm",children:[o.jsx("div",{className:"flex-1 bg-bambu-dark-tertiary rounded-full h-2 mr-3",children:o.jsx("div",{className:"bg-bambu-dark-tertiary h-2 rounded-full"})}),o.jsx("span",{className:"text-bambu-gray",children:"—"})]}),be?o.jsxs("p",{className:"text-xs text-bambu-gray mt-2 truncate",title:be.print_name||be.filename,children:["Last: ",be.print_name||be.filename,be.completed_at&&o.jsxs("span",{className:"ml-1 text-bambu-gray/60",children:["• ",new Date(be.completed_at).toLocaleDateString([],{month:"short",day:"numeric"})]})]}):o.jsx("p",{className:"text-xs text-bambu-gray mt-2",children:"Ready to print"})]})})]})]}),Q.state!=="RUNNING"&&o.jsx(che,{printerId:t.id})]}),Q.temperatures&&r==="expanded"&&(()=>{const bt=Q.temperatures.nozzle_heating||Q.temperatures.nozzle_2_heating||!1,Ht=Q.temperatures.bed_heating||!1,an=Q.temperatures.chamber_heating||!1;return o.jsxs("div",{className:"grid grid-cols-3 gap-2",children:[o.jsxs("div",{className:"text-center p-2 bg-bambu-dark rounded-lg",children:[o.jsx(DN,{className:"w-4 h-4 mx-auto mb-1",color:"text-orange-400",isHeating:bt}),Q.temperatures.nozzle_2!==void 0?o.jsxs(o.Fragment,{children:[o.jsx("p",{className:"text-[10px] text-bambu-gray",children:"L / R"}),o.jsxs("p",{className:"text-xs text-white",children:[Math.round(Q.temperatures.nozzle||0),"° / ",Math.round(Q.temperatures.nozzle_2||0),"°"]})]}):o.jsxs(o.Fragment,{children:[o.jsx("p",{className:"text-[10px] text-bambu-gray",children:"Nozzle"}),o.jsxs("p",{className:"text-xs text-white",children:[Math.round(Q.temperatures.nozzle||0),"°C"]})]})]}),o.jsxs("div",{className:"text-center p-2 bg-bambu-dark rounded-lg",children:[o.jsx(DN,{className:"w-4 h-4 mx-auto mb-1",color:"text-blue-400",isHeating:Ht}),o.jsx("p",{className:"text-[10px] text-bambu-gray",children:"Bed"}),o.jsxs("p",{className:"text-xs text-white",children:[Math.round(Q.temperatures.bed||0),"°C"]})]}),Q.temperatures.chamber!==void 0?o.jsxs("div",{className:"text-center p-2 bg-bambu-dark rounded-lg",children:[o.jsx(DN,{className:"w-4 h-4 mx-auto mb-1",color:"text-green-400",isHeating:an}),o.jsx("p",{className:"text-[10px] text-bambu-gray",children:"Chamber"}),o.jsxs("p",{className:"text-xs text-white",children:[Math.round(Q.temperatures.chamber||0),"°C"]})]}):o.jsx("div",{})]})})(),r==="expanded"&&(()=>{const bt=Q.state==="RUNNING",Ht=Q.state==="PAUSED"||Q.state==="PAUSE",an=bt||Ht,mt=ae.isPending||He.isPending||Be.isPending,Zt=Q.cooling_fan_speed,sn=Q.big_fan1_speed,Yt=Q.big_fan2_speed;return o.jsxs("div",{className:"mt-3",children:[o.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[o.jsx("span",{className:"text-[10px] uppercase tracking-wider text-bambu-gray font-medium",children:"Controls"}),o.jsx("div",{className:"flex-1 h-px bg-bambu-dark-tertiary/30"})]}),o.jsxs("div",{className:"flex items-center justify-between gap-2",children:[o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsxs("div",{className:`flex items-center gap-1 px-1.5 py-1 rounded ${Zt&&Zt>0?"bg-cyan-500/10":"bg-bambu-dark"}`,title:"Part Cooling Fan",children:[o.jsx($9,{className:`w-3.5 h-3.5 ${Zt&&Zt>0?"text-cyan-400":"text-bambu-gray/50"}`}),o.jsxs("span",{className:`text-[10px] ${Zt&&Zt>0?"text-cyan-400":"text-bambu-gray/50"}`,children:[Zt??0,"%"]})]}),o.jsxs("div",{className:`flex items-center gap-1 px-1.5 py-1 rounded ${sn&&sn>0?"bg-blue-500/10":"bg-bambu-dark"}`,title:"Auxiliary Fan",children:[o.jsx(tW,{className:`w-3.5 h-3.5 ${sn&&sn>0?"text-blue-400":"text-bambu-gray/50"}`}),o.jsxs("span",{className:`text-[10px] ${sn&&sn>0?"text-blue-400":"text-bambu-gray/50"}`,children:[sn??0,"%"]})]}),o.jsxs("div",{className:`flex items-center gap-1 px-1.5 py-1 rounded ${Yt&&Yt>0?"bg-green-500/10":"bg-bambu-dark"}`,title:"Chamber Fan",children:[o.jsx(joe,{className:`w-3.5 h-3.5 ${Yt&&Yt>0?"text-green-400":"text-bambu-gray/50"}`}),o.jsxs("span",{className:`text-[10px] ${Yt&&Yt>0?"text-green-400":"text-bambu-gray/50"}`,children:[Yt??0,"%"]})]})]}),o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsxs("button",{onClick:()=>R(!0),disabled:!an||mt,className:` flex items-center justify-center gap-1 px-3 py-1.5 rounded-lg text-xs font-medium transition-colors ${an?"bg-red-500/20 text-red-400 hover:bg-red-500/30":"bg-bambu-dark text-bambu-gray/50 cursor-not-allowed"} @@ -88,7 +88,7 @@ Please change the parent to nt.mutate([bt.id]),disabled:nt.isPending||(Q?.layer_num??0)<=1,className:`px-4 py-2 text-xs font-medium rounded-lg transition-colors ${(Q?.layer_num??0)<=1?"bg-gray-100 dark:bg-bambu-dark text-gray-400 dark:text-bambu-gray/50 cursor-not-allowed":"bg-red-100 dark:bg-red-500/20 text-red-600 dark:text-red-400 hover:bg-red-200 dark:hover:bg-red-500/30 border border-red-300 dark:border-red-500/30"}`,title:(Q?.layer_num??0)<=1?"Wait for layer 2+":"Skip this object",children:"Skip"})]},bt.id))})]})]}):o.jsx("div",{className:"flex items-center justify-center py-12",children:o.jsx(xt,{className:"w-5 h-5 animate-spin text-bambu-gray"})})]})]}),z&&o.jsx(ohe,{printerName:t.name,errors:Q?.hms_errors||[],onClose:()=>I(!1)}),F&&o.jsx(tCe,{isOpen:!!F,onClose:()=>V(null),printerId:t.id,printerName:t.name,amsId:F.amsId,amsLabel:F.amsLabel,initialMode:F.mode,thresholds:a}),ne&&o.jsx(nCe,{isOpen:!!ne,onClose:()=>le(null),trayUuid:ne.trayUuid,trayInfo:ne.trayInfo}),y&&o.jsx(xCe,{printer:t,onClose:()=>E(!1)}),oe&&Ee&&o.jsx(gCe,{printer:t,firmwareInfo:Ee,onClose:()=>pe(!1)}),wt&&o.jsx("div",{className:"fixed inset-0 z-40",onClick:()=>Qt(null)})]})}function pCe({onClose:t,onAdd:e,existingSerials:n}){const[r,i]=S.useState({name:"",serial_number:"",ip_address:"",access_code:"",model:"",auto_archive:!0}),[a,s]=S.useState(!1),[l,c]=S.useState([]),[u,d]=S.useState(""),[f,g]=S.useState(!1),[p,b]=S.useState(!1),[v,x]=S.useState("192.168.1.0/24"),[y,E]=S.useState({scanned:0,total:0});S.useEffect(()=>{nl.getInfo().then(N=>{b(N.is_docker)}).catch(()=>{})},[]);const w=l.filter(N=>!n.includes(N.serial)),A=async()=>{d(""),c([]),s(!0),g(!1),E({scanned:0,total:0});try{if(p){await nl.startSubnetScan(v);const N=setInterval(async()=>{try{const O=await nl.getScanStatus();E({scanned:O.scanned,total:O.total});const k=await nl.getDiscoveredPrinters();c(k),O.running||(clearInterval(N),s(!1),g(!0))}catch(O){console.error("Failed to get scan status:",O)}},500)}else{await nl.startDiscovery(10);const N=setInterval(async()=>{try{const O=await nl.getDiscoveredPrinters();c(O)}catch(O){console.error("Failed to get discovered printers:",O)}},1e3);setTimeout(async()=>{clearInterval(N);try{await nl.stopDiscovery()}catch{}s(!1),g(!0);try{const O=await nl.getDiscoveredPrinters();c(O)}catch(O){console.error("Failed to get final discovered printers:",O)}},1e4)}}catch(N){console.error("Failed to start discovery:",N),d(N instanceof Error?N.message:"Failed to start discovery"),s(!1),g(!0)}},T=N=>N?{O1D:"H2D",O1C:"H2C",O1S:"H2S","BL-P001":"X1C","BL-P002":"X1","BL-P003":"X1E",C11:"P1S",C12:"P1P",C13:"P2S",N2S:"A1",N1:"A1 Mini",X1C:"X1C",X1:"X1",X1E:"X1E",P1S:"P1S",P1P:"P1P",P2S:"P2S",A1:"A1","A1 Mini":"A1 Mini",H2D:"H2D",H2C:"H2C",H2S:"H2S"}[N]||N:"",C=N=>{i({...r,name:N.name||"",serial_number:N.serial,ip_address:N.ip_address,model:T(N.model)}),c([])};return S.useEffect(()=>()=>{nl.stopDiscovery().catch(()=>{}),nl.stopSubnetScan().catch(()=>{})},[]),S.useEffect(()=>{const N=O=>{O.key==="Escape"&&t()};return window.addEventListener("keydown",N),()=>window.removeEventListener("keydown",N)},[t]),o.jsx("div",{className:"fixed inset-0 bg-black/50 flex items-center justify-center z-50",onClick:t,children:o.jsx(At,{className:"w-full max-w-md",onClick:N=>N.stopPropagation(),children:o.jsxs(Tt,{children:[o.jsx("h2",{className:"text-xl font-semibold mb-4",children:"Add Printer"}),o.jsxs("div",{className:"mb-4 pb-4 border-b border-bambu-dark-tertiary",children:[p&&o.jsxs("div",{className:"mb-3",children:[o.jsx("label",{className:"block text-sm text-bambu-gray mb-1",children:"Subnet to scan"}),o.jsx("input",{type:"text",className:"w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none text-sm",value:v,onChange:N=>x(N.target.value),placeholder:"192.168.1.0/24",disabled:a}),o.jsxs("p",{className:"mt-1 text-xs text-bambu-gray",children:["Docker detected. Enter your printer's subnet in CIDR notation. Requires ",o.jsx("code",{className:"text-bambu-green",children:"network_mode: host"})," in docker-compose.yml."]})]}),o.jsx(Pe,{type:"button",variant:"secondary",onClick:A,disabled:a,className:"w-full",children:a?o.jsxs(o.Fragment,{children:[o.jsx(xt,{className:"w-4 h-4 animate-spin"}),p&&y.total>0?`Scanning... ${y.scanned}/${y.total}`:"Scanning..."]}):o.jsxs(o.Fragment,{children:[o.jsx(_l,{className:"w-4 h-4"}),p?"Scan Subnet for Printers":"Discover Printers on Network"]})}),u&&o.jsx("div",{className:"mt-2 text-sm text-red-400",children:u}),w.length>0&&o.jsx("div",{className:"mt-3 space-y-2 max-h-40 overflow-y-auto",children:w.map(N=>o.jsxs("div",{className:"flex items-center justify-between p-2 bg-bambu-dark rounded-lg hover:bg-bambu-dark-secondary cursor-pointer transition-colors",onClick:()=>C(N),children:[o.jsxs("div",{className:"min-w-0 flex-1",children:[o.jsx("p",{className:"font-medium text-white text-sm truncate",children:N.name||N.serial}),o.jsxs("p",{className:"text-xs text-bambu-gray truncate",children:[T(N.model)||"Unknown"," • ",N.ip_address]})]}),o.jsx(Os,{className:"w-4 h-4 text-bambu-gray -rotate-90 flex-shrink-0 ml-2"})]},N.serial))}),a&&o.jsx("p",{className:"mt-2 text-sm text-bambu-gray text-center",children:p?"Scanning subnet for Bambu printers...":"Scanning network..."}),f&&!a&&l.length===0&&o.jsxs("p",{className:"mt-2 text-sm text-bambu-gray text-center",children:["No printers found",p?" in the specified subnet":" on the network","."]}),f&&!a&&l.length>0&&w.length===0&&o.jsx("p",{className:"mt-2 text-sm text-bambu-gray text-center",children:"All discovered printers are already configured."})]}),o.jsxs("form",{onSubmit:N=>{N.preventDefault(),e(r)},className:"space-y-4",children:[o.jsxs("div",{children:[o.jsx("label",{className:"block text-sm text-bambu-gray mb-1",children:"Name"}),o.jsx("input",{type:"text",required:!0,className:"w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:r.name,onChange:N=>i({...r,name:N.target.value}),placeholder:"My Printer"})]}),o.jsxs("div",{children:[o.jsx("label",{className:"block text-sm text-bambu-gray mb-1",children:"IP Address"}),o.jsx("input",{type:"text",required:!0,pattern:"\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}",className:"w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:r.ip_address,onChange:N=>i({...r,ip_address:N.target.value}),placeholder:"192.168.1.100"})]}),o.jsxs("div",{children:[o.jsx("label",{className:"block text-sm text-bambu-gray mb-1",children:"Serial Number"}),o.jsx("input",{type:"text",required:!0,className:"w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:r.serial_number,onChange:N=>i({...r,serial_number:N.target.value}),placeholder:"01P00A000000000"})]}),o.jsxs("div",{children:[o.jsx("label",{className:"block text-sm text-bambu-gray mb-1",children:"Access Code"}),o.jsx("input",{type:"password",required:!0,className:"w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:r.access_code,onChange:N=>i({...r,access_code:N.target.value}),placeholder:"From printer settings"})]}),o.jsxs("div",{children:[o.jsx("label",{className:"block text-sm text-bambu-gray mb-1",children:"Model (optional)"}),o.jsxs("select",{className:"w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:r.model||"",onChange:N=>i({...r,model:N.target.value}),children:[o.jsx("option",{value:"",children:"Select model..."}),o.jsxs("optgroup",{label:"H2 Series",children:[o.jsx("option",{value:"H2C",children:"H2C"}),o.jsx("option",{value:"H2D",children:"H2D"}),o.jsx("option",{value:"H2S",children:"H2S"})]}),o.jsxs("optgroup",{label:"X1 Series",children:[o.jsx("option",{value:"X1E",children:"X1E"}),o.jsx("option",{value:"X1C",children:"X1 Carbon"}),o.jsx("option",{value:"X1",children:"X1"})]}),o.jsxs("optgroup",{label:"P Series",children:[o.jsx("option",{value:"P2S",children:"P2S"}),o.jsx("option",{value:"P1S",children:"P1S"}),o.jsx("option",{value:"P1P",children:"P1P"})]}),o.jsxs("optgroup",{label:"A1 Series",children:[o.jsx("option",{value:"A1",children:"A1"}),o.jsx("option",{value:"A1 Mini",children:"A1 Mini"})]})]})]}),o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx("input",{type:"checkbox",id:"auto_archive",checked:r.auto_archive,onChange:N=>i({...r,auto_archive:N.target.checked}),className:"rounded border-bambu-dark-tertiary bg-bambu-dark text-bambu-green focus:ring-bambu-green"}),o.jsx("label",{htmlFor:"auto_archive",className:"text-sm text-bambu-gray",children:"Auto-archive completed prints"})]}),o.jsxs("div",{className:"flex gap-3 pt-4",children:[o.jsx(Pe,{type:"button",variant:"secondary",onClick:t,className:"flex-1",children:"Cancel"}),o.jsx(Pe,{type:"submit",className:"flex-1",children:"Add Printer"})]})]})]})})})}function gCe({printer:t,firmwareInfo:e,onClose:n}){const r=dn(),{showToast:i}=vr(),[a,s]=S.useState(null),[l,c]=S.useState(!1),[u,d]=S.useState(null),{data:f,isLoading:g}=pt({queryKey:["firmwarePrepare",t.id],queryFn:()=>m1.prepareUpload(t.id),staleTime:3e4}),p=_t({mutationFn:()=>m1.startUpload(t.id),onSuccess:()=>{c(!0);const v=setInterval(async()=>{try{const x=await m1.getUploadStatus(t.id);s(x),(x.status==="complete"||x.status==="error")&&(clearInterval(v),d(null),c(!1),x.status==="complete"&&(i("Firmware uploaded! Trigger update from printer screen.","success"),r.invalidateQueries({queryKey:["firmwareUpdate",t.id]})))}catch{}},2e3);d(v)},onError:v=>{i(`Failed to start upload: ${v.message}`,"error"),c(!1)}});S.useEffect(()=>()=>{u&&clearInterval(u)},[u]);const b=()=>{s(null),p.mutate()};return o.jsx("div",{className:"fixed inset-0 bg-black/50 flex items-center justify-center z-50",children:o.jsx(At,{className:"w-full max-w-md mx-4",children:o.jsxs(Tt,{children:[o.jsxs("div",{className:"flex items-start gap-3 mb-4",children:[o.jsx("div",{className:"p-2 rounded-full bg-orange-500/20",children:o.jsx(Wi,{className:"w-5 h-5 text-orange-400"})}),o.jsxs("div",{className:"flex-1",children:[o.jsx("h3",{className:"text-lg font-semibold text-white",children:"Firmware Update"}),o.jsx("p",{className:"text-sm text-bambu-gray mt-1",children:t.name})]})]}),o.jsxs("div",{className:"bg-bambu-dark rounded-lg p-3 mb-4",children:[o.jsxs("div",{className:"flex justify-between items-center text-sm",children:[o.jsx("span",{className:"text-bambu-gray",children:"Current:"}),o.jsx("span",{className:"text-white font-mono",children:e.current_version||"Unknown"})]}),o.jsxs("div",{className:"flex justify-between items-center text-sm mt-1",children:[o.jsx("span",{className:"text-bambu-gray",children:"Latest:"}),o.jsx("span",{className:"text-orange-400 font-mono",children:e.latest_version})]}),e.release_notes&&o.jsxs("details",{className:"mt-3 text-sm",children:[o.jsx("summary",{className:"text-orange-400 cursor-pointer hover:underline",children:"Release Notes"}),o.jsx("div",{className:"mt-2 text-bambu-gray text-xs max-h-40 overflow-y-auto whitespace-pre-wrap",children:e.release_notes})]})]}),g?o.jsxs("div",{className:"flex items-center gap-2 text-bambu-gray text-sm mb-4",children:[o.jsx(xt,{className:"w-4 h-4 animate-spin"}),"Checking prerequisites..."]}):f&&!l&&!a?o.jsx("div",{className:"mb-4",children:f.can_proceed?o.jsxs("div",{className:"flex items-center gap-2 text-bambu-green text-sm",children:[o.jsx(bd,{className:"w-4 h-4"}),"SD card ready. Click below to upload firmware."]}):o.jsx("div",{className:"space-y-1",children:f.errors.map((v,x)=>o.jsxs("div",{className:"flex items-center gap-2 text-red-400 text-sm",children:[o.jsx(Sa,{className:"w-4 h-4 flex-shrink-0"}),v]},x))})}):null,(l||a)&&a&&o.jsxs("div",{className:"mb-4",children:[o.jsxs("div",{className:"flex items-center justify-between text-sm mb-1",children:[o.jsx("span",{className:"text-bambu-gray capitalize",children:a.status}),o.jsxs("span",{className:"text-white",children:[a.progress,"%"]})]}),o.jsx("div",{className:"w-full bg-bambu-dark-tertiary rounded-full h-2",children:o.jsx("div",{className:`h-2 rounded-full transition-all ${a.status==="error"?"bg-red-500":a.status==="complete"?"bg-bambu-green":"bg-orange-500"} ${a.status==="uploading"?"animate-pulse":""}`,style:{width:`${a.progress}%`}})}),o.jsx("p",{className:"text-xs text-bambu-gray mt-1",children:a.message}),a.error&&o.jsx("p",{className:"text-xs text-red-400 mt-1",children:a.error})]}),a?.status==="complete"&&o.jsxs("div",{className:"bg-bambu-green/10 border border-bambu-green/30 rounded-lg p-3 mb-4",children:[o.jsx("p",{className:"text-sm text-bambu-green font-medium mb-2",children:"Firmware uploaded to SD card!"}),o.jsx("p",{className:"text-xs text-bambu-gray",children:"To apply the update on your printer:"}),o.jsxs("ol",{className:"text-xs text-bambu-gray mt-1 list-decimal list-inside space-y-1",children:[o.jsxs("li",{children:["On the printer's touchscreen, go to ",o.jsx("strong",{className:"text-white",children:"Settings"})]}),o.jsxs("li",{children:["Navigate to ",o.jsx("strong",{className:"text-white",children:"Firmware"})]}),o.jsxs("li",{children:["Select ",o.jsx("strong",{className:"text-white",children:"Update from SD card"})]}),o.jsx("li",{children:"The update will take 10-20 minutes"})]})]}),o.jsxs("div",{className:"flex gap-2 justify-end",children:[o.jsx(Pe,{variant:"secondary",onClick:n,children:a?.status==="complete"?"Done":"Cancel"}),f?.can_proceed&&!l&&a?.status!=="complete"&&o.jsx(Pe,{onClick:b,disabled:p.isPending,children:p.isPending?o.jsxs(o.Fragment,{children:[o.jsx(xt,{className:"w-4 h-4 animate-spin mr-2"}),"Starting..."]}):o.jsxs(o.Fragment,{children:[o.jsx(Wi,{className:"w-4 h-4 mr-2"}),"Upload Firmware"]})})]})]})})})}function xCe({printer:t,onClose:e}){const n=dn(),[r,i]=S.useState({name:t.name,ip_address:t.ip_address,access_code:"",model:t.model||"",location:t.location||"",auto_archive:t.auto_archive}),a=_t({mutationFn:l=>_e.updatePrinter(t.id,l),onSuccess:()=>{n.invalidateQueries({queryKey:["printers"]}),n.invalidateQueries({queryKey:["printerStatus",t.id]}),e()}});S.useEffect(()=>{const l=c=>{c.key==="Escape"&&e()};return window.addEventListener("keydown",l),()=>window.removeEventListener("keydown",l)},[e]);const s=l=>{l.preventDefault();const c={name:r.name,ip_address:r.ip_address,model:r.model||void 0,location:r.location||void 0,auto_archive:r.auto_archive};r.access_code&&(c.access_code=r.access_code),a.mutate(c)};return o.jsx("div",{className:"fixed inset-0 bg-black/50 flex items-center justify-center z-50",onClick:e,children:o.jsx(At,{className:"w-full max-w-md",onClick:l=>l.stopPropagation(),children:o.jsxs(Tt,{children:[o.jsx("h2",{className:"text-xl font-semibold mb-4",children:"Edit Printer"}),o.jsxs("form",{onSubmit:s,className:"space-y-4",children:[o.jsxs("div",{children:[o.jsx("label",{className:"block text-sm text-bambu-gray mb-1",children:"Name"}),o.jsx("input",{type:"text",required:!0,className:"w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:r.name,onChange:l=>i({...r,name:l.target.value}),placeholder:"My Printer"})]}),o.jsxs("div",{children:[o.jsx("label",{className:"block text-sm text-bambu-gray mb-1",children:"IP Address"}),o.jsx("input",{type:"text",required:!0,pattern:"\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}",className:"w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:r.ip_address,onChange:l=>i({...r,ip_address:l.target.value}),placeholder:"192.168.1.100"})]}),o.jsxs("div",{children:[o.jsx("label",{className:"block text-sm text-bambu-gray mb-1",children:"Serial Number"}),o.jsx("input",{type:"text",disabled:!0,className:"w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-bambu-gray cursor-not-allowed",value:t.serial_number}),o.jsx("p",{className:"text-xs text-bambu-gray mt-1",children:"Serial number cannot be changed"})]}),o.jsxs("div",{children:[o.jsx("label",{className:"block text-sm text-bambu-gray mb-1",children:"Access Code"}),o.jsx("input",{type:"password",className:"w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:r.access_code,onChange:l=>i({...r,access_code:l.target.value}),placeholder:"Leave empty to keep current"})]}),o.jsxs("div",{children:[o.jsx("label",{className:"block text-sm text-bambu-gray mb-1",children:"Model"}),o.jsxs("select",{className:"w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:r.model,onChange:l=>i({...r,model:l.target.value}),children:[o.jsx("option",{value:"",children:"Select model..."}),o.jsxs("optgroup",{label:"H2 Series",children:[o.jsx("option",{value:"H2C",children:"H2C"}),o.jsx("option",{value:"H2D",children:"H2D"}),o.jsx("option",{value:"H2S",children:"H2S"})]}),o.jsxs("optgroup",{label:"X1 Series",children:[o.jsx("option",{value:"X1E",children:"X1E"}),o.jsx("option",{value:"X1C",children:"X1 Carbon"}),o.jsx("option",{value:"X1",children:"X1"})]}),o.jsxs("optgroup",{label:"P Series",children:[o.jsx("option",{value:"P2S",children:"P2S"}),o.jsx("option",{value:"P1S",children:"P1S"}),o.jsx("option",{value:"P1P",children:"P1P"})]}),o.jsxs("optgroup",{label:"A1 Series",children:[o.jsx("option",{value:"A1",children:"A1"}),o.jsx("option",{value:"A1 Mini",children:"A1 Mini"})]})]})]}),o.jsxs("div",{children:[o.jsx("label",{className:"block text-sm text-bambu-gray mb-1",children:"Location / Group"}),o.jsx("input",{type:"text",className:"w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:r.location,onChange:l=>i({...r,location:l.target.value}),placeholder:"e.g., Workshop, Office, Basement"}),o.jsx("p",{className:"text-xs text-bambu-gray mt-1",children:"Used to group printers on the dashboard"})]}),o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx("input",{type:"checkbox",id:"edit_auto_archive",checked:r.auto_archive,onChange:l=>i({...r,auto_archive:l.target.checked}),className:"rounded border-bambu-dark-tertiary bg-bambu-dark text-bambu-green focus:ring-bambu-green"}),o.jsx("label",{htmlFor:"edit_auto_archive",className:"text-sm text-bambu-gray",children:"Auto-archive completed prints"})]}),o.jsxs("div",{className:"flex gap-3 pt-4",children:[o.jsx(Pe,{type:"button",variant:"secondary",onClick:e,className:"flex-1",children:"Cancel"}),o.jsx(Pe,{type:"submit",className:"flex-1",disabled:a.isPending,children:a.isPending?"Saving...":"Save Changes"})]})]})]})})})}function bCe(t){const{data:e}=pt({queryKey:["printerStatus",t],queryFn:()=>_e.getPrinterStatus(t),refetchInterval:3e4});return!e?.connected}function yCe({printer:t,plug:e,onPowerOn:n,isPowering:r}){const i=bCe(t.id),{data:a}=pt({queryKey:["smartPlugStatus",e.id],queryFn:()=>_e.getSmartPlugStatus(e.id),refetchInterval:1e4});return i?o.jsxs("div",{className:"flex items-center justify-between px-3 py-2 hover:bg-gray-100 dark:hover:bg-bambu-dark-tertiary",children:[o.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[o.jsx("span",{className:"text-sm text-gray-900 dark:text-white truncate",children:t.name}),a&&o.jsx("span",{className:`text-xs px-1.5 py-0.5 rounded ${a.state==="ON"?"bg-bambu-green/20 text-bambu-green":"bg-red-500/20 text-red-400"}`,children:a.state||"?"})]}),o.jsxs("button",{onClick:()=>n(e.id),disabled:r||a?.state==="ON",className:`px-2 py-1 text-xs rounded transition-colors flex items-center gap-1 ${a?.state==="ON"?"bg-bambu-green/20 text-bambu-green cursor-default":"bg-bambu-green/20 text-bambu-green hover:bg-bambu-green hover:text-white"}`,children:[o.jsx(jl,{className:"w-3 h-3"}),r?"...":"On"]})]}):null}function vCe(){const[t,e]=S.useState(!1),[n,r]=S.useState(()=>localStorage.getItem("hideDisconnectedPrinters")==="true"),[i,a]=S.useState(!1),[s,l]=S.useState(null),[c,u]=S.useState(()=>localStorage.getItem("printerSortBy")||"name"),[d,f]=S.useState(()=>localStorage.getItem("printerSortAsc")!=="false"),[g,p]=S.useState(()=>{const Z=localStorage.getItem("printerCardSize");return Z?parseInt(Z,10):2}),b=g===1?"compact":"expanded",v=dn(),{data:x,isLoading:y}=pt({queryKey:["printers"],queryFn:_e.getPrinters}),{data:E}=pt({queryKey:["settings"],queryFn:_e.getSettings}),{data:w}=pt({queryKey:["smart-plugs"],queryFn:_e.getSmartPlugs}),{data:A}=pt({queryKey:["maintenanceOverview"],queryFn:_e.getMaintenanceOverview,staleTime:60*1e3}),{data:T}=pt({queryKey:["spoolman-status"],queryFn:_e.getSpoolmanStatus,staleTime:60*1e3}),C=T?.enabled&&T?.connected,{data:N}=pt({queryKey:["unlinked-spools"],queryFn:_e.getUnlinkedSpools,enabled:!!C,staleTime:30*1e3}),O=N&&N.length>0,k=A?.reduce((Z,F)=>(Z[F.printer_id]={due_count:F.due_count,warning_count:F.warning_count,total_print_hours:F.total_print_hours},Z),{})||{},j=w?.reduce((Z,F)=>(F.printer_id&&(Z[F.printer_id]=F),Z),{})||{},z=_t({mutationFn:_e.createPrinter,onSuccess:()=>{v.invalidateQueries({queryKey:["printers"]}),e(!1)}}),I=_t({mutationFn:Z=>_e.controlSmartPlug(Z,"on"),onSuccess:()=>{v.invalidateQueries({queryKey:["smart-plugs"]}),l(null)},onError:()=>{l(null)}}),q=()=>{const Z=!n;r(Z),localStorage.setItem("hideDisconnectedPrinters",String(Z))},R=Z=>{u(Z),localStorage.setItem("printerSortBy",Z)},W=()=>{const Z=!d;f(Z),localStorage.setItem("printerSortAsc",String(Z))},K=()=>{switch(g){case 1:return"grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5";case 2:return"grid-cols-1 md:grid-cols-2 xl:grid-cols-3";case 3:return"grid-cols-1 lg:grid-cols-2";case 4:return"grid-cols-1";default:return"grid-cols-1 md:grid-cols-2 xl:grid-cols-3"}},G=["S","M","L","XL"],J=S.useMemo(()=>{if(!x)return[];const Z=[...x];switch(c){case"name":Z.sort((F,V)=>F.name.localeCompare(V.name));break;case"model":Z.sort((F,V)=>(F.model||"").localeCompare(V.model||""));break;case"location":Z.sort((F,V)=>{const ne=F.location||"",le=V.location||"";return!ne&&le?1:ne&&!le?-1:ne.localeCompare(le)||F.name.localeCompare(V.name)});break;case"status":Z.sort((F,V)=>{const ne=v.getQueryData(["printerStatus",F.id]),le=v.getQueryData(["printerStatus",V.id]),oe=pe=>pe?.connected?pe.state==="RUNNING"?0:1:2;return oe(ne)-oe(le)});break}return d||Z.reverse(),Z},[x,c,d,v]),ee=S.useMemo(()=>{if(c!=="location")return null;const Z={};return J.forEach(F=>{const V=F.location||"Ungrouped";Z[V]||(Z[V]=[]),Z[V].push(F)}),Z},[c,J]);return o.jsxs("div",{className:"p-4 md:p-8",children:[o.jsxs("div",{className:"flex items-center justify-between mb-6",children:[o.jsxs("div",{children:[o.jsx("h1",{className:"text-2xl font-bold text-white",children:"Printers"}),o.jsx(mCe,{printers:x})]}),o.jsxs("div",{className:"flex items-center gap-3",children:[o.jsxs("div",{className:"flex items-center gap-1",children:[o.jsxs("select",{value:c,onChange:Z=>R(Z.target.value),className:"text-sm bg-bambu-dark border border-bambu-dark-tertiary rounded-lg px-2 py-1.5 text-white focus:border-bambu-green focus:outline-none",children:[o.jsx("option",{value:"name",children:"Name"}),o.jsx("option",{value:"status",children:"Status"}),o.jsx("option",{value:"model",children:"Model"}),o.jsx("option",{value:"location",children:"Location"})]}),o.jsx("button",{onClick:W,className:"p-1.5 rounded-lg hover:bg-bambu-dark-tertiary transition-colors",title:d?"Sort descending":"Sort ascending",children:d?o.jsx(Mp,{className:"w-4 h-4 text-bambu-gray"}):o.jsx(j0,{className:"w-4 h-4 text-bambu-gray"})})]}),o.jsx("div",{className:"flex items-center bg-bambu-dark rounded-lg border border-bambu-dark-tertiary",children:G.map((Z,F)=>{const V=F+1,ne=g===V;return o.jsx("button",{onClick:()=>{p(V),localStorage.setItem("printerCardSize",String(V))},className:`px-2 py-1.5 text-xs font-medium transition-colors ${F===0?"rounded-l-lg":""} ${F===G.length-1?"rounded-r-lg":""} ${ne?"bg-bambu-green text-white":"text-bambu-gray hover:bg-bambu-dark-tertiary hover:text-white"}`,title:`${Z==="S"?"Small":Z==="M"?"Medium":Z==="L"?"Large":"Extra large"} cards`,children:Z},Z)})}),o.jsx("div",{className:"w-px h-6 bg-bambu-dark-tertiary"}),o.jsxs("label",{className:"flex items-center gap-2 text-sm text-bambu-gray cursor-pointer",children:[o.jsx("input",{type:"checkbox",checked:n,onChange:q,className:"rounded border-bambu-dark-tertiary bg-bambu-dark text-bambu-green focus:ring-bambu-green"}),"Hide offline"]}),n&&Object.keys(j).length>0&&o.jsxs("div",{className:"relative",children:[o.jsxs("button",{onClick:()=>a(!i),className:"flex items-center gap-1.5 px-3 py-1.5 text-sm bg-white dark:bg-bambu-dark-secondary border border-gray-200 dark:border-bambu-dark-tertiary rounded-lg text-gray-600 dark:text-bambu-gray hover:text-gray-900 dark:hover:text-white hover:border-bambu-green transition-colors",children:[o.jsx(jl,{className:"w-4 h-4"}),"Power On",o.jsx(Os,{className:`w-3 h-3 transition-transform ${i?"rotate-180":""}`})]}),i&&o.jsxs(o.Fragment,{children:[o.jsx("div",{className:"fixed inset-0 z-10",onClick:()=>a(!1)}),o.jsxs("div",{className:"absolute right-0 mt-2 w-56 bg-white dark:bg-bambu-dark-secondary border border-gray-200 dark:border-bambu-dark-tertiary rounded-lg shadow-lg z-20 py-1",children:[o.jsx("div",{className:"px-3 py-2 text-xs text-gray-500 dark:text-bambu-gray border-b border-gray-200 dark:border-bambu-dark-tertiary",children:"Offline printers with smart plugs"}),x?.filter(Z=>j[Z.id]).map(Z=>o.jsx(yCe,{printer:Z,plug:j[Z.id],onPowerOn:F=>{l(F),I.mutate(F)},isPowering:s===j[Z.id]?.id},Z.id)),x?.filter(Z=>j[Z.id]).length===0&&o.jsx("div",{className:"px-3 py-2 text-sm text-bambu-gray",children:"No printers with smart plugs"})]})]})]}),o.jsxs(Pe,{onClick:()=>e(!0),children:[o.jsx(fr,{className:"w-4 h-4"}),"Add Printer"]})]})]}),y?o.jsx("div",{className:"text-center py-12 text-bambu-gray",children:"Loading printers..."}):x?.length===0?o.jsx(At,{children:o.jsxs(Tt,{className:"text-center py-12",children:[o.jsx("p",{className:"text-bambu-gray mb-4",children:"No printers configured yet"}),o.jsxs(Pe,{onClick:()=>e(!0),children:[o.jsx(fr,{className:"w-4 h-4"}),"Add Your First Printer"]})]})}):ee?o.jsx("div",{className:"space-y-6",children:Object.entries(ee).map(([Z,F])=>o.jsxs("div",{children:[o.jsxs("h2",{className:"text-lg font-semibold text-white mb-3 flex items-center gap-2",children:[o.jsx("span",{className:"w-2 h-2 rounded-full bg-bambu-green"}),Z,o.jsxs("span",{className:"text-sm font-normal text-bambu-gray",children:["(",F.length,")"]})]}),o.jsx("div",{className:`grid gap-4 ${g>=3?"gap-6":""} ${K()}`,children:F.map(V=>o.jsx(mH,{printer:V,hideIfDisconnected:n,maintenanceInfo:k[V.id],viewMode:b,cardSize:g,amsThresholds:E?{humidityGood:Number(E.ams_humidity_good)||40,humidityFair:Number(E.ams_humidity_fair)||60,tempGood:Number(E.ams_temp_good)||28,tempFair:Number(E.ams_temp_fair)||35}:void 0,spoolmanEnabled:C,hasUnlinkedSpools:O},V.id))})]},Z))}):o.jsx("div",{className:`grid gap-4 ${g>=3?"gap-6":""} ${K()}`,children:J.map(Z=>o.jsx(mH,{printer:Z,hideIfDisconnected:n,maintenanceInfo:k[Z.id],viewMode:b,cardSize:g,spoolmanEnabled:C,hasUnlinkedSpools:O,amsThresholds:E?{humidityGood:Number(E.ams_humidity_good)||40,humidityFair:Number(E.ams_humidity_fair)||60,tempGood:Number(E.ams_temp_good)||28,tempFair:Number(E.ams_temp_fair)||35}:void 0},Z.id))}),t&&o.jsx(pCe,{onClose:()=>e(!1),onAdd:Z=>z.mutate(Z),existingSerials:x?.map(Z=>Z.serial_number)||[]})]})}function _Ce(){const t=navigator.userAgent.toLowerCase(),e=navigator.platform?.toLowerCase()||"";return t.includes("win")||e.includes("win")?"windows":t.includes("mac")||e.includes("mac")?"macos":t.includes("linux")||e.includes("linux")?"linux":"unknown"}function wCe(){switch(_Ce()){case"windows":return"bambustudio://";case"macos":case"linux":default:return"bambustudioopen://"}}function vh(t){const e=wCe();window.location.href=`${e}${encodeURIComponent(t)}`}const AO="181",pp={ROTATE:0,DOLLY:1,PAN:2},lp={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},SCe=0,pH=1,MCe=2,vZ=1,ECe=2,pc=3,Td=0,ns=1,dl=2,Dc=0,gp=1,gH=2,xH=3,bH=4,ACe=5,_h=100,TCe=101,NCe=102,CCe=103,kCe=104,PCe=200,jCe=201,RCe=202,DCe=203,lP=204,cP=205,OCe=206,LCe=207,ICe=208,FCe=209,UCe=210,zCe=211,BCe=212,HCe=213,$Ce=214,uP=0,dP=1,hP=2,Fp=3,fP=4,mP=5,pP=6,gP=7,TO=0,VCe=1,GCe=2,ud=0,WCe=1,qCe=2,KCe=3,XCe=4,YCe=5,ZCe=6,QCe=7,_Z=300,Up=301,zp=302,xP=303,bP=304,tE=306,yP=1e3,Tc=1001,vP=1002,ks=1003,JCe=1004,Kv=1005,lo=1006,ON=1007,Ph=1008,Al=1009,wZ=1010,SZ=1011,J0=1012,NO=1013,mf=1014,Nc=1015,yg=1016,CO=1017,kO=1018,eb=1020,MZ=35902,EZ=35899,AZ=1021,TZ=1022,Fo=1023,tb=1026,nb=1027,NZ=1028,PO=1029,jO=1030,RO=1031,DO=1033,S1=33776,M1=33777,E1=33778,A1=33779,_P=35840,wP=35841,SP=35842,MP=35843,EP=36196,AP=37492,TP=37496,NP=37808,CP=37809,kP=37810,PP=37811,jP=37812,RP=37813,DP=37814,OP=37815,LP=37816,IP=37817,FP=37818,UP=37819,zP=37820,BP=37821,HP=36492,$P=36494,VP=36495,GP=36283,WP=36284,qP=36285,KP=36286,eke=3200,tke=3201,CZ=0,nke=1,Qu="",Js="srgb",Bp="srgb-linear",Ww="linear",ar="srgb",mm=7680,yH=519,rke=512,ike=513,ake=514,kZ=515,ske=516,oke=517,lke=518,cke=519,vH=35044,_H="300 es",pl=2e3,qw=2001;function PZ(t){for(let e=t.length-1;e>=0;--e)if(t[e]>=65535)return!0;return!1}function Kw(t){return document.createElementNS("http://www.w3.org/1999/xhtml",t)}function uke(){const t=Kw("canvas");return t.style.display="block",t}const wH={};function SH(...t){const e="THREE."+t.shift();console.log(e,...t)}function nn(...t){const e="THREE."+t.shift();console.warn(e,...t)}function Qr(...t){const e="THREE."+t.shift();console.error(e,...t)}function rb(...t){const e=t.join(" ");e in wH||(wH[e]=!0,nn(...t))}function dke(t,e,n){return new Promise(function(r,i){function a(){switch(t.clientWaitSync(e,t.SYNC_FLUSH_COMMANDS_BIT,0)){case t.WAIT_FAILED:i();break;case t.TIMEOUT_EXPIRED:setTimeout(a,n);break;default:r()}}setTimeout(a,n)})}let Nf=class{addEventListener(e,n){this._listeners===void 0&&(this._listeners={});const r=this._listeners;r[e]===void 0&&(r[e]=[]),r[e].indexOf(n)===-1&&r[e].push(n)}hasEventListener(e,n){const r=this._listeners;return r===void 0?!1:r[e]!==void 0&&r[e].indexOf(n)!==-1}removeEventListener(e,n){const r=this._listeners;if(r===void 0)return;const i=r[e];if(i!==void 0){const a=i.indexOf(n);a!==-1&&i.splice(a,1)}}dispatchEvent(e){const n=this._listeners;if(n===void 0)return;const r=n[e.type];if(r!==void 0){e.target=this;const i=r.slice(0);for(let a=0,s=i.length;a>8&255]+fa[t>>16&255]+fa[t>>24&255]+"-"+fa[e&255]+fa[e>>8&255]+"-"+fa[e>>16&15|64]+fa[e>>24&255]+"-"+fa[n&63|128]+fa[n>>8&255]+"-"+fa[n>>16&255]+fa[n>>24&255]+fa[r&255]+fa[r>>8&255]+fa[r>>16&255]+fa[r>>24&255]).toLowerCase()}function Tn(t,e,n){return Math.max(e,Math.min(n,t))}function hke(t,e){return(t%e+e)%e}function LN(t,e,n){return(1-n)*t+n*e}function Nx(t,e){switch(e.constructor){case Float32Array:return t;case Uint32Array:return t/4294967295;case Uint16Array:return t/65535;case Uint8Array:return t/255;case Int32Array:return Math.max(t/2147483647,-1);case Int16Array:return Math.max(t/32767,-1);case Int8Array:return Math.max(t/127,-1);default:throw new Error("Invalid component type.")}}function Xa(t,e){switch(e.constructor){case Float32Array:return t;case Uint32Array:return Math.round(t*4294967295);case Uint16Array:return Math.round(t*65535);case Uint8Array:return Math.round(t*255);case Int32Array:return Math.round(t*2147483647);case Int16Array:return Math.round(t*32767);case Int8Array:return Math.round(t*127);default:throw new Error("Invalid component type.")}}const fke={DEG2RAD:T1};let bn=class jZ{constructor(e=0,n=0){jZ.prototype.isVector2=!0,this.x=e,this.y=n}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,n){return this.x=e,this.y=n,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,n){switch(e){case 0:this.x=n;break;case 1:this.y=n;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,n){return this.x=e.x+n.x,this.y=e.y+n.y,this}addScaledVector(e,n){return this.x+=e.x*n,this.y+=e.y*n,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,n){return this.x=e.x-n.x,this.y=e.y-n.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){const n=this.x,r=this.y,i=e.elements;return this.x=i[0]*n+i[3]*r+i[6],this.y=i[1]*n+i[4]*r+i[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,n){return this.x=Tn(this.x,e.x,n.x),this.y=Tn(this.y,e.y,n.y),this}clampScalar(e,n){return this.x=Tn(this.x,e,n),this.y=Tn(this.y,e,n),this}clampLength(e,n){const r=this.length();return this.divideScalar(r||1).multiplyScalar(Tn(r,e,n))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){const n=Math.sqrt(this.lengthSq()*e.lengthSq());if(n===0)return Math.PI/2;const r=this.dot(e)/n;return Math.acos(Tn(r,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const n=this.x-e.x,r=this.y-e.y;return n*n+r*r}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,n){return this.x+=(e.x-this.x)*n,this.y+=(e.y-this.y)*n,this}lerpVectors(e,n,r){return this.x=e.x+(n.x-e.x)*r,this.y=e.y+(n.y-e.y)*r,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,n=0){return this.x=e[n],this.y=e[n+1],this}toArray(e=[],n=0){return e[n]=this.x,e[n+1]=this.y,e}fromBufferAttribute(e,n){return this.x=e.getX(n),this.y=e.getY(n),this}rotateAround(e,n){const r=Math.cos(n),i=Math.sin(n),a=this.x-e.x,s=this.y-e.y;return this.x=a*r-s*i+e.x,this.y=a*i+s*r+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}},pf=class{constructor(e=0,n=0,r=0,i=1){this.isQuaternion=!0,this._x=e,this._y=n,this._z=r,this._w=i}static slerpFlat(e,n,r,i,a,s,l){let c=r[i+0],u=r[i+1],d=r[i+2],f=r[i+3],g=a[s+0],p=a[s+1],b=a[s+2],v=a[s+3];if(l<=0){e[n+0]=c,e[n+1]=u,e[n+2]=d,e[n+3]=f;return}if(l>=1){e[n+0]=g,e[n+1]=p,e[n+2]=b,e[n+3]=v;return}if(f!==v||c!==g||u!==p||d!==b){let x=c*g+u*p+d*b+f*v;x<0&&(g=-g,p=-p,b=-b,v=-v,x=-x);let y=1-l;if(x<.9995){const E=Math.acos(x),w=Math.sin(E);y=Math.sin(y*E)/w,l=Math.sin(l*E)/w,c=c*y+g*l,u=u*y+p*l,d=d*y+b*l,f=f*y+v*l}else{c=c*y+g*l,u=u*y+p*l,d=d*y+b*l,f=f*y+v*l;const E=1/Math.sqrt(c*c+u*u+d*d+f*f);c*=E,u*=E,d*=E,f*=E}}e[n]=c,e[n+1]=u,e[n+2]=d,e[n+3]=f}static multiplyQuaternionsFlat(e,n,r,i,a,s){const l=r[i],c=r[i+1],u=r[i+2],d=r[i+3],f=a[s],g=a[s+1],p=a[s+2],b=a[s+3];return e[n]=l*b+d*f+c*p-u*g,e[n+1]=c*b+d*g+u*f-l*p,e[n+2]=u*b+d*p+l*g-c*f,e[n+3]=d*b-l*f-c*g-u*p,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,n,r,i){return this._x=e,this._y=n,this._z=r,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,n=!0){const r=e._x,i=e._y,a=e._z,s=e._order,l=Math.cos,c=Math.sin,u=l(r/2),d=l(i/2),f=l(a/2),g=c(r/2),p=c(i/2),b=c(a/2);switch(s){case"XYZ":this._x=g*d*f+u*p*b,this._y=u*p*f-g*d*b,this._z=u*d*b+g*p*f,this._w=u*d*f-g*p*b;break;case"YXZ":this._x=g*d*f+u*p*b,this._y=u*p*f-g*d*b,this._z=u*d*b-g*p*f,this._w=u*d*f+g*p*b;break;case"ZXY":this._x=g*d*f-u*p*b,this._y=u*p*f+g*d*b,this._z=u*d*b+g*p*f,this._w=u*d*f-g*p*b;break;case"ZYX":this._x=g*d*f-u*p*b,this._y=u*p*f+g*d*b,this._z=u*d*b-g*p*f,this._w=u*d*f+g*p*b;break;case"YZX":this._x=g*d*f+u*p*b,this._y=u*p*f+g*d*b,this._z=u*d*b-g*p*f,this._w=u*d*f-g*p*b;break;case"XZY":this._x=g*d*f-u*p*b,this._y=u*p*f-g*d*b,this._z=u*d*b+g*p*f,this._w=u*d*f+g*p*b;break;default:nn("Quaternion: .setFromEuler() encountered an unknown order: "+s)}return n===!0&&this._onChangeCallback(),this}setFromAxisAngle(e,n){const r=n/2,i=Math.sin(r);return this._x=e.x*i,this._y=e.y*i,this._z=e.z*i,this._w=Math.cos(r),this._onChangeCallback(),this}setFromRotationMatrix(e){const n=e.elements,r=n[0],i=n[4],a=n[8],s=n[1],l=n[5],c=n[9],u=n[2],d=n[6],f=n[10],g=r+l+f;if(g>0){const p=.5/Math.sqrt(g+1);this._w=.25/p,this._x=(d-c)*p,this._y=(a-u)*p,this._z=(s-i)*p}else if(r>l&&r>f){const p=2*Math.sqrt(1+r-l-f);this._w=(d-c)/p,this._x=.25*p,this._y=(i+s)/p,this._z=(a+u)/p}else if(l>f){const p=2*Math.sqrt(1+l-r-f);this._w=(a-u)/p,this._x=(i+s)/p,this._y=.25*p,this._z=(c+d)/p}else{const p=2*Math.sqrt(1+f-r-l);this._w=(s-i)/p,this._x=(a+u)/p,this._y=(c+d)/p,this._z=.25*p}return this._onChangeCallback(),this}setFromUnitVectors(e,n){let r=e.dot(n)+1;return r<1e-8?(r=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=r):(this._x=0,this._y=-e.z,this._z=e.y,this._w=r)):(this._x=e.y*n.z-e.z*n.y,this._y=e.z*n.x-e.x*n.z,this._z=e.x*n.y-e.y*n.x,this._w=r),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(Tn(this.dot(e),-1,1)))}rotateTowards(e,n){const r=this.angleTo(e);if(r===0)return this;const i=Math.min(1,n/r);return this.slerp(e,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,n){const r=e._x,i=e._y,a=e._z,s=e._w,l=n._x,c=n._y,u=n._z,d=n._w;return this._x=r*d+s*l+i*u-a*c,this._y=i*d+s*c+a*l-r*u,this._z=a*d+s*u+r*c-i*l,this._w=s*d-r*l-i*c-a*u,this._onChangeCallback(),this}slerp(e,n){if(n<=0)return this;if(n>=1)return this.copy(e);let r=e._x,i=e._y,a=e._z,s=e._w,l=this.dot(e);l<0&&(r=-r,i=-i,a=-a,s=-s,l=-l);let c=1-n;if(l<.9995){const u=Math.acos(l),d=Math.sin(u);c=Math.sin(c*u)/d,n=Math.sin(n*u)/d,this._x=this._x*c+r*n,this._y=this._y*c+i*n,this._z=this._z*c+a*n,this._w=this._w*c+s*n,this._onChangeCallback()}else this._x=this._x*c+r*n,this._y=this._y*c+i*n,this._z=this._z*c+a*n,this._w=this._w*c+s*n,this.normalize();return this}slerpQuaternions(e,n,r){return this.copy(e).slerp(n,r)}random(){const e=2*Math.PI*Math.random(),n=2*Math.PI*Math.random(),r=Math.random(),i=Math.sqrt(1-r),a=Math.sqrt(r);return this.set(i*Math.sin(e),i*Math.cos(e),a*Math.sin(n),a*Math.cos(n))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,n=0){return this._x=e[n],this._y=e[n+1],this._z=e[n+2],this._w=e[n+3],this._onChangeCallback(),this}toArray(e=[],n=0){return e[n]=this._x,e[n+1]=this._y,e[n+2]=this._z,e[n+3]=this._w,e}fromBufferAttribute(e,n){return this._x=e.getX(n),this._y=e.getY(n),this._z=e.getZ(n),this._w=e.getW(n),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}},it=class RZ{constructor(e=0,n=0,r=0){RZ.prototype.isVector3=!0,this.x=e,this.y=n,this.z=r}set(e,n,r){return r===void 0&&(r=this.z),this.x=e,this.y=n,this.z=r,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,n){switch(e){case 0:this.x=n;break;case 1:this.y=n;break;case 2:this.z=n;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,n){return this.x=e.x+n.x,this.y=e.y+n.y,this.z=e.z+n.z,this}addScaledVector(e,n){return this.x+=e.x*n,this.y+=e.y*n,this.z+=e.z*n,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,n){return this.x=e.x-n.x,this.y=e.y-n.y,this.z=e.z-n.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,n){return this.x=e.x*n.x,this.y=e.y*n.y,this.z=e.z*n.z,this}applyEuler(e){return this.applyQuaternion(MH.setFromEuler(e))}applyAxisAngle(e,n){return this.applyQuaternion(MH.setFromAxisAngle(e,n))}applyMatrix3(e){const n=this.x,r=this.y,i=this.z,a=e.elements;return this.x=a[0]*n+a[3]*r+a[6]*i,this.y=a[1]*n+a[4]*r+a[7]*i,this.z=a[2]*n+a[5]*r+a[8]*i,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){const n=this.x,r=this.y,i=this.z,a=e.elements,s=1/(a[3]*n+a[7]*r+a[11]*i+a[15]);return this.x=(a[0]*n+a[4]*r+a[8]*i+a[12])*s,this.y=(a[1]*n+a[5]*r+a[9]*i+a[13])*s,this.z=(a[2]*n+a[6]*r+a[10]*i+a[14])*s,this}applyQuaternion(e){const n=this.x,r=this.y,i=this.z,a=e.x,s=e.y,l=e.z,c=e.w,u=2*(s*i-l*r),d=2*(l*n-a*i),f=2*(a*r-s*n);return this.x=n+c*u+s*f-l*d,this.y=r+c*d+l*u-a*f,this.z=i+c*f+a*d-s*u,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){const n=this.x,r=this.y,i=this.z,a=e.elements;return this.x=a[0]*n+a[4]*r+a[8]*i,this.y=a[1]*n+a[5]*r+a[9]*i,this.z=a[2]*n+a[6]*r+a[10]*i,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,n){return this.x=Tn(this.x,e.x,n.x),this.y=Tn(this.y,e.y,n.y),this.z=Tn(this.z,e.z,n.z),this}clampScalar(e,n){return this.x=Tn(this.x,e,n),this.y=Tn(this.y,e,n),this.z=Tn(this.z,e,n),this}clampLength(e,n){const r=this.length();return this.divideScalar(r||1).multiplyScalar(Tn(r,e,n))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,n){return this.x+=(e.x-this.x)*n,this.y+=(e.y-this.y)*n,this.z+=(e.z-this.z)*n,this}lerpVectors(e,n,r){return this.x=e.x+(n.x-e.x)*r,this.y=e.y+(n.y-e.y)*r,this.z=e.z+(n.z-e.z)*r,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,n){const r=e.x,i=e.y,a=e.z,s=n.x,l=n.y,c=n.z;return this.x=i*c-a*l,this.y=a*s-r*c,this.z=r*l-i*s,this}projectOnVector(e){const n=e.lengthSq();if(n===0)return this.set(0,0,0);const r=e.dot(this)/n;return this.copy(e).multiplyScalar(r)}projectOnPlane(e){return IN.copy(this).projectOnVector(e),this.sub(IN)}reflect(e){return this.sub(IN.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){const n=Math.sqrt(this.lengthSq()*e.lengthSq());if(n===0)return Math.PI/2;const r=this.dot(e)/n;return Math.acos(Tn(r,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const n=this.x-e.x,r=this.y-e.y,i=this.z-e.z;return n*n+r*r+i*i}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,n,r){const i=Math.sin(n)*e;return this.x=i*Math.sin(r),this.y=Math.cos(n)*e,this.z=i*Math.cos(r),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,n,r){return this.x=e*Math.sin(n),this.y=r,this.z=e*Math.cos(n),this}setFromMatrixPosition(e){const n=e.elements;return this.x=n[12],this.y=n[13],this.z=n[14],this}setFromMatrixScale(e){const n=this.setFromMatrixColumn(e,0).length(),r=this.setFromMatrixColumn(e,1).length(),i=this.setFromMatrixColumn(e,2).length();return this.x=n,this.y=r,this.z=i,this}setFromMatrixColumn(e,n){return this.fromArray(e.elements,n*4)}setFromMatrix3Column(e,n){return this.fromArray(e.elements,n*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,n=0){return this.x=e[n],this.y=e[n+1],this.z=e[n+2],this}toArray(e=[],n=0){return e[n]=this.x,e[n+1]=this.y,e[n+2]=this.z,e}fromBufferAttribute(e,n){return this.x=e.getX(n),this.y=e.getY(n),this.z=e.getZ(n),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const e=Math.random()*Math.PI*2,n=Math.random()*2-1,r=Math.sqrt(1-n*n);return this.x=r*Math.cos(e),this.y=n,this.z=r*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}};const IN=new it,MH=new pf;let vn=class DZ{constructor(e,n,r,i,a,s,l,c,u){DZ.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],e!==void 0&&this.set(e,n,r,i,a,s,l,c,u)}set(e,n,r,i,a,s,l,c,u){const d=this.elements;return d[0]=e,d[1]=i,d[2]=l,d[3]=n,d[4]=a,d[5]=c,d[6]=r,d[7]=s,d[8]=u,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){const n=this.elements,r=e.elements;return n[0]=r[0],n[1]=r[1],n[2]=r[2],n[3]=r[3],n[4]=r[4],n[5]=r[5],n[6]=r[6],n[7]=r[7],n[8]=r[8],this}extractBasis(e,n,r){return e.setFromMatrix3Column(this,0),n.setFromMatrix3Column(this,1),r.setFromMatrix3Column(this,2),this}setFromMatrix4(e){const n=e.elements;return this.set(n[0],n[4],n[8],n[1],n[5],n[9],n[2],n[6],n[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,n){const r=e.elements,i=n.elements,a=this.elements,s=r[0],l=r[3],c=r[6],u=r[1],d=r[4],f=r[7],g=r[2],p=r[5],b=r[8],v=i[0],x=i[3],y=i[6],E=i[1],w=i[4],A=i[7],T=i[2],C=i[5],N=i[8];return a[0]=s*v+l*E+c*T,a[3]=s*x+l*w+c*C,a[6]=s*y+l*A+c*N,a[1]=u*v+d*E+f*T,a[4]=u*x+d*w+f*C,a[7]=u*y+d*A+f*N,a[2]=g*v+p*E+b*T,a[5]=g*x+p*w+b*C,a[8]=g*y+p*A+b*N,this}multiplyScalar(e){const n=this.elements;return n[0]*=e,n[3]*=e,n[6]*=e,n[1]*=e,n[4]*=e,n[7]*=e,n[2]*=e,n[5]*=e,n[8]*=e,this}determinant(){const e=this.elements,n=e[0],r=e[1],i=e[2],a=e[3],s=e[4],l=e[5],c=e[6],u=e[7],d=e[8];return n*s*d-n*l*u-r*a*d+r*l*c+i*a*u-i*s*c}invert(){const e=this.elements,n=e[0],r=e[1],i=e[2],a=e[3],s=e[4],l=e[5],c=e[6],u=e[7],d=e[8],f=d*s-l*u,g=l*c-d*a,p=u*a-s*c,b=n*f+r*g+i*p;if(b===0)return this.set(0,0,0,0,0,0,0,0,0);const v=1/b;return e[0]=f*v,e[1]=(i*u-d*r)*v,e[2]=(l*r-i*s)*v,e[3]=g*v,e[4]=(d*n-i*c)*v,e[5]=(i*a-l*n)*v,e[6]=p*v,e[7]=(r*c-u*n)*v,e[8]=(s*n-r*a)*v,this}transpose(){let e;const n=this.elements;return e=n[1],n[1]=n[3],n[3]=e,e=n[2],n[2]=n[6],n[6]=e,e=n[5],n[5]=n[7],n[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){const n=this.elements;return e[0]=n[0],e[1]=n[3],e[2]=n[6],e[3]=n[1],e[4]=n[4],e[5]=n[7],e[6]=n[2],e[7]=n[5],e[8]=n[8],this}setUvTransform(e,n,r,i,a,s,l){const c=Math.cos(a),u=Math.sin(a);return this.set(r*c,r*u,-r*(c*s+u*l)+s+e,-i*u,i*c,-i*(-u*s+c*l)+l+n,0,0,1),this}scale(e,n){return this.premultiply(FN.makeScale(e,n)),this}rotate(e){return this.premultiply(FN.makeRotation(-e)),this}translate(e,n){return this.premultiply(FN.makeTranslation(e,n)),this}makeTranslation(e,n){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,n,0,0,1),this}makeRotation(e){const n=Math.cos(e),r=Math.sin(e);return this.set(n,-r,0,r,n,0,0,0,1),this}makeScale(e,n){return this.set(e,0,0,0,n,0,0,0,1),this}equals(e){const n=this.elements,r=e.elements;for(let i=0;i<9;i++)if(n[i]!==r[i])return!1;return!0}fromArray(e,n=0){for(let r=0;r<9;r++)this.elements[r]=e[r+n];return this}toArray(e=[],n=0){const r=this.elements;return e[n]=r[0],e[n+1]=r[1],e[n+2]=r[2],e[n+3]=r[3],e[n+4]=r[4],e[n+5]=r[5],e[n+6]=r[6],e[n+7]=r[7],e[n+8]=r[8],e}clone(){return new this.constructor().fromArray(this.elements)}};const FN=new vn,EH=new vn().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),AH=new vn().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function mke(){const t={enabled:!0,workingColorSpace:Bp,spaces:{},convert:function(i,a,s){return this.enabled===!1||a===s||!a||!s||(this.spaces[a].transfer===ar&&(i.r=Oc(i.r),i.g=Oc(i.g),i.b=Oc(i.b)),this.spaces[a].primaries!==this.spaces[s].primaries&&(i.applyMatrix3(this.spaces[a].toXYZ),i.applyMatrix3(this.spaces[s].fromXYZ)),this.spaces[s].transfer===ar&&(i.r=xp(i.r),i.g=xp(i.g),i.b=xp(i.b))),i},workingToColorSpace:function(i,a){return this.convert(i,this.workingColorSpace,a)},colorSpaceToWorking:function(i,a){return this.convert(i,a,this.workingColorSpace)},getPrimaries:function(i){return this.spaces[i].primaries},getTransfer:function(i){return i===Qu?Ww:this.spaces[i].transfer},getToneMappingMode:function(i){return this.spaces[i].outputColorSpaceConfig.toneMappingMode||"standard"},getLuminanceCoefficients:function(i,a=this.workingColorSpace){return i.fromArray(this.spaces[a].luminanceCoefficients)},define:function(i){Object.assign(this.spaces,i)},_getMatrix:function(i,a,s){return i.copy(this.spaces[a].toXYZ).multiply(this.spaces[s].fromXYZ)},_getDrawingBufferColorSpace:function(i){return this.spaces[i].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(i=this.workingColorSpace){return this.spaces[i].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(i,a){return rb("ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),t.workingToColorSpace(i,a)},toWorkingColorSpace:function(i,a){return rb("ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking()."),t.colorSpaceToWorking(i,a)}},e=[.64,.33,.3,.6,.15,.06],n=[.2126,.7152,.0722],r=[.3127,.329];return t.define({[Bp]:{primaries:e,whitePoint:r,transfer:Ww,toXYZ:EH,fromXYZ:AH,luminanceCoefficients:n,workingColorSpaceConfig:{unpackColorSpace:Js},outputColorSpaceConfig:{drawingBufferColorSpace:Js}},[Js]:{primaries:e,whitePoint:r,transfer:ar,toXYZ:EH,fromXYZ:AH,luminanceCoefficients:n,outputColorSpaceConfig:{drawingBufferColorSpace:Js}}}),t}const zn=mke();function Oc(t){return t<.04045?t*.0773993808:Math.pow(t*.9478672986+.0521327014,2.4)}function xp(t){return t<.0031308?t*12.92:1.055*Math.pow(t,.41666)-.055}let pm,pke=class{static getDataURL(e,n="image/png"){if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>"u")return e.src;let r;if(e instanceof HTMLCanvasElement)r=e;else{pm===void 0&&(pm=Kw("canvas")),pm.width=e.width,pm.height=e.height;const i=pm.getContext("2d");e instanceof ImageData?i.putImageData(e,0,0):i.drawImage(e,0,0,e.width,e.height),r=pm}return r.toDataURL(n)}static sRGBToLinear(e){if(typeof HTMLImageElement<"u"&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&e instanceof ImageBitmap){const n=Kw("canvas");n.width=e.width,n.height=e.height;const r=n.getContext("2d");r.drawImage(e,0,0,e.width,e.height);const i=r.getImageData(0,0,e.width,e.height),a=i.data;for(let s=0;s1),this.pmremVersion=0}get width(){return this.source.getSize(zN).x}get height(){return this.source.getSize(zN).y}get depth(){return this.source.getSize(zN).z}get image(){return this.source.data}set image(e=null){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(e,n){this.updateRanges.push({start:e,count:n})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.channel=e.channel,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.colorSpace=e.colorSpace,this.renderTarget=e.renderTarget,this.isRenderTargetTexture=e.isRenderTargetTexture,this.isArrayTexture=e.isArrayTexture,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}setValues(e){for(const n in e){const r=e[n];if(r===void 0){nn(`Texture.setValues(): parameter '${n}' has value of undefined.`);continue}const i=this[n];if(i===void 0){nn(`Texture.setValues(): property '${n}' does not exist.`);continue}i&&r&&i.isVector2&&r.isVector2||i&&r&&i.isVector3&&r.isVector3||i&&r&&i.isMatrix3&&r.isMatrix3?i.copy(r):this[n]=r}}toJSON(e){const n=e===void 0||typeof e=="string";if(!n&&e.textures[this.uuid]!==void 0)return e.textures[this.uuid];const r={metadata:{version:4.7,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(r.userData=this.userData),n||(e.textures[this.uuid]=r),r}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(e){if(this.mapping!==_Z)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case yP:e.x=e.x-Math.floor(e.x);break;case Tc:e.x=e.x<0?0:1;break;case vP:Math.abs(Math.floor(e.x)%2)===1?e.x=Math.ceil(e.x)-e.x:e.x=e.x-Math.floor(e.x);break}if(e.y<0||e.y>1)switch(this.wrapT){case yP:e.y=e.y-Math.floor(e.y);break;case Tc:e.y=e.y<0?0:1;break;case vP:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-e.y:e.y=e.y-Math.floor(e.y);break}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){e===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){e===!0&&this.pmremVersion++}};Yo.DEFAULT_IMAGE=null;Yo.DEFAULT_MAPPING=_Z;Yo.DEFAULT_ANISOTROPY=1;let ci=class OZ{constructor(e=0,n=0,r=0,i=1){OZ.prototype.isVector4=!0,this.x=e,this.y=n,this.z=r,this.w=i}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,n,r,i){return this.x=e,this.y=n,this.z=r,this.w=i,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,n){switch(e){case 0:this.x=n;break;case 1:this.y=n;break;case 2:this.z=n;break;case 3:this.w=n;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w!==void 0?e.w:1,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,n){return this.x=e.x+n.x,this.y=e.y+n.y,this.z=e.z+n.z,this.w=e.w+n.w,this}addScaledVector(e,n){return this.x+=e.x*n,this.y+=e.y*n,this.z+=e.z*n,this.w+=e.w*n,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,n){return this.x=e.x-n.x,this.y=e.y-n.y,this.z=e.z-n.z,this.w=e.w-n.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){const n=this.x,r=this.y,i=this.z,a=this.w,s=e.elements;return this.x=s[0]*n+s[4]*r+s[8]*i+s[12]*a,this.y=s[1]*n+s[5]*r+s[9]*i+s[13]*a,this.z=s[2]*n+s[6]*r+s[10]*i+s[14]*a,this.w=s[3]*n+s[7]*r+s[11]*i+s[15]*a,this}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this.w/=e.w,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);const n=Math.sqrt(1-e.w*e.w);return n<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/n,this.y=e.y/n,this.z=e.z/n),this}setAxisAngleFromRotationMatrix(e){let n,r,i,a;const c=e.elements,u=c[0],d=c[4],f=c[8],g=c[1],p=c[5],b=c[9],v=c[2],x=c[6],y=c[10];if(Math.abs(d-g)<.01&&Math.abs(f-v)<.01&&Math.abs(b-x)<.01){if(Math.abs(d+g)<.1&&Math.abs(f+v)<.1&&Math.abs(b+x)<.1&&Math.abs(u+p+y-3)<.1)return this.set(1,0,0,0),this;n=Math.PI;const w=(u+1)/2,A=(p+1)/2,T=(y+1)/2,C=(d+g)/4,N=(f+v)/4,O=(b+x)/4;return w>A&&w>T?w<.01?(r=0,i=.707106781,a=.707106781):(r=Math.sqrt(w),i=C/r,a=N/r):A>T?A<.01?(r=.707106781,i=0,a=.707106781):(i=Math.sqrt(A),r=C/i,a=O/i):T<.01?(r=.707106781,i=.707106781,a=0):(a=Math.sqrt(T),r=N/a,i=O/a),this.set(r,i,a,n),this}let E=Math.sqrt((x-b)*(x-b)+(f-v)*(f-v)+(g-d)*(g-d));return Math.abs(E)<.001&&(E=1),this.x=(x-b)/E,this.y=(f-v)/E,this.z=(g-d)/E,this.w=Math.acos((u+p+y-1)/2),this}setFromMatrixPosition(e){const n=e.elements;return this.x=n[12],this.y=n[13],this.z=n[14],this.w=n[15],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this}clamp(e,n){return this.x=Tn(this.x,e.x,n.x),this.y=Tn(this.y,e.y,n.y),this.z=Tn(this.z,e.z,n.z),this.w=Tn(this.w,e.w,n.w),this}clampScalar(e,n){return this.x=Tn(this.x,e,n),this.y=Tn(this.y,e,n),this.z=Tn(this.z,e,n),this.w=Tn(this.w,e,n),this}clampLength(e,n){const r=this.length();return this.divideScalar(r||1).multiplyScalar(Tn(r,e,n))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,n){return this.x+=(e.x-this.x)*n,this.y+=(e.y-this.y)*n,this.z+=(e.z-this.z)*n,this.w+=(e.w-this.w)*n,this}lerpVectors(e,n,r){return this.x=e.x+(n.x-e.x)*r,this.y=e.y+(n.y-e.y)*r,this.z=e.z+(n.z-e.z)*r,this.w=e.w+(n.w-e.w)*r,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w}fromArray(e,n=0){return this.x=e[n],this.y=e[n+1],this.z=e[n+2],this.w=e[n+3],this}toArray(e=[],n=0){return e[n]=this.x,e[n+1]=this.y,e[n+2]=this.z,e[n+3]=this.w,e}fromBufferAttribute(e,n){return this.x=e.getX(n),this.y=e.getY(n),this.z=e.getZ(n),this.w=e.getW(n),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}},bke=class extends Nf{constructor(e=1,n=1,r={}){super(),r=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:lo,depthBuffer:!0,stencilBuffer:!1,resolveDepthBuffer:!0,resolveStencilBuffer:!0,depthTexture:null,samples:0,count:1,depth:1,multiview:!1},r),this.isRenderTarget=!0,this.width=e,this.height=n,this.depth=r.depth,this.scissor=new ci(0,0,e,n),this.scissorTest=!1,this.viewport=new ci(0,0,e,n);const i={width:e,height:n,depth:r.depth},a=new Yo(i);this.textures=[];const s=r.count;for(let l=0;l1);this.dispose()}this.viewport.set(0,0,e,n),this.scissor.set(0,0,e,n)}clone(){return new this.constructor().copy(this)}copy(e){this.width=e.width,this.height=e.height,this.depth=e.depth,this.scissor.copy(e.scissor),this.scissorTest=e.scissorTest,this.viewport.copy(e.viewport),this.textures.length=0;for(let n=0,r=e.textures.length;n=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y&&e.z>=this.min.z&&e.z<=this.max.z}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,n){return n.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y&&e.max.z>=this.min.z&&e.min.z<=this.max.z}intersectsSphere(e){return this.clampPoint(e.center,Ao),Ao.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let n,r;return e.normal.x>0?(n=e.normal.x*this.min.x,r=e.normal.x*this.max.x):(n=e.normal.x*this.max.x,r=e.normal.x*this.min.x),e.normal.y>0?(n+=e.normal.y*this.min.y,r+=e.normal.y*this.max.y):(n+=e.normal.y*this.max.y,r+=e.normal.y*this.min.y),e.normal.z>0?(n+=e.normal.z*this.min.z,r+=e.normal.z*this.max.z):(n+=e.normal.z*this.max.z,r+=e.normal.z*this.min.z),n<=-e.constant&&r>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(Cx),Yv.subVectors(this.max,Cx),gm.subVectors(e.a,Cx),xm.subVectors(e.b,Cx),bm.subVectors(e.c,Cx),Tu.subVectors(xm,gm),Nu.subVectors(bm,xm),rh.subVectors(gm,bm);let n=[0,-Tu.z,Tu.y,0,-Nu.z,Nu.y,0,-rh.z,rh.y,Tu.z,0,-Tu.x,Nu.z,0,-Nu.x,rh.z,0,-rh.x,-Tu.y,Tu.x,0,-Nu.y,Nu.x,0,-rh.y,rh.x,0];return!BN(n,gm,xm,bm,Yv)||(n=[1,0,0,0,1,0,0,0,1],!BN(n,gm,xm,bm,Yv))?!1:(Zv.crossVectors(Tu,Nu),n=[Zv.x,Zv.y,Zv.z],BN(n,gm,xm,bm,Yv))}clampPoint(e,n){return n.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,Ao).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(Ao).length()*.5),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()?this:(tc[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),tc[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),tc[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),tc[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),tc[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),tc[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),tc[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),tc[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(tc),this)}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(e){return this.min.fromArray(e.min),this.max.fromArray(e.max),this}};const tc=[new it,new it,new it,new it,new it,new it,new it,new it],Ao=new it,Xv=new xf,gm=new it,xm=new it,bm=new it,Tu=new it,Nu=new it,rh=new it,Cx=new it,Yv=new it,Zv=new it,ih=new it;function BN(t,e,n,r,i){for(let a=0,s=t.length-3;a<=s;a+=3){ih.fromArray(t,a);const l=i.x*Math.abs(ih.x)+i.y*Math.abs(ih.y)+i.z*Math.abs(ih.z),c=e.dot(ih),u=n.dot(ih),d=r.dot(ih);if(Math.max(-Math.max(c,u,d),Math.min(c,u,d))>l)return!1}return!0}const vke=new xf,kx=new it,HN=new it;let nE=class{constructor(e=new it,n=-1){this.isSphere=!0,this.center=e,this.radius=n}set(e,n){return this.center.copy(e),this.radius=n,this}setFromPoints(e,n){const r=this.center;n!==void 0?r.copy(n):vke.setFromPoints(e).getCenter(r);let i=0;for(let a=0,s=e.length;athis.radius*this.radius&&(n.sub(this.center).normalize(),n.multiplyScalar(this.radius).add(this.center)),n}getBoundingBox(e){return this.isEmpty()?(e.makeEmpty(),e):(e.set(this.center,this.center),e.expandByScalar(this.radius),e)}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius=this.radius*e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;kx.subVectors(e,this.center);const n=kx.lengthSq();if(n>this.radius*this.radius){const r=Math.sqrt(n),i=(r-this.radius)*.5;this.center.addScaledVector(kx,i/r),this.radius+=i}return this}union(e){return e.isEmpty()?this:this.isEmpty()?(this.copy(e),this):(this.center.equals(e.center)===!0?this.radius=Math.max(this.radius,e.radius):(HN.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(kx.copy(e.center).add(HN)),this.expandByPoint(kx.copy(e.center).sub(HN))),this)}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(e){return this.radius=e.radius,this.center.fromArray(e.center),this}};const nc=new it,$N=new it,Qv=new it,Cu=new it,VN=new it,Jv=new it,GN=new it;let LO=class{constructor(e=new it,n=new it(0,0,-1)){this.origin=e,this.direction=n}set(e,n){return this.origin.copy(e),this.direction.copy(n),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,n){return n.copy(this.origin).addScaledVector(this.direction,e)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,nc)),this}closestPointToPoint(e,n){n.subVectors(e,this.origin);const r=n.dot(this.direction);return r<0?n.copy(this.origin):n.copy(this.origin).addScaledVector(this.direction,r)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){const n=nc.subVectors(e,this.origin).dot(this.direction);return n<0?this.origin.distanceToSquared(e):(nc.copy(this.origin).addScaledVector(this.direction,n),nc.distanceToSquared(e))}distanceSqToSegment(e,n,r,i){$N.copy(e).add(n).multiplyScalar(.5),Qv.copy(n).sub(e).normalize(),Cu.copy(this.origin).sub($N);const a=e.distanceTo(n)*.5,s=-this.direction.dot(Qv),l=Cu.dot(this.direction),c=-Cu.dot(Qv),u=Cu.lengthSq(),d=Math.abs(1-s*s);let f,g,p,b;if(d>0)if(f=s*c-l,g=s*l-c,b=a*d,f>=0)if(g>=-b)if(g<=b){const v=1/d;f*=v,g*=v,p=f*(f+s*g+2*l)+g*(s*f+g+2*c)+u}else g=a,f=Math.max(0,-(s*g+l)),p=-f*f+g*(g+2*c)+u;else g=-a,f=Math.max(0,-(s*g+l)),p=-f*f+g*(g+2*c)+u;else g<=-b?(f=Math.max(0,-(-s*a+l)),g=f>0?-a:Math.min(Math.max(-a,-c),a),p=-f*f+g*(g+2*c)+u):g<=b?(f=0,g=Math.min(Math.max(-a,-c),a),p=g*(g+2*c)+u):(f=Math.max(0,-(s*a+l)),g=f>0?a:Math.min(Math.max(-a,-c),a),p=-f*f+g*(g+2*c)+u);else g=s>0?-a:a,f=Math.max(0,-(s*g+l)),p=-f*f+g*(g+2*c)+u;return r&&r.copy(this.origin).addScaledVector(this.direction,f),i&&i.copy($N).addScaledVector(Qv,g),p}intersectSphere(e,n){nc.subVectors(e.center,this.origin);const r=nc.dot(this.direction),i=nc.dot(nc)-r*r,a=e.radius*e.radius;if(i>a)return null;const s=Math.sqrt(a-i),l=r-s,c=r+s;return c<0?null:l<0?this.at(c,n):this.at(l,n)}intersectsSphere(e){return e.radius<0?!1:this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){const n=e.normal.dot(this.direction);if(n===0)return e.distanceToPoint(this.origin)===0?0:null;const r=-(this.origin.dot(e.normal)+e.constant)/n;return r>=0?r:null}intersectPlane(e,n){const r=this.distanceToPlane(e);return r===null?null:this.at(r,n)}intersectsPlane(e){const n=e.distanceToPoint(this.origin);return n===0||e.normal.dot(this.direction)*n<0}intersectBox(e,n){let r,i,a,s,l,c;const u=1/this.direction.x,d=1/this.direction.y,f=1/this.direction.z,g=this.origin;return u>=0?(r=(e.min.x-g.x)*u,i=(e.max.x-g.x)*u):(r=(e.max.x-g.x)*u,i=(e.min.x-g.x)*u),d>=0?(a=(e.min.y-g.y)*d,s=(e.max.y-g.y)*d):(a=(e.max.y-g.y)*d,s=(e.min.y-g.y)*d),r>s||a>i||((a>r||isNaN(r))&&(r=a),(s=0?(l=(e.min.z-g.z)*f,c=(e.max.z-g.z)*f):(l=(e.max.z-g.z)*f,c=(e.min.z-g.z)*f),r>c||l>i)||((l>r||r!==r)&&(r=l),(c=0?r:i,n)}intersectsBox(e){return this.intersectBox(e,nc)!==null}intersectTriangle(e,n,r,i,a){VN.subVectors(n,e),Jv.subVectors(r,e),GN.crossVectors(VN,Jv);let s=this.direction.dot(GN),l;if(s>0){if(i)return null;l=1}else if(s<0)l=-1,s=-s;else return null;Cu.subVectors(this.origin,e);const c=l*this.direction.dot(Jv.crossVectors(Cu,Jv));if(c<0)return null;const u=l*this.direction.dot(VN.cross(Cu));if(u<0||c+u>s)return null;const d=-l*Cu.dot(GN);return d<0?null:this.at(d/s,a)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}},mi=class YP{constructor(e,n,r,i,a,s,l,c,u,d,f,g,p,b,v,x){YP.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],e!==void 0&&this.set(e,n,r,i,a,s,l,c,u,d,f,g,p,b,v,x)}set(e,n,r,i,a,s,l,c,u,d,f,g,p,b,v,x){const y=this.elements;return y[0]=e,y[4]=n,y[8]=r,y[12]=i,y[1]=a,y[5]=s,y[9]=l,y[13]=c,y[2]=u,y[6]=d,y[10]=f,y[14]=g,y[3]=p,y[7]=b,y[11]=v,y[15]=x,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new YP().fromArray(this.elements)}copy(e){const n=this.elements,r=e.elements;return n[0]=r[0],n[1]=r[1],n[2]=r[2],n[3]=r[3],n[4]=r[4],n[5]=r[5],n[6]=r[6],n[7]=r[7],n[8]=r[8],n[9]=r[9],n[10]=r[10],n[11]=r[11],n[12]=r[12],n[13]=r[13],n[14]=r[14],n[15]=r[15],this}copyPosition(e){const n=this.elements,r=e.elements;return n[12]=r[12],n[13]=r[13],n[14]=r[14],this}setFromMatrix3(e){const n=e.elements;return this.set(n[0],n[3],n[6],0,n[1],n[4],n[7],0,n[2],n[5],n[8],0,0,0,0,1),this}extractBasis(e,n,r){return e.setFromMatrixColumn(this,0),n.setFromMatrixColumn(this,1),r.setFromMatrixColumn(this,2),this}makeBasis(e,n,r){return this.set(e.x,n.x,r.x,0,e.y,n.y,r.y,0,e.z,n.z,r.z,0,0,0,0,1),this}extractRotation(e){const n=this.elements,r=e.elements,i=1/ym.setFromMatrixColumn(e,0).length(),a=1/ym.setFromMatrixColumn(e,1).length(),s=1/ym.setFromMatrixColumn(e,2).length();return n[0]=r[0]*i,n[1]=r[1]*i,n[2]=r[2]*i,n[3]=0,n[4]=r[4]*a,n[5]=r[5]*a,n[6]=r[6]*a,n[7]=0,n[8]=r[8]*s,n[9]=r[9]*s,n[10]=r[10]*s,n[11]=0,n[12]=0,n[13]=0,n[14]=0,n[15]=1,this}makeRotationFromEuler(e){const n=this.elements,r=e.x,i=e.y,a=e.z,s=Math.cos(r),l=Math.sin(r),c=Math.cos(i),u=Math.sin(i),d=Math.cos(a),f=Math.sin(a);if(e.order==="XYZ"){const g=s*d,p=s*f,b=l*d,v=l*f;n[0]=c*d,n[4]=-c*f,n[8]=u,n[1]=p+b*u,n[5]=g-v*u,n[9]=-l*c,n[2]=v-g*u,n[6]=b+p*u,n[10]=s*c}else if(e.order==="YXZ"){const g=c*d,p=c*f,b=u*d,v=u*f;n[0]=g+v*l,n[4]=b*l-p,n[8]=s*u,n[1]=s*f,n[5]=s*d,n[9]=-l,n[2]=p*l-b,n[6]=v+g*l,n[10]=s*c}else if(e.order==="ZXY"){const g=c*d,p=c*f,b=u*d,v=u*f;n[0]=g-v*l,n[4]=-s*f,n[8]=b+p*l,n[1]=p+b*l,n[5]=s*d,n[9]=v-g*l,n[2]=-s*u,n[6]=l,n[10]=s*c}else if(e.order==="ZYX"){const g=s*d,p=s*f,b=l*d,v=l*f;n[0]=c*d,n[4]=b*u-p,n[8]=g*u+v,n[1]=c*f,n[5]=v*u+g,n[9]=p*u-b,n[2]=-u,n[6]=l*c,n[10]=s*c}else if(e.order==="YZX"){const g=s*c,p=s*u,b=l*c,v=l*u;n[0]=c*d,n[4]=v-g*f,n[8]=b*f+p,n[1]=f,n[5]=s*d,n[9]=-l*d,n[2]=-u*d,n[6]=p*f+b,n[10]=g-v*f}else if(e.order==="XZY"){const g=s*c,p=s*u,b=l*c,v=l*u;n[0]=c*d,n[4]=-f,n[8]=u*d,n[1]=g*f+v,n[5]=s*d,n[9]=p*f-b,n[2]=b*f-p,n[6]=l*d,n[10]=v*f+g}return n[3]=0,n[7]=0,n[11]=0,n[12]=0,n[13]=0,n[14]=0,n[15]=1,this}makeRotationFromQuaternion(e){return this.compose(_ke,e,wke)}lookAt(e,n,r){const i=this.elements;return bs.subVectors(e,n),bs.lengthSq()===0&&(bs.z=1),bs.normalize(),ku.crossVectors(r,bs),ku.lengthSq()===0&&(Math.abs(r.z)===1?bs.x+=1e-4:bs.z+=1e-4,bs.normalize(),ku.crossVectors(r,bs)),ku.normalize(),e_.crossVectors(bs,ku),i[0]=ku.x,i[4]=e_.x,i[8]=bs.x,i[1]=ku.y,i[5]=e_.y,i[9]=bs.y,i[2]=ku.z,i[6]=e_.z,i[10]=bs.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,n){const r=e.elements,i=n.elements,a=this.elements,s=r[0],l=r[4],c=r[8],u=r[12],d=r[1],f=r[5],g=r[9],p=r[13],b=r[2],v=r[6],x=r[10],y=r[14],E=r[3],w=r[7],A=r[11],T=r[15],C=i[0],N=i[4],O=i[8],k=i[12],j=i[1],z=i[5],I=i[9],q=i[13],R=i[2],W=i[6],K=i[10],G=i[14],J=i[3],ee=i[7],Z=i[11],F=i[15];return a[0]=s*C+l*j+c*R+u*J,a[4]=s*N+l*z+c*W+u*ee,a[8]=s*O+l*I+c*K+u*Z,a[12]=s*k+l*q+c*G+u*F,a[1]=d*C+f*j+g*R+p*J,a[5]=d*N+f*z+g*W+p*ee,a[9]=d*O+f*I+g*K+p*Z,a[13]=d*k+f*q+g*G+p*F,a[2]=b*C+v*j+x*R+y*J,a[6]=b*N+v*z+x*W+y*ee,a[10]=b*O+v*I+x*K+y*Z,a[14]=b*k+v*q+x*G+y*F,a[3]=E*C+w*j+A*R+T*J,a[7]=E*N+w*z+A*W+T*ee,a[11]=E*O+w*I+A*K+T*Z,a[15]=E*k+w*q+A*G+T*F,this}multiplyScalar(e){const n=this.elements;return n[0]*=e,n[4]*=e,n[8]*=e,n[12]*=e,n[1]*=e,n[5]*=e,n[9]*=e,n[13]*=e,n[2]*=e,n[6]*=e,n[10]*=e,n[14]*=e,n[3]*=e,n[7]*=e,n[11]*=e,n[15]*=e,this}determinant(){const e=this.elements,n=e[0],r=e[4],i=e[8],a=e[12],s=e[1],l=e[5],c=e[9],u=e[13],d=e[2],f=e[6],g=e[10],p=e[14],b=e[3],v=e[7],x=e[11],y=e[15];return b*(+a*c*f-i*u*f-a*l*g+r*u*g+i*l*p-r*c*p)+v*(+n*c*p-n*u*g+a*s*g-i*s*p+i*u*d-a*c*d)+x*(+n*u*f-n*l*p-a*s*f+r*s*p+a*l*d-r*u*d)+y*(-i*l*d-n*c*f+n*l*g+i*s*f-r*s*g+r*c*d)}transpose(){const e=this.elements;let n;return n=e[1],e[1]=e[4],e[4]=n,n=e[2],e[2]=e[8],e[8]=n,n=e[6],e[6]=e[9],e[9]=n,n=e[3],e[3]=e[12],e[12]=n,n=e[7],e[7]=e[13],e[13]=n,n=e[11],e[11]=e[14],e[14]=n,this}setPosition(e,n,r){const i=this.elements;return e.isVector3?(i[12]=e.x,i[13]=e.y,i[14]=e.z):(i[12]=e,i[13]=n,i[14]=r),this}invert(){const e=this.elements,n=e[0],r=e[1],i=e[2],a=e[3],s=e[4],l=e[5],c=e[6],u=e[7],d=e[8],f=e[9],g=e[10],p=e[11],b=e[12],v=e[13],x=e[14],y=e[15],E=f*x*u-v*g*u+v*c*p-l*x*p-f*c*y+l*g*y,w=b*g*u-d*x*u-b*c*p+s*x*p+d*c*y-s*g*y,A=d*v*u-b*f*u+b*l*p-s*v*p-d*l*y+s*f*y,T=b*f*c-d*v*c-b*l*g+s*v*g+d*l*x-s*f*x,C=n*E+r*w+i*A+a*T;if(C===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const N=1/C;return e[0]=E*N,e[1]=(v*g*a-f*x*a-v*i*p+r*x*p+f*i*y-r*g*y)*N,e[2]=(l*x*a-v*c*a+v*i*u-r*x*u-l*i*y+r*c*y)*N,e[3]=(f*c*a-l*g*a-f*i*u+r*g*u+l*i*p-r*c*p)*N,e[4]=w*N,e[5]=(d*x*a-b*g*a+b*i*p-n*x*p-d*i*y+n*g*y)*N,e[6]=(b*c*a-s*x*a-b*i*u+n*x*u+s*i*y-n*c*y)*N,e[7]=(s*g*a-d*c*a+d*i*u-n*g*u-s*i*p+n*c*p)*N,e[8]=A*N,e[9]=(b*f*a-d*v*a-b*r*p+n*v*p+d*r*y-n*f*y)*N,e[10]=(s*v*a-b*l*a+b*r*u-n*v*u-s*r*y+n*l*y)*N,e[11]=(d*l*a-s*f*a-d*r*u+n*f*u+s*r*p-n*l*p)*N,e[12]=T*N,e[13]=(d*v*i-b*f*i+b*r*g-n*v*g-d*r*x+n*f*x)*N,e[14]=(b*l*i-s*v*i-b*r*c+n*v*c+s*r*x-n*l*x)*N,e[15]=(s*f*i-d*l*i+d*r*c-n*f*c-s*r*g+n*l*g)*N,this}scale(e){const n=this.elements,r=e.x,i=e.y,a=e.z;return n[0]*=r,n[4]*=i,n[8]*=a,n[1]*=r,n[5]*=i,n[9]*=a,n[2]*=r,n[6]*=i,n[10]*=a,n[3]*=r,n[7]*=i,n[11]*=a,this}getMaxScaleOnAxis(){const e=this.elements,n=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],r=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],i=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(n,r,i))}makeTranslation(e,n,r){return e.isVector3?this.set(1,0,0,e.x,0,1,0,e.y,0,0,1,e.z,0,0,0,1):this.set(1,0,0,e,0,1,0,n,0,0,1,r,0,0,0,1),this}makeRotationX(e){const n=Math.cos(e),r=Math.sin(e);return this.set(1,0,0,0,0,n,-r,0,0,r,n,0,0,0,0,1),this}makeRotationY(e){const n=Math.cos(e),r=Math.sin(e);return this.set(n,0,r,0,0,1,0,0,-r,0,n,0,0,0,0,1),this}makeRotationZ(e){const n=Math.cos(e),r=Math.sin(e);return this.set(n,-r,0,0,r,n,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,n){const r=Math.cos(n),i=Math.sin(n),a=1-r,s=e.x,l=e.y,c=e.z,u=a*s,d=a*l;return this.set(u*s+r,u*l-i*c,u*c+i*l,0,u*l+i*c,d*l+r,d*c-i*s,0,u*c-i*l,d*c+i*s,a*c*c+r,0,0,0,0,1),this}makeScale(e,n,r){return this.set(e,0,0,0,0,n,0,0,0,0,r,0,0,0,0,1),this}makeShear(e,n,r,i,a,s){return this.set(1,r,a,0,e,1,s,0,n,i,1,0,0,0,0,1),this}compose(e,n,r){const i=this.elements,a=n._x,s=n._y,l=n._z,c=n._w,u=a+a,d=s+s,f=l+l,g=a*u,p=a*d,b=a*f,v=s*d,x=s*f,y=l*f,E=c*u,w=c*d,A=c*f,T=r.x,C=r.y,N=r.z;return i[0]=(1-(v+y))*T,i[1]=(p+A)*T,i[2]=(b-w)*T,i[3]=0,i[4]=(p-A)*C,i[5]=(1-(g+y))*C,i[6]=(x+E)*C,i[7]=0,i[8]=(b+w)*N,i[9]=(x-E)*N,i[10]=(1-(g+v))*N,i[11]=0,i[12]=e.x,i[13]=e.y,i[14]=e.z,i[15]=1,this}decompose(e,n,r){const i=this.elements;let a=ym.set(i[0],i[1],i[2]).length();const s=ym.set(i[4],i[5],i[6]).length(),l=ym.set(i[8],i[9],i[10]).length();this.determinant()<0&&(a=-a),e.x=i[12],e.y=i[13],e.z=i[14],To.copy(this);const u=1/a,d=1/s,f=1/l;return To.elements[0]*=u,To.elements[1]*=u,To.elements[2]*=u,To.elements[4]*=d,To.elements[5]*=d,To.elements[6]*=d,To.elements[8]*=f,To.elements[9]*=f,To.elements[10]*=f,n.setFromRotationMatrix(To),r.x=a,r.y=s,r.z=l,this}makePerspective(e,n,r,i,a,s,l=pl,c=!1){const u=this.elements,d=2*a/(n-e),f=2*a/(r-i),g=(n+e)/(n-e),p=(r+i)/(r-i);let b,v;if(c)b=a/(s-a),v=s*a/(s-a);else if(l===pl)b=-(s+a)/(s-a),v=-2*s*a/(s-a);else if(l===qw)b=-s/(s-a),v=-s*a/(s-a);else throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+l);return u[0]=d,u[4]=0,u[8]=g,u[12]=0,u[1]=0,u[5]=f,u[9]=p,u[13]=0,u[2]=0,u[6]=0,u[10]=b,u[14]=v,u[3]=0,u[7]=0,u[11]=-1,u[15]=0,this}makeOrthographic(e,n,r,i,a,s,l=pl,c=!1){const u=this.elements,d=2/(n-e),f=2/(r-i),g=-(n+e)/(n-e),p=-(r+i)/(r-i);let b,v;if(c)b=1/(s-a),v=s/(s-a);else if(l===pl)b=-2/(s-a),v=-(s+a)/(s-a);else if(l===qw)b=-1/(s-a),v=-a/(s-a);else throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+l);return u[0]=d,u[4]=0,u[8]=0,u[12]=g,u[1]=0,u[5]=f,u[9]=0,u[13]=p,u[2]=0,u[6]=0,u[10]=b,u[14]=v,u[3]=0,u[7]=0,u[11]=0,u[15]=1,this}equals(e){const n=this.elements,r=e.elements;for(let i=0;i<16;i++)if(n[i]!==r[i])return!1;return!0}fromArray(e,n=0){for(let r=0;r<16;r++)this.elements[r]=e[r+n];return this}toArray(e=[],n=0){const r=this.elements;return e[n]=r[0],e[n+1]=r[1],e[n+2]=r[2],e[n+3]=r[3],e[n+4]=r[4],e[n+5]=r[5],e[n+6]=r[6],e[n+7]=r[7],e[n+8]=r[8],e[n+9]=r[9],e[n+10]=r[10],e[n+11]=r[11],e[n+12]=r[12],e[n+13]=r[13],e[n+14]=r[14],e[n+15]=r[15],e}};const ym=new it,To=new mi,_ke=new it(0,0,0),wke=new it(1,1,1),ku=new it,e_=new it,bs=new it,TH=new mi,NH=new pf;let Nd=class IZ{constructor(e=0,n=0,r=0,i=IZ.DEFAULT_ORDER){this.isEuler=!0,this._x=e,this._y=n,this._z=r,this._order=i}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,n,r,i=this._order){return this._x=e,this._y=n,this._z=r,this._order=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,n=this._order,r=!0){const i=e.elements,a=i[0],s=i[4],l=i[8],c=i[1],u=i[5],d=i[9],f=i[2],g=i[6],p=i[10];switch(n){case"XYZ":this._y=Math.asin(Tn(l,-1,1)),Math.abs(l)<.9999999?(this._x=Math.atan2(-d,p),this._z=Math.atan2(-s,a)):(this._x=Math.atan2(g,u),this._z=0);break;case"YXZ":this._x=Math.asin(-Tn(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(l,p),this._z=Math.atan2(c,u)):(this._y=Math.atan2(-f,a),this._z=0);break;case"ZXY":this._x=Math.asin(Tn(g,-1,1)),Math.abs(g)<.9999999?(this._y=Math.atan2(-f,p),this._z=Math.atan2(-s,u)):(this._y=0,this._z=Math.atan2(c,a));break;case"ZYX":this._y=Math.asin(-Tn(f,-1,1)),Math.abs(f)<.9999999?(this._x=Math.atan2(g,p),this._z=Math.atan2(c,a)):(this._x=0,this._z=Math.atan2(-s,u));break;case"YZX":this._z=Math.asin(Tn(c,-1,1)),Math.abs(c)<.9999999?(this._x=Math.atan2(-d,u),this._y=Math.atan2(-f,a)):(this._x=0,this._y=Math.atan2(l,p));break;case"XZY":this._z=Math.asin(-Tn(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(g,u),this._y=Math.atan2(l,a)):(this._x=Math.atan2(-d,p),this._y=0);break;default:nn("Euler: .setFromRotationMatrix() encountered an unknown order: "+n)}return this._order=n,r===!0&&this._onChangeCallback(),this}setFromQuaternion(e,n,r){return TH.makeRotationFromQuaternion(e),this.setFromRotationMatrix(TH,n,r)}setFromVector3(e,n=this._order){return this.set(e.x,e.y,e.z,n)}reorder(e){return NH.setFromEuler(this),this.setFromQuaternion(NH,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],e[3]!==void 0&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],n=0){return e[n]=this._x,e[n+1]=this._y,e[n+2]=this._z,e[n+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};Nd.DEFAULT_ORDER="XYZ";let FZ=class{constructor(){this.mask=1}set(e){this.mask=(1<>>0}enable(e){this.mask|=1<1){for(let n=0;n1){for(let r=0;r0&&(i.userData=this.userData),i.layers=this.layers.mask,i.matrix=this.matrix.toArray(),i.up=this.up.toArray(),this.matrixAutoUpdate===!1&&(i.matrixAutoUpdate=!1),this.isInstancedMesh&&(i.type="InstancedMesh",i.count=this.count,i.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(i.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(i.type="BatchedMesh",i.perObjectFrustumCulled=this.perObjectFrustumCulled,i.sortObjects=this.sortObjects,i.drawRanges=this._drawRanges,i.reservedRanges=this._reservedRanges,i.geometryInfo=this._geometryInfo.map(l=>({...l,boundingBox:l.boundingBox?l.boundingBox.toJSON():void 0,boundingSphere:l.boundingSphere?l.boundingSphere.toJSON():void 0})),i.instanceInfo=this._instanceInfo.map(l=>({...l})),i.availableInstanceIds=this._availableInstanceIds.slice(),i.availableGeometryIds=this._availableGeometryIds.slice(),i.nextIndexStart=this._nextIndexStart,i.nextVertexStart=this._nextVertexStart,i.geometryCount=this._geometryCount,i.maxInstanceCount=this._maxInstanceCount,i.maxVertexCount=this._maxVertexCount,i.maxIndexCount=this._maxIndexCount,i.geometryInitialized=this._geometryInitialized,i.matricesTexture=this._matricesTexture.toJSON(e),i.indirectTexture=this._indirectTexture.toJSON(e),this._colorsTexture!==null&&(i.colorsTexture=this._colorsTexture.toJSON(e)),this.boundingSphere!==null&&(i.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(i.boundingBox=this.boundingBox.toJSON()));function a(l,c){return l[c.uuid]===void 0&&(l[c.uuid]=c.toJSON(e)),c.uuid}if(this.isScene)this.background&&(this.background.isColor?i.background=this.background.toJSON():this.background.isTexture&&(i.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(i.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){i.geometry=a(e.geometries,this.geometry);const l=this.geometry.parameters;if(l!==void 0&&l.shapes!==void 0){const c=l.shapes;if(Array.isArray(c))for(let u=0,d=c.length;u0){i.children=[];for(let l=0;l0){i.animations=[];for(let l=0;l0&&(r.geometries=l),c.length>0&&(r.materials=c),u.length>0&&(r.textures=u),d.length>0&&(r.images=d),f.length>0&&(r.shapes=f),g.length>0&&(r.skeletons=g),p.length>0&&(r.animations=p),b.length>0&&(r.nodes=b)}return r.object=i,r;function s(l){const c=[];for(const u in l){const d=l[u];delete d.metadata,c.push(d)}return c}}clone(e){return new this.constructor().copy(this,e)}copy(e,n=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),n===!0)for(let r=0;r0?i.multiplyScalar(1/Math.sqrt(a)):i.set(0,0,0)}static getBarycoord(e,n,r,i,a){No.subVectors(i,n),ic.subVectors(r,n),qN.subVectors(e,n);const s=No.dot(No),l=No.dot(ic),c=No.dot(qN),u=ic.dot(ic),d=ic.dot(qN),f=s*u-l*l;if(f===0)return a.set(0,0,0),null;const g=1/f,p=(u*c-l*d)*g,b=(s*d-l*c)*g;return a.set(1-p-b,b,p)}static containsPoint(e,n,r,i){return this.getBarycoord(e,n,r,i,ac)===null?!1:ac.x>=0&&ac.y>=0&&ac.x+ac.y<=1}static getInterpolation(e,n,r,i,a,s,l,c){return this.getBarycoord(e,n,r,i,ac)===null?(c.x=0,c.y=0,"z"in c&&(c.z=0),"w"in c&&(c.w=0),null):(c.setScalar(0),c.addScaledVector(a,ac.x),c.addScaledVector(s,ac.y),c.addScaledVector(l,ac.z),c)}static getInterpolatedAttribute(e,n,r,i,a,s){return ZN.setScalar(0),QN.setScalar(0),JN.setScalar(0),ZN.fromBufferAttribute(e,n),QN.fromBufferAttribute(e,r),JN.fromBufferAttribute(e,i),s.setScalar(0),s.addScaledVector(ZN,a.x),s.addScaledVector(QN,a.y),s.addScaledVector(JN,a.z),s}static isFrontFacing(e,n,r,i){return No.subVectors(r,n),ic.subVectors(e,n),No.cross(ic).dot(i)<0}set(e,n,r){return this.a.copy(e),this.b.copy(n),this.c.copy(r),this}setFromPointsAndIndices(e,n,r,i){return this.a.copy(e[n]),this.b.copy(e[r]),this.c.copy(e[i]),this}setFromAttributeAndIndices(e,n,r,i){return this.a.fromBufferAttribute(e,n),this.b.fromBufferAttribute(e,r),this.c.fromBufferAttribute(e,i),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return No.subVectors(this.c,this.b),ic.subVectors(this.a,this.b),No.cross(ic).length()*.5}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(e){return Jm.getNormal(this.a,this.b,this.c,e)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(e,n){return Jm.getBarycoord(e,this.a,this.b,this.c,n)}getInterpolation(e,n,r,i,a){return Jm.getInterpolation(e,this.a,this.b,this.c,n,r,i,a)}containsPoint(e){return Jm.containsPoint(e,this.a,this.b,this.c)}isFrontFacing(e){return Jm.isFrontFacing(this.a,this.b,this.c,e)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,n){const r=this.a,i=this.b,a=this.c;let s,l;wm.subVectors(i,r),Sm.subVectors(a,r),KN.subVectors(e,r);const c=wm.dot(KN),u=Sm.dot(KN);if(c<=0&&u<=0)return n.copy(r);XN.subVectors(e,i);const d=wm.dot(XN),f=Sm.dot(XN);if(d>=0&&f<=d)return n.copy(i);const g=c*f-d*u;if(g<=0&&c>=0&&d<=0)return s=c/(c-d),n.copy(r).addScaledVector(wm,s);YN.subVectors(e,a);const p=wm.dot(YN),b=Sm.dot(YN);if(b>=0&&p<=b)return n.copy(a);const v=p*u-c*b;if(v<=0&&u>=0&&b<=0)return l=u/(u-b),n.copy(r).addScaledVector(Sm,l);const x=d*b-p*f;if(x<=0&&f-d>=0&&p-b>=0)return DH.subVectors(a,i),l=(f-d)/(f-d+(p-b)),n.copy(i).addScaledVector(DH,l);const y=1/(x+v+g);return s=v*y,l=g*y,n.copy(r).addScaledVector(wm,s).addScaledVector(Sm,l)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}};const UZ={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Pu={h:0,s:0,l:0},n_={h:0,s:0,l:0};function eC(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+(e-t)*6*n:n<1/2?e:n<2/3?t+(e-t)*6*(2/3-n):t}let Nn=class{constructor(e,n,r){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,n,r)}set(e,n,r){if(n===void 0&&r===void 0){const i=e;i&&i.isColor?this.copy(i):typeof i=="number"?this.setHex(i):typeof i=="string"&&this.setStyle(i)}else this.setRGB(e,n,r);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,n=Js){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,zn.colorSpaceToWorking(this,n),this}setRGB(e,n,r,i=zn.workingColorSpace){return this.r=e,this.g=n,this.b=r,zn.colorSpaceToWorking(this,i),this}setHSL(e,n,r,i=zn.workingColorSpace){if(e=hke(e,1),n=Tn(n,0,1),r=Tn(r,0,1),n===0)this.r=this.g=this.b=r;else{const a=r<=.5?r*(1+n):r+n-r*n,s=2*r-a;this.r=eC(s,a,e+1/3),this.g=eC(s,a,e),this.b=eC(s,a,e-1/3)}return zn.colorSpaceToWorking(this,i),this}setStyle(e,n=Js){function r(a){a!==void 0&&parseFloat(a)<1&&nn("Color: Alpha component of "+e+" will be ignored.")}let i;if(i=/^(\w+)\(([^\)]*)\)/.exec(e)){let a;const s=i[1],l=i[2];switch(s){case"rgb":case"rgba":if(a=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(l))return r(a[4]),this.setRGB(Math.min(255,parseInt(a[1],10))/255,Math.min(255,parseInt(a[2],10))/255,Math.min(255,parseInt(a[3],10))/255,n);if(a=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(l))return r(a[4]),this.setRGB(Math.min(100,parseInt(a[1],10))/100,Math.min(100,parseInt(a[2],10))/100,Math.min(100,parseInt(a[3],10))/100,n);break;case"hsl":case"hsla":if(a=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(l))return r(a[4]),this.setHSL(parseFloat(a[1])/360,parseFloat(a[2])/100,parseFloat(a[3])/100,n);break;default:nn("Color: Unknown color model "+e)}}else if(i=/^\#([A-Fa-f\d]+)$/.exec(e)){const a=i[1],s=a.length;if(s===3)return this.setRGB(parseInt(a.charAt(0),16)/15,parseInt(a.charAt(1),16)/15,parseInt(a.charAt(2),16)/15,n);if(s===6)return this.setHex(parseInt(a,16),n);nn("Color: Invalid hex color "+e)}else if(e&&e.length>0)return this.setColorName(e,n);return this}setColorName(e,n=Js){const r=UZ[e.toLowerCase()];return r!==void 0?this.setHex(r,n):nn("Color: Unknown color "+e),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=Oc(e.r),this.g=Oc(e.g),this.b=Oc(e.b),this}copyLinearToSRGB(e){return this.r=xp(e.r),this.g=xp(e.g),this.b=xp(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=Js){return zn.workingToColorSpace(ma.copy(this),e),Math.round(Tn(ma.r*255,0,255))*65536+Math.round(Tn(ma.g*255,0,255))*256+Math.round(Tn(ma.b*255,0,255))}getHexString(e=Js){return("000000"+this.getHex(e).toString(16)).slice(-6)}getHSL(e,n=zn.workingColorSpace){zn.workingToColorSpace(ma.copy(this),n);const r=ma.r,i=ma.g,a=ma.b,s=Math.max(r,i,a),l=Math.min(r,i,a);let c,u;const d=(l+s)/2;if(l===s)c=0,u=0;else{const f=s-l;switch(u=d<=.5?f/(s+l):f/(2-s-l),s){case r:c=(i-a)/f+(i0!=e>0&&this.version++,this._alphaTest=e}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(e!==void 0)for(const n in e){const r=e[n];if(r===void 0){nn(`Material: parameter '${n}' has value of undefined.`);continue}const i=this[n];if(i===void 0){nn(`Material: '${n}' is not a property of THREE.${this.type}.`);continue}i&&i.isColor?i.set(r):i&&i.isVector3&&r&&r.isVector3?i.copy(r):this[n]=r}}toJSON(e){const n=e===void 0||typeof e=="string";n&&(e={textures:{},images:{}});const r={metadata:{version:4.7,type:"Material",generator:"Material.toJSON"}};r.uuid=this.uuid,r.type=this.type,this.name!==""&&(r.name=this.name),this.color&&this.color.isColor&&(r.color=this.color.getHex()),this.roughness!==void 0&&(r.roughness=this.roughness),this.metalness!==void 0&&(r.metalness=this.metalness),this.sheen!==void 0&&(r.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(r.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(r.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(r.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(r.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(r.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(r.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(r.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(r.shininess=this.shininess),this.clearcoat!==void 0&&(r.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(r.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(r.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(r.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(r.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,r.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.sheenColorMap&&this.sheenColorMap.isTexture&&(r.sheenColorMap=this.sheenColorMap.toJSON(e).uuid),this.sheenRoughnessMap&&this.sheenRoughnessMap.isTexture&&(r.sheenRoughnessMap=this.sheenRoughnessMap.toJSON(e).uuid),this.dispersion!==void 0&&(r.dispersion=this.dispersion),this.iridescence!==void 0&&(r.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(r.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(r.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(r.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(r.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),this.anisotropy!==void 0&&(r.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(r.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(r.anisotropyMap=this.anisotropyMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(r.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(r.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(r.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(r.lightMap=this.lightMap.toJSON(e).uuid,r.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(r.aoMap=this.aoMap.toJSON(e).uuid,r.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(r.bumpMap=this.bumpMap.toJSON(e).uuid,r.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(r.normalMap=this.normalMap.toJSON(e).uuid,r.normalMapType=this.normalMapType,r.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(r.displacementMap=this.displacementMap.toJSON(e).uuid,r.displacementScale=this.displacementScale,r.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(r.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(r.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(r.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(r.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(r.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(r.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(r.envMap=this.envMap.toJSON(e).uuid,this.combine!==void 0&&(r.combine=this.combine)),this.envMapRotation!==void 0&&(r.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(r.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(r.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(r.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(r.gradientMap=this.gradientMap.toJSON(e).uuid),this.transmission!==void 0&&(r.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(r.transmissionMap=this.transmissionMap.toJSON(e).uuid),this.thickness!==void 0&&(r.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(r.thicknessMap=this.thicknessMap.toJSON(e).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(r.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(r.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(r.size=this.size),this.shadowSide!==null&&(r.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(r.sizeAttenuation=this.sizeAttenuation),this.blending!==gp&&(r.blending=this.blending),this.side!==Td&&(r.side=this.side),this.vertexColors===!0&&(r.vertexColors=!0),this.opacity<1&&(r.opacity=this.opacity),this.transparent===!0&&(r.transparent=!0),this.blendSrc!==lP&&(r.blendSrc=this.blendSrc),this.blendDst!==cP&&(r.blendDst=this.blendDst),this.blendEquation!==_h&&(r.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(r.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(r.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(r.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(r.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(r.blendAlpha=this.blendAlpha),this.depthFunc!==Fp&&(r.depthFunc=this.depthFunc),this.depthTest===!1&&(r.depthTest=this.depthTest),this.depthWrite===!1&&(r.depthWrite=this.depthWrite),this.colorWrite===!1&&(r.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(r.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==yH&&(r.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(r.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(r.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==mm&&(r.stencilFail=this.stencilFail),this.stencilZFail!==mm&&(r.stencilZFail=this.stencilZFail),this.stencilZPass!==mm&&(r.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(r.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(r.rotation=this.rotation),this.polygonOffset===!0&&(r.polygonOffset=!0),this.polygonOffsetFactor!==0&&(r.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(r.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(r.linewidth=this.linewidth),this.dashSize!==void 0&&(r.dashSize=this.dashSize),this.gapSize!==void 0&&(r.gapSize=this.gapSize),this.scale!==void 0&&(r.scale=this.scale),this.dithering===!0&&(r.dithering=!0),this.alphaTest>0&&(r.alphaTest=this.alphaTest),this.alphaHash===!0&&(r.alphaHash=!0),this.alphaToCoverage===!0&&(r.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(r.premultipliedAlpha=!0),this.forceSinglePass===!0&&(r.forceSinglePass=!0),this.wireframe===!0&&(r.wireframe=!0),this.wireframeLinewidth>1&&(r.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!=="round"&&(r.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!=="round"&&(r.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(r.flatShading=!0),this.visible===!1&&(r.visible=!1),this.toneMapped===!1&&(r.toneMapped=!1),this.fog===!1&&(r.fog=!1),Object.keys(this.userData).length>0&&(r.userData=this.userData);function i(a){const s=[];for(const l in a){const c=a[l];delete c.metadata,s.push(c)}return s}if(n){const a=i(e.textures),s=i(e.images);a.length>0&&(r.textures=a),s.length>0&&(r.images=s)}return r}clone(){return new this.constructor().copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.blendColor.copy(e.blendColor),this.blendAlpha=e.blendAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;const n=e.clippingPlanes;let r=null;if(n!==null){const i=n.length;r=new Array(i);for(let a=0;a!==i;++a)r[a]=n[a].clone()}return this.clippingPlanes=r,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaHash=e.alphaHash,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(e){e===!0&&this.version++}},IO=class extends vg{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new Nn(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Nd,this.combine=TO,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}};const ai=new it,r_=new bn;let Nke=0,ho=class{constructor(e,n,r=!1){if(Array.isArray(e))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:Nke++}),this.name="",this.array=e,this.itemSize=n,this.count=e!==void 0?e.length/n:0,this.normalized=r,this.usage=vH,this.updateRanges=[],this.gpuType=Nc,this.version=0}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,n){this.updateRanges.push({start:e,count:n})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this.gpuType=e.gpuType,this}copyAt(e,n,r){e*=this.itemSize,r*=n.itemSize;for(let i=0,a=this.itemSize;in.count&&nn("BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),n.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new xf);const e=this.attributes.position,n=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){Qr("BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new it(-1/0,-1/0,-1/0),new it(1/0,1/0,1/0));return}if(e!==void 0){if(this.boundingBox.setFromBufferAttribute(e),n)for(let r=0,i=n.length;r0&&(e.userData=this.userData),this.parameters!==void 0){const c=this.parameters;for(const u in c)c[u]!==void 0&&(e[u]=c[u]);return e}e.data={attributes:{}};const n=this.index;n!==null&&(e.data.index={type:n.array.constructor.name,array:Array.prototype.slice.call(n.array)});const r=this.attributes;for(const c in r){const u=r[c];e.data.attributes[c]=u.toJSON(e.data)}const i={};let a=!1;for(const c in this.morphAttributes){const u=this.morphAttributes[c],d=[];for(let f=0,g=u.length;f0&&(i[c]=d,a=!0)}a&&(e.data.morphAttributes=i,e.data.morphTargetsRelative=this.morphTargetsRelative);const s=this.groups;s.length>0&&(e.data.groups=JSON.parse(JSON.stringify(s)));const l=this.boundingSphere;return l!==null&&(e.data.boundingSphere=l.toJSON()),e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const n={};this.name=e.name;const r=e.index;r!==null&&this.setIndex(r.clone());const i=e.attributes;for(const u in i){const d=i[u];this.setAttribute(u,d.clone(n))}const a=e.morphAttributes;for(const u in a){const d=[],f=a[u];for(let g=0,p=f.length;g0){const i=n[r[0]];if(i!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let a=0,s=i.length;a(e.far-e.near)**2))&&(OH.copy(a).invert(),ah.copy(e.ray).applyMatrix4(OH),!(r.boundingBox!==null&&ah.intersectsBox(r.boundingBox)===!1)&&this._computeIntersections(e,n,ah)))}_computeIntersections(e,n,r){let i;const a=this.geometry,s=this.material,l=a.index,c=a.attributes.position,u=a.attributes.uv,d=a.attributes.uv1,f=a.attributes.normal,g=a.groups,p=a.drawRange;if(l!==null)if(Array.isArray(s))for(let b=0,v=g.length;bn.far?null:{distance:u,point:c_.clone(),object:t}}function u_(t,e,n,r,i,a,s,l,c,u){t.getVertexPosition(l,a_),t.getVertexPosition(c,s_),t.getVertexPosition(u,o_);const d=kke(t,e,n,r,a_,s_,o_,IH);if(d){const f=new it;jx.getBarycoord(IH,a_,s_,o_,f),i&&(d.uv=jx.getInterpolatedAttribute(i,l,c,u,f,new bn)),a&&(d.uv1=jx.getInterpolatedAttribute(a,l,c,u,f,new bn)),s&&(d.normal=jx.getInterpolatedAttribute(s,l,c,u,f,new it),d.normal.dot(r.direction)>0&&d.normal.multiplyScalar(-1));const g={a:l,b:c,c:u,normal:new it,materialIndex:0};jx.getNormal(a_,s_,o_,g.normal),d.face=g,d.barycoord=f}return d}let FO=class $Z extends Ll{constructor(e=1,n=1,r=1,i=1,a=1,s=1){super(),this.type="BoxGeometry",this.parameters={width:e,height:n,depth:r,widthSegments:i,heightSegments:a,depthSegments:s};const l=this;i=Math.floor(i),a=Math.floor(a),s=Math.floor(s);const c=[],u=[],d=[],f=[];let g=0,p=0;b("z","y","x",-1,-1,r,n,e,s,a,0),b("z","y","x",1,-1,r,n,-e,s,a,1),b("x","z","y",1,1,e,r,n,i,s,2),b("x","z","y",1,-1,e,r,-n,i,s,3),b("x","y","z",1,-1,e,n,r,i,a,4),b("x","y","z",-1,-1,e,n,-r,i,a,5),this.setIndex(c),this.setAttribute("position",new $o(u,3)),this.setAttribute("normal",new $o(d,3)),this.setAttribute("uv",new $o(f,2));function b(v,x,y,E,w,A,T,C,N,O,k){const j=A/N,z=T/O,I=A/2,q=T/2,R=C/2,W=N+1,K=O+1;let G=0,J=0;const ee=new it;for(let Z=0;Z0?1:-1,d.push(ee.x,ee.y,ee.z),f.push(V/N),f.push(1-Z/O),G+=1}}for(let Z=0;Znt.mutate([bt.id]),disabled:nt.isPending||(Q?.layer_num??0)<=1,className:`px-4 py-2 text-xs font-medium rounded-lg transition-colors ${(Q?.layer_num??0)<=1?"bg-gray-100 dark:bg-bambu-dark text-gray-400 dark:text-bambu-gray/50 cursor-not-allowed":"bg-red-100 dark:bg-red-500/20 text-red-600 dark:text-red-400 hover:bg-red-200 dark:hover:bg-red-500/30 border border-red-300 dark:border-red-500/30"}`,title:(Q?.layer_num??0)<=1?"Wait for layer 2+":"Skip this object",children:"Skip"})]},bt.id))})]})]}):o.jsx("div",{className:"flex items-center justify-center py-12",children:o.jsx(xt,{className:"w-5 h-5 animate-spin text-bambu-gray"})})]})]}),z&&o.jsx(ohe,{printerName:t.name,errors:Q?.hms_errors||[],onClose:()=>I(!1)}),F&&o.jsx(tCe,{isOpen:!!F,onClose:()=>V(null),printerId:t.id,printerName:t.name,amsId:F.amsId,amsLabel:F.amsLabel,initialMode:F.mode,thresholds:a}),ne&&o.jsx(nCe,{isOpen:!!ne,onClose:()=>le(null),trayUuid:ne.trayUuid,trayInfo:ne.trayInfo}),y&&o.jsx(xCe,{printer:t,onClose:()=>E(!1)}),oe&&Ee&&o.jsx(gCe,{printer:t,firmwareInfo:Ee,onClose:()=>pe(!1)}),wt&&o.jsx("div",{className:"fixed inset-0 z-40",onClick:()=>Qt(null)})]})}function pCe({onClose:t,onAdd:e,existingSerials:n}){const[r,i]=S.useState({name:"",serial_number:"",ip_address:"",access_code:"",model:"",auto_archive:!0}),[a,s]=S.useState(!1),[l,c]=S.useState([]),[u,d]=S.useState(""),[f,g]=S.useState(!1),[p,b]=S.useState(!1),[v,x]=S.useState("192.168.1.0/24"),[y,E]=S.useState({scanned:0,total:0});S.useEffect(()=>{nl.getInfo().then(N=>{b(N.is_docker)}).catch(()=>{})},[]);const w=l.filter(N=>!n.includes(N.serial)),A=async()=>{d(""),c([]),s(!0),g(!1),E({scanned:0,total:0});try{if(p){await nl.startSubnetScan(v);const N=setInterval(async()=>{try{const O=await nl.getScanStatus();E({scanned:O.scanned,total:O.total});const k=await nl.getDiscoveredPrinters();c(k),O.running||(clearInterval(N),s(!1),g(!0))}catch(O){console.error("Failed to get scan status:",O)}},500)}else{await nl.startDiscovery(10);const N=setInterval(async()=>{try{const O=await nl.getDiscoveredPrinters();c(O)}catch(O){console.error("Failed to get discovered printers:",O)}},1e3);setTimeout(async()=>{clearInterval(N);try{await nl.stopDiscovery()}catch{}s(!1),g(!0);try{const O=await nl.getDiscoveredPrinters();c(O)}catch(O){console.error("Failed to get final discovered printers:",O)}},1e4)}}catch(N){console.error("Failed to start discovery:",N),d(N instanceof Error?N.message:"Failed to start discovery"),s(!1),g(!0)}},T=N=>N?{O1D:"H2D",O1C:"H2C",O1S:"H2S","BL-P001":"X1C","BL-P002":"X1","BL-P003":"X1E",C11:"P1S",C12:"P1P",C13:"P2S",N2S:"A1",N1:"A1 Mini",X1C:"X1C",X1:"X1",X1E:"X1E",P1S:"P1S",P1P:"P1P",P2S:"P2S",A1:"A1","A1 Mini":"A1 Mini",H2D:"H2D",H2C:"H2C",H2S:"H2S"}[N]||N:"",C=N=>{i({...r,name:N.name||"",serial_number:N.serial,ip_address:N.ip_address,model:T(N.model)}),c([])};return S.useEffect(()=>()=>{nl.stopDiscovery().catch(()=>{}),nl.stopSubnetScan().catch(()=>{})},[]),S.useEffect(()=>{const N=O=>{O.key==="Escape"&&t()};return window.addEventListener("keydown",N),()=>window.removeEventListener("keydown",N)},[t]),o.jsx("div",{className:"fixed inset-0 bg-black/50 flex items-center justify-center z-50",onClick:t,children:o.jsx(At,{className:"w-full max-w-md",onClick:N=>N.stopPropagation(),children:o.jsxs(Tt,{children:[o.jsx("h2",{className:"text-xl font-semibold mb-4",children:"Add Printer"}),o.jsxs("div",{className:"mb-4 pb-4 border-b border-bambu-dark-tertiary",children:[p&&o.jsxs("div",{className:"mb-3",children:[o.jsx("label",{className:"block text-sm text-bambu-gray mb-1",children:"Subnet to scan"}),o.jsx("input",{type:"text",className:"w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none text-sm",value:v,onChange:N=>x(N.target.value),placeholder:"192.168.1.0/24",disabled:a}),o.jsxs("p",{className:"mt-1 text-xs text-bambu-gray",children:["Docker detected. Enter your printer's subnet in CIDR notation. Requires ",o.jsx("code",{className:"text-bambu-green",children:"network_mode: host"})," in docker-compose.yml."]})]}),o.jsx(Pe,{type:"button",variant:"secondary",onClick:A,disabled:a,className:"w-full",children:a?o.jsxs(o.Fragment,{children:[o.jsx(xt,{className:"w-4 h-4 animate-spin"}),p&&y.total>0?`Scanning... ${y.scanned}/${y.total}`:"Scanning..."]}):o.jsxs(o.Fragment,{children:[o.jsx(_l,{className:"w-4 h-4"}),p?"Scan Subnet for Printers":"Discover Printers on Network"]})}),u&&o.jsx("div",{className:"mt-2 text-sm text-red-400",children:u}),w.length>0&&o.jsx("div",{className:"mt-3 space-y-2 max-h-40 overflow-y-auto",children:w.map(N=>o.jsxs("div",{className:"flex items-center justify-between p-2 bg-bambu-dark rounded-lg hover:bg-bambu-dark-secondary cursor-pointer transition-colors",onClick:()=>C(N),children:[o.jsxs("div",{className:"min-w-0 flex-1",children:[o.jsx("p",{className:"font-medium text-white text-sm truncate",children:N.name||N.serial}),o.jsxs("p",{className:"text-xs text-bambu-gray truncate",children:[T(N.model)||"Unknown"," • ",N.ip_address]})]}),o.jsx(Os,{className:"w-4 h-4 text-bambu-gray -rotate-90 flex-shrink-0 ml-2"})]},N.serial))}),a&&o.jsx("p",{className:"mt-2 text-sm text-bambu-gray text-center",children:p?"Scanning subnet for Bambu printers...":"Scanning network..."}),f&&!a&&l.length===0&&o.jsxs("p",{className:"mt-2 text-sm text-bambu-gray text-center",children:["No printers found",p?" in the specified subnet":" on the network","."]}),f&&!a&&l.length>0&&w.length===0&&o.jsx("p",{className:"mt-2 text-sm text-bambu-gray text-center",children:"All discovered printers are already configured."})]}),o.jsxs("form",{onSubmit:N=>{N.preventDefault(),e(r)},className:"space-y-4",children:[o.jsxs("div",{children:[o.jsx("label",{className:"block text-sm text-bambu-gray mb-1",children:"Name"}),o.jsx("input",{type:"text",required:!0,className:"w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:r.name,onChange:N=>i({...r,name:N.target.value}),placeholder:"My Printer"})]}),o.jsxs("div",{children:[o.jsx("label",{className:"block text-sm text-bambu-gray mb-1",children:"IP Address"}),o.jsx("input",{type:"text",required:!0,pattern:"\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}",className:"w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:r.ip_address,onChange:N=>i({...r,ip_address:N.target.value}),placeholder:"192.168.1.100"})]}),o.jsxs("div",{children:[o.jsx("label",{className:"block text-sm text-bambu-gray mb-1",children:"Serial Number"}),o.jsx("input",{type:"text",required:!0,className:"w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:r.serial_number,onChange:N=>i({...r,serial_number:N.target.value}),placeholder:"01P00A000000000"})]}),o.jsxs("div",{children:[o.jsx("label",{className:"block text-sm text-bambu-gray mb-1",children:"Access Code"}),o.jsx("input",{type:"password",required:!0,className:"w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:r.access_code,onChange:N=>i({...r,access_code:N.target.value}),placeholder:"From printer settings"})]}),o.jsxs("div",{children:[o.jsx("label",{className:"block text-sm text-bambu-gray mb-1",children:"Model (optional)"}),o.jsxs("select",{className:"w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:r.model||"",onChange:N=>i({...r,model:N.target.value}),children:[o.jsx("option",{value:"",children:"Select model..."}),o.jsxs("optgroup",{label:"H2 Series",children:[o.jsx("option",{value:"H2C",children:"H2C"}),o.jsx("option",{value:"H2D",children:"H2D"}),o.jsx("option",{value:"H2S",children:"H2S"})]}),o.jsxs("optgroup",{label:"X1 Series",children:[o.jsx("option",{value:"X1E",children:"X1E"}),o.jsx("option",{value:"X1C",children:"X1 Carbon"}),o.jsx("option",{value:"X1",children:"X1"})]}),o.jsxs("optgroup",{label:"P Series",children:[o.jsx("option",{value:"P2S",children:"P2S"}),o.jsx("option",{value:"P1S",children:"P1S"}),o.jsx("option",{value:"P1P",children:"P1P"})]}),o.jsxs("optgroup",{label:"A1 Series",children:[o.jsx("option",{value:"A1",children:"A1"}),o.jsx("option",{value:"A1 Mini",children:"A1 Mini"})]})]})]}),o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx("input",{type:"checkbox",id:"auto_archive",checked:r.auto_archive,onChange:N=>i({...r,auto_archive:N.target.checked}),className:"rounded border-bambu-dark-tertiary bg-bambu-dark text-bambu-green focus:ring-bambu-green"}),o.jsx("label",{htmlFor:"auto_archive",className:"text-sm text-bambu-gray",children:"Auto-archive completed prints"})]}),o.jsxs("div",{className:"flex gap-3 pt-4",children:[o.jsx(Pe,{type:"button",variant:"secondary",onClick:t,className:"flex-1",children:"Cancel"}),o.jsx(Pe,{type:"submit",className:"flex-1",children:"Add Printer"})]})]})]})})})}function gCe({printer:t,firmwareInfo:e,onClose:n}){const r=dn(),{showToast:i}=vr(),[a,s]=S.useState(null),[l,c]=S.useState(!1),[u,d]=S.useState(null),{data:f,isLoading:g}=pt({queryKey:["firmwarePrepare",t.id],queryFn:()=>m1.prepareUpload(t.id),staleTime:3e4}),p=_t({mutationFn:()=>m1.startUpload(t.id),onSuccess:()=>{c(!0);const v=setInterval(async()=>{try{const x=await m1.getUploadStatus(t.id);s(x),(x.status==="complete"||x.status==="error")&&(clearInterval(v),d(null),c(!1),x.status==="complete"&&(i("Firmware uploaded! Trigger update from printer screen.","success"),r.invalidateQueries({queryKey:["firmwareUpdate",t.id]})))}catch{}},2e3);d(v)},onError:v=>{i(`Failed to start upload: ${v.message}`,"error"),c(!1)}});S.useEffect(()=>()=>{u&&clearInterval(u)},[u]);const b=()=>{s(null),p.mutate()};return o.jsx("div",{className:"fixed inset-0 bg-black/50 flex items-center justify-center z-50",children:o.jsx(At,{className:"w-full max-w-md mx-4",children:o.jsxs(Tt,{children:[o.jsxs("div",{className:"flex items-start gap-3 mb-4",children:[o.jsx("div",{className:"p-2 rounded-full bg-orange-500/20",children:o.jsx(Wi,{className:"w-5 h-5 text-orange-400"})}),o.jsxs("div",{className:"flex-1",children:[o.jsx("h3",{className:"text-lg font-semibold text-white",children:"Firmware Update"}),o.jsx("p",{className:"text-sm text-bambu-gray mt-1",children:t.name})]})]}),o.jsxs("div",{className:"bg-bambu-dark rounded-lg p-3 mb-4",children:[o.jsxs("div",{className:"flex justify-between items-center text-sm",children:[o.jsx("span",{className:"text-bambu-gray",children:"Current:"}),o.jsx("span",{className:"text-white font-mono",children:e.current_version||"Unknown"})]}),o.jsxs("div",{className:"flex justify-between items-center text-sm mt-1",children:[o.jsx("span",{className:"text-bambu-gray",children:"Latest:"}),o.jsx("span",{className:"text-orange-400 font-mono",children:e.latest_version})]}),e.release_notes&&o.jsxs("details",{className:"mt-3 text-sm",children:[o.jsx("summary",{className:"text-orange-400 cursor-pointer hover:underline",children:"Release Notes"}),o.jsx("div",{className:"mt-2 text-bambu-gray text-xs max-h-40 overflow-y-auto whitespace-pre-wrap",children:e.release_notes})]})]}),g?o.jsxs("div",{className:"flex items-center gap-2 text-bambu-gray text-sm mb-4",children:[o.jsx(xt,{className:"w-4 h-4 animate-spin"}),"Checking prerequisites..."]}):f&&!l&&!a?o.jsx("div",{className:"mb-4",children:f.can_proceed?o.jsxs("div",{className:"flex items-center gap-2 text-bambu-green text-sm",children:[o.jsx(bd,{className:"w-4 h-4"}),"SD card ready. Click below to upload firmware."]}):o.jsx("div",{className:"space-y-1",children:f.errors.map((v,x)=>o.jsxs("div",{className:"flex items-center gap-2 text-red-400 text-sm",children:[o.jsx(Sa,{className:"w-4 h-4 flex-shrink-0"}),v]},x))})}):null,(l||a)&&a&&o.jsxs("div",{className:"mb-4",children:[o.jsxs("div",{className:"flex items-center justify-between text-sm mb-1",children:[o.jsx("span",{className:"text-bambu-gray capitalize",children:a.status}),o.jsxs("span",{className:"text-white",children:[a.progress,"%"]})]}),o.jsx("div",{className:"w-full bg-bambu-dark-tertiary rounded-full h-2",children:o.jsx("div",{className:`h-2 rounded-full transition-all ${a.status==="error"?"bg-red-500":a.status==="complete"?"bg-bambu-green":"bg-orange-500"} ${a.status==="uploading"?"animate-pulse":""}`,style:{width:`${a.progress}%`}})}),o.jsx("p",{className:"text-xs text-bambu-gray mt-1",children:a.message}),a.error&&o.jsx("p",{className:"text-xs text-red-400 mt-1",children:a.error})]}),a?.status==="complete"&&o.jsxs("div",{className:"bg-bambu-green/10 border border-bambu-green/30 rounded-lg p-3 mb-4",children:[o.jsx("p",{className:"text-sm text-bambu-green font-medium mb-2",children:"Firmware uploaded to SD card!"}),o.jsx("p",{className:"text-xs text-bambu-gray",children:"To apply the update on your printer:"}),o.jsxs("ol",{className:"text-xs text-bambu-gray mt-1 list-decimal list-inside space-y-1",children:[o.jsxs("li",{children:["On the printer's touchscreen, go to ",o.jsx("strong",{className:"text-white",children:"Settings"})]}),o.jsxs("li",{children:["Navigate to ",o.jsx("strong",{className:"text-white",children:"Firmware"})]}),o.jsxs("li",{children:["Select ",o.jsx("strong",{className:"text-white",children:"Update from SD card"})]}),o.jsx("li",{children:"The update will take 10-20 minutes"})]})]}),o.jsxs("div",{className:"flex gap-2 justify-end",children:[o.jsx(Pe,{variant:"secondary",onClick:n,children:a?.status==="complete"?"Done":"Cancel"}),f?.can_proceed&&!l&&a?.status!=="complete"&&o.jsx(Pe,{onClick:b,disabled:p.isPending,children:p.isPending?o.jsxs(o.Fragment,{children:[o.jsx(xt,{className:"w-4 h-4 animate-spin mr-2"}),"Starting..."]}):o.jsxs(o.Fragment,{children:[o.jsx(Wi,{className:"w-4 h-4 mr-2"}),"Upload Firmware"]})})]})]})})})}function xCe({printer:t,onClose:e}){const n=dn(),[r,i]=S.useState({name:t.name,ip_address:t.ip_address,access_code:"",model:t.model||"",location:t.location||"",auto_archive:t.auto_archive}),a=_t({mutationFn:l=>_e.updatePrinter(t.id,l),onSuccess:()=>{n.invalidateQueries({queryKey:["printers"]}),n.invalidateQueries({queryKey:["printerStatus",t.id]}),e()}});S.useEffect(()=>{const l=c=>{c.key==="Escape"&&e()};return window.addEventListener("keydown",l),()=>window.removeEventListener("keydown",l)},[e]);const s=l=>{l.preventDefault();const c={name:r.name,ip_address:r.ip_address,model:r.model||void 0,location:r.location||void 0,auto_archive:r.auto_archive};r.access_code&&(c.access_code=r.access_code),a.mutate(c)};return o.jsx("div",{className:"fixed inset-0 bg-black/50 flex items-center justify-center z-50",onClick:e,children:o.jsx(At,{className:"w-full max-w-md",onClick:l=>l.stopPropagation(),children:o.jsxs(Tt,{children:[o.jsx("h2",{className:"text-xl font-semibold mb-4",children:"Edit Printer"}),o.jsxs("form",{onSubmit:s,className:"space-y-4",children:[o.jsxs("div",{children:[o.jsx("label",{className:"block text-sm text-bambu-gray mb-1",children:"Name"}),o.jsx("input",{type:"text",required:!0,className:"w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:r.name,onChange:l=>i({...r,name:l.target.value}),placeholder:"My Printer"})]}),o.jsxs("div",{children:[o.jsx("label",{className:"block text-sm text-bambu-gray mb-1",children:"IP Address"}),o.jsx("input",{type:"text",required:!0,pattern:"\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}",className:"w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:r.ip_address,onChange:l=>i({...r,ip_address:l.target.value}),placeholder:"192.168.1.100"})]}),o.jsxs("div",{children:[o.jsx("label",{className:"block text-sm text-bambu-gray mb-1",children:"Serial Number"}),o.jsx("input",{type:"text",disabled:!0,className:"w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-bambu-gray cursor-not-allowed",value:t.serial_number}),o.jsx("p",{className:"text-xs text-bambu-gray mt-1",children:"Serial number cannot be changed"})]}),o.jsxs("div",{children:[o.jsx("label",{className:"block text-sm text-bambu-gray mb-1",children:"Access Code"}),o.jsx("input",{type:"password",className:"w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:r.access_code,onChange:l=>i({...r,access_code:l.target.value}),placeholder:"Leave empty to keep current"})]}),o.jsxs("div",{children:[o.jsx("label",{className:"block text-sm text-bambu-gray mb-1",children:"Model"}),o.jsxs("select",{className:"w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:r.model,onChange:l=>i({...r,model:l.target.value}),children:[o.jsx("option",{value:"",children:"Select model..."}),o.jsxs("optgroup",{label:"H2 Series",children:[o.jsx("option",{value:"H2C",children:"H2C"}),o.jsx("option",{value:"H2D",children:"H2D"}),o.jsx("option",{value:"H2S",children:"H2S"})]}),o.jsxs("optgroup",{label:"X1 Series",children:[o.jsx("option",{value:"X1E",children:"X1E"}),o.jsx("option",{value:"X1C",children:"X1 Carbon"}),o.jsx("option",{value:"X1",children:"X1"})]}),o.jsxs("optgroup",{label:"P Series",children:[o.jsx("option",{value:"P2S",children:"P2S"}),o.jsx("option",{value:"P1S",children:"P1S"}),o.jsx("option",{value:"P1P",children:"P1P"})]}),o.jsxs("optgroup",{label:"A1 Series",children:[o.jsx("option",{value:"A1",children:"A1"}),o.jsx("option",{value:"A1 Mini",children:"A1 Mini"})]})]})]}),o.jsxs("div",{children:[o.jsx("label",{className:"block text-sm text-bambu-gray mb-1",children:"Location / Group"}),o.jsx("input",{type:"text",className:"w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:r.location,onChange:l=>i({...r,location:l.target.value}),placeholder:"e.g., Workshop, Office, Basement"}),o.jsx("p",{className:"text-xs text-bambu-gray mt-1",children:"Used to group printers on the dashboard"})]}),o.jsxs("div",{className:"flex items-center gap-2",children:[o.jsx("input",{type:"checkbox",id:"edit_auto_archive",checked:r.auto_archive,onChange:l=>i({...r,auto_archive:l.target.checked}),className:"rounded border-bambu-dark-tertiary bg-bambu-dark text-bambu-green focus:ring-bambu-green"}),o.jsx("label",{htmlFor:"edit_auto_archive",className:"text-sm text-bambu-gray",children:"Auto-archive completed prints"})]}),o.jsxs("div",{className:"flex gap-3 pt-4",children:[o.jsx(Pe,{type:"button",variant:"secondary",onClick:e,className:"flex-1",children:"Cancel"}),o.jsx(Pe,{type:"submit",className:"flex-1",disabled:a.isPending,children:a.isPending?"Saving...":"Save Changes"})]})]})]})})})}function bCe(t){const{data:e}=pt({queryKey:["printerStatus",t],queryFn:()=>_e.getPrinterStatus(t),refetchInterval:3e4});return!e?.connected}function yCe({printer:t,plug:e,onPowerOn:n,isPowering:r}){const i=bCe(t.id),{data:a}=pt({queryKey:["smartPlugStatus",e.id],queryFn:()=>_e.getSmartPlugStatus(e.id),refetchInterval:1e4});return i?o.jsxs("div",{className:"flex items-center justify-between px-3 py-2 hover:bg-gray-100 dark:hover:bg-bambu-dark-tertiary",children:[o.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[o.jsx("span",{className:"text-sm text-gray-900 dark:text-white truncate",children:t.name}),a&&o.jsx("span",{className:`text-xs px-1.5 py-0.5 rounded ${a.state==="ON"?"bg-bambu-green/20 text-bambu-green":"bg-red-500/20 text-red-400"}`,children:a.state||"?"})]}),o.jsxs("button",{onClick:()=>n(e.id),disabled:r||a?.state==="ON",className:`px-2 py-1 text-xs rounded transition-colors flex items-center gap-1 ${a?.state==="ON"?"bg-bambu-green/20 text-bambu-green cursor-default":"bg-bambu-green/20 text-bambu-green hover:bg-bambu-green hover:text-white"}`,children:[o.jsx(jl,{className:"w-3 h-3"}),r?"...":"On"]})]}):null}function vCe(){const[t,e]=S.useState(!1),[n,r]=S.useState(()=>localStorage.getItem("hideDisconnectedPrinters")==="true"),[i,a]=S.useState(!1),[s,l]=S.useState(null),[c,u]=S.useState(()=>localStorage.getItem("printerSortBy")||"name"),[d,f]=S.useState(()=>localStorage.getItem("printerSortAsc")!=="false"),[g,p]=S.useState(()=>{const Z=localStorage.getItem("printerCardSize");return Z?parseInt(Z,10):2}),b=g===1?"compact":"expanded",v=dn(),{data:x,isLoading:y}=pt({queryKey:["printers"],queryFn:_e.getPrinters}),{data:E}=pt({queryKey:["settings"],queryFn:_e.getSettings}),{data:w}=pt({queryKey:["smart-plugs"],queryFn:_e.getSmartPlugs}),{data:A}=pt({queryKey:["maintenanceOverview"],queryFn:_e.getMaintenanceOverview,staleTime:60*1e3}),{data:T}=pt({queryKey:["spoolman-status"],queryFn:_e.getSpoolmanStatus,staleTime:60*1e3}),C=T?.enabled&&T?.connected,{data:N}=pt({queryKey:["unlinked-spools"],queryFn:_e.getUnlinkedSpools,enabled:!!C,staleTime:30*1e3}),O=N&&N.length>0,k=A?.reduce((Z,F)=>(Z[F.printer_id]={due_count:F.due_count,warning_count:F.warning_count,total_print_hours:F.total_print_hours},Z),{})||{},j=w?.reduce((Z,F)=>(F.printer_id&&(Z[F.printer_id]=F),Z),{})||{},z=_t({mutationFn:_e.createPrinter,onSuccess:()=>{v.invalidateQueries({queryKey:["printers"]}),v.invalidateQueries({queryKey:["maintenanceOverview"]}),e(!1)}}),I=_t({mutationFn:Z=>_e.controlSmartPlug(Z,"on"),onSuccess:()=>{v.invalidateQueries({queryKey:["smart-plugs"]}),l(null)},onError:()=>{l(null)}}),q=()=>{const Z=!n;r(Z),localStorage.setItem("hideDisconnectedPrinters",String(Z))},R=Z=>{u(Z),localStorage.setItem("printerSortBy",Z)},W=()=>{const Z=!d;f(Z),localStorage.setItem("printerSortAsc",String(Z))},K=()=>{switch(g){case 1:return"grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5";case 2:return"grid-cols-1 md:grid-cols-2 xl:grid-cols-3";case 3:return"grid-cols-1 lg:grid-cols-2";case 4:return"grid-cols-1";default:return"grid-cols-1 md:grid-cols-2 xl:grid-cols-3"}},G=["S","M","L","XL"],J=S.useMemo(()=>{if(!x)return[];const Z=[...x];switch(c){case"name":Z.sort((F,V)=>F.name.localeCompare(V.name));break;case"model":Z.sort((F,V)=>(F.model||"").localeCompare(V.model||""));break;case"location":Z.sort((F,V)=>{const ne=F.location||"",le=V.location||"";return!ne&&le?1:ne&&!le?-1:ne.localeCompare(le)||F.name.localeCompare(V.name)});break;case"status":Z.sort((F,V)=>{const ne=v.getQueryData(["printerStatus",F.id]),le=v.getQueryData(["printerStatus",V.id]),oe=pe=>pe?.connected?pe.state==="RUNNING"?0:1:2;return oe(ne)-oe(le)});break}return d||Z.reverse(),Z},[x,c,d,v]),ee=S.useMemo(()=>{if(c!=="location")return null;const Z={};return J.forEach(F=>{const V=F.location||"Ungrouped";Z[V]||(Z[V]=[]),Z[V].push(F)}),Z},[c,J]);return o.jsxs("div",{className:"p-4 md:p-8",children:[o.jsxs("div",{className:"flex items-center justify-between mb-6",children:[o.jsxs("div",{children:[o.jsx("h1",{className:"text-2xl font-bold text-white",children:"Printers"}),o.jsx(mCe,{printers:x})]}),o.jsxs("div",{className:"flex items-center gap-3",children:[o.jsxs("div",{className:"flex items-center gap-1",children:[o.jsxs("select",{value:c,onChange:Z=>R(Z.target.value),className:"text-sm bg-bambu-dark border border-bambu-dark-tertiary rounded-lg px-2 py-1.5 text-white focus:border-bambu-green focus:outline-none",children:[o.jsx("option",{value:"name",children:"Name"}),o.jsx("option",{value:"status",children:"Status"}),o.jsx("option",{value:"model",children:"Model"}),o.jsx("option",{value:"location",children:"Location"})]}),o.jsx("button",{onClick:W,className:"p-1.5 rounded-lg hover:bg-bambu-dark-tertiary transition-colors",title:d?"Sort descending":"Sort ascending",children:d?o.jsx(Mp,{className:"w-4 h-4 text-bambu-gray"}):o.jsx(j0,{className:"w-4 h-4 text-bambu-gray"})})]}),o.jsx("div",{className:"flex items-center bg-bambu-dark rounded-lg border border-bambu-dark-tertiary",children:G.map((Z,F)=>{const V=F+1,ne=g===V;return o.jsx("button",{onClick:()=>{p(V),localStorage.setItem("printerCardSize",String(V))},className:`px-2 py-1.5 text-xs font-medium transition-colors ${F===0?"rounded-l-lg":""} ${F===G.length-1?"rounded-r-lg":""} ${ne?"bg-bambu-green text-white":"text-bambu-gray hover:bg-bambu-dark-tertiary hover:text-white"}`,title:`${Z==="S"?"Small":Z==="M"?"Medium":Z==="L"?"Large":"Extra large"} cards`,children:Z},Z)})}),o.jsx("div",{className:"w-px h-6 bg-bambu-dark-tertiary"}),o.jsxs("label",{className:"flex items-center gap-2 text-sm text-bambu-gray cursor-pointer",children:[o.jsx("input",{type:"checkbox",checked:n,onChange:q,className:"rounded border-bambu-dark-tertiary bg-bambu-dark text-bambu-green focus:ring-bambu-green"}),"Hide offline"]}),n&&Object.keys(j).length>0&&o.jsxs("div",{className:"relative",children:[o.jsxs("button",{onClick:()=>a(!i),className:"flex items-center gap-1.5 px-3 py-1.5 text-sm bg-white dark:bg-bambu-dark-secondary border border-gray-200 dark:border-bambu-dark-tertiary rounded-lg text-gray-600 dark:text-bambu-gray hover:text-gray-900 dark:hover:text-white hover:border-bambu-green transition-colors",children:[o.jsx(jl,{className:"w-4 h-4"}),"Power On",o.jsx(Os,{className:`w-3 h-3 transition-transform ${i?"rotate-180":""}`})]}),i&&o.jsxs(o.Fragment,{children:[o.jsx("div",{className:"fixed inset-0 z-10",onClick:()=>a(!1)}),o.jsxs("div",{className:"absolute right-0 mt-2 w-56 bg-white dark:bg-bambu-dark-secondary border border-gray-200 dark:border-bambu-dark-tertiary rounded-lg shadow-lg z-20 py-1",children:[o.jsx("div",{className:"px-3 py-2 text-xs text-gray-500 dark:text-bambu-gray border-b border-gray-200 dark:border-bambu-dark-tertiary",children:"Offline printers with smart plugs"}),x?.filter(Z=>j[Z.id]).map(Z=>o.jsx(yCe,{printer:Z,plug:j[Z.id],onPowerOn:F=>{l(F),I.mutate(F)},isPowering:s===j[Z.id]?.id},Z.id)),x?.filter(Z=>j[Z.id]).length===0&&o.jsx("div",{className:"px-3 py-2 text-sm text-bambu-gray",children:"No printers with smart plugs"})]})]})]}),o.jsxs(Pe,{onClick:()=>e(!0),children:[o.jsx(fr,{className:"w-4 h-4"}),"Add Printer"]})]})]}),y?o.jsx("div",{className:"text-center py-12 text-bambu-gray",children:"Loading printers..."}):x?.length===0?o.jsx(At,{children:o.jsxs(Tt,{className:"text-center py-12",children:[o.jsx("p",{className:"text-bambu-gray mb-4",children:"No printers configured yet"}),o.jsxs(Pe,{onClick:()=>e(!0),children:[o.jsx(fr,{className:"w-4 h-4"}),"Add Your First Printer"]})]})}):ee?o.jsx("div",{className:"space-y-6",children:Object.entries(ee).map(([Z,F])=>o.jsxs("div",{children:[o.jsxs("h2",{className:"text-lg font-semibold text-white mb-3 flex items-center gap-2",children:[o.jsx("span",{className:"w-2 h-2 rounded-full bg-bambu-green"}),Z,o.jsxs("span",{className:"text-sm font-normal text-bambu-gray",children:["(",F.length,")"]})]}),o.jsx("div",{className:`grid gap-4 ${g>=3?"gap-6":""} ${K()}`,children:F.map(V=>o.jsx(mH,{printer:V,hideIfDisconnected:n,maintenanceInfo:k[V.id],viewMode:b,cardSize:g,amsThresholds:E?{humidityGood:Number(E.ams_humidity_good)||40,humidityFair:Number(E.ams_humidity_fair)||60,tempGood:Number(E.ams_temp_good)||28,tempFair:Number(E.ams_temp_fair)||35}:void 0,spoolmanEnabled:C,hasUnlinkedSpools:O},V.id))})]},Z))}):o.jsx("div",{className:`grid gap-4 ${g>=3?"gap-6":""} ${K()}`,children:J.map(Z=>o.jsx(mH,{printer:Z,hideIfDisconnected:n,maintenanceInfo:k[Z.id],viewMode:b,cardSize:g,spoolmanEnabled:C,hasUnlinkedSpools:O,amsThresholds:E?{humidityGood:Number(E.ams_humidity_good)||40,humidityFair:Number(E.ams_humidity_fair)||60,tempGood:Number(E.ams_temp_good)||28,tempFair:Number(E.ams_temp_fair)||35}:void 0},Z.id))}),t&&o.jsx(pCe,{onClose:()=>e(!1),onAdd:Z=>z.mutate(Z),existingSerials:x?.map(Z=>Z.serial_number)||[]})]})}function _Ce(){const t=navigator.userAgent.toLowerCase(),e=navigator.platform?.toLowerCase()||"";return t.includes("win")||e.includes("win")?"windows":t.includes("mac")||e.includes("mac")?"macos":t.includes("linux")||e.includes("linux")?"linux":"unknown"}function wCe(){switch(_Ce()){case"windows":return"bambustudio://";case"macos":case"linux":default:return"bambustudioopen://"}}function vh(t){const e=wCe();window.location.href=`${e}${encodeURIComponent(t)}`}const AO="181",pp={ROTATE:0,DOLLY:1,PAN:2},lp={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},SCe=0,pH=1,MCe=2,vZ=1,ECe=2,pc=3,Td=0,ns=1,dl=2,Dc=0,gp=1,gH=2,xH=3,bH=4,ACe=5,_h=100,TCe=101,NCe=102,CCe=103,kCe=104,PCe=200,jCe=201,RCe=202,DCe=203,lP=204,cP=205,OCe=206,LCe=207,ICe=208,FCe=209,UCe=210,zCe=211,BCe=212,HCe=213,$Ce=214,uP=0,dP=1,hP=2,Fp=3,fP=4,mP=5,pP=6,gP=7,TO=0,VCe=1,GCe=2,ud=0,WCe=1,qCe=2,KCe=3,XCe=4,YCe=5,ZCe=6,QCe=7,_Z=300,Up=301,zp=302,xP=303,bP=304,tE=306,yP=1e3,Tc=1001,vP=1002,ks=1003,JCe=1004,Kv=1005,lo=1006,ON=1007,Ph=1008,Al=1009,wZ=1010,SZ=1011,J0=1012,NO=1013,mf=1014,Nc=1015,yg=1016,CO=1017,kO=1018,eb=1020,MZ=35902,EZ=35899,AZ=1021,TZ=1022,Fo=1023,tb=1026,nb=1027,NZ=1028,PO=1029,jO=1030,RO=1031,DO=1033,S1=33776,M1=33777,E1=33778,A1=33779,_P=35840,wP=35841,SP=35842,MP=35843,EP=36196,AP=37492,TP=37496,NP=37808,CP=37809,kP=37810,PP=37811,jP=37812,RP=37813,DP=37814,OP=37815,LP=37816,IP=37817,FP=37818,UP=37819,zP=37820,BP=37821,HP=36492,$P=36494,VP=36495,GP=36283,WP=36284,qP=36285,KP=36286,eke=3200,tke=3201,CZ=0,nke=1,Qu="",Js="srgb",Bp="srgb-linear",Ww="linear",ar="srgb",mm=7680,yH=519,rke=512,ike=513,ake=514,kZ=515,ske=516,oke=517,lke=518,cke=519,vH=35044,_H="300 es",pl=2e3,qw=2001;function PZ(t){for(let e=t.length-1;e>=0;--e)if(t[e]>=65535)return!0;return!1}function Kw(t){return document.createElementNS("http://www.w3.org/1999/xhtml",t)}function uke(){const t=Kw("canvas");return t.style.display="block",t}const wH={};function SH(...t){const e="THREE."+t.shift();console.log(e,...t)}function nn(...t){const e="THREE."+t.shift();console.warn(e,...t)}function Qr(...t){const e="THREE."+t.shift();console.error(e,...t)}function rb(...t){const e=t.join(" ");e in wH||(wH[e]=!0,nn(...t))}function dke(t,e,n){return new Promise(function(r,i){function a(){switch(t.clientWaitSync(e,t.SYNC_FLUSH_COMMANDS_BIT,0)){case t.WAIT_FAILED:i();break;case t.TIMEOUT_EXPIRED:setTimeout(a,n);break;default:r()}}setTimeout(a,n)})}let Nf=class{addEventListener(e,n){this._listeners===void 0&&(this._listeners={});const r=this._listeners;r[e]===void 0&&(r[e]=[]),r[e].indexOf(n)===-1&&r[e].push(n)}hasEventListener(e,n){const r=this._listeners;return r===void 0?!1:r[e]!==void 0&&r[e].indexOf(n)!==-1}removeEventListener(e,n){const r=this._listeners;if(r===void 0)return;const i=r[e];if(i!==void 0){const a=i.indexOf(n);a!==-1&&i.splice(a,1)}}dispatchEvent(e){const n=this._listeners;if(n===void 0)return;const r=n[e.type];if(r!==void 0){e.target=this;const i=r.slice(0);for(let a=0,s=i.length;a>8&255]+fa[t>>16&255]+fa[t>>24&255]+"-"+fa[e&255]+fa[e>>8&255]+"-"+fa[e>>16&15|64]+fa[e>>24&255]+"-"+fa[n&63|128]+fa[n>>8&255]+"-"+fa[n>>16&255]+fa[n>>24&255]+fa[r&255]+fa[r>>8&255]+fa[r>>16&255]+fa[r>>24&255]).toLowerCase()}function Tn(t,e,n){return Math.max(e,Math.min(n,t))}function hke(t,e){return(t%e+e)%e}function LN(t,e,n){return(1-n)*t+n*e}function Nx(t,e){switch(e.constructor){case Float32Array:return t;case Uint32Array:return t/4294967295;case Uint16Array:return t/65535;case Uint8Array:return t/255;case Int32Array:return Math.max(t/2147483647,-1);case Int16Array:return Math.max(t/32767,-1);case Int8Array:return Math.max(t/127,-1);default:throw new Error("Invalid component type.")}}function Xa(t,e){switch(e.constructor){case Float32Array:return t;case Uint32Array:return Math.round(t*4294967295);case Uint16Array:return Math.round(t*65535);case Uint8Array:return Math.round(t*255);case Int32Array:return Math.round(t*2147483647);case Int16Array:return Math.round(t*32767);case Int8Array:return Math.round(t*127);default:throw new Error("Invalid component type.")}}const fke={DEG2RAD:T1};let bn=class jZ{constructor(e=0,n=0){jZ.prototype.isVector2=!0,this.x=e,this.y=n}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,n){return this.x=e,this.y=n,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,n){switch(e){case 0:this.x=n;break;case 1:this.y=n;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,n){return this.x=e.x+n.x,this.y=e.y+n.y,this}addScaledVector(e,n){return this.x+=e.x*n,this.y+=e.y*n,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,n){return this.x=e.x-n.x,this.y=e.y-n.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){const n=this.x,r=this.y,i=e.elements;return this.x=i[0]*n+i[3]*r+i[6],this.y=i[1]*n+i[4]*r+i[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,n){return this.x=Tn(this.x,e.x,n.x),this.y=Tn(this.y,e.y,n.y),this}clampScalar(e,n){return this.x=Tn(this.x,e,n),this.y=Tn(this.y,e,n),this}clampLength(e,n){const r=this.length();return this.divideScalar(r||1).multiplyScalar(Tn(r,e,n))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){const n=Math.sqrt(this.lengthSq()*e.lengthSq());if(n===0)return Math.PI/2;const r=this.dot(e)/n;return Math.acos(Tn(r,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const n=this.x-e.x,r=this.y-e.y;return n*n+r*r}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,n){return this.x+=(e.x-this.x)*n,this.y+=(e.y-this.y)*n,this}lerpVectors(e,n,r){return this.x=e.x+(n.x-e.x)*r,this.y=e.y+(n.y-e.y)*r,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,n=0){return this.x=e[n],this.y=e[n+1],this}toArray(e=[],n=0){return e[n]=this.x,e[n+1]=this.y,e}fromBufferAttribute(e,n){return this.x=e.getX(n),this.y=e.getY(n),this}rotateAround(e,n){const r=Math.cos(n),i=Math.sin(n),a=this.x-e.x,s=this.y-e.y;return this.x=a*r-s*i+e.x,this.y=a*i+s*r+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}},pf=class{constructor(e=0,n=0,r=0,i=1){this.isQuaternion=!0,this._x=e,this._y=n,this._z=r,this._w=i}static slerpFlat(e,n,r,i,a,s,l){let c=r[i+0],u=r[i+1],d=r[i+2],f=r[i+3],g=a[s+0],p=a[s+1],b=a[s+2],v=a[s+3];if(l<=0){e[n+0]=c,e[n+1]=u,e[n+2]=d,e[n+3]=f;return}if(l>=1){e[n+0]=g,e[n+1]=p,e[n+2]=b,e[n+3]=v;return}if(f!==v||c!==g||u!==p||d!==b){let x=c*g+u*p+d*b+f*v;x<0&&(g=-g,p=-p,b=-b,v=-v,x=-x);let y=1-l;if(x<.9995){const E=Math.acos(x),w=Math.sin(E);y=Math.sin(y*E)/w,l=Math.sin(l*E)/w,c=c*y+g*l,u=u*y+p*l,d=d*y+b*l,f=f*y+v*l}else{c=c*y+g*l,u=u*y+p*l,d=d*y+b*l,f=f*y+v*l;const E=1/Math.sqrt(c*c+u*u+d*d+f*f);c*=E,u*=E,d*=E,f*=E}}e[n]=c,e[n+1]=u,e[n+2]=d,e[n+3]=f}static multiplyQuaternionsFlat(e,n,r,i,a,s){const l=r[i],c=r[i+1],u=r[i+2],d=r[i+3],f=a[s],g=a[s+1],p=a[s+2],b=a[s+3];return e[n]=l*b+d*f+c*p-u*g,e[n+1]=c*b+d*g+u*f-l*p,e[n+2]=u*b+d*p+l*g-c*f,e[n+3]=d*b-l*f-c*g-u*p,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,n,r,i){return this._x=e,this._y=n,this._z=r,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,n=!0){const r=e._x,i=e._y,a=e._z,s=e._order,l=Math.cos,c=Math.sin,u=l(r/2),d=l(i/2),f=l(a/2),g=c(r/2),p=c(i/2),b=c(a/2);switch(s){case"XYZ":this._x=g*d*f+u*p*b,this._y=u*p*f-g*d*b,this._z=u*d*b+g*p*f,this._w=u*d*f-g*p*b;break;case"YXZ":this._x=g*d*f+u*p*b,this._y=u*p*f-g*d*b,this._z=u*d*b-g*p*f,this._w=u*d*f+g*p*b;break;case"ZXY":this._x=g*d*f-u*p*b,this._y=u*p*f+g*d*b,this._z=u*d*b+g*p*f,this._w=u*d*f-g*p*b;break;case"ZYX":this._x=g*d*f-u*p*b,this._y=u*p*f+g*d*b,this._z=u*d*b-g*p*f,this._w=u*d*f+g*p*b;break;case"YZX":this._x=g*d*f+u*p*b,this._y=u*p*f+g*d*b,this._z=u*d*b-g*p*f,this._w=u*d*f-g*p*b;break;case"XZY":this._x=g*d*f-u*p*b,this._y=u*p*f-g*d*b,this._z=u*d*b+g*p*f,this._w=u*d*f+g*p*b;break;default:nn("Quaternion: .setFromEuler() encountered an unknown order: "+s)}return n===!0&&this._onChangeCallback(),this}setFromAxisAngle(e,n){const r=n/2,i=Math.sin(r);return this._x=e.x*i,this._y=e.y*i,this._z=e.z*i,this._w=Math.cos(r),this._onChangeCallback(),this}setFromRotationMatrix(e){const n=e.elements,r=n[0],i=n[4],a=n[8],s=n[1],l=n[5],c=n[9],u=n[2],d=n[6],f=n[10],g=r+l+f;if(g>0){const p=.5/Math.sqrt(g+1);this._w=.25/p,this._x=(d-c)*p,this._y=(a-u)*p,this._z=(s-i)*p}else if(r>l&&r>f){const p=2*Math.sqrt(1+r-l-f);this._w=(d-c)/p,this._x=.25*p,this._y=(i+s)/p,this._z=(a+u)/p}else if(l>f){const p=2*Math.sqrt(1+l-r-f);this._w=(a-u)/p,this._x=(i+s)/p,this._y=.25*p,this._z=(c+d)/p}else{const p=2*Math.sqrt(1+f-r-l);this._w=(s-i)/p,this._x=(a+u)/p,this._y=(c+d)/p,this._z=.25*p}return this._onChangeCallback(),this}setFromUnitVectors(e,n){let r=e.dot(n)+1;return r<1e-8?(r=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=r):(this._x=0,this._y=-e.z,this._z=e.y,this._w=r)):(this._x=e.y*n.z-e.z*n.y,this._y=e.z*n.x-e.x*n.z,this._z=e.x*n.y-e.y*n.x,this._w=r),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(Tn(this.dot(e),-1,1)))}rotateTowards(e,n){const r=this.angleTo(e);if(r===0)return this;const i=Math.min(1,n/r);return this.slerp(e,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,n){const r=e._x,i=e._y,a=e._z,s=e._w,l=n._x,c=n._y,u=n._z,d=n._w;return this._x=r*d+s*l+i*u-a*c,this._y=i*d+s*c+a*l-r*u,this._z=a*d+s*u+r*c-i*l,this._w=s*d-r*l-i*c-a*u,this._onChangeCallback(),this}slerp(e,n){if(n<=0)return this;if(n>=1)return this.copy(e);let r=e._x,i=e._y,a=e._z,s=e._w,l=this.dot(e);l<0&&(r=-r,i=-i,a=-a,s=-s,l=-l);let c=1-n;if(l<.9995){const u=Math.acos(l),d=Math.sin(u);c=Math.sin(c*u)/d,n=Math.sin(n*u)/d,this._x=this._x*c+r*n,this._y=this._y*c+i*n,this._z=this._z*c+a*n,this._w=this._w*c+s*n,this._onChangeCallback()}else this._x=this._x*c+r*n,this._y=this._y*c+i*n,this._z=this._z*c+a*n,this._w=this._w*c+s*n,this.normalize();return this}slerpQuaternions(e,n,r){return this.copy(e).slerp(n,r)}random(){const e=2*Math.PI*Math.random(),n=2*Math.PI*Math.random(),r=Math.random(),i=Math.sqrt(1-r),a=Math.sqrt(r);return this.set(i*Math.sin(e),i*Math.cos(e),a*Math.sin(n),a*Math.cos(n))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,n=0){return this._x=e[n],this._y=e[n+1],this._z=e[n+2],this._w=e[n+3],this._onChangeCallback(),this}toArray(e=[],n=0){return e[n]=this._x,e[n+1]=this._y,e[n+2]=this._z,e[n+3]=this._w,e}fromBufferAttribute(e,n){return this._x=e.getX(n),this._y=e.getY(n),this._z=e.getZ(n),this._w=e.getW(n),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}},it=class RZ{constructor(e=0,n=0,r=0){RZ.prototype.isVector3=!0,this.x=e,this.y=n,this.z=r}set(e,n,r){return r===void 0&&(r=this.z),this.x=e,this.y=n,this.z=r,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,n){switch(e){case 0:this.x=n;break;case 1:this.y=n;break;case 2:this.z=n;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,n){return this.x=e.x+n.x,this.y=e.y+n.y,this.z=e.z+n.z,this}addScaledVector(e,n){return this.x+=e.x*n,this.y+=e.y*n,this.z+=e.z*n,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,n){return this.x=e.x-n.x,this.y=e.y-n.y,this.z=e.z-n.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,n){return this.x=e.x*n.x,this.y=e.y*n.y,this.z=e.z*n.z,this}applyEuler(e){return this.applyQuaternion(MH.setFromEuler(e))}applyAxisAngle(e,n){return this.applyQuaternion(MH.setFromAxisAngle(e,n))}applyMatrix3(e){const n=this.x,r=this.y,i=this.z,a=e.elements;return this.x=a[0]*n+a[3]*r+a[6]*i,this.y=a[1]*n+a[4]*r+a[7]*i,this.z=a[2]*n+a[5]*r+a[8]*i,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){const n=this.x,r=this.y,i=this.z,a=e.elements,s=1/(a[3]*n+a[7]*r+a[11]*i+a[15]);return this.x=(a[0]*n+a[4]*r+a[8]*i+a[12])*s,this.y=(a[1]*n+a[5]*r+a[9]*i+a[13])*s,this.z=(a[2]*n+a[6]*r+a[10]*i+a[14])*s,this}applyQuaternion(e){const n=this.x,r=this.y,i=this.z,a=e.x,s=e.y,l=e.z,c=e.w,u=2*(s*i-l*r),d=2*(l*n-a*i),f=2*(a*r-s*n);return this.x=n+c*u+s*f-l*d,this.y=r+c*d+l*u-a*f,this.z=i+c*f+a*d-s*u,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){const n=this.x,r=this.y,i=this.z,a=e.elements;return this.x=a[0]*n+a[4]*r+a[8]*i,this.y=a[1]*n+a[5]*r+a[9]*i,this.z=a[2]*n+a[6]*r+a[10]*i,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,n){return this.x=Tn(this.x,e.x,n.x),this.y=Tn(this.y,e.y,n.y),this.z=Tn(this.z,e.z,n.z),this}clampScalar(e,n){return this.x=Tn(this.x,e,n),this.y=Tn(this.y,e,n),this.z=Tn(this.z,e,n),this}clampLength(e,n){const r=this.length();return this.divideScalar(r||1).multiplyScalar(Tn(r,e,n))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,n){return this.x+=(e.x-this.x)*n,this.y+=(e.y-this.y)*n,this.z+=(e.z-this.z)*n,this}lerpVectors(e,n,r){return this.x=e.x+(n.x-e.x)*r,this.y=e.y+(n.y-e.y)*r,this.z=e.z+(n.z-e.z)*r,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,n){const r=e.x,i=e.y,a=e.z,s=n.x,l=n.y,c=n.z;return this.x=i*c-a*l,this.y=a*s-r*c,this.z=r*l-i*s,this}projectOnVector(e){const n=e.lengthSq();if(n===0)return this.set(0,0,0);const r=e.dot(this)/n;return this.copy(e).multiplyScalar(r)}projectOnPlane(e){return IN.copy(this).projectOnVector(e),this.sub(IN)}reflect(e){return this.sub(IN.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){const n=Math.sqrt(this.lengthSq()*e.lengthSq());if(n===0)return Math.PI/2;const r=this.dot(e)/n;return Math.acos(Tn(r,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const n=this.x-e.x,r=this.y-e.y,i=this.z-e.z;return n*n+r*r+i*i}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,n,r){const i=Math.sin(n)*e;return this.x=i*Math.sin(r),this.y=Math.cos(n)*e,this.z=i*Math.cos(r),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,n,r){return this.x=e*Math.sin(n),this.y=r,this.z=e*Math.cos(n),this}setFromMatrixPosition(e){const n=e.elements;return this.x=n[12],this.y=n[13],this.z=n[14],this}setFromMatrixScale(e){const n=this.setFromMatrixColumn(e,0).length(),r=this.setFromMatrixColumn(e,1).length(),i=this.setFromMatrixColumn(e,2).length();return this.x=n,this.y=r,this.z=i,this}setFromMatrixColumn(e,n){return this.fromArray(e.elements,n*4)}setFromMatrix3Column(e,n){return this.fromArray(e.elements,n*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,n=0){return this.x=e[n],this.y=e[n+1],this.z=e[n+2],this}toArray(e=[],n=0){return e[n]=this.x,e[n+1]=this.y,e[n+2]=this.z,e}fromBufferAttribute(e,n){return this.x=e.getX(n),this.y=e.getY(n),this.z=e.getZ(n),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const e=Math.random()*Math.PI*2,n=Math.random()*2-1,r=Math.sqrt(1-n*n);return this.x=r*Math.cos(e),this.y=n,this.z=r*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}};const IN=new it,MH=new pf;let vn=class DZ{constructor(e,n,r,i,a,s,l,c,u){DZ.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],e!==void 0&&this.set(e,n,r,i,a,s,l,c,u)}set(e,n,r,i,a,s,l,c,u){const d=this.elements;return d[0]=e,d[1]=i,d[2]=l,d[3]=n,d[4]=a,d[5]=c,d[6]=r,d[7]=s,d[8]=u,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){const n=this.elements,r=e.elements;return n[0]=r[0],n[1]=r[1],n[2]=r[2],n[3]=r[3],n[4]=r[4],n[5]=r[5],n[6]=r[6],n[7]=r[7],n[8]=r[8],this}extractBasis(e,n,r){return e.setFromMatrix3Column(this,0),n.setFromMatrix3Column(this,1),r.setFromMatrix3Column(this,2),this}setFromMatrix4(e){const n=e.elements;return this.set(n[0],n[4],n[8],n[1],n[5],n[9],n[2],n[6],n[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,n){const r=e.elements,i=n.elements,a=this.elements,s=r[0],l=r[3],c=r[6],u=r[1],d=r[4],f=r[7],g=r[2],p=r[5],b=r[8],v=i[0],x=i[3],y=i[6],E=i[1],w=i[4],A=i[7],T=i[2],C=i[5],N=i[8];return a[0]=s*v+l*E+c*T,a[3]=s*x+l*w+c*C,a[6]=s*y+l*A+c*N,a[1]=u*v+d*E+f*T,a[4]=u*x+d*w+f*C,a[7]=u*y+d*A+f*N,a[2]=g*v+p*E+b*T,a[5]=g*x+p*w+b*C,a[8]=g*y+p*A+b*N,this}multiplyScalar(e){const n=this.elements;return n[0]*=e,n[3]*=e,n[6]*=e,n[1]*=e,n[4]*=e,n[7]*=e,n[2]*=e,n[5]*=e,n[8]*=e,this}determinant(){const e=this.elements,n=e[0],r=e[1],i=e[2],a=e[3],s=e[4],l=e[5],c=e[6],u=e[7],d=e[8];return n*s*d-n*l*u-r*a*d+r*l*c+i*a*u-i*s*c}invert(){const e=this.elements,n=e[0],r=e[1],i=e[2],a=e[3],s=e[4],l=e[5],c=e[6],u=e[7],d=e[8],f=d*s-l*u,g=l*c-d*a,p=u*a-s*c,b=n*f+r*g+i*p;if(b===0)return this.set(0,0,0,0,0,0,0,0,0);const v=1/b;return e[0]=f*v,e[1]=(i*u-d*r)*v,e[2]=(l*r-i*s)*v,e[3]=g*v,e[4]=(d*n-i*c)*v,e[5]=(i*a-l*n)*v,e[6]=p*v,e[7]=(r*c-u*n)*v,e[8]=(s*n-r*a)*v,this}transpose(){let e;const n=this.elements;return e=n[1],n[1]=n[3],n[3]=e,e=n[2],n[2]=n[6],n[6]=e,e=n[5],n[5]=n[7],n[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){const n=this.elements;return e[0]=n[0],e[1]=n[3],e[2]=n[6],e[3]=n[1],e[4]=n[4],e[5]=n[7],e[6]=n[2],e[7]=n[5],e[8]=n[8],this}setUvTransform(e,n,r,i,a,s,l){const c=Math.cos(a),u=Math.sin(a);return this.set(r*c,r*u,-r*(c*s+u*l)+s+e,-i*u,i*c,-i*(-u*s+c*l)+l+n,0,0,1),this}scale(e,n){return this.premultiply(FN.makeScale(e,n)),this}rotate(e){return this.premultiply(FN.makeRotation(-e)),this}translate(e,n){return this.premultiply(FN.makeTranslation(e,n)),this}makeTranslation(e,n){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,n,0,0,1),this}makeRotation(e){const n=Math.cos(e),r=Math.sin(e);return this.set(n,-r,0,r,n,0,0,0,1),this}makeScale(e,n){return this.set(e,0,0,0,n,0,0,0,1),this}equals(e){const n=this.elements,r=e.elements;for(let i=0;i<9;i++)if(n[i]!==r[i])return!1;return!0}fromArray(e,n=0){for(let r=0;r<9;r++)this.elements[r]=e[r+n];return this}toArray(e=[],n=0){const r=this.elements;return e[n]=r[0],e[n+1]=r[1],e[n+2]=r[2],e[n+3]=r[3],e[n+4]=r[4],e[n+5]=r[5],e[n+6]=r[6],e[n+7]=r[7],e[n+8]=r[8],e}clone(){return new this.constructor().fromArray(this.elements)}};const FN=new vn,EH=new vn().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),AH=new vn().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function mke(){const t={enabled:!0,workingColorSpace:Bp,spaces:{},convert:function(i,a,s){return this.enabled===!1||a===s||!a||!s||(this.spaces[a].transfer===ar&&(i.r=Oc(i.r),i.g=Oc(i.g),i.b=Oc(i.b)),this.spaces[a].primaries!==this.spaces[s].primaries&&(i.applyMatrix3(this.spaces[a].toXYZ),i.applyMatrix3(this.spaces[s].fromXYZ)),this.spaces[s].transfer===ar&&(i.r=xp(i.r),i.g=xp(i.g),i.b=xp(i.b))),i},workingToColorSpace:function(i,a){return this.convert(i,this.workingColorSpace,a)},colorSpaceToWorking:function(i,a){return this.convert(i,a,this.workingColorSpace)},getPrimaries:function(i){return this.spaces[i].primaries},getTransfer:function(i){return i===Qu?Ww:this.spaces[i].transfer},getToneMappingMode:function(i){return this.spaces[i].outputColorSpaceConfig.toneMappingMode||"standard"},getLuminanceCoefficients:function(i,a=this.workingColorSpace){return i.fromArray(this.spaces[a].luminanceCoefficients)},define:function(i){Object.assign(this.spaces,i)},_getMatrix:function(i,a,s){return i.copy(this.spaces[a].toXYZ).multiply(this.spaces[s].fromXYZ)},_getDrawingBufferColorSpace:function(i){return this.spaces[i].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(i=this.workingColorSpace){return this.spaces[i].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(i,a){return rb("ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),t.workingToColorSpace(i,a)},toWorkingColorSpace:function(i,a){return rb("ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking()."),t.colorSpaceToWorking(i,a)}},e=[.64,.33,.3,.6,.15,.06],n=[.2126,.7152,.0722],r=[.3127,.329];return t.define({[Bp]:{primaries:e,whitePoint:r,transfer:Ww,toXYZ:EH,fromXYZ:AH,luminanceCoefficients:n,workingColorSpaceConfig:{unpackColorSpace:Js},outputColorSpaceConfig:{drawingBufferColorSpace:Js}},[Js]:{primaries:e,whitePoint:r,transfer:ar,toXYZ:EH,fromXYZ:AH,luminanceCoefficients:n,outputColorSpaceConfig:{drawingBufferColorSpace:Js}}}),t}const zn=mke();function Oc(t){return t<.04045?t*.0773993808:Math.pow(t*.9478672986+.0521327014,2.4)}function xp(t){return t<.0031308?t*12.92:1.055*Math.pow(t,.41666)-.055}let pm,pke=class{static getDataURL(e,n="image/png"){if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>"u")return e.src;let r;if(e instanceof HTMLCanvasElement)r=e;else{pm===void 0&&(pm=Kw("canvas")),pm.width=e.width,pm.height=e.height;const i=pm.getContext("2d");e instanceof ImageData?i.putImageData(e,0,0):i.drawImage(e,0,0,e.width,e.height),r=pm}return r.toDataURL(n)}static sRGBToLinear(e){if(typeof HTMLImageElement<"u"&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&e instanceof ImageBitmap){const n=Kw("canvas");n.width=e.width,n.height=e.height;const r=n.getContext("2d");r.drawImage(e,0,0,e.width,e.height);const i=r.getImageData(0,0,e.width,e.height),a=i.data;for(let s=0;s1),this.pmremVersion=0}get width(){return this.source.getSize(zN).x}get height(){return this.source.getSize(zN).y}get depth(){return this.source.getSize(zN).z}get image(){return this.source.data}set image(e=null){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(e,n){this.updateRanges.push({start:e,count:n})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.channel=e.channel,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.colorSpace=e.colorSpace,this.renderTarget=e.renderTarget,this.isRenderTargetTexture=e.isRenderTargetTexture,this.isArrayTexture=e.isArrayTexture,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}setValues(e){for(const n in e){const r=e[n];if(r===void 0){nn(`Texture.setValues(): parameter '${n}' has value of undefined.`);continue}const i=this[n];if(i===void 0){nn(`Texture.setValues(): property '${n}' does not exist.`);continue}i&&r&&i.isVector2&&r.isVector2||i&&r&&i.isVector3&&r.isVector3||i&&r&&i.isMatrix3&&r.isMatrix3?i.copy(r):this[n]=r}}toJSON(e){const n=e===void 0||typeof e=="string";if(!n&&e.textures[this.uuid]!==void 0)return e.textures[this.uuid];const r={metadata:{version:4.7,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(r.userData=this.userData),n||(e.textures[this.uuid]=r),r}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(e){if(this.mapping!==_Z)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case yP:e.x=e.x-Math.floor(e.x);break;case Tc:e.x=e.x<0?0:1;break;case vP:Math.abs(Math.floor(e.x)%2)===1?e.x=Math.ceil(e.x)-e.x:e.x=e.x-Math.floor(e.x);break}if(e.y<0||e.y>1)switch(this.wrapT){case yP:e.y=e.y-Math.floor(e.y);break;case Tc:e.y=e.y<0?0:1;break;case vP:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-e.y:e.y=e.y-Math.floor(e.y);break}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){e===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){e===!0&&this.pmremVersion++}};Yo.DEFAULT_IMAGE=null;Yo.DEFAULT_MAPPING=_Z;Yo.DEFAULT_ANISOTROPY=1;let ci=class OZ{constructor(e=0,n=0,r=0,i=1){OZ.prototype.isVector4=!0,this.x=e,this.y=n,this.z=r,this.w=i}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,n,r,i){return this.x=e,this.y=n,this.z=r,this.w=i,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,n){switch(e){case 0:this.x=n;break;case 1:this.y=n;break;case 2:this.z=n;break;case 3:this.w=n;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w!==void 0?e.w:1,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,n){return this.x=e.x+n.x,this.y=e.y+n.y,this.z=e.z+n.z,this.w=e.w+n.w,this}addScaledVector(e,n){return this.x+=e.x*n,this.y+=e.y*n,this.z+=e.z*n,this.w+=e.w*n,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,n){return this.x=e.x-n.x,this.y=e.y-n.y,this.z=e.z-n.z,this.w=e.w-n.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){const n=this.x,r=this.y,i=this.z,a=this.w,s=e.elements;return this.x=s[0]*n+s[4]*r+s[8]*i+s[12]*a,this.y=s[1]*n+s[5]*r+s[9]*i+s[13]*a,this.z=s[2]*n+s[6]*r+s[10]*i+s[14]*a,this.w=s[3]*n+s[7]*r+s[11]*i+s[15]*a,this}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this.w/=e.w,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);const n=Math.sqrt(1-e.w*e.w);return n<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/n,this.y=e.y/n,this.z=e.z/n),this}setAxisAngleFromRotationMatrix(e){let n,r,i,a;const c=e.elements,u=c[0],d=c[4],f=c[8],g=c[1],p=c[5],b=c[9],v=c[2],x=c[6],y=c[10];if(Math.abs(d-g)<.01&&Math.abs(f-v)<.01&&Math.abs(b-x)<.01){if(Math.abs(d+g)<.1&&Math.abs(f+v)<.1&&Math.abs(b+x)<.1&&Math.abs(u+p+y-3)<.1)return this.set(1,0,0,0),this;n=Math.PI;const w=(u+1)/2,A=(p+1)/2,T=(y+1)/2,C=(d+g)/4,N=(f+v)/4,O=(b+x)/4;return w>A&&w>T?w<.01?(r=0,i=.707106781,a=.707106781):(r=Math.sqrt(w),i=C/r,a=N/r):A>T?A<.01?(r=.707106781,i=0,a=.707106781):(i=Math.sqrt(A),r=C/i,a=O/i):T<.01?(r=.707106781,i=.707106781,a=0):(a=Math.sqrt(T),r=N/a,i=O/a),this.set(r,i,a,n),this}let E=Math.sqrt((x-b)*(x-b)+(f-v)*(f-v)+(g-d)*(g-d));return Math.abs(E)<.001&&(E=1),this.x=(x-b)/E,this.y=(f-v)/E,this.z=(g-d)/E,this.w=Math.acos((u+p+y-1)/2),this}setFromMatrixPosition(e){const n=e.elements;return this.x=n[12],this.y=n[13],this.z=n[14],this.w=n[15],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this}clamp(e,n){return this.x=Tn(this.x,e.x,n.x),this.y=Tn(this.y,e.y,n.y),this.z=Tn(this.z,e.z,n.z),this.w=Tn(this.w,e.w,n.w),this}clampScalar(e,n){return this.x=Tn(this.x,e,n),this.y=Tn(this.y,e,n),this.z=Tn(this.z,e,n),this.w=Tn(this.w,e,n),this}clampLength(e,n){const r=this.length();return this.divideScalar(r||1).multiplyScalar(Tn(r,e,n))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,n){return this.x+=(e.x-this.x)*n,this.y+=(e.y-this.y)*n,this.z+=(e.z-this.z)*n,this.w+=(e.w-this.w)*n,this}lerpVectors(e,n,r){return this.x=e.x+(n.x-e.x)*r,this.y=e.y+(n.y-e.y)*r,this.z=e.z+(n.z-e.z)*r,this.w=e.w+(n.w-e.w)*r,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w}fromArray(e,n=0){return this.x=e[n],this.y=e[n+1],this.z=e[n+2],this.w=e[n+3],this}toArray(e=[],n=0){return e[n]=this.x,e[n+1]=this.y,e[n+2]=this.z,e[n+3]=this.w,e}fromBufferAttribute(e,n){return this.x=e.getX(n),this.y=e.getY(n),this.z=e.getZ(n),this.w=e.getW(n),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}},bke=class extends Nf{constructor(e=1,n=1,r={}){super(),r=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:lo,depthBuffer:!0,stencilBuffer:!1,resolveDepthBuffer:!0,resolveStencilBuffer:!0,depthTexture:null,samples:0,count:1,depth:1,multiview:!1},r),this.isRenderTarget=!0,this.width=e,this.height=n,this.depth=r.depth,this.scissor=new ci(0,0,e,n),this.scissorTest=!1,this.viewport=new ci(0,0,e,n);const i={width:e,height:n,depth:r.depth},a=new Yo(i);this.textures=[];const s=r.count;for(let l=0;l1);this.dispose()}this.viewport.set(0,0,e,n),this.scissor.set(0,0,e,n)}clone(){return new this.constructor().copy(this)}copy(e){this.width=e.width,this.height=e.height,this.depth=e.depth,this.scissor.copy(e.scissor),this.scissorTest=e.scissorTest,this.viewport.copy(e.viewport),this.textures.length=0;for(let n=0,r=e.textures.length;n=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y&&e.z>=this.min.z&&e.z<=this.max.z}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,n){return n.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y&&e.max.z>=this.min.z&&e.min.z<=this.max.z}intersectsSphere(e){return this.clampPoint(e.center,Ao),Ao.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let n,r;return e.normal.x>0?(n=e.normal.x*this.min.x,r=e.normal.x*this.max.x):(n=e.normal.x*this.max.x,r=e.normal.x*this.min.x),e.normal.y>0?(n+=e.normal.y*this.min.y,r+=e.normal.y*this.max.y):(n+=e.normal.y*this.max.y,r+=e.normal.y*this.min.y),e.normal.z>0?(n+=e.normal.z*this.min.z,r+=e.normal.z*this.max.z):(n+=e.normal.z*this.max.z,r+=e.normal.z*this.min.z),n<=-e.constant&&r>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(Cx),Yv.subVectors(this.max,Cx),gm.subVectors(e.a,Cx),xm.subVectors(e.b,Cx),bm.subVectors(e.c,Cx),Tu.subVectors(xm,gm),Nu.subVectors(bm,xm),rh.subVectors(gm,bm);let n=[0,-Tu.z,Tu.y,0,-Nu.z,Nu.y,0,-rh.z,rh.y,Tu.z,0,-Tu.x,Nu.z,0,-Nu.x,rh.z,0,-rh.x,-Tu.y,Tu.x,0,-Nu.y,Nu.x,0,-rh.y,rh.x,0];return!BN(n,gm,xm,bm,Yv)||(n=[1,0,0,0,1,0,0,0,1],!BN(n,gm,xm,bm,Yv))?!1:(Zv.crossVectors(Tu,Nu),n=[Zv.x,Zv.y,Zv.z],BN(n,gm,xm,bm,Yv))}clampPoint(e,n){return n.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,Ao).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(Ao).length()*.5),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()?this:(tc[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),tc[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),tc[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),tc[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),tc[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),tc[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),tc[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),tc[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(tc),this)}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(e){return this.min.fromArray(e.min),this.max.fromArray(e.max),this}};const tc=[new it,new it,new it,new it,new it,new it,new it,new it],Ao=new it,Xv=new xf,gm=new it,xm=new it,bm=new it,Tu=new it,Nu=new it,rh=new it,Cx=new it,Yv=new it,Zv=new it,ih=new it;function BN(t,e,n,r,i){for(let a=0,s=t.length-3;a<=s;a+=3){ih.fromArray(t,a);const l=i.x*Math.abs(ih.x)+i.y*Math.abs(ih.y)+i.z*Math.abs(ih.z),c=e.dot(ih),u=n.dot(ih),d=r.dot(ih);if(Math.max(-Math.max(c,u,d),Math.min(c,u,d))>l)return!1}return!0}const vke=new xf,kx=new it,HN=new it;let nE=class{constructor(e=new it,n=-1){this.isSphere=!0,this.center=e,this.radius=n}set(e,n){return this.center.copy(e),this.radius=n,this}setFromPoints(e,n){const r=this.center;n!==void 0?r.copy(n):vke.setFromPoints(e).getCenter(r);let i=0;for(let a=0,s=e.length;athis.radius*this.radius&&(n.sub(this.center).normalize(),n.multiplyScalar(this.radius).add(this.center)),n}getBoundingBox(e){return this.isEmpty()?(e.makeEmpty(),e):(e.set(this.center,this.center),e.expandByScalar(this.radius),e)}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius=this.radius*e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;kx.subVectors(e,this.center);const n=kx.lengthSq();if(n>this.radius*this.radius){const r=Math.sqrt(n),i=(r-this.radius)*.5;this.center.addScaledVector(kx,i/r),this.radius+=i}return this}union(e){return e.isEmpty()?this:this.isEmpty()?(this.copy(e),this):(this.center.equals(e.center)===!0?this.radius=Math.max(this.radius,e.radius):(HN.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(kx.copy(e.center).add(HN)),this.expandByPoint(kx.copy(e.center).sub(HN))),this)}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(e){return this.radius=e.radius,this.center.fromArray(e.center),this}};const nc=new it,$N=new it,Qv=new it,Cu=new it,VN=new it,Jv=new it,GN=new it;let LO=class{constructor(e=new it,n=new it(0,0,-1)){this.origin=e,this.direction=n}set(e,n){return this.origin.copy(e),this.direction.copy(n),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,n){return n.copy(this.origin).addScaledVector(this.direction,e)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,nc)),this}closestPointToPoint(e,n){n.subVectors(e,this.origin);const r=n.dot(this.direction);return r<0?n.copy(this.origin):n.copy(this.origin).addScaledVector(this.direction,r)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){const n=nc.subVectors(e,this.origin).dot(this.direction);return n<0?this.origin.distanceToSquared(e):(nc.copy(this.origin).addScaledVector(this.direction,n),nc.distanceToSquared(e))}distanceSqToSegment(e,n,r,i){$N.copy(e).add(n).multiplyScalar(.5),Qv.copy(n).sub(e).normalize(),Cu.copy(this.origin).sub($N);const a=e.distanceTo(n)*.5,s=-this.direction.dot(Qv),l=Cu.dot(this.direction),c=-Cu.dot(Qv),u=Cu.lengthSq(),d=Math.abs(1-s*s);let f,g,p,b;if(d>0)if(f=s*c-l,g=s*l-c,b=a*d,f>=0)if(g>=-b)if(g<=b){const v=1/d;f*=v,g*=v,p=f*(f+s*g+2*l)+g*(s*f+g+2*c)+u}else g=a,f=Math.max(0,-(s*g+l)),p=-f*f+g*(g+2*c)+u;else g=-a,f=Math.max(0,-(s*g+l)),p=-f*f+g*(g+2*c)+u;else g<=-b?(f=Math.max(0,-(-s*a+l)),g=f>0?-a:Math.min(Math.max(-a,-c),a),p=-f*f+g*(g+2*c)+u):g<=b?(f=0,g=Math.min(Math.max(-a,-c),a),p=g*(g+2*c)+u):(f=Math.max(0,-(s*a+l)),g=f>0?a:Math.min(Math.max(-a,-c),a),p=-f*f+g*(g+2*c)+u);else g=s>0?-a:a,f=Math.max(0,-(s*g+l)),p=-f*f+g*(g+2*c)+u;return r&&r.copy(this.origin).addScaledVector(this.direction,f),i&&i.copy($N).addScaledVector(Qv,g),p}intersectSphere(e,n){nc.subVectors(e.center,this.origin);const r=nc.dot(this.direction),i=nc.dot(nc)-r*r,a=e.radius*e.radius;if(i>a)return null;const s=Math.sqrt(a-i),l=r-s,c=r+s;return c<0?null:l<0?this.at(c,n):this.at(l,n)}intersectsSphere(e){return e.radius<0?!1:this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){const n=e.normal.dot(this.direction);if(n===0)return e.distanceToPoint(this.origin)===0?0:null;const r=-(this.origin.dot(e.normal)+e.constant)/n;return r>=0?r:null}intersectPlane(e,n){const r=this.distanceToPlane(e);return r===null?null:this.at(r,n)}intersectsPlane(e){const n=e.distanceToPoint(this.origin);return n===0||e.normal.dot(this.direction)*n<0}intersectBox(e,n){let r,i,a,s,l,c;const u=1/this.direction.x,d=1/this.direction.y,f=1/this.direction.z,g=this.origin;return u>=0?(r=(e.min.x-g.x)*u,i=(e.max.x-g.x)*u):(r=(e.max.x-g.x)*u,i=(e.min.x-g.x)*u),d>=0?(a=(e.min.y-g.y)*d,s=(e.max.y-g.y)*d):(a=(e.max.y-g.y)*d,s=(e.min.y-g.y)*d),r>s||a>i||((a>r||isNaN(r))&&(r=a),(s=0?(l=(e.min.z-g.z)*f,c=(e.max.z-g.z)*f):(l=(e.max.z-g.z)*f,c=(e.min.z-g.z)*f),r>c||l>i)||((l>r||r!==r)&&(r=l),(c=0?r:i,n)}intersectsBox(e){return this.intersectBox(e,nc)!==null}intersectTriangle(e,n,r,i,a){VN.subVectors(n,e),Jv.subVectors(r,e),GN.crossVectors(VN,Jv);let s=this.direction.dot(GN),l;if(s>0){if(i)return null;l=1}else if(s<0)l=-1,s=-s;else return null;Cu.subVectors(this.origin,e);const c=l*this.direction.dot(Jv.crossVectors(Cu,Jv));if(c<0)return null;const u=l*this.direction.dot(VN.cross(Cu));if(u<0||c+u>s)return null;const d=-l*Cu.dot(GN);return d<0?null:this.at(d/s,a)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}},mi=class YP{constructor(e,n,r,i,a,s,l,c,u,d,f,g,p,b,v,x){YP.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],e!==void 0&&this.set(e,n,r,i,a,s,l,c,u,d,f,g,p,b,v,x)}set(e,n,r,i,a,s,l,c,u,d,f,g,p,b,v,x){const y=this.elements;return y[0]=e,y[4]=n,y[8]=r,y[12]=i,y[1]=a,y[5]=s,y[9]=l,y[13]=c,y[2]=u,y[6]=d,y[10]=f,y[14]=g,y[3]=p,y[7]=b,y[11]=v,y[15]=x,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new YP().fromArray(this.elements)}copy(e){const n=this.elements,r=e.elements;return n[0]=r[0],n[1]=r[1],n[2]=r[2],n[3]=r[3],n[4]=r[4],n[5]=r[5],n[6]=r[6],n[7]=r[7],n[8]=r[8],n[9]=r[9],n[10]=r[10],n[11]=r[11],n[12]=r[12],n[13]=r[13],n[14]=r[14],n[15]=r[15],this}copyPosition(e){const n=this.elements,r=e.elements;return n[12]=r[12],n[13]=r[13],n[14]=r[14],this}setFromMatrix3(e){const n=e.elements;return this.set(n[0],n[3],n[6],0,n[1],n[4],n[7],0,n[2],n[5],n[8],0,0,0,0,1),this}extractBasis(e,n,r){return e.setFromMatrixColumn(this,0),n.setFromMatrixColumn(this,1),r.setFromMatrixColumn(this,2),this}makeBasis(e,n,r){return this.set(e.x,n.x,r.x,0,e.y,n.y,r.y,0,e.z,n.z,r.z,0,0,0,0,1),this}extractRotation(e){const n=this.elements,r=e.elements,i=1/ym.setFromMatrixColumn(e,0).length(),a=1/ym.setFromMatrixColumn(e,1).length(),s=1/ym.setFromMatrixColumn(e,2).length();return n[0]=r[0]*i,n[1]=r[1]*i,n[2]=r[2]*i,n[3]=0,n[4]=r[4]*a,n[5]=r[5]*a,n[6]=r[6]*a,n[7]=0,n[8]=r[8]*s,n[9]=r[9]*s,n[10]=r[10]*s,n[11]=0,n[12]=0,n[13]=0,n[14]=0,n[15]=1,this}makeRotationFromEuler(e){const n=this.elements,r=e.x,i=e.y,a=e.z,s=Math.cos(r),l=Math.sin(r),c=Math.cos(i),u=Math.sin(i),d=Math.cos(a),f=Math.sin(a);if(e.order==="XYZ"){const g=s*d,p=s*f,b=l*d,v=l*f;n[0]=c*d,n[4]=-c*f,n[8]=u,n[1]=p+b*u,n[5]=g-v*u,n[9]=-l*c,n[2]=v-g*u,n[6]=b+p*u,n[10]=s*c}else if(e.order==="YXZ"){const g=c*d,p=c*f,b=u*d,v=u*f;n[0]=g+v*l,n[4]=b*l-p,n[8]=s*u,n[1]=s*f,n[5]=s*d,n[9]=-l,n[2]=p*l-b,n[6]=v+g*l,n[10]=s*c}else if(e.order==="ZXY"){const g=c*d,p=c*f,b=u*d,v=u*f;n[0]=g-v*l,n[4]=-s*f,n[8]=b+p*l,n[1]=p+b*l,n[5]=s*d,n[9]=v-g*l,n[2]=-s*u,n[6]=l,n[10]=s*c}else if(e.order==="ZYX"){const g=s*d,p=s*f,b=l*d,v=l*f;n[0]=c*d,n[4]=b*u-p,n[8]=g*u+v,n[1]=c*f,n[5]=v*u+g,n[9]=p*u-b,n[2]=-u,n[6]=l*c,n[10]=s*c}else if(e.order==="YZX"){const g=s*c,p=s*u,b=l*c,v=l*u;n[0]=c*d,n[4]=v-g*f,n[8]=b*f+p,n[1]=f,n[5]=s*d,n[9]=-l*d,n[2]=-u*d,n[6]=p*f+b,n[10]=g-v*f}else if(e.order==="XZY"){const g=s*c,p=s*u,b=l*c,v=l*u;n[0]=c*d,n[4]=-f,n[8]=u*d,n[1]=g*f+v,n[5]=s*d,n[9]=p*f-b,n[2]=b*f-p,n[6]=l*d,n[10]=v*f+g}return n[3]=0,n[7]=0,n[11]=0,n[12]=0,n[13]=0,n[14]=0,n[15]=1,this}makeRotationFromQuaternion(e){return this.compose(_ke,e,wke)}lookAt(e,n,r){const i=this.elements;return bs.subVectors(e,n),bs.lengthSq()===0&&(bs.z=1),bs.normalize(),ku.crossVectors(r,bs),ku.lengthSq()===0&&(Math.abs(r.z)===1?bs.x+=1e-4:bs.z+=1e-4,bs.normalize(),ku.crossVectors(r,bs)),ku.normalize(),e_.crossVectors(bs,ku),i[0]=ku.x,i[4]=e_.x,i[8]=bs.x,i[1]=ku.y,i[5]=e_.y,i[9]=bs.y,i[2]=ku.z,i[6]=e_.z,i[10]=bs.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,n){const r=e.elements,i=n.elements,a=this.elements,s=r[0],l=r[4],c=r[8],u=r[12],d=r[1],f=r[5],g=r[9],p=r[13],b=r[2],v=r[6],x=r[10],y=r[14],E=r[3],w=r[7],A=r[11],T=r[15],C=i[0],N=i[4],O=i[8],k=i[12],j=i[1],z=i[5],I=i[9],q=i[13],R=i[2],W=i[6],K=i[10],G=i[14],J=i[3],ee=i[7],Z=i[11],F=i[15];return a[0]=s*C+l*j+c*R+u*J,a[4]=s*N+l*z+c*W+u*ee,a[8]=s*O+l*I+c*K+u*Z,a[12]=s*k+l*q+c*G+u*F,a[1]=d*C+f*j+g*R+p*J,a[5]=d*N+f*z+g*W+p*ee,a[9]=d*O+f*I+g*K+p*Z,a[13]=d*k+f*q+g*G+p*F,a[2]=b*C+v*j+x*R+y*J,a[6]=b*N+v*z+x*W+y*ee,a[10]=b*O+v*I+x*K+y*Z,a[14]=b*k+v*q+x*G+y*F,a[3]=E*C+w*j+A*R+T*J,a[7]=E*N+w*z+A*W+T*ee,a[11]=E*O+w*I+A*K+T*Z,a[15]=E*k+w*q+A*G+T*F,this}multiplyScalar(e){const n=this.elements;return n[0]*=e,n[4]*=e,n[8]*=e,n[12]*=e,n[1]*=e,n[5]*=e,n[9]*=e,n[13]*=e,n[2]*=e,n[6]*=e,n[10]*=e,n[14]*=e,n[3]*=e,n[7]*=e,n[11]*=e,n[15]*=e,this}determinant(){const e=this.elements,n=e[0],r=e[4],i=e[8],a=e[12],s=e[1],l=e[5],c=e[9],u=e[13],d=e[2],f=e[6],g=e[10],p=e[14],b=e[3],v=e[7],x=e[11],y=e[15];return b*(+a*c*f-i*u*f-a*l*g+r*u*g+i*l*p-r*c*p)+v*(+n*c*p-n*u*g+a*s*g-i*s*p+i*u*d-a*c*d)+x*(+n*u*f-n*l*p-a*s*f+r*s*p+a*l*d-r*u*d)+y*(-i*l*d-n*c*f+n*l*g+i*s*f-r*s*g+r*c*d)}transpose(){const e=this.elements;let n;return n=e[1],e[1]=e[4],e[4]=n,n=e[2],e[2]=e[8],e[8]=n,n=e[6],e[6]=e[9],e[9]=n,n=e[3],e[3]=e[12],e[12]=n,n=e[7],e[7]=e[13],e[13]=n,n=e[11],e[11]=e[14],e[14]=n,this}setPosition(e,n,r){const i=this.elements;return e.isVector3?(i[12]=e.x,i[13]=e.y,i[14]=e.z):(i[12]=e,i[13]=n,i[14]=r),this}invert(){const e=this.elements,n=e[0],r=e[1],i=e[2],a=e[3],s=e[4],l=e[5],c=e[6],u=e[7],d=e[8],f=e[9],g=e[10],p=e[11],b=e[12],v=e[13],x=e[14],y=e[15],E=f*x*u-v*g*u+v*c*p-l*x*p-f*c*y+l*g*y,w=b*g*u-d*x*u-b*c*p+s*x*p+d*c*y-s*g*y,A=d*v*u-b*f*u+b*l*p-s*v*p-d*l*y+s*f*y,T=b*f*c-d*v*c-b*l*g+s*v*g+d*l*x-s*f*x,C=n*E+r*w+i*A+a*T;if(C===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const N=1/C;return e[0]=E*N,e[1]=(v*g*a-f*x*a-v*i*p+r*x*p+f*i*y-r*g*y)*N,e[2]=(l*x*a-v*c*a+v*i*u-r*x*u-l*i*y+r*c*y)*N,e[3]=(f*c*a-l*g*a-f*i*u+r*g*u+l*i*p-r*c*p)*N,e[4]=w*N,e[5]=(d*x*a-b*g*a+b*i*p-n*x*p-d*i*y+n*g*y)*N,e[6]=(b*c*a-s*x*a-b*i*u+n*x*u+s*i*y-n*c*y)*N,e[7]=(s*g*a-d*c*a+d*i*u-n*g*u-s*i*p+n*c*p)*N,e[8]=A*N,e[9]=(b*f*a-d*v*a-b*r*p+n*v*p+d*r*y-n*f*y)*N,e[10]=(s*v*a-b*l*a+b*r*u-n*v*u-s*r*y+n*l*y)*N,e[11]=(d*l*a-s*f*a-d*r*u+n*f*u+s*r*p-n*l*p)*N,e[12]=T*N,e[13]=(d*v*i-b*f*i+b*r*g-n*v*g-d*r*x+n*f*x)*N,e[14]=(b*l*i-s*v*i-b*r*c+n*v*c+s*r*x-n*l*x)*N,e[15]=(s*f*i-d*l*i+d*r*c-n*f*c-s*r*g+n*l*g)*N,this}scale(e){const n=this.elements,r=e.x,i=e.y,a=e.z;return n[0]*=r,n[4]*=i,n[8]*=a,n[1]*=r,n[5]*=i,n[9]*=a,n[2]*=r,n[6]*=i,n[10]*=a,n[3]*=r,n[7]*=i,n[11]*=a,this}getMaxScaleOnAxis(){const e=this.elements,n=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],r=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],i=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(n,r,i))}makeTranslation(e,n,r){return e.isVector3?this.set(1,0,0,e.x,0,1,0,e.y,0,0,1,e.z,0,0,0,1):this.set(1,0,0,e,0,1,0,n,0,0,1,r,0,0,0,1),this}makeRotationX(e){const n=Math.cos(e),r=Math.sin(e);return this.set(1,0,0,0,0,n,-r,0,0,r,n,0,0,0,0,1),this}makeRotationY(e){const n=Math.cos(e),r=Math.sin(e);return this.set(n,0,r,0,0,1,0,0,-r,0,n,0,0,0,0,1),this}makeRotationZ(e){const n=Math.cos(e),r=Math.sin(e);return this.set(n,-r,0,0,r,n,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,n){const r=Math.cos(n),i=Math.sin(n),a=1-r,s=e.x,l=e.y,c=e.z,u=a*s,d=a*l;return this.set(u*s+r,u*l-i*c,u*c+i*l,0,u*l+i*c,d*l+r,d*c-i*s,0,u*c-i*l,d*c+i*s,a*c*c+r,0,0,0,0,1),this}makeScale(e,n,r){return this.set(e,0,0,0,0,n,0,0,0,0,r,0,0,0,0,1),this}makeShear(e,n,r,i,a,s){return this.set(1,r,a,0,e,1,s,0,n,i,1,0,0,0,0,1),this}compose(e,n,r){const i=this.elements,a=n._x,s=n._y,l=n._z,c=n._w,u=a+a,d=s+s,f=l+l,g=a*u,p=a*d,b=a*f,v=s*d,x=s*f,y=l*f,E=c*u,w=c*d,A=c*f,T=r.x,C=r.y,N=r.z;return i[0]=(1-(v+y))*T,i[1]=(p+A)*T,i[2]=(b-w)*T,i[3]=0,i[4]=(p-A)*C,i[5]=(1-(g+y))*C,i[6]=(x+E)*C,i[7]=0,i[8]=(b+w)*N,i[9]=(x-E)*N,i[10]=(1-(g+v))*N,i[11]=0,i[12]=e.x,i[13]=e.y,i[14]=e.z,i[15]=1,this}decompose(e,n,r){const i=this.elements;let a=ym.set(i[0],i[1],i[2]).length();const s=ym.set(i[4],i[5],i[6]).length(),l=ym.set(i[8],i[9],i[10]).length();this.determinant()<0&&(a=-a),e.x=i[12],e.y=i[13],e.z=i[14],To.copy(this);const u=1/a,d=1/s,f=1/l;return To.elements[0]*=u,To.elements[1]*=u,To.elements[2]*=u,To.elements[4]*=d,To.elements[5]*=d,To.elements[6]*=d,To.elements[8]*=f,To.elements[9]*=f,To.elements[10]*=f,n.setFromRotationMatrix(To),r.x=a,r.y=s,r.z=l,this}makePerspective(e,n,r,i,a,s,l=pl,c=!1){const u=this.elements,d=2*a/(n-e),f=2*a/(r-i),g=(n+e)/(n-e),p=(r+i)/(r-i);let b,v;if(c)b=a/(s-a),v=s*a/(s-a);else if(l===pl)b=-(s+a)/(s-a),v=-2*s*a/(s-a);else if(l===qw)b=-s/(s-a),v=-s*a/(s-a);else throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+l);return u[0]=d,u[4]=0,u[8]=g,u[12]=0,u[1]=0,u[5]=f,u[9]=p,u[13]=0,u[2]=0,u[6]=0,u[10]=b,u[14]=v,u[3]=0,u[7]=0,u[11]=-1,u[15]=0,this}makeOrthographic(e,n,r,i,a,s,l=pl,c=!1){const u=this.elements,d=2/(n-e),f=2/(r-i),g=-(n+e)/(n-e),p=-(r+i)/(r-i);let b,v;if(c)b=1/(s-a),v=s/(s-a);else if(l===pl)b=-2/(s-a),v=-(s+a)/(s-a);else if(l===qw)b=-1/(s-a),v=-a/(s-a);else throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+l);return u[0]=d,u[4]=0,u[8]=0,u[12]=g,u[1]=0,u[5]=f,u[9]=0,u[13]=p,u[2]=0,u[6]=0,u[10]=b,u[14]=v,u[3]=0,u[7]=0,u[11]=0,u[15]=1,this}equals(e){const n=this.elements,r=e.elements;for(let i=0;i<16;i++)if(n[i]!==r[i])return!1;return!0}fromArray(e,n=0){for(let r=0;r<16;r++)this.elements[r]=e[r+n];return this}toArray(e=[],n=0){const r=this.elements;return e[n]=r[0],e[n+1]=r[1],e[n+2]=r[2],e[n+3]=r[3],e[n+4]=r[4],e[n+5]=r[5],e[n+6]=r[6],e[n+7]=r[7],e[n+8]=r[8],e[n+9]=r[9],e[n+10]=r[10],e[n+11]=r[11],e[n+12]=r[12],e[n+13]=r[13],e[n+14]=r[14],e[n+15]=r[15],e}};const ym=new it,To=new mi,_ke=new it(0,0,0),wke=new it(1,1,1),ku=new it,e_=new it,bs=new it,TH=new mi,NH=new pf;let Nd=class IZ{constructor(e=0,n=0,r=0,i=IZ.DEFAULT_ORDER){this.isEuler=!0,this._x=e,this._y=n,this._z=r,this._order=i}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,n,r,i=this._order){return this._x=e,this._y=n,this._z=r,this._order=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,n=this._order,r=!0){const i=e.elements,a=i[0],s=i[4],l=i[8],c=i[1],u=i[5],d=i[9],f=i[2],g=i[6],p=i[10];switch(n){case"XYZ":this._y=Math.asin(Tn(l,-1,1)),Math.abs(l)<.9999999?(this._x=Math.atan2(-d,p),this._z=Math.atan2(-s,a)):(this._x=Math.atan2(g,u),this._z=0);break;case"YXZ":this._x=Math.asin(-Tn(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(l,p),this._z=Math.atan2(c,u)):(this._y=Math.atan2(-f,a),this._z=0);break;case"ZXY":this._x=Math.asin(Tn(g,-1,1)),Math.abs(g)<.9999999?(this._y=Math.atan2(-f,p),this._z=Math.atan2(-s,u)):(this._y=0,this._z=Math.atan2(c,a));break;case"ZYX":this._y=Math.asin(-Tn(f,-1,1)),Math.abs(f)<.9999999?(this._x=Math.atan2(g,p),this._z=Math.atan2(c,a)):(this._x=0,this._z=Math.atan2(-s,u));break;case"YZX":this._z=Math.asin(Tn(c,-1,1)),Math.abs(c)<.9999999?(this._x=Math.atan2(-d,u),this._y=Math.atan2(-f,a)):(this._x=0,this._y=Math.atan2(l,p));break;case"XZY":this._z=Math.asin(-Tn(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(g,u),this._y=Math.atan2(l,a)):(this._x=Math.atan2(-d,p),this._y=0);break;default:nn("Euler: .setFromRotationMatrix() encountered an unknown order: "+n)}return this._order=n,r===!0&&this._onChangeCallback(),this}setFromQuaternion(e,n,r){return TH.makeRotationFromQuaternion(e),this.setFromRotationMatrix(TH,n,r)}setFromVector3(e,n=this._order){return this.set(e.x,e.y,e.z,n)}reorder(e){return NH.setFromEuler(this),this.setFromQuaternion(NH,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],e[3]!==void 0&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],n=0){return e[n]=this._x,e[n+1]=this._y,e[n+2]=this._z,e[n+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};Nd.DEFAULT_ORDER="XYZ";let FZ=class{constructor(){this.mask=1}set(e){this.mask=(1<>>0}enable(e){this.mask|=1<1){for(let n=0;n1){for(let r=0;r0&&(i.userData=this.userData),i.layers=this.layers.mask,i.matrix=this.matrix.toArray(),i.up=this.up.toArray(),this.matrixAutoUpdate===!1&&(i.matrixAutoUpdate=!1),this.isInstancedMesh&&(i.type="InstancedMesh",i.count=this.count,i.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(i.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(i.type="BatchedMesh",i.perObjectFrustumCulled=this.perObjectFrustumCulled,i.sortObjects=this.sortObjects,i.drawRanges=this._drawRanges,i.reservedRanges=this._reservedRanges,i.geometryInfo=this._geometryInfo.map(l=>({...l,boundingBox:l.boundingBox?l.boundingBox.toJSON():void 0,boundingSphere:l.boundingSphere?l.boundingSphere.toJSON():void 0})),i.instanceInfo=this._instanceInfo.map(l=>({...l})),i.availableInstanceIds=this._availableInstanceIds.slice(),i.availableGeometryIds=this._availableGeometryIds.slice(),i.nextIndexStart=this._nextIndexStart,i.nextVertexStart=this._nextVertexStart,i.geometryCount=this._geometryCount,i.maxInstanceCount=this._maxInstanceCount,i.maxVertexCount=this._maxVertexCount,i.maxIndexCount=this._maxIndexCount,i.geometryInitialized=this._geometryInitialized,i.matricesTexture=this._matricesTexture.toJSON(e),i.indirectTexture=this._indirectTexture.toJSON(e),this._colorsTexture!==null&&(i.colorsTexture=this._colorsTexture.toJSON(e)),this.boundingSphere!==null&&(i.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(i.boundingBox=this.boundingBox.toJSON()));function a(l,c){return l[c.uuid]===void 0&&(l[c.uuid]=c.toJSON(e)),c.uuid}if(this.isScene)this.background&&(this.background.isColor?i.background=this.background.toJSON():this.background.isTexture&&(i.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(i.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){i.geometry=a(e.geometries,this.geometry);const l=this.geometry.parameters;if(l!==void 0&&l.shapes!==void 0){const c=l.shapes;if(Array.isArray(c))for(let u=0,d=c.length;u0){i.children=[];for(let l=0;l0){i.animations=[];for(let l=0;l0&&(r.geometries=l),c.length>0&&(r.materials=c),u.length>0&&(r.textures=u),d.length>0&&(r.images=d),f.length>0&&(r.shapes=f),g.length>0&&(r.skeletons=g),p.length>0&&(r.animations=p),b.length>0&&(r.nodes=b)}return r.object=i,r;function s(l){const c=[];for(const u in l){const d=l[u];delete d.metadata,c.push(d)}return c}}clone(e){return new this.constructor().copy(this,e)}copy(e,n=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),n===!0)for(let r=0;r0?i.multiplyScalar(1/Math.sqrt(a)):i.set(0,0,0)}static getBarycoord(e,n,r,i,a){No.subVectors(i,n),ic.subVectors(r,n),qN.subVectors(e,n);const s=No.dot(No),l=No.dot(ic),c=No.dot(qN),u=ic.dot(ic),d=ic.dot(qN),f=s*u-l*l;if(f===0)return a.set(0,0,0),null;const g=1/f,p=(u*c-l*d)*g,b=(s*d-l*c)*g;return a.set(1-p-b,b,p)}static containsPoint(e,n,r,i){return this.getBarycoord(e,n,r,i,ac)===null?!1:ac.x>=0&&ac.y>=0&&ac.x+ac.y<=1}static getInterpolation(e,n,r,i,a,s,l,c){return this.getBarycoord(e,n,r,i,ac)===null?(c.x=0,c.y=0,"z"in c&&(c.z=0),"w"in c&&(c.w=0),null):(c.setScalar(0),c.addScaledVector(a,ac.x),c.addScaledVector(s,ac.y),c.addScaledVector(l,ac.z),c)}static getInterpolatedAttribute(e,n,r,i,a,s){return ZN.setScalar(0),QN.setScalar(0),JN.setScalar(0),ZN.fromBufferAttribute(e,n),QN.fromBufferAttribute(e,r),JN.fromBufferAttribute(e,i),s.setScalar(0),s.addScaledVector(ZN,a.x),s.addScaledVector(QN,a.y),s.addScaledVector(JN,a.z),s}static isFrontFacing(e,n,r,i){return No.subVectors(r,n),ic.subVectors(e,n),No.cross(ic).dot(i)<0}set(e,n,r){return this.a.copy(e),this.b.copy(n),this.c.copy(r),this}setFromPointsAndIndices(e,n,r,i){return this.a.copy(e[n]),this.b.copy(e[r]),this.c.copy(e[i]),this}setFromAttributeAndIndices(e,n,r,i){return this.a.fromBufferAttribute(e,n),this.b.fromBufferAttribute(e,r),this.c.fromBufferAttribute(e,i),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return No.subVectors(this.c,this.b),ic.subVectors(this.a,this.b),No.cross(ic).length()*.5}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(e){return Jm.getNormal(this.a,this.b,this.c,e)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(e,n){return Jm.getBarycoord(e,this.a,this.b,this.c,n)}getInterpolation(e,n,r,i,a){return Jm.getInterpolation(e,this.a,this.b,this.c,n,r,i,a)}containsPoint(e){return Jm.containsPoint(e,this.a,this.b,this.c)}isFrontFacing(e){return Jm.isFrontFacing(this.a,this.b,this.c,e)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,n){const r=this.a,i=this.b,a=this.c;let s,l;wm.subVectors(i,r),Sm.subVectors(a,r),KN.subVectors(e,r);const c=wm.dot(KN),u=Sm.dot(KN);if(c<=0&&u<=0)return n.copy(r);XN.subVectors(e,i);const d=wm.dot(XN),f=Sm.dot(XN);if(d>=0&&f<=d)return n.copy(i);const g=c*f-d*u;if(g<=0&&c>=0&&d<=0)return s=c/(c-d),n.copy(r).addScaledVector(wm,s);YN.subVectors(e,a);const p=wm.dot(YN),b=Sm.dot(YN);if(b>=0&&p<=b)return n.copy(a);const v=p*u-c*b;if(v<=0&&u>=0&&b<=0)return l=u/(u-b),n.copy(r).addScaledVector(Sm,l);const x=d*b-p*f;if(x<=0&&f-d>=0&&p-b>=0)return DH.subVectors(a,i),l=(f-d)/(f-d+(p-b)),n.copy(i).addScaledVector(DH,l);const y=1/(x+v+g);return s=v*y,l=g*y,n.copy(r).addScaledVector(wm,s).addScaledVector(Sm,l)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}};const UZ={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Pu={h:0,s:0,l:0},n_={h:0,s:0,l:0};function eC(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+(e-t)*6*n:n<1/2?e:n<2/3?t+(e-t)*6*(2/3-n):t}let Nn=class{constructor(e,n,r){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,n,r)}set(e,n,r){if(n===void 0&&r===void 0){const i=e;i&&i.isColor?this.copy(i):typeof i=="number"?this.setHex(i):typeof i=="string"&&this.setStyle(i)}else this.setRGB(e,n,r);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,n=Js){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,zn.colorSpaceToWorking(this,n),this}setRGB(e,n,r,i=zn.workingColorSpace){return this.r=e,this.g=n,this.b=r,zn.colorSpaceToWorking(this,i),this}setHSL(e,n,r,i=zn.workingColorSpace){if(e=hke(e,1),n=Tn(n,0,1),r=Tn(r,0,1),n===0)this.r=this.g=this.b=r;else{const a=r<=.5?r*(1+n):r+n-r*n,s=2*r-a;this.r=eC(s,a,e+1/3),this.g=eC(s,a,e),this.b=eC(s,a,e-1/3)}return zn.colorSpaceToWorking(this,i),this}setStyle(e,n=Js){function r(a){a!==void 0&&parseFloat(a)<1&&nn("Color: Alpha component of "+e+" will be ignored.")}let i;if(i=/^(\w+)\(([^\)]*)\)/.exec(e)){let a;const s=i[1],l=i[2];switch(s){case"rgb":case"rgba":if(a=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(l))return r(a[4]),this.setRGB(Math.min(255,parseInt(a[1],10))/255,Math.min(255,parseInt(a[2],10))/255,Math.min(255,parseInt(a[3],10))/255,n);if(a=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(l))return r(a[4]),this.setRGB(Math.min(100,parseInt(a[1],10))/100,Math.min(100,parseInt(a[2],10))/100,Math.min(100,parseInt(a[3],10))/100,n);break;case"hsl":case"hsla":if(a=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(l))return r(a[4]),this.setHSL(parseFloat(a[1])/360,parseFloat(a[2])/100,parseFloat(a[3])/100,n);break;default:nn("Color: Unknown color model "+e)}}else if(i=/^\#([A-Fa-f\d]+)$/.exec(e)){const a=i[1],s=a.length;if(s===3)return this.setRGB(parseInt(a.charAt(0),16)/15,parseInt(a.charAt(1),16)/15,parseInt(a.charAt(2),16)/15,n);if(s===6)return this.setHex(parseInt(a,16),n);nn("Color: Invalid hex color "+e)}else if(e&&e.length>0)return this.setColorName(e,n);return this}setColorName(e,n=Js){const r=UZ[e.toLowerCase()];return r!==void 0?this.setHex(r,n):nn("Color: Unknown color "+e),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=Oc(e.r),this.g=Oc(e.g),this.b=Oc(e.b),this}copyLinearToSRGB(e){return this.r=xp(e.r),this.g=xp(e.g),this.b=xp(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=Js){return zn.workingToColorSpace(ma.copy(this),e),Math.round(Tn(ma.r*255,0,255))*65536+Math.round(Tn(ma.g*255,0,255))*256+Math.round(Tn(ma.b*255,0,255))}getHexString(e=Js){return("000000"+this.getHex(e).toString(16)).slice(-6)}getHSL(e,n=zn.workingColorSpace){zn.workingToColorSpace(ma.copy(this),n);const r=ma.r,i=ma.g,a=ma.b,s=Math.max(r,i,a),l=Math.min(r,i,a);let c,u;const d=(l+s)/2;if(l===s)c=0,u=0;else{const f=s-l;switch(u=d<=.5?f/(s+l):f/(2-s-l),s){case r:c=(i-a)/f+(i0!=e>0&&this.version++,this._alphaTest=e}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(e!==void 0)for(const n in e){const r=e[n];if(r===void 0){nn(`Material: parameter '${n}' has value of undefined.`);continue}const i=this[n];if(i===void 0){nn(`Material: '${n}' is not a property of THREE.${this.type}.`);continue}i&&i.isColor?i.set(r):i&&i.isVector3&&r&&r.isVector3?i.copy(r):this[n]=r}}toJSON(e){const n=e===void 0||typeof e=="string";n&&(e={textures:{},images:{}});const r={metadata:{version:4.7,type:"Material",generator:"Material.toJSON"}};r.uuid=this.uuid,r.type=this.type,this.name!==""&&(r.name=this.name),this.color&&this.color.isColor&&(r.color=this.color.getHex()),this.roughness!==void 0&&(r.roughness=this.roughness),this.metalness!==void 0&&(r.metalness=this.metalness),this.sheen!==void 0&&(r.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(r.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(r.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(r.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(r.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(r.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(r.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(r.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(r.shininess=this.shininess),this.clearcoat!==void 0&&(r.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(r.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(r.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(r.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(r.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,r.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.sheenColorMap&&this.sheenColorMap.isTexture&&(r.sheenColorMap=this.sheenColorMap.toJSON(e).uuid),this.sheenRoughnessMap&&this.sheenRoughnessMap.isTexture&&(r.sheenRoughnessMap=this.sheenRoughnessMap.toJSON(e).uuid),this.dispersion!==void 0&&(r.dispersion=this.dispersion),this.iridescence!==void 0&&(r.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(r.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(r.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(r.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(r.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),this.anisotropy!==void 0&&(r.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(r.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(r.anisotropyMap=this.anisotropyMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(r.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(r.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(r.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(r.lightMap=this.lightMap.toJSON(e).uuid,r.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(r.aoMap=this.aoMap.toJSON(e).uuid,r.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(r.bumpMap=this.bumpMap.toJSON(e).uuid,r.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(r.normalMap=this.normalMap.toJSON(e).uuid,r.normalMapType=this.normalMapType,r.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(r.displacementMap=this.displacementMap.toJSON(e).uuid,r.displacementScale=this.displacementScale,r.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(r.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(r.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(r.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(r.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(r.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(r.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(r.envMap=this.envMap.toJSON(e).uuid,this.combine!==void 0&&(r.combine=this.combine)),this.envMapRotation!==void 0&&(r.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(r.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(r.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(r.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(r.gradientMap=this.gradientMap.toJSON(e).uuid),this.transmission!==void 0&&(r.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(r.transmissionMap=this.transmissionMap.toJSON(e).uuid),this.thickness!==void 0&&(r.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(r.thicknessMap=this.thicknessMap.toJSON(e).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(r.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(r.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(r.size=this.size),this.shadowSide!==null&&(r.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(r.sizeAttenuation=this.sizeAttenuation),this.blending!==gp&&(r.blending=this.blending),this.side!==Td&&(r.side=this.side),this.vertexColors===!0&&(r.vertexColors=!0),this.opacity<1&&(r.opacity=this.opacity),this.transparent===!0&&(r.transparent=!0),this.blendSrc!==lP&&(r.blendSrc=this.blendSrc),this.blendDst!==cP&&(r.blendDst=this.blendDst),this.blendEquation!==_h&&(r.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(r.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(r.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(r.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(r.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(r.blendAlpha=this.blendAlpha),this.depthFunc!==Fp&&(r.depthFunc=this.depthFunc),this.depthTest===!1&&(r.depthTest=this.depthTest),this.depthWrite===!1&&(r.depthWrite=this.depthWrite),this.colorWrite===!1&&(r.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(r.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==yH&&(r.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(r.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(r.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==mm&&(r.stencilFail=this.stencilFail),this.stencilZFail!==mm&&(r.stencilZFail=this.stencilZFail),this.stencilZPass!==mm&&(r.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(r.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(r.rotation=this.rotation),this.polygonOffset===!0&&(r.polygonOffset=!0),this.polygonOffsetFactor!==0&&(r.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(r.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(r.linewidth=this.linewidth),this.dashSize!==void 0&&(r.dashSize=this.dashSize),this.gapSize!==void 0&&(r.gapSize=this.gapSize),this.scale!==void 0&&(r.scale=this.scale),this.dithering===!0&&(r.dithering=!0),this.alphaTest>0&&(r.alphaTest=this.alphaTest),this.alphaHash===!0&&(r.alphaHash=!0),this.alphaToCoverage===!0&&(r.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(r.premultipliedAlpha=!0),this.forceSinglePass===!0&&(r.forceSinglePass=!0),this.wireframe===!0&&(r.wireframe=!0),this.wireframeLinewidth>1&&(r.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!=="round"&&(r.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!=="round"&&(r.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(r.flatShading=!0),this.visible===!1&&(r.visible=!1),this.toneMapped===!1&&(r.toneMapped=!1),this.fog===!1&&(r.fog=!1),Object.keys(this.userData).length>0&&(r.userData=this.userData);function i(a){const s=[];for(const l in a){const c=a[l];delete c.metadata,s.push(c)}return s}if(n){const a=i(e.textures),s=i(e.images);a.length>0&&(r.textures=a),s.length>0&&(r.images=s)}return r}clone(){return new this.constructor().copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.blendColor.copy(e.blendColor),this.blendAlpha=e.blendAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;const n=e.clippingPlanes;let r=null;if(n!==null){const i=n.length;r=new Array(i);for(let a=0;a!==i;++a)r[a]=n[a].clone()}return this.clippingPlanes=r,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaHash=e.alphaHash,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(e){e===!0&&this.version++}},IO=class extends vg{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new Nn(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new Nd,this.combine=TO,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}};const ai=new it,r_=new bn;let Nke=0,ho=class{constructor(e,n,r=!1){if(Array.isArray(e))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:Nke++}),this.name="",this.array=e,this.itemSize=n,this.count=e!==void 0?e.length/n:0,this.normalized=r,this.usage=vH,this.updateRanges=[],this.gpuType=Nc,this.version=0}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,n){this.updateRanges.push({start:e,count:n})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this.gpuType=e.gpuType,this}copyAt(e,n,r){e*=this.itemSize,r*=n.itemSize;for(let i=0,a=this.itemSize;in.count&&nn("BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),n.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new xf);const e=this.attributes.position,n=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){Qr("BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new it(-1/0,-1/0,-1/0),new it(1/0,1/0,1/0));return}if(e!==void 0){if(this.boundingBox.setFromBufferAttribute(e),n)for(let r=0,i=n.length;r0&&(e.userData=this.userData),this.parameters!==void 0){const c=this.parameters;for(const u in c)c[u]!==void 0&&(e[u]=c[u]);return e}e.data={attributes:{}};const n=this.index;n!==null&&(e.data.index={type:n.array.constructor.name,array:Array.prototype.slice.call(n.array)});const r=this.attributes;for(const c in r){const u=r[c];e.data.attributes[c]=u.toJSON(e.data)}const i={};let a=!1;for(const c in this.morphAttributes){const u=this.morphAttributes[c],d=[];for(let f=0,g=u.length;f0&&(i[c]=d,a=!0)}a&&(e.data.morphAttributes=i,e.data.morphTargetsRelative=this.morphTargetsRelative);const s=this.groups;s.length>0&&(e.data.groups=JSON.parse(JSON.stringify(s)));const l=this.boundingSphere;return l!==null&&(e.data.boundingSphere=l.toJSON()),e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const n={};this.name=e.name;const r=e.index;r!==null&&this.setIndex(r.clone());const i=e.attributes;for(const u in i){const d=i[u];this.setAttribute(u,d.clone(n))}const a=e.morphAttributes;for(const u in a){const d=[],f=a[u];for(let g=0,p=f.length;g0){const i=n[r[0]];if(i!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let a=0,s=i.length;a(e.far-e.near)**2))&&(OH.copy(a).invert(),ah.copy(e.ray).applyMatrix4(OH),!(r.boundingBox!==null&&ah.intersectsBox(r.boundingBox)===!1)&&this._computeIntersections(e,n,ah)))}_computeIntersections(e,n,r){let i;const a=this.geometry,s=this.material,l=a.index,c=a.attributes.position,u=a.attributes.uv,d=a.attributes.uv1,f=a.attributes.normal,g=a.groups,p=a.drawRange;if(l!==null)if(Array.isArray(s))for(let b=0,v=g.length;bn.far?null:{distance:u,point:c_.clone(),object:t}}function u_(t,e,n,r,i,a,s,l,c,u){t.getVertexPosition(l,a_),t.getVertexPosition(c,s_),t.getVertexPosition(u,o_);const d=kke(t,e,n,r,a_,s_,o_,IH);if(d){const f=new it;jx.getBarycoord(IH,a_,s_,o_,f),i&&(d.uv=jx.getInterpolatedAttribute(i,l,c,u,f,new bn)),a&&(d.uv1=jx.getInterpolatedAttribute(a,l,c,u,f,new bn)),s&&(d.normal=jx.getInterpolatedAttribute(s,l,c,u,f,new it),d.normal.dot(r.direction)>0&&d.normal.multiplyScalar(-1));const g={a:l,b:c,c:u,normal:new it,materialIndex:0};jx.getNormal(a_,s_,o_,g.normal),d.face=g,d.barycoord=f}return d}let FO=class $Z extends Ll{constructor(e=1,n=1,r=1,i=1,a=1,s=1){super(),this.type="BoxGeometry",this.parameters={width:e,height:n,depth:r,widthSegments:i,heightSegments:a,depthSegments:s};const l=this;i=Math.floor(i),a=Math.floor(a),s=Math.floor(s);const c=[],u=[],d=[],f=[];let g=0,p=0;b("z","y","x",-1,-1,r,n,e,s,a,0),b("z","y","x",1,-1,r,n,-e,s,a,1),b("x","z","y",1,1,e,r,n,i,s,2),b("x","z","y",1,-1,e,r,-n,i,s,3),b("x","y","z",1,-1,e,n,r,i,a,4),b("x","y","z",-1,-1,e,n,-r,i,a,5),this.setIndex(c),this.setAttribute("position",new $o(u,3)),this.setAttribute("normal",new $o(d,3)),this.setAttribute("uv",new $o(f,2));function b(v,x,y,E,w,A,T,C,N,O,k){const j=A/N,z=T/O,I=A/2,q=T/2,R=C/2,W=N+1,K=O+1;let G=0,J=0;const ee=new it;for(let Z=0;Z0?1:-1,d.push(ee.x,ee.y,ee.z),f.push(V/N),f.push(1-Z/O),G+=1}}for(let Z=0;Z - +