diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2accd404b..7456c8929 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -24,6 +24,7 @@ All notable changes to Bambuddy will be documented in this file.
- **SD Card Error After FTP Upload** ([#645](https://github.com/maziggy/bambuddy/issues/645)) — After printing one file, subsequent prints could fail with `0500-C010 "MicroSD Card read/write exception"` until Bambuddy was restarted. The FTP upload used `transfercmd()` for A1 compatibility but skipped reading the server's 226 "Transfer complete" response, leaving the SD card file write unconfirmed. The print command was sent via MQTT before the printer's FTP server had finished flushing the file to disk. Now waits for the 226 confirmation after each upload (with a 60-second timeout for slower models like H2D). Reported by @lanfi89, confirmed by @Bademeister89.
- **P2S Shows Carbon Rod Maintenance Tasks** ([#640](https://github.com/maziggy/bambuddy/issues/640)) — The P2S was incorrectly classified as a carbon rod printer, showing "Lubricate Carbon Rods" and "Clean Carbon Rods" maintenance tasks. The P2S uses hardened steel linear shafts, not carbon fiber rods. Added a new `steel_rod` motion system category and "Lubricate Steel Rods" / "Clean Steel Rods" maintenance tasks specific to the P2S. X1/P1 series continue to show carbon rod tasks; A1/H2 series continue to show linear rail tasks. Reported by @maziggy.
- **Dispatch Toast Stuck After Second Print** — The print dispatch progress toast ("Starting prints…") stayed visible forever after the second print dispatch in a session. The dedup guard (`lastDispatchSummaryRef`) that prevents duplicate completion toasts was never reset between batches, so every single-printer dispatch produced the same summary key (`"first-complete:1:0"`). The first print completed normally, but subsequent completions matched the stale ref and skipped creating the done toast — leaving the progress toast stuck in "Processing" state with no way to dismiss except a page reload. Now resets the dedup guard whenever the dispatch toast is dismissed (auto-dismiss timeout, cleanup events) and when a new batch starts.
+- **Archive Card Buttons Overlapping at Narrow Widths** ([#641](https://github.com/maziggy/bambuddy/issues/641)) — The "Reprint" and "Schedule" buttons at the bottom of archive cards overlapped when the browser window was narrower than the card grid expected (e.g. snapped to half-screen on a 2K monitor). The button text labels used a viewport-based `sm:` breakpoint that didn't account for actual card width. Added `overflow-hidden` to the flex buttons and `truncate` to the text spans so labels clip cleanly with ellipsis instead of bleeding into adjacent buttons. Reported by rsocko@outlook.com, confirmed by @dsmitty166.
## [0.2.2b2] - 2026-03-06
diff --git a/frontend/src/pages/ArchivesPage.tsx b/frontend/src/pages/ArchivesPage.tsx
index ecb6c6cea..59688914d 100644
--- a/frontend/src/pages/ArchivesPage.tsx
+++ b/frontend/src/pages/ArchivesPage.tsx
@@ -1032,24 +1032,24 @@ function ArchiveCard({
setShowReprint(true)}
disabled={!archive.file_path || !canModify('archives', 'reprint', archive.created_by_id)}
title={!archive.file_path ? t('archives.card.noFileForReprint') : !canModify('archives', 'reprint', archive.created_by_id) ? t('archives.card.noPermissionReprint') : undefined}
>
- {t('archives.card.reprint')}
+ {t('archives.card.reprint')}
setShowSchedule(true)}
disabled={!archive.file_path || !hasPermission('queue:create')}
title={!archive.file_path ? t('archives.card.noFileForReprint') : !hasPermission('queue:create') ? t('archives.permission.noAddToQueue') : t('archives.card.schedulePrint')}
>
- {t('archives.card.schedule')}
+ {t('archives.card.schedule')}
{
const filename = archive.print_name || archive.filename || 'model';
openInSlicerWithToken(archive.id, filename, 'file', preferredSlicer);
@@ -1077,7 +1077,7 @@ function ArchiveCard({
title={t('archives.card.openInBambuStudioToSlice')}
>
- {t('archives.card.slice')}
+ {t('archives.card.slice')}
)}
i.jsxs("button",{onClick:()=>u(P),className:`px-2 py-1 text-xs rounded transition-colors ${d===P?"bg-bambu-green text-white":"bg-bambu-dark-tertiary text-bambu-gray hover:bg-bambu-dark-tertiary/80"}`,children:[P,"x"]},P))})]})]})]})]})]}),v&&r&&i.jsx(LXe,{archiveId:r,timelapseSrc:t,onClose:()=>g(!1),onSave:s})]})}function IXe({archiveIds:t,onClose:e}){w.useEffect(()=>{const s=o=>{o.key==="Escape"&&e()};return window.addEventListener("keydown",s),()=>window.removeEventListener("keydown",s)},[e]);const{data:n,isLoading:r,error:a}=Je({queryKey:["archive-comparison",t],queryFn:()=>be.compareArchives(t)});return i.jsx("div",{className:"fixed inset-0 bg-black/80 flex items-center justify-center z-50 p-4",onClick:e,children:i.jsxs("div",{className:"bg-bambu-dark-secondary rounded-lg max-w-4xl w-full max-h-[90vh] flex flex-col border border-bambu-dark-tertiary",onClick:s=>s.stopPropagation(),children:[i.jsxs("div",{className:"flex items-center justify-between p-4 border-b border-bambu-dark-tertiary",children:[i.jsxs("h3",{className:"text-lg font-semibold text-white",children:["Compare Archives (",t.length,")"]}),i.jsx("button",{onClick:e,className:"text-bambu-gray hover:text-white p-1",children:i.jsx(zt,{className:"w-5 h-5"})})]}),i.jsx("div",{className:"flex-1 overflow-auto p-4 bg-bambu-dark-secondary",children:r?i.jsx("div",{className:"flex items-center justify-center py-12",children:i.jsx(ct,{className:"w-8 h-8 text-bambu-green animate-spin"})}):a?i.jsxs("div",{className:"text-center py-12 text-red-400",children:[i.jsx(An,{className:"w-12 h-12 mx-auto mb-4 opacity-50"}),i.jsx("p",{children:"Failed to load comparison"}),i.jsx("p",{className:"text-sm text-bambu-gray mt-2",children:a instanceof Error?a.message:"Unknown error"})]}):n?i.jsx(zXe,{comparison:n}):null}),i.jsx("div",{className:"p-4 border-t border-bambu-dark-tertiary",children:i.jsx(Oe,{variant:"secondary",onClick:e,className:"w-full",children:"Close"})})]})})}function zXe({comparison:t}){return i.jsxs("div",{className:"space-y-6",children:[i.jsx("div",{className:"overflow-x-auto",children:i.jsxs("table",{className:"w-full",children:[i.jsx("thead",{children:i.jsxs("tr",{children:[i.jsx("th",{className:"text-left text-sm text-bambu-gray font-medium pb-2 pr-4 min-w-[150px]",children:"Setting"}),t.archives.map(e=>i.jsxs("th",{className:"text-left text-sm font-medium pb-2 px-2 min-w-[120px]",children:[i.jsx("div",{className:"text-white truncate max-w-[150px]",title:e.print_name,children:e.print_name}),i.jsx("div",{className:`text-xs ${e.status==="completed"?"text-status-ok":e.status==="failed"?"text-status-error":"text-bambu-gray"}`,children:e.status})]},e.id))]})}),i.jsx("tbody",{className:"divide-y divide-bambu-gray/20",children:t.comparison.map(e=>i.jsxs("tr",{className:e.has_difference?"bg-yellow-500/5":"",children:[i.jsx("td",{className:"py-2 pr-4 text-sm",children:i.jsxs("div",{className:"flex items-center gap-2",children:[e.has_difference&&i.jsx(An,{className:"w-3 h-3 text-yellow-400 flex-shrink-0"}),i.jsx("span",{className:e.has_difference?"text-yellow-400":"text-bambu-gray",children:e.label})]})}),e.values.map((n,r)=>i.jsxs("td",{className:"py-2 px-2 text-sm text-white",children:[n??i.jsx("span",{className:"text-bambu-gray/50",children:"-"}),e.unit&&n!==null&&i.jsx("span",{className:"text-bambu-gray ml-1",children:e.unit})]},r))]},e.field))})]})}),t.differences.length>0&&i.jsxs("div",{className:"p-4 bg-yellow-500/10 border border-yellow-500/30 rounded-lg",children:[i.jsxs("h4",{className:"text-sm font-medium text-yellow-400 mb-2 flex items-center gap-2",children:[i.jsx(An,{className:"w-4 h-4"}),t.differences.length," Difference",t.differences.length>1?"s":""," Found"]}),i.jsxs("ul",{className:"text-sm text-white/80 space-y-1",children:[t.differences.slice(0,5).map(e=>i.jsxs("li",{children:[i.jsx("span",{className:"text-yellow-400",children:e.label}),": ",e.values.join(" vs ")," ",e.unit||""]},e.field)),t.differences.length>5&&i.jsxs("li",{className:"text-bambu-gray",children:["...and ",t.differences.length-5," more"]})]})]}),t.success_correlation.has_both_outcomes?i.jsxs("div",{className:"p-4 bg-bambu-dark rounded-lg",children:[i.jsxs("h4",{className:"text-sm font-medium text-white mb-3 flex items-center gap-2",children:[i.jsx(Vr,{className:"w-4 h-4 text-bambu-green"}),"Success/Failure Analysis"]}),i.jsxs("div",{className:"flex items-center gap-4 text-sm mb-3",children:[i.jsxs("span",{className:"text-bambu-green",children:[t.success_correlation.successful_count," successful"]}),i.jsxs("span",{className:"text-red-400",children:[t.success_correlation.failed_count," failed"]})]}),t.success_correlation.insights&&t.success_correlation.insights.length>0?i.jsx("div",{className:"space-y-2",children:t.success_correlation.insights.map(e=>i.jsxs("div",{className:"text-sm p-2 bg-bambu-dark-secondary rounded",children:[i.jsxs("span",{className:"text-white font-medium",children:[e.label,":"]})," ",i.jsx("span",{className:"text-white/80",children:e.insight})]},e.field))}):i.jsx("p",{className:"text-sm text-bambu-gray",children:"No clear correlations found between settings and outcomes."})]}):i.jsx("div",{className:"p-4 bg-bambu-dark rounded-lg text-sm text-bambu-gray",children:i.jsx("p",{children:t.success_correlation.message||"Need both successful and failed prints for correlation analysis."})})]})}function UXe(t){const e=new Date(t),r=new Date().getTime()-e.getTime(),a=Math.floor(r/6e4);if(a<1)return"Just now";if(a<60)return`${a}m ago`;const s=Math.floor(a/60);return s<24?`${s}h ago`:`${Math.floor(s/24)}d ago`}function BXe({upload:t,projects:e,onArchive:n,onDiscard:r,isArchiving:a,isDiscarding:s}){const[o,l]=w.useState(!1),[c,d]=w.useState(t.tags||""),[u,m]=w.useState(t.notes||""),[p,f]=w.useState(t.project_id),[x,v]=w.useState(!1);return i.jsx(Tt,{children:i.jsxs(Pt,{className:"py-3",children:[i.jsxs("div",{className:"flex items-center justify-between",children:[i.jsxs("div",{className:"flex items-center gap-3",children:[i.jsx(Tp,{className:"w-8 h-8 text-bambu-green flex-shrink-0"}),i.jsxs("div",{children:[i.jsx("p",{className:"text-white font-medium",children:t.filename}),i.jsxs("div",{className:"flex items-center gap-2 text-xs text-bambu-gray",children:[i.jsx("span",{children:ro(t.file_size)}),i.jsx("span",{children:"·"}),i.jsxs("span",{className:"flex items-center gap-1",children:[i.jsx(Zn,{className:"w-3 h-3"}),UXe(t.uploaded_at)]}),t.source_ip&&i.jsxs(i.Fragment,{children:[i.jsx("span",{children:"·"}),i.jsxs("span",{children:["from ",t.source_ip]})]})]})]})]}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("button",{onClick:()=>l(!o),className:"p-1 text-bambu-gray hover:text-white transition-colors",children:o?i.jsx(Sl,{className:"w-5 h-5"}):i.jsx(Fn,{className:"w-5 h-5"})}),i.jsx(Oe,{variant:"primary",size:"sm",onClick:()=>n(t.id,{tags:c,notes:u,project_id:p||void 0}),disabled:a,children:a?i.jsx(ct,{className:"w-4 h-4 animate-spin"}):i.jsxs(i.Fragment,{children:[i.jsx(Os,{className:"w-4 h-4"}),"Archive"]})}),i.jsx(Oe,{variant:"secondary",size:"sm",onClick:()=>v(!0),disabled:s,children:s?i.jsx(ct,{className:"w-4 h-4 animate-spin"}):i.jsx(Xt,{className:"w-4 h-4 text-red-400"})})]})]}),x&&i.jsx(kn,{title:"Discard Upload",message:`Are you sure you want to discard "${t.filename}"? This cannot be undone.`,confirmText:"Discard",variant:"danger",onConfirm:()=>{r(t.id),v(!1)},onCancel:()=>v(!1)}),o&&i.jsxs("div",{className:"mt-4 pt-4 border-t border-bambu-dark-tertiary space-y-3",children:[i.jsxs("div",{children:[i.jsx("label",{className:"block text-sm text-bambu-gray mb-1",children:"Tags"}),i.jsx("input",{type:"text",value:c,onChange:g=>d(g.target.value),placeholder:"e.g., functional, prototype, gift",className:"w-full bg-bambu-dark-secondary border border-bambu-dark-tertiary rounded-md px-3 py-2 text-white placeholder-bambu-gray text-sm"})]}),i.jsxs("div",{children:[i.jsx("label",{className:"block text-sm text-bambu-gray mb-1",children:"Notes"}),i.jsx("textarea",{value:u,onChange:g=>m(g.target.value),placeholder:"Add notes about this print...",rows:2,className:"w-full bg-bambu-dark-secondary border border-bambu-dark-tertiary rounded-md px-3 py-2 text-white placeholder-bambu-gray text-sm resize-none"})]}),i.jsxs("div",{children:[i.jsx("label",{className:"block text-sm text-bambu-gray mb-1",children:"Project"}),i.jsxs("select",{value:p||"",onChange:g=>f(g.target.value?Number(g.target.value):null),className:"w-full bg-bambu-dark-secondary border border-bambu-dark-tertiary rounded-md px-3 py-2 text-white text-sm",children:[i.jsx("option",{value:"",children:"No project"}),e.map(g=>i.jsx("option",{value:g.id,children:g.name},g.id))]})]})]})]})})}function HXe(){const t=en(),{showToast:e}=xn(),[n,r]=w.useState(!1),[a,s]=w.useState(!1),[o,l]=w.useState(new Set),[c,d]=w.useState(new Set),{data:u,isLoading:m}=Je({queryKey:["pending-uploads"],queryFn:Xg.list,refetchInterval:1e4}),{data:p}=Je({queryKey:["projects"],queryFn:()=>be.getProjects()}),f=ut({mutationFn:({id:y,data:_})=>Xg.archive(y,_),onMutate:({id:y})=>{l(_=>new Set(_).add(y))},onSettled:(y,_,{id:N})=>{l(C=>{const T=new Set(C);return T.delete(N),T})},onSuccess:y=>{t.invalidateQueries({queryKey:["pending-uploads"]}),t.invalidateQueries({queryKey:["archives"]}),e(`Archived: ${y.print_name}`)},onError:y=>{e(y.message||"Failed to archive","error")}}),x=ut({mutationFn:y=>Xg.discard(y),onMutate:y=>{d(_=>new Set(_).add(y))},onSettled:(y,_,N)=>{d(C=>{const T=new Set(C);return T.delete(N),T})},onSuccess:()=>{t.invalidateQueries({queryKey:["pending-uploads"]}),e("Upload discarded")},onError:y=>{e(y.message||"Failed to discard","error")}}),v=ut({mutationFn:Xg.archiveAll,onSuccess:y=>{t.invalidateQueries({queryKey:["pending-uploads"]}),t.invalidateQueries({queryKey:["archives"]}),e(`Archived ${y.archived} files${y.failed>0?`, ${y.failed} failed`:""}`)},onError:y=>{e(y.message||"Failed to archive all","error")}}),g=ut({mutationFn:Xg.discardAll,onSuccess:y=>{t.invalidateQueries({queryKey:["pending-uploads"]}),e(`Discarded ${y.discarded} files`)},onError:y=>{e(y.message||"Failed to discard all","error")}});return m?i.jsx(Tt,{children:i.jsx(Pt,{className:"py-8 flex justify-center",children:i.jsx(ct,{className:"w-6 h-6 animate-spin text-bambu-green"})})}):!u||u.length===0?null:i.jsxs("div",{className:"mb-6",children:[i.jsxs(Tt,{className:"border-l-4 border-l-yellow-500",children:[i.jsx(Vn,{children:i.jsxs("div",{className:"flex items-center justify-between",children:[i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx(Si,{className:"w-5 h-5 text-yellow-500"}),i.jsxs("h2",{className:"text-lg font-semibold text-white",children:["Pending Uploads (",u.length,")"]})]}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx(Oe,{variant:"primary",size:"sm",onClick:()=>r(!0),disabled:v.isPending,children:v.isPending?i.jsx(ct,{className:"w-4 h-4 animate-spin"}):i.jsxs(i.Fragment,{children:[i.jsx(Os,{className:"w-4 h-4"}),"Archive All"]})}),i.jsx(Oe,{variant:"secondary",size:"sm",onClick:()=>s(!0),disabled:g.isPending,children:g.isPending?i.jsx(ct,{className:"w-4 h-4 animate-spin"}):i.jsxs(i.Fragment,{children:[i.jsx(Xt,{className:"w-4 h-4"}),"Discard All"]})})]})]})}),i.jsxs(Pt,{children:[i.jsx("p",{className:"text-sm text-bambu-gray mb-4",children:"These files were uploaded via the virtual printer. Review and archive them to add to your collection."}),i.jsx("div",{className:"space-y-3",children:u.map(y=>i.jsx(BXe,{upload:y,projects:p||[],onArchive:(_,N)=>f.mutate({id:_,data:N}),onDiscard:_=>x.mutate(_),isArchiving:o.has(y.id),isDiscarding:c.has(y.id)},y.id))})]})]}),n&&i.jsx(kn,{title:"Archive All Uploads",message:`Are you sure you want to archive all ${u.length} pending uploads?`,confirmText:"Archive All",onConfirm:()=>{v.mutate(),r(!1)},onCancel:()=>r(!1)}),a&&i.jsx(kn,{title:"Discard All Uploads",message:`Are you sure you want to discard all ${u.length} pending uploads? This cannot be undone.`,confirmText:"Discard All",variant:"danger",onConfirm:()=>{g.mutate(),s(!1)},onCancel:()=>s(!1)})]})}function $Xe({onClose:t}){const e=en(),{showToast:n}=xn(),[r,a]=w.useState(""),[s,o]=w.useState(null),[l,c]=w.useState(""),[d,u]=w.useState(null),[m,p]=w.useState("count");w.useEffect(()=>{const A=R=>{R.key==="Escape"&&(s?o(null):d?u(null):t())};return window.addEventListener("keydown",A),()=>window.removeEventListener("keydown",A)},[t,s,d]);const{data:f,isLoading:x}=Je({queryKey:["tags"],queryFn:be.getTags}),v=ut({mutationFn:({oldName:A,newName:R})=>be.renameTag(A,R),onSuccess:(A,{oldName:R,newName:$})=>{e.invalidateQueries({queryKey:["tags"]}),e.invalidateQueries({queryKey:["archives"]}),n(`Renamed "${R}" to "${$}" in ${A.affected} archive${A.affected!==1?"s":""}`),o(null)},onError:A=>{n(A.message||"Failed to rename tag","error")}}),g=ut({mutationFn:A=>be.deleteTag(A),onSuccess:(A,R)=>{e.invalidateQueries({queryKey:["tags"]}),e.invalidateQueries({queryKey:["archives"]}),n(`Deleted "${R}" from ${A.affected} archive${A.affected!==1?"s":""}`),u(null)},onError:A=>{n(A.message||"Failed to delete tag","error")}}),y=A=>{o(A.name),c(A.name),u(null)},_=()=>{o(null),c("")},N=()=>{if(!s||!l.trim())return;const A=l.trim();if(A===s){_();return}v.mutate({oldName:s,newName:A})},C=A=>{A.key==="Enter"?(A.preventDefault(),N()):A.key==="Escape"&&(A.preventDefault(),_())},T=A=>{u(A),o(null)},P=()=>{d&&g.mutate(d)},k=f?.filter(A=>A.name.toLowerCase().includes(r.toLowerCase())).sort((A,R)=>m==="count"&&R.count-A.count||A.name.localeCompare(R.name)),D=f?.reduce((A,R)=>A+R.count,0)||0;return i.jsx("div",{className:"fixed inset-0 bg-black/50 flex items-center justify-center z-50 p-4",children:i.jsx(Tt,{className:"w-full max-w-lg max-h-[80vh] flex flex-col",children:i.jsxs(Pt,{className:"p-0 flex flex-col min-h-0",children:[i.jsxs("div",{className:"flex items-center justify-between p-4 border-b border-bambu-dark-tertiary flex-shrink-0",children:[i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx(uu,{className:"w-5 h-5 text-bambu-green"}),i.jsx("h2",{className:"text-xl font-semibold text-white",children:"Manage Tags"})]}),i.jsx("button",{onClick:t,className:"text-bambu-gray hover:text-white transition-colors",children:i.jsx(zt,{className:"w-5 h-5"})})]}),i.jsxs("div",{className:"p-4 border-b border-bambu-dark-tertiary flex-shrink-0",children:[i.jsxs("div",{className:"flex gap-2",children:[i.jsxs("div",{className:"relative flex-1",children:[i.jsx(jr,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-bambu-gray"}),i.jsx("input",{type:"text",placeholder:"Search tags...",className:"w-full pl-9 pr-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white text-sm focus:border-bambu-green focus:outline-none",value:r,onChange:A=>a(A.target.value)})]}),i.jsxs("select",{className:"px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white text-sm focus:border-bambu-green focus:outline-none",value:m,onChange:A=>p(A.target.value),children:[i.jsx("option",{value:"count",children:"Sort by Count"}),i.jsx("option",{value:"name",children:"Sort by Name"})]})]}),f&&i.jsxs("p",{className:"text-xs text-bambu-gray mt-2",children:[f.length," tag",f.length!==1?"s":""," across ",D," usage",D!==1?"s":""]})]}),i.jsx("div",{className:"flex-1 overflow-y-auto min-h-0 p-4",children:x?i.jsx("div",{className:"flex items-center justify-center py-8",children:i.jsx(ct,{className:"w-6 h-6 animate-spin text-bambu-gray"})}):k?.length?i.jsx("div",{className:"space-y-2",children:k.map(A=>i.jsx("div",{className:"flex items-center gap-2 p-2 rounded-lg bg-bambu-dark hover:bg-bambu-dark-tertiary transition-colors group",children:s===A.name?i.jsxs("div",{className:"flex-1 flex items-center gap-2",children:[i.jsx("input",{type:"text",className:"flex-1 px-2 py-1 bg-bambu-dark-tertiary border border-bambu-green rounded text-white text-sm focus:outline-none",value:l,onChange:R=>c(R.target.value),onKeyDown:C,autoFocus:!0}),i.jsx(Oe,{size:"sm",variant:"primary",onClick:N,disabled:!l.trim()||v.isPending,className:"p-1.5",children:v.isPending?i.jsx(ct,{className:"w-4 h-4 animate-spin"}):i.jsx(Vr,{className:"w-4 h-4"})}),i.jsx(Oe,{size:"sm",variant:"ghost",onClick:_,className:"p-1.5",children:i.jsx(zt,{className:"w-4 h-4"})})]}):d===A.name?i.jsxs("div",{className:"flex-1 flex items-center gap-2",children:[i.jsx(An,{className:"w-4 h-4 text-yellow-400 flex-shrink-0"}),i.jsxs("span",{className:"text-sm text-bambu-gray-light flex-1",children:['Delete "',A.name,'" from ',A.count," archive",A.count!==1?"s":"","?"]}),i.jsx(Oe,{size:"sm",variant:"danger",onClick:P,disabled:g.isPending,className:"p-1.5",children:g.isPending?i.jsx(ct,{className:"w-4 h-4 animate-spin"}):i.jsx(Xt,{className:"w-4 h-4"})}),i.jsx(Oe,{size:"sm",variant:"ghost",onClick:()=>u(null),className:"p-1.5",children:i.jsx(zt,{className:"w-4 h-4"})})]}):i.jsxs(i.Fragment,{children:[i.jsx(uu,{className:"w-4 h-4 text-bambu-gray flex-shrink-0"}),i.jsx("span",{className:"text-white flex-1 truncate",children:A.name}),i.jsx("span",{className:"px-2 py-0.5 rounded-full bg-bambu-dark-tertiary text-bambu-gray text-xs",children:A.count}),i.jsxs("div",{className:"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity",children:[i.jsx("button",{onClick:()=>y(A),className:"p-1.5 rounded hover:bg-bambu-dark text-bambu-gray hover:text-white transition-colors",title:"Rename tag",children:i.jsx(Ki,{className:"w-4 h-4"})}),i.jsx("button",{onClick:()=>T(A.name),className:"p-1.5 rounded hover:bg-bambu-dark text-bambu-gray hover:text-red-400 transition-colors",title:"Delete tag",children:i.jsx(Xt,{className:"w-4 h-4"})})]})]})},A.name))}):i.jsx("div",{className:"text-center py-8 text-bambu-gray",children:r?"No tags match your search":"No tags found"})}),i.jsx("div",{className:"flex gap-3 p-4 border-t border-bambu-dark-tertiary flex-shrink-0",children:i.jsx(Oe,{variant:"secondary",onClick:t,className:"flex-1",children:"Close"})})]})})})}function Pm(t){const e=t.filename;if(e){const n=e.toLowerCase();if(n.endsWith(".gcode")||n.includes(".gcode."))return!0}return!!(t.total_layers||t.print_time_seconds)}function ese(t){if(!t)return;const e=t.toLowerCase();return e.endsWith(".3mf")?"3mf":e.endsWith(".stl")?"stl":e.endsWith(".gcode")||e.includes(".gcode.")?"gcode":e.split(".").pop()}async function Am(t,e,n,r){try{if(n==="source"){const{token:a}=await be.createSourceSlicerToken(t),s=be.getSourceSlicerDownloadUrl(t,a,e);Sp(`${window.location.origin}${s}`,r)}else{const{token:a}=await be.createArchiveSlicerToken(t),s=be.getArchiveSlicerDownloadUrl(t,a,e);Sp(`${window.location.origin}${s}`,r)}}catch{const a=n==="source"?be.getSource3mfForSlicer(t,e):be.getArchiveForSlicer(t,e);Sp(`${window.location.origin}${a}`,r)}}function qXe({archive:t,printerName:e,isSelected:n,onSelect:r,selectionMode:a,projects:s,isHighlighted:o,timeFormat:l="system",preferredSlicer:c="bambu_studio",currency:d,t:u}){o&&console.log("ArchiveCard isHighlighted=true for archive:",t.id);const m=en(),{showToast:p}=xn(),{hasPermission:f,canModify:x}=Dr(),v=ire(),[g,y]=w.useState(!1),[_,N]=w.useState(!1),[C,T]=w.useState(!1),[P,k]=w.useState(!1),[D,A]=w.useState(!1),[R,$]=w.useState(!1),[U,G]=w.useState([]),[L,te]=w.useState(!1),[re,J]=w.useState(!1),[ue,me]=w.useState(!1),[fe,Q]=w.useState(!1),[ie,le]=w.useState(!1),[pe,Te]=w.useState(!1),[q,Z]=w.useState(!1),[j,E]=w.useState(null),[I,W]=w.useState(null),[B,ae]=w.useState(!1),z=w.useRef(null),V=w.useRef(null),ee=w.useRef(null),{data:K}=Je({queryKey:["archive-plates",t.id],queryFn:()=>be.getArchivePlates(t.id),enabled:B,staleTime:300*1e3}),ne=K?.plates??[],se=K?.is_multi_plate??!1,ce=I??0,ge=ut({mutationFn:()=>be.deleteArchiveTimelapse(t.id),onSuccess:()=>{m.invalidateQueries({queryKey:["archives"]}),p(u("archives.toast.timelapseRemoved"))},onError:Ne=>{p(Ne.message||u("archives.toast.failedRemoveTimelapse"),"error")}}),oe=ut({mutationFn:Ne=>be.uploadArchiveTimelapse(t.id,Ne),onSuccess:Ne=>{m.invalidateQueries({queryKey:["archives"]}),p(u("archives.toast.timelapseUploaded",{filename:Ne.filename}))},onError:Ne=>{p(Ne.message||u("archives.toast.failedUploadTimelapse"),"error")}}),O=ut({mutationFn:Ne=>be.uploadSource3mf(t.id,Ne),onSuccess:Ne=>{m.invalidateQueries({queryKey:["archives"]}),p(u("archives.toast.source3mfAttached",{filename:Ne.filename}))},onError:Ne=>{p(Ne.message||u("archives.toast.failedUploadSource3mf"),"error")}}),F=ut({mutationFn:()=>be.deleteSource3mf(t.id),onSuccess:()=>{m.invalidateQueries({queryKey:["archives"]}),p(u("archives.toast.source3mfRemoved"))},onError:Ne=>{p(Ne.message||u("archives.toast.failedRemoveSource3mf"),"error")}}),X=ut({mutationFn:Ne=>be.uploadF3d(t.id,Ne),onSuccess:Ne=>{m.invalidateQueries({queryKey:["archives"]}),p(u("archives.toast.f3dAttached",{filename:Ne.filename}))},onError:Ne=>{p(Ne.message||u("archives.toast.failedUploadF3d"),"error")}}),ye=ut({mutationFn:()=>be.deleteF3d(t.id),onSuccess:()=>{m.invalidateQueries({queryKey:["archives"]}),p(u("archives.toast.f3dRemoved"))},onError:Ne=>{p(Ne.message||u("archives.toast.failedRemoveF3d"),"error")}}),he=ut({mutationFn:()=>be.scanArchiveTimelapse(t.id),onSuccess:Ne=>{Ne.status==="attached"?(m.invalidateQueries({queryKey:["archives"]}),p(u("archives.toast.timelapseAttached",{filename:Ne.filename}))):Ne.status==="exists"?p(u("archives.toast.timelapseAlreadyAttached")):Ne.status==="not_found"&&Ne.available_files&&Ne.available_files.length>0?(G(Ne.available_files),$(!0)):p(Ne.message||u("archives.toast.noMatchingTimelapse"),"warning")},onError:Ne=>{p(Ne.message||u("archives.toast.failedScanTimelapse"),"error")}}),de=ut({mutationFn:Ne=>be.selectArchiveTimelapse(t.id,Ne),onSuccess:Ne=>{m.invalidateQueries({queryKey:["archives"]}),p(u("archives.toast.timelapseAttached",{filename:Ne.filename})),$(!1),G([])},onError:Ne=>{p(Ne.message||u("archives.toast.failedAttachTimelapse"),"error")}}),Me=ut({mutationFn:()=>be.deleteArchive(t.id),onSuccess:()=>{m.invalidateQueries({queryKey:["archives"]}),p(u("archives.toast.archiveDeleted"))},onError:()=>{p(u("archives.toast.failedDeleteArchive"),"error")}}),_e=ut({mutationFn:()=>be.toggleFavorite(t.id),onSuccess:Ne=>{m.invalidateQueries({queryKey:["archives"]}),p(Ne.is_favorite?u("archives.toast.addedToFavorites"):u("archives.toast.removedFromFavorites"))}}),{data:Be}=Je({queryKey:["archive-folders",t.id],queryFn:()=>be.getLibraryFoldersByArchive(t.id)}),$e=ut({mutationFn:Ne=>be.updateArchive(t.id,{project_id:Ne}),onSuccess:()=>{m.invalidateQueries({queryKey:["archives"]}),m.invalidateQueries({queryKey:["projects"]}),p(u("archives.toast.projectUpdated"))},onError:()=>{p(u("archives.toast.failedUpdateProject"),"error")}}),Le=Ne=>{Ne.preventDefault(),E({x:Ne.clientX,y:Ne.clientY})},Ee=[...Pm(t)?[{label:u("archives.menu.print"),icon:i.jsx(_r,{className:"w-4 h-4"}),onClick:()=>N(!0),disabled:!t.file_path||!x("archives","reprint",t.created_by_id),title:t.file_path?x("archives","reprint",t.created_by_id)?void 0:u("archives.permission.noReprint"):u("archives.card.noFileForReprint")},{label:u("archives.menu.schedule"),icon:i.jsx(Xr,{className:"w-4 h-4"}),onClick:()=>Q(!0),disabled:!t.file_path||!f("queue:create"),title:t.file_path?f("queue:create")?void 0:u("archives.permission.noAddToQueue"):u("archives.card.noFileForReprint")},{label:u("archives.menu.openInBambuStudio"),icon:i.jsx(ei,{className:"w-4 h-4"}),onClick:()=>{const Ne=t.print_name||t.filename||"model";Am(t.id,Ne,"file",c)},disabled:!t.file_path,title:t.file_path?void 0:u("archives.card.noFileForReprint")}]:[{label:u("archives.menu.slice"),icon:i.jsx(ei,{className:"w-4 h-4"}),onClick:()=>{const Ne=t.print_name||t.filename||"model";Am(t.id,Ne,"file",c)}}],{label:t.external_url?u("archives.menu.externalLink"):u("archives.menu.viewOnMakerWorld"),icon:i.jsx(qm,{className:"w-4 h-4"}),onClick:()=>{const Ne=t.external_url||t.makerworld_url;Ne&&window.open(Ne,"_blank")},disabled:!t.external_url&&!t.makerworld_url},{label:"",divider:!0,onClick:()=>{}},{label:u("archives.menu.preview3d"),icon:i.jsx(ia,{className:"w-4 h-4"}),onClick:()=>y(!0)},{label:u("archives.menu.viewTimelapse"),icon:i.jsx($m,{className:"w-4 h-4"}),onClick:()=>A(!0),disabled:!t.timelapse_path},{label:u("archives.menu.scanForTimelapse"),icon:i.jsx(G1,{className:"w-4 h-4"}),onClick:()=>he.mutate(),disabled:!t.printer_id||!!t.timelapse_path||he.isPending||!x("archives","update",t.created_by_id),title:x("archives","update",t.created_by_id)?void 0:u("archives.permission.noUpdateArchives")},{label:u("archives.menu.uploadTimelapse"),icon:i.jsx(Si,{className:"w-4 h-4"}),onClick:()=>ee.current?.click(),disabled:!!t.timelapse_path||!x("archives","update",t.created_by_id),title:x("archives","update",t.created_by_id)?void 0:u("archives.permission.noUpdateArchives")},...t.timelapse_path?[{label:u("archives.menu.removeTimelapse"),icon:i.jsx(Xt,{className:"w-4 h-4"}),onClick:()=>Z(!0),danger:!0,disabled:!x("archives","update",t.created_by_id),title:x("archives","update",t.created_by_id)?void 0:u("archives.permission.noUpdateArchives")}]:[],{label:"",divider:!0,onClick:()=>{}},{label:t.source_3mf_path?u("archives.menu.downloadSource3mf"):u("archives.menu.uploadSource3mf"),icon:i.jsx(H1,{className:"w-4 h-4"}),onClick:()=>{t.source_3mf_path?be.downloadSource3mf(t.id).catch(Ne=>{console.error("Source 3MF download failed:",Ne)}):z.current?.click()},disabled:!t.source_3mf_path&&!x("archives","update",t.created_by_id),title:!t.source_3mf_path&&!x("archives","update",t.created_by_id)?u("archives.permission.noUploadFiles"):void 0},...t.source_3mf_path?[{label:u("archives.menu.replaceSource3mf"),icon:i.jsx(Si,{className:"w-4 h-4"}),onClick:()=>z.current?.click(),disabled:!x("archives","update",t.created_by_id),title:x("archives","update",t.created_by_id)?void 0:u("archives.permission.noUpdateArchives")},{label:u("archives.menu.removeSource3mf"),icon:i.jsx(Xt,{className:"w-4 h-4"}),onClick:()=>le(!0),danger:!0,disabled:!x("archives","update",t.created_by_id),title:x("archives","update",t.created_by_id)?void 0:u("archives.permission.noUpdateArchives")}]:[],{label:t.f3d_path?u("archives.menu.replaceF3d"):u("archives.menu.uploadF3d"),icon:i.jsx(ia,{className:"w-4 h-4"}),onClick:()=>V.current?.click(),disabled:!x("archives","update",t.created_by_id),title:x("archives","update",t.created_by_id)?void 0:u("archives.permission.noUpdateArchives")},...t.f3d_path?[{label:u("archives.menu.downloadF3d"),icon:i.jsx(hi,{className:"w-4 h-4"}),onClick:()=>{be.downloadF3d(t.id).catch(Ne=>{console.error("F3D download failed:",Ne)})}},{label:u("archives.menu.removeF3d"),icon:i.jsx(Xt,{className:"w-4 h-4"}),onClick:()=>Te(!0),danger:!0,disabled:!x("archives","update",t.created_by_id),title:x("archives","update",t.created_by_id)?void 0:u("archives.permission.noUpdateArchives")}]:[],{label:"",divider:!0,onClick:()=>{}},{label:u("archives.menu.download"),icon:i.jsx(hi,{className:"w-4 h-4"}),onClick:()=>{be.downloadArchive(t.id,`${t.print_name||t.filename}.3mf`).catch(Ne=>{console.error("Archive download failed:",Ne)})},disabled:!f("archives:read"),title:f("archives:read")?void 0:u("archives.permission.noDownload")},{label:u("archives.menu.copyDownloadLink"),icon:i.jsx(_l,{className:"w-4 h-4"}),onClick:()=>{const Ne=`${window.location.origin}${be.getArchiveDownload(t.id)}`;navigator.clipboard.writeText(Ne).then(()=>{p(u("archives.toast.linkCopied"))}).catch(()=>{p(u("archives.toast.failedCopyLink"),"error")})},disabled:!f("archives:read"),title:f("archives:read")?void 0:u("archives.permission.noCopyLink")},{label:u("archives.menu.qrCode"),icon:i.jsx(YY,{className:"w-4 h-4"}),onClick:()=>te(!0)},{label:t.photos?.length?u("archives.menu.viewPhotosCount",{count:t.photos.length}):u("archives.menu.viewPhotos"),icon:i.jsx(Mb,{className:"w-4 h-4"}),onClick:()=>J(!0),disabled:!t.photos?.length},{label:u("archives.menu.projectPage"),icon:i.jsx(Ds,{className:"w-4 h-4"}),onClick:()=>me(!0)},{label:"",divider:!0,onClick:()=>{}},{label:t.is_favorite?u("archives.menu.removeFromFavorites"):u("archives.menu.addToFavorites"),icon:i.jsx(Vp,{className:`w-4 h-4 ${t.is_favorite?"fill-yellow-400 text-yellow-400":""}`}),onClick:()=>_e.mutate(),disabled:!x("archives","update",t.created_by_id),title:x("archives","update",t.created_by_id)?void 0:u("archives.permission.noUpdateArchives")},{label:u("archives.menu.edit"),icon:i.jsx(Ki,{className:"w-4 h-4"}),onClick:()=>k(!0),disabled:!x("archives","update",t.created_by_id),title:x("archives","update",t.created_by_id)?void 0:u("archives.permission.noUpdateArchives")},...t.project_id&&t.project_name?[{label:u("archives.menu.goToProject",{name:t.project_name}),icon:i.jsx(bs,{className:"w-4 h-4 text-bambu-green"}),onClick:()=>window.location.href="/projects"}]:[],{label:u("archives.menu.addToProject"),icon:i.jsx(bs,{className:"w-4 h-4"}),onClick:()=>{},disabled:!x("archives","update",t.created_by_id),title:x("archives","update",t.created_by_id)?void 0:u("archives.permission.noUpdateArchives"),submenu:(()=>{const Ne=[];if(t.project_id&&Ne.push({label:u("archives.menu.removeFromProject"),icon:i.jsx(zt,{className:"w-4 h-4"}),onClick:()=>$e.mutate(null),disabled:!x("archives","update",t.created_by_id)}),!s)Ne.push({label:u("archives.menu.loading"),icon:i.jsx(ct,{className:"w-4 h-4 animate-spin"}),onClick:()=>{},disabled:!0});else{const Ae=s.filter(Ge=>Ge.status==="active");Ae.length===0?Ne.push({label:u("archives.menu.noProjectsAvailable"),icon:i.jsx(bs,{className:"w-4 h-4 opacity-50"}),onClick:()=>{},disabled:!0}):Ae.forEach(Ge=>{Ne.push({label:Ge.name,icon:i.jsx("div",{className:"w-3 h-3 rounded-full flex-shrink-0",style:{backgroundColor:Ge.color||"#888"}}),onClick:()=>$e.mutate(Ge.id),disabled:t.project_id===Ge.id||!x("archives","update",t.created_by_id)})})}return Ne})()},{label:u(n?"archives.menu.deselect":"archives.menu.select"),icon:n?i.jsx(ho,{className:"w-4 h-4"}):i.jsx(Nl,{className:"w-4 h-4"}),onClick:()=>r(t.id)},{label:"",divider:!0,onClick:()=>{}},{label:u("archives.menu.delete"),icon:i.jsx(Xt,{className:"w-4 h-4"}),onClick:()=>T(!0),danger:!0,disabled:!x("archives","delete",t.created_by_id),title:x("archives","delete",t.created_by_id)?void 0:u("archives.permission.noDelete")}];return i.jsxs(Tt,{"data-archive-id":t.id,className:`relative flex flex-col group ${n?"ring-2 ring-bambu-green":""} ${a?"cursor-pointer":""}`,style:o?{outline:"4px solid #facc15",outlineOffset:"2px"}:void 0,onContextMenu:Le,onClick:a?()=>r(t.id):void 0,children:[a&&i.jsx("button",{className:"absolute top-2 left-2 z-10 p-1 rounded bg-black/50 hover:bg-black/70 transition-colors",onClick:Ne=>{Ne.stopPropagation(),r(t.id)},children:n?i.jsx(ho,{className:"w-5 h-5 text-bambu-green"}):i.jsx(Nl,{className:"w-5 h-5 text-white"})}),i.jsxs("div",{className:"aspect-video bg-bambu-dark relative flex-shrink-0 overflow-hidden rounded-t-xl",onMouseEnter:()=>ae(!0),onMouseLeave:()=>ae(!1),children:[t.thumbnail_path?i.jsx("img",{src:I!==null&&ne.length>0?be.getArchivePlateThumbnail(t.id,ne[ce]?.index??0):be.getArchiveThumbnail(t.id),alt:t.print_name||t.filename,className:"w-full h-full object-cover"}):i.jsx("div",{className:"w-full h-full flex items-center justify-center",children:i.jsx(cu,{className:"w-12 h-12 text-bambu-dark-tertiary"})}),se&&ne.length>1&&i.jsxs(i.Fragment,{children:[i.jsx("button",{className:`absolute left-1 top-1/2 -translate-y-1/2 p-1 rounded-full bg-black/60 hover:bg-black/80 transition-all ${v?"opacity-100":"opacity-0 group-hover:opacity-100"}`,onClick:Ne=>{Ne.stopPropagation(),W(Ae=>{const Ge=Ae??0;return Ge>0?Ge-1:ne.length-1})},title:u("archives.card.previousPlate"),children:i.jsx(nc,{className:"w-4 h-4 text-white"})}),i.jsx("button",{className:`absolute right-1 top-1/2 -translate-y-1/2 p-1 rounded-full bg-black/60 hover:bg-black/80 transition-all ${v?"opacity-100":"opacity-0 group-hover:opacity-100"}`,onClick:Ne=>{Ne.stopPropagation(),W(Ae=>{const Ge=Ae??0;return Gei.jsx("button",{className:`w-2 h-2 rounded-full transition-colors ${Ae===ce?"bg-bambu-green":"bg-white/50 hover:bg-white/80"}`,onClick:Ge=>{Ge.stopPropagation(),W(Ae)},title:Ne.name||u("archives.card.plateNumber",{index:Ne.index})},Ne.index))})]}),i.jsx("button",{className:`absolute top-2 left-2 p-1.5 rounded bg-black/50 hover:bg-black/70 transition-all ${v?"opacity-100":"opacity-0 group-hover:opacity-100"} ${a?"left-10":""}`,onClick:Ne=>{Ne.stopPropagation();const Ae=Ne.currentTarget.getBoundingClientRect();E({x:Ae.left,y:Ae.bottom+4})},title:u("archives.card.moreOptions"),children:i.jsx(Hm,{className:"w-5 h-5 text-white"})}),i.jsx("button",{className:`absolute top-2 right-2 p-1 rounded transition-colors ${x("archives","update",t.created_by_id)?"bg-black/50 hover:bg-black/70":"bg-black/30 cursor-not-allowed"}`,onClick:Ne=>{Ne.stopPropagation(),x("archives","update",t.created_by_id)&&_e.mutate()},disabled:!x("archives","update",t.created_by_id),title:x("archives","update",t.created_by_id)?t.is_favorite?u("archives.card.removeFromFavorites"):u("archives.card.addToFavorites"):u("archives.permission.noUpdateArchives"),children:i.jsx(Vp,{className:`w-5 h-5 ${t.is_favorite?"text-yellow-400 fill-yellow-400":"text-white"} ${x("archives","update",t.created_by_id)?"":"opacity-50"}`})}),(t.status==="failed"||t.status==="aborted")&&i.jsx("div",{className:"absolute top-2 left-12 px-2 py-1 rounded text-xs bg-status-error/80 text-white",children:t.status==="aborted"?u("archives.card.cancelled"):u("archives.card.failed")}),t.duplicate_count>0&&i.jsxs("div",{className:"absolute top-2 right-12 px-2 py-1 rounded text-xs bg-purple-500/80 text-white flex items-center gap-1",title:u("archives.card.duplicateTitle"),children:[i.jsx(_l,{className:"w-3 h-3"}),u("archives.card.duplicate")]}),t.source_3mf_path&&i.jsx("button",{className:"absolute bottom-2 left-2 p-1.5 rounded bg-black/60 hover:bg-black/80 transition-colors",onClick:Ne=>{Ne.stopPropagation();const Ae=(t.print_name||t.filename||"source").replace(/\.gcode\.3mf$/i,"")+"_source";Am(t.id,Ae,"source",c)},title:u("archives.card.openSource3mf"),children:i.jsx(H1,{className:"w-4 h-4 text-orange-400"})}),t.f3d_path&&i.jsx("button",{className:`absolute bottom-2 ${t.source_3mf_path?"left-12":"left-2"} p-1.5 rounded bg-black/60 hover:bg-black/80 transition-colors`,onClick:Ne=>{Ne.stopPropagation(),be.downloadF3d(t.id).catch(Ae=>{console.error("F3D download failed:",Ae)})},title:u("archives.card.downloadF3d"),children:i.jsx(ia,{className:"w-4 h-4 text-cyan-400"})}),i.jsx("button",{className:"absolute bottom-2 right-2 p-1.5 rounded bg-black/60 hover:bg-black/80 transition-colors",onClick:Ne=>{Ne.stopPropagation(),y(!0)},title:u("archives.card.preview3d"),children:i.jsx(Gi,{className:"w-4 h-4 text-white"})}),t.timelapse_path&&i.jsx("button",{className:"absolute bottom-2 right-12 p-1.5 rounded bg-black/60 hover:bg-black/80 transition-colors",onClick:Ne=>{Ne.stopPropagation(),A(!0)},title:u("archives.card.viewTimelapse"),children:i.jsx($m,{className:"w-4 h-4 text-bambu-green"})}),t.photos&&t.photos.length>0&&i.jsxs("button",{className:`absolute bottom-2 ${t.timelapse_path?"right-[5.5rem]":"right-12"} p-1.5 rounded bg-black/60 hover:bg-black/80 transition-colors`,onClick:Ne=>{Ne.stopPropagation(),J(!0)},title:t.photos.length===1?u("archives.card.viewPhoto"):u("archives.card.viewPhotos",{count:t.photos.length}),children:[i.jsx(Mb,{className:"w-4 h-4 text-blue-400"}),t.photos.length>1&&i.jsx("span",{className:"absolute -top-1 -right-1 w-4 h-4 bg-blue-500 rounded-full text-[10px] text-white flex items-center justify-center",children:t.photos.length})]}),Be&&Be.length>0&&i.jsx(eo,{to:`/files?folder=${Be[0].id}`,className:"absolute bottom-2 p-1.5 rounded bg-black/60 hover:bg-black/80 transition-colors",onClick:Ne=>Ne.stopPropagation(),title:u("archives.card.openFolder",{name:Be[0].name}),style:{left:t.source_3mf_path?t.f3d_path?"5.5rem":"3rem":t.f3d_path?"3rem":"0.5rem"},children:i.jsx(ic,{className:"w-4 h-4 text-yellow-400"})})]}),i.jsxs(Pt,{className:"p-4 flex-1 flex flex-col",children:[i.jsxs("div",{className:"flex items-center justify-between gap-2 mb-1",children:[i.jsx("h3",{className:"min-w-0 font-medium text-white truncate",children:t.print_name||t.filename}),i.jsx(Oe,{variant:"ghost",size:"sm",className:"p-1 sm:p-1.5 shrink-0",onClick:()=>k(!0),disabled:!x("archives","update",t.created_by_id),title:x("archives","update",t.created_by_id)?u("archives.card.edit"):u("archives.card.noPermissionEdit"),children:i.jsx(Ki,{className:"w-3 h-3 sm:w-4 sm:h-4"})})]}),i.jsxs("div",{className:"flex items-center gap-2 mb-3 flex-wrap",children:[i.jsx("p",{className:"text-xs text-bambu-gray",children:e}),i.jsx("span",{className:`text-[10px] px-1.5 py-0.5 rounded font-medium ${Pm(t)?"bg-bambu-green/20 text-bambu-green":"bg-orange-500/20 text-orange-400"}`,title:Pm(t)?u("archives.card.slicedFile"):u("archives.card.sourceFile"),children:Pm(t)?u("archives.card.gcode"):u("archives.card.source")}),t.project_name&&i.jsx("span",{className:"text-xs px-1.5 py-0.5 rounded-full truncate max-w-[120px]",style:{backgroundColor:`${s?.find(Ne=>Ne.id===t.project_id)?.color||"#6b7280"}20`,color:s?.find(Ne=>Ne.id===t.project_id)?.color||"#6b7280"},title:u("archives.card.project",{name:t.project_name}),children:t.project_name})]}),i.jsxs("div",{className:"grid grid-cols-2 gap-2 text-xs mb-4 min-h-[48px]",children:[(t.print_time_seconds||t.actual_time_seconds)&&i.jsxs("div",{className:"flex items-center gap-1.5 text-bambu-gray",title:t.time_accuracy?`Estimated: ${js(t.print_time_seconds||0)}
Actual: ${js(t.actual_time_seconds||0)}
-Accuracy: ${t.time_accuracy.toFixed(0)}%`:t.actual_time_seconds?`Actual: ${js(t.actual_time_seconds)}`:`Estimated: ${js(t.print_time_seconds||0)}`,children:[i.jsx(Zn,{className:"w-3 h-3"}),js(t.actual_time_seconds||t.print_time_seconds||0),t.time_accuracy&&i.jsxs("span",{className:`text-[10px] px-1 rounded ${t.time_accuracy>=95&&t.time_accuracy<=105?"bg-bambu-green/20 text-bambu-green":t.time_accuracy>105?"bg-blue-500/20 text-blue-400":"bg-orange-500/20 text-orange-400"}`,children:[t.time_accuracy>100?"+":"",(t.time_accuracy-100).toFixed(0),"%"]})]}),t.filament_used_grams&&i.jsxs("div",{className:"flex items-center gap-1.5 text-bambu-gray",children:[i.jsx(oa,{className:"w-3 h-3"}),t.filament_used_grams.toFixed(1),"g"]}),(t.cost!=null||t.energy_cost!=null)&&i.jsxs("div",{className:"flex items-center gap-3 text-bambu-gray",children:[t.cost!=null&&i.jsxs("div",{className:"flex items-center gap-1.5",children:[i.jsx(Nhe,{className:"w-3 h-3"}),d,t.cost.toFixed(2)]}),t.energy_cost!=null&&i.jsxs("div",{className:"flex items-center gap-1.5",title:`${u("stats.energyUsed")}: ${t.energy_kwh?.toFixed(3)||"N/A"} kWh`,children:[i.jsx(ac,{className:"w-3 h-3"}),d,t.energy_cost.toFixed(2)]})]}),(t.layer_height||t.total_layers)&&i.jsxs("div",{className:"flex items-center gap-1.5 text-bambu-gray",children:[i.jsx(Gi,{className:"w-3 h-3"}),t.total_layers&&i.jsx("span",{children:t.total_layers===1?u("archives.card.layer",{count:t.total_layers}):u("archives.card.layers",{count:t.total_layers})}),t.total_layers&&t.layer_height&&i.jsx("span",{className:"text-bambu-gray/50",children:"·"}),t.layer_height&&i.jsxs("span",{children:[t.layer_height,"mm"]})]}),t.object_count!=null&&t.object_count>0&&i.jsxs("div",{className:"flex items-center gap-1.5 text-bambu-gray",title:t.object_count===1?u("archives.card.object",{count:t.object_count}):u("archives.card.objects",{count:t.object_count}),children:[i.jsx(ia,{className:"w-3 h-3"}),t.object_count===1?u("archives.card.object",{count:t.object_count}):u("archives.card.objects",{count:t.object_count})]}),t.sliced_for_model&&i.jsxs("div",{className:"flex items-center gap-1.5 text-bambu-gray",title:u("archives.card.slicedFor",{model:t.sliced_for_model}),children:[i.jsx(_r,{className:"w-3 h-3"}),t.sliced_for_model]}),t.filament_type&&i.jsxs("div",{className:"flex items-center gap-1.5 col-span-2",children:[i.jsx("span",{className:"text-bambu-gray text-xs",children:t.filament_type}),t.filament_color&&i.jsx("div",{className:"flex items-center gap-0.5 flex-wrap",children:t.filament_color.split(",").map((Ne,Ae)=>i.jsx("div",{className:"w-3 h-3 rounded-full border border-white/20",style:{backgroundColor:Ne},title:Ne},Ae))})]})]}),(t.tags||t.notes)&&i.jsxs("div",{className:"flex flex-wrap items-center gap-1.5 mb-3",children:[t.notes&&i.jsx("div",{className:"flex items-center gap-1 px-1.5 py-0.5 bg-blue-500/20 text-blue-400 rounded text-xs",title:t.notes,children:i.jsx(ZY,{className:"w-3 h-3"})}),t.tags?.split(",").map((Ne,Ae)=>i.jsx("span",{className:"px-1.5 py-0.5 bg-bambu-dark-tertiary text-bambu-gray-light rounded text-xs",children:Ne.trim()},Ae))]}),i.jsx("div",{className:"flex-1"}),i.jsxs("div",{className:"flex items-center justify-between text-xs text-bambu-gray border-t border-bambu-dark-tertiary pt-3",children:[i.jsx("span",{children:Kp(t.created_at,l)}),i.jsxs("div",{className:"flex items-center gap-2",children:[t.created_by_username&&i.jsxs("span",{className:"flex items-center gap-1",title:u("archives.card.uploadedBy",{name:t.created_by_username}),children:[i.jsx(mu,{className:"w-3 h-3"}),t.created_by_username]}),i.jsx("span",{children:ro(t.file_size)})]})]}),i.jsxs("div",{className:"flex gap-1 mt-3",children:[Pm(t)?i.jsxs(i.Fragment,{children:[i.jsxs(Oe,{variant:"primary",size:"sm",className:"flex-1 min-w-0",onClick:()=>N(!0),disabled:!t.file_path||!x("archives","reprint",t.created_by_id),title:t.file_path?x("archives","reprint",t.created_by_id)?void 0:u("archives.card.noPermissionReprint"):u("archives.card.noFileForReprint"),children:[i.jsx(_r,{className:"w-3 h-3 flex-shrink-0"}),i.jsx("span",{className:"hidden sm:inline",children:u("archives.card.reprint")})]}),i.jsxs(Oe,{variant:"secondary",size:"sm",className:"flex-1 min-w-0",onClick:()=>Q(!0),disabled:!t.file_path||!f("queue:create"),title:t.file_path?f("queue:create")?u("archives.card.schedulePrint"):u("archives.permission.noAddToQueue"):u("archives.card.noFileForReprint"),children:[i.jsx(Xr,{className:"w-3 h-3 flex-shrink-0"}),i.jsx("span",{className:"hidden sm:inline",children:u("archives.card.schedule")})]}),i.jsx(Oe,{variant:"secondary",size:"sm",className:"min-w-0 p-1 sm:p-1.5",onClick:()=>{const Ne=t.print_name||t.filename||"model";Am(t.id,Ne,"file",c)},title:u("archives.card.openInBambuStudio"),children:i.jsx(ei,{className:"w-3 h-3 sm:w-4 sm:h-4"})})]}):i.jsxs(Oe,{variant:"primary",size:"sm",className:"flex-1 min-w-0",onClick:()=>{const Ne=t.print_name||t.filename||"model";Am(t.id,Ne,"file",c)},title:u("archives.card.openInBambuStudioToSlice"),children:[i.jsx(ei,{className:"w-3 h-3 flex-shrink-0"}),i.jsx("span",{className:"hidden sm:inline",children:u("archives.card.slice")})]}),i.jsx(Oe,{variant:"secondary",size:"sm",className:"min-w-0 p-1 sm:p-1.5",onClick:()=>{const Ne=t.external_url||t.makerworld_url;Ne&&window.open(Ne,"_blank")},disabled:!t.external_url&&!t.makerworld_url,title:t.external_url?u("archives.card.externalLink"):t.makerworld_url?u("archives.card.makerWorld",{designer:t.designer||u("archives.card.viewProject")}):u("archives.card.noExternalLink"),children:i.jsx(qm,{className:`w-3 h-3 sm:w-4 sm:h-4 ${!t.external_url&&!t.makerworld_url?"opacity-20":""}`})}),i.jsx(Oe,{variant:"secondary",size:"sm",className:"min-w-0 p-1 sm:p-1.5",onClick:()=>{be.downloadArchive(t.id,`${t.print_name||t.filename}.3mf`).catch(Ne=>{console.error("Archive download failed:",Ne)})},title:u("archives.card.download"),children:i.jsx(hi,{className:"w-3 h-3 sm:w-4 sm:h-4"})}),i.jsx(Oe,{variant:"ghost",size:"sm",className:"min-w-0 p-1 sm:p-1.5",onClick:()=>T(!0),disabled:!x("archives","delete",t.created_by_id),title:x("archives","delete",t.created_by_id)?u("archives.card.delete"):u("archives.card.noPermissionDelete"),children:i.jsx(Xt,{className:"w-3 h-3 sm:w-4 sm:h-4 text-red-400"})})]})]}),P&&i.jsx(are,{archive:t,onClose:()=>k(!1)}),g&&i.jsx(L4,{archiveId:t.id,title:t.print_name||t.filename,fileType:ese(t.filename),onClose:()=>y(!1)}),_&&i.jsx(Vc,{mode:"reprint",archiveId:t.id,archiveName:t.print_name||t.filename,onClose:()=>N(!1)}),C&&i.jsx(kn,{title:u("archives.modal.deleteArchive"),message:u("archives.modal.deleteConfirm",{name:t.print_name||t.filename}),confirmText:u("archives.modal.deleteButton"),variant:"danger",onConfirm:()=>{Me.mutate(),T(!1)},onCancel:()=>T(!1)}),ie&&i.jsx(kn,{title:u("archives.modal.removeSource3mf"),message:u("archives.modal.removeSource3mfConfirm",{name:t.print_name||t.filename}),confirmText:u("archives.modal.removeButton"),variant:"danger",onConfirm:()=>{F.mutate(),le(!1)},onCancel:()=>le(!1)}),pe&&i.jsx(kn,{title:u("archives.modal.removeF3d"),message:u("archives.modal.removeF3dConfirm",{name:t.print_name||t.filename}),confirmText:u("archives.modal.removeButton"),variant:"danger",onConfirm:()=>{ye.mutate(),Te(!1)},onCancel:()=>Te(!1)}),q&&i.jsx(kn,{title:u("archives.modal.removeTimelapse"),message:u("archives.modal.removeTimelapseConfirm",{name:t.print_name||t.filename}),confirmText:u("archives.modal.removeButton"),variant:"danger",onConfirm:()=>{ge.mutate(),Z(!1)},onCancel:()=>Z(!1)}),j&&i.jsx(sre,{x:j.x,y:j.y,items:Ee,onClose:()=>E(null)}),D&&t.timelapse_path&&i.jsx(Jae,{src:be.getArchiveTimelapse(t.id),title:u("archives.modal.timelapse",{name:t.print_name||t.filename}),downloadFilename:`${t.print_name||t.filename}_timelapse.mp4`,archiveId:t.id,onClose:()=>A(!1),onEdit:()=>{m.invalidateQueries({queryKey:["archives"]}),A(!1)}}),R&&U.length>0&&i.jsx("div",{className:"fixed inset-0 bg-black/80 flex items-center justify-center z-50 p-4",children:i.jsxs("div",{className:"bg-card-dark rounded-lg max-w-lg w-full max-h-[80vh] flex flex-col",children:[i.jsxs("div",{className:"flex items-center justify-between p-4 border-b border-gray-700",children:[i.jsxs("div",{children:[i.jsx("h3",{className:"text-lg font-semibold text-white",children:u("archives.modal.selectTimelapse")}),i.jsx("p",{className:"text-sm text-gray-400 mt-1",children:u("archives.modal.selectTimelapseDesc")})]}),i.jsx("button",{onClick:()=>{$(!1),G([])},className:"text-gray-400 hover:text-white p-1",children:i.jsx(zt,{className:"w-5 h-5"})})]}),i.jsx("div",{className:"overflow-y-auto flex-1 p-2",children:U.map(Ne=>i.jsxs("button",{onClick:()=>de.mutate(Ne.name),disabled:de.isPending,className:"w-full text-left p-3 rounded-lg hover:bg-gray-700 transition-colors flex items-center gap-3 disabled:opacity-50",children:[i.jsx($m,{className:"w-8 h-8 text-bambu-green flex-shrink-0"}),i.jsxs("div",{className:"flex-1 min-w-0",children:[i.jsx("p",{className:"text-white font-medium truncate",children:Ne.name}),i.jsxs("p",{className:"text-sm text-gray-400",children:[ro(Ne.size),Ne.mtime&&` • ${Kp(Ne.mtime,l)}`]})]})]},Ne.name))}),i.jsx("div",{className:"p-4 border-t border-gray-700",children:i.jsx(Oe,{variant:"secondary",onClick:()=>{$(!1),G([])},className:"w-full",children:"Cancel"})})]})}),L&&i.jsx(ore,{archiveId:t.id,archiveName:t.print_name||t.filename,onClose:()=>te(!1)}),re&&t.photos&&t.photos.length>0&&i.jsx(lre,{archiveId:t.id,archiveName:t.print_name||t.filename,photos:t.photos,onClose:()=>J(!1),onDelete:async Ne=>{try{await be.deleteArchivePhoto(t.id,Ne),m.invalidateQueries({queryKey:["archives"]}),p(u("archives.toast.photoDeleted"))}catch{p(u("archives.toast.failedDeletePhoto"),"error")}}}),ue&&i.jsx(Zae,{archiveId:t.id,archiveName:t.print_name||t.filename,onClose:()=>me(!1)}),fe&&i.jsx(Vc,{mode:"add-to-queue",archiveId:t.id,archiveName:t.print_name||t.filename,onClose:()=>Q(!1)}),i.jsx("input",{ref:z,type:"file",accept:".3mf",className:"hidden",onChange:Ne=>{const Ae=Ne.target.files?.[0];Ae&&O.mutate(Ae),Ne.target.value=""}}),i.jsx("input",{ref:V,type:"file",accept:".f3d",className:"hidden",onChange:Ne=>{const Ae=Ne.target.files?.[0];Ae&&X.mutate(Ae),Ne.target.value=""}}),i.jsx("input",{ref:ee,type:"file",accept:".mp4,.avi,.mkv",className:"hidden",onChange:Ne=>{const Ae=Ne.target.files?.[0];Ae&&oe.mutate(Ae),Ne.target.value=""}})]})}function VXe({archive:t,printerName:e,isSelected:n,onSelect:r,selectionMode:a,projects:s,isHighlighted:o,preferredSlicer:l="bambu_studio",t:c}){const d=en(),{showToast:u}=xn(),{hasPermission:m,canModify:p}=Dr(),[f,x]=w.useState(!1),[v,g]=w.useState(!1),[y,_]=w.useState(!1),[N,C]=w.useState(!1),[T,P]=w.useState(!1),[k,D]=w.useState(!1),[A,R]=w.useState(!1),[$,U]=w.useState([]),[G,L]=w.useState(!1),[te,re]=w.useState(!1),[J,ue]=w.useState(!1),[me,fe]=w.useState(!1),[Q,ie]=w.useState(!1),[le,pe]=w.useState(!1),[Te,q]=w.useState(null),Z=w.useRef(null),j=w.useRef(null),E=w.useRef(null),I=ut({mutationFn:()=>be.deleteArchiveTimelapse(t.id),onSuccess:()=>{d.invalidateQueries({queryKey:["archives"]}),u(c("archives.toast.timelapseRemoved"))},onError:X=>{u(X.message||c("archives.toast.failedRemoveTimelapse"),"error")}}),W=ut({mutationFn:X=>be.uploadArchiveTimelapse(t.id,X),onSuccess:X=>{d.invalidateQueries({queryKey:["archives"]}),u(c("archives.toast.timelapseUploaded",{filename:X.filename}))},onError:X=>{u(X.message||c("archives.toast.failedUploadTimelapse"),"error")}}),B=ut({mutationFn:X=>be.uploadSource3mf(t.id,X),onSuccess:X=>{d.invalidateQueries({queryKey:["archives"]}),u(c("archives.toast.source3mfAttached",{filename:X.filename}))},onError:X=>{u(X.message||c("archives.toast.failedUploadSource3mf"),"error")}}),ae=ut({mutationFn:()=>be.deleteSource3mf(t.id),onSuccess:()=>{d.invalidateQueries({queryKey:["archives"]}),u(c("archives.toast.source3mfRemoved"))},onError:X=>{u(X.message||c("archives.toast.failedRemoveSource3mf"),"error")}}),z=ut({mutationFn:X=>be.uploadF3d(t.id,X),onSuccess:X=>{d.invalidateQueries({queryKey:["archives"]}),u(c("archives.toast.f3dAttached",{filename:X.filename}))},onError:X=>{u(X.message||c("archives.toast.failedUploadF3d"),"error")}}),V=ut({mutationFn:()=>be.deleteF3d(t.id),onSuccess:()=>{d.invalidateQueries({queryKey:["archives"]}),u(c("archives.toast.f3dRemoved"))},onError:X=>{u(X.message||c("archives.toast.failedRemoveF3d"),"error")}}),ee=ut({mutationFn:()=>be.scanArchiveTimelapse(t.id),onSuccess:X=>{X.status==="attached"?(d.invalidateQueries({queryKey:["archives"]}),u(c("archives.toast.timelapseAttached",{filename:X.filename}))):X.status==="exists"?u(c("archives.toast.timelapseAlreadyAttached")):X.status==="not_found"&&X.available_files&&X.available_files.length>0?(U(X.available_files),R(!0)):u(X.message||c("archives.toast.noMatchingTimelapse"),"warning")},onError:X=>{u(X.message||c("archives.toast.failedScanTimelapse"),"error")}}),K=ut({mutationFn:X=>be.selectArchiveTimelapse(t.id,X),onSuccess:X=>{d.invalidateQueries({queryKey:["archives"]}),u(c("archives.toast.timelapseAttached",{filename:X.filename})),R(!1),U([])},onError:X=>{u(X.message||c("archives.toast.failedAttachTimelapse"),"error")}}),ne=ut({mutationFn:()=>be.deleteArchive(t.id),onSuccess:()=>{d.invalidateQueries({queryKey:["archives"]}),u(c("archives.toast.archiveDeleted"))},onError:()=>{u(c("archives.toast.failedDeleteArchive"),"error")}}),se=ut({mutationFn:()=>be.toggleFavorite(t.id),onSuccess:X=>{d.invalidateQueries({queryKey:["archives"]}),u(X.is_favorite?c("archives.toast.addedToFavorites"):c("archives.toast.removedFromFavorites"))}}),{data:ce}=Je({queryKey:["archive-folders",t.id],queryFn:()=>be.getLibraryFoldersByArchive(t.id)}),ge=ut({mutationFn:X=>be.updateArchive(t.id,{project_id:X}),onSuccess:()=>{d.invalidateQueries({queryKey:["archives"]}),d.invalidateQueries({queryKey:["projects"]}),u(c("archives.toast.projectUpdated"))},onError:()=>{u(c("archives.toast.failedUpdateProject"),"error")}}),oe=X=>{X.preventDefault(),q({x:X.clientX,y:X.clientY})},F=[...Pm(t)?[{label:c("archives.menu.print"),icon:i.jsx(_r,{className:"w-4 h-4"}),onClick:()=>_(!0),disabled:!t.file_path||!p("archives","reprint",t.created_by_id),title:t.file_path?p("archives","reprint",t.created_by_id)?void 0:c("archives.permission.noReprint"):c("archives.card.noFileForReprint")},{label:c("archives.menu.schedule"),icon:i.jsx(Xr,{className:"w-4 h-4"}),onClick:()=>C(!0),disabled:!t.file_path||!m("queue:create"),title:t.file_path?m("queue:create")?void 0:c("archives.permission.noAddToQueue"):c("archives.card.noFileForReprint")},{label:c("archives.menu.openInBambuStudio"),icon:i.jsx(ei,{className:"w-4 h-4"}),onClick:()=>{const X=t.print_name||t.filename||"model";Am(t.id,X,"file",l)},disabled:!t.file_path,title:t.file_path?void 0:c("archives.card.noFileForReprint")}]:[{label:c("archives.menu.slice"),icon:i.jsx(ei,{className:"w-4 h-4"}),onClick:()=>{const X=t.print_name||t.filename||"model";Am(t.id,X,"file",l)}}],{label:t.external_url?c("archives.menu.externalLink"):c("archives.menu.viewOnMakerWorld"),icon:i.jsx(qm,{className:"w-4 h-4"}),onClick:()=>{const X=t.external_url||t.makerworld_url;X&&window.open(X,"_blank")},disabled:!t.external_url&&!t.makerworld_url},{label:"",divider:!0,onClick:()=>{}},{label:c("archives.menu.preview3d"),icon:i.jsx(ia,{className:"w-4 h-4"}),onClick:()=>P(!0)},{label:c("archives.menu.viewTimelapse"),icon:i.jsx($m,{className:"w-4 h-4"}),onClick:()=>D(!0),disabled:!t.timelapse_path},{label:c("archives.menu.scanForTimelapse"),icon:i.jsx(G1,{className:"w-4 h-4"}),onClick:()=>ee.mutate(),disabled:!t.printer_id||!!t.timelapse_path||ee.isPending||!p("archives","update",t.created_by_id),title:p("archives","update",t.created_by_id)?void 0:c("archives.permission.noUpdateArchives")},{label:c("archives.menu.uploadTimelapse"),icon:i.jsx(Si,{className:"w-4 h-4"}),onClick:()=>E.current?.click(),disabled:!!t.timelapse_path||!p("archives","update",t.created_by_id),title:p("archives","update",t.created_by_id)?void 0:c("archives.permission.noUpdateArchives")},...t.timelapse_path?[{label:c("archives.menu.removeTimelapse"),icon:i.jsx(Xt,{className:"w-4 h-4"}),onClick:()=>pe(!0),danger:!0,disabled:!p("archives","update",t.created_by_id),title:p("archives","update",t.created_by_id)?void 0:c("archives.permission.noUpdateArchives")}]:[],{label:"",divider:!0,onClick:()=>{}},{label:t.source_3mf_path?c("archives.menu.downloadSource3mf"):c("archives.menu.uploadSource3mf"),icon:i.jsx(H1,{className:"w-4 h-4"}),onClick:()=>{t.source_3mf_path?be.downloadSource3mf(t.id).catch(X=>{console.error("Source 3MF download failed:",X)}):Z.current?.click()},disabled:!t.source_3mf_path&&!p("archives","update",t.created_by_id),title:!t.source_3mf_path&&!p("archives","update",t.created_by_id)?c("archives.permission.noUploadFiles"):void 0},...t.source_3mf_path?[{label:c("archives.menu.replaceSource3mf"),icon:i.jsx(Si,{className:"w-4 h-4"}),onClick:()=>Z.current?.click(),disabled:!p("archives","update",t.created_by_id),title:p("archives","update",t.created_by_id)?void 0:c("archives.permission.noUpdateArchives")},{label:c("archives.menu.removeSource3mf"),icon:i.jsx(Xt,{className:"w-4 h-4"}),onClick:()=>fe(!0),danger:!0,disabled:!p("archives","update",t.created_by_id),title:p("archives","update",t.created_by_id)?void 0:c("archives.permission.noUpdateArchives")}]:[],{label:t.f3d_path?c("archives.menu.replaceF3d"):c("archives.menu.uploadF3d"),icon:i.jsx(ia,{className:"w-4 h-4"}),onClick:()=>j.current?.click(),disabled:!p("archives","update",t.created_by_id),title:p("archives","update",t.created_by_id)?void 0:c("archives.permission.noUpdateArchives")},...t.f3d_path?[{label:c("archives.menu.downloadF3d"),icon:i.jsx(hi,{className:"w-4 h-4"}),onClick:()=>{be.downloadF3d(t.id).catch(X=>{console.error("F3D download failed:",X)})}},{label:c("archives.menu.removeF3d"),icon:i.jsx(Xt,{className:"w-4 h-4"}),onClick:()=>ie(!0),danger:!0,disabled:!p("archives","update",t.created_by_id),title:p("archives","update",t.created_by_id)?void 0:c("archives.permission.noUpdateArchives")}]:[],{label:"",divider:!0,onClick:()=>{}},{label:c("archives.menu.download"),icon:i.jsx(hi,{className:"w-4 h-4"}),onClick:()=>{be.downloadArchive(t.id,`${t.print_name||t.filename}.3mf`).catch(X=>{console.error("Archive download failed:",X)})},disabled:!m("archives:read"),title:m("archives:read")?void 0:c("archives.permission.noDownload")},{label:c("archives.menu.copyDownloadLink"),icon:i.jsx(_l,{className:"w-4 h-4"}),onClick:()=>{const X=`${window.location.origin}${be.getArchiveDownload(t.id)}`;navigator.clipboard.writeText(X).then(()=>{u(c("archives.toast.linkCopied"))}).catch(()=>{u(c("archives.toast.failedCopyLink"),"error")})},disabled:!m("archives:read"),title:m("archives:read")?void 0:c("archives.permission.noCopyLink")},{label:c("archives.menu.qrCode"),icon:i.jsx(YY,{className:"w-4 h-4"}),onClick:()=>L(!0)},{label:t.photos?.length?c("archives.menu.viewPhotosCount",{count:t.photos.length}):c("archives.menu.viewPhotos"),icon:i.jsx(Mb,{className:"w-4 h-4"}),onClick:()=>re(!0),disabled:!t.photos?.length},{label:c("archives.menu.projectPage"),icon:i.jsx(Ds,{className:"w-4 h-4"}),onClick:()=>ue(!0)},{label:"",divider:!0,onClick:()=>{}},{label:t.is_favorite?c("archives.menu.removeFromFavorites"):c("archives.menu.addToFavorites"),icon:i.jsx(Vp,{className:`w-4 h-4 ${t.is_favorite?"fill-yellow-400 text-yellow-400":""}`}),onClick:()=>se.mutate(),disabled:!p("archives","update",t.created_by_id),title:p("archives","update",t.created_by_id)?void 0:c("archives.permission.noUpdateArchives")},{label:c("archives.menu.edit"),icon:i.jsx(Ki,{className:"w-4 h-4"}),onClick:()=>x(!0),disabled:!p("archives","update",t.created_by_id),title:p("archives","update",t.created_by_id)?void 0:c("archives.permission.noUpdateArchives")},...t.project_id&&t.project_name?[{label:c("archives.menu.goToProject",{name:t.project_name}),icon:i.jsx(bs,{className:"w-4 h-4 text-bambu-green"}),onClick:()=>window.location.href="/projects"}]:[],{label:c("archives.menu.addToProject"),icon:i.jsx(bs,{className:"w-4 h-4"}),onClick:()=>{},submenu:(()=>{const X=[];if(t.project_id&&X.push({label:c("archives.menu.removeFromProject"),icon:i.jsx(zt,{className:"w-4 h-4"}),onClick:()=>ge.mutate(null)}),!s)X.push({label:c("archives.menu.loading"),icon:i.jsx(ct,{className:"w-4 h-4 animate-spin"}),onClick:()=>{},disabled:!0});else{const ye=s.filter(he=>he.status==="active");ye.length===0?X.push({label:c("archives.menu.noProjectsAvailable"),icon:i.jsx(bs,{className:"w-4 h-4 opacity-50"}),onClick:()=>{},disabled:!0}):ye.forEach(he=>{X.push({label:he.name,icon:i.jsx("div",{className:"w-3 h-3 rounded-full flex-shrink-0",style:{backgroundColor:he.color||"#888"}}),onClick:()=>ge.mutate(he.id),disabled:t.project_id===he.id})})}return X})()},{label:c(n?"archives.menu.deselect":"archives.menu.select"),icon:n?i.jsx(ho,{className:"w-4 h-4"}):i.jsx(Nl,{className:"w-4 h-4"}),onClick:()=>r(t.id)},{label:"",divider:!0,onClick:()=>{}},{label:c("archives.menu.delete"),icon:i.jsx(Xt,{className:"w-4 h-4"}),onClick:()=>g(!0),danger:!0,disabled:!p("archives","delete",t.created_by_id),title:p("archives","delete",t.created_by_id)?void 0:c("archives.permission.noDelete")}];return i.jsxs(i.Fragment,{children:[i.jsxs("div",{"data-archive-id":t.id,className:`grid grid-cols-12 gap-4 px-4 py-3 items-center hover:bg-bambu-dark-tertiary/30 ${n?"bg-bambu-green/10":""}`,style:o?{outline:"4px solid #facc15",outlineOffset:"-4px"}:void 0,onContextMenu:oe,children:[i.jsxs("div",{className:"col-span-1 flex items-center gap-2",children:[a&&i.jsx("button",{onClick:()=>r(t.id),children:n?i.jsx(ho,{className:"w-4 h-4 text-bambu-green"}):i.jsx(Nl,{className:"w-4 h-4 text-bambu-gray"})}),t.thumbnail_path?i.jsx("img",{src:be.getArchiveThumbnail(t.id),alt:"",className:"w-10 h-10 object-cover rounded"}):i.jsx("div",{className:"w-10 h-10 bg-bambu-dark rounded flex items-center justify-center",children:i.jsx(cu,{className:"w-5 h-5 text-bambu-dark-tertiary"})})]}),i.jsxs("div",{className:"col-span-4",children:[i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("p",{className:"text-white text-sm truncate",children:t.print_name||t.filename}),(t.status==="failed"||t.status==="aborted")&&i.jsx("span",{className:"px-1.5 py-0.5 rounded text-[10px] leading-tight bg-status-error/80 text-white flex-shrink-0",children:t.status==="aborted"?c("archives.card.cancelled"):c("archives.card.failed")}),t.timelapse_path&&i.jsx("span",{title:c("archives.list.hasTimelapse"),children:i.jsx($m,{className:"w-3.5 h-3.5 text-bambu-green flex-shrink-0"})}),ce&&ce.length>0&&i.jsx(eo,{to:`/files?folder=${ce[0].id}`,className:"flex-shrink-0",title:c("archives.card.openFolder",{name:ce[0].name}),onClick:X=>X.stopPropagation(),children:i.jsx(ic,{className:"w-3.5 h-3.5 text-yellow-400"})})]}),(t.filament_type||t.sliced_for_model)&&i.jsxs("div",{className:"flex items-center gap-1.5 mt-0.5",children:[t.sliced_for_model&&i.jsxs("span",{className:"text-xs text-bambu-gray flex items-center gap-1",title:c("archives.card.slicedFor",{model:t.sliced_for_model}),children:[i.jsx(_r,{className:"w-2.5 h-2.5"}),t.sliced_for_model]}),t.sliced_for_model&&t.filament_type&&i.jsx("span",{className:"text-bambu-gray/50",children:"·"}),t.filament_type&&i.jsx("span",{className:"text-xs text-bambu-gray",children:t.filament_type}),t.filament_color&&i.jsx("div",{className:"flex items-center gap-0.5 flex-wrap",children:t.filament_color.split(",").map((X,ye)=>i.jsx("div",{className:"w-2.5 h-2.5 rounded-full border border-white/20",style:{backgroundColor:X},title:X},ye))})]})]}),i.jsx("div",{className:"col-span-2 text-sm text-bambu-gray truncate",children:e}),i.jsxs("div",{className:"col-span-2 text-sm text-bambu-gray",children:[i.jsx("div",{children:Wp(t.created_at)}),t.created_by_username&&i.jsxs("div",{className:"flex items-center gap-1 text-xs opacity-75",title:c("archives.card.uploadedBy",{name:t.created_by_username}),children:[i.jsx(mu,{className:"w-3 h-3"}),t.created_by_username]})]}),i.jsx("div",{className:"col-span-1 text-sm text-bambu-gray",children:ro(t.file_size)}),i.jsxs("div",{className:"col-span-2 flex justify-end gap-1",children:[Pm(t)&&i.jsx(Oe,{variant:"ghost",size:"sm",onClick:()=>_(!0),disabled:!p("archives","reprint",t.created_by_id),title:p("archives","reprint",t.created_by_id)?c("archives.card.reprint"):c("archives.card.noPermissionReprint"),className:"text-bambu-green hover:text-bambu-green-light hover:bg-bambu-green/10",children:i.jsx(uo,{className:"w-4 h-4"})}),i.jsx(Oe,{variant:"ghost",size:"sm",onClick:()=>{const X=t.print_name||t.filename||"model";Am(t.id,X,"file",l)},title:c("archives.card.openInBambuStudio"),children:i.jsx(ei,{className:"w-4 h-4"})}),(t.external_url||t.makerworld_url)&&i.jsx(Oe,{variant:"ghost",size:"sm",onClick:()=>window.open(t.external_url||t.makerworld_url,"_blank"),title:t.external_url?c("archives.card.externalLink"):"MakerWorld",children:i.jsx(qm,{className:"w-4 h-4"})}),i.jsx(Oe,{variant:"ghost",size:"sm",onClick:()=>{be.downloadArchive(t.id,`${t.print_name||t.filename}.3mf`).catch(X=>{console.error("Archive download failed:",X)})},title:c("archives.card.download"),children:i.jsx(hi,{className:"w-4 h-4"})}),i.jsx(Oe,{variant:"ghost",size:"sm",onClick:()=>x(!0),disabled:!p("archives","update",t.created_by_id),title:p("archives","update",t.created_by_id)?c("archives.card.edit"):c("archives.card.noPermissionEdit"),children:i.jsx(Ki,{className:"w-4 h-4"})}),i.jsx(Oe,{variant:"ghost",size:"sm",onClick:()=>g(!0),disabled:!p("archives","delete",t.created_by_id),title:p("archives","delete",t.created_by_id)?c("archives.card.delete"):c("archives.card.noPermissionDelete"),children:i.jsx(Xt,{className:"w-4 h-4 text-red-400"})}),i.jsx(Oe,{variant:"ghost",size:"sm",onClick:X=>{const ye=X.currentTarget.getBoundingClientRect();q({x:ye.left,y:ye.bottom+4})},title:c("archives.card.moreOptions"),children:i.jsx(Hm,{className:"w-4 h-4"})})]})]}),f&&i.jsx(are,{archive:t,onClose:()=>x(!1)}),T&&i.jsx(L4,{archiveId:t.id,title:t.print_name||t.filename,fileType:ese(t.filename),onClose:()=>P(!1)}),y&&i.jsx(Vc,{mode:"reprint",archiveId:t.id,archiveName:t.print_name||t.filename,onClose:()=>_(!1)}),v&&i.jsx(kn,{title:c("archives.modal.deleteArchive"),message:c("archives.modal.deleteConfirm",{name:t.print_name||t.filename}),confirmText:c("archives.modal.deleteButton"),variant:"danger",onConfirm:()=>{ne.mutate(),g(!1)},onCancel:()=>g(!1)}),me&&i.jsx(kn,{title:c("archives.modal.removeSource3mf"),message:c("archives.modal.removeSource3mfConfirm",{name:t.print_name||t.filename}),confirmText:c("archives.modal.removeButton"),variant:"danger",onConfirm:()=>{ae.mutate(),fe(!1)},onCancel:()=>fe(!1)}),Q&&i.jsx(kn,{title:c("archives.modal.removeF3d"),message:c("archives.modal.removeF3dConfirm",{name:t.print_name||t.filename}),confirmText:c("archives.modal.removeButton"),variant:"danger",onConfirm:()=>{V.mutate(),ie(!1)},onCancel:()=>ie(!1)}),le&&i.jsx(kn,{title:c("archives.modal.removeTimelapse"),message:c("archives.modal.removeTimelapseConfirm",{name:t.print_name||t.filename}),confirmText:c("archives.modal.removeButton"),variant:"danger",onConfirm:()=>{I.mutate(),pe(!1)},onCancel:()=>pe(!1)}),Te&&i.jsx(sre,{x:Te.x,y:Te.y,items:F,onClose:()=>q(null)}),k&&t.timelapse_path&&i.jsx(Jae,{src:be.getArchiveTimelapse(t.id),title:c("archives.modal.timelapse",{name:t.print_name||t.filename}),downloadFilename:`${t.print_name||t.filename}_timelapse.mp4`,archiveId:t.id,onClose:()=>D(!1),onEdit:()=>{d.invalidateQueries({queryKey:["archives"]}),D(!1)}}),A&&$.length>0&&i.jsx("div",{className:"fixed inset-0 bg-black/80 flex items-center justify-center z-50 p-4",children:i.jsxs("div",{className:"bg-card-dark rounded-lg max-w-lg w-full max-h-[80vh] flex flex-col",children:[i.jsxs("div",{className:"flex items-center justify-between p-4 border-b border-gray-700",children:[i.jsxs("div",{children:[i.jsx("h3",{className:"text-lg font-semibold text-white",children:c("archives.modal.selectTimelapse")}),i.jsx("p",{className:"text-sm text-gray-400 mt-1",children:c("archives.modal.selectTimelapseDesc")})]}),i.jsx("button",{onClick:()=>{R(!1),U([])},className:"text-gray-400 hover:text-white p-1",children:i.jsx(zt,{className:"w-5 h-5"})})]}),i.jsx("div",{className:"overflow-y-auto flex-1 p-2",children:$.map(X=>i.jsxs("button",{onClick:()=>K.mutate(X.name),disabled:K.isPending,className:"w-full text-left p-3 rounded-lg hover:bg-gray-700 transition-colors mb-1",children:[i.jsx("div",{className:"font-medium text-white",children:X.name}),i.jsxs("div",{className:"text-sm text-gray-400 flex gap-3",children:[i.jsx("span",{children:ro(X.size)}),X.mtime&&i.jsx("span",{children:Wp(X.mtime)})]})]},X.name))})]})}),G&&i.jsx(ore,{archiveId:t.id,archiveName:t.print_name||t.filename,onClose:()=>L(!1)}),te&&t.photos&&i.jsx(lre,{archiveId:t.id,archiveName:t.print_name||t.filename,photos:t.photos,onClose:()=>re(!1),onDelete:async X=>{try{await be.deleteArchivePhoto(t.id,X),d.invalidateQueries({queryKey:["archives"]}),u(c("archives.toast.photoDeleted"))}catch{u(c("archives.toast.failedDeletePhoto"),"error")}}}),J&&i.jsx(Zae,{archiveId:t.id,archiveName:t.print_name||t.filename,onClose:()=>ue(!1)}),N&&i.jsx(Vc,{mode:"add-to-queue",archiveId:t.id,archiveName:t.print_name||t.filename,onClose:()=>C(!1)}),i.jsx("input",{ref:Z,type:"file",accept:".3mf",className:"hidden",onChange:X=>{const ye=X.target.files?.[0];ye&&B.mutate(ye),X.target.value=""}}),i.jsx("input",{ref:j,type:"file",accept:".f3d",className:"hidden",onChange:X=>{const ye=X.target.files?.[0];ye&&z.mutate(ye),X.target.value=""}}),i.jsx("input",{ref:E,type:"file",accept:".mp4,.avi,.mkv",className:"hidden",onChange:X=>{const ye=X.target.files?.[0];ye&&W.mutate(ye),X.target.value=""}})]})}const GXe=[{id:"all",label:"All Archives",icon:i.jsx(ic,{className:"w-4 h-4"})},{id:"recent",label:"Last 24 Hours",icon:i.jsx(Zn,{className:"w-4 h-4"})},{id:"this-week",label:"This Week",icon:i.jsx(Xr,{className:"w-4 h-4"})},{id:"this-month",label:"This Month",icon:i.jsx(Xr,{className:"w-4 h-4"})},{id:"favorites",label:"Favorites",icon:i.jsx(Vp,{className:"w-4 h-4"})},{id:"failed",label:"Failed Prints",icon:i.jsx(zi,{className:"w-4 h-4"})},{id:"duplicates",label:"Duplicates",icon:i.jsx(_l,{className:"w-4 h-4"})}];function WXe(){const{t}=Mt(),e=en(),{showToast:n}=xn(),{hasPermission:r,hasAnyPermission:a}=Dr(),s=w.useRef(null),[o,l]=w.useState(""),[c,d]=w.useState(()=>{const je=localStorage.getItem("archiveFilterPrinter");return je?Number(je):null}),[u,m]=w.useState(()=>localStorage.getItem("archiveFilterMaterial")),[p,f]=w.useState(()=>{const je=localStorage.getItem("archiveFilterColors");return je?new Set(JSON.parse(je)):new Set}),[x,v]=w.useState(()=>localStorage.getItem("archiveColorFilterMode")||"or"),[g,y]=w.useState(()=>localStorage.getItem("archiveFilterFavorites")==="true"),[_,N]=w.useState(()=>localStorage.getItem("archiveHideFailed")==="true"),[C,T]=w.useState(()=>localStorage.getItem("archiveFilterTag")),[P,k]=w.useState(()=>localStorage.getItem("archiveFilterFileType")||"all"),[D,A]=w.useState(!1),[R,$]=w.useState([]),[U,G]=w.useState(!1),[L,te]=w.useState(new Set),[re,J]=w.useState(!1),[ue,me]=w.useState(!1),[fe,Q]=w.useState(!1),[ie,le]=w.useState(!1),[pe,Te]=w.useState(()=>localStorage.getItem("archiveViewMode")||"grid"),[q,Z]=w.useState(()=>localStorage.getItem("archiveSortBy")||"date-desc"),[j,E]=w.useState(()=>localStorage.getItem("archiveCollection")||"all"),[I,W]=w.useState(!1),[B,ae]=w.useState(!1),[z,V]=w.useState(!1),[ee,K]=w.useState(!1),[ne,se]=w.useState(null),[ce,ge]=w.useState(()=>localStorage.getItem("logFilterUser")||null),[oe,O]=w.useState(()=>localStorage.getItem("logFilterStatus")),[F,X]=w.useState(()=>localStorage.getItem("logFilterDateFrom")||""),[ye,he]=w.useState(()=>localStorage.getItem("logFilterDateTo")||""),[de,Me]=w.useState(()=>{const je=localStorage.getItem("logOffset");return je?Number(je):0}),[_e,Be]=w.useState(!1),[$e,Le]=w.useState(()=>{const je=localStorage.getItem("logPageSize");return je?Number(je):25});w.useEffect(()=>{if(ne){const je=setTimeout(()=>{const tt=document.querySelector(`[data-archive-id="${ne}"]`);tt&&tt.scrollIntoView({behavior:"smooth",block:"center"})},100),Ze=setTimeout(()=>se(null),5e3);return()=>{clearTimeout(je),clearTimeout(Ze)}}},[ne]);const{data:ke,isLoading:Ee}=Je({queryKey:["archives",c],queryFn:()=>be.getArchives(c||void 0)}),{data:Ne}=Je({queryKey:["printers"],queryFn:be.getPrinters}),{data:Ae}=Je({queryKey:["projects"],queryFn:()=>be.getProjects()}),{data:Ge}=Je({queryKey:["settings"],queryFn:be.getSettings}),{data:xe}=Je({queryKey:["users"],queryFn:be.getUsers,enabled:pe==="log"}),{data:He,isLoading:Pe}=Je({queryKey:["print-log",c,ce,oe,F,ye,o,de,$e],queryFn:()=>be.getPrintLog({search:o||void 0,printerId:c||void 0,username:ce||void 0,status:oe||void 0,dateFrom:F||void 0,dateTo:ye||void 0,limit:$e,offset:de}),enabled:pe==="log"}),Ve=Ge?.time_format||"system",De=Ge?.preferred_slicer||"bambu_studio",Re=ol(Ge?.currency||"USD"),we=ut({mutationFn:async je=>(await Promise.all(je.map(Ze=>be.deleteArchive(Ze))),je.length),onSuccess:je=>{e.invalidateQueries({queryKey:["archives"]}),te(new Set),n(`${je} archive${je!==1?"s":""} deleted`)},onError:()=>{n(t("archives.toast.failedDeleteArchives"),"error")}}),Ke=ut({mutationFn:()=>be.clearPrintLog(),onSuccess:je=>{e.invalidateQueries({queryKey:["print-log"]}),Me(0),n(t("archives.log.cleared",{count:je.deleted}))},onError:()=>{n(t("archives.log.clearFailed"),"error")}});w.useEffect(()=>{c!==null?localStorage.setItem("archiveFilterPrinter",c.toString()):localStorage.removeItem("archiveFilterPrinter")},[c]),w.useEffect(()=>{u?localStorage.setItem("archiveFilterMaterial",u):localStorage.removeItem("archiveFilterMaterial")},[u]),w.useEffect(()=>{localStorage.setItem("archiveFilterColors",JSON.stringify([...p]))},[p]),w.useEffect(()=>{localStorage.setItem("archiveColorFilterMode",x)},[x]),w.useEffect(()=>{localStorage.setItem("archiveFilterFavorites",g.toString())},[g]),w.useEffect(()=>{localStorage.setItem("archiveHideFailed",_.toString())},[_]),w.useEffect(()=>{C?localStorage.setItem("archiveFilterTag",C):localStorage.removeItem("archiveFilterTag")},[C]),w.useEffect(()=>{localStorage.setItem("archiveFilterFileType",P)},[P]),w.useEffect(()=>{localStorage.setItem("archiveViewMode",pe)},[pe]),w.useEffect(()=>{localStorage.setItem("archiveSortBy",q)},[q]),w.useEffect(()=>{localStorage.setItem("archiveCollection",j)},[j]),w.useEffect(()=>{ce?localStorage.setItem("logFilterUser",ce):localStorage.removeItem("logFilterUser")},[ce]),w.useEffect(()=>{oe?localStorage.setItem("logFilterStatus",oe):localStorage.removeItem("logFilterStatus")},[oe]),w.useEffect(()=>{F?localStorage.setItem("logFilterDateFrom",F):localStorage.removeItem("logFilterDateFrom")},[F]),w.useEffect(()=>{ye?localStorage.setItem("logFilterDateTo",ye):localStorage.removeItem("logFilterDateTo")},[ye]),w.useEffect(()=>{localStorage.setItem("logOffset",de.toString())},[de]),w.useEffect(()=>{localStorage.setItem("logPageSize",$e.toString())},[$e]);const ot=new Map(Ne?.map(je=>[je.id,je.name])||[]),St=[...new Set(ke?.flatMap(je=>je.filament_type?.split(", ")||[]).filter(Boolean)||[])].sort(),lt=[...new Set(ke?.flatMap(je=>je.filament_color?.split(",")||[]).filter(Boolean)||[])],ht=[...new Set(ke?.flatMap(je=>je.tags?.split(",").map(Ze=>Ze.trim())||[]).filter(Boolean)||[])].sort(),qe=ke?.filter(je=>{const Ze=new Date,tt=Qn(je.created_at)||new Date(0);let Ye=!0;switch(j){case"recent":Ye=Ze.getTime()-tt.getTime()<1440*60*1e3;break;case"this-week":Ye=Ze.getTime()-tt.getTime()<10080*60*1e3;break;case"this-month":Ye=tt.getMonth()===Ze.getMonth()&&tt.getFullYear()===Ze.getFullYear();break;case"favorites":Ye=je.is_favorite===!0;break;case"failed":Ye=je.status==="failed"||je.status==="aborted";break;case"duplicates":Ye=je.duplicate_count>0;break}const Rt=(je.print_name||je.filename).toLowerCase().includes(o.toLowerCase()),Ce=!u||je.filament_type?.split(", ").includes(u),We=je.filament_color?.split(",")||[],et=p.size===0||(x==="or"?We.some(Lt=>p.has(Lt)):[...p].every(Lt=>We.includes(Lt))),Qe=j==="favorites"||!g||je.is_favorite,Ie=j==="failed"||!_||je.status!=="failed"&&je.status!=="aborted",mt=je.tags?.split(",").map(Lt=>Lt.trim())||[],st=!C||mt.includes(C),nt=Pm(je);return Ye&&Rt&&Ce&&et&&Qe&&Ie&&st&&(P==="all"||P==="gcode"&&nt||P==="source"&&!nt)}).sort((je,Ze)=>{switch(q){case"date-desc":return(Qn(Ze.created_at)?.getTime()||0)-(Qn(je.created_at)?.getTime()||0);case"date-asc":return(Qn(je.created_at)?.getTime()||0)-(Qn(Ze.created_at)?.getTime()||0);case"name-asc":return(je.print_name||je.filename).localeCompare(Ze.print_name||Ze.filename);case"name-desc":return(Ze.print_name||Ze.filename).localeCompare(je.print_name||je.filename);case"size-desc":return Ze.file_size-je.file_size;case"size-asc":return je.file_size-Ze.file_size;default:return 0}}),pt=re||L.size>0,xt=je=>{te(Ze=>{const tt=new Set(Ze);return tt.has(je)?tt.delete(je):tt.add(je),tt})},Bt=()=>{qe&&te(new Set(qe.map(je=>je.id)))},nn=()=>{te(new Set),J(!1)},sn=je=>{f(Ze=>{const tt=new Set(Ze);return tt.has(je)?tt.delete(je):tt.add(je),tt})},Yt=()=>{f(new Set)},Ht=()=>{l(""),d(null),m(null),y(!1),N(!1),T(null),k("all")},tn=o||c||u||g||_||C||P!=="all",ln=w.useCallback(je=>{je.preventDefault(),je.dataTransfer.types.includes("Files")&&G(!0)},[]),mn=w.useCallback(je=>{je.preventDefault(),je.currentTarget===je.target&&G(!1)},[]),fn=w.useCallback(je=>{je.preventDefault(),G(!1);const Ze=Array.from(je.dataTransfer.files).filter(tt=>tt.name.endsWith(".3mf"));Ze.length>0?($(Ze),A(!0)):je.dataTransfer.files.length>0&&n(t("archives.page.only3mfSupported"),"warning")},[n,t]),Ue=w.useCallback(je=>{const Ze=je.target;if(Ze.tagName==="INPUT"||Ze.tagName==="TEXTAREA"||Ze.isContentEditable){je.key==="Escape"&&Ze.blur();return}switch(je.key){case"/":je.preventDefault(),s.current?.focus();break;case"u":case"U":!je.metaKey&&!je.ctrlKey&&(je.preventDefault(),A(!0));break;case"Escape":pt&&nn();break}},[pt]);return w.useEffect(()=>(document.addEventListener("keydown",Ue),()=>document.removeEventListener("keydown",Ue)),[Ue]),i.jsxs("div",{className:"p-4 md:p-8 relative min-h-full",onDragOver:ln,onDragLeave:mn,onDrop:fn,children:[U&&i.jsx("div",{className:"fixed inset-0 z-50 bg-bambu-dark/90 flex items-center justify-center pointer-events-none",children:i.jsxs("div",{className:"border-4 border-dashed border-bambu-green rounded-xl p-12 text-center",children:[i.jsx(Si,{className:"w-16 h-16 mx-auto mb-4 text-bambu-green"}),i.jsx("p",{className:"text-2xl font-semibold text-white mb-2",children:"Drop .3mf files here"}),i.jsx("p",{className:"text-bambu-gray",children:t("archives.releaseToUpload")})]})}),pt&&i.jsxs("div",{className:"fixed bottom-6 left-1/2 -translate-x-1/2 z-40 bg-bambu-dark-secondary border border-bambu-dark-tertiary rounded-lg shadow-xl px-4 py-3 flex items-center gap-4",children:[i.jsxs(Oe,{variant:"secondary",size:"sm",onClick:nn,children:[i.jsx(zt,{className:"w-4 h-4"}),"Close"]}),i.jsx("div",{className:"w-px h-6 bg-bambu-dark-tertiary"}),i.jsxs("span",{className:"text-white font-medium",children:[L.size," selected"]}),i.jsx("div",{className:"w-px h-6 bg-bambu-dark-tertiary"}),i.jsx(Oe,{variant:"secondary",size:"sm",onClick:Bt,children:"Select All"}),i.jsx("div",{className:"w-px h-6 bg-bambu-dark-tertiary"}),i.jsxs(Oe,{variant:"secondary",size:"sm",onClick:()=>Q(!0),disabled:!a("archives:update_own","archives:update_all"),title:a("archives:update_own","archives:update_all")?void 0:t("archives.permission.noUpdateArchives"),children:[i.jsx(uu,{className:"w-4 h-4"}),"Tags"]}),i.jsxs(Oe,{variant:"secondary",size:"sm",onClick:()=>le(!0),disabled:!a("archives:update_own","archives:update_all"),title:a("archives:update_own","archives:update_all")?void 0:t("archives.permission.noUpdateArchives"),children:[i.jsx(bs,{className:"w-4 h-4"}),"Project"]}),i.jsxs(Oe,{variant:"secondary",size:"sm",disabled:!a("archives:update_own","archives:update_all"),title:a("archives:update_own","archives:update_all")?void 0:t("archives.permission.noUpdateArchives"),onClick:()=>{const je=Array.from(L);Promise.all(je.map(Ze=>be.toggleFavorite(Ze))).then(()=>{e.invalidateQueries({queryKey:["archives"]}),n(`Toggled favorites for ${je.length} archive${je.length!==1?"s":""}`)}).catch(()=>{n(t("archives.toast.failedUpdateFavorites"),"error")})},children:[i.jsx(Vp,{className:"w-4 h-4"}),"Favorite"]}),i.jsxs(Oe,{size:"sm",className:"bg-red-500 hover:bg-red-600",onClick:()=>me(!0),disabled:!a("archives:delete_own","archives:delete_all"),title:a("archives:delete_own","archives:delete_all")?void 0:t("archives.permission.noDelete"),children:[i.jsx(Xt,{className:"w-4 h-4"}),"Delete"]})]}),i.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-8",children:[i.jsxs("div",{children:[i.jsxs("div",{className:"flex items-center gap-3",children:[i.jsx("h1",{className:"text-2xl font-bold text-white",children:"Archives"}),i.jsx("select",{className:"px-3 py-1.5 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-bambu-gray-light text-sm focus:border-bambu-green focus:outline-none",value:j,onChange:je=>E(je.target.value),children:GXe.map(je=>i.jsx("option",{value:je.id,children:je.label},je.id))})]}),i.jsxs("p",{className:"text-bambu-gray",children:[qe?.length||0," of ",ke?.length||0," prints"]})]}),i.jsxs("div",{className:"flex items-center gap-2 sm:gap-3 flex-wrap",children:[i.jsxs("div",{className:"relative",children:[i.jsxs(Oe,{variant:"secondary",onClick:()=>W(!I),disabled:B,children:[B?i.jsx(ct,{className:"w-4 h-4 animate-spin"}):i.jsx($1,{className:"w-4 h-4"}),"Export"]}),I&&i.jsxs("div",{className:"absolute right-0 top-full mt-1 w-48 bg-bambu-dark-secondary border border-bambu-dark-tertiary rounded-lg shadow-xl z-20",children:[i.jsxs("button",{className:"w-full px-4 py-2 text-left text-white hover:bg-bambu-dark-tertiary transition-colors flex items-center gap-2 rounded-t-lg",onClick:async()=>{W(!1),ae(!0);try{const{blob:je,filename:Ze}=await be.exportArchives({format:"csv",printerId:c||void 0,status:j==="failed"?"failed":void 0,search:o||void 0}),tt=URL.createObjectURL(je),Ye=document.createElement("a");Ye.href=tt,Ye.download=Ze,Ye.click(),URL.revokeObjectURL(tt),n(t("archives.toast.exportDownloaded"))}catch{n(t("archives.toast.exportFailed"),"error")}finally{ae(!1)}},children:[i.jsx(Ds,{className:"w-4 h-4"}),"Export as CSV"]}),i.jsxs("button",{className:"w-full px-4 py-2 text-left text-white hover:bg-bambu-dark-tertiary transition-colors flex items-center gap-2 rounded-b-lg",onClick:async()=>{W(!1),ae(!0);try{const{blob:je,filename:Ze}=await be.exportArchives({format:"xlsx",printerId:c||void 0,status:j==="failed"?"failed":void 0,search:o||void 0}),tt=URL.createObjectURL(je),Ye=document.createElement("a");Ye.href=tt,Ye.download=Ze,Ye.click(),URL.revokeObjectURL(tt),n(t("archives.toast.exportDownloaded"))}catch{n(t("archives.toast.exportFailed"),"error")}finally{ae(!1)}},children:[i.jsx($1,{className:"w-4 h-4"}),"Export as Excel"]})]})]}),L.size>=2&&L.size<=5&&i.jsxs(Oe,{variant:"secondary",onClick:()=>V(!0),children:[i.jsx(mb,{className:"w-4 h-4"}),"Compare (",L.size,")"]}),!pt&&i.jsxs(Oe,{variant:"secondary",onClick:()=>J(!0),children:[i.jsx(ho,{className:"w-4 h-4"}),"Select"]}),i.jsxs(Oe,{onClick:()=>A(!0),disabled:!r("archives:create"),title:r("archives:create")?void 0:t("archives.permission.noCreate"),children:[i.jsx(Si,{className:"w-4 h-4"}),"Upload 3MF"]})]})]}),i.jsxs("div",{className:"flex items-center border border-bambu-dark-tertiary rounded-lg overflow-hidden flex-shrink-0 w-fit mb-4",children:[i.jsx("button",{className:`p-2 ${pe==="grid"?"bg-bambu-green text-white":"bg-bambu-dark text-bambu-gray hover:text-white"}`,onClick:()=>Te("grid"),title:t("archives.gridView"),children:i.jsx(D0,{className:"w-4 h-4"})}),i.jsx("button",{className:`p-2 ${pe==="list"?"bg-bambu-green text-white":"bg-bambu-dark text-bambu-gray hover:text-white"}`,onClick:()=>Te("list"),title:t("archives.listView"),children:i.jsx(uC,{className:"w-4 h-4"})}),i.jsx("button",{className:`p-2 ${pe==="calendar"?"bg-bambu-green text-white":"bg-bambu-dark text-bambu-gray hover:text-white"}`,onClick:()=>Te("calendar"),title:t("archives.calendarView"),children:i.jsx(qme,{className:"w-4 h-4"})}),i.jsx("button",{className:`p-2 ${pe==="log"?"bg-bambu-green text-white":"bg-bambu-dark text-bambu-gray hover:text-white"}`,onClick:()=>Te("log"),title:t("archives.logView"),children:i.jsx(hhe,{className:"w-4 h-4"})})]}),pe!=="log"&&i.jsx(Tt,{className:"mb-6",children:i.jsxs(Pt,{className:"py-4",children:[i.jsxs("div",{className:"flex flex-col md:flex-row gap-3 md:gap-4 md:items-center md:flex-wrap",children:[i.jsxs("div",{className:"w-full md:flex-1 relative md:min-w-[200px]",children:[i.jsx(jr,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-bambu-gray"}),i.jsx("input",{ref:s,type:"text",placeholder:t("archives.searchPlaceholder"),className:"w-full pl-10 pr-4 py-3 md:py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:o,onChange:je=>l(je.target.value)})]}),i.jsxs("div",{className:"flex gap-2 md:gap-4 overflow-x-auto pb-1 md:pb-0 -mx-4 px-4 md:mx-0 md:px-0 md:flex-wrap scrollbar-hide",children:[i.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[i.jsx(cC,{className:"w-4 h-4 text-bambu-gray hidden md:block"}),i.jsxs("select",{className:"px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:c||"",onChange:je=>d(je.target.value?Number(je.target.value):null),children:[i.jsx("option",{value:"",children:"All Printers"}),Ne?.map(je=>i.jsx("option",{value:je.id,children:je.name},je.id))]})]}),i.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[i.jsx(oa,{className:"w-4 h-4 text-bambu-gray hidden md:block"}),i.jsxs("select",{className:"px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:u||"",onChange:je=>m(je.target.value||null),children:[i.jsx("option",{value:"",children:"All Materials"}),St.map(je=>i.jsx("option",{value:je,children:je},je))]})]}),i.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[i.jsx(H1,{className:"w-4 h-4 text-bambu-gray hidden md:block"}),i.jsxs("select",{className:"px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:P,onChange:je=>k(je.target.value),children:[i.jsx("option",{value:"all",children:"All Files"}),i.jsx("option",{value:"gcode",children:"Sliced (GCODE)"}),i.jsx("option",{value:"source",children:"Source Only"})]})]}),i.jsxs("button",{onClick:()=>y(!g),className:`flex items-center gap-2 px-3 py-2 rounded-lg border transition-colors flex-shrink-0 ${g?"bg-yellow-500/20 border-yellow-500 text-yellow-400":"bg-bambu-dark border-bambu-dark-tertiary text-bambu-gray hover:text-white"}`,title:t(g?"archives.showAll":"archives.showFavoritesOnly"),children:[i.jsx(Vp,{className:`w-4 h-4 ${g?"fill-yellow-400":""}`}),i.jsx("span",{className:"text-sm hidden md:inline",children:"Favorites"})]}),i.jsxs("button",{onClick:()=>N(!_),className:`flex items-center gap-2 px-3 py-2 rounded-lg border transition-colors flex-shrink-0 ${_?"bg-red-500/20 border-red-500 text-red-400":"bg-bambu-dark border-bambu-dark-tertiary text-bambu-gray hover:text-white"}`,title:t(_?"archives.showFailedPrints":"archives.hideFailedPrints"),children:[i.jsx(zi,{className:"w-4 h-4 "}),i.jsx("span",{className:"text-sm hidden md:inline",children:"Hide Failed"})]}),ht.length>0&&i.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[i.jsx(uu,{className:"w-4 h-4 text-bambu-gray hidden md:block"}),i.jsxs("select",{className:"px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:C||"",onChange:je=>T(je.target.value||null),children:[i.jsx("option",{value:"",children:"All Tags"}),ht.map(je=>i.jsx("option",{value:je,children:je},je))]}),i.jsx("button",{onClick:()=>K(!0),className:"p-2 rounded-lg bg-bambu-dark border border-bambu-dark-tertiary text-bambu-gray hover:text-white hover:border-bambu-green transition-colors",title:t("archives.manageTags"),children:i.jsx(gC,{className:"w-4 h-4"})})]}),i.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[i.jsx(VF,{className:"w-4 h-4 text-bambu-gray hidden md:block"}),i.jsxs("select",{className:"px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:q,onChange:je=>Z(je.target.value),children:[i.jsx("option",{value:"date-desc",children:t("archives.sortNewest")}),i.jsx("option",{value:"date-asc",children:t("archives.sortOldest")}),i.jsxs("option",{value:"name-asc",children:[t("archives.sortName")," A-Z"]}),i.jsxs("option",{value:"name-desc",children:[t("archives.sortName")," Z-A"]}),i.jsx("option",{value:"size-desc",children:t("archives.sortLargest")}),i.jsx("option",{value:"size-asc",children:t("archives.sortSmallest")})]})]})]}),tn&&i.jsxs(Oe,{variant:"ghost",size:"sm",onClick:Ht,className:"text-bambu-gray hover:text-white",children:[i.jsx(zt,{className:"w-4 h-4"}),"Reset"]})]}),lt.length>0&&i.jsxs("div",{className:"flex items-center gap-3 mt-4 pt-4 border-t border-bambu-dark-tertiary",children:[i.jsx("span",{className:"text-xs text-bambu-gray",children:"Colors:"}),p.size>1&&i.jsx("button",{onClick:()=>v(je=>je==="or"?"and":"or"),className:`px-2 py-0.5 text-xs rounded transition-colors ${x==="and"?"bg-bambu-green text-white":"bg-bambu-dark-tertiary text-bambu-gray hover:text-white"}`,title:x==="or"?"Match ANY selected color":"Match ALL selected colors",children:x.toUpperCase()}),i.jsx("div",{className:"flex items-center gap-1.5 flex-wrap",children:lt.map(je=>i.jsx("button",{onClick:()=>sn(je),className:`w-6 h-6 rounded-full border-2 transition-all ${p.has(je)?"border-bambu-green scale-110":"border-white/20 hover:border-white/40"}`,style:{backgroundColor:je},title:je},je))}),p.size>0&&i.jsxs("button",{onClick:Yt,className:"text-xs text-bambu-gray hover:text-white flex items-center gap-1",children:[i.jsx(zt,{className:"w-3 h-3"}),"Clear"]})]})]})}),i.jsx(HXe,{}),Ee?i.jsx("div",{className:"text-center py-12 text-bambu-gray",children:t("archives.loadingArchives")}):qe?.length===0?i.jsx(Tt,{children:i.jsxs(Pt,{className:"text-center py-12",children:[i.jsx("p",{className:"text-bambu-gray",children:t(o?"archives.noArchivesSearch":"archives.noArchivesYet")}),i.jsx("p",{className:"text-sm text-bambu-gray mt-2",children:"Archives are created automatically when prints complete"})]})}):pe==="calendar"?i.jsx(Tt,{className:"p-6",children:i.jsx(Dqe,{archives:qe||[],onArchiveClick:je=>{l(""),Te("grid"),se(je.id)},highlightedArchiveId:ne})}):pe==="grid"?i.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-6",children:qe?.map(je=>i.jsx(qXe,{archive:je,printerName:je.printer_id?ot.get(je.printer_id)||"Unknown":je.sliced_for_model?`Sliced for ${je.sliced_for_model}`:"No Printer",isSelected:L.has(je.id),onSelect:xt,selectionMode:pt,projects:Ae,isHighlighted:je.id===ne,timeFormat:Ve,preferredSlicer:De,currency:Re,t},je.id))}):pe==="list"?i.jsx(Tt,{children:i.jsxs("div",{className:"divide-y divide-bambu-dark-tertiary",children:[i.jsxs("div",{className:"grid grid-cols-12 gap-4 px-4 py-3 text-xs text-bambu-gray font-medium",children:[i.jsx("div",{className:"col-span-1"}),i.jsx("div",{className:"col-span-4",children:"Name"}),i.jsx("div",{className:"col-span-2",children:"Printer"}),i.jsx("div",{className:"col-span-2",children:"Date"}),i.jsx("div",{className:"col-span-1",children:"Size"}),i.jsx("div",{className:"col-span-2 text-right",children:"Actions"})]}),qe?.map(je=>i.jsx(VXe,{archive:je,printerName:je.printer_id?ot.get(je.printer_id)||"Unknown":je.sliced_for_model?`Sliced for ${je.sliced_for_model}`:"No Printer",isSelected:L.has(je.id),onSelect:xt,selectionMode:pt,projects:Ae,isHighlighted:je.id===ne,preferredSlicer:De,t},je.id))]})}):pe==="log"?i.jsxs("div",{className:"space-y-4",children:[i.jsx(Tt,{children:i.jsx(Pt,{className:"py-3",children:i.jsxs("div",{className:"flex flex-col md:flex-row gap-3 md:items-center md:flex-wrap",children:[i.jsxs("div",{className:"flex-1 relative md:min-w-[200px]",children:[i.jsx(jr,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-bambu-gray"}),i.jsx("input",{type:"text",placeholder:t("archives.searchPlaceholder"),className:"w-full pl-10 pr-4 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none text-sm",value:o,onChange:je=>{l(je.target.value),Me(0)}})]}),i.jsxs("select",{className:"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:c||"",onChange:je=>{d(je.target.value?Number(je.target.value):null),Me(0)},children:[i.jsx("option",{value:"",children:t("archives.log.allPrinters")}),Ne?.map(je=>i.jsx("option",{value:je.id,children:je.name},je.id))]}),i.jsxs("select",{className:"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:ce||"",onChange:je=>{ge(je.target.value||null),Me(0)},children:[i.jsx("option",{value:"",children:t("archives.log.allUsers")}),xe?.map(je=>i.jsx("option",{value:je.username,children:je.username},je.id))]}),i.jsxs("select",{className:"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:oe||"",onChange:je=>{O(je.target.value||null),Me(0)},children:[i.jsx("option",{value:"",children:t("archives.log.allStatuses")}),i.jsx("option",{value:"completed",children:t("archives.status.completed")}),i.jsx("option",{value:"failed",children:t("archives.status.failed")}),i.jsx("option",{value:"stopped",children:t("archives.status.stopped")}),i.jsx("option",{value:"cancelled",children:t("archives.log.cancelled")}),i.jsx("option",{value:"skipped",children:t("archives.log.skipped")})]}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("label",{className:"text-sm text-bambu-gray",children:t("archives.log.dateFrom")}),i.jsx("input",{type:"date",className:"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:F,onChange:je=>{X(je.target.value),Me(0)}})]}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("label",{className:"text-sm text-bambu-gray",children:t("archives.log.dateTo")}),i.jsx("input",{type:"date",className:"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:ye,onChange:je=>{he(je.target.value),Me(0)}})]}),i.jsx("div",{className:"ml-auto",children:i.jsxs(Oe,{variant:"danger",size:"sm",onClick:()=>Be(!0),disabled:!r("archives:delete_all")||Ke.isPending,children:[i.jsx(Xt,{className:"w-4 h-4"}),t("archives.log.clearLog")]})})]})})}),i.jsx(Tt,{children:Pe?i.jsx("div",{className:"flex items-center justify-center py-12",children:i.jsx(ct,{className:"w-6 h-6 animate-spin text-bambu-green"})}):He?.items.length?i.jsxs(i.Fragment,{children:[i.jsx("div",{className:"overflow-x-auto",children:i.jsxs("table",{className:"w-full text-sm",children:[i.jsx("thead",{children:i.jsxs("tr",{className:"border-b border-bambu-dark-tertiary text-bambu-gray text-left",children:[i.jsx("th",{className:"px-4 py-3 font-medium",children:t("archives.log.date")}),i.jsx("th",{className:"px-4 py-3 font-medium",children:t("archives.log.printName")}),i.jsx("th",{className:"px-4 py-3 font-medium",children:t("archives.log.printer")}),i.jsx("th",{className:"px-4 py-3 font-medium",children:t("archives.log.user")}),i.jsx("th",{className:"px-4 py-3 font-medium",children:t("archives.log.status")}),i.jsx("th",{className:"px-4 py-3 font-medium",children:t("archives.log.duration")}),i.jsx("th",{className:"px-4 py-3 font-medium",children:t("archives.log.filament")})]})}),i.jsx("tbody",{className:"divide-y divide-bambu-dark-tertiary",children:He.items.map(je=>i.jsxs("tr",{className:"hover:bg-bambu-dark-secondary/50",children:[i.jsx("td",{className:"px-4 py-3 text-white whitespace-nowrap",children:Kp(je.started_at||je.created_at,Ve)}),i.jsx("td",{className:"px-4 py-3",children:i.jsxs("div",{className:"flex items-center gap-2",children:[je.thumbnail_path&&i.jsx("img",{src:be.getPrintLogThumbnail(je.id),alt:"",className:"w-8 h-8 rounded object-cover flex-shrink-0",onError:Ze=>{Ze.target.style.display="none"}}),i.jsx("span",{className:"text-white truncate max-w-[200px]",children:je.print_name||"—"})]})}),i.jsx("td",{className:"px-4 py-3 text-bambu-gray-light",children:je.printer_name||"—"}),i.jsx("td",{className:"px-4 py-3 text-bambu-gray-light",children:je.created_by_username||"—"}),i.jsx("td",{className:"px-4 py-3",children:i.jsx("span",{className:`inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium ${je.status==="completed"?"bg-green-500/20 text-green-400":je.status==="failed"?"bg-red-500/20 text-red-400":je.status==="stopped"?"bg-yellow-500/20 text-yellow-400":je.status==="cancelled"?"bg-orange-500/20 text-orange-400":je.status==="skipped"?"bg-blue-500/20 text-blue-400":"bg-gray-500/20 text-gray-400"}`,children:je.status})}),i.jsx("td",{className:"px-4 py-3 text-bambu-gray-light whitespace-nowrap",children:je.duration_seconds?js(je.duration_seconds):"—"}),i.jsx("td",{className:"px-4 py-3",children:i.jsxs("div",{className:"flex items-center gap-1.5",children:[je.filament_color&&i.jsx("span",{className:"w-3 h-3 rounded-full border border-white/20 flex-shrink-0",style:{backgroundColor:je.filament_color.startsWith("#")?je.filament_color:void 0}}),i.jsx("span",{className:"text-bambu-gray-light text-xs",children:je.filament_type||"—"})]})})]},je.id))})]})}),i.jsxs("div",{className:"flex items-center justify-between px-4 py-3 border-t border-bambu-dark-tertiary flex-wrap gap-2",children:[i.jsxs("div",{className:"flex items-center gap-3",children:[i.jsx("span",{className:"text-sm text-bambu-gray",children:t("archives.log.showing",{count:Math.min(de+$e,He.total),total:He.total})}),i.jsxs("div",{className:"flex items-center gap-1.5",children:[i.jsx("label",{className:"text-xs text-bambu-gray",children:t("archives.log.rowsPerPage")}),i.jsxs("select",{className:"px-2 py-1 bg-bambu-dark border border-bambu-dark-tertiary rounded text-white text-xs focus:border-bambu-green focus:outline-none",value:$e,onChange:je=>{Le(Number(je.target.value)),Me(0)},children:[i.jsx("option",{value:10,children:"10"}),i.jsx("option",{value:25,children:"25"}),i.jsx("option",{value:50,children:"50"}),i.jsx("option",{value:100,children:"100"})]})]})]}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsxs("span",{className:"text-sm text-bambu-gray",children:[t("archives.log.page")," ",Math.floor(de/$e)+1," / ",Math.max(1,Math.ceil(He.total/$e))]}),i.jsx(Oe,{variant:"secondary",size:"sm",onClick:()=>Me(Math.max(0,de-$e)),disabled:de===0,children:i.jsx(nc,{className:"w-4 h-4"})}),i.jsx(Oe,{variant:"secondary",size:"sm",onClick:()=>Me(de+$e),disabled:de+$e>=He.total,children:i.jsx(fa,{className:"w-4 h-4"})})]})]})]}):i.jsx("div",{className:"text-center py-12 text-bambu-gray",children:t("archives.log.noEntries")})})]}):null,D&&i.jsx(Nqe,{onClose:()=>{A(!1),$([])},initialFiles:R}),ue&&i.jsx(kn,{title:t("archives.modal.deleteArchives"),message:t("archives.modal.deleteArchivesConfirm",{count:L.size}),confirmText:t("archives.modal.deleteCount",{count:L.size}),variant:"danger",onConfirm:()=>{we.mutate(Array.from(L)),me(!1)},onCancel:()=>me(!1)}),fe&&i.jsx(Tqe,{selectedIds:Array.from(L),existingTags:ht,onClose:()=>Q(!1)}),ie&&i.jsx(Pqe,{selectedIds:Array.from(L),onClose:()=>le(!1)}),z&&L.size>=2&&L.size<=5&&i.jsx(IXe,{archiveIds:Array.from(L),onClose:()=>{V(!1),te(new Set),J(!1)}}),ee&&i.jsx($Xe,{onClose:()=>K(!1)}),_e&&i.jsx(kn,{title:t("archives.log.clearLogTitle"),message:t("archives.log.clearLogConfirm"),confirmText:t("archives.log.clearLogButton"),variant:"danger",onConfirm:()=>{Ke.mutate(),Be(!1)},onCancel:()=>Be(!1)})]})}function KXe(){for(var t=arguments.length,e=new Array(t),n=0;nr=>{e.forEach(a=>a(r))},e)}const BT=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function Px(t){const e=Object.prototype.toString.call(t);return e==="[object Window]"||e==="[object global]"}function _I(t){return"nodeType"in t}function go(t){var e,n;return t?Px(t)?t:_I(t)&&(e=(n=t.ownerDocument)==null?void 0:n.defaultView)!=null?e:window:window}function NI(t){const{Document:e}=go(t);return t instanceof e}function mw(t){return Px(t)?!1:t instanceof go(t).HTMLElement}function tse(t){return t instanceof go(t).SVGElement}function Ax(t){return t?Px(t)?t.document:_I(t)?NI(t)?t:mw(t)||tse(t)?t.ownerDocument:document:document:document}const Jc=BT?w.useLayoutEffect:w.useEffect;function kI(t){const e=w.useRef(t);return Jc(()=>{e.current=t}),w.useCallback(function(){for(var n=arguments.length,r=new Array(n),a=0;a{t.current=setInterval(r,a)},[]),n=w.useCallback(()=>{t.current!==null&&(clearInterval(t.current),t.current=null)},[]);return[e,n]}function _0(t,e){e===void 0&&(e=[t]);const n=w.useRef(t);return Jc(()=>{n.current!==t&&(n.current=t)},e),n}function hw(t,e){const n=w.useRef();return w.useMemo(()=>{const r=t(n.current);return n.current=r,r},[...e])}function Zk(t){const e=kI(t),n=w.useRef(null),r=w.useCallback(a=>{a!==n.current&&e?.(a,n.current),n.current=a},[]);return[n,r]}function yF(t){const e=w.useRef();return w.useEffect(()=>{e.current=t},[t]),e.current}let Bj={};function pw(t,e){return w.useMemo(()=>{if(e)return e;const n=Bj[t]==null?0:Bj[t]+1;return Bj[t]=n,t+"-"+n},[t,e])}function nse(t){return function(e){for(var n=arguments.length,r=new Array(n>1?n-1:0),a=1;a{const l=Object.entries(o);for(const[c,d]of l){const u=s[c];u!=null&&(s[c]=u+t*d)}return s},{...e})}}const Cb=nse(1),N0=nse(-1);function XXe(t){return"clientX"in t&&"clientY"in t}function CI(t){if(!t)return!1;const{KeyboardEvent:e}=go(t.target);return e&&t instanceof e}function QXe(t){if(!t)return!1;const{TouchEvent:e}=go(t.target);return e&&t instanceof e}function vF(t){if(QXe(t)){if(t.touches&&t.touches.length){const{clientX:e,clientY:n}=t.touches[0];return{x:e,y:n}}else if(t.changedTouches&&t.changedTouches.length){const{clientX:e,clientY:n}=t.changedTouches[0];return{x:e,y:n}}}return XXe(t)?{x:t.clientX,y:t.clientY}:null}const rx=Object.freeze({Translate:{toString(t){if(!t)return;const{x:e,y:n}=t;return"translate3d("+(e?Math.round(e):0)+"px, "+(n?Math.round(n):0)+"px, 0)"}},Scale:{toString(t){if(!t)return;const{scaleX:e,scaleY:n}=t;return"scaleX("+e+") scaleY("+n+")"}},Transform:{toString(t){if(t)return[rx.Translate.toString(t),rx.Scale.toString(t)].join(" ")}},Transition:{toString(t){let{property:e,duration:n,easing:r}=t;return e+" "+n+"ms "+r}}}),uK="a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]";function ZXe(t){return t.matches(uK)?t:t.querySelector(uK)}const JXe={display:"none"};function eQe(t){let{id:e,value:n}=t;return Kr.createElement("div",{id:e,style:JXe},n)}function tQe(t){let{id:e,announcement:n,ariaLiveType:r="assertive"}=t;const a={position:"fixed",top:0,left:0,width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0 0 0 0)",clipPath:"inset(100%)",whiteSpace:"nowrap"};return Kr.createElement("div",{id:e,style:a,role:"status","aria-live":r,"aria-atomic":!0},n)}function nQe(){const[t,e]=w.useState("");return{announce:w.useCallback(r=>{r!=null&&e(r)},[]),announcement:t}}const rse=w.createContext(null);function rQe(t){const e=w.useContext(rse);w.useEffect(()=>{if(!e)throw new Error("useDndMonitor must be used within a children of ");return e(t)},[t,e])}function iQe(){const[t]=w.useState(()=>new Set),e=w.useCallback(r=>(t.add(r),()=>t.delete(r)),[t]);return[w.useCallback(r=>{let{type:a,event:s}=r;t.forEach(o=>{var l;return(l=o[a])==null?void 0:l.call(o,s)})},[t]),e]}const aQe={draggable:`
+Accuracy: ${t.time_accuracy.toFixed(0)}%`:t.actual_time_seconds?`Actual: ${js(t.actual_time_seconds)}`:`Estimated: ${js(t.print_time_seconds||0)}`,children:[i.jsx(Zn,{className:"w-3 h-3"}),js(t.actual_time_seconds||t.print_time_seconds||0),t.time_accuracy&&i.jsxs("span",{className:`text-[10px] px-1 rounded ${t.time_accuracy>=95&&t.time_accuracy<=105?"bg-bambu-green/20 text-bambu-green":t.time_accuracy>105?"bg-blue-500/20 text-blue-400":"bg-orange-500/20 text-orange-400"}`,children:[t.time_accuracy>100?"+":"",(t.time_accuracy-100).toFixed(0),"%"]})]}),t.filament_used_grams&&i.jsxs("div",{className:"flex items-center gap-1.5 text-bambu-gray",children:[i.jsx(oa,{className:"w-3 h-3"}),t.filament_used_grams.toFixed(1),"g"]}),(t.cost!=null||t.energy_cost!=null)&&i.jsxs("div",{className:"flex items-center gap-3 text-bambu-gray",children:[t.cost!=null&&i.jsxs("div",{className:"flex items-center gap-1.5",children:[i.jsx(Nhe,{className:"w-3 h-3"}),d,t.cost.toFixed(2)]}),t.energy_cost!=null&&i.jsxs("div",{className:"flex items-center gap-1.5",title:`${u("stats.energyUsed")}: ${t.energy_kwh?.toFixed(3)||"N/A"} kWh`,children:[i.jsx(ac,{className:"w-3 h-3"}),d,t.energy_cost.toFixed(2)]})]}),(t.layer_height||t.total_layers)&&i.jsxs("div",{className:"flex items-center gap-1.5 text-bambu-gray",children:[i.jsx(Gi,{className:"w-3 h-3"}),t.total_layers&&i.jsx("span",{children:t.total_layers===1?u("archives.card.layer",{count:t.total_layers}):u("archives.card.layers",{count:t.total_layers})}),t.total_layers&&t.layer_height&&i.jsx("span",{className:"text-bambu-gray/50",children:"·"}),t.layer_height&&i.jsxs("span",{children:[t.layer_height,"mm"]})]}),t.object_count!=null&&t.object_count>0&&i.jsxs("div",{className:"flex items-center gap-1.5 text-bambu-gray",title:t.object_count===1?u("archives.card.object",{count:t.object_count}):u("archives.card.objects",{count:t.object_count}),children:[i.jsx(ia,{className:"w-3 h-3"}),t.object_count===1?u("archives.card.object",{count:t.object_count}):u("archives.card.objects",{count:t.object_count})]}),t.sliced_for_model&&i.jsxs("div",{className:"flex items-center gap-1.5 text-bambu-gray",title:u("archives.card.slicedFor",{model:t.sliced_for_model}),children:[i.jsx(_r,{className:"w-3 h-3"}),t.sliced_for_model]}),t.filament_type&&i.jsxs("div",{className:"flex items-center gap-1.5 col-span-2",children:[i.jsx("span",{className:"text-bambu-gray text-xs",children:t.filament_type}),t.filament_color&&i.jsx("div",{className:"flex items-center gap-0.5 flex-wrap",children:t.filament_color.split(",").map((Ne,Ae)=>i.jsx("div",{className:"w-3 h-3 rounded-full border border-white/20",style:{backgroundColor:Ne},title:Ne},Ae))})]})]}),(t.tags||t.notes)&&i.jsxs("div",{className:"flex flex-wrap items-center gap-1.5 mb-3",children:[t.notes&&i.jsx("div",{className:"flex items-center gap-1 px-1.5 py-0.5 bg-blue-500/20 text-blue-400 rounded text-xs",title:t.notes,children:i.jsx(ZY,{className:"w-3 h-3"})}),t.tags?.split(",").map((Ne,Ae)=>i.jsx("span",{className:"px-1.5 py-0.5 bg-bambu-dark-tertiary text-bambu-gray-light rounded text-xs",children:Ne.trim()},Ae))]}),i.jsx("div",{className:"flex-1"}),i.jsxs("div",{className:"flex items-center justify-between text-xs text-bambu-gray border-t border-bambu-dark-tertiary pt-3",children:[i.jsx("span",{children:Kp(t.created_at,l)}),i.jsxs("div",{className:"flex items-center gap-2",children:[t.created_by_username&&i.jsxs("span",{className:"flex items-center gap-1",title:u("archives.card.uploadedBy",{name:t.created_by_username}),children:[i.jsx(mu,{className:"w-3 h-3"}),t.created_by_username]}),i.jsx("span",{children:ro(t.file_size)})]})]}),i.jsxs("div",{className:"flex gap-1 mt-3",children:[Pm(t)?i.jsxs(i.Fragment,{children:[i.jsxs(Oe,{variant:"primary",size:"sm",className:"flex-1 min-w-0 overflow-hidden",onClick:()=>N(!0),disabled:!t.file_path||!x("archives","reprint",t.created_by_id),title:t.file_path?x("archives","reprint",t.created_by_id)?void 0:u("archives.card.noPermissionReprint"):u("archives.card.noFileForReprint"),children:[i.jsx(_r,{className:"w-3 h-3 flex-shrink-0"}),i.jsx("span",{className:"hidden sm:inline truncate",children:u("archives.card.reprint")})]}),i.jsxs(Oe,{variant:"secondary",size:"sm",className:"flex-1 min-w-0 overflow-hidden",onClick:()=>Q(!0),disabled:!t.file_path||!f("queue:create"),title:t.file_path?f("queue:create")?u("archives.card.schedulePrint"):u("archives.permission.noAddToQueue"):u("archives.card.noFileForReprint"),children:[i.jsx(Xr,{className:"w-3 h-3 flex-shrink-0"}),i.jsx("span",{className:"hidden sm:inline truncate",children:u("archives.card.schedule")})]}),i.jsx(Oe,{variant:"secondary",size:"sm",className:"min-w-0 p-1 sm:p-1.5",onClick:()=>{const Ne=t.print_name||t.filename||"model";Am(t.id,Ne,"file",c)},title:u("archives.card.openInBambuStudio"),children:i.jsx(ei,{className:"w-3 h-3 sm:w-4 sm:h-4"})})]}):i.jsxs(Oe,{variant:"primary",size:"sm",className:"flex-1 min-w-0 overflow-hidden",onClick:()=>{const Ne=t.print_name||t.filename||"model";Am(t.id,Ne,"file",c)},title:u("archives.card.openInBambuStudioToSlice"),children:[i.jsx(ei,{className:"w-3 h-3 flex-shrink-0"}),i.jsx("span",{className:"hidden sm:inline truncate",children:u("archives.card.slice")})]}),i.jsx(Oe,{variant:"secondary",size:"sm",className:"min-w-0 p-1 sm:p-1.5",onClick:()=>{const Ne=t.external_url||t.makerworld_url;Ne&&window.open(Ne,"_blank")},disabled:!t.external_url&&!t.makerworld_url,title:t.external_url?u("archives.card.externalLink"):t.makerworld_url?u("archives.card.makerWorld",{designer:t.designer||u("archives.card.viewProject")}):u("archives.card.noExternalLink"),children:i.jsx(qm,{className:`w-3 h-3 sm:w-4 sm:h-4 ${!t.external_url&&!t.makerworld_url?"opacity-20":""}`})}),i.jsx(Oe,{variant:"secondary",size:"sm",className:"min-w-0 p-1 sm:p-1.5",onClick:()=>{be.downloadArchive(t.id,`${t.print_name||t.filename}.3mf`).catch(Ne=>{console.error("Archive download failed:",Ne)})},title:u("archives.card.download"),children:i.jsx(hi,{className:"w-3 h-3 sm:w-4 sm:h-4"})}),i.jsx(Oe,{variant:"ghost",size:"sm",className:"min-w-0 p-1 sm:p-1.5",onClick:()=>T(!0),disabled:!x("archives","delete",t.created_by_id),title:x("archives","delete",t.created_by_id)?u("archives.card.delete"):u("archives.card.noPermissionDelete"),children:i.jsx(Xt,{className:"w-3 h-3 sm:w-4 sm:h-4 text-red-400"})})]})]}),P&&i.jsx(are,{archive:t,onClose:()=>k(!1)}),g&&i.jsx(L4,{archiveId:t.id,title:t.print_name||t.filename,fileType:ese(t.filename),onClose:()=>y(!1)}),_&&i.jsx(Vc,{mode:"reprint",archiveId:t.id,archiveName:t.print_name||t.filename,onClose:()=>N(!1)}),C&&i.jsx(kn,{title:u("archives.modal.deleteArchive"),message:u("archives.modal.deleteConfirm",{name:t.print_name||t.filename}),confirmText:u("archives.modal.deleteButton"),variant:"danger",onConfirm:()=>{Me.mutate(),T(!1)},onCancel:()=>T(!1)}),ie&&i.jsx(kn,{title:u("archives.modal.removeSource3mf"),message:u("archives.modal.removeSource3mfConfirm",{name:t.print_name||t.filename}),confirmText:u("archives.modal.removeButton"),variant:"danger",onConfirm:()=>{F.mutate(),le(!1)},onCancel:()=>le(!1)}),pe&&i.jsx(kn,{title:u("archives.modal.removeF3d"),message:u("archives.modal.removeF3dConfirm",{name:t.print_name||t.filename}),confirmText:u("archives.modal.removeButton"),variant:"danger",onConfirm:()=>{ye.mutate(),Te(!1)},onCancel:()=>Te(!1)}),q&&i.jsx(kn,{title:u("archives.modal.removeTimelapse"),message:u("archives.modal.removeTimelapseConfirm",{name:t.print_name||t.filename}),confirmText:u("archives.modal.removeButton"),variant:"danger",onConfirm:()=>{ge.mutate(),Z(!1)},onCancel:()=>Z(!1)}),j&&i.jsx(sre,{x:j.x,y:j.y,items:Ee,onClose:()=>E(null)}),D&&t.timelapse_path&&i.jsx(Jae,{src:be.getArchiveTimelapse(t.id),title:u("archives.modal.timelapse",{name:t.print_name||t.filename}),downloadFilename:`${t.print_name||t.filename}_timelapse.mp4`,archiveId:t.id,onClose:()=>A(!1),onEdit:()=>{m.invalidateQueries({queryKey:["archives"]}),A(!1)}}),R&&U.length>0&&i.jsx("div",{className:"fixed inset-0 bg-black/80 flex items-center justify-center z-50 p-4",children:i.jsxs("div",{className:"bg-card-dark rounded-lg max-w-lg w-full max-h-[80vh] flex flex-col",children:[i.jsxs("div",{className:"flex items-center justify-between p-4 border-b border-gray-700",children:[i.jsxs("div",{children:[i.jsx("h3",{className:"text-lg font-semibold text-white",children:u("archives.modal.selectTimelapse")}),i.jsx("p",{className:"text-sm text-gray-400 mt-1",children:u("archives.modal.selectTimelapseDesc")})]}),i.jsx("button",{onClick:()=>{$(!1),G([])},className:"text-gray-400 hover:text-white p-1",children:i.jsx(zt,{className:"w-5 h-5"})})]}),i.jsx("div",{className:"overflow-y-auto flex-1 p-2",children:U.map(Ne=>i.jsxs("button",{onClick:()=>de.mutate(Ne.name),disabled:de.isPending,className:"w-full text-left p-3 rounded-lg hover:bg-gray-700 transition-colors flex items-center gap-3 disabled:opacity-50",children:[i.jsx($m,{className:"w-8 h-8 text-bambu-green flex-shrink-0"}),i.jsxs("div",{className:"flex-1 min-w-0",children:[i.jsx("p",{className:"text-white font-medium truncate",children:Ne.name}),i.jsxs("p",{className:"text-sm text-gray-400",children:[ro(Ne.size),Ne.mtime&&` • ${Kp(Ne.mtime,l)}`]})]})]},Ne.name))}),i.jsx("div",{className:"p-4 border-t border-gray-700",children:i.jsx(Oe,{variant:"secondary",onClick:()=>{$(!1),G([])},className:"w-full",children:"Cancel"})})]})}),L&&i.jsx(ore,{archiveId:t.id,archiveName:t.print_name||t.filename,onClose:()=>te(!1)}),re&&t.photos&&t.photos.length>0&&i.jsx(lre,{archiveId:t.id,archiveName:t.print_name||t.filename,photos:t.photos,onClose:()=>J(!1),onDelete:async Ne=>{try{await be.deleteArchivePhoto(t.id,Ne),m.invalidateQueries({queryKey:["archives"]}),p(u("archives.toast.photoDeleted"))}catch{p(u("archives.toast.failedDeletePhoto"),"error")}}}),ue&&i.jsx(Zae,{archiveId:t.id,archiveName:t.print_name||t.filename,onClose:()=>me(!1)}),fe&&i.jsx(Vc,{mode:"add-to-queue",archiveId:t.id,archiveName:t.print_name||t.filename,onClose:()=>Q(!1)}),i.jsx("input",{ref:z,type:"file",accept:".3mf",className:"hidden",onChange:Ne=>{const Ae=Ne.target.files?.[0];Ae&&O.mutate(Ae),Ne.target.value=""}}),i.jsx("input",{ref:V,type:"file",accept:".f3d",className:"hidden",onChange:Ne=>{const Ae=Ne.target.files?.[0];Ae&&X.mutate(Ae),Ne.target.value=""}}),i.jsx("input",{ref:ee,type:"file",accept:".mp4,.avi,.mkv",className:"hidden",onChange:Ne=>{const Ae=Ne.target.files?.[0];Ae&&oe.mutate(Ae),Ne.target.value=""}})]})}function VXe({archive:t,printerName:e,isSelected:n,onSelect:r,selectionMode:a,projects:s,isHighlighted:o,preferredSlicer:l="bambu_studio",t:c}){const d=en(),{showToast:u}=xn(),{hasPermission:m,canModify:p}=Dr(),[f,x]=w.useState(!1),[v,g]=w.useState(!1),[y,_]=w.useState(!1),[N,C]=w.useState(!1),[T,P]=w.useState(!1),[k,D]=w.useState(!1),[A,R]=w.useState(!1),[$,U]=w.useState([]),[G,L]=w.useState(!1),[te,re]=w.useState(!1),[J,ue]=w.useState(!1),[me,fe]=w.useState(!1),[Q,ie]=w.useState(!1),[le,pe]=w.useState(!1),[Te,q]=w.useState(null),Z=w.useRef(null),j=w.useRef(null),E=w.useRef(null),I=ut({mutationFn:()=>be.deleteArchiveTimelapse(t.id),onSuccess:()=>{d.invalidateQueries({queryKey:["archives"]}),u(c("archives.toast.timelapseRemoved"))},onError:X=>{u(X.message||c("archives.toast.failedRemoveTimelapse"),"error")}}),W=ut({mutationFn:X=>be.uploadArchiveTimelapse(t.id,X),onSuccess:X=>{d.invalidateQueries({queryKey:["archives"]}),u(c("archives.toast.timelapseUploaded",{filename:X.filename}))},onError:X=>{u(X.message||c("archives.toast.failedUploadTimelapse"),"error")}}),B=ut({mutationFn:X=>be.uploadSource3mf(t.id,X),onSuccess:X=>{d.invalidateQueries({queryKey:["archives"]}),u(c("archives.toast.source3mfAttached",{filename:X.filename}))},onError:X=>{u(X.message||c("archives.toast.failedUploadSource3mf"),"error")}}),ae=ut({mutationFn:()=>be.deleteSource3mf(t.id),onSuccess:()=>{d.invalidateQueries({queryKey:["archives"]}),u(c("archives.toast.source3mfRemoved"))},onError:X=>{u(X.message||c("archives.toast.failedRemoveSource3mf"),"error")}}),z=ut({mutationFn:X=>be.uploadF3d(t.id,X),onSuccess:X=>{d.invalidateQueries({queryKey:["archives"]}),u(c("archives.toast.f3dAttached",{filename:X.filename}))},onError:X=>{u(X.message||c("archives.toast.failedUploadF3d"),"error")}}),V=ut({mutationFn:()=>be.deleteF3d(t.id),onSuccess:()=>{d.invalidateQueries({queryKey:["archives"]}),u(c("archives.toast.f3dRemoved"))},onError:X=>{u(X.message||c("archives.toast.failedRemoveF3d"),"error")}}),ee=ut({mutationFn:()=>be.scanArchiveTimelapse(t.id),onSuccess:X=>{X.status==="attached"?(d.invalidateQueries({queryKey:["archives"]}),u(c("archives.toast.timelapseAttached",{filename:X.filename}))):X.status==="exists"?u(c("archives.toast.timelapseAlreadyAttached")):X.status==="not_found"&&X.available_files&&X.available_files.length>0?(U(X.available_files),R(!0)):u(X.message||c("archives.toast.noMatchingTimelapse"),"warning")},onError:X=>{u(X.message||c("archives.toast.failedScanTimelapse"),"error")}}),K=ut({mutationFn:X=>be.selectArchiveTimelapse(t.id,X),onSuccess:X=>{d.invalidateQueries({queryKey:["archives"]}),u(c("archives.toast.timelapseAttached",{filename:X.filename})),R(!1),U([])},onError:X=>{u(X.message||c("archives.toast.failedAttachTimelapse"),"error")}}),ne=ut({mutationFn:()=>be.deleteArchive(t.id),onSuccess:()=>{d.invalidateQueries({queryKey:["archives"]}),u(c("archives.toast.archiveDeleted"))},onError:()=>{u(c("archives.toast.failedDeleteArchive"),"error")}}),se=ut({mutationFn:()=>be.toggleFavorite(t.id),onSuccess:X=>{d.invalidateQueries({queryKey:["archives"]}),u(X.is_favorite?c("archives.toast.addedToFavorites"):c("archives.toast.removedFromFavorites"))}}),{data:ce}=Je({queryKey:["archive-folders",t.id],queryFn:()=>be.getLibraryFoldersByArchive(t.id)}),ge=ut({mutationFn:X=>be.updateArchive(t.id,{project_id:X}),onSuccess:()=>{d.invalidateQueries({queryKey:["archives"]}),d.invalidateQueries({queryKey:["projects"]}),u(c("archives.toast.projectUpdated"))},onError:()=>{u(c("archives.toast.failedUpdateProject"),"error")}}),oe=X=>{X.preventDefault(),q({x:X.clientX,y:X.clientY})},F=[...Pm(t)?[{label:c("archives.menu.print"),icon:i.jsx(_r,{className:"w-4 h-4"}),onClick:()=>_(!0),disabled:!t.file_path||!p("archives","reprint",t.created_by_id),title:t.file_path?p("archives","reprint",t.created_by_id)?void 0:c("archives.permission.noReprint"):c("archives.card.noFileForReprint")},{label:c("archives.menu.schedule"),icon:i.jsx(Xr,{className:"w-4 h-4"}),onClick:()=>C(!0),disabled:!t.file_path||!m("queue:create"),title:t.file_path?m("queue:create")?void 0:c("archives.permission.noAddToQueue"):c("archives.card.noFileForReprint")},{label:c("archives.menu.openInBambuStudio"),icon:i.jsx(ei,{className:"w-4 h-4"}),onClick:()=>{const X=t.print_name||t.filename||"model";Am(t.id,X,"file",l)},disabled:!t.file_path,title:t.file_path?void 0:c("archives.card.noFileForReprint")}]:[{label:c("archives.menu.slice"),icon:i.jsx(ei,{className:"w-4 h-4"}),onClick:()=>{const X=t.print_name||t.filename||"model";Am(t.id,X,"file",l)}}],{label:t.external_url?c("archives.menu.externalLink"):c("archives.menu.viewOnMakerWorld"),icon:i.jsx(qm,{className:"w-4 h-4"}),onClick:()=>{const X=t.external_url||t.makerworld_url;X&&window.open(X,"_blank")},disabled:!t.external_url&&!t.makerworld_url},{label:"",divider:!0,onClick:()=>{}},{label:c("archives.menu.preview3d"),icon:i.jsx(ia,{className:"w-4 h-4"}),onClick:()=>P(!0)},{label:c("archives.menu.viewTimelapse"),icon:i.jsx($m,{className:"w-4 h-4"}),onClick:()=>D(!0),disabled:!t.timelapse_path},{label:c("archives.menu.scanForTimelapse"),icon:i.jsx(G1,{className:"w-4 h-4"}),onClick:()=>ee.mutate(),disabled:!t.printer_id||!!t.timelapse_path||ee.isPending||!p("archives","update",t.created_by_id),title:p("archives","update",t.created_by_id)?void 0:c("archives.permission.noUpdateArchives")},{label:c("archives.menu.uploadTimelapse"),icon:i.jsx(Si,{className:"w-4 h-4"}),onClick:()=>E.current?.click(),disabled:!!t.timelapse_path||!p("archives","update",t.created_by_id),title:p("archives","update",t.created_by_id)?void 0:c("archives.permission.noUpdateArchives")},...t.timelapse_path?[{label:c("archives.menu.removeTimelapse"),icon:i.jsx(Xt,{className:"w-4 h-4"}),onClick:()=>pe(!0),danger:!0,disabled:!p("archives","update",t.created_by_id),title:p("archives","update",t.created_by_id)?void 0:c("archives.permission.noUpdateArchives")}]:[],{label:"",divider:!0,onClick:()=>{}},{label:t.source_3mf_path?c("archives.menu.downloadSource3mf"):c("archives.menu.uploadSource3mf"),icon:i.jsx(H1,{className:"w-4 h-4"}),onClick:()=>{t.source_3mf_path?be.downloadSource3mf(t.id).catch(X=>{console.error("Source 3MF download failed:",X)}):Z.current?.click()},disabled:!t.source_3mf_path&&!p("archives","update",t.created_by_id),title:!t.source_3mf_path&&!p("archives","update",t.created_by_id)?c("archives.permission.noUploadFiles"):void 0},...t.source_3mf_path?[{label:c("archives.menu.replaceSource3mf"),icon:i.jsx(Si,{className:"w-4 h-4"}),onClick:()=>Z.current?.click(),disabled:!p("archives","update",t.created_by_id),title:p("archives","update",t.created_by_id)?void 0:c("archives.permission.noUpdateArchives")},{label:c("archives.menu.removeSource3mf"),icon:i.jsx(Xt,{className:"w-4 h-4"}),onClick:()=>fe(!0),danger:!0,disabled:!p("archives","update",t.created_by_id),title:p("archives","update",t.created_by_id)?void 0:c("archives.permission.noUpdateArchives")}]:[],{label:t.f3d_path?c("archives.menu.replaceF3d"):c("archives.menu.uploadF3d"),icon:i.jsx(ia,{className:"w-4 h-4"}),onClick:()=>j.current?.click(),disabled:!p("archives","update",t.created_by_id),title:p("archives","update",t.created_by_id)?void 0:c("archives.permission.noUpdateArchives")},...t.f3d_path?[{label:c("archives.menu.downloadF3d"),icon:i.jsx(hi,{className:"w-4 h-4"}),onClick:()=>{be.downloadF3d(t.id).catch(X=>{console.error("F3D download failed:",X)})}},{label:c("archives.menu.removeF3d"),icon:i.jsx(Xt,{className:"w-4 h-4"}),onClick:()=>ie(!0),danger:!0,disabled:!p("archives","update",t.created_by_id),title:p("archives","update",t.created_by_id)?void 0:c("archives.permission.noUpdateArchives")}]:[],{label:"",divider:!0,onClick:()=>{}},{label:c("archives.menu.download"),icon:i.jsx(hi,{className:"w-4 h-4"}),onClick:()=>{be.downloadArchive(t.id,`${t.print_name||t.filename}.3mf`).catch(X=>{console.error("Archive download failed:",X)})},disabled:!m("archives:read"),title:m("archives:read")?void 0:c("archives.permission.noDownload")},{label:c("archives.menu.copyDownloadLink"),icon:i.jsx(_l,{className:"w-4 h-4"}),onClick:()=>{const X=`${window.location.origin}${be.getArchiveDownload(t.id)}`;navigator.clipboard.writeText(X).then(()=>{u(c("archives.toast.linkCopied"))}).catch(()=>{u(c("archives.toast.failedCopyLink"),"error")})},disabled:!m("archives:read"),title:m("archives:read")?void 0:c("archives.permission.noCopyLink")},{label:c("archives.menu.qrCode"),icon:i.jsx(YY,{className:"w-4 h-4"}),onClick:()=>L(!0)},{label:t.photos?.length?c("archives.menu.viewPhotosCount",{count:t.photos.length}):c("archives.menu.viewPhotos"),icon:i.jsx(Mb,{className:"w-4 h-4"}),onClick:()=>re(!0),disabled:!t.photos?.length},{label:c("archives.menu.projectPage"),icon:i.jsx(Ds,{className:"w-4 h-4"}),onClick:()=>ue(!0)},{label:"",divider:!0,onClick:()=>{}},{label:t.is_favorite?c("archives.menu.removeFromFavorites"):c("archives.menu.addToFavorites"),icon:i.jsx(Vp,{className:`w-4 h-4 ${t.is_favorite?"fill-yellow-400 text-yellow-400":""}`}),onClick:()=>se.mutate(),disabled:!p("archives","update",t.created_by_id),title:p("archives","update",t.created_by_id)?void 0:c("archives.permission.noUpdateArchives")},{label:c("archives.menu.edit"),icon:i.jsx(Ki,{className:"w-4 h-4"}),onClick:()=>x(!0),disabled:!p("archives","update",t.created_by_id),title:p("archives","update",t.created_by_id)?void 0:c("archives.permission.noUpdateArchives")},...t.project_id&&t.project_name?[{label:c("archives.menu.goToProject",{name:t.project_name}),icon:i.jsx(bs,{className:"w-4 h-4 text-bambu-green"}),onClick:()=>window.location.href="/projects"}]:[],{label:c("archives.menu.addToProject"),icon:i.jsx(bs,{className:"w-4 h-4"}),onClick:()=>{},submenu:(()=>{const X=[];if(t.project_id&&X.push({label:c("archives.menu.removeFromProject"),icon:i.jsx(zt,{className:"w-4 h-4"}),onClick:()=>ge.mutate(null)}),!s)X.push({label:c("archives.menu.loading"),icon:i.jsx(ct,{className:"w-4 h-4 animate-spin"}),onClick:()=>{},disabled:!0});else{const ye=s.filter(he=>he.status==="active");ye.length===0?X.push({label:c("archives.menu.noProjectsAvailable"),icon:i.jsx(bs,{className:"w-4 h-4 opacity-50"}),onClick:()=>{},disabled:!0}):ye.forEach(he=>{X.push({label:he.name,icon:i.jsx("div",{className:"w-3 h-3 rounded-full flex-shrink-0",style:{backgroundColor:he.color||"#888"}}),onClick:()=>ge.mutate(he.id),disabled:t.project_id===he.id})})}return X})()},{label:c(n?"archives.menu.deselect":"archives.menu.select"),icon:n?i.jsx(ho,{className:"w-4 h-4"}):i.jsx(Nl,{className:"w-4 h-4"}),onClick:()=>r(t.id)},{label:"",divider:!0,onClick:()=>{}},{label:c("archives.menu.delete"),icon:i.jsx(Xt,{className:"w-4 h-4"}),onClick:()=>g(!0),danger:!0,disabled:!p("archives","delete",t.created_by_id),title:p("archives","delete",t.created_by_id)?void 0:c("archives.permission.noDelete")}];return i.jsxs(i.Fragment,{children:[i.jsxs("div",{"data-archive-id":t.id,className:`grid grid-cols-12 gap-4 px-4 py-3 items-center hover:bg-bambu-dark-tertiary/30 ${n?"bg-bambu-green/10":""}`,style:o?{outline:"4px solid #facc15",outlineOffset:"-4px"}:void 0,onContextMenu:oe,children:[i.jsxs("div",{className:"col-span-1 flex items-center gap-2",children:[a&&i.jsx("button",{onClick:()=>r(t.id),children:n?i.jsx(ho,{className:"w-4 h-4 text-bambu-green"}):i.jsx(Nl,{className:"w-4 h-4 text-bambu-gray"})}),t.thumbnail_path?i.jsx("img",{src:be.getArchiveThumbnail(t.id),alt:"",className:"w-10 h-10 object-cover rounded"}):i.jsx("div",{className:"w-10 h-10 bg-bambu-dark rounded flex items-center justify-center",children:i.jsx(cu,{className:"w-5 h-5 text-bambu-dark-tertiary"})})]}),i.jsxs("div",{className:"col-span-4",children:[i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("p",{className:"text-white text-sm truncate",children:t.print_name||t.filename}),(t.status==="failed"||t.status==="aborted")&&i.jsx("span",{className:"px-1.5 py-0.5 rounded text-[10px] leading-tight bg-status-error/80 text-white flex-shrink-0",children:t.status==="aborted"?c("archives.card.cancelled"):c("archives.card.failed")}),t.timelapse_path&&i.jsx("span",{title:c("archives.list.hasTimelapse"),children:i.jsx($m,{className:"w-3.5 h-3.5 text-bambu-green flex-shrink-0"})}),ce&&ce.length>0&&i.jsx(eo,{to:`/files?folder=${ce[0].id}`,className:"flex-shrink-0",title:c("archives.card.openFolder",{name:ce[0].name}),onClick:X=>X.stopPropagation(),children:i.jsx(ic,{className:"w-3.5 h-3.5 text-yellow-400"})})]}),(t.filament_type||t.sliced_for_model)&&i.jsxs("div",{className:"flex items-center gap-1.5 mt-0.5",children:[t.sliced_for_model&&i.jsxs("span",{className:"text-xs text-bambu-gray flex items-center gap-1",title:c("archives.card.slicedFor",{model:t.sliced_for_model}),children:[i.jsx(_r,{className:"w-2.5 h-2.5"}),t.sliced_for_model]}),t.sliced_for_model&&t.filament_type&&i.jsx("span",{className:"text-bambu-gray/50",children:"·"}),t.filament_type&&i.jsx("span",{className:"text-xs text-bambu-gray",children:t.filament_type}),t.filament_color&&i.jsx("div",{className:"flex items-center gap-0.5 flex-wrap",children:t.filament_color.split(",").map((X,ye)=>i.jsx("div",{className:"w-2.5 h-2.5 rounded-full border border-white/20",style:{backgroundColor:X},title:X},ye))})]})]}),i.jsx("div",{className:"col-span-2 text-sm text-bambu-gray truncate",children:e}),i.jsxs("div",{className:"col-span-2 text-sm text-bambu-gray",children:[i.jsx("div",{children:Wp(t.created_at)}),t.created_by_username&&i.jsxs("div",{className:"flex items-center gap-1 text-xs opacity-75",title:c("archives.card.uploadedBy",{name:t.created_by_username}),children:[i.jsx(mu,{className:"w-3 h-3"}),t.created_by_username]})]}),i.jsx("div",{className:"col-span-1 text-sm text-bambu-gray",children:ro(t.file_size)}),i.jsxs("div",{className:"col-span-2 flex justify-end gap-1",children:[Pm(t)&&i.jsx(Oe,{variant:"ghost",size:"sm",onClick:()=>_(!0),disabled:!p("archives","reprint",t.created_by_id),title:p("archives","reprint",t.created_by_id)?c("archives.card.reprint"):c("archives.card.noPermissionReprint"),className:"text-bambu-green hover:text-bambu-green-light hover:bg-bambu-green/10",children:i.jsx(uo,{className:"w-4 h-4"})}),i.jsx(Oe,{variant:"ghost",size:"sm",onClick:()=>{const X=t.print_name||t.filename||"model";Am(t.id,X,"file",l)},title:c("archives.card.openInBambuStudio"),children:i.jsx(ei,{className:"w-4 h-4"})}),(t.external_url||t.makerworld_url)&&i.jsx(Oe,{variant:"ghost",size:"sm",onClick:()=>window.open(t.external_url||t.makerworld_url,"_blank"),title:t.external_url?c("archives.card.externalLink"):"MakerWorld",children:i.jsx(qm,{className:"w-4 h-4"})}),i.jsx(Oe,{variant:"ghost",size:"sm",onClick:()=>{be.downloadArchive(t.id,`${t.print_name||t.filename}.3mf`).catch(X=>{console.error("Archive download failed:",X)})},title:c("archives.card.download"),children:i.jsx(hi,{className:"w-4 h-4"})}),i.jsx(Oe,{variant:"ghost",size:"sm",onClick:()=>x(!0),disabled:!p("archives","update",t.created_by_id),title:p("archives","update",t.created_by_id)?c("archives.card.edit"):c("archives.card.noPermissionEdit"),children:i.jsx(Ki,{className:"w-4 h-4"})}),i.jsx(Oe,{variant:"ghost",size:"sm",onClick:()=>g(!0),disabled:!p("archives","delete",t.created_by_id),title:p("archives","delete",t.created_by_id)?c("archives.card.delete"):c("archives.card.noPermissionDelete"),children:i.jsx(Xt,{className:"w-4 h-4 text-red-400"})}),i.jsx(Oe,{variant:"ghost",size:"sm",onClick:X=>{const ye=X.currentTarget.getBoundingClientRect();q({x:ye.left,y:ye.bottom+4})},title:c("archives.card.moreOptions"),children:i.jsx(Hm,{className:"w-4 h-4"})})]})]}),f&&i.jsx(are,{archive:t,onClose:()=>x(!1)}),T&&i.jsx(L4,{archiveId:t.id,title:t.print_name||t.filename,fileType:ese(t.filename),onClose:()=>P(!1)}),y&&i.jsx(Vc,{mode:"reprint",archiveId:t.id,archiveName:t.print_name||t.filename,onClose:()=>_(!1)}),v&&i.jsx(kn,{title:c("archives.modal.deleteArchive"),message:c("archives.modal.deleteConfirm",{name:t.print_name||t.filename}),confirmText:c("archives.modal.deleteButton"),variant:"danger",onConfirm:()=>{ne.mutate(),g(!1)},onCancel:()=>g(!1)}),me&&i.jsx(kn,{title:c("archives.modal.removeSource3mf"),message:c("archives.modal.removeSource3mfConfirm",{name:t.print_name||t.filename}),confirmText:c("archives.modal.removeButton"),variant:"danger",onConfirm:()=>{ae.mutate(),fe(!1)},onCancel:()=>fe(!1)}),Q&&i.jsx(kn,{title:c("archives.modal.removeF3d"),message:c("archives.modal.removeF3dConfirm",{name:t.print_name||t.filename}),confirmText:c("archives.modal.removeButton"),variant:"danger",onConfirm:()=>{V.mutate(),ie(!1)},onCancel:()=>ie(!1)}),le&&i.jsx(kn,{title:c("archives.modal.removeTimelapse"),message:c("archives.modal.removeTimelapseConfirm",{name:t.print_name||t.filename}),confirmText:c("archives.modal.removeButton"),variant:"danger",onConfirm:()=>{I.mutate(),pe(!1)},onCancel:()=>pe(!1)}),Te&&i.jsx(sre,{x:Te.x,y:Te.y,items:F,onClose:()=>q(null)}),k&&t.timelapse_path&&i.jsx(Jae,{src:be.getArchiveTimelapse(t.id),title:c("archives.modal.timelapse",{name:t.print_name||t.filename}),downloadFilename:`${t.print_name||t.filename}_timelapse.mp4`,archiveId:t.id,onClose:()=>D(!1),onEdit:()=>{d.invalidateQueries({queryKey:["archives"]}),D(!1)}}),A&&$.length>0&&i.jsx("div",{className:"fixed inset-0 bg-black/80 flex items-center justify-center z-50 p-4",children:i.jsxs("div",{className:"bg-card-dark rounded-lg max-w-lg w-full max-h-[80vh] flex flex-col",children:[i.jsxs("div",{className:"flex items-center justify-between p-4 border-b border-gray-700",children:[i.jsxs("div",{children:[i.jsx("h3",{className:"text-lg font-semibold text-white",children:c("archives.modal.selectTimelapse")}),i.jsx("p",{className:"text-sm text-gray-400 mt-1",children:c("archives.modal.selectTimelapseDesc")})]}),i.jsx("button",{onClick:()=>{R(!1),U([])},className:"text-gray-400 hover:text-white p-1",children:i.jsx(zt,{className:"w-5 h-5"})})]}),i.jsx("div",{className:"overflow-y-auto flex-1 p-2",children:$.map(X=>i.jsxs("button",{onClick:()=>K.mutate(X.name),disabled:K.isPending,className:"w-full text-left p-3 rounded-lg hover:bg-gray-700 transition-colors mb-1",children:[i.jsx("div",{className:"font-medium text-white",children:X.name}),i.jsxs("div",{className:"text-sm text-gray-400 flex gap-3",children:[i.jsx("span",{children:ro(X.size)}),X.mtime&&i.jsx("span",{children:Wp(X.mtime)})]})]},X.name))})]})}),G&&i.jsx(ore,{archiveId:t.id,archiveName:t.print_name||t.filename,onClose:()=>L(!1)}),te&&t.photos&&i.jsx(lre,{archiveId:t.id,archiveName:t.print_name||t.filename,photos:t.photos,onClose:()=>re(!1),onDelete:async X=>{try{await be.deleteArchivePhoto(t.id,X),d.invalidateQueries({queryKey:["archives"]}),u(c("archives.toast.photoDeleted"))}catch{u(c("archives.toast.failedDeletePhoto"),"error")}}}),J&&i.jsx(Zae,{archiveId:t.id,archiveName:t.print_name||t.filename,onClose:()=>ue(!1)}),N&&i.jsx(Vc,{mode:"add-to-queue",archiveId:t.id,archiveName:t.print_name||t.filename,onClose:()=>C(!1)}),i.jsx("input",{ref:Z,type:"file",accept:".3mf",className:"hidden",onChange:X=>{const ye=X.target.files?.[0];ye&&B.mutate(ye),X.target.value=""}}),i.jsx("input",{ref:j,type:"file",accept:".f3d",className:"hidden",onChange:X=>{const ye=X.target.files?.[0];ye&&z.mutate(ye),X.target.value=""}}),i.jsx("input",{ref:E,type:"file",accept:".mp4,.avi,.mkv",className:"hidden",onChange:X=>{const ye=X.target.files?.[0];ye&&W.mutate(ye),X.target.value=""}})]})}const GXe=[{id:"all",label:"All Archives",icon:i.jsx(ic,{className:"w-4 h-4"})},{id:"recent",label:"Last 24 Hours",icon:i.jsx(Zn,{className:"w-4 h-4"})},{id:"this-week",label:"This Week",icon:i.jsx(Xr,{className:"w-4 h-4"})},{id:"this-month",label:"This Month",icon:i.jsx(Xr,{className:"w-4 h-4"})},{id:"favorites",label:"Favorites",icon:i.jsx(Vp,{className:"w-4 h-4"})},{id:"failed",label:"Failed Prints",icon:i.jsx(zi,{className:"w-4 h-4"})},{id:"duplicates",label:"Duplicates",icon:i.jsx(_l,{className:"w-4 h-4"})}];function WXe(){const{t}=Mt(),e=en(),{showToast:n}=xn(),{hasPermission:r,hasAnyPermission:a}=Dr(),s=w.useRef(null),[o,l]=w.useState(""),[c,d]=w.useState(()=>{const je=localStorage.getItem("archiveFilterPrinter");return je?Number(je):null}),[u,m]=w.useState(()=>localStorage.getItem("archiveFilterMaterial")),[p,f]=w.useState(()=>{const je=localStorage.getItem("archiveFilterColors");return je?new Set(JSON.parse(je)):new Set}),[x,v]=w.useState(()=>localStorage.getItem("archiveColorFilterMode")||"or"),[g,y]=w.useState(()=>localStorage.getItem("archiveFilterFavorites")==="true"),[_,N]=w.useState(()=>localStorage.getItem("archiveHideFailed")==="true"),[C,T]=w.useState(()=>localStorage.getItem("archiveFilterTag")),[P,k]=w.useState(()=>localStorage.getItem("archiveFilterFileType")||"all"),[D,A]=w.useState(!1),[R,$]=w.useState([]),[U,G]=w.useState(!1),[L,te]=w.useState(new Set),[re,J]=w.useState(!1),[ue,me]=w.useState(!1),[fe,Q]=w.useState(!1),[ie,le]=w.useState(!1),[pe,Te]=w.useState(()=>localStorage.getItem("archiveViewMode")||"grid"),[q,Z]=w.useState(()=>localStorage.getItem("archiveSortBy")||"date-desc"),[j,E]=w.useState(()=>localStorage.getItem("archiveCollection")||"all"),[I,W]=w.useState(!1),[B,ae]=w.useState(!1),[z,V]=w.useState(!1),[ee,K]=w.useState(!1),[ne,se]=w.useState(null),[ce,ge]=w.useState(()=>localStorage.getItem("logFilterUser")||null),[oe,O]=w.useState(()=>localStorage.getItem("logFilterStatus")),[F,X]=w.useState(()=>localStorage.getItem("logFilterDateFrom")||""),[ye,he]=w.useState(()=>localStorage.getItem("logFilterDateTo")||""),[de,Me]=w.useState(()=>{const je=localStorage.getItem("logOffset");return je?Number(je):0}),[_e,Be]=w.useState(!1),[$e,Le]=w.useState(()=>{const je=localStorage.getItem("logPageSize");return je?Number(je):25});w.useEffect(()=>{if(ne){const je=setTimeout(()=>{const tt=document.querySelector(`[data-archive-id="${ne}"]`);tt&&tt.scrollIntoView({behavior:"smooth",block:"center"})},100),Ze=setTimeout(()=>se(null),5e3);return()=>{clearTimeout(je),clearTimeout(Ze)}}},[ne]);const{data:ke,isLoading:Ee}=Je({queryKey:["archives",c],queryFn:()=>be.getArchives(c||void 0)}),{data:Ne}=Je({queryKey:["printers"],queryFn:be.getPrinters}),{data:Ae}=Je({queryKey:["projects"],queryFn:()=>be.getProjects()}),{data:Ge}=Je({queryKey:["settings"],queryFn:be.getSettings}),{data:xe}=Je({queryKey:["users"],queryFn:be.getUsers,enabled:pe==="log"}),{data:He,isLoading:Pe}=Je({queryKey:["print-log",c,ce,oe,F,ye,o,de,$e],queryFn:()=>be.getPrintLog({search:o||void 0,printerId:c||void 0,username:ce||void 0,status:oe||void 0,dateFrom:F||void 0,dateTo:ye||void 0,limit:$e,offset:de}),enabled:pe==="log"}),Ve=Ge?.time_format||"system",De=Ge?.preferred_slicer||"bambu_studio",Re=ol(Ge?.currency||"USD"),we=ut({mutationFn:async je=>(await Promise.all(je.map(Ze=>be.deleteArchive(Ze))),je.length),onSuccess:je=>{e.invalidateQueries({queryKey:["archives"]}),te(new Set),n(`${je} archive${je!==1?"s":""} deleted`)},onError:()=>{n(t("archives.toast.failedDeleteArchives"),"error")}}),Ke=ut({mutationFn:()=>be.clearPrintLog(),onSuccess:je=>{e.invalidateQueries({queryKey:["print-log"]}),Me(0),n(t("archives.log.cleared",{count:je.deleted}))},onError:()=>{n(t("archives.log.clearFailed"),"error")}});w.useEffect(()=>{c!==null?localStorage.setItem("archiveFilterPrinter",c.toString()):localStorage.removeItem("archiveFilterPrinter")},[c]),w.useEffect(()=>{u?localStorage.setItem("archiveFilterMaterial",u):localStorage.removeItem("archiveFilterMaterial")},[u]),w.useEffect(()=>{localStorage.setItem("archiveFilterColors",JSON.stringify([...p]))},[p]),w.useEffect(()=>{localStorage.setItem("archiveColorFilterMode",x)},[x]),w.useEffect(()=>{localStorage.setItem("archiveFilterFavorites",g.toString())},[g]),w.useEffect(()=>{localStorage.setItem("archiveHideFailed",_.toString())},[_]),w.useEffect(()=>{C?localStorage.setItem("archiveFilterTag",C):localStorage.removeItem("archiveFilterTag")},[C]),w.useEffect(()=>{localStorage.setItem("archiveFilterFileType",P)},[P]),w.useEffect(()=>{localStorage.setItem("archiveViewMode",pe)},[pe]),w.useEffect(()=>{localStorage.setItem("archiveSortBy",q)},[q]),w.useEffect(()=>{localStorage.setItem("archiveCollection",j)},[j]),w.useEffect(()=>{ce?localStorage.setItem("logFilterUser",ce):localStorage.removeItem("logFilterUser")},[ce]),w.useEffect(()=>{oe?localStorage.setItem("logFilterStatus",oe):localStorage.removeItem("logFilterStatus")},[oe]),w.useEffect(()=>{F?localStorage.setItem("logFilterDateFrom",F):localStorage.removeItem("logFilterDateFrom")},[F]),w.useEffect(()=>{ye?localStorage.setItem("logFilterDateTo",ye):localStorage.removeItem("logFilterDateTo")},[ye]),w.useEffect(()=>{localStorage.setItem("logOffset",de.toString())},[de]),w.useEffect(()=>{localStorage.setItem("logPageSize",$e.toString())},[$e]);const ot=new Map(Ne?.map(je=>[je.id,je.name])||[]),St=[...new Set(ke?.flatMap(je=>je.filament_type?.split(", ")||[]).filter(Boolean)||[])].sort(),lt=[...new Set(ke?.flatMap(je=>je.filament_color?.split(",")||[]).filter(Boolean)||[])],ht=[...new Set(ke?.flatMap(je=>je.tags?.split(",").map(Ze=>Ze.trim())||[]).filter(Boolean)||[])].sort(),qe=ke?.filter(je=>{const Ze=new Date,tt=Qn(je.created_at)||new Date(0);let Ye=!0;switch(j){case"recent":Ye=Ze.getTime()-tt.getTime()<1440*60*1e3;break;case"this-week":Ye=Ze.getTime()-tt.getTime()<10080*60*1e3;break;case"this-month":Ye=tt.getMonth()===Ze.getMonth()&&tt.getFullYear()===Ze.getFullYear();break;case"favorites":Ye=je.is_favorite===!0;break;case"failed":Ye=je.status==="failed"||je.status==="aborted";break;case"duplicates":Ye=je.duplicate_count>0;break}const Rt=(je.print_name||je.filename).toLowerCase().includes(o.toLowerCase()),Ce=!u||je.filament_type?.split(", ").includes(u),We=je.filament_color?.split(",")||[],et=p.size===0||(x==="or"?We.some(Lt=>p.has(Lt)):[...p].every(Lt=>We.includes(Lt))),Qe=j==="favorites"||!g||je.is_favorite,Ie=j==="failed"||!_||je.status!=="failed"&&je.status!=="aborted",mt=je.tags?.split(",").map(Lt=>Lt.trim())||[],st=!C||mt.includes(C),nt=Pm(je);return Ye&&Rt&&Ce&&et&&Qe&&Ie&&st&&(P==="all"||P==="gcode"&&nt||P==="source"&&!nt)}).sort((je,Ze)=>{switch(q){case"date-desc":return(Qn(Ze.created_at)?.getTime()||0)-(Qn(je.created_at)?.getTime()||0);case"date-asc":return(Qn(je.created_at)?.getTime()||0)-(Qn(Ze.created_at)?.getTime()||0);case"name-asc":return(je.print_name||je.filename).localeCompare(Ze.print_name||Ze.filename);case"name-desc":return(Ze.print_name||Ze.filename).localeCompare(je.print_name||je.filename);case"size-desc":return Ze.file_size-je.file_size;case"size-asc":return je.file_size-Ze.file_size;default:return 0}}),pt=re||L.size>0,xt=je=>{te(Ze=>{const tt=new Set(Ze);return tt.has(je)?tt.delete(je):tt.add(je),tt})},Bt=()=>{qe&&te(new Set(qe.map(je=>je.id)))},nn=()=>{te(new Set),J(!1)},sn=je=>{f(Ze=>{const tt=new Set(Ze);return tt.has(je)?tt.delete(je):tt.add(je),tt})},Yt=()=>{f(new Set)},Ht=()=>{l(""),d(null),m(null),y(!1),N(!1),T(null),k("all")},tn=o||c||u||g||_||C||P!=="all",ln=w.useCallback(je=>{je.preventDefault(),je.dataTransfer.types.includes("Files")&&G(!0)},[]),mn=w.useCallback(je=>{je.preventDefault(),je.currentTarget===je.target&&G(!1)},[]),fn=w.useCallback(je=>{je.preventDefault(),G(!1);const Ze=Array.from(je.dataTransfer.files).filter(tt=>tt.name.endsWith(".3mf"));Ze.length>0?($(Ze),A(!0)):je.dataTransfer.files.length>0&&n(t("archives.page.only3mfSupported"),"warning")},[n,t]),Ue=w.useCallback(je=>{const Ze=je.target;if(Ze.tagName==="INPUT"||Ze.tagName==="TEXTAREA"||Ze.isContentEditable){je.key==="Escape"&&Ze.blur();return}switch(je.key){case"/":je.preventDefault(),s.current?.focus();break;case"u":case"U":!je.metaKey&&!je.ctrlKey&&(je.preventDefault(),A(!0));break;case"Escape":pt&&nn();break}},[pt]);return w.useEffect(()=>(document.addEventListener("keydown",Ue),()=>document.removeEventListener("keydown",Ue)),[Ue]),i.jsxs("div",{className:"p-4 md:p-8 relative min-h-full",onDragOver:ln,onDragLeave:mn,onDrop:fn,children:[U&&i.jsx("div",{className:"fixed inset-0 z-50 bg-bambu-dark/90 flex items-center justify-center pointer-events-none",children:i.jsxs("div",{className:"border-4 border-dashed border-bambu-green rounded-xl p-12 text-center",children:[i.jsx(Si,{className:"w-16 h-16 mx-auto mb-4 text-bambu-green"}),i.jsx("p",{className:"text-2xl font-semibold text-white mb-2",children:"Drop .3mf files here"}),i.jsx("p",{className:"text-bambu-gray",children:t("archives.releaseToUpload")})]})}),pt&&i.jsxs("div",{className:"fixed bottom-6 left-1/2 -translate-x-1/2 z-40 bg-bambu-dark-secondary border border-bambu-dark-tertiary rounded-lg shadow-xl px-4 py-3 flex items-center gap-4",children:[i.jsxs(Oe,{variant:"secondary",size:"sm",onClick:nn,children:[i.jsx(zt,{className:"w-4 h-4"}),"Close"]}),i.jsx("div",{className:"w-px h-6 bg-bambu-dark-tertiary"}),i.jsxs("span",{className:"text-white font-medium",children:[L.size," selected"]}),i.jsx("div",{className:"w-px h-6 bg-bambu-dark-tertiary"}),i.jsx(Oe,{variant:"secondary",size:"sm",onClick:Bt,children:"Select All"}),i.jsx("div",{className:"w-px h-6 bg-bambu-dark-tertiary"}),i.jsxs(Oe,{variant:"secondary",size:"sm",onClick:()=>Q(!0),disabled:!a("archives:update_own","archives:update_all"),title:a("archives:update_own","archives:update_all")?void 0:t("archives.permission.noUpdateArchives"),children:[i.jsx(uu,{className:"w-4 h-4"}),"Tags"]}),i.jsxs(Oe,{variant:"secondary",size:"sm",onClick:()=>le(!0),disabled:!a("archives:update_own","archives:update_all"),title:a("archives:update_own","archives:update_all")?void 0:t("archives.permission.noUpdateArchives"),children:[i.jsx(bs,{className:"w-4 h-4"}),"Project"]}),i.jsxs(Oe,{variant:"secondary",size:"sm",disabled:!a("archives:update_own","archives:update_all"),title:a("archives:update_own","archives:update_all")?void 0:t("archives.permission.noUpdateArchives"),onClick:()=>{const je=Array.from(L);Promise.all(je.map(Ze=>be.toggleFavorite(Ze))).then(()=>{e.invalidateQueries({queryKey:["archives"]}),n(`Toggled favorites for ${je.length} archive${je.length!==1?"s":""}`)}).catch(()=>{n(t("archives.toast.failedUpdateFavorites"),"error")})},children:[i.jsx(Vp,{className:"w-4 h-4"}),"Favorite"]}),i.jsxs(Oe,{size:"sm",className:"bg-red-500 hover:bg-red-600",onClick:()=>me(!0),disabled:!a("archives:delete_own","archives:delete_all"),title:a("archives:delete_own","archives:delete_all")?void 0:t("archives.permission.noDelete"),children:[i.jsx(Xt,{className:"w-4 h-4"}),"Delete"]})]}),i.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-8",children:[i.jsxs("div",{children:[i.jsxs("div",{className:"flex items-center gap-3",children:[i.jsx("h1",{className:"text-2xl font-bold text-white",children:"Archives"}),i.jsx("select",{className:"px-3 py-1.5 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-bambu-gray-light text-sm focus:border-bambu-green focus:outline-none",value:j,onChange:je=>E(je.target.value),children:GXe.map(je=>i.jsx("option",{value:je.id,children:je.label},je.id))})]}),i.jsxs("p",{className:"text-bambu-gray",children:[qe?.length||0," of ",ke?.length||0," prints"]})]}),i.jsxs("div",{className:"flex items-center gap-2 sm:gap-3 flex-wrap",children:[i.jsxs("div",{className:"relative",children:[i.jsxs(Oe,{variant:"secondary",onClick:()=>W(!I),disabled:B,children:[B?i.jsx(ct,{className:"w-4 h-4 animate-spin"}):i.jsx($1,{className:"w-4 h-4"}),"Export"]}),I&&i.jsxs("div",{className:"absolute right-0 top-full mt-1 w-48 bg-bambu-dark-secondary border border-bambu-dark-tertiary rounded-lg shadow-xl z-20",children:[i.jsxs("button",{className:"w-full px-4 py-2 text-left text-white hover:bg-bambu-dark-tertiary transition-colors flex items-center gap-2 rounded-t-lg",onClick:async()=>{W(!1),ae(!0);try{const{blob:je,filename:Ze}=await be.exportArchives({format:"csv",printerId:c||void 0,status:j==="failed"?"failed":void 0,search:o||void 0}),tt=URL.createObjectURL(je),Ye=document.createElement("a");Ye.href=tt,Ye.download=Ze,Ye.click(),URL.revokeObjectURL(tt),n(t("archives.toast.exportDownloaded"))}catch{n(t("archives.toast.exportFailed"),"error")}finally{ae(!1)}},children:[i.jsx(Ds,{className:"w-4 h-4"}),"Export as CSV"]}),i.jsxs("button",{className:"w-full px-4 py-2 text-left text-white hover:bg-bambu-dark-tertiary transition-colors flex items-center gap-2 rounded-b-lg",onClick:async()=>{W(!1),ae(!0);try{const{blob:je,filename:Ze}=await be.exportArchives({format:"xlsx",printerId:c||void 0,status:j==="failed"?"failed":void 0,search:o||void 0}),tt=URL.createObjectURL(je),Ye=document.createElement("a");Ye.href=tt,Ye.download=Ze,Ye.click(),URL.revokeObjectURL(tt),n(t("archives.toast.exportDownloaded"))}catch{n(t("archives.toast.exportFailed"),"error")}finally{ae(!1)}},children:[i.jsx($1,{className:"w-4 h-4"}),"Export as Excel"]})]})]}),L.size>=2&&L.size<=5&&i.jsxs(Oe,{variant:"secondary",onClick:()=>V(!0),children:[i.jsx(mb,{className:"w-4 h-4"}),"Compare (",L.size,")"]}),!pt&&i.jsxs(Oe,{variant:"secondary",onClick:()=>J(!0),children:[i.jsx(ho,{className:"w-4 h-4"}),"Select"]}),i.jsxs(Oe,{onClick:()=>A(!0),disabled:!r("archives:create"),title:r("archives:create")?void 0:t("archives.permission.noCreate"),children:[i.jsx(Si,{className:"w-4 h-4"}),"Upload 3MF"]})]})]}),i.jsxs("div",{className:"flex items-center border border-bambu-dark-tertiary rounded-lg overflow-hidden flex-shrink-0 w-fit mb-4",children:[i.jsx("button",{className:`p-2 ${pe==="grid"?"bg-bambu-green text-white":"bg-bambu-dark text-bambu-gray hover:text-white"}`,onClick:()=>Te("grid"),title:t("archives.gridView"),children:i.jsx(D0,{className:"w-4 h-4"})}),i.jsx("button",{className:`p-2 ${pe==="list"?"bg-bambu-green text-white":"bg-bambu-dark text-bambu-gray hover:text-white"}`,onClick:()=>Te("list"),title:t("archives.listView"),children:i.jsx(uC,{className:"w-4 h-4"})}),i.jsx("button",{className:`p-2 ${pe==="calendar"?"bg-bambu-green text-white":"bg-bambu-dark text-bambu-gray hover:text-white"}`,onClick:()=>Te("calendar"),title:t("archives.calendarView"),children:i.jsx(qme,{className:"w-4 h-4"})}),i.jsx("button",{className:`p-2 ${pe==="log"?"bg-bambu-green text-white":"bg-bambu-dark text-bambu-gray hover:text-white"}`,onClick:()=>Te("log"),title:t("archives.logView"),children:i.jsx(hhe,{className:"w-4 h-4"})})]}),pe!=="log"&&i.jsx(Tt,{className:"mb-6",children:i.jsxs(Pt,{className:"py-4",children:[i.jsxs("div",{className:"flex flex-col md:flex-row gap-3 md:gap-4 md:items-center md:flex-wrap",children:[i.jsxs("div",{className:"w-full md:flex-1 relative md:min-w-[200px]",children:[i.jsx(jr,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-bambu-gray"}),i.jsx("input",{ref:s,type:"text",placeholder:t("archives.searchPlaceholder"),className:"w-full pl-10 pr-4 py-3 md:py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:o,onChange:je=>l(je.target.value)})]}),i.jsxs("div",{className:"flex gap-2 md:gap-4 overflow-x-auto pb-1 md:pb-0 -mx-4 px-4 md:mx-0 md:px-0 md:flex-wrap scrollbar-hide",children:[i.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[i.jsx(cC,{className:"w-4 h-4 text-bambu-gray hidden md:block"}),i.jsxs("select",{className:"px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:c||"",onChange:je=>d(je.target.value?Number(je.target.value):null),children:[i.jsx("option",{value:"",children:"All Printers"}),Ne?.map(je=>i.jsx("option",{value:je.id,children:je.name},je.id))]})]}),i.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[i.jsx(oa,{className:"w-4 h-4 text-bambu-gray hidden md:block"}),i.jsxs("select",{className:"px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:u||"",onChange:je=>m(je.target.value||null),children:[i.jsx("option",{value:"",children:"All Materials"}),St.map(je=>i.jsx("option",{value:je,children:je},je))]})]}),i.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[i.jsx(H1,{className:"w-4 h-4 text-bambu-gray hidden md:block"}),i.jsxs("select",{className:"px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:P,onChange:je=>k(je.target.value),children:[i.jsx("option",{value:"all",children:"All Files"}),i.jsx("option",{value:"gcode",children:"Sliced (GCODE)"}),i.jsx("option",{value:"source",children:"Source Only"})]})]}),i.jsxs("button",{onClick:()=>y(!g),className:`flex items-center gap-2 px-3 py-2 rounded-lg border transition-colors flex-shrink-0 ${g?"bg-yellow-500/20 border-yellow-500 text-yellow-400":"bg-bambu-dark border-bambu-dark-tertiary text-bambu-gray hover:text-white"}`,title:t(g?"archives.showAll":"archives.showFavoritesOnly"),children:[i.jsx(Vp,{className:`w-4 h-4 ${g?"fill-yellow-400":""}`}),i.jsx("span",{className:"text-sm hidden md:inline",children:"Favorites"})]}),i.jsxs("button",{onClick:()=>N(!_),className:`flex items-center gap-2 px-3 py-2 rounded-lg border transition-colors flex-shrink-0 ${_?"bg-red-500/20 border-red-500 text-red-400":"bg-bambu-dark border-bambu-dark-tertiary text-bambu-gray hover:text-white"}`,title:t(_?"archives.showFailedPrints":"archives.hideFailedPrints"),children:[i.jsx(zi,{className:"w-4 h-4 "}),i.jsx("span",{className:"text-sm hidden md:inline",children:"Hide Failed"})]}),ht.length>0&&i.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[i.jsx(uu,{className:"w-4 h-4 text-bambu-gray hidden md:block"}),i.jsxs("select",{className:"px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:C||"",onChange:je=>T(je.target.value||null),children:[i.jsx("option",{value:"",children:"All Tags"}),ht.map(je=>i.jsx("option",{value:je,children:je},je))]}),i.jsx("button",{onClick:()=>K(!0),className:"p-2 rounded-lg bg-bambu-dark border border-bambu-dark-tertiary text-bambu-gray hover:text-white hover:border-bambu-green transition-colors",title:t("archives.manageTags"),children:i.jsx(gC,{className:"w-4 h-4"})})]}),i.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[i.jsx(VF,{className:"w-4 h-4 text-bambu-gray hidden md:block"}),i.jsxs("select",{className:"px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none",value:q,onChange:je=>Z(je.target.value),children:[i.jsx("option",{value:"date-desc",children:t("archives.sortNewest")}),i.jsx("option",{value:"date-asc",children:t("archives.sortOldest")}),i.jsxs("option",{value:"name-asc",children:[t("archives.sortName")," A-Z"]}),i.jsxs("option",{value:"name-desc",children:[t("archives.sortName")," Z-A"]}),i.jsx("option",{value:"size-desc",children:t("archives.sortLargest")}),i.jsx("option",{value:"size-asc",children:t("archives.sortSmallest")})]})]})]}),tn&&i.jsxs(Oe,{variant:"ghost",size:"sm",onClick:Ht,className:"text-bambu-gray hover:text-white",children:[i.jsx(zt,{className:"w-4 h-4"}),"Reset"]})]}),lt.length>0&&i.jsxs("div",{className:"flex items-center gap-3 mt-4 pt-4 border-t border-bambu-dark-tertiary",children:[i.jsx("span",{className:"text-xs text-bambu-gray",children:"Colors:"}),p.size>1&&i.jsx("button",{onClick:()=>v(je=>je==="or"?"and":"or"),className:`px-2 py-0.5 text-xs rounded transition-colors ${x==="and"?"bg-bambu-green text-white":"bg-bambu-dark-tertiary text-bambu-gray hover:text-white"}`,title:x==="or"?"Match ANY selected color":"Match ALL selected colors",children:x.toUpperCase()}),i.jsx("div",{className:"flex items-center gap-1.5 flex-wrap",children:lt.map(je=>i.jsx("button",{onClick:()=>sn(je),className:`w-6 h-6 rounded-full border-2 transition-all ${p.has(je)?"border-bambu-green scale-110":"border-white/20 hover:border-white/40"}`,style:{backgroundColor:je},title:je},je))}),p.size>0&&i.jsxs("button",{onClick:Yt,className:"text-xs text-bambu-gray hover:text-white flex items-center gap-1",children:[i.jsx(zt,{className:"w-3 h-3"}),"Clear"]})]})]})}),i.jsx(HXe,{}),Ee?i.jsx("div",{className:"text-center py-12 text-bambu-gray",children:t("archives.loadingArchives")}):qe?.length===0?i.jsx(Tt,{children:i.jsxs(Pt,{className:"text-center py-12",children:[i.jsx("p",{className:"text-bambu-gray",children:t(o?"archives.noArchivesSearch":"archives.noArchivesYet")}),i.jsx("p",{className:"text-sm text-bambu-gray mt-2",children:"Archives are created automatically when prints complete"})]})}):pe==="calendar"?i.jsx(Tt,{className:"p-6",children:i.jsx(Dqe,{archives:qe||[],onArchiveClick:je=>{l(""),Te("grid"),se(je.id)},highlightedArchiveId:ne})}):pe==="grid"?i.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-6",children:qe?.map(je=>i.jsx(qXe,{archive:je,printerName:je.printer_id?ot.get(je.printer_id)||"Unknown":je.sliced_for_model?`Sliced for ${je.sliced_for_model}`:"No Printer",isSelected:L.has(je.id),onSelect:xt,selectionMode:pt,projects:Ae,isHighlighted:je.id===ne,timeFormat:Ve,preferredSlicer:De,currency:Re,t},je.id))}):pe==="list"?i.jsx(Tt,{children:i.jsxs("div",{className:"divide-y divide-bambu-dark-tertiary",children:[i.jsxs("div",{className:"grid grid-cols-12 gap-4 px-4 py-3 text-xs text-bambu-gray font-medium",children:[i.jsx("div",{className:"col-span-1"}),i.jsx("div",{className:"col-span-4",children:"Name"}),i.jsx("div",{className:"col-span-2",children:"Printer"}),i.jsx("div",{className:"col-span-2",children:"Date"}),i.jsx("div",{className:"col-span-1",children:"Size"}),i.jsx("div",{className:"col-span-2 text-right",children:"Actions"})]}),qe?.map(je=>i.jsx(VXe,{archive:je,printerName:je.printer_id?ot.get(je.printer_id)||"Unknown":je.sliced_for_model?`Sliced for ${je.sliced_for_model}`:"No Printer",isSelected:L.has(je.id),onSelect:xt,selectionMode:pt,projects:Ae,isHighlighted:je.id===ne,preferredSlicer:De,t},je.id))]})}):pe==="log"?i.jsxs("div",{className:"space-y-4",children:[i.jsx(Tt,{children:i.jsx(Pt,{className:"py-3",children:i.jsxs("div",{className:"flex flex-col md:flex-row gap-3 md:items-center md:flex-wrap",children:[i.jsxs("div",{className:"flex-1 relative md:min-w-[200px]",children:[i.jsx(jr,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-bambu-gray"}),i.jsx("input",{type:"text",placeholder:t("archives.searchPlaceholder"),className:"w-full pl-10 pr-4 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none text-sm",value:o,onChange:je=>{l(je.target.value),Me(0)}})]}),i.jsxs("select",{className:"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:c||"",onChange:je=>{d(je.target.value?Number(je.target.value):null),Me(0)},children:[i.jsx("option",{value:"",children:t("archives.log.allPrinters")}),Ne?.map(je=>i.jsx("option",{value:je.id,children:je.name},je.id))]}),i.jsxs("select",{className:"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:ce||"",onChange:je=>{ge(je.target.value||null),Me(0)},children:[i.jsx("option",{value:"",children:t("archives.log.allUsers")}),xe?.map(je=>i.jsx("option",{value:je.username,children:je.username},je.id))]}),i.jsxs("select",{className:"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:oe||"",onChange:je=>{O(je.target.value||null),Me(0)},children:[i.jsx("option",{value:"",children:t("archives.log.allStatuses")}),i.jsx("option",{value:"completed",children:t("archives.status.completed")}),i.jsx("option",{value:"failed",children:t("archives.status.failed")}),i.jsx("option",{value:"stopped",children:t("archives.status.stopped")}),i.jsx("option",{value:"cancelled",children:t("archives.log.cancelled")}),i.jsx("option",{value:"skipped",children:t("archives.log.skipped")})]}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("label",{className:"text-sm text-bambu-gray",children:t("archives.log.dateFrom")}),i.jsx("input",{type:"date",className:"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:F,onChange:je=>{X(je.target.value),Me(0)}})]}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("label",{className:"text-sm text-bambu-gray",children:t("archives.log.dateTo")}),i.jsx("input",{type:"date",className:"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:ye,onChange:je=>{he(je.target.value),Me(0)}})]}),i.jsx("div",{className:"ml-auto",children:i.jsxs(Oe,{variant:"danger",size:"sm",onClick:()=>Be(!0),disabled:!r("archives:delete_all")||Ke.isPending,children:[i.jsx(Xt,{className:"w-4 h-4"}),t("archives.log.clearLog")]})})]})})}),i.jsx(Tt,{children:Pe?i.jsx("div",{className:"flex items-center justify-center py-12",children:i.jsx(ct,{className:"w-6 h-6 animate-spin text-bambu-green"})}):He?.items.length?i.jsxs(i.Fragment,{children:[i.jsx("div",{className:"overflow-x-auto",children:i.jsxs("table",{className:"w-full text-sm",children:[i.jsx("thead",{children:i.jsxs("tr",{className:"border-b border-bambu-dark-tertiary text-bambu-gray text-left",children:[i.jsx("th",{className:"px-4 py-3 font-medium",children:t("archives.log.date")}),i.jsx("th",{className:"px-4 py-3 font-medium",children:t("archives.log.printName")}),i.jsx("th",{className:"px-4 py-3 font-medium",children:t("archives.log.printer")}),i.jsx("th",{className:"px-4 py-3 font-medium",children:t("archives.log.user")}),i.jsx("th",{className:"px-4 py-3 font-medium",children:t("archives.log.status")}),i.jsx("th",{className:"px-4 py-3 font-medium",children:t("archives.log.duration")}),i.jsx("th",{className:"px-4 py-3 font-medium",children:t("archives.log.filament")})]})}),i.jsx("tbody",{className:"divide-y divide-bambu-dark-tertiary",children:He.items.map(je=>i.jsxs("tr",{className:"hover:bg-bambu-dark-secondary/50",children:[i.jsx("td",{className:"px-4 py-3 text-white whitespace-nowrap",children:Kp(je.started_at||je.created_at,Ve)}),i.jsx("td",{className:"px-4 py-3",children:i.jsxs("div",{className:"flex items-center gap-2",children:[je.thumbnail_path&&i.jsx("img",{src:be.getPrintLogThumbnail(je.id),alt:"",className:"w-8 h-8 rounded object-cover flex-shrink-0",onError:Ze=>{Ze.target.style.display="none"}}),i.jsx("span",{className:"text-white truncate max-w-[200px]",children:je.print_name||"—"})]})}),i.jsx("td",{className:"px-4 py-3 text-bambu-gray-light",children:je.printer_name||"—"}),i.jsx("td",{className:"px-4 py-3 text-bambu-gray-light",children:je.created_by_username||"—"}),i.jsx("td",{className:"px-4 py-3",children:i.jsx("span",{className:`inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium ${je.status==="completed"?"bg-green-500/20 text-green-400":je.status==="failed"?"bg-red-500/20 text-red-400":je.status==="stopped"?"bg-yellow-500/20 text-yellow-400":je.status==="cancelled"?"bg-orange-500/20 text-orange-400":je.status==="skipped"?"bg-blue-500/20 text-blue-400":"bg-gray-500/20 text-gray-400"}`,children:je.status})}),i.jsx("td",{className:"px-4 py-3 text-bambu-gray-light whitespace-nowrap",children:je.duration_seconds?js(je.duration_seconds):"—"}),i.jsx("td",{className:"px-4 py-3",children:i.jsxs("div",{className:"flex items-center gap-1.5",children:[je.filament_color&&i.jsx("span",{className:"w-3 h-3 rounded-full border border-white/20 flex-shrink-0",style:{backgroundColor:je.filament_color.startsWith("#")?je.filament_color:void 0}}),i.jsx("span",{className:"text-bambu-gray-light text-xs",children:je.filament_type||"—"})]})})]},je.id))})]})}),i.jsxs("div",{className:"flex items-center justify-between px-4 py-3 border-t border-bambu-dark-tertiary flex-wrap gap-2",children:[i.jsxs("div",{className:"flex items-center gap-3",children:[i.jsx("span",{className:"text-sm text-bambu-gray",children:t("archives.log.showing",{count:Math.min(de+$e,He.total),total:He.total})}),i.jsxs("div",{className:"flex items-center gap-1.5",children:[i.jsx("label",{className:"text-xs text-bambu-gray",children:t("archives.log.rowsPerPage")}),i.jsxs("select",{className:"px-2 py-1 bg-bambu-dark border border-bambu-dark-tertiary rounded text-white text-xs focus:border-bambu-green focus:outline-none",value:$e,onChange:je=>{Le(Number(je.target.value)),Me(0)},children:[i.jsx("option",{value:10,children:"10"}),i.jsx("option",{value:25,children:"25"}),i.jsx("option",{value:50,children:"50"}),i.jsx("option",{value:100,children:"100"})]})]})]}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsxs("span",{className:"text-sm text-bambu-gray",children:[t("archives.log.page")," ",Math.floor(de/$e)+1," / ",Math.max(1,Math.ceil(He.total/$e))]}),i.jsx(Oe,{variant:"secondary",size:"sm",onClick:()=>Me(Math.max(0,de-$e)),disabled:de===0,children:i.jsx(nc,{className:"w-4 h-4"})}),i.jsx(Oe,{variant:"secondary",size:"sm",onClick:()=>Me(de+$e),disabled:de+$e>=He.total,children:i.jsx(fa,{className:"w-4 h-4"})})]})]})]}):i.jsx("div",{className:"text-center py-12 text-bambu-gray",children:t("archives.log.noEntries")})})]}):null,D&&i.jsx(Nqe,{onClose:()=>{A(!1),$([])},initialFiles:R}),ue&&i.jsx(kn,{title:t("archives.modal.deleteArchives"),message:t("archives.modal.deleteArchivesConfirm",{count:L.size}),confirmText:t("archives.modal.deleteCount",{count:L.size}),variant:"danger",onConfirm:()=>{we.mutate(Array.from(L)),me(!1)},onCancel:()=>me(!1)}),fe&&i.jsx(Tqe,{selectedIds:Array.from(L),existingTags:ht,onClose:()=>Q(!1)}),ie&&i.jsx(Pqe,{selectedIds:Array.from(L),onClose:()=>le(!1)}),z&&L.size>=2&&L.size<=5&&i.jsx(IXe,{archiveIds:Array.from(L),onClose:()=>{V(!1),te(new Set),J(!1)}}),ee&&i.jsx($Xe,{onClose:()=>K(!1)}),_e&&i.jsx(kn,{title:t("archives.log.clearLogTitle"),message:t("archives.log.clearLogConfirm"),confirmText:t("archives.log.clearLogButton"),variant:"danger",onConfirm:()=>{Ke.mutate(),Be(!1)},onCancel:()=>Be(!1)})]})}function KXe(){for(var t=arguments.length,e=new Array(t),n=0;nr=>{e.forEach(a=>a(r))},e)}const BT=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function Px(t){const e=Object.prototype.toString.call(t);return e==="[object Window]"||e==="[object global]"}function _I(t){return"nodeType"in t}function go(t){var e,n;return t?Px(t)?t:_I(t)&&(e=(n=t.ownerDocument)==null?void 0:n.defaultView)!=null?e:window:window}function NI(t){const{Document:e}=go(t);return t instanceof e}function mw(t){return Px(t)?!1:t instanceof go(t).HTMLElement}function tse(t){return t instanceof go(t).SVGElement}function Ax(t){return t?Px(t)?t.document:_I(t)?NI(t)?t:mw(t)||tse(t)?t.ownerDocument:document:document:document}const Jc=BT?w.useLayoutEffect:w.useEffect;function kI(t){const e=w.useRef(t);return Jc(()=>{e.current=t}),w.useCallback(function(){for(var n=arguments.length,r=new Array(n),a=0;a{t.current=setInterval(r,a)},[]),n=w.useCallback(()=>{t.current!==null&&(clearInterval(t.current),t.current=null)},[]);return[e,n]}function _0(t,e){e===void 0&&(e=[t]);const n=w.useRef(t);return Jc(()=>{n.current!==t&&(n.current=t)},e),n}function hw(t,e){const n=w.useRef();return w.useMemo(()=>{const r=t(n.current);return n.current=r,r},[...e])}function Zk(t){const e=kI(t),n=w.useRef(null),r=w.useCallback(a=>{a!==n.current&&e?.(a,n.current),n.current=a},[]);return[n,r]}function yF(t){const e=w.useRef();return w.useEffect(()=>{e.current=t},[t]),e.current}let Bj={};function pw(t,e){return w.useMemo(()=>{if(e)return e;const n=Bj[t]==null?0:Bj[t]+1;return Bj[t]=n,t+"-"+n},[t,e])}function nse(t){return function(e){for(var n=arguments.length,r=new Array(n>1?n-1:0),a=1;a{const l=Object.entries(o);for(const[c,d]of l){const u=s[c];u!=null&&(s[c]=u+t*d)}return s},{...e})}}const Cb=nse(1),N0=nse(-1);function XXe(t){return"clientX"in t&&"clientY"in t}function CI(t){if(!t)return!1;const{KeyboardEvent:e}=go(t.target);return e&&t instanceof e}function QXe(t){if(!t)return!1;const{TouchEvent:e}=go(t.target);return e&&t instanceof e}function vF(t){if(QXe(t)){if(t.touches&&t.touches.length){const{clientX:e,clientY:n}=t.touches[0];return{x:e,y:n}}else if(t.changedTouches&&t.changedTouches.length){const{clientX:e,clientY:n}=t.changedTouches[0];return{x:e,y:n}}}return XXe(t)?{x:t.clientX,y:t.clientY}:null}const rx=Object.freeze({Translate:{toString(t){if(!t)return;const{x:e,y:n}=t;return"translate3d("+(e?Math.round(e):0)+"px, "+(n?Math.round(n):0)+"px, 0)"}},Scale:{toString(t){if(!t)return;const{scaleX:e,scaleY:n}=t;return"scaleX("+e+") scaleY("+n+")"}},Transform:{toString(t){if(t)return[rx.Translate.toString(t),rx.Scale.toString(t)].join(" ")}},Transition:{toString(t){let{property:e,duration:n,easing:r}=t;return e+" "+n+"ms "+r}}}),uK="a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]";function ZXe(t){return t.matches(uK)?t:t.querySelector(uK)}const JXe={display:"none"};function eQe(t){let{id:e,value:n}=t;return Kr.createElement("div",{id:e,style:JXe},n)}function tQe(t){let{id:e,announcement:n,ariaLiveType:r="assertive"}=t;const a={position:"fixed",top:0,left:0,width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0 0 0 0)",clipPath:"inset(100%)",whiteSpace:"nowrap"};return Kr.createElement("div",{id:e,style:a,role:"status","aria-live":r,"aria-atomic":!0},n)}function nQe(){const[t,e]=w.useState("");return{announce:w.useCallback(r=>{r!=null&&e(r)},[]),announcement:t}}const rse=w.createContext(null);function rQe(t){const e=w.useContext(rse);w.useEffect(()=>{if(!e)throw new Error("useDndMonitor must be used within a children of ");return e(t)},[t,e])}function iQe(){const[t]=w.useState(()=>new Set),e=w.useCallback(r=>(t.add(r),()=>t.delete(r)),[t]);return[w.useCallback(r=>{let{type:a,event:s}=r;t.forEach(o=>{var l;return(l=o[a])==null?void 0:l.call(o,s)})},[t]),e]}const aQe={draggable:`
To pick up a draggable item, press the space bar.
While dragging, use the arrow keys to move the item.
Press space again to drop the item in its new position, or press escape to cancel.
diff --git a/static/index.html b/static/index.html
index fef9af60b..e1141a8fd 100644
--- a/static/index.html
+++ b/static/index.html
@@ -23,7 +23,7 @@
-
+