usePageFileDrop-pL6xOqUj.js 11 KB

1
  1. import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{T as t,a as n,k as r,w as i}from"./client-Bw3urp1w.js";import{n as a}from"./QueryClientProvider-C3eWKLmF.js";import{t as o}from"./useQuery-BTfjV-1Z.js";import{t as s}from"./useMutation-CGk77Rd2.js";import{n as c}from"./ToastContext-lCIPyrWa.js";import{t as l}from"./cog-Cgy13EzB.js";import{t as u}from"./loader-circle-C0WA8zwT.js";import{t as d}from"./play-CbtkkFO3.js";import{t as f}from"./printer-BZJt3GTl.js";import{t as p}from"./triangle-alert-DxTC_wVZ.js";import{t as m}from"./x-D4CM9tS6.js";import{n as h}from"./useUiSettings-UBmC8PK8.js";import{n as g}from"./index-CPJxhO0I.js";var _=e(r(),1),v=i();function y({source:e,onClose:r}){let{t:i}=t(),l=a(),{showToast:u}=c(),[f,p]=(0,_.useState)(null),[y,S]=(0,_.useState)(null),[C,w]=(0,_.useState)(1),{trackJob:T}=g(),{data:E,isLoading:D}=o({queryKey:[`slicer-pipelines`],queryFn:()=>n.listSlicerPipelines()}),{data:O}=o({queryKey:[`printers`],queryFn:()=>n.getPrinters()}),{data:k}=h(),A=k?.pipeline_max_copies??50,j={kind:e.kind,id:e.id},M=s({mutationFn:e=>n.checkPipelineEligibility(e,j)}),N=s({mutationFn:({pipelineId:e,force:t})=>n.runPipeline(e,j,t,C),onSuccess:t=>{l.invalidateQueries({queryKey:[`slicer-pipelines`]}),l.invalidateQueries({queryKey:[`pipeline-runs`]}),t.slice_job_id&&T(t.slice_job_id,e.kind,e.filename),u(i(`library.runWithPipeline.toast.started`,`Pipeline run started`),`success`),r()},onError:e=>{u(e.message||i(`library.runWithPipeline.toast.failed`,`Could not start run`),`error`)}}),P=E?.pipelines??[],F=(O??[]).reduce((e,t)=>(e[t.id]=t,e),{});return(0,v.jsx)(`div`,{className:`fixed inset-0 z-50 bg-black/60 flex items-center justify-center p-4`,onClick:r,role:`dialog`,"aria-modal":`true`,"aria-label":i(`library.runWithPipeline.modalTitle`,`Run with pipeline`),children:(0,v.jsxs)(`div`,{className:`bg-bambu-dark-secondary border border-bambu-dark-tertiary rounded-lg shadow-2xl w-full max-w-md max-h-[80vh] flex flex-col overflow-hidden`,onClick:e=>e.stopPropagation(),children:[(0,v.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-3 border-b border-bambu-dark-tertiary`,children:[(0,v.jsxs)(`h3`,{className:`text-sm font-semibold text-white flex items-center gap-2`,children:[(0,v.jsx)(d,{className:`w-4 h-4 text-bambu-green`}),f&&y?i(`library.runWithPipeline.confirmTitle`,`Confirm run`):i(`library.runWithPipeline.modalTitle`,`Run with pipeline`)]}),(0,v.jsx)(`button`,{type:`button`,onClick:r,"aria-label":i(`common.close`,`Close`),className:`text-bambu-gray hover:text-white`,children:(0,v.jsx)(m,{className:`w-4 h-4`})})]}),(0,v.jsx)(`div`,{className:`flex-1 overflow-y-auto p-4 space-y-3`,children:f&&y?(0,v.jsx)(x,{pipeline:f,report:y,source:e,onBack:()=>{p(null),S(null)},onConfirm:()=>{f&&N.mutate({pipelineId:f.id,force:!0})},running:N.isPending}):(0,v.jsx)(b,{source:e,pipelines:P,printerById:F,loading:D||M.isPending,onPick:async e=>{if(!(e.target_printer_id||e.target_kind===`printer_class`&&e.target_model_class)){u(i(`library.runWithPipeline.noTargetMessage`,`This pipeline has no target printer set. Open it in Settings to pick one.`),`error`);return}p(e);try{let t=await M.mutateAsync(e.id);S(t),t.ok&&N.mutate({pipelineId:e.id,force:!1})}catch(e){u(e instanceof Error&&e.message||i(`library.runWithPipeline.toast.failed`,`Could not start run`),`error`),p(null)}},copies:C,maxCopies:A,onCopiesChange:w})})]})})}function b({source:e,pipelines:n,printerById:r,loading:i,onPick:a,copies:o,maxCopies:s,onCopiesChange:c}){let{t:d}=t();return(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(`p`,{className:`text-xs text-bambu-gray`,children:[d(`library.runWithPipeline.sourceHint`,`Source`),`:`,` `,(0,v.jsx)(`span`,{className:`text-white`,children:e.filename})]}),(0,v.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,v.jsxs)(`label`,{className:`text-xs text-bambu-gray`,htmlFor:`run-pipeline-copies`,children:[d(`library.runWithPipeline.copies`,`Copies`),`:`]}),(0,v.jsx)(`input`,{id:`run-pipeline-copies`,type:`number`,min:1,max:s,value:o,onChange:e=>{let t=parseInt(e.target.value,10);Number.isNaN(t)||c(Math.max(1,Math.min(s,t)))},"aria-label":d(`library.runWithPipeline.copies`,`Copies`),className:`w-20 px-2 py-1 text-xs bg-bambu-dark border border-bambu-dark-tertiary rounded text-white`}),(0,v.jsx)(`span`,{className:`text-xs text-bambu-gray/60`,children:d(`library.runWithPipeline.copiesHint`,`max {{n}}`,{n:s})})]}),i&&(0,v.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-bambu-gray`,children:[(0,v.jsx)(u,{className:`w-4 h-4 animate-spin`}),d(`library.runWithPipeline.loading`,`Loading…`)]}),!i&&n.length===0&&(0,v.jsx)(`p`,{className:`text-sm text-bambu-gray`,children:d(`library.runWithPipeline.empty`,`No pipelines saved yet. Open the Slice dialog and click "Save as pipeline" to create one.`)}),!i&&n.length>0&&(0,v.jsx)(`ul`,{className:`space-y-1.5`,"aria-label":d(`library.runWithPipeline.pipelineListAria`,`Available pipelines`),children:n.map(e=>{let t=e.target_kind===`printer_class`,n=e.target_printer_id?r[e.target_printer_id]?.name:null,i=t&&e.target_model_class?d(`library.runWithPipeline.classTarget`,`Any {{model}}`,{model:e.target_model_class}):null;return(0,v.jsx)(`li`,{children:(0,v.jsxs)(`button`,{type:`button`,onClick:()=>a(e),disabled:!(e.target_printer_id||t&&e.target_model_class),className:`w-full text-left px-3 py-2 rounded-md border border-bambu-dark-tertiary bg-bambu-dark/40 hover:bg-bambu-dark-tertiary disabled:opacity-50 disabled:cursor-not-allowed transition-colors`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,v.jsx)(l,{className:`w-3.5 h-3.5 text-bambu-green flex-shrink-0`}),(0,v.jsx)(`span`,{className:`text-sm font-medium text-white truncate`,children:e.name})]}),(0,v.jsxs)(`div`,{className:`mt-1 text-xs text-bambu-gray flex items-center gap-1`,children:[(0,v.jsx)(f,{className:`w-3 h-3`}),i?(0,v.jsx)(`span`,{children:i}):n?(0,v.jsx)(`span`,{children:n}):(0,v.jsx)(`span`,{className:`text-amber-700 dark:text-amber-400`,children:d(`library.runWithPipeline.noTarget`,`No target printer set`)})]})]})},e.id)})})]})}function x({pipeline:e,report:n,source:r,onBack:i,onConfirm:a,running:o}){let{t:s}=t();return(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(`div`,{className:`text-xs text-bambu-gray`,children:[(0,v.jsxs)(`p`,{children:[s(`library.runWithPipeline.confirmIntro`,`Pre-flight found issues with this run`),`:`]}),(0,v.jsxs)(`p`,{className:`mt-1`,children:[(0,v.jsxs)(`span`,{className:`text-bambu-gray/70`,children:[s(`library.runWithPipeline.sourceHint`,`Source`),`: `]}),(0,v.jsx)(`span`,{className:`text-white`,children:r.filename})]}),(0,v.jsxs)(`p`,{children:[(0,v.jsxs)(`span`,{className:`text-bambu-gray/70`,children:[s(`library.runWithPipeline.pipelineHint`,`Pipeline`),`: `]}),(0,v.jsx)(`span`,{className:`text-white`,children:e.name})]}),n.target_printer_name&&(0,v.jsxs)(`p`,{children:[(0,v.jsxs)(`span`,{className:`text-bambu-gray/70`,children:[s(`library.runWithPipeline.targetHint`,`Target`),`: `]}),(0,v.jsx)(`span`,{className:`text-white`,children:n.target_printer_name})]})]}),(0,v.jsx)(`ul`,{className:`space-y-1.5`,children:n.issues.map((e,t)=>(0,v.jsxs)(`li`,{className:`flex items-start gap-2 text-xs`,children:[(0,v.jsx)(p,{className:`w-3.5 h-3.5 text-amber-600 dark:text-amber-400 flex-shrink-0 mt-0.5`}),(0,v.jsx)(`span`,{className:`text-bambu-gray`,children:(0,v.jsx)(S,{issue:e})})]},t))}),(0,v.jsxs)(`div`,{className:`flex items-center justify-end gap-2 pt-2 border-t border-bambu-dark-tertiary`,children:[(0,v.jsx)(`button`,{type:`button`,onClick:i,disabled:o,className:`px-3 py-1.5 text-xs text-bambu-gray hover:text-white`,children:s(`common.back`,`Back`)}),(0,v.jsxs)(`button`,{type:`button`,onClick:a,disabled:o,className:`px-3 py-1.5 text-xs bg-amber-500 hover:bg-amber-600 text-white rounded disabled:opacity-50 flex items-center gap-1`,children:[o?(0,v.jsx)(u,{className:`w-3 h-3 animate-spin`}):(0,v.jsx)(d,{className:`w-3 h-3`}),s(`library.runWithPipeline.runAnyway`,`Run anyway`)]})]})]})}function S({issue:e}){let{t:n}=t();switch(e.kind){case`printer_not_set`:return(0,v.jsx)(v.Fragment,{children:n(`library.runWithPipeline.issue.printerNotSet`,`No target printer set on this pipeline.`)});case`printer_not_found`:return(0,v.jsx)(v.Fragment,{children:n(`library.runWithPipeline.issue.printerNotFound`,`Target printer no longer exists.`)});case`printer_disabled`:return(0,v.jsx)(v.Fragment,{children:n(`library.runWithPipeline.issue.printerDisabled`,`Target printer is disabled.`)});case`printer_offline`:return(0,v.jsx)(v.Fragment,{children:n(`library.runWithPipeline.issue.printerOffline`,`Target printer is offline.`)});case`filament_type_mismatch`:return(0,v.jsx)(v.Fragment,{children:n(`library.runWithPipeline.issue.filamentType`,`Filament slot {{slot}}: expected {{expected}}, AMS has {{actual}}`,{slot:(e.slot_index??0)+1,expected:e.expected??`?`,actual:e.actual??`?`})});case`filament_color_mismatch`:return(0,v.jsx)(v.Fragment,{children:n(`library.runWithPipeline.issue.filamentColor`,`Filament slot {{slot}}: colour differs (expected {{expected}}, AMS has {{actual}})`,{slot:(e.slot_index??0)+1,expected:e.expected??`?`,actual:e.actual??`?`})});case`ams_slot_missing`:return(0,v.jsx)(v.Fragment,{children:n(`library.runWithPipeline.issue.amsSlotMissing`,`AMS slot {{slot}} not available on this printer`,{slot:(e.slot_index??0)+1})});case`filament_unverified`:return(0,v.jsx)(v.Fragment,{children:n(`library.runWithPipeline.issue.filamentUnverified`,`Filament slot {{slot}} comes from a cloud / standard preset and could not be statically verified.`,{slot:(e.slot_index??0)+1})});default:return(0,v.jsx)(v.Fragment,{children:e.kind})}}function C({onFiles:e,onRejected:t,extensions:n,disabled:r=!1}){let[i,a]=(0,_.useState)(!1),o=(0,_.useRef)(e),s=(0,_.useRef)(t),c=(0,_.useRef)(n);(0,_.useEffect)(()=>{o.current=e},[e]),(0,_.useEffect)(()=>{s.current=t},[t]),(0,_.useEffect)(()=>{c.current=n},[n]);let l=(0,_.useCallback)(e=>{r||(e.preventDefault(),e.dataTransfer.types.includes(`Files`)&&a(!0))},[r]),u=(0,_.useCallback)(e=>{r||(e.preventDefault(),e.dataTransfer.types.includes(`Files`)&&a(!0))},[r]),d=(0,_.useCallback)(e=>{if(r)return;e.preventDefault();let t=e.currentTarget,n=e.relatedTarget;(!n||!t.contains(n))&&a(!1)},[r]),f=(0,_.useCallback)(e=>{if(r)return;e.preventDefault(),a(!1);let t=Array.from(e.dataTransfer.files);if(t.length===0)return;let n=c.current,i=n&&n.length>0?t.filter(e=>n.some(t=>e.name.toLowerCase().endsWith(t))):t;i.length>0?o.current(i):s.current?.()},[r]);return(0,_.useEffect)(()=>{if(!i)return;let e=()=>a(!1),t=t=>{t.key===`Escape`&&e()};return document.addEventListener(`drop`,e),document.addEventListener(`dragend`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`drop`,e),document.removeEventListener(`dragend`,e),document.removeEventListener(`keydown`,t)}},[i]),{isDraggingOver:i,dragHandlers:{onDragOver:l,onDragEnter:u,onDragLeave:d,onDrop:f}}}export{y as n,C as t};