aitu-app 0.9.2 → 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/README.md +3 -3
  2. package/assets/{CanvasAudioPlayer-C_USx5uz.js → CanvasAudioPlayer-BKMfe-GO.js} +2 -2
  3. package/assets/{ComicCreator-qGQaXp7h.js → ComicCreator-D5HnnPYu.js} +3 -3
  4. package/assets/DeferredAIInputBar-CVXfAbVO.css +1 -0
  5. package/assets/DeferredAIInputBar-Ce250DxA.js +107 -0
  6. package/assets/{DrawnixDeferredFeatures-Hy_-quZ1.js → DrawnixDeferredFeatures-ue9KjDJ6.js} +2 -2
  7. package/assets/{KnowledgeBaseContent-DSKNA70H.js → KnowledgeBaseContent-YCNU2vP8.js} +5 -5
  8. package/assets/{MVCreator-C3iClDLU.js → MVCreator-uWWF5q7x.js} +4 -4
  9. package/assets/{ModelBenchmarkWorkbench-BxwdcZ0q.js → ModelBenchmarkWorkbench-Bm75hOT0.js} +2 -2
  10. package/assets/{MusicAnalyzer-f_T6_YPJ.js → MusicAnalyzer-BXe6y3_p.js} +1 -1
  11. package/assets/ParametersDropdown-BE58BbHs.css +1 -0
  12. package/assets/{ParametersDropdown-CTSN3ClD.js → ParametersDropdown-wKdOCk_p.js} +1 -1
  13. package/assets/{PromptHistoryTool-DV-8RSdz.js → PromptHistoryTool-BRMlnlE1.js} +2 -2
  14. package/assets/{ResizableDivider-CUQBmPpx.js → ResizableDivider-tAq9KErj.js} +1 -1
  15. package/assets/{TaskQueuePanel-CtjY1W4t.js → TaskQueuePanel-D4PA4azU.js} +1 -1
  16. package/assets/{VideoAnalyzer-BBVBSONO.js → VideoAnalyzer-CVqV3zd3.js} +3 -3
  17. package/assets/{VideoAnalyzer-BmAjGvN8.js → VideoAnalyzer-gVfFvd5A.js} +1 -1
  18. package/assets/{ai-chat-BO5vbKZW.js → ai-chat-D_s8vs6j.js} +45 -45
  19. package/assets/{ai-chat-DyV67c_f.css → ai-chat-_KImIteT.css} +1 -1
  20. package/assets/{ai-generation-preferences-service-ZmPTR-wz.js → ai-generation-preferences-service-rBqGBu1Z.js} +1 -1
  21. package/assets/{batch-image-generation-BLBSv-t6.js → batch-image-generation-BHunNwyR.js} +6 -6
  22. package/assets/{diagram-engines-CSzW_-6N.js → diagram-engines-y0JSIEUO.js} +3 -3
  23. package/assets/{editor-engines-C573k8UM.js → editor-engines-Cc9_gvTn.js} +1 -1
  24. package/assets/{index-BT-rxxI3.js → index-BECJnoIM.js} +1 -1
  25. package/assets/{index-jxwTv7c1.js → index-BOOKwIS8.js} +1 -1
  26. package/assets/{index-N8asYyaz.js → index-Co0sFz6V.js} +2 -2
  27. package/assets/{index-IHNaVKGH.js → index-CrsvRs42.js} +1 -1
  28. package/assets/{index-Dw_8lcIi.js → index-Dthb4yKS.js} +1 -1
  29. package/assets/{index.es-BLXvmueB.js → index.es-l6CUS7uC.js} +1 -1
  30. package/assets/{jspdf.es.min-DxWvbkh4.js → jspdf.es.min-vSonSXg8.js} +3 -3
  31. package/assets/{markdown-to-drawnix-BVFYnimo.js → markdown-to-drawnix-CkXxETO6.js} +3 -3
  32. package/assets/{mermaid-to-drawnix-nGs2aeZ7.js → mermaid-to-drawnix-CiiYHL53.js} +3 -3
  33. package/assets/{model-benchmark-launcher-DAWoSySc.js → model-benchmark-launcher-EfxZ9z3O.js} +1 -1
  34. package/assets/{photo-wall-splitter-CCUURzGk.js → photo-wall-splitter-BJ5RLX6n.js} +1 -1
  35. package/assets/{prompt-utils-MF_LILNU.js → prompt-utils-7NlWAivq.js} +1 -1
  36. package/assets/{settings-dialog-Ac7R-_CG.js → settings-dialog-CBNPo-wJ.js} +1 -1
  37. package/assets/{skill-dsl-parser-Do9iAYbB.js → skill-dsl-parser-9CW3IgX7.js} +1 -1
  38. package/assets/{startup-app-CKHrOmQ0.css → startup-app-BJH8E5sr.css} +1 -1
  39. package/assets/{startup-app-eD_rQhSh.js → startup-app-M6vjXkRC.js} +509 -504
  40. package/assets/{task-sync-BJVOunRa.js → task-sync-B01Tbv7m.js} +1 -1
  41. package/assets/{tool-windows-CmgL3thd.js → tool-windows-Cf62DjP-.js} +21 -21
  42. package/assets/ttd-dialog-O1oaoYry.js +6 -0
  43. package/assets/{ttd-dialog-submit-shortcut-C2lJygXA.js → ttd-dialog-submit-shortcut-rkvbdHF7.js} +1 -1
  44. package/assets/{useCharacters-BAKE4TeJ.js → useCharacters-BVPiqeuF.js} +1 -1
  45. package/assets/{useMediaViewer-BGw5RkSR.js → useMediaViewer-Be0fy5RZ.js} +1 -1
  46. package/assets/{useWorkflowSubmission-iAPmKke9.js → useWorkflowSubmission-BwYRubj-.js} +9 -9
  47. package/assets/{video-recovery-service-CW7bErP2.js → video-recovery-service-CUmfssNZ.js} +1 -1
  48. package/assets/{workflow-generation-utils-DhIVnOHO.js → workflow-generation-utils-362XEGgT.js} +3 -3
  49. package/assets/{workflow-submission-service-Ce0cpj8E.js → workflow-submission-service-Dk47OkGu.js} +2 -2
  50. package/changelog.json +18 -13
  51. package/idle-prefetch-manifest.json +286 -286
  52. package/manifest.json +3 -3
  53. package/package.json +1 -1
  54. package/precache-manifest.json +6 -6
  55. package/sw.js +1 -1
  56. package/version.json +3 -4
  57. package/assets/DeferredAIInputBar-CPykEFYX.css +0 -1
  58. package/assets/DeferredAIInputBar-LmZGQCLT.js +0 -107
  59. package/assets/ParametersDropdown-b2oWAycj.css +0 -1
  60. package/assets/ttd-dialog-B12v0SVY.js +0 -6
@@ -1,2 +1,2 @@
1
- import{e0 as qe,r as a,mj as U,j as e,mk as is,ml as cs,mm as os,mn as us,mo as ds,mp as ms,mq as pe,mr as Se,ms as xe,mt as oe,mu as Je,mv as Ge,am as ge,mw as ps,bY as hs,bz as X,bg as q,mx as fs,a1 as ys,my as Qe,mz as Xe,mA as Ze,mB as gs,mC as js,aA as Ne,bn as be,mD as Fe,mE as Ke,mF as vs,mG as xs,iV as Ss,gT as Ns,mH as Me,mI as bs,mJ as Is,mK as Ts,$ as ks,c1 as Cs,dB as ue,E as Ms,mL as As,mM as _s,mN as ws,mO as Es}from"./startup-app-eD_rQhSh.js";import{i as je,R as es,r as zs,K as $e,m as Ie}from"./ai-chat-BO5vbKZW.js";import{s as Ue,i as Ps,g as Ds,a as Ls}from"./task-sync-BJVOunRa.js";import{u as Os}from"./VideoAnalyzer-BmAjGvN8.js";/* empty css */import"./startup-runtime-DTmhLESk.js";function Re(s){return(s||"").trim().toLowerCase().replace(/[^a-z0-9]/g,"")||"mp3"}function Bs(s){const n=s.name.split(".").pop();return n&&n.length<=8?Re(n):Re(s.type.split("/")[1])}async function $s(s,n){const i=Bs(s),o=`/__aitu_cache__/audio/${`music-analyzer-source-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}.${i}`;return await qe.cacheMediaFromBlob(o,s,"audio",{metadata:{source:"music-analyzer-input",fileName:s.name,mimeType:s.type||"audio/mpeg",size:s.size}}),{type:"upload",cacheUrl:o,fileName:s.name||`music-source.${i}`,mimeType:s.type||"audio/mpeg",size:s.size}}async function Us(s){if(!s||s.type!=="upload")return null;const n=await qe.getCachedBlob(s.cacheUrl);return n?new File([n],s.fileName||"music-source.mp3",{type:s.mimeType||n.type||"audio/mpeg",lastModified:Date.now()}):null}const Gs=[{key:"purpose",label:"音乐用途",placeholder:"普通歌曲创作 / 短视频爆点 / 广告歌",options:is},{key:"genreStyle",label:"核心曲风",placeholder:"Mozart Classical / Mandopop / R&B",options:cs},{key:"vocalStyle",label:"人声/唱法",placeholder:"female vocal(女声)/ rap vocal(说唱人声)",options:os},{key:"energyMood",label:"情绪能量",placeholder:"高能上扬 / 深夜情绪化 / 克制高级",options:us},{key:"lyricGoal",label:"歌词目标",placeholder:"副歌第一句要有记忆点",options:ds}],Le=({value:s,onChange:n})=>{const i=a.useMemo(()=>U(s),[s]),b=a.useCallback((o,M)=>{n(U({...i,[o]:M}))},[i,n]);return e.jsxs("div",{className:"ma-music-brief",children:[e.jsxs("div",{className:"ma-card-header",children:[e.jsx("span",{children:"歌曲定位"}),e.jsx("span",{className:"ma-muted",children:"用于约束歌词与 Suno 标签"})]}),e.jsx("div",{className:"ma-music-brief-grid",children:Gs.map(o=>e.jsxs("label",{className:"ma-field",children:[e.jsx("span",{children:o.label}),e.jsx(ms,{className:"ma-brief-combo",value:i[o.key]||"",onChange:M=>b(o.key,M),options:o.options,placeholder:o.placeholder})]},o.key))})]})},Ae="gemini-2.5-pro",_e="music-analyzer:model",we="music-analyzer:lyrics-model",Oe="music-analyzer:creation-prompt";function Fs(s){return`${(s/1024/1024).toFixed(1)}MB`}function Ks(){try{return sessionStorage.getItem(Oe)||""}catch{return""}}function He(s){try{if(s){sessionStorage.setItem(Oe,s);return}sessionStorage.removeItem(Oe)}catch{}}function Rs(s=[],n=[]){return s.length!==n.length?!1:s.every((i,b)=>i===n[b])}const Hs=({existingRecord:s,onComplete:n,onRecordsChange:i,onCreateNew:b,onNext:o,onLyricsReady:M})=>{const[x,I]=a.useState((s==null?void 0:s.source)==="upload"?"reference":"scratch"),[u,P]=a.useState(()=>(s==null?void 0:s.creationPrompt)||Ks()),[T,F]=a.useState([]),[v,D]=a.useState(()=>U(s==null?void 0:s.musicBrief)),[y,J]=a.useState(()=>(s==null?void 0:s.pendingLyricsGenTaskId)||null),[r,m]=a.useState(""),[g,j]=a.useState(null),[d,h]=a.useState(null),[k,K]=a.useState(""),[S,Q]=a.useState(!0),[G,de]=a.useState(""),[V,Z]=a.useState(""),[re,me]=a.useState(""),te=a.useRef(null),C=a.useRef(null),R=a.useRef(),Y=a.useRef(!1),ne=a.useRef(!1),[ie,A]=a.useState(""),[L,le]=a.useState(()=>(s==null?void 0:s.analysisModel)||pe(_e,Ae).modelId),[ee,$]=a.useState(()=>(s==null?void 0:s.analysisModelRef)||pe(_e,Ae).modelRef),[z,H]=a.useState(()=>pe(we,be()).modelId),[se,c]=a.useState(()=>pe(we,be()).modelRef),N=a.useCallback((l,f)=>{le(l),$(f||null),Se(_e,l,f)},[]),t=a.useCallback((l,f)=>{H(l),c(f||null),Se(we,l,f)},[]),w=a.useMemo(()=>{if(C.current&&URL.revokeObjectURL(C.current),!g)return C.current=null,null;const l=URL.createObjectURL(g);return C.current=l,l},[g]);a.useEffect(()=>()=>{C.current&&URL.revokeObjectURL(C.current)},[]),a.useEffect(()=>{let l=!1;return(async()=>{if(!s){!d&&!y&&(j(null),D({}),A(""));return}le(s.analysisModel||Ae),$(s.analysisModelRef||null),P(s.creationPrompt||""),D(O=>{const B=U(s.musicBrief);return xe(O,B)?O:B});const p=s.analysis?Ge(s.analysis):null;if(de(s.title||(p==null?void 0:p.sunoTitle)||""),Z((s.styleTags||(p==null?void 0:p.sunoStyleTags)||(p==null?void 0:p.genreTags)||[]).join(", ")),me(s.lyricsDraft||(p==null?void 0:p.sunoLyricsDraft)||""),A(""),s.source==="upload"){const O=await Us(s.sourceSnapshot);if(l)return;j(O),O||A("原上传音频缓存已失效,无法自动回填音频")}})(),()=>{l=!0}},[s,d,y]),a.useEffect(()=>{if((s==null?void 0:s.source)==="scratch"){He(s.creationPrompt||"");return}s||He(u)},[u,s]),a.useEffect(()=>{if(s)return clearTimeout(R.current),R.current=setTimeout(async()=>{const l=U(v),f={musicBrief:l};if(x==="reference"){const B=V.split(",").map(rs=>rs.trim()).filter(Boolean),as=s.title!==G.trim(),ts=!Rs(s.styleTags||[],B),ns=(s.lyricsDraft||"")!==re,ls=!xe(s.musicBrief,l);if(!as&&!ts&&!ns&&!ls)return;f.title=G.trim(),f.styleTags=B,f.lyricsDraft=re}else if(xe(s.musicBrief,l))return;const p=await oe(s.id,f);i(p);const O=p.find(B=>B.id===s.id);O&&n(O)},400),()=>clearTimeout(R.current)},[re,V,G,s,v,x,n,i]);const _=je("text"),ce=a.useMemo(()=>_.filter(l=>/^gemini/i.test(l.id)),[_]),W=je("audio"),ae=a.useMemo(()=>Je(_,W),[_,W]),E=a.useMemo(()=>s!=null&&s.analysis?Ge(s.analysis):null,[s==null?void 0:s.analysis]),Te=a.useCallback(l=>{var p;const f=(p=l.target.files)==null?void 0:p[0];f!=null&&f.type.startsWith("audio/")?(j(f),A("")):A("请选择音频文件")},[]),ve=a.useCallback(l=>{l.preventDefault();const f=l.dataTransfer.files[0];f!=null&&f.type.startsWith("audio/")?(j(f),A("")):A("请选择音频文件")},[]),ke=a.useCallback(async()=>{if(!(Y.current||d)){if(!g){A("请先上传音频");return}Y.current=!0,ge.trackUIInteraction({area:"popular_music_tool",action:"audio_analysis_started",control:"analyze_audio",source:"music_analyzer_create_page",metadata:{fileSizeBytes:g.size,hasModelRef:!!ee}}),A(""),K("缓存音频...");try{const l=await $s(g),f=ps(v),p=[hs,f].filter(Boolean).join(`
1
+ import{e0 as qe,r as a,mk as U,j as e,ml as is,mm as cs,mn as os,mo as us,mp as ds,mq as ms,mr as pe,ms as Se,mt as xe,mu as oe,mv as Je,mw as Ge,am as ge,mx as ps,bY as hs,bz as X,bg as q,my as fs,a1 as ys,mz as Qe,mA as Xe,mB as Ze,mC as gs,mD as js,aA as Ne,bn as be,mE as Fe,mF as Ke,mG as vs,mH as xs,iW as Ss,gU as Ns,mI as Me,mJ as bs,mK as Is,mL as Ts,$ as ks,c1 as Cs,dB as ue,E as Ms,mM as As,mN as _s,mO as ws,mP as Es}from"./startup-app-M6vjXkRC.js";import{i as je,R as es,r as zs,K as $e,m as Ie}from"./ai-chat-D_s8vs6j.js";import{s as Ue,i as Ps,g as Ds,a as Ls}from"./task-sync-B01Tbv7m.js";import{u as Os}from"./VideoAnalyzer-gVfFvd5A.js";/* empty css */import"./startup-runtime-DTmhLESk.js";function Re(s){return(s||"").trim().toLowerCase().replace(/[^a-z0-9]/g,"")||"mp3"}function Bs(s){const n=s.name.split(".").pop();return n&&n.length<=8?Re(n):Re(s.type.split("/")[1])}async function $s(s,n){const i=Bs(s),o=`/__aitu_cache__/audio/${`music-analyzer-source-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}.${i}`;return await qe.cacheMediaFromBlob(o,s,"audio",{metadata:{source:"music-analyzer-input",fileName:s.name,mimeType:s.type||"audio/mpeg",size:s.size}}),{type:"upload",cacheUrl:o,fileName:s.name||`music-source.${i}`,mimeType:s.type||"audio/mpeg",size:s.size}}async function Us(s){if(!s||s.type!=="upload")return null;const n=await qe.getCachedBlob(s.cacheUrl);return n?new File([n],s.fileName||"music-source.mp3",{type:s.mimeType||n.type||"audio/mpeg",lastModified:Date.now()}):null}const Gs=[{key:"purpose",label:"音乐用途",placeholder:"普通歌曲创作 / 短视频爆点 / 广告歌",options:is},{key:"genreStyle",label:"核心曲风",placeholder:"Mozart Classical / Mandopop / R&B",options:cs},{key:"vocalStyle",label:"人声/唱法",placeholder:"female vocal(女声)/ rap vocal(说唱人声)",options:os},{key:"energyMood",label:"情绪能量",placeholder:"高能上扬 / 深夜情绪化 / 克制高级",options:us},{key:"lyricGoal",label:"歌词目标",placeholder:"副歌第一句要有记忆点",options:ds}],Le=({value:s,onChange:n})=>{const i=a.useMemo(()=>U(s),[s]),b=a.useCallback((o,M)=>{n(U({...i,[o]:M}))},[i,n]);return e.jsxs("div",{className:"ma-music-brief",children:[e.jsxs("div",{className:"ma-card-header",children:[e.jsx("span",{children:"歌曲定位"}),e.jsx("span",{className:"ma-muted",children:"用于约束歌词与 Suno 标签"})]}),e.jsx("div",{className:"ma-music-brief-grid",children:Gs.map(o=>e.jsxs("label",{className:"ma-field",children:[e.jsx("span",{children:o.label}),e.jsx(ms,{className:"ma-brief-combo",value:i[o.key]||"",onChange:M=>b(o.key,M),options:o.options,placeholder:o.placeholder})]},o.key))})]})},Ae="gemini-2.5-pro",_e="music-analyzer:model",we="music-analyzer:lyrics-model",Oe="music-analyzer:creation-prompt";function Fs(s){return`${(s/1024/1024).toFixed(1)}MB`}function Ks(){try{return sessionStorage.getItem(Oe)||""}catch{return""}}function He(s){try{if(s){sessionStorage.setItem(Oe,s);return}sessionStorage.removeItem(Oe)}catch{}}function Rs(s=[],n=[]){return s.length!==n.length?!1:s.every((i,b)=>i===n[b])}const Hs=({existingRecord:s,onComplete:n,onRecordsChange:i,onCreateNew:b,onNext:o,onLyricsReady:M})=>{const[x,I]=a.useState((s==null?void 0:s.source)==="upload"?"reference":"scratch"),[u,P]=a.useState(()=>(s==null?void 0:s.creationPrompt)||Ks()),[T,F]=a.useState([]),[v,D]=a.useState(()=>U(s==null?void 0:s.musicBrief)),[y,J]=a.useState(()=>(s==null?void 0:s.pendingLyricsGenTaskId)||null),[r,m]=a.useState(""),[g,j]=a.useState(null),[d,h]=a.useState(null),[k,K]=a.useState(""),[S,Q]=a.useState(!0),[G,de]=a.useState(""),[V,Z]=a.useState(""),[re,me]=a.useState(""),te=a.useRef(null),C=a.useRef(null),R=a.useRef(),Y=a.useRef(!1),ne=a.useRef(!1),[ie,A]=a.useState(""),[L,le]=a.useState(()=>(s==null?void 0:s.analysisModel)||pe(_e,Ae).modelId),[ee,$]=a.useState(()=>(s==null?void 0:s.analysisModelRef)||pe(_e,Ae).modelRef),[z,H]=a.useState(()=>pe(we,be()).modelId),[se,c]=a.useState(()=>pe(we,be()).modelRef),N=a.useCallback((l,f)=>{le(l),$(f||null),Se(_e,l,f)},[]),t=a.useCallback((l,f)=>{H(l),c(f||null),Se(we,l,f)},[]),w=a.useMemo(()=>{if(C.current&&URL.revokeObjectURL(C.current),!g)return C.current=null,null;const l=URL.createObjectURL(g);return C.current=l,l},[g]);a.useEffect(()=>()=>{C.current&&URL.revokeObjectURL(C.current)},[]),a.useEffect(()=>{let l=!1;return(async()=>{if(!s){!d&&!y&&(j(null),D({}),A(""));return}le(s.analysisModel||Ae),$(s.analysisModelRef||null),P(s.creationPrompt||""),D(O=>{const B=U(s.musicBrief);return xe(O,B)?O:B});const p=s.analysis?Ge(s.analysis):null;if(de(s.title||(p==null?void 0:p.sunoTitle)||""),Z((s.styleTags||(p==null?void 0:p.sunoStyleTags)||(p==null?void 0:p.genreTags)||[]).join(", ")),me(s.lyricsDraft||(p==null?void 0:p.sunoLyricsDraft)||""),A(""),s.source==="upload"){const O=await Us(s.sourceSnapshot);if(l)return;j(O),O||A("原上传音频缓存已失效,无法自动回填音频")}})(),()=>{l=!0}},[s,d,y]),a.useEffect(()=>{if((s==null?void 0:s.source)==="scratch"){He(s.creationPrompt||"");return}s||He(u)},[u,s]),a.useEffect(()=>{if(s)return clearTimeout(R.current),R.current=setTimeout(async()=>{const l=U(v),f={musicBrief:l};if(x==="reference"){const B=V.split(",").map(rs=>rs.trim()).filter(Boolean),as=s.title!==G.trim(),ts=!Rs(s.styleTags||[],B),ns=(s.lyricsDraft||"")!==re,ls=!xe(s.musicBrief,l);if(!as&&!ts&&!ns&&!ls)return;f.title=G.trim(),f.styleTags=B,f.lyricsDraft=re}else if(xe(s.musicBrief,l))return;const p=await oe(s.id,f);i(p);const O=p.find(B=>B.id===s.id);O&&n(O)},400),()=>clearTimeout(R.current)},[re,V,G,s,v,x,n,i]);const _=je("text"),ce=a.useMemo(()=>_.filter(l=>/^gemini/i.test(l.id)),[_]),W=je("audio"),ae=a.useMemo(()=>Je(_,W),[_,W]),E=a.useMemo(()=>s!=null&&s.analysis?Ge(s.analysis):null,[s==null?void 0:s.analysis]),Te=a.useCallback(l=>{var p;const f=(p=l.target.files)==null?void 0:p[0];f!=null&&f.type.startsWith("audio/")?(j(f),A("")):A("请选择音频文件")},[]),ve=a.useCallback(l=>{l.preventDefault();const f=l.dataTransfer.files[0];f!=null&&f.type.startsWith("audio/")?(j(f),A("")):A("请选择音频文件")},[]),ke=a.useCallback(async()=>{if(!(Y.current||d)){if(!g){A("请先上传音频");return}Y.current=!0,ge.trackUIInteraction({area:"popular_music_tool",action:"audio_analysis_started",control:"analyze_audio",source:"music_analyzer_create_page",metadata:{fileSizeBytes:g.size,hasModelRef:!!ee}}),A(""),K("缓存音频...");try{const l=await $s(g),f=ps(v),p=[hs,f].filter(Boolean).join(`
2
2
  `),O=X.createTask({prompt:`分析音频:${g.name||"本地音频"}`,model:L,modelRef:ee,mimeType:l.mimeType,audioCacheUrl:l.cacheUrl,musicAnalyzerAction:"analyze",musicAnalyzerPrompt:p,musicAnalyzerMusicBrief:U(v),musicAnalyzerSource:"upload",musicAnalyzerSourceLabel:l.fileName,musicAnalyzerSourceSnapshot:l,autoInsertToCanvas:!1},q.CHAT);h(O.id),K("音频分析中 0%")}catch(l){Y.current=!1,A(l.message||"音频分析失败")}}},[g,v,d,L,ee]),he=a.useCallback(async()=>{if(ne.current||y)return;if(!u.trim()){A("请先描述你想创作的歌曲");return}ne.current=!0;const l=Qe(z);ge.trackUIInteraction({area:"popular_music_tool",action:"lyrics_generation_started",control:"generate_lyrics",source:"music_analyzer_create_page",metadata:{engine:l?"suno":"text_model",promptLength:u.trim().length,hasModelRef:!!se}}),A(""),m(l?"歌词生成中...":"歌词草稿生成中 0%");try{const f={id:ys(),createdAt:Date.now(),source:"scratch",sourceLabel:u.slice(0,30)||"从零创作",creationPrompt:u,musicBrief:U(v),styleTags:fs(v),starred:!1},p=l?X.createTask({prompt:Xe({userPrompt:u,musicBrief:v,mode:"create"}),model:z,modelRef:se,sunoAction:"lyrics",musicAnalyzerAction:"lyrics-gen",musicAnalyzerRecordId:f.id,musicAnalyzerMusicBrief:U(v),knowledgeContextRefs:T,autoInsertToCanvas:!1},q.AUDIO):X.createTask({prompt:`从零创作歌词:${f.sourceLabel}`,model:z,modelRef:se,musicAnalyzerAction:"lyrics-gen",musicAnalyzerPrompt:Ze({userPrompt:u,musicBrief:v,mode:"create"}),musicAnalyzerRecordId:f.id,musicAnalyzerMusicBrief:U(v),knowledgeContextRefs:T,autoInsertToCanvas:!1},q.CHAT);f.pendingLyricsGenTaskId=p.id;const O=await gs(f);i(O),n(f),J(p.id)}catch(f){ne.current=!1,A(f.message||"歌词生成失败"),m("")}},[u,T,v,n,i,y,z,se]);a.useEffect(()=>{if(!d)return;const l=X.getTask(d);typeof(l==null?void 0:l.progress)=="number"&&K(`音频分析中 ${Math.round(l.progress)}%`);const f=X.observeTaskUpdates().subscribe(p=>{var O;if(p.task.id===d){if(p.task.status==="failed"){Y.current=!1,h(null),K(""),A(((O=p.task.error)==null?void 0:O.message)||"音频分析失败");return}if(p.task.status==="completed"){Ue(p.task).then(B=>{B&&(i(B.records),n(B.record))}).catch(B=>A(B.message||"分析结果同步失败")).finally(()=>{Y.current=!1,h(null),K("")});return}typeof p.task.progress=="number"&&K(`音频分析中 ${Math.round(p.task.progress)}%`)}});return()=>f.unsubscribe()},[d,n,i]),a.useEffect(()=>{if(!y)return;const l=X.getTask(y);if(typeof(l==null?void 0:l.progress)=="number"){const p=l.type===q.CHAT?"歌词草稿生成中":"歌词生成中";m(`${p} ${Math.round(l.progress)}%`)}const f=X.observeTaskUpdates().subscribe(p=>{var O;if(p.task.id===y){if(p.task.status==="failed"){const B=String(p.task.params.musicAnalyzerRecordId||"").trim();ne.current=!1,J(null),m(""),A(((O=p.task.error)==null?void 0:O.message)||"歌词生成失败"),B&&oe(B,{pendingLyricsGenTaskId:null}).then(i);return}if(p.task.status==="completed"){ne.current=!1,J(null),m(""),M==null||M();return}if(typeof p.task.progress=="number"){const B=p.task.type===q.CHAT?"歌词草稿生成中":"歌词生成中";m(`${B} ${Math.round(p.task.progress)}%`)}}});return()=>f.unsubscribe()},[M,i,y]);const Ce=a.useCallback(async()=>{E&&(await es("text",js(E)),ge.trackUIInteraction({area:"popular_music_tool",action:"analysis_inserted_to_canvas",control:"insert_analysis",source:"music_analyzer_create_page",metadata:{hasSunoTitle:!!E.sunoTitle,tagsCount:E.sunoStyleTags.length}}))},[E]);return e.jsxs("div",{className:"ma-create-page",children:[e.jsxs("div",{className:"ma-mode-toggle",children:[e.jsx("button",{className:`ma-mode-btn ${x==="scratch"?"active":""}`,onClick:()=>I("scratch"),children:"从零创作"}),e.jsx("button",{className:`ma-mode-btn ${x==="reference"?"active":""}`,onClick:()=>I("reference"),children:"参考音频"})]}),e.jsxs("div",{className:"va-page",children:[x==="scratch"?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"ma-card",children:e.jsx(Le,{value:v,onChange:D})}),e.jsxs("div",{className:"ma-card",children:[e.jsxs("div",{className:"ma-card-header",children:[e.jsx("span",{children:"描述你想创作的歌曲"}),e.jsx(zs,{className:"ma-icon-btn",originalPrompt:u,language:"zh",scenarioId:"music.create-song",onApply:P})]}),e.jsx("textarea",{className:"ma-textarea",value:u,onChange:l=>P(l.target.value),rows:6,placeholder:"例如:一首关于夏天海边的轻快流行歌,女声,带有吉他和电子节拍"}),e.jsx($e,{value:T,onChange:F,disabled:!!y,className:"ma-knowledge-context-selector",placement:"up"})]})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"ma-card",children:[e.jsxs("div",{className:"ma-card-header",children:[e.jsx("span",{children:"上传音频"}),g&&e.jsx("span",{className:"ma-muted",children:Fs(g.size)})]}),e.jsx("div",{className:"va-dropzone ma-dropzone",onClick:()=>{var l;return(l=te.current)==null?void 0:l.click()},onDragOver:l=>l.preventDefault(),onDrop:ve,children:g?e.jsxs("div",{className:"ma-audio-preview",children:[e.jsxs("div",{className:"ma-audio-preview__meta",children:[e.jsx("strong",{children:g.name}),e.jsx("button",{className:"va-nav-btn",onClick:l=>{l.stopPropagation(),j(null),A(""),te.current&&(te.current.value="")},children:"清空"})]}),w&&e.jsx("audio",{controls:!0,src:w})]}):e.jsxs("div",{className:"ma-dropzone__placeholder",children:[e.jsx("span",{children:"点击或拖拽上传本地音频"}),e.jsx("small",{children:"支持 mp3、wav、m4a 等常见格式"})]})}),e.jsx("input",{ref:te,type:"file",accept:"audio/*",hidden:!0,onChange:Te})]}),e.jsx("div",{className:"ma-card",children:e.jsx(Le,{value:v,onChange:D})}),e.jsxs("div",{className:"ma-card",children:[e.jsx("div",{className:"ma-card-header",children:e.jsx("span",{children:"分析模型"})}),e.jsx(Ne,{selectedModel:L,selectedSelectionKey:Ie(L,ee),onSelect:N,models:ce,variant:"form",placement:"down",placeholder:"选择 Gemini 分析模型"})]})]}),E&&x==="reference"&&e.jsxs("div",{className:"ma-card",children:[e.jsxs("button",{className:"ma-section-toggle",onClick:()=>Q(l=>!l),children:[e.jsx("span",{children:"分析摘要"}),e.jsx("span",{children:S?"收起":"展开"})]}),S&&e.jsxs("div",{className:"ma-analysis-summary",children:[e.jsx("p",{children:E.summary}),e.jsxs("div",{className:"ma-chip-row",children:[e.jsx("span",{className:"ma-chip",children:E.language||"未知语言"}),e.jsx("span",{className:"ma-chip",children:E.mood||"未知情绪"}),E.genreTags.map(l=>e.jsx("span",{className:"ma-chip ma-chip--accent",children:l},l))]}),e.jsx("div",{className:"ma-tag-row",children:E.structure.map(l=>e.jsx("code",{children:l},l))}),E.titleSuggestions.length>0&&e.jsxs("div",{className:"ma-suggestions",children:["推荐标题:",E.titleSuggestions.join(" / ")]}),(E.sunoTitle||E.sunoStyleTags.length>0||E.sunoLyricsDraft)&&e.jsxs("div",{className:"ma-suno-summary",children:[e.jsx("div",{className:"ma-suno-summary__title",children:"Suno 生成草稿"}),e.jsxs("div",{className:"ma-suno-summary__form",children:[e.jsxs("label",{className:"ma-suno-summary__field",children:[e.jsx("span",{children:"歌曲标题"}),e.jsx("input",{className:"ma-input",value:G,onChange:l=>de(l.target.value),placeholder:"可直接用于 Suno 的标题"})]}),e.jsxs("label",{className:"ma-suno-summary__field",children:[e.jsx("span",{children:"Suno 风格标签"}),e.jsx("input",{className:"ma-input",value:V,onChange:l=>Z(l.target.value),placeholder:"逗号分隔的风格标签"})]}),e.jsxs("label",{className:"ma-suno-summary__field",children:[e.jsx("span",{children:"带 Suno 标签的歌词草稿"}),e.jsx("textarea",{className:"ma-textarea",rows:12,value:re,onChange:l=>me(l.target.value),placeholder:"分析阶段整理出的可用歌词草稿"})]})]})]})]})]}),(ie||k||r)&&e.jsxs("div",{className:"ma-status-stack",children:[ie&&e.jsx("div",{className:"ma-error",children:ie}),k&&e.jsx("div",{className:"ma-progress",children:k}),r&&e.jsx("div",{className:"ma-progress",children:r})]}),e.jsx("div",{className:`va-page-actions ${x==="scratch"?"ma-lyrics-submit-row":""}`,children:x==="scratch"?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"ma-lyrics-model-inline",children:[e.jsx("span",{className:"ma-inline-label",children:"歌词模型"}),e.jsx(Ne,{selectedModel:z,selectedSelectionKey:Ie(z,se),onSelect:t,models:ae,variant:"form",placement:"up",placeholder:"选择歌词模型"})]}),e.jsx("button",{className:"va-btn-primary",onClick:he,disabled:!u.trim()||!!y,children:"生成歌词"})]}):e.jsxs(e.Fragment,{children:[e.jsx("button",{onClick:b,children:"新建"}),e.jsx("button",{onClick:Ce,disabled:!(s!=null&&s.analysis),children:"插入分析"}),e.jsx("button",{className:"va-btn-primary",onClick:ke,disabled:!g||!!d,children:"开始分析"}),e.jsx("button",{onClick:o,disabled:!s,children:"下一步"})]})})]})]})},Ee="music-analyzer:model",Ve="gemini-2.5-pro",Vs=({record:s,onRecordUpdate:n,onRecordsChange:i,onNext:b})=>{var $,z,H,se;const[o,M]=a.useState(()=>Fe(s)),[x,I]=a.useState([]),[u,P]=a.useState(s.lyricsDraft||""),[T,F]=a.useState(s.title||((z=($=s.analysis)==null?void 0:$.titleSuggestions)==null?void 0:z[0])||""),[v,D]=a.useState((s.styleTags||((H=s.analysis)==null?void 0:H.genreTags)||[]).join(", ")),[y,J]=a.useState(()=>U(s.musicBrief)),[r,m]=a.useState(()=>s.pendingRewriteTaskId||null),[g,j]=a.useState(""),[d,h]=a.useState(""),[k,K]=a.useState(()=>s.analysisModel||pe(Ee,Ve).modelId),[S,Q]=a.useState(()=>s.analysisModelRef||pe(Ee,Ve).modelRef),[G,de]=a.useState(!1),V=a.useRef(),Z=a.useRef(!1),re=a.useCallback((c,N)=>{K(c),Q(N||null),Se(Ee,c,N)},[]);a.useEffect(()=>{var c,N,t;M(Fe(s)),P(s.lyricsDraft||""),F(s.title||((N=(c=s.analysis)==null?void 0:c.titleSuggestions)==null?void 0:N[0])||""),D((s.styleTags||((t=s.analysis)==null?void 0:t.genreTags)||[]).join(", ")),J(w=>{const _=U(s.musicBrief);return xe(w,_)?w:_}),m(s.pendingRewriteTaskId||null)},[s]),a.useEffect(()=>(clearTimeout(V.current),V.current=setTimeout(async()=>{const c=v.split(",").map(t=>t.trim()).filter(Boolean),N=await oe(s.id,{rewritePrompt:o,lyricsDraft:u,title:T,styleTags:c,musicBrief:U(y),pendingRewriteTaskId:r});i(N),n({...s,rewritePrompt:o,lyricsDraft:u,title:T,styleTags:c,musicBrief:U(y),pendingRewriteTaskId:r})},400),()=>clearTimeout(V.current)),[u,y,n,i,r,s.id,o,v,T]);const me=je("text"),te=je("audio"),C=a.useMemo(()=>Je(me,te),[me,te]),R=a.useMemo(()=>Qe(k),[k]),Y=a.useMemo(()=>{const c=[{id:Ke,label:"原始版本"}];for(const N of s.lyricsVersions||[])c.push({id:N.id,label:N.label});return c},[s.lyricsVersions]),ne=s.activeVersionId||Ke,ie=Y.length>1,A=String(s.creationPrompt||"").trim(),L=a.useCallback(async c=>{const N=vs(s,c);if(!N)return;const t=await oe(s.id,N);i(t),n({...s,...N}),de(!1)},[n,i,s]),le=a.useCallback(async()=>{if(!(Z.current||r)){Z.current=!0,h(""),j(R?"歌词生成中...":"歌词改写中 0%"),ge.trackUIInteraction({area:"popular_music_tool",action:"lyrics_rewrite_started",control:"rewrite_lyrics",source:"music_analyzer_lyrics_page",metadata:{engine:R?"suno":"text_model",hasRewritePrompt:!!o.trim(),lyricsLength:u.trim().length}});try{let c;if(R){const t=Xe({userPrompt:o,originalPrompt:A,currentLyrics:u,musicBrief:y,mode:"rewrite"});c=X.createTask({prompt:t,model:k,modelRef:S||null,sunoAction:"lyrics",musicAnalyzerAction:"lyrics-gen",musicAnalyzerRecordId:s.id,musicAnalyzerMusicBrief:U(y),knowledgeContextRefs:x,autoInsertToCanvas:!1},q.AUDIO)}else c=X.createTask({prompt:`改写歌词:${s.sourceLabel}`,model:k,modelRef:S||null,musicAnalyzerAction:"rewrite",musicAnalyzerPrompt:Ze({analysis:s.analysis,userPrompt:o,originalPrompt:A,currentLyrics:u,musicBrief:y}),musicAnalyzerRecordId:s.id,musicAnalyzerMusicBrief:U(y),knowledgeContextRefs:x,autoInsertToCanvas:!1},q.CHAT);m(c.id);const N=await oe(s.id,{rewritePrompt:o,musicBrief:U(y),pendingRewriteTaskId:c.id});i(N),n({...s,rewritePrompt:o,musicBrief:U(y),pendingRewriteTaskId:c.id})}catch(c){Z.current=!1,h(c.message||"歌词改写失败"),j("")}}},[A,u,n,i,s,o,k,S,R,x,y,r]);a.useEffect(()=>{if(!r)return;const c=X.getTask(r);typeof(c==null?void 0:c.progress)=="number"&&j(`歌词改写中 ${Math.round(c.progress)}%`);const N=X.observeTaskUpdates().subscribe(t=>{var w;if(t.task.id===r){if(t.task.status==="failed"){Z.current=!1,m(null),j(""),h(((w=t.task.error)==null?void 0:w.message)||"歌词改写失败"),oe(s.id,{pendingRewriteTaskId:null}).then(i);return}if(t.task.status==="completed"){Ue(t.task).then(_=>{_&&(i(_.records),n(_.record),P(_.record.lyricsDraft||""),F(_.record.title||""),D((_.record.styleTags||[]).join(", ")))}).catch(_=>{h(_.message||"改写结果同步失败")}).finally(()=>{Z.current=!1,m(null),j("")});return}typeof t.task.progress=="number"&&j(`歌词改写中 ${Math.round(t.task.progress)}%`)}});return()=>N.unsubscribe()},[n,i,r,s.id]);const ee=a.useCallback(async()=>{const c=await es("text",xs({title:T,styleTags:v.split(",").map(N=>N.trim()).filter(Boolean),lyricsDraft:u}));if(!c.success){h(c.error||"插入失败,请确认画布已打开");return}ge.trackUIInteraction({area:"popular_music_tool",action:"lyrics_inserted_to_canvas",control:"insert_lyrics",source:"music_analyzer_lyrics_page",metadata:{lyricsLength:u.trim().length,tagsCount:v.split(",").filter(N=>N.trim()).length}})},[u,v,T]);return e.jsxs("div",{className:"va-page",children:[e.jsx("div",{className:"ma-card",children:e.jsx(Le,{value:y,onChange:J})}),e.jsxs("div",{className:"ma-card",children:[e.jsxs("div",{className:"ma-card-header",children:[e.jsx("span",{children:"改写要求"}),ie&&e.jsxs("div",{className:"ma-version-dropdown",children:[e.jsxs("button",{className:"ma-version-btn",onClick:()=>de(c=>!c),children:[((se=Y.find(c=>c.id===ne))==null?void 0:se.label)||"原始版本",e.jsx("span",{className:"ma-version-arrow",children:G?"▲":"▼"})]}),G&&e.jsx("div",{className:"ma-version-menu",children:Y.map(c=>e.jsx("button",{className:`ma-version-menu-item ${c.id===ne?"active":""}`,onClick:()=>L(c.id),children:c.label},c.id))})]})]}),e.jsx("textarea",{className:"ma-textarea",value:o,onChange:c=>M(c.target.value),rows:4,placeholder:"告诉 AI 要保留什么、强化什么、改成什么风格"}),e.jsx($e,{value:x,onChange:I,disabled:!!r,className:"ma-knowledge-context-selector",placement:"up"}),e.jsxs("div",{className:"ma-lyrics-submit-row ma-lyrics-submit-row--rewrite",children:[e.jsxs("div",{className:"ma-lyrics-model-inline",children:[e.jsx("span",{className:"ma-inline-label",children:"歌词模型"}),e.jsx(Ne,{selectedModel:k,selectedSelectionKey:Ie(k,S),onSelect:re,models:C,variant:"form",placement:"up",placeholder:"选择歌词模型"})]}),e.jsx("button",{className:"va-btn-primary ma-rewrite-submit",onClick:le,disabled:!!r,children:r?g||(R?"歌词生成中...":"歌词改写中..."):R?"Suno 生成歌词":"AI 改写"})]}),g&&e.jsx("div",{className:"ma-progress",children:g})]}),e.jsxs("div",{className:"ma-card",children:[e.jsx("div",{className:"ma-card-header",children:e.jsx("span",{children:"歌曲标题"})}),e.jsx("input",{className:"ma-input",value:T,onChange:c=>F(c.target.value),placeholder:"歌曲标题"})]}),e.jsxs("div",{className:"ma-card",children:[e.jsx("div",{className:"ma-card-header",children:e.jsx("span",{children:"Suno 风格标签"})}),e.jsx("input",{className:"ma-input",value:v,onChange:c=>D(c.target.value),placeholder:"例如 cinematic pop, female vocal, uplifting"})]}),e.jsxs("div",{className:"ma-card",children:[e.jsx("div",{className:"ma-card-header",children:e.jsx("span",{children:"歌词草稿"})}),e.jsx("textarea",{className:"ma-textarea",value:u,onChange:c=>P(c.target.value),rows:14,placeholder:"AI 改写结果会出现在这里,可继续手改"})]}),d&&e.jsx("div",{className:"ma-error",children:d}),e.jsxs("div",{className:"va-page-actions",children:[e.jsx("button",{onClick:ee,disabled:!u.trim(),children:"插入歌词"}),e.jsx("button",{className:"va-btn-primary",onClick:b,disabled:!u.trim(),children:"下一步"})]})]})},ze="music-analyzer:audio-model",Be=[{id:"generate",label:"新生成",hint:"从零生成完整音乐"},{id:"continue",label:"续写",hint:"从已有片段继续创作"},{id:"infill",label:"Infill",hint:"局部重绘指定时间窗口"}];function fe(s){const n=s.trim();if(!n)return null;const i=Number(n);return Number.isFinite(i)?i:null}function ye(s){return typeof s=="number"&&Number.isFinite(s)?String(s):""}function Pe(s){return s.split(",").map(n=>n.trim()).filter(Boolean)}function Ye(s){var n;return((n=Be.find(i=>i.id===s))==null?void 0:n.label)||"新生成"}function Ys(s){return typeof s.duration=="number"&&Number.isFinite(s.duration)?String(Math.max(0,Math.round(s.duration))):""}function We(s){const n=s.title||"未命名片段",i=s.duration!=null?` · ${ss(s.duration)}`:"",b=s.clipId?` · ${s.clipId.slice(0,8)}`:"";return`${n}${i}${b}`}const Ws=({record:s,onRecordUpdate:n,onRecordsChange:i,onRestart:b})=>{var N;const[o,M]=a.useState(s.title||""),[x,I]=a.useState((s.styleTags||[]).join(", ")),[u,P]=a.useState(s.lyricsDraft||""),[T,F]=a.useState([]),[v,D]=a.useState("chirp-v5-5"),[y,J]=a.useState(1),[r,m]=a.useState(()=>pe(ze,be()).modelId),[g,j]=a.useState(()=>pe(ze,be()).modelRef),[d,h]=a.useState(s.musicEditAction||"generate"),[k,K]=a.useState(s.continueFromClipId||""),[S,Q]=a.useState(ye(s.continueAt)),[G,de]=a.useState(ye(s.infillStartS)),[V,Z]=a.useState(ye(s.infillEndS)),[re,me]=a.useState(!1),[te,C]=a.useState(""),R=a.useRef(),Y=a.useRef(!1),ne=a.useCallback((t,w)=>{m(t),j(w||null),Se(ze,t,w)},[]);a.useEffect(()=>{M(s.title||""),I((s.styleTags||[]).join(", ")),P(s.lyricsDraft||""),h(s.musicEditAction||"generate"),K(s.continueFromClipId||""),Q(ye(s.continueAt)),de(ye(s.infillStartS)),Z(ye(s.infillEndS))},[s]),a.useEffect(()=>(clearTimeout(R.current),R.current=setTimeout(async()=>{const t=Pe(x),w=fe(S),_=fe(G),ce=fe(V),W={title:o,styleTags:t,lyricsDraft:u,musicEditAction:d,continueFromClipId:k||null,continueAt:w,infillStartS:_,infillEndS:ce},ae=await oe(s.id,W);i(ae),n({...s,...W})},400),()=>clearTimeout(R.current)),[d,S,k,V,G,n,i,u,s.id,x,o]);const ie=je("audio"),A=a.useMemo(()=>ie.filter(t=>{const w=Array.isArray(t.tags)?t.tags.join(" "):"";return/suno/i.test(t.id)||/suno/i.test(w)}),[ie]),L=a.useMemo(()=>Ss(r).find(t=>t.id==="mv"),[r]);a.useEffect(()=>{L!=null&&L.defaultValue&&D(t=>t||String(L.defaultValue))},[L==null?void 0:L.defaultValue]);const le=s.generatedClips||[],ee=a.useMemo(()=>le.filter(t=>!!String(t.clipId||"").trim()),[le]),$=a.useMemo(()=>ee.find(t=>t.clipId===k)||null,[k,ee]),z=d!=="generate",H=d==="infill",se=a.useCallback((t,w)=>{if(!t.clipId){C("该片段尚未拿到真实 clip_id,暂时不能继续创作");return}h(w),K(t.clipId),Q(_=>_||Ys(t)),C(w==="continue"?`已带入片段「${t.title||t.clipId.slice(0,8)}」用于续写`:`已带入片段「${t.title||t.clipId.slice(0,8)}」用于 Infill`)},[]),c=a.useCallback(async()=>{const t=u.trim(),w=o.trim(),_=x.trim(),ce=fe(S),W=fe(G),ae=fe(V);if(!t){C("请先准备歌词或生成提示词");return}if(z&&!k){C("请先选择要续写的片段");return}if(z&&!($!=null&&$.taskId)){C("当前片段缺少来源 task_id,请先重新同步或重新生成一次片段");return}if(z&&ce==null){C("请填写续写起点秒数");return}if(ce!=null&&ce<0){C("续写起点秒数不能小于 0");return}if(H&&W==null){C("请填写 Infill 开始秒数");return}if(H&&ae==null){C("请填写 Infill 结束秒数");return}if(W!=null&&W<0){C("Infill 开始秒数不能小于 0");return}if(ae!=null&&ae<0){C("Infill 结束秒数不能小于 0");return}if(H&&W!=null&&ae!=null&&W>=ae){C("Infill 开始秒数必须小于结束秒数");return}if(!Y.current){Y.current=!0,ge.trackUIInteraction({area:"popular_music_tool",action:"music_generation_started",control:"generate_music",source:"music_analyzer_generate_page",metadata:{editAction:d,batchCount:y,promptLength:t.length,hasTitle:!!w,tagsCount:Pe(_).length,hasMv:!!v,hasModelRef:!!g}}),me(!0),C("");try{const E=[],Te=d==="generate"?"gen":d;for(let he=0;he<y;he+=1){const Ce=X.createTask({prompt:t,model:r,modelRef:g,sunoAction:"music",title:w,tags:_,mv:v,continueClipId:z?k:void 0,continueTaskId:z?$==null?void 0:$.taskId:void 0,continueAt:z?ce??void 0:void 0,infillStartS:H?W??void 0:void 0,infillEndS:H?ae??void 0:void 0,knowledgeContextRefs:T,batchId:`ma_${s.id}_${Te}_${he}`,batchIndex:he,batchTotal:y,autoInsertToCanvas:!0},q.AUDIO);E.push(Ce.id)}const ve={generateTaskIds:[...s.generateTaskIds||[],...E],title:w,styleTags:Pe(_),lyricsDraft:t,musicEditAction:d,continueFromClipId:k||null,continueAt:ce,infillStartS:W,infillEndS:ae},ke=await oe(s.id,ve);i(ke),n({...s,...ve}),C(`已提交 ${y} 次${Ye(d)}任务到 Suno 队列`)}catch(E){C(E.message||"提交生成任务失败")}finally{me(!1),Y.current=!1}}},[d,y,S,k,V,G,T,v,n,i,u,s,z,H,$==null?void 0:$.taskId,r,g,x,o]);return e.jsxs("div",{className:"va-page",children:[e.jsxs("div",{className:"ma-card",children:[e.jsxs("div",{className:"ma-card-header",children:[e.jsx("span",{children:"创作动作"}),e.jsx("span",{className:"ma-muted",children:(N=Be.find(t=>t.id===d))==null?void 0:N.hint})]}),e.jsx("div",{className:"ma-action-toggle",children:Be.map(t=>e.jsx("button",{className:`ma-action-btn ${d===t.id?"active":""}`,onClick:()=>h(t.id),children:t.label},t.id))})]}),e.jsxs("div",{className:"ma-card",children:[e.jsx("div",{className:"ma-card-header",children:e.jsx("span",{children:"Suno 模型"})}),e.jsx(Ne,{selectedModel:r,selectedSelectionKey:Ie(r,g),onSelect:ne,models:A.length>0?A:ie,variant:"form",placement:"down",placeholder:"选择音频生成模型"})]}),(L==null?void 0:L.options)&&L.options.length>0&&e.jsxs("div",{className:"ma-card",children:[e.jsx("div",{className:"ma-card-header",children:e.jsx("span",{children:"Suno 版本"})}),e.jsx("select",{className:"ma-select",value:v,onChange:t=>D(t.target.value),children:L.options.map(t=>e.jsx("option",{value:String(t.value),children:t.label},t.value))})]}),z&&e.jsxs("div",{className:"ma-card",children:[e.jsxs("div",{className:"ma-card-header",children:[e.jsx("span",{children:"目标片段"}),e.jsx("span",{className:"ma-muted",children:"自动使用轮询得到的真实 clip_id"})]}),ee.length>0?e.jsxs("select",{className:"ma-select",value:k,onChange:t=>K(t.target.value),children:[e.jsx("option",{value:"",children:"请选择已生成片段"}),ee.map(t=>e.jsx("option",{value:t.clipId,children:We(t)},t.clipId))]}):e.jsx("div",{className:"ma-hint",children:"先生成至少一个片段,才能使用续写或 Infill。"}),$&&e.jsxs("div",{className:"ma-hint",children:["当前片段:",We($)]})]}),z&&e.jsxs("div",{className:"ma-card",children:[e.jsx("div",{className:"ma-card-header",children:e.jsx("span",{children:"编辑参数"})}),e.jsxs("div",{className:`ma-fields-grid ${H?"ma-fields-grid--triple":""}`,children:[e.jsxs("label",{className:"ma-field",children:[e.jsx("span",{children:"续写起点秒数"}),e.jsx("input",{className:"ma-input",type:"number",min:"0",step:"0.1",value:S,onChange:t=>Q(t.target.value),placeholder:"例如 30"})]}),H&&e.jsxs("label",{className:"ma-field",children:[e.jsx("span",{children:"Infill 开始秒数"}),e.jsx("input",{className:"ma-input",type:"number",min:"0",step:"0.1",value:G,onChange:t=>de(t.target.value),placeholder:"例如 8"})]}),H&&e.jsxs("label",{className:"ma-field",children:[e.jsx("span",{children:"Infill 结束秒数"}),e.jsx("input",{className:"ma-input",type:"number",min:"0",step:"0.1",value:V,onChange:t=>Z(t.target.value),placeholder:"例如 16"})]})]})]}),e.jsxs("div",{className:"ma-card",children:[e.jsx("div",{className:"ma-card-header",children:e.jsx("span",{children:"歌曲标题"})}),e.jsx("input",{className:"ma-input",value:o,onChange:t=>M(t.target.value),placeholder:"歌曲标题"})]}),e.jsxs("div",{className:"ma-card",children:[e.jsx("div",{className:"ma-card-header",children:e.jsx("span",{children:"风格标签"})}),e.jsx("input",{className:"ma-input",value:x,onChange:t=>I(t.target.value),placeholder:"逗号分隔,例如 edm, intense, female vocal"})]}),e.jsxs("div",{className:"ma-card",children:[e.jsx("div",{className:"ma-card-header",children:e.jsx("span",{children:"提交给 Suno 的歌词/提示词"})}),e.jsx("textarea",{className:"ma-textarea",rows:10,value:u,onChange:t=>P(t.target.value),placeholder:"这里的内容会直接作为 prompt 提交给 Suno"}),e.jsx($e,{value:T,onChange:F,disabled:re,className:"ma-knowledge-context-selector",placement:"up"})]}),e.jsxs("div",{className:"ma-card",children:[e.jsxs("div",{className:"ma-card-header",children:[e.jsx("span",{children:"调用次数"}),e.jsx("span",{className:"ma-muted",children:"每次返回 2 首"})]}),e.jsx("div",{className:"ma-batch-selector",children:[1,2,3,4].map(t=>e.jsxs("button",{className:`ma-batch-btn ${y===t?"active":""}`,onClick:()=>J(t),children:[t," 次"]},t))})]}),le.length>0&&e.jsxs("div",{className:"ma-card",children:[e.jsxs("div",{className:"ma-card-header",children:[e.jsxs("span",{children:["已生成片段 (",le.length,")"]}),e.jsx("span",{className:"ma-muted",children:"可直接带入续写或 Infill"})]}),e.jsx("div",{className:"ma-clips-gallery",children:le.map(t=>e.jsx(qs,{clip:t,selected:z&&!!t.clipId&&k===t.clipId,onContinue:()=>se(t,"continue"),onInfill:()=>se(t,"infill")},`${t.taskId}:${t.clipId||t.audioUrl}`))})]}),te&&e.jsx("div",{className:"ma-progress",children:te}),e.jsxs("div",{className:"va-page-actions",children:[e.jsx("button",{onClick:b,children:"重新开始"}),e.jsxs("button",{className:"va-btn-primary",onClick:c,disabled:re,children:[Ye(d)," ",y," 次"]})]})]})},qs=({clip:s,selected:n,onContinue:i,onInfill:b})=>{const o=!!String(s.clipId||"").trim();return e.jsxs("div",{className:`ma-clip-row ${n?"is-selected":""}`,children:[s.imageUrl?e.jsx("img",{className:"ma-clip-thumb",src:s.imageUrl,alt:"",referrerPolicy:"no-referrer"}):e.jsx("div",{className:"ma-clip-thumb ma-clip-thumb--placeholder",children:"♪"}),e.jsxs("div",{className:"ma-clip-meta",children:[e.jsx("span",{className:"ma-clip-title",children:s.title||"未命名"}),s.duration!=null&&e.jsx("span",{className:"ma-clip-duration",children:ss(s.duration)})]}),e.jsx("audio",{controls:!0,src:s.audioUrl,className:"ma-clip-player",preload:"metadata"}),e.jsxs("div",{className:"ma-clip-actions",children:[e.jsx("button",{className:"ma-clip-action-btn",onClick:i,disabled:!o,children:"续写"}),e.jsx("button",{className:"ma-clip-action-btn",onClick:b,disabled:!o,children:"Infill"})]})]})};function ss(s){const n=Math.floor(s/60),i=Math.round(s%60);return`${n}:${String(i).padStart(2,"0")}`}function Js(s){switch(s){case ue.COMPLETED:return"已完成";case ue.PROCESSING:return"进行中";case ue.PENDING:return"等待中";case ue.FAILED:return"失败";default:return""}}function Qs(s){switch(s){case ue.COMPLETED:return"completed";case ue.PROCESSING:return"processing";case ue.PENDING:return"pending";case ue.FAILED:return"failed";default:return"pending"}}function Xs(s){const n=new Date(s);return`${n.getMonth()+1}/${n.getDate()} ${String(n.getHours()).padStart(2,"0")}:${String(n.getMinutes()).padStart(2,"0")}`}function Zs(s){var b,o,M,x;const n=s.params.musicAnalyzerAction;if(n==="rewrite"){const I=(b=s.result)!=null&&b.analysisData&&typeof s.result.analysisData=="object"?s.result.analysisData:null,u=typeof(I==null?void 0:I.title)=="string"&&I.title.trim()?I.title.trim():"";if(u)return u}if(n==="lyrics-gen"){const I=(o=s.result)!=null&&o.analysisData&&typeof s.result.analysisData=="object"?s.result.analysisData:null,u=typeof(I==null?void 0:I.title)=="string"&&I.title.trim()?I.title.trim():"";if(u)return u;const P=typeof((M=s.result)==null?void 0:M.lyricsTitle)=="string"&&s.result.lyricsTitle.trim()?s.result.lyricsTitle.trim():typeof((x=s.result)==null?void 0:x.title)=="string"&&s.result.title.trim()?s.result.title.trim():"";if(P)return P}const i=String(s.params.prompt||"");return i.length>40?`${i.slice(0,40)}…`:i}const ea=({records:s,onSelect:n,onRecordsChange:i,showStarredOnly:b=!1,onSelectLyrics:o})=>{const M=b?s.filter(r=>r.starred):s,[x,I]=a.useState(null),[u,P]=a.useState(null),{tasks:T}=Ns(),F=a.useMemo(()=>{const r=new Map,m=new Set(s.map(j=>j.id)),g=()=>({rewrite:[],lyricsGen:[],audio:[]});for(const j of T){const d=j.params;if(j.type===q.CHAT&&d.musicAnalyzerAction==="rewrite"&&typeof d.musicAnalyzerRecordId=="string"&&m.has(d.musicAnalyzerRecordId)){const h=d.musicAnalyzerRecordId;Me(r,h,"rewrite",j,g);continue}if((j.type===q.AUDIO||j.type===q.CHAT)&&d.musicAnalyzerAction==="lyrics-gen"&&typeof d.musicAnalyzerRecordId=="string"&&m.has(d.musicAnalyzerRecordId)){const h=d.musicAnalyzerRecordId;Me(r,h,"lyricsGen",j,g);continue}if(j.type===q.AUDIO&&typeof d.batchId=="string"&&d.batchId.startsWith("ma_")){const h=bs(d.batchId,"ma_",m);h&&Me(r,h,"audio",j,g)}}return Is(r)},[T,s]),v=a.useCallback(async(r,m)=>{r.stopPropagation();const g=await oe(m.id,{starred:!m.starred});i(g)},[i]),D=a.useCallback((r,m)=>{r.stopPropagation(),P(m)},[]),y=a.useCallback(async()=>{if(!u)return;const r=await Ts(u);i(r),P(null)},[i,u]),J=a.useCallback((r,m)=>{r.stopPropagation(),I(g=>g===m?null:m)},[]);return M.length===0?e.jsx("div",{className:"va-page va-empty",children:e.jsx("span",{children:b?"暂无收藏":"暂无分析记录"})}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"va-page",children:e.jsx("div",{className:"va-history-list",children:M.map(r=>{var d;const m=F.get(r.id),g=!!(m&&m.rewrite.length+m.lyricsGen.length+m.audio.length>0),j=x===r.id;return e.jsxs("div",{className:"va-history-item",onClick:()=>n(r),children:[e.jsxs("div",{className:"va-history-header",children:[e.jsxs("span",{className:"va-history-source",children:[e.jsx("span",{role:"img","aria-label":"audio",children:r.source==="scratch"?"✨":"🎵"})," ",r.sourceLabel]}),e.jsx("button",{className:`va-star-btn ${r.starred?"starred":""}`,onClick:h=>v(h,r),children:r.starred?"★":"☆"})]}),e.jsxs("div",{className:"va-history-meta",children:[g&&e.jsxs("button",{className:`va-history-expand-btn ${j?"expanded":""}`,onClick:h=>J(h,r.id),children:[e.jsx(ks,{size:12}),e.jsx("span",{children:j?"收起":"关联任务"})]}),e.jsx("span",{children:new Date(r.createdAt).toLocaleString()}),e.jsx("span",{children:r.analysisModel||r.source}),e.jsx("button",{className:"va-history-delete",onClick:h=>D(h,r.id),children:"删除"})]}),e.jsx("div",{className:"ma-history-title",children:r.title||"未命名歌曲"}),e.jsx("div",{className:"ma-history-summary",children:((d=r.analysis)==null?void 0:d.summary)||r.creationPrompt||"暂无摘要"}),r.generatedClips&&r.generatedClips.length>0&&e.jsxs("div",{className:"ma-history-clips-count",children:[r.generatedClips.length," 首已生成"]}),j&&m&&e.jsxs("div",{className:"va-history-related",onClick:h=>h.stopPropagation(),children:[m.lyricsGen.length>0&&e.jsxs("div",{children:[e.jsxs("div",{className:"va-history-related-group-title",children:["歌词生成 (",m.lyricsGen.length,")"]}),m.lyricsGen.map(h=>e.jsx(De,{task:h,onClick:()=>o==null?void 0:o(r)},h.id))]}),m.rewrite.length>0&&e.jsxs("div",{children:[e.jsxs("div",{className:"va-history-related-group-title",children:["歌词改写 (",m.rewrite.length,")"]}),m.rewrite.map(h=>e.jsx(De,{task:h,onClick:()=>o==null?void 0:o(r)},h.id))]}),m.audio.length>0&&e.jsxs("div",{children:[e.jsxs("div",{className:"va-history-related-group-title",children:["音乐生成 (",m.audio.length,")"]}),m.audio.map(h=>e.jsx(De,{task:h},h.id))]})]})]},r.id)})})}),e.jsx(Cs,{open:u!==null,title:"确认删除",description:"确定要删除这条音乐分析记录吗?此操作不可撤销。",confirmText:"删除",cancelText:"取消",danger:!0,onOpenChange:r=>{r||P(null)},onConfirm:y})]})},De=({task:s,onClick:n})=>{var o;const i=s.status===ue.COMPLETED,b=i&&((o=s.result)==null?void 0:o.url)||"";return e.jsx(Ms,{content:Js(s.status),showArrow:!1,children:e.jsxs("div",{className:"va-history-related-task",onClick:n,style:n?{cursor:"pointer"}:void 0,children:[e.jsx("span",{className:`va-history-related-task-status ${Qs(s.status)}`}),e.jsx("span",{className:"va-history-related-task-prompt",children:Zs(s)}),e.jsx("span",{className:"va-history-related-task-time",children:Xs(s.createdAt)}),i&&b&&s.type===q.AUDIO&&e.jsx("audio",{controls:!0,src:b,preload:"metadata",className:"ma-related-task-audio",onClick:M=>M.stopPropagation()})]})})},sa=[{id:"create",label:"创作"},{id:"lyrics",label:"歌词"},{id:"generate",label:"生成"}],ca=()=>{const{records:s,setRecords:n,currentRecord:i,showStarred:b,setShowStarred:o,starredCount:M,selectRecord:x,updateCurrentRecord:I,restart:u,applySyncedRecord:P}=As({loadRecords:Es,logPrefix:"[MusicAnalyzer]"}),{page:T,setPage:F,navigateToStep:v,goToDefaultPage:D,openHistory:y,openStarred:J,toggleStarred:r}=_s({initialPage:"create",defaultPage:"create",historyPage:"history",setShowStarred:o}),m=a.useCallback(async S=>{if(Ps(S)){const G=await Ue(S);return G?{...G,selectWhenNoCurrent:!0}:null}const Q=Ds(S);return Q?Ls(S,Q):null},[]);Os({syncTask:m,applySyncedRecord:P,logPrefix:"[MusicAnalyzer]"});const g=a.useMemo(()=>sa.map((S,Q)=>({...S,disabled:!i&&Q>0})),[i]),j=a.useCallback(S=>{I(S)},[I]),d=a.useCallback(S=>{x(S),D()},[D,x]),h=a.useCallback(S=>{x(S),F("lyrics")},[x,F]),k=a.useCallback(S=>{I(S)},[I]),K=a.useCallback(()=>{u(),D()},[D,u]);return e.jsxs("div",{className:"video-analyzer music-analyzer",children:[e.jsx(ws,{isHistoryPage:T==="history",showStarred:b,recordsCount:s.length,starredCount:M,currentStep:T,steps:g,onStepNavigate:v,onBackFromHistory:D,onOpenHistory:y,onOpenStarred:J,onToggleStarred:r}),T==="create"&&e.jsx(Hs,{existingRecord:i,onComplete:j,onRecordsChange:n,onCreateNew:K,onNext:i?()=>F("lyrics"):void 0,onLyricsReady:()=>F("lyrics")}),T==="lyrics"&&i&&e.jsx(Vs,{record:i,onRecordUpdate:k,onRecordsChange:n,onNext:()=>F("generate")}),T==="generate"&&i&&e.jsx(Ws,{record:i,onRecordUpdate:k,onRecordsChange:n,onRestart:K}),T==="history"&&e.jsx(ea,{records:s,onSelect:d,onRecordsChange:n,showStarredOnly:b,onSelectLyrics:h})]})};export{ca as default};
@@ -0,0 +1 @@
1
+ @charset "UTF-8";.parameters-dropdown{position:relative;display:inline-flex;flex:0 1 auto;min-width:0}.parameters-dropdown__trigger{display:flex;align-items:center;gap:2px;padding:4px 8px;background:transparent;border:none;border-radius:4px;cursor:pointer;transition:all .15s ease;color:#1f2937;font-size:13px;font-weight:500;white-space:nowrap;max-width:clamp(72px,18vw,160px);min-width:0}.parameters-dropdown__trigger:hover:not(:disabled){background:#f59e0b1a}.parameters-dropdown__trigger--open{background:#f59e0b26}.parameters-dropdown__trigger:disabled{opacity:.5;cursor:not-allowed}.parameters-dropdown__label{color:#6b7280;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.parameters-dropdown__icon{flex-shrink:0;color:#9ca3af;transition:transform .2s ease}.parameters-dropdown__icon--open{transform:rotate(180deg)}.parameters-dropdown__minus-icon{flex-shrink:0;color:#f59e0b}.parameters-dropdown__menu{background:var(--island-bg-color, #ffffff);border:1px solid var(--color-border, #e5e5e5);border-radius:12px;box-shadow:0 4px 20px #0000001f;min-width:200px;max-width:320px;overflow:hidden;animation:paramDropdownFadeIn .15s ease-out}.parameters-dropdown__menu--flat{padding-bottom:8px}@keyframes paramDropdownFadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.parameters-dropdown__header{display:flex;align-items:center;gap:8px;padding:10px 12px;background:var(--color-surface, #f9f9f9);border-bottom:1px solid var(--color-border, #e5e5e5);font-size:12px;font-weight:600;color:var(--color-text-secondary, #666)}.parameters-dropdown__sections{padding:4px 8px;max-height:360px;overflow-y:auto}.parameters-dropdown__section{padding:8px 0}.parameters-dropdown__section:not(:last-child){border-bottom:1px solid var(--color-border, #eee)}.parameters-dropdown__section--highlighted{background:#f59e0b0d;border-radius:6px}.parameters-dropdown__section-title{font-size:11px;font-weight:600;color:var(--color-text-tertiary, #888);padding:0 4px 6px;text-transform:uppercase;letter-spacing:.5px}.parameters-dropdown__options{display:flex;flex-wrap:wrap;gap:6px;padding:0 4px}.parameters-dropdown__option{display:inline-flex;align-items:center;gap:4px;padding:6px 10px;background:var(--color-surface, #f5f5f5);border:1px solid transparent;border-radius:6px;cursor:pointer;font-size:12px;color:var(--color-text, #333);transition:all .15s ease;white-space:nowrap}.parameters-dropdown__option:hover{background:#f59e0b1a;border-color:#f59e0b4d}.parameters-dropdown__option--selected{background:#f59e0b26;border-color:#f59e0b;color:#d97706;font-weight:600}.parameters-dropdown__option--highlighted{background:#f59e0b1a;border-color:#f59e0b80;box-shadow:0 0 0 2px #f59e0b33}.parameters-dropdown__option--selected.parameters-dropdown__option--highlighted{box-shadow:0 0 0 2px #f59e0b4d}.parameters-dropdown__option-label{line-height:1.2}.parameters-dropdown__option-check{color:#f59e0b;flex-shrink:0}.parameters-dropdown__field{padding:0 4px}.parameters-dropdown__field--with-action{display:flex;align-items:center;gap:6px}.parameters-dropdown__field-input{width:100%;height:32px;padding:0 10px;border:1px solid var(--color-border, #ddd);border-radius:8px;background:var(--color-surface, #fff);color:var(--color-text, #333);font-size:12px;outline:none;transition:border-color .15s ease,box-shadow .15s ease}.parameters-dropdown__field-input:focus{border-color:#f59e0bcc;box-shadow:0 0 0 3px #f59e0b24}.parameters-dropdown__field-input::-moz-placeholder{color:var(--color-text-tertiary, #999)}.parameters-dropdown__field-input::placeholder{color:var(--color-text-tertiary, #999)}.parameters-dropdown__field--with-action .parameters-dropdown__field-input{flex:1 1 auto;min-width:0}.parameters-dropdown__field-action{width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;flex:0 0 32px;border:1px solid var(--color-border, #ddd);border-radius:8px;background:var(--color-surface, #fff);color:#6b7280;cursor:pointer;transition:border-color .15s ease,color .15s ease,background-color .15s ease}.parameters-dropdown__field-action:hover{border-color:#f59e0bcc;background:#f59e0b1a;color:#d97706}:root[data-theme=dark] .parameters-dropdown__trigger{color:var(--color-gray-20, #ccc)}:root[data-theme=dark] .parameters-dropdown__trigger:hover{background:#f59e0b26}:root[data-theme=dark] .parameters-dropdown__trigger--open{background:#f59e0b33}:root[data-theme=dark] .parameters-dropdown__label{color:var(--color-gray-30, #bbb)}:root[data-theme=dark] .parameters-dropdown__minus-icon{color:#f59e0b}:root[data-theme=dark] .parameters-dropdown__menu{background:var(--color-surface-high, #2a2a2a);border-color:var(--color-border, #444);box-shadow:0 4px 20px #0000004d}:root[data-theme=dark] .parameters-dropdown__header{background:var(--color-surface-mid, #333);border-bottom-color:var(--color-border, #444);color:var(--color-gray-50, #999)}:root[data-theme=dark] .parameters-dropdown__section:not(:last-child){border-bottom-color:var(--color-border, #444)}:root[data-theme=dark] .parameters-dropdown__section--highlighted{background:#f59e0b1a}:root[data-theme=dark] .parameters-dropdown__section-title{color:var(--color-gray-50, #888)}:root[data-theme=dark] .parameters-dropdown__option{background:var(--color-surface-mid, #333);color:var(--color-gray-20, #ccc)}:root[data-theme=dark] .parameters-dropdown__option:hover{background:#f59e0b26;border-color:#f59e0b66}:root[data-theme=dark] .parameters-dropdown__option--selected{background:#f59e0b33;border-color:#f59e0b;color:#f59e0b}:root[data-theme=dark] .parameters-dropdown__option--highlighted{background:#f59e0b26;border-color:#f59e0b99;box-shadow:0 0 0 2px #f59e0b40}:root[data-theme=dark] .parameters-dropdown__option--selected:root[data-theme=dark] .parameters-dropdown__option--highlighted{box-shadow:0 0 0 2px #f59e0b59}:root[data-theme=dark] .parameters-dropdown__field-input{background:var(--color-surface-mid, #333);border-color:var(--color-border, #444);color:var(--color-gray-20, #ccc)}:root[data-theme=dark] .parameters-dropdown__field-input::-moz-placeholder{color:var(--color-gray-50, #888)}:root[data-theme=dark] .parameters-dropdown__field-input::placeholder{color:var(--color-gray-50, #888)}:root[data-theme=dark] .parameters-dropdown__field-action{background:var(--color-surface-mid, #333);border-color:var(--color-border, #444);color:var(--color-gray-30, #bbb)}:root[data-theme=dark] .parameters-dropdown__field-action:hover{border-color:#f59e0bcc;background:#f59e0b26;color:#f59e0b}
@@ -1 +1 @@
1
- import{iR as K,r as c,iV as I,j as s,iJ as F,_ as P,E as S,aK as U,a0 as J,cl as W,kR as X,v as Z,kS as q}from"./startup-app-eD_rQhSh.js";function B(n,l,p){return n==="size"?p.split("(")[0].trim():n==="duration"?`${l}s`:n==="klingAction2"?l==="image2video"?"图生":"文生":n==="mode"?l:p}function z(n){return n.valueType==="number"&&n.id.toLowerCase().includes("seed")}function G(n){const l=Number.isFinite(n.min)?n.min:0,p=Number.isFinite(n.max)?n.max:2147483647,x=Math.min(l,p),h=Math.max(l,p);if(n.integer!==!1)return String(Math.floor(Math.random()*(h-x+1))+x);const g=Number.isFinite(n.step)&&n.step?n.step:1,E=Math.floor((h-x)/g);return String(x+Math.floor(Math.random()*(E+1))*g)}const Y=({selectedParams:n,onParamChange:l,compatibleParams:p,modelId:x,language:h="zh",disabled:g=!1,isOpen:E,onOpenChange:O,excludeParamIds:N,placement:C="auto"})=>{const{value:f,setValue:D}=K({controlledValue:E,defaultValue:!1,onChange:O}),[T,M]=c.useState(0),[y,b]=c.useState(0),a=c.useMemo(()=>{const t=p??I(x);return N&&N.length>0?t.filter(o=>!N.includes(o.id)):t},[p,x,N]);c.useEffect(()=>{var t;if(f&&a.length>0){M(0);const o=a[0],d=n[o.id],u=((t=o.options)==null?void 0:t.findIndex(e=>e.value===d))??0;b(u>=0?u:0)}},[f,a,n]);const A=c.useMemo(()=>{if(a.length===0)return h==="zh"?"参数":"Params";const t=[];return a.forEach(o=>{var u;const d=n[o.id];if(d)if(o.valueType==="enum"){const e=(u=o.options)==null?void 0:u.find(r=>r.value===d);e&&t.push(B(o.id,d,e.label))}else{const e=d.length>10?`${d.slice(0,10)}…`:d;t.push(`${o.shortLabel||o.label}:${e}`)}}),t.length===0?h==="zh"?"配置参数":"Settings":t.join(", ")},[a,n,h]),V=c.useCallback(t=>{t.preventDefault(),!g&&D(!f)},[g,f,D]),$=c.useCallback(t=>{var u,e;if(t==="Escape")return D(!1),!0;const o=a[T],d=((u=o==null?void 0:o.options)==null?void 0:u.length)??0;if(t==="ArrowDown")return M(r=>{var w;const m=r<a.length-1?r+1:0,_=a[m],v=n[_.id],i=((w=_.options)==null?void 0:w.findIndex(j=>j.value===v))??0;return b(i>=0?i:0),m}),!0;if(t==="ArrowUp")return M(r=>{var w;const m=r>0?r-1:a.length-1,_=a[m],v=n[_.id],i=((w=_.options)==null?void 0:w.findIndex(j=>j.value===v))??0;return b(i>=0?i:0),m}),!0;if(t==="ArrowRight")return b(r=>r<d-1?r+1:0),!0;if(t==="ArrowLeft")return b(r=>r>0?r-1:d-1),!0;if(t==="Enter"||t===" "||t==="Tab"){const r=(e=o==null?void 0:o.options)==null?void 0:e[y];return r&&l(o.id,r.value),!0}return!1},[a,T,y,n,l]),R=c.useCallback((t,o)=>{l(t,o)},[l]),k=c.useCallback((t,o)=>{l(t,o,{keepOpen:!0})},[l]),H=c.useCallback(t=>{l(t.id,G(t),{keepOpen:!0})},[l]);return a.length===0?null:s.jsx(F,{isOpen:f,setIsOpen:D,disabled:g,openKeys:["Enter"," ","ArrowDown","ArrowUp"],onOpenKey:$,placement:C,minMenuHeight:240,maxMenuHeight:420,children:({containerRef:t,menuRef:o,menuStyle:d,handleTriggerKeyDown:u})=>s.jsxs("div",{className:"parameters-dropdown",ref:t,children:[s.jsx(S,{content:`${A} (↑↓ Tab)`,showArrow:!1,children:s.jsxs("button",{className:`parameters-dropdown__trigger ${f?"parameters-dropdown__trigger--open":""}`,onMouseDown:V,onKeyDown:u,type:"button",disabled:g,children:[s.jsx("span",{className:"parameters-dropdown__label",children:A}),s.jsx(U,{size:14,className:`parameters-dropdown__icon ${f?"parameters-dropdown__icon--open":""}`})]})}),f&&P.createPortal(s.jsxs("div",{ref:o,className:`parameters-dropdown__menu parameters-dropdown__menu--flat ${W}`,style:{...d,zIndex:J.DROPDOWN_PORTAL},onMouseDown:e=>e.stopPropagation(),onClick:e=>e.stopPropagation(),children:[s.jsxs("div",{className:"parameters-dropdown__header",children:[s.jsx(X,{size:14}),s.jsx("span",{children:h==="zh"?"设置生成参数 (↑↓←→ Tab)":"Parameters (↑↓←→ Tab)"})]}),s.jsx("div",{className:"parameters-dropdown__sections",children:a.map((e,r)=>{var v;const m=n[e.id],_=r===T;return s.jsxs("div",{className:`parameters-dropdown__section ${_?"parameters-dropdown__section--highlighted":""}`,children:[s.jsx("div",{className:"parameters-dropdown__section-title",children:e.label}),e.valueType==="enum"?s.jsx("div",{className:"parameters-dropdown__options",children:(v=e.options)==null?void 0:v.map((i,w)=>{const j=m===i.value,L=_&&w===y;return s.jsxs("button",{type:"button",className:`parameters-dropdown__option ${j?"parameters-dropdown__option--selected":""} ${L?"parameters-dropdown__option--highlighted":""}`,onClick:()=>R(e.id,i.value),onMouseEnter:()=>{M(r),b(w)},children:[s.jsx("span",{className:"parameters-dropdown__option-label",children:i.label.split("(")[0].trim()}),j&&s.jsx(Z,{size:12,className:"parameters-dropdown__option-check"})]},i.value)})}):s.jsxs("div",{className:`parameters-dropdown__field ${z(e)?"parameters-dropdown__field--with-action":""}`,children:[s.jsx("input",{type:e.valueType==="number"?"number":"text",className:"parameters-dropdown__field-input",value:m||"",placeholder:e.description||e.label,min:e.valueType==="number"?e.min:void 0,max:e.valueType==="number"?e.max:void 0,step:e.valueType==="number"?e.step:void 0,onChange:i=>k(e.id,i.target.value),onMouseDown:i=>i.stopPropagation(),onKeyDown:i=>i.stopPropagation()}),z(e)&&s.jsx(S,{content:h==="zh"?"随机生成种子":"Randomize seed",showArrow:!1,children:s.jsx("button",{type:"button",className:"parameters-dropdown__field-action",onClick:()=>H(e),onMouseDown:i=>i.stopPropagation(),children:s.jsx(q,{size:14})})})]})]},e.id)})})]}),document.body)]})})};export{Y as P};
1
+ import{iS as R,r as c,iW as I,j as s,iK as F,_ as P,E as A,aK as U,a0 as W,cl as X,kS as Z,v as q,kT as B}from"./startup-app-M6vjXkRC.js";function G(n,l,p){return n==="size"?p.split("(")[0].trim():n==="duration"?`${l}s`:n==="klingAction2"?l==="image2video"?"图生":"文生":n==="mode"?l:p}function z(n){return n.valueType==="number"&&n.id.toLowerCase().includes("seed")}function J(n){const l=Number.isFinite(n.min)?n.min:0,p=Number.isFinite(n.max)?n.max:2147483647,x=Math.min(l,p),h=Math.max(l,p);if(n.integer!==!1)return String(Math.floor(Math.random()*(h-x+1))+x);const g=Number.isFinite(n.step)&&n.step?n.step:1,T=Math.floor((h-x)/g);return String(x+Math.floor(Math.random()*(T+1))*g)}const Y=({selectedParams:n,onParamChange:l,compatibleParams:p,modelId:x,language:h="zh",disabled:g=!1,isOpen:T,onOpenChange:O,excludeParamIds:N,placement:C="auto"})=>{const{value:f,setValue:D}=R({controlledValue:T,defaultValue:!1,onChange:O}),[E,M]=c.useState(0),[y,b]=c.useState(0),a=c.useMemo(()=>{const t=p??I(x);return N&&N.length>0?t.filter(o=>!N.includes(o.id)):t},[p,x,N]);c.useEffect(()=>{var t;if(f&&a.length>0){M(0);const o=a[0],d=n[o.id],u=((t=o.options)==null?void 0:t.findIndex(e=>e.value===d))??0;b(u>=0?u:0)}},[f,a,n]);const S=c.useMemo(()=>{if(a.length===0)return h==="zh"?"参数":"Params";const t=[];return a.forEach(o=>{var u;const d=n[o.id];if(d)if(o.valueType==="enum"){const e=(u=o.options)==null?void 0:u.find(r=>r.value===d);e&&t.push(G(o.id,d,e.label))}else{const e=d.length>10?`${d.slice(0,10)}…`:d;t.push(`${o.shortLabel||o.label}:${e}`)}}),t.length===0?h==="zh"?"配置参数":"Settings":t.join(", ")},[a,n,h]),$=c.useCallback(t=>{t.preventDefault(),!g&&D(!f)},[g,f,D]),V=c.useCallback(t=>{var u,e;if(t==="Escape")return D(!1),!0;const o=a[E],d=((u=o==null?void 0:o.options)==null?void 0:u.length)??0;if(t==="ArrowDown")return M(r=>{var w;const m=r<a.length-1?r+1:0,_=a[m],v=n[_.id],i=((w=_.options)==null?void 0:w.findIndex(j=>j.value===v))??0;return b(i>=0?i:0),m}),!0;if(t==="ArrowUp")return M(r=>{var w;const m=r>0?r-1:a.length-1,_=a[m],v=n[_.id],i=((w=_.options)==null?void 0:w.findIndex(j=>j.value===v))??0;return b(i>=0?i:0),m}),!0;if(t==="ArrowRight")return b(r=>r<d-1?r+1:0),!0;if(t==="ArrowLeft")return b(r=>r>0?r-1:d-1),!0;if(t==="Enter"||t===" "||t==="Tab"){const r=(e=o==null?void 0:o.options)==null?void 0:e[y];return r&&l(o.id,r.value),!0}return!1},[a,E,y,n,l]),k=c.useCallback((t,o)=>{l(t,o)},[l]),H=c.useCallback((t,o)=>{l(t,o,{keepOpen:!0})},[l]),K=c.useCallback(t=>{l(t.id,J(t),{keepOpen:!0})},[l]);return a.length===0?null:s.jsx(F,{isOpen:f,setIsOpen:D,disabled:g,openKeys:["Enter"," ","ArrowDown","ArrowUp"],onOpenKey:V,placement:C,minMenuHeight:240,maxMenuHeight:420,children:({containerRef:t,menuRef:o,menuStyle:d,handleTriggerKeyDown:u})=>s.jsxs("div",{className:"parameters-dropdown",ref:t,children:[s.jsx(A,{content:`${S} (↑↓ Tab)`,showArrow:!1,children:s.jsxs("button",{className:`parameters-dropdown__trigger ${f?"parameters-dropdown__trigger--open":""}`,onMouseDown:$,onKeyDown:u,type:"button",disabled:g,children:[s.jsx("span",{className:"parameters-dropdown__label",children:S}),s.jsx(U,{size:14,className:`parameters-dropdown__icon ${f?"parameters-dropdown__icon--open":""}`})]})}),f&&P.createPortal(s.jsxs("div",{ref:o,className:`parameters-dropdown__menu parameters-dropdown__menu--flat ${X}`,style:{...d,zIndex:W.DROPDOWN_PORTAL},onMouseDown:e=>e.stopPropagation(),onClick:e=>e.stopPropagation(),children:[s.jsxs("div",{className:"parameters-dropdown__header",children:[s.jsx(Z,{size:14}),s.jsx("span",{children:h==="zh"?"设置生成参数 (↑↓←→ Tab)":"Parameters (↑↓←→ Tab)"})]}),s.jsx("div",{className:"parameters-dropdown__sections",children:a.map((e,r)=>{var v;const m=n[e.id],_=r===E;return s.jsxs("div",{className:`parameters-dropdown__section ${_?"parameters-dropdown__section--highlighted":""}`,children:[s.jsx("div",{className:"parameters-dropdown__section-title",children:e.label}),e.valueType==="enum"?s.jsx("div",{className:"parameters-dropdown__options",children:(v=e.options)==null?void 0:v.map((i,w)=>{const j=m===i.value,L=_&&w===y;return s.jsxs("button",{type:"button",className:`parameters-dropdown__option ${j?"parameters-dropdown__option--selected":""} ${L?"parameters-dropdown__option--highlighted":""}`,onClick:()=>k(e.id,i.value),onMouseEnter:()=>{M(r),b(w)},children:[s.jsx("span",{className:"parameters-dropdown__option-label",children:i.label.split("(")[0].trim()}),j&&s.jsx(q,{size:12,className:"parameters-dropdown__option-check"})]},i.value)})}):s.jsxs("div",{className:`parameters-dropdown__field ${z(e)?"parameters-dropdown__field--with-action":""}`,children:[s.jsx("input",{type:e.valueType==="number"?"number":"text",className:"parameters-dropdown__field-input",value:m||"",placeholder:e.description||e.label,min:e.valueType==="number"?e.min:void 0,max:e.valueType==="number"?e.max:void 0,step:e.valueType==="number"?e.step:void 0,onChange:i=>H(e.id,i.target.value),onMouseDown:i=>i.stopPropagation(),onKeyDown:i=>i.stopPropagation()}),z(e)&&s.jsx(A,{content:h==="zh"?"随机生成种子":"Randomize seed",showArrow:!1,children:s.jsx("button",{type:"button",className:"parameters-dropdown__field-action",onClick:()=>K(e),onMouseDown:i=>i.stopPropagation(),children:s.jsx(B,{size:14})})})]})]},e.id)})})]}),document.body)]})})};export{Y as P};
@@ -1,2 +1,2 @@
1
- import{iz as f,dA as Lt,dB as E,lJ as rt,bg as Q,r as p,am as k,M as C,ba as Ot,j as l,aH as Ut,l as at,jV as J,f as $t,dq as zt,E as it,R as ct,lK as Bt,a5 as Vt,a3 as Ft,lL as Kt}from"./startup-app-eD_rQhSh.js";import{V as Gt,U as Qt}from"./ai-chat-BO5vbKZW.js";import"./startup-runtime-DTmhLESk.js";const Jt=30,Xt=80,Yt=20,Zt=2e3;function x(t,s=Zt){return typeof t!="string"?"":t.trim().slice(0,s)}function Z(t){const s=[],o=new Set;return t.forEach(n=>{const c=x(n,60);!c||o.has(c)||(o.add(c),s.push(c))}),s}function W(t,s,o){const n=x(o,80);if(n)return n;const c=x(t,120),r=x(s,120);return c&&r&&c!==r?c:(r||c||"未命名提示词").slice(0,Yt)}function Wt(t){var o,n,c,r;const s=(o=t.params.promptMeta)==null?void 0:o.category;return s||(t.params.pptSlideImage||(n=t.params.pptSlidePrompt)!=null&&n.trim()?"ppt-slide":t.type===Q.IMAGE?"image":t.type===Q.VIDEO?"video":t.type===Q.AUDIO?"audio":(c=t.params.promptMeta)!=null&&c.skillName||(r=t.params.promptMeta)!=null&&r.skillId?"agent":"text")}function pt(t,s){var c,r,y,h,j,P,g;if(t.status===E.FAILED)return{kind:"error",text:((c=t.error)==null?void 0:c.message)||"任务失败"};if(t.status===E.CANCELLED)return{kind:"error",text:"任务已取消"};const o=t.result;if(!o)return{kind:"none",text:"暂无结果"};if(s==="image"||s==="ppt-slide"){const m=((r=o.thumbnailUrls)==null?void 0:r[0])||o.thumbnailUrl||((y=o.urls)==null?void 0:y[0])||o.url;return m?{kind:"image",url:m,title:o.title}:{kind:"none",text:"暂无图片预览"}}if(s==="video"){const m=o.url||((h=o.urls)==null?void 0:h[0]),S=o.thumbnailUrl||((j=o.thumbnailUrls)==null?void 0:j[0])||o.previewImageUrl;return m?{kind:"video",url:m,posterUrl:S,title:o.title,duration:o.duration}:{kind:"none",text:"暂无视频预览"}}if(s==="audio"){const m=(P=o.clips)==null?void 0:P[0],S=(m==null?void 0:m.audioUrl)||((g=o.urls)==null?void 0:g[0])||o.url,U=(m==null?void 0:m.imageLargeUrl)||(m==null?void 0:m.imageUrl)||o.previewImageUrl||o.thumbnailUrl,z=o.title||(m==null?void 0:m.title)||t.params.title;return{kind:"audio",url:S,coverUrl:U,title:z,text:o.lyricsText||o.lyricsTitle,duration:(m==null?void 0:m.duration)??o.duration}}const n=o.chatResponse||o.lyricsText||o.title||(o.url?"结果已生成":"");return n?{kind:"text",text:n.slice(0,500),title:o.title||o.lyricsTitle}:{kind:"none",text:"暂无文本预览"}}function qt(t){const s=t.params.promptMeta,o=Wt(t),n=x(rt((s==null?void 0:s.sentPrompt)||(o==="ppt-slide"?t.params.pptSlidePrompt:void 0)||t.params.prompt)),c=x(rt((s==null?void 0:s.initialPrompt)||t.params.sourcePrompt||t.params.rawInput||n)),r=x(s==null?void 0:s.skillName,80),y=x(s==null?void 0:s.skillId,120),h=((s==null?void 0:s.knowledgeContextRefs)||t.params.knowledgeContextRefs||[]).map(P=>P!=null&&P.title?`知识库:${x(P.title,40)}`:void 0),j=Z([o,r||void 0,...(s==null?void 0:s.tags)||[],...h]);return{id:`prompt-history-${t.id}`,taskId:t.id,taskIds:[t.id],sourceSentPrompt:n,sourceSentPrompts:[n],category:o,status:t.status,title:W(c,n,s==null?void 0:s.title),initialPrompt:c,sentPrompt:n,tags:j,skillId:y||void 0,skillName:r||void 0,model:x(t.params.model,120)||void 0,createdAt:t.completedAt||t.createdAt,completedAt:t.completedAt,resultPreview:pt(t,o),resultPreviews:[pt(t,o)],resultCount:1,pinned:f.isContentPinned(n)}}function te(t){const s=f.getHistoryOverride(t.sourceSentPrompt),o=x((s==null?void 0:s.content)||(s==null?void 0:s.sentPrompt)||f.resolveContent(t.sourceSentPrompt)||t.sentPrompt),n=x(s==null?void 0:s.title,80)||(o===t.sentPrompt?t.title:W(t.initialPrompt,o)),c=(s==null?void 0:s.tags)!==void 0?Z(s.tags):t.tags;return{...t,sentPrompt:o,title:n,tags:c,pinned:f.isContentPinned(o)}}function dt(t,s){var r;if(s.category&&s.category!=="all"&&t.category!==s.category||s.skillTag&&s.skillTag!=="all"&&!t.tags.includes(s.skillTag))return!1;const o=(r=s.search)==null?void 0:r.trim().toLowerCase();if(!o)return!0;const n=t.resultPreview.kind==="text"||t.resultPreview.kind==="error"||t.resultPreview.kind==="none"?t.resultPreview.text:t.resultPreview.title,c=[t.title,t.initialPrompt,t.sentPrompt,t.sourceSentPrompts.join(" "),t.tags.join(" "),t.skillName,t.model,n].filter(Boolean).join(`
2
- `).toLowerCase();return o.split(/\s+/).every(y=>c.includes(y))}function ee(t,s){return!s.skillTag||s.skillTag==="all"||t.tags.includes(s.skillTag)}function se(t,s){return dt({...t,tags:t.tags},{...s,skillTag:"all"})}function oe(t){return t||"text"}function ut(t,s){return s.length>t.length?s:t}function X(t){return t.kind!=="none"}function le(t){const s=f.resolveMetadata(t.content),o=x(s.sourceContent||t.content),n=x(s.content||t.content),c=oe(t.modelType||s.modelType),r=Z([c,...s.tags||[]]);return{id:`prompt-history-manual-${t.id}`,taskId:t.id,taskIds:[],sourceSentPrompt:o,sourceSentPrompts:[o],category:c,status:E.COMPLETED,title:W(n,n,s.title),initialPrompt:n,sentPrompt:n,tags:r,createdAt:t.timestamp,resultPreview:{kind:"none",text:"暂无结果"},resultPreviews:[],resultCount:0,pinned:!!t.pinned||f.isContentPinned(n)}}function ne(t){const s=new Map;for(const o of t){const n=o.sentPrompt.trim(),c=o.sourceSentPrompt.trim();if(!n||f.isContentDeleted(n)||f.isContentDeleted(c))continue;const r=s.get(n);if(!r){s.set(n,{...o,id:`prompt-history-${n}`,resultPreviews:X(o.resultPreview)?[o.resultPreview]:[],resultCount:X(o.resultPreview)?1:0,pinned:f.isContentPinned(o.sentPrompt)});continue}r.taskIds.push(...o.taskIds),r.sourceSentPrompts=Array.from(new Set([...r.sourceSentPrompts,...o.sourceSentPrompts])),r.tags=Array.from(new Set([...r.tags,...o.tags])),r.title=ut(r.title,o.title),r.initialPrompt=ut(r.initialPrompt,o.initialPrompt),o.createdAt>r.createdAt&&(r.createdAt=o.createdAt,r.completedAt=o.completedAt,r.taskId=o.taskId,r.status=o.status,r.category=o.category,r.model=o.model||r.model),o.skillName&&!r.skillName&&(r.skillName=o.skillName),o.skillId&&!r.skillId&&(r.skillId=o.skillId),X(o.resultPreview)&&(r.resultPreviews.push(o.resultPreview),r.resultCount=r.resultPreviews.length,r.resultPreview=r.resultPreviews[0])}return Array.from(s.values()).sort((o,n)=>o.pinned&&!n.pinned?-1:!o.pinned&&n.pinned?1:n.createdAt-o.createdAt)}async function re(t={}){const s=Math.min(Math.max(t.limit??Jt,1),80),o=Math.max(t.offset??0,0);let n=0;const c=[];let r=!0;for(f.getHistory().forEach(g=>c.push(le(g)));r;){const g=await Lt.getPromptHistoryTaskSummaries({offset:n,limit:Xt,statuses:[E.COMPLETED,E.FAILED,E.CANCELLED]});for(const m of g.items){const S=te(qt(m));c.push(S)}n=g.nextOffset,(!g.hasMore||g.items.length===0)&&(r=!1)}const y=ne(c),h=new Set;y.forEach(g=>{se(g,t)&&g.category==="agent"&&g.tags.filter(m=>m!=="agent").forEach(m=>h.add(m))});const j=y.filter(g=>dt(g,t)&&ee(g,t)),P=j.length;return{records:j.slice(o,o+s),nextOffset:o+Math.min(s,Math.max(P-o,0)),hasMore:o+s<P,total:P,skillTags:Array.from(h).sort((g,m)=>g.localeCompare(m,"zh-CN"))}}function ae(t,s,o){return f.setContentPinned(t,s,o)}function ie(t){f.deleteContents(t)}function ce(t){const s=t.content.trim();if(!s)return!1;const o=t.modelType||t.category;return f.addHistory(s,t.hasSelection,o),(t.title!==void 0||t.tags!==void 0||o)&&f.setHistoryOverride(s,{title:t.title,sentPrompt:s,tags:t.tags,modelType:o}),t.pinned!==void 0&&f.setContentPinned(s,t.pinned,o),!0}function pe(t){const s=Array.from(new Set((t.sourceSentPrompts||[t.sourceSentPrompt]).map(j=>j.trim()).filter(Boolean))),o=s[0]||"";if(!o)return!1;const n=f.resolveMetadata(o),c=t.sentPrompt.trim(),r=t.category?t.category:void 0,y=!!(t.allowSentPromptEdit&&c),h=y?c:n.content||c||o;return y&&h!==n.content&&f.setContentEdited(s,h,r),!!f.setHistoryOverride(o,{title:t.title,sentPrompt:h,tags:t.tags,modelType:r})}const Y=[{value:"all",label:"全部"},{value:"image",label:"图片"},{value:"video",label:"视频"},{value:"audio",label:"音频"},{value:"text",label:"文本"},{value:"agent",label:"Agent"},{value:"ppt-common",label:"PPT公共"},{value:"ppt-slide",label:"PPT页面"}];function ue(t){const s=[],o=new Set;return t.split(/[\n,,;;]+/).map(n=>n.trim()).filter(Boolean).forEach(n=>{const c=n.slice(0,60);o.has(c)||(o.add(c),s.push(c))}),s}function me(t){var s;return((s=Y.find(o=>o.value===t))==null?void 0:s.label)||t}function b(t){return t==="all"?void 0:t}function de(t){return new Intl.DateTimeFormat("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}).format(new Date(t))}function he(t){return t.kind==="audio"?t.title||t.text||t.url||"音频结果":t.kind==="text"?t.title?`${t.title} ${t.text}`:t.text:t.kind==="image"||t.kind==="video"?"":t.text}function ge(t,s,o){return t.kind==="image"?{id:`${s.id}-result-${o}`,url:t.url,type:"image",title:t.title||s.title,prompt:s.sentPrompt}:t.kind==="video"?{id:`${s.id}-result-${o}`,url:t.url,type:"video",posterUrl:t.posterUrl,title:t.title||s.title,duration:t.duration,prompt:s.sentPrompt}:t.kind==="audio"&&t.url?{id:`${s.id}-result-${o}`,url:t.url,type:"audio",posterUrl:t.coverUrl,title:t.title||s.title,duration:t.duration,prompt:s.sentPrompt}:null}function fe(t){var o;return(((o=t.resultPreviews)==null?void 0:o.length)>0?t.resultPreviews:t.resultPreview?[t.resultPreview]:[]).map((n,c)=>ge(n,t,c)).filter(n=>!!n)}function mt(t){return!!(t&&t.resultCount===0)}const _e=({initialCategory:t})=>{const[s,o]=p.useState([]),[n,c]=p.useState(t||"all"),[r,y]=p.useState("all"),[h,j]=p.useState(""),[P,g]=p.useState(0),[m,S]=p.useState(!1),[U,z]=p.useState(0),[$,ht]=p.useState([]),[B,q]=p.useState(null),[M,V]=p.useState(new Set),[tt,gt]=p.useState([]),[ft,yt]=p.useState(0),[Pt,et]=p.useState(!1),[i,R]=p.useState(null),F=p.useRef(!1),H=p.useRef(0),K=p.useRef(null),st=p.useRef(0),D=B!==null;p.useEffect(()=>{k.trackPromptAction({action:"open_tool",surface:"prompt_history_tool",source:"toolbox",status:"success",metadata:{tool_id:"prompt-history"}})},[]),p.useEffect(()=>{t&&(c(t),y("all"),j(""))},[t]);const v=p.useCallback(async(e="reset",u=0)=>{if(e==="more"&&F.current)return;const a=H.current+1;H.current=a,F.current=!0,q(e);try{const d=await re({category:n,skillTag:r,search:h,offset:u,limit:30});if(a!==H.current)return;o(_=>e==="more"?[..._,...d.records]:d.records),g(d.nextOffset),S(d.hasMore),z(d.total),ht(d.skillTags),e==="reset"&&(V(new Set),K.current=null)}catch(d){if(a!==H.current)return;k.trackPromptAction({action:"load_history",surface:"prompt_history_tool",promptType:b(n),status:"failed",metadata:{mode:e,has_search:h.trim().length>0,has_skill_filter:r!=="all"}}),console.error("[PromptHistoryTool] 加载提示词历史失败:",d),C.error("我的提示词加载失败")}finally{a===H.current&&(F.current=!1,q(null))}},[n,h,r]);p.useEffect(()=>{v("reset")},[v]),p.useEffect(()=>{r!=="all"&&!$.includes(r)&&y("all")},[r,$]);const T=p.useMemo(()=>s.map(e=>e.id),[s]),N=p.useMemo(()=>s.filter(e=>M.has(e.id)),[s,M]),A=p.useMemo(()=>ue((i==null?void 0:i.tagsInput)||""),[i==null?void 0:i.tagsInput]),xt=p.useMemo(()=>`共 ${U} 条,已加载 ${s.length} 条`,[s.length,U]),_t=T.length>0&&T.every(e=>M.has(e)),jt=p.useCallback(()=>{k.trackPromptAction({action:"refresh",surface:"prompt_history_tool",promptType:b(n),metadata:{has_search:h.trim().length>0,has_skill_filter:r!=="all"}}),v("reset")},[n,v,h,r]),vt=p.useCallback(e=>{e!==n&&(k.trackPromptAction({action:"filter_category",surface:"prompt_history_tool",promptType:b(e),metadata:{category:e}}),c(e))},[n]),kt=p.useCallback(e=>{const u=e.target.value;k.trackPromptAction({action:"filter_skill",surface:"prompt_history_tool",promptType:b(n),metadata:{selection:u==="all"?"all":"custom"}}),y(u)},[n]),bt=p.useCallback(e=>{const u=e.target.value;j(u);const a=u.trim();if(!a)return;const d=Date.now();d-st.current<2e3||(st.current=d,k.trackPromptAction({action:"search",surface:"prompt_history_tool",promptType:b(n),prompt:a,metadata:{has_skill_filter:r!=="all"}}))},[n,r]),Tt=p.useCallback((e,u,a)=>{V(d=>{const _=new Set(d),O=K.current;if(a&&O){const w=T.indexOf(O),I=T.indexOf(e);if(w>=0&&I>=0){const[Ht,Dt]=w<I?[w,I]:[I,w];return T.slice(Ht,Dt+1).forEach(nt=>{u?_.add(nt):_.delete(nt)}),_}}return u?_.add(e):_.delete(e),K.current=e,_})},[T]),Ct=p.useCallback(e=>{V(u=>{const a=new Set(u);return T.forEach(d=>{e?a.add(d):a.delete(d)}),a})},[T]),St=p.useCallback(()=>{N.length!==0&&(ie(N.flatMap(e=>e.sourceSentPrompts)),k.trackPromptAction({action:"delete",surface:"prompt_history_tool",itemCount:N.length,status:"success"}),C.success(`已删除 ${N.length} 条提示词`),v("reset"))},[v,N]),Nt=p.useCallback(async(e,u)=>{u.stopPropagation();try{await Ot(e.sentPrompt),k.trackPromptAction({action:"copy",surface:"prompt_history_tool",promptType:b(e.category),prompt:e.sentPrompt,status:"success",metadata:{record_status:e.status,initial_differs_from_sent:e.initialPrompt!==e.sentPrompt}}),C.success("提示词已复制")}catch(a){console.error("[PromptHistoryTool] 复制提示词失败:",a),C.error("复制失败")}},[]),wt=p.useCallback(e=>{var u;e.shiftKey&&((u=window.getSelection())==null||u.removeAllRanges())},[]),It=p.useCallback((e,u)=>{u.stopPropagation();const a=!e.pinned;ae(e.sentPrompt,a,e.category),k.trackPromptAction({action:a?"pin":"unpin",surface:"prompt_history_tool",promptType:b(e.category),prompt:e.sentPrompt,status:"success"}),C.success(a?"已置顶提示词":"已取消置顶"),v("reset")},[v]),At=p.useCallback((e,u)=>{u.stopPropagation(),R({mode:"edit",record:e,title:e.title,sentPrompt:e.sentPrompt,tagsInput:e.tags.join(", "),category:e.category,pinned:e.pinned})},[]),ot=p.useCallback((e,u)=>{u==null||u.stopPropagation();const a=n==="all"?"text":n;R({mode:"create",record:e,title:(e==null?void 0:e.title)||"",sentPrompt:(e==null?void 0:e.sentPrompt)||"",tagsInput:(e==null?void 0:e.tags.join(", "))||"",category:(e==null?void 0:e.category)||a,pinned:(e==null?void 0:e.pinned)||!1})},[n]),G=p.useCallback(()=>{R(null)},[]),Et=p.useCallback(()=>{var a,d,_,O,w,I;if(!i)return;if(!i.sentPrompt.trim()){C.warning("发送提示词不能为空");return}const e=i.mode==="edit"&&mt(i.record);if(!(i.mode==="create"?ce({title:i.title,content:i.sentPrompt,tags:A,category:i.category,pinned:i.pinned}):pe({sourceSentPrompt:((a=i.record)==null?void 0:a.sourceSentPrompt)||"",sourceSentPrompts:(d=i.record)==null?void 0:d.sourceSentPrompts,title:i.title,sentPrompt:e?i.sentPrompt:((_=i.record)==null?void 0:_.sentPrompt)||i.sentPrompt,tags:A,category:(O=i.record)==null?void 0:O.category,...e?{allowSentPromptEdit:!0}:{}}))){C.error("保存失败");return}k.trackPromptAction({action:i.mode==="create"?"create":"edit",surface:"prompt_history_tool",promptType:b(i.category),prompt:i.sentPrompt,status:"success",metadata:{tag_count:A.length,title_changed:i.mode==="edit"?i.title.trim()!==((w=i.record)==null?void 0:w.title):!!i.title.trim(),prompt_changed:i.mode==="create"||e&&i.sentPrompt.trim()!==((I=i.record)==null?void 0:I.sentPrompt)}}),C.success(i.mode==="create"?"提示词已创建":"提示词已更新"),R(null),v("reset")},[i,A,v]),L=p.useCallback(e=>{R(u=>u&&{...u,...e})},[]),Mt=p.useCallback((e,u,a)=>{e.stopPropagation(),u.length!==0&&(gt(u),yt(a),et(!0))},[]),Rt=p.useCallback(e=>{const u=e.currentTarget;u.scrollHeight-u.scrollTop-u.clientHeight<180&&m&&!D&&(k.trackPromptAction({action:"load_more",surface:"prompt_history_tool",promptType:b(n),itemCount:s.length,metadata:{has_search:h.trim().length>0,has_skill_filter:r!=="all",next_offset:P}}),v("more",P))},[n,m,v,D,P,s.length,h,r]),lt=(i==null?void 0:i.mode)==="create"||mt(i==null?void 0:i.record);return l.jsxs("div",{className:"prompt-history-tool",children:[l.jsxs("div",{className:"prompt-history-tool__toolbar",children:[l.jsxs("div",{className:"prompt-history-tool__search",children:[l.jsx(Ut,{size:14}),l.jsx("input",{value:h,onChange:bt,placeholder:"搜索标题、提示词、标签"})]}),l.jsx("button",{type:"button",className:"prompt-history-tool__icon-btn",onClick:()=>ot(),"aria-label":"新建提示词",children:l.jsx(at,{size:16})}),l.jsx("button",{type:"button",className:"prompt-history-tool__icon-btn",onClick:jt,disabled:D,"aria-label":"刷新",children:D?l.jsx(J,{size:16}):l.jsx($t,{size:16})})]}),l.jsx("div",{className:"prompt-history-tool__filters",children:Y.map(e=>l.jsx("button",{type:"button",className:n===e.value?"is-active":"",onClick:()=>vt(e.value),children:e.label},e.value))}),$.length>0&&l.jsx("div",{className:"prompt-history-tool__skill-filter",children:l.jsxs("select",{value:r,onChange:kt,children:[l.jsx("option",{value:"all",children:"全部 Skill"}),$.map(e=>l.jsx("option",{value:e,children:e},e))]})}),l.jsxs("div",{className:"prompt-history-tool__summary",children:[l.jsx("span",{children:xt}),N.length>0&&l.jsxs("button",{type:"button",className:"prompt-history-tool__delete-btn",onClick:St,children:[l.jsx(zt,{size:14}),"删除 ",N.length," 条"]}),B==="reset"&&l.jsx(J,{size:14,className:"prompt-history-tool__summary-loading"})]}),l.jsxs("div",{className:"prompt-history-tool__table-wrap",onScroll:Rt,children:[l.jsxs("table",{className:"prompt-history-tool__table",children:[l.jsx("thead",{children:l.jsxs("tr",{children:[l.jsx("th",{className:"prompt-history-tool__col-select",children:l.jsx("input",{type:"checkbox","aria-label":"选择已加载提示词",checked:_t,onChange:e=>Ct(e.target.checked)})}),l.jsx("th",{className:"prompt-history-tool__col-type",children:"类型"}),l.jsx("th",{className:"prompt-history-tool__col-title",children:"标题"}),l.jsx("th",{children:"发送提示词"}),l.jsx("th",{className:"prompt-history-tool__col-tags",children:"标签"}),l.jsx("th",{className:"prompt-history-tool__col-result",children:"结果"}),l.jsx("th",{className:"prompt-history-tool__col-time",children:"时间"}),l.jsx("th",{className:"prompt-history-tool__col-actions",children:"操作"})]})}),l.jsx("tbody",{children:s.map(e=>{const u=fe(e);return l.jsxs("tr",{className:M.has(e.id)?"is-selected":"",children:[l.jsx("td",{children:l.jsx("input",{type:"checkbox","aria-label":`选择 ${e.title}`,checked:M.has(e.id),onMouseDown:wt,onClick:a=>a.stopPropagation(),onChange:a=>Tt(e.id,a.target.checked,a.nativeEvent instanceof MouseEvent?a.nativeEvent.shiftKey:!1)})}),l.jsx("td",{children:l.jsx("span",{className:`prompt-history-tool__type prompt-history-tool__type--${e.category}`,children:me(e.category)})}),l.jsxs("td",{children:[l.jsx("div",{className:"prompt-history-tool__title",children:e.title}),e.initialPrompt!==e.sentPrompt&&l.jsxs("div",{className:"prompt-history-tool__subtext",children:["初始:",e.initialPrompt]}),e.sourceSentPrompt!==e.sentPrompt&&l.jsxs("div",{className:"prompt-history-tool__subtext",children:["原始:",e.sourceSentPrompt]})]}),l.jsx("td",{children:l.jsx(it,{placement:"left",delay:120,overlayClassName:"prompt-history-tool__prompt-popover",content:l.jsx("div",{className:"prompt-history-tool__prompt-full",children:e.sentPrompt}),children:l.jsx("button",{type:"button",className:"prompt-history-tool__prompt",onClick:a=>Nt(e,a),"aria-label":`复制提示词:${e.title}`,children:e.sentPrompt})})}),l.jsx("td",{children:l.jsx("div",{className:"prompt-history-tool__tags",children:e.tags.map(a=>l.jsx("span",{children:a},a))})}),l.jsx("td",{children:u.length>0?l.jsxs("div",{className:"prompt-history-tool__media-grid",children:[u.slice(0,4).map((a,d)=>l.jsx(it,{placement:"left",delay:80,overlayClassName:"prompt-history-tool__media-popover",content:a.type==="video"?l.jsx("video",{src:a.url,poster:a.posterUrl,controls:!0,muted:!0,preload:"metadata"}):l.jsx(ct,{src:a.posterUrl||a.url,alt:a.title||e.title,showSkeleton:!1,eager:!0}),children:l.jsx("button",{type:"button",className:"prompt-history-tool__media-thumb",onClick:_=>Mt(_,u,d),children:a.type==="video"?l.jsx(Gt,{src:a.url,poster:a.posterUrl,alt:a.title||e.title,thumbnailSize:"small",activateVideoOnClick:!1}):l.jsx(ct,{src:a.posterUrl||a.url,alt:a.title||e.title,showSkeleton:!1,eager:!0})})},a.id||a.url)),e.resultCount>4&&l.jsxs("span",{className:"prompt-history-tool__media-count",children:["+",e.resultCount-4]})]}):l.jsx("div",{className:"prompt-history-tool__result-text",children:he(e.resultPreview)})}),l.jsx("td",{children:de(e.createdAt)}),l.jsx("td",{children:l.jsxs("div",{className:"prompt-history-tool__actions",children:[l.jsx("button",{type:"button",className:"prompt-history-tool__create-btn",onClick:a=>ot(e,a),"aria-label":`基于 ${e.title} 创建`,children:l.jsx(at,{size:15})}),l.jsx("button",{type:"button",className:"prompt-history-tool__edit-btn",onClick:a=>At(e,a),"aria-label":`编辑 ${e.title}`,children:l.jsx(Bt,{size:15})}),l.jsx("button",{type:"button",className:`prompt-history-tool__pin-btn ${e.pinned?"is-pinned":""}`,onClick:a=>It(e,a),"aria-label":e.pinned?"取消置顶":"置顶",children:e.pinned?l.jsx(Vt,{size:15}):l.jsx(Ft,{size:15})})]})})]},e.id)})})]}),!D&&s.length===0&&l.jsx("div",{className:"prompt-history-tool__empty",children:"暂无我的提示词"}),B==="more"&&l.jsxs("div",{className:"prompt-history-tool__loading-more",children:[l.jsx(J,{size:14}),"加载中..."]}),!m&&s.length>0&&l.jsx("div",{className:"prompt-history-tool__done",children:"已加载全部"})]}),l.jsxs("div",{className:"prompt-history-tool__footer",children:[l.jsxs("div",{className:"prompt-history-tool__hint",children:[l.jsx(Kt,{size:13}),"点击提示词复制,勾选列选择,Shift 连选"]}),l.jsx("span",{children:m?"向下滚动自动加载":"没有更多了"})]}),l.jsx(Qt,{visible:Pt,items:tt,initialIndex:ft,onClose:()=>et(!1),showThumbnails:tt.length>1,videoAutoPlay:!0}),i&&l.jsx("div",{className:"prompt-history-tool__edit-mask",role:"presentation",onMouseDown:G,children:l.jsxs("form",{className:"prompt-history-tool__edit-dialog",onMouseDown:e=>e.stopPropagation(),onSubmit:e=>{e.preventDefault(),Et()},children:[l.jsxs("div",{className:"prompt-history-tool__edit-header",children:[l.jsxs("div",{children:[l.jsx("h3",{children:i.mode==="create"?"创建提示词":"编辑提示词"}),l.jsx("p",{children:i.mode==="create"?"填写类型、置顶、标题、发送提示词和标签":lt?"修改标题、发送提示词和标签":"修改标题和标签,发送提示词保持不变"})]}),l.jsx("button",{type:"button",className:"prompt-history-tool__edit-close",onClick:G,"aria-label":"关闭编辑弹窗",children:"×"})]}),i.mode==="create"&&l.jsxs("div",{className:"prompt-history-tool__field-row",children:[l.jsxs("label",{className:"prompt-history-tool__field",children:[l.jsx("span",{children:"类型"}),l.jsx("select",{value:i.category,onChange:e=>L({category:e.target.value}),children:Y.filter(e=>e.value!=="all").map(e=>l.jsx("option",{value:e.value,children:e.label},e.value))})]}),l.jsxs("label",{className:"prompt-history-tool__switch-field",children:[l.jsx("input",{type:"checkbox",checked:i.pinned,onChange:e=>L({pinned:e.target.checked})}),l.jsx("span",{children:"置顶"})]})]}),l.jsxs("label",{className:"prompt-history-tool__field",children:[l.jsx("span",{children:"标题"}),l.jsx("input",{value:i.title,onChange:e=>L({title:e.target.value}),maxLength:80,placeholder:"输入标题"})]}),l.jsxs("label",{className:"prompt-history-tool__field",children:[l.jsx("span",{children:"发送提示词"}),l.jsx("textarea",{value:i.sentPrompt,onChange:e=>L({sentPrompt:e.target.value}),readOnly:!lt,rows:8,maxLength:2e3,placeholder:"输入发送提示词"})]}),l.jsxs("label",{className:"prompt-history-tool__field",children:[l.jsx("span",{children:"标签"}),l.jsx("textarea",{className:"prompt-history-tool__tags-input",value:i.tagsInput,onChange:e=>L({tagsInput:e.target.value}),rows:2,placeholder:"多个标签用逗号或换行分隔"})]}),A.length>0&&l.jsx("div",{className:"prompt-history-tool__edit-tags",children:A.map(e=>l.jsx("span",{children:e},e))}),l.jsxs("div",{className:"prompt-history-tool__edit-footer",children:[l.jsx("button",{type:"button",onClick:G,children:"取消"}),l.jsx("button",{type:"submit",className:"is-primary",children:"保存"})]})]})})]})};export{_e as PromptHistoryTool,_e as default};
1
+ import{iA as f,dA as Lt,dB as E,lK as rt,bg as Q,r as p,am as k,M as C,ba as Ot,j as l,aH as Ut,l as at,jW as W,f as $t,dq as zt,E as it,R as ct,lL as Bt,a5 as Ft,a3 as Vt,lM as Kt}from"./startup-app-M6vjXkRC.js";import{V as Gt,U as Qt}from"./ai-chat-D_s8vs6j.js";import"./startup-runtime-DTmhLESk.js";const Wt=30,Xt=80,Yt=20,Zt=2e3;function x(t,s=Zt){return typeof t!="string"?"":t.trim().slice(0,s)}function Z(t){const s=[],o=new Set;return t.forEach(n=>{const c=x(n,60);!c||o.has(c)||(o.add(c),s.push(c))}),s}function J(t,s,o){const n=x(o,80);if(n)return n;const c=x(t,120),r=x(s,120);return c&&r&&c!==r?c:(r||c||"未命名提示词").slice(0,Yt)}function Jt(t){var o,n,c,r;const s=(o=t.params.promptMeta)==null?void 0:o.category;return s||(t.params.pptSlideImage||(n=t.params.pptSlidePrompt)!=null&&n.trim()?"ppt-slide":t.type===Q.IMAGE?"image":t.type===Q.VIDEO?"video":t.type===Q.AUDIO?"audio":(c=t.params.promptMeta)!=null&&c.skillName||(r=t.params.promptMeta)!=null&&r.skillId?"agent":"text")}function pt(t,s){var c,r,y,h,j,P,g;if(t.status===E.FAILED)return{kind:"error",text:((c=t.error)==null?void 0:c.message)||"任务失败"};if(t.status===E.CANCELLED)return{kind:"error",text:"任务已取消"};const o=t.result;if(!o)return{kind:"none",text:"暂无结果"};if(s==="image"||s==="ppt-slide"){const m=((r=o.thumbnailUrls)==null?void 0:r[0])||o.thumbnailUrl||((y=o.urls)==null?void 0:y[0])||o.url;return m?{kind:"image",url:m,title:o.title}:{kind:"none",text:"暂无图片预览"}}if(s==="video"){const m=o.url||((h=o.urls)==null?void 0:h[0]),S=o.thumbnailUrl||((j=o.thumbnailUrls)==null?void 0:j[0])||o.previewImageUrl;return m?{kind:"video",url:m,posterUrl:S,title:o.title,duration:o.duration}:{kind:"none",text:"暂无视频预览"}}if(s==="audio"){const m=(P=o.clips)==null?void 0:P[0],S=(m==null?void 0:m.audioUrl)||((g=o.urls)==null?void 0:g[0])||o.url,U=(m==null?void 0:m.imageLargeUrl)||(m==null?void 0:m.imageUrl)||o.previewImageUrl||o.thumbnailUrl,z=o.title||(m==null?void 0:m.title)||t.params.title;return{kind:"audio",url:S,coverUrl:U,title:z,text:o.lyricsText||o.lyricsTitle,duration:(m==null?void 0:m.duration)??o.duration}}const n=o.chatResponse||o.lyricsText||o.title||(o.url?"结果已生成":"");return n?{kind:"text",text:n.slice(0,500),title:o.title||o.lyricsTitle}:{kind:"none",text:"暂无文本预览"}}function qt(t){const s=t.params.promptMeta,o=Jt(t),n=x(rt((s==null?void 0:s.sentPrompt)||(o==="ppt-slide"?t.params.pptSlidePrompt:void 0)||t.params.prompt)),c=x(rt((s==null?void 0:s.initialPrompt)||t.params.sourcePrompt||t.params.rawInput||n)),r=x(s==null?void 0:s.skillName,80),y=x(s==null?void 0:s.skillId,120),h=((s==null?void 0:s.knowledgeContextRefs)||t.params.knowledgeContextRefs||[]).map(P=>P!=null&&P.title?`知识库:${x(P.title,40)}`:void 0),j=Z([o,r||void 0,...(s==null?void 0:s.tags)||[],...h]);return{id:`prompt-history-${t.id}`,taskId:t.id,taskIds:[t.id],sourceSentPrompt:n,sourceSentPrompts:[n],category:o,status:t.status,title:J(c,n,s==null?void 0:s.title),initialPrompt:c,sentPrompt:n,tags:j,skillId:y||void 0,skillName:r||void 0,model:x(t.params.model,120)||void 0,createdAt:t.completedAt||t.createdAt,completedAt:t.completedAt,resultPreview:pt(t,o),resultPreviews:[pt(t,o)],resultCount:1,pinned:f.isContentPinned(n)}}function te(t){const s=f.getHistoryOverride(t.sourceSentPrompt),o=x((s==null?void 0:s.content)||(s==null?void 0:s.sentPrompt)||f.resolveContent(t.sourceSentPrompt)||t.sentPrompt),n=x(s==null?void 0:s.title,80)||(o===t.sentPrompt?t.title:J(t.initialPrompt,o)),c=(s==null?void 0:s.tags)!==void 0?Z(s.tags):t.tags;return{...t,sentPrompt:o,title:n,tags:c,pinned:f.isContentPinned(o)}}function dt(t,s){var r;if(s.category&&s.category!=="all"&&t.category!==s.category||s.skillTag&&s.skillTag!=="all"&&!t.tags.includes(s.skillTag))return!1;const o=(r=s.search)==null?void 0:r.trim().toLowerCase();if(!o)return!0;const n=t.resultPreview.kind==="text"||t.resultPreview.kind==="error"||t.resultPreview.kind==="none"?t.resultPreview.text:t.resultPreview.title,c=[t.title,t.initialPrompt,t.sentPrompt,t.sourceSentPrompts.join(" "),t.tags.join(" "),t.skillName,t.model,n].filter(Boolean).join(`
2
+ `).toLowerCase();return o.split(/\s+/).every(y=>c.includes(y))}function ee(t,s){return!s.skillTag||s.skillTag==="all"||t.tags.includes(s.skillTag)}function se(t,s){return dt({...t,tags:t.tags},{...s,skillTag:"all"})}function oe(t){return t||"text"}function ut(t,s){return s.length>t.length?s:t}function X(t){return t.kind!=="none"}function le(t){const s=f.resolveMetadata(t.content),o=x(s.sourceContent||t.content),n=x(s.content||t.content),c=oe(t.modelType||s.modelType),r=Z([c,...s.tags||[]]);return{id:`prompt-history-manual-${t.id}`,taskId:t.id,taskIds:[],sourceSentPrompt:o,sourceSentPrompts:[o],category:c,status:E.COMPLETED,title:J(n,n,s.title),initialPrompt:n,sentPrompt:n,tags:r,createdAt:t.timestamp,resultPreview:{kind:"none",text:"暂无结果"},resultPreviews:[],resultCount:0,pinned:!!t.pinned||f.isContentPinned(n)}}function ne(t){const s=new Map;for(const o of t){const n=o.sentPrompt.trim(),c=o.sourceSentPrompt.trim();if(!n||f.isContentDeleted(n)||f.isContentDeleted(c))continue;const r=s.get(n);if(!r){s.set(n,{...o,id:`prompt-history-${n}`,resultPreviews:X(o.resultPreview)?[o.resultPreview]:[],resultCount:X(o.resultPreview)?1:0,pinned:f.isContentPinned(o.sentPrompt)});continue}r.taskIds.push(...o.taskIds),r.sourceSentPrompts=Array.from(new Set([...r.sourceSentPrompts,...o.sourceSentPrompts])),r.tags=Array.from(new Set([...r.tags,...o.tags])),r.title=ut(r.title,o.title),r.initialPrompt=ut(r.initialPrompt,o.initialPrompt),o.createdAt>r.createdAt&&(r.createdAt=o.createdAt,r.completedAt=o.completedAt,r.taskId=o.taskId,r.status=o.status,r.category=o.category,r.model=o.model||r.model),o.skillName&&!r.skillName&&(r.skillName=o.skillName),o.skillId&&!r.skillId&&(r.skillId=o.skillId),X(o.resultPreview)&&(r.resultPreviews.push(o.resultPreview),r.resultCount=r.resultPreviews.length,r.resultPreview=r.resultPreviews[0])}return Array.from(s.values()).sort((o,n)=>o.pinned&&!n.pinned?-1:!o.pinned&&n.pinned?1:n.createdAt-o.createdAt)}async function re(t={}){const s=Math.min(Math.max(t.limit??Wt,1),80),o=Math.max(t.offset??0,0);let n=0;const c=[];let r=!0;for(f.getHistory().forEach(g=>c.push(le(g)));r;){const g=await Lt.getPromptHistoryTaskSummaries({offset:n,limit:Xt,statuses:[E.COMPLETED,E.FAILED,E.CANCELLED]});for(const m of g.items){const S=te(qt(m));c.push(S)}n=g.nextOffset,(!g.hasMore||g.items.length===0)&&(r=!1)}const y=ne(c),h=new Set;y.forEach(g=>{se(g,t)&&g.category==="agent"&&g.tags.filter(m=>m!=="agent").forEach(m=>h.add(m))});const j=y.filter(g=>dt(g,t)&&ee(g,t)),P=j.length;return{records:j.slice(o,o+s),nextOffset:o+Math.min(s,Math.max(P-o,0)),hasMore:o+s<P,total:P,skillTags:Array.from(h).sort((g,m)=>g.localeCompare(m,"zh-CN"))}}function ae(t,s,o){return f.setContentPinned(t,s,o)}function ie(t){f.deleteContents(t)}function ce(t){const s=t.content.trim();if(!s)return!1;const o=t.modelType||t.category;return f.addHistory(s,t.hasSelection,o),(t.title!==void 0||t.tags!==void 0||o)&&f.setHistoryOverride(s,{title:t.title,sentPrompt:s,tags:t.tags,modelType:o}),t.pinned!==void 0&&f.setContentPinned(s,t.pinned,o),!0}function pe(t){const s=Array.from(new Set((t.sourceSentPrompts||[t.sourceSentPrompt]).map(j=>j.trim()).filter(Boolean))),o=s[0]||"";if(!o)return!1;const n=f.resolveMetadata(o),c=t.sentPrompt.trim(),r=t.category?t.category:void 0,y=!!(t.allowSentPromptEdit&&c),h=y?c:n.content||c||o;return y&&h!==n.content&&f.setContentEdited(s,h,r),!!f.setHistoryOverride(o,{title:t.title,sentPrompt:h,tags:t.tags,modelType:r})}const Y=[{value:"all",label:"全部"},{value:"image",label:"图片"},{value:"video",label:"视频"},{value:"audio",label:"音频"},{value:"text",label:"文本"},{value:"agent",label:"Agent"},{value:"ppt-common",label:"PPT公共"},{value:"ppt-slide",label:"PPT页面"}];function ue(t){const s=[],o=new Set;return t.split(/[\n,,;;]+/).map(n=>n.trim()).filter(Boolean).forEach(n=>{const c=n.slice(0,60);o.has(c)||(o.add(c),s.push(c))}),s}function me(t){var s;return((s=Y.find(o=>o.value===t))==null?void 0:s.label)||t}function b(t){return t==="all"?void 0:t}function de(t){return new Intl.DateTimeFormat("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}).format(new Date(t))}function he(t){return t.kind==="audio"?t.title||t.text||t.url||"音频结果":t.kind==="text"?t.title?`${t.title} ${t.text}`:t.text:t.kind==="image"||t.kind==="video"?"":t.text}function ge(t,s,o){return t.kind==="image"?{id:`${s.id}-result-${o}`,url:t.url,type:"image",title:t.title||s.title,prompt:s.sentPrompt}:t.kind==="video"?{id:`${s.id}-result-${o}`,url:t.url,type:"video",posterUrl:t.posterUrl,title:t.title||s.title,duration:t.duration,prompt:s.sentPrompt}:t.kind==="audio"&&t.url?{id:`${s.id}-result-${o}`,url:t.url,type:"audio",posterUrl:t.coverUrl,title:t.title||s.title,duration:t.duration,prompt:s.sentPrompt}:null}function fe(t){var o;return(((o=t.resultPreviews)==null?void 0:o.length)>0?t.resultPreviews:t.resultPreview?[t.resultPreview]:[]).map((n,c)=>ge(n,t,c)).filter(n=>!!n)}function mt(t){return!!(t&&t.resultCount===0)}const _e=({initialCategory:t})=>{const[s,o]=p.useState([]),[n,c]=p.useState(t||"all"),[r,y]=p.useState("all"),[h,j]=p.useState(""),[P,g]=p.useState(0),[m,S]=p.useState(!1),[U,z]=p.useState(0),[$,ht]=p.useState([]),[B,q]=p.useState(null),[M,F]=p.useState(new Set),[tt,gt]=p.useState([]),[ft,yt]=p.useState(0),[Pt,et]=p.useState(!1),[i,R]=p.useState(null),V=p.useRef(!1),H=p.useRef(0),K=p.useRef(null),st=p.useRef(0),D=B!==null;p.useEffect(()=>{k.trackPromptAction({action:"open_tool",surface:"prompt_history_tool",source:"toolbox",status:"success",metadata:{tool_id:"prompt-history"}})},[]),p.useEffect(()=>{t&&(c(t),y("all"),j(""))},[t]);const v=p.useCallback(async(e="reset",u=0)=>{if(e==="more"&&V.current)return;const a=H.current+1;H.current=a,V.current=!0,q(e);try{const d=await re({category:n,skillTag:r,search:h,offset:u,limit:30});if(a!==H.current)return;o(_=>e==="more"?[..._,...d.records]:d.records),g(d.nextOffset),S(d.hasMore),z(d.total),ht(d.skillTags),e==="reset"&&(F(new Set),K.current=null)}catch(d){if(a!==H.current)return;k.trackPromptAction({action:"load_history",surface:"prompt_history_tool",promptType:b(n),status:"failed",metadata:{mode:e,has_search:h.trim().length>0,has_skill_filter:r!=="all"}}),console.error("[PromptHistoryTool] 加载提示词历史失败:",d),C.error("我的提示词加载失败")}finally{a===H.current&&(V.current=!1,q(null))}},[n,h,r]);p.useEffect(()=>{v("reset")},[v]),p.useEffect(()=>{r!=="all"&&!$.includes(r)&&y("all")},[r,$]);const T=p.useMemo(()=>s.map(e=>e.id),[s]),N=p.useMemo(()=>s.filter(e=>M.has(e.id)),[s,M]),A=p.useMemo(()=>ue((i==null?void 0:i.tagsInput)||""),[i==null?void 0:i.tagsInput]),xt=p.useMemo(()=>`共 ${U} 条,已加载 ${s.length} 条`,[s.length,U]),_t=T.length>0&&T.every(e=>M.has(e)),jt=p.useCallback(()=>{k.trackPromptAction({action:"refresh",surface:"prompt_history_tool",promptType:b(n),metadata:{has_search:h.trim().length>0,has_skill_filter:r!=="all"}}),v("reset")},[n,v,h,r]),vt=p.useCallback(e=>{e!==n&&(k.trackPromptAction({action:"filter_category",surface:"prompt_history_tool",promptType:b(e),metadata:{category:e}}),c(e))},[n]),kt=p.useCallback(e=>{const u=e.target.value;k.trackPromptAction({action:"filter_skill",surface:"prompt_history_tool",promptType:b(n),metadata:{selection:u==="all"?"all":"custom"}}),y(u)},[n]),bt=p.useCallback(e=>{const u=e.target.value;j(u);const a=u.trim();if(!a)return;const d=Date.now();d-st.current<2e3||(st.current=d,k.trackPromptAction({action:"search",surface:"prompt_history_tool",promptType:b(n),prompt:a,metadata:{has_skill_filter:r!=="all"}}))},[n,r]),Tt=p.useCallback((e,u,a)=>{F(d=>{const _=new Set(d),O=K.current;if(a&&O){const w=T.indexOf(O),I=T.indexOf(e);if(w>=0&&I>=0){const[Ht,Dt]=w<I?[w,I]:[I,w];return T.slice(Ht,Dt+1).forEach(nt=>{u?_.add(nt):_.delete(nt)}),_}}return u?_.add(e):_.delete(e),K.current=e,_})},[T]),Ct=p.useCallback(e=>{F(u=>{const a=new Set(u);return T.forEach(d=>{e?a.add(d):a.delete(d)}),a})},[T]),St=p.useCallback(()=>{N.length!==0&&(ie(N.flatMap(e=>e.sourceSentPrompts)),k.trackPromptAction({action:"delete",surface:"prompt_history_tool",itemCount:N.length,status:"success"}),C.success(`已删除 ${N.length} 条提示词`),v("reset"))},[v,N]),Nt=p.useCallback(async(e,u)=>{u.stopPropagation();try{await Ot(e.sentPrompt),k.trackPromptAction({action:"copy",surface:"prompt_history_tool",promptType:b(e.category),prompt:e.sentPrompt,status:"success",metadata:{record_status:e.status,initial_differs_from_sent:e.initialPrompt!==e.sentPrompt}}),C.success("提示词已复制")}catch(a){console.error("[PromptHistoryTool] 复制提示词失败:",a),C.error("复制失败")}},[]),wt=p.useCallback(e=>{var u;e.shiftKey&&((u=window.getSelection())==null||u.removeAllRanges())},[]),It=p.useCallback((e,u)=>{u.stopPropagation();const a=!e.pinned;ae(e.sentPrompt,a,e.category),k.trackPromptAction({action:a?"pin":"unpin",surface:"prompt_history_tool",promptType:b(e.category),prompt:e.sentPrompt,status:"success"}),C.success(a?"已置顶提示词":"已取消置顶"),v("reset")},[v]),At=p.useCallback((e,u)=>{u.stopPropagation(),R({mode:"edit",record:e,title:e.title,sentPrompt:e.sentPrompt,tagsInput:e.tags.join(", "),category:e.category,pinned:e.pinned})},[]),ot=p.useCallback((e,u)=>{u==null||u.stopPropagation();const a=n==="all"?"text":n;R({mode:"create",record:e,title:(e==null?void 0:e.title)||"",sentPrompt:(e==null?void 0:e.sentPrompt)||"",tagsInput:(e==null?void 0:e.tags.join(", "))||"",category:(e==null?void 0:e.category)||a,pinned:(e==null?void 0:e.pinned)||!1})},[n]),G=p.useCallback(()=>{R(null)},[]),Et=p.useCallback(()=>{var a,d,_,O,w,I;if(!i)return;if(!i.sentPrompt.trim()){C.warning("发送提示词不能为空");return}const e=i.mode==="edit"&&mt(i.record);if(!(i.mode==="create"?ce({title:i.title,content:i.sentPrompt,tags:A,category:i.category,pinned:i.pinned}):pe({sourceSentPrompt:((a=i.record)==null?void 0:a.sourceSentPrompt)||"",sourceSentPrompts:(d=i.record)==null?void 0:d.sourceSentPrompts,title:i.title,sentPrompt:e?i.sentPrompt:((_=i.record)==null?void 0:_.sentPrompt)||i.sentPrompt,tags:A,category:(O=i.record)==null?void 0:O.category,...e?{allowSentPromptEdit:!0}:{}}))){C.error("保存失败");return}k.trackPromptAction({action:i.mode==="create"?"create":"edit",surface:"prompt_history_tool",promptType:b(i.category),prompt:i.sentPrompt,status:"success",metadata:{tag_count:A.length,title_changed:i.mode==="edit"?i.title.trim()!==((w=i.record)==null?void 0:w.title):!!i.title.trim(),prompt_changed:i.mode==="create"||e&&i.sentPrompt.trim()!==((I=i.record)==null?void 0:I.sentPrompt)}}),C.success(i.mode==="create"?"提示词已创建":"提示词已更新"),R(null),v("reset")},[i,A,v]),L=p.useCallback(e=>{R(u=>u&&{...u,...e})},[]),Mt=p.useCallback((e,u,a)=>{e.stopPropagation(),u.length!==0&&(gt(u),yt(a),et(!0))},[]),Rt=p.useCallback(e=>{const u=e.currentTarget;u.scrollHeight-u.scrollTop-u.clientHeight<180&&m&&!D&&(k.trackPromptAction({action:"load_more",surface:"prompt_history_tool",promptType:b(n),itemCount:s.length,metadata:{has_search:h.trim().length>0,has_skill_filter:r!=="all",next_offset:P}}),v("more",P))},[n,m,v,D,P,s.length,h,r]),lt=(i==null?void 0:i.mode)==="create"||mt(i==null?void 0:i.record);return l.jsxs("div",{className:"prompt-history-tool",children:[l.jsxs("div",{className:"prompt-history-tool__toolbar",children:[l.jsxs("div",{className:"prompt-history-tool__search",children:[l.jsx(Ut,{size:14}),l.jsx("input",{value:h,onChange:bt,placeholder:"搜索标题、提示词、标签"})]}),l.jsx("button",{type:"button",className:"prompt-history-tool__icon-btn",onClick:()=>ot(),"aria-label":"新建提示词",children:l.jsx(at,{size:16})}),l.jsx("button",{type:"button",className:"prompt-history-tool__icon-btn",onClick:jt,disabled:D,"aria-label":"刷新",children:D?l.jsx(W,{size:16}):l.jsx($t,{size:16})})]}),l.jsx("div",{className:"prompt-history-tool__filters",children:Y.map(e=>l.jsx("button",{type:"button",className:n===e.value?"is-active":"",onClick:()=>vt(e.value),children:e.label},e.value))}),$.length>0&&l.jsx("div",{className:"prompt-history-tool__skill-filter",children:l.jsxs("select",{value:r,onChange:kt,children:[l.jsx("option",{value:"all",children:"全部 Skill"}),$.map(e=>l.jsx("option",{value:e,children:e},e))]})}),l.jsxs("div",{className:"prompt-history-tool__summary",children:[l.jsx("span",{children:xt}),N.length>0&&l.jsxs("button",{type:"button",className:"prompt-history-tool__delete-btn",onClick:St,children:[l.jsx(zt,{size:14}),"删除 ",N.length," 条"]}),B==="reset"&&l.jsx(W,{size:14,className:"prompt-history-tool__summary-loading"})]}),l.jsxs("div",{className:"prompt-history-tool__table-wrap",onScroll:Rt,children:[l.jsxs("table",{className:"prompt-history-tool__table",children:[l.jsx("thead",{children:l.jsxs("tr",{children:[l.jsx("th",{className:"prompt-history-tool__col-select",children:l.jsx("input",{type:"checkbox","aria-label":"选择已加载提示词",checked:_t,onChange:e=>Ct(e.target.checked)})}),l.jsx("th",{className:"prompt-history-tool__col-type",children:"类型"}),l.jsx("th",{className:"prompt-history-tool__col-title",children:"标题"}),l.jsx("th",{children:"发送提示词"}),l.jsx("th",{className:"prompt-history-tool__col-tags",children:"标签"}),l.jsx("th",{className:"prompt-history-tool__col-result",children:"结果"}),l.jsx("th",{className:"prompt-history-tool__col-time",children:"时间"}),l.jsx("th",{className:"prompt-history-tool__col-actions",children:"操作"})]})}),l.jsx("tbody",{children:s.map(e=>{const u=fe(e);return l.jsxs("tr",{className:M.has(e.id)?"is-selected":"",children:[l.jsx("td",{children:l.jsx("input",{type:"checkbox","aria-label":`选择 ${e.title}`,checked:M.has(e.id),onMouseDown:wt,onClick:a=>a.stopPropagation(),onChange:a=>Tt(e.id,a.target.checked,a.nativeEvent instanceof MouseEvent?a.nativeEvent.shiftKey:!1)})}),l.jsx("td",{children:l.jsx("span",{className:`prompt-history-tool__type prompt-history-tool__type--${e.category}`,children:me(e.category)})}),l.jsxs("td",{children:[l.jsx("div",{className:"prompt-history-tool__title",children:e.title}),e.initialPrompt!==e.sentPrompt&&l.jsxs("div",{className:"prompt-history-tool__subtext",children:["初始:",e.initialPrompt]}),e.sourceSentPrompt!==e.sentPrompt&&l.jsxs("div",{className:"prompt-history-tool__subtext",children:["原始:",e.sourceSentPrompt]})]}),l.jsx("td",{children:l.jsx(it,{placement:"left",delay:120,overlayClassName:"prompt-history-tool__prompt-popover",content:l.jsx("div",{className:"prompt-history-tool__prompt-full",children:e.sentPrompt}),children:l.jsx("button",{type:"button",className:"prompt-history-tool__prompt",onClick:a=>Nt(e,a),"aria-label":`复制提示词:${e.title}`,children:e.sentPrompt})})}),l.jsx("td",{children:l.jsx("div",{className:"prompt-history-tool__tags",children:e.tags.map(a=>l.jsx("span",{children:a},a))})}),l.jsx("td",{children:u.length>0?l.jsxs("div",{className:"prompt-history-tool__media-grid",children:[u.slice(0,4).map((a,d)=>l.jsx(it,{placement:"left",delay:80,overlayClassName:"prompt-history-tool__media-popover",content:a.type==="video"?l.jsx("video",{src:a.url,poster:a.posterUrl,controls:!0,muted:!0,preload:"metadata"}):l.jsx(ct,{src:a.posterUrl||a.url,alt:a.title||e.title,showSkeleton:!1,eager:!0}),children:l.jsx("button",{type:"button",className:"prompt-history-tool__media-thumb",onClick:_=>Mt(_,u,d),children:a.type==="video"?l.jsx(Gt,{src:a.url,poster:a.posterUrl,alt:a.title||e.title,thumbnailSize:"small",activateVideoOnClick:!1}):l.jsx(ct,{src:a.posterUrl||a.url,alt:a.title||e.title,showSkeleton:!1,eager:!0})})},a.id||a.url)),e.resultCount>4&&l.jsxs("span",{className:"prompt-history-tool__media-count",children:["+",e.resultCount-4]})]}):l.jsx("div",{className:"prompt-history-tool__result-text",children:he(e.resultPreview)})}),l.jsx("td",{children:de(e.createdAt)}),l.jsx("td",{children:l.jsxs("div",{className:"prompt-history-tool__actions",children:[l.jsx("button",{type:"button",className:"prompt-history-tool__create-btn",onClick:a=>ot(e,a),"aria-label":`基于 ${e.title} 创建`,children:l.jsx(at,{size:15})}),l.jsx("button",{type:"button",className:"prompt-history-tool__edit-btn",onClick:a=>At(e,a),"aria-label":`编辑 ${e.title}`,children:l.jsx(Bt,{size:15})}),l.jsx("button",{type:"button",className:`prompt-history-tool__pin-btn ${e.pinned?"is-pinned":""}`,onClick:a=>It(e,a),"aria-label":e.pinned?"取消置顶":"置顶",children:e.pinned?l.jsx(Ft,{size:15}):l.jsx(Vt,{size:15})})]})})]},e.id)})})]}),!D&&s.length===0&&l.jsx("div",{className:"prompt-history-tool__empty",children:"暂无我的提示词"}),B==="more"&&l.jsxs("div",{className:"prompt-history-tool__loading-more",children:[l.jsx(W,{size:14}),"加载中..."]}),!m&&s.length>0&&l.jsx("div",{className:"prompt-history-tool__done",children:"已加载全部"})]}),l.jsxs("div",{className:"prompt-history-tool__footer",children:[l.jsxs("div",{className:"prompt-history-tool__hint",children:[l.jsx(Kt,{size:13}),"点击提示词复制,勾选列选择,Shift 连选"]}),l.jsx("span",{children:m?"向下滚动自动加载":"没有更多了"})]}),l.jsx(Qt,{visible:Pt,items:tt,initialIndex:ft,onClose:()=>et(!1),showThumbnails:tt.length>1,videoAutoPlay:!0}),i&&l.jsx("div",{className:"prompt-history-tool__edit-mask",role:"presentation",onMouseDown:G,children:l.jsxs("form",{className:"prompt-history-tool__edit-dialog",onMouseDown:e=>e.stopPropagation(),onSubmit:e=>{e.preventDefault(),Et()},children:[l.jsxs("div",{className:"prompt-history-tool__edit-header",children:[l.jsxs("div",{children:[l.jsx("h3",{children:i.mode==="create"?"创建提示词":"编辑提示词"}),l.jsx("p",{children:i.mode==="create"?"填写类型、置顶、标题、发送提示词和标签":lt?"修改标题、发送提示词和标签":"修改标题和标签,发送提示词保持不变"})]}),l.jsx("button",{type:"button",className:"prompt-history-tool__edit-close",onClick:G,"aria-label":"关闭编辑弹窗",children:"×"})]}),i.mode==="create"&&l.jsxs("div",{className:"prompt-history-tool__field-row",children:[l.jsxs("label",{className:"prompt-history-tool__field",children:[l.jsx("span",{children:"类型"}),l.jsx("select",{value:i.category,onChange:e=>L({category:e.target.value}),children:Y.filter(e=>e.value!=="all").map(e=>l.jsx("option",{value:e.value,children:e.label},e.value))})]}),l.jsxs("label",{className:"prompt-history-tool__switch-field",children:[l.jsx("input",{type:"checkbox",checked:i.pinned,onChange:e=>L({pinned:e.target.checked})}),l.jsx("span",{children:"置顶"})]})]}),l.jsxs("label",{className:"prompt-history-tool__field",children:[l.jsx("span",{children:"标题"}),l.jsx("input",{value:i.title,onChange:e=>L({title:e.target.value}),maxLength:80,placeholder:"输入标题"})]}),l.jsxs("label",{className:"prompt-history-tool__field",children:[l.jsx("span",{children:"发送提示词"}),l.jsx("textarea",{value:i.sentPrompt,onChange:e=>L({sentPrompt:e.target.value}),readOnly:!lt,rows:8,maxLength:2e3,placeholder:"输入发送提示词"})]}),l.jsxs("label",{className:"prompt-history-tool__field",children:[l.jsx("span",{children:"标签"}),l.jsx("textarea",{className:"prompt-history-tool__tags-input",value:i.tagsInput,onChange:e=>L({tagsInput:e.target.value}),rows:2,placeholder:"多个标签用逗号或换行分隔"})]}),A.length>0&&l.jsx("div",{className:"prompt-history-tool__edit-tags",children:A.map(e=>l.jsx("span",{children:e},e))}),l.jsxs("div",{className:"prompt-history-tool__edit-footer",children:[l.jsx("button",{type:"button",onClick:G,children:"取消"}),l.jsx("button",{type:"submit",className:"is-primary",children:"保存"})]})]})})]})};export{_e as PromptHistoryTool,_e as default};
@@ -1 +1 @@
1
- import{r as s,ec as re,M as v,kV as le,kW as se,ef as Y,eg as ce,j as t,b7 as ie,eK as oe,er as R,eu as K,dk as q,X as de}from"./startup-app-eD_rQhSh.js";import{M as ue}from"./tool-windows-CmgL3thd.js";const ge=({images:o,onImagesChange:m,language:F="zh",disabled:f=!1,multiple:g=!0,maxCount:h=10,label:z,slotLabels:p,onError:c})=>{const[B,M]=s.useState(!1),[S,C]=s.useState(!1),[j,A]=s.useState(0),[b,I]=s.useState(null),N=s.useRef(null),P=s.useRef(null),{addAsset:L}=re(),u={zh:{local:"本地",library:"素材库",dragHint:"拖拽图片到此处",pasteHint:"或 Ctrl+V 粘贴",invalidFile:"请上传图片文件",fileTooLarge:"图片大小不能超过 25MB",someFilesInvalid:"部分文件格式不支持或超过25MB限制",loadFailed:"加载图片失败",maxCountReached:"最多上传 {count} 张图片"},en:{local:"Local",library:"Library",dragHint:"Drop images here",pasteHint:"or Ctrl+V to paste",invalidFile:"Please upload image files",fileTooLarge:"Image size cannot exceed 25MB",someFilesInvalid:"Some files are not supported or exceed 25MB limit",loadFailed:"Failed to load image",maxCountReached:"Maximum {count} images allowed"}}[F],$=s.useCallback(e=>e.type.startsWith("image/")?e.size>25*1024*1024?(v.error(u.fileTooLarge),!1):!0:(v.error(u.invalidFile),!1),[u]),T=s.useCallback((e,a)=>new Promise((n,l)=>{const i=new FileReader;i.onload=()=>{n({url:i.result,name:a,file:(e instanceof File,e)})},i.onerror=l,i.readAsDataURL(e)}),[]),x=s.useCallback(async(e,a)=>{const l=Array.from(e).filter($);if(l.length===0)return;g&&o.length+l.length>h&&(v.warning(u.maxCountReached.replace("{count}",String(h))),l.splice(h-o.length));const i=[];for(const r of l)try{let d=r;if(r.size>10*1024*1024){const _=le(r.size/1048576),y=v.loading({content:F==="zh"?`正在压缩图片 (${(r.size/1024/1024).toFixed(1)}MB)...`:`Compressing image (${(r.size/1024/1024).toFixed(1)}MB)...`,duration:0,placement:"top"});try{d=await se(r,_.targetSizeMB),v.close(y),v.success({content:F==="zh"?`压缩完成: ${(r.size/1024/1024).toFixed(1)}MB → ${(d.size/1024/1024).toFixed(1)}MB`:`Compressed: ${(r.size/1024/1024).toFixed(1)}MB → ${(d.size/1024/1024).toFixed(1)}MB`,duration:2})}catch(D){v.close(y),console.error("[ReferenceImageUpload] Compression failed:",D),c==null||c(F==="zh"?"图片压缩失败":"Image compression failed");continue}}i.push({blob:d,name:r.name})}catch(d){console.error("[ReferenceImageUpload] Error processing file:",d),c==null||c(u.loadFailed);continue}if(i.length!==0){i.forEach(({blob:r,name:d})=>{L(r,Y.IMAGE,ce.LOCAL,d).catch(_=>{console.warn("[ReferenceImageUpload] Failed to add asset to library:",_)})});try{const r=await Promise.all(i.map(({blob:d,name:_})=>T(d,_)));if(p&&a!==void 0){const d=[...o];d[a]=r[0],m(d.filter(Boolean))}else m(g?[...o,...r]:r.slice(0,1));c==null||c(null)}catch(r){console.error("[ReferenceImageUpload] Failed to process files:",r),c==null||c(u.loadFailed)}}},[o,g,h,p,F,$,T,L,m,c,u]),J=s.useCallback(e=>{const a=e.target.files;a&&a.length>0&&x(a,p?j:void 0),e.target.value=""},[x,p,j]),Q=s.useCallback(async e=>{try{const n=await(await fetch(e.url)).blob(),l=new FileReader;l.onload=()=>{const i={url:l.result,name:e.name};if(p){const r=[...o];r[j]=i,m(r.filter(Boolean))}else if(g){if(o.length>=h){v.warning(u.maxCountReached.replace("{count}",String(h)));return}m([...o,i])}else m([i]);M(!1),c==null||c(null)},l.readAsDataURL(n)}catch(a){console.error("[ReferenceImageUpload] Failed to convert asset to base64:",a),c==null||c(u.loadFailed),M(!1)}},[o,g,h,p,j,m,c,u]),U=s.useCallback(e=>{e.preventDefault(),e.stopPropagation(),f||C(!0)},[f]),O=s.useCallback(e=>{var n;e.preventDefault(),e.stopPropagation();const a=(n=N.current)==null?void 0:n.getBoundingClientRect();if(a){const{clientX:l,clientY:i}=e;(l<a.left||l>a.right||i<a.top||i>a.bottom)&&C(!1)}},[]),H=s.useCallback(e=>{e.preventDefault(),e.stopPropagation()},[]),G=s.useCallback((e,a)=>{if(e.preventDefault(),e.stopPropagation(),C(!1),f)return;const n=e.dataTransfer.files;n&&n.length>0&&x(n,a)},[f,x]);s.useEffect(()=>{const e=async a=>{var _;if(f)return;const n=document.activeElement,l=N.current;if(!l||!(l.contains(n)||n===document.body||(n==null?void 0:n.tagName)==="BODY"))return;const r=(_=a.clipboardData)==null?void 0:_.items;if(!r)return;const d=[];for(let y=0;y<r.length;y++){const D=r[y];if(D.type.startsWith("image/")){const X=D.getAsFile();X&&d.push(X)}}d.length>0&&(a.preventDefault(),x(d))};return document.addEventListener("paste",e),()=>{document.removeEventListener("paste",e)}},[f,x]);const Z=s.useCallback(e=>{const a=o.filter((n,l)=>l!==e);I(null),m(a)},[o,m]),V=s.useCallback(e=>{var a;e!==void 0&&A(e),(a=P.current)==null||a.click()},[]),W=s.useCallback(e=>{e!==void 0&&A(e),M(!0)},[]),E=s.useCallback((e,a)=>{const n=a.currentTarget.getBoundingClientRect(),l=n.left+n.width/2,i=n.top-10;I({url:e,x:l,y:i})},[]),ee=s.useCallback(()=>{I(null)},[]),k=e=>t.jsx("div",{className:`reference-image-upload__placeholder ${S?"reference-image-upload__placeholder--dragging":""}`,onDragEnter:U,onDragLeave:O,onDragOver:H,onDrop:a=>G(a,e),children:t.jsxs("div",{className:"reference-image-upload__buttons",children:[t.jsx(R,{variant:"outline",icon:t.jsx(K,{size:16}),onClick:()=>V(e),disabled:f,"data-track":"reference_image_upload_local",className:"reference-image-upload__btn",children:u.local}),t.jsx(R,{variant:"outline",icon:t.jsx(q,{size:16}),onClick:()=>W(e),disabled:f,"data-track":"reference_image_upload_library",className:"reference-image-upload__btn",children:u.library})]})}),w=(e,a)=>t.jsxs("div",{className:"reference-image-upload__preview",onMouseEnter:n=>E(e.url,n),onMouseLeave:ee,children:[t.jsx("img",{src:e.url,alt:e.name,className:"reference-image-upload__image"}),t.jsx("button",{type:"button",className:"reference-image-upload__remove",onClick:()=>Z(a),disabled:f,"data-track":"reference_image_upload_remove",children:t.jsx(de,{size:14})}),p&&p[a]&&t.jsx("div",{className:"reference-image-upload__slot-label",children:p[a]})]},a),ae=()=>p?t.jsx("div",{className:"reference-image-upload__slots",children:p.map((e,a)=>{const n=o[a];return t.jsxs("div",{className:"reference-image-upload__slot",children:[t.jsx("div",{className:"reference-image-upload__slot-title",children:e}),n?w(n,a):t.jsx("div",{className:`reference-image-upload__slot-placeholder ${S?"reference-image-upload__slot-placeholder--dragging":""}`,onDragEnter:U,onDragLeave:O,onDragOver:H,onDrop:l=>G(l,a),children:t.jsxs("div",{className:"reference-image-upload__slot-buttons",children:[t.jsx(R,{variant:"outline",icon:t.jsx(K,{size:16}),onClick:()=>V(a),disabled:f,"data-track":"reference_image_upload_slot_local",className:"reference-image-upload__slot-btn",children:u.local}),t.jsx(R,{variant:"outline",icon:t.jsx(q,{size:16}),onClick:()=>W(a),disabled:f,"data-track":"reference_image_upload_slot_library",className:"reference-image-upload__slot-btn",children:u.library})]})})]},a)})}):null,te=()=>{const e=g&&o.length<h;return t.jsxs("div",{className:"reference-image-upload__grid",children:[o.map((a,n)=>w(a,n)),e&&k(),o.length===0&&!e&&k()]})},ne=()=>o.length>0?t.jsxs("div",{className:"reference-image-upload__single",children:[w(o[0],0),t.jsx("div",{className:"reference-image-upload__replace",children:k()})]}):k();return t.jsxs(t.Fragment,{children:[b&&ie.createPortal(t.jsx("div",{className:"reference-image-upload__hover-preview",style:{left:`${b.x}px`,top:`${b.y}px`,transform:"translate(-50%, -100%)"},children:t.jsx("img",{src:b.url,alt:"Preview"})}),document.body),t.jsxs("div",{ref:N,className:`reference-image-upload ${f?"reference-image-upload--disabled":""}`,tabIndex:0,children:[z&&t.jsx("div",{className:"reference-image-upload__label",children:z}),t.jsx("input",{ref:P,type:"file",accept:"image/*",multiple:g&&!p,onChange:J,className:"reference-image-upload__input",disabled:f}),p?ae():g?te():ne(),B&&t.jsx(ue,{isOpen:B,onClose:()=>M(!1),mode:oe.SELECT,filterType:Y.IMAGE,onSelect:Q})]})]})};export{ge as R};
1
+ import{r as s,ec as re,M as v,kW as le,kX as se,ef as V,eg as ce,j as t,b7 as ie,eK as oe,er as R,eu as K,dk as q,X as de}from"./startup-app-M6vjXkRC.js";import{M as ue}from"./tool-windows-Cf62DjP-.js";const ge=({images:o,onImagesChange:m,language:F="zh",disabled:f=!1,multiple:g=!0,maxCount:h=10,label:z,slotLabels:p,onError:c})=>{const[B,M]=s.useState(!1),[S,C]=s.useState(!1),[j,A]=s.useState(0),[b,I]=s.useState(null),N=s.useRef(null),P=s.useRef(null),{addAsset:L}=re(),u={zh:{local:"本地",library:"素材库",dragHint:"拖拽图片到此处",pasteHint:"或 Ctrl+V 粘贴",invalidFile:"请上传图片文件",fileTooLarge:"图片大小不能超过 25MB",someFilesInvalid:"部分文件格式不支持或超过25MB限制",loadFailed:"加载图片失败",maxCountReached:"最多上传 {count} 张图片"},en:{local:"Local",library:"Library",dragHint:"Drop images here",pasteHint:"or Ctrl+V to paste",invalidFile:"Please upload image files",fileTooLarge:"Image size cannot exceed 25MB",someFilesInvalid:"Some files are not supported or exceed 25MB limit",loadFailed:"Failed to load image",maxCountReached:"Maximum {count} images allowed"}}[F],$=s.useCallback(e=>e.type.startsWith("image/")?e.size>25*1024*1024?(v.error(u.fileTooLarge),!1):!0:(v.error(u.invalidFile),!1),[u]),T=s.useCallback((e,a)=>new Promise((n,l)=>{const i=new FileReader;i.onload=()=>{n({url:i.result,name:a,file:(e instanceof File,e)})},i.onerror=l,i.readAsDataURL(e)}),[]),x=s.useCallback(async(e,a)=>{const l=Array.from(e).filter($);if(l.length===0)return;g&&o.length+l.length>h&&(v.warning(u.maxCountReached.replace("{count}",String(h))),l.splice(h-o.length));const i=[];for(const r of l)try{let d=r;if(r.size>10*1024*1024){const _=le(r.size/1048576),y=v.loading({content:F==="zh"?`正在压缩图片 (${(r.size/1024/1024).toFixed(1)}MB)...`:`Compressing image (${(r.size/1024/1024).toFixed(1)}MB)...`,duration:0,placement:"top"});try{d=await se(r,_.targetSizeMB),v.close(y),v.success({content:F==="zh"?`压缩完成: ${(r.size/1024/1024).toFixed(1)}MB → ${(d.size/1024/1024).toFixed(1)}MB`:`Compressed: ${(r.size/1024/1024).toFixed(1)}MB → ${(d.size/1024/1024).toFixed(1)}MB`,duration:2})}catch(D){v.close(y),console.error("[ReferenceImageUpload] Compression failed:",D),c==null||c(F==="zh"?"图片压缩失败":"Image compression failed");continue}}i.push({blob:d,name:r.name})}catch(d){console.error("[ReferenceImageUpload] Error processing file:",d),c==null||c(u.loadFailed);continue}if(i.length!==0){i.forEach(({blob:r,name:d})=>{L(r,V.IMAGE,ce.LOCAL,d).catch(_=>{console.warn("[ReferenceImageUpload] Failed to add asset to library:",_)})});try{const r=await Promise.all(i.map(({blob:d,name:_})=>T(d,_)));if(p&&a!==void 0){const d=[...o];d[a]=r[0],m(d.filter(Boolean))}else m(g?[...o,...r]:r.slice(0,1));c==null||c(null)}catch(r){console.error("[ReferenceImageUpload] Failed to process files:",r),c==null||c(u.loadFailed)}}},[o,g,h,p,F,$,T,L,m,c,u]),J=s.useCallback(e=>{const a=e.target.files;a&&a.length>0&&x(a,p?j:void 0),e.target.value=""},[x,p,j]),Q=s.useCallback(async e=>{try{const n=await(await fetch(e.url)).blob(),l=new FileReader;l.onload=()=>{const i={url:l.result,name:e.name};if(p){const r=[...o];r[j]=i,m(r.filter(Boolean))}else if(g){if(o.length>=h){v.warning(u.maxCountReached.replace("{count}",String(h)));return}m([...o,i])}else m([i]);M(!1),c==null||c(null)},l.readAsDataURL(n)}catch(a){console.error("[ReferenceImageUpload] Failed to convert asset to base64:",a),c==null||c(u.loadFailed),M(!1)}},[o,g,h,p,j,m,c,u]),U=s.useCallback(e=>{e.preventDefault(),e.stopPropagation(),f||C(!0)},[f]),O=s.useCallback(e=>{var n;e.preventDefault(),e.stopPropagation();const a=(n=N.current)==null?void 0:n.getBoundingClientRect();if(a){const{clientX:l,clientY:i}=e;(l<a.left||l>a.right||i<a.top||i>a.bottom)&&C(!1)}},[]),H=s.useCallback(e=>{e.preventDefault(),e.stopPropagation()},[]),X=s.useCallback((e,a)=>{if(e.preventDefault(),e.stopPropagation(),C(!1),f)return;const n=e.dataTransfer.files;n&&n.length>0&&x(n,a)},[f,x]);s.useEffect(()=>{const e=async a=>{var _;if(f)return;const n=document.activeElement,l=N.current;if(!l||!(l.contains(n)||n===document.body||(n==null?void 0:n.tagName)==="BODY"))return;const r=(_=a.clipboardData)==null?void 0:_.items;if(!r)return;const d=[];for(let y=0;y<r.length;y++){const D=r[y];if(D.type.startsWith("image/")){const Y=D.getAsFile();Y&&d.push(Y)}}d.length>0&&(a.preventDefault(),x(d))};return document.addEventListener("paste",e),()=>{document.removeEventListener("paste",e)}},[f,x]);const Z=s.useCallback(e=>{const a=o.filter((n,l)=>l!==e);I(null),m(a)},[o,m]),G=s.useCallback(e=>{var a;e!==void 0&&A(e),(a=P.current)==null||a.click()},[]),W=s.useCallback(e=>{e!==void 0&&A(e),M(!0)},[]),E=s.useCallback((e,a)=>{const n=a.currentTarget.getBoundingClientRect(),l=n.left+n.width/2,i=n.top-10;I({url:e,x:l,y:i})},[]),ee=s.useCallback(()=>{I(null)},[]),k=e=>t.jsx("div",{className:`reference-image-upload__placeholder ${S?"reference-image-upload__placeholder--dragging":""}`,onDragEnter:U,onDragLeave:O,onDragOver:H,onDrop:a=>X(a,e),children:t.jsxs("div",{className:"reference-image-upload__buttons",children:[t.jsx(R,{variant:"outline",icon:t.jsx(K,{size:16}),onClick:()=>G(e),disabled:f,"data-track":"reference_image_upload_local",className:"reference-image-upload__btn",children:u.local}),t.jsx(R,{variant:"outline",icon:t.jsx(q,{size:16}),onClick:()=>W(e),disabled:f,"data-track":"reference_image_upload_library",className:"reference-image-upload__btn",children:u.library})]})}),w=(e,a)=>t.jsxs("div",{className:"reference-image-upload__preview",onMouseEnter:n=>E(e.url,n),onMouseLeave:ee,children:[t.jsx("img",{src:e.url,alt:e.name,className:"reference-image-upload__image"}),t.jsx("button",{type:"button",className:"reference-image-upload__remove",onClick:()=>Z(a),disabled:f,"data-track":"reference_image_upload_remove",children:t.jsx(de,{size:14})}),p&&p[a]&&t.jsx("div",{className:"reference-image-upload__slot-label",children:p[a]})]},a),ae=()=>p?t.jsx("div",{className:"reference-image-upload__slots",children:p.map((e,a)=>{const n=o[a];return t.jsxs("div",{className:"reference-image-upload__slot",children:[t.jsx("div",{className:"reference-image-upload__slot-title",children:e}),n?w(n,a):t.jsx("div",{className:`reference-image-upload__slot-placeholder ${S?"reference-image-upload__slot-placeholder--dragging":""}`,onDragEnter:U,onDragLeave:O,onDragOver:H,onDrop:l=>X(l,a),children:t.jsxs("div",{className:"reference-image-upload__slot-buttons",children:[t.jsx(R,{variant:"outline",icon:t.jsx(K,{size:16}),onClick:()=>G(a),disabled:f,"data-track":"reference_image_upload_slot_local",className:"reference-image-upload__slot-btn",children:u.local}),t.jsx(R,{variant:"outline",icon:t.jsx(q,{size:16}),onClick:()=>W(a),disabled:f,"data-track":"reference_image_upload_slot_library",className:"reference-image-upload__slot-btn",children:u.library})]})})]},a)})}):null,te=()=>{const e=g&&o.length<h;return t.jsxs("div",{className:"reference-image-upload__grid",children:[o.map((a,n)=>w(a,n)),e&&k(),o.length===0&&!e&&k()]})},ne=()=>o.length>0?t.jsxs("div",{className:"reference-image-upload__single",children:[w(o[0],0),t.jsx("div",{className:"reference-image-upload__replace",children:k()})]}):k();return t.jsxs(t.Fragment,{children:[b&&ie.createPortal(t.jsx("div",{className:"reference-image-upload__hover-preview",style:{left:`${b.x}px`,top:`${b.y}px`,transform:"translate(-50%, -100%)"},children:t.jsx("img",{src:b.url,alt:"Preview"})}),document.body),t.jsxs("div",{ref:N,className:`reference-image-upload ${f?"reference-image-upload--disabled":""}`,tabIndex:0,children:[z&&t.jsx("div",{className:"reference-image-upload__label",children:z}),t.jsx("input",{ref:P,type:"file",accept:"image/*",multiple:g&&!p,onChange:J,className:"reference-image-upload__input",disabled:f}),p?ae():g?te():ne(),B&&t.jsx(ue,{isOpen:B,onClose:()=>M(!1),mode:oe.SELECT,filterType:V.IMAGE,onSelect:Q})]})]})};export{ge as R};
@@ -1 +1 @@
1
- import{r,dA as ye,j as t,d8 as oe,er as _,ba as ot,M as u,E as I,kk as ss,b$ as _e,kl as dt,y as st,gr as je,km as as,c1 as ce,i4 as rs,ck as ls,e0 as at,bg as p,dB as q,n as rt,d as lt,kn as ut,ko as is,cq as ns,kp as cs,p as os,c7 as ds,c8 as us,kq as ms,dc as ps,kr as hs,ie as fs,hy as gs,g6 as se,jh as xs,ei as vs,am as Cs,bz as ie,ks as ys,kt as _s,ha as it,jg as js,gb as nt,c as Is,gd as ct,ku as ws,aT as bs,aN as ks,aO as Ss}from"./startup-app-eD_rQhSh.js";import{T as Ds,C as Ns,u as mt,V as Es,a as Ms}from"./useCharacters-BAKE4TeJ.js";import{M as Us,U as $s}from"./ai-chat-BO5vbKZW.js";import{e as Ts,B as Ls,I as qs,m as zs,f as ne,r as Ps}from"./tool-windows-CmgL3thd.js";/* empty css */import"./startup-runtime-DTmhLESk.js";const Rs=30,Os=({onPreviewOpen:l,onDownload:f,className:n})=>{const[d,$]=r.useState([]),[T,j]=r.useState(!0),[w,b]=r.useState(!1),[z,P]=r.useState(!1),x=r.useRef(0),R=r.useRef(null),D=r.useCallback(async m=>{try{return await ye.getArchivedTasks(m,Rs)}catch{return{tasks:[],hasMore:!1}}},[]);r.useEffect(()=>{let m=!1;return j(!0),x.current=0,D(0).then(C=>{m||($(C.tasks),P(C.hasMore),x.current=C.tasks.length,j(!1))}),()=>{m=!0}},[D]);const A=r.useCallback(async()=>{if(w||!z)return;b(!0);const m=await D(x.current);$(C=>[...C,...m.tasks]),P(m.hasMore),x.current+=m.tasks.length,b(!1)},[w,z,D]);return r.useEffect(()=>{const m=R.current;if(!m)return;const C=()=>{m.scrollHeight-m.scrollTop-m.clientHeight<200&&A()};return m.addEventListener("scroll",C,{passive:!0}),()=>m.removeEventListener("scroll",C)},[A]),T?t.jsxs("div",{className:"task-queue-panel__empty",children:[t.jsx(oe,{size:"small"}),t.jsx("div",{className:"task-queue-panel__empty-text",children:"加载历史任务..."})]}):d.length===0?t.jsxs("div",{className:"task-queue-panel__empty",children:[t.jsx("div",{className:"task-queue-panel__empty-icon",children:"📦"}),t.jsx("div",{className:"task-queue-panel__empty-text",children:"暂无历史任务"})]}):t.jsxs("div",{ref:R,className:n,style:{overflow:"auto",height:"100%"},children:[d.map(m=>t.jsx(Ds,{task:m,onPreviewOpen:l?()=>l(m.id):void 0,onDownload:f},m.id)),z&&t.jsx("div",{style:{padding:"12px",textAlign:"center"},children:w?t.jsx(oe,{size:"small"}):t.jsx(_,{size:"small",variant:"text",theme:"default",onClick:A,children:"加载更多"})})]})},As=({character:l,onDelete:f,onSelect:n,compact:d=!1})=>{const[$,T]=r.useState(!1),j=l.status==="processing"||l.status==="pending",w=l.status==="failed",b=l.status==="completed",z=r.useCallback(async m=>{if(m.stopPropagation(),!l.username)return;const C=`@${l.username}`;try{await ot(C),u.success(`已复制: ${C}`)}catch(v){console.error("Failed to copy:",v),u.error("复制失败")}},[l.username]),P=r.useCallback(()=>{b&&n&&n(l)},[b,n,l]),x=r.useCallback(m=>{m.stopPropagation(),f==null||f(l.id)},[f,l.id]),R=r.useCallback(m=>{m.stopPropagation(),b&&l.profilePictureUrl&&T(!0)},[b,l.profilePictureUrl]),D=()=>l.profilePictureUrl||b?t.jsx(I,{content:"点击查看大图",children:t.jsx(Ns,{characterId:l.id,profilePictureUrl:l.profilePictureUrl,alt:l.username||"Character",className:"character-card__avatar-img",onClick:R})}):t.jsx("div",{className:"character-card__avatar-placeholder",children:t.jsx(dt,{})}),A=()=>j?t.jsxs("div",{className:"character-card__status character-card__status--processing",children:[t.jsx(oe,{size:"small"}),t.jsx("span",{children:"创建中..."})]}):w?t.jsxs("div",{className:"character-card__status character-card__status--failed",children:["创建失败: ",l.error||"未知错误"]}):null;return d?t.jsxs("div",{className:`character-card character-card--compact ${j?"character-card--loading":""} ${w?"character-card--failed":""}`,onClick:P,children:[t.jsx("div",{className:"character-card__avatar",children:D()}),t.jsx("span",{className:"character-card__username-text",children:l.username||"创建中..."})]}):t.jsxs("div",{className:`character-card ${j?"character-card--loading":""} ${w?"character-card--failed":""}`,onClick:P,children:[t.jsx("div",{className:"character-card__avatar",children:D()}),t.jsxs("div",{className:"character-card__info",children:[b&&l.username?t.jsx(I,{content:"点击复制",children:t.jsxs("div",{className:"character-card__username",onClick:z,children:["@",l.username,t.jsx(ss,{className:"character-card__username-copy"})]})}):t.jsx("div",{className:"character-card__username",style:{cursor:"default"},children:j?"创建中...":"角色"}),l.id&&t.jsx(I,{content:l.id,placement:"bottom",children:t.jsx("div",{className:"character-card__source",children:l.id})}),A()]}),t.jsx("div",{className:"character-card__actions",children:t.jsx(I,{content:"删除角色",children:t.jsx(_,{size:"small",variant:"text",theme:"danger",icon:t.jsx(_e,{}),"data-track":"character_click_delete",onClick:x})})}),l.profilePictureUrl&&t.jsx(Us,{visible:$,onClose:()=>T(!1),items:[{url:l.profilePictureUrl,type:"image",title:`@${l.username||"Character"}`}]})]})},Vs=({onSelect:l,completedOnly:f=!1,maxItems:n,showHeader:d=!0,title:$="角色列表"})=>{const{characters:T,completedCharacters:j,pendingCharacters:w,isLoading:b,deleteCharacter:z,refreshCharacters:P}=mt(),[x,R]=st.useState(null),D=st.useMemo(()=>{let v=f?j:T;return v=[...v].sort((de,ue)=>ue.createdAt-de.createdAt),n&&v.length>n&&(v=v.slice(0,n)),v},[f,T,j,n]),A=r.useCallback(v=>{R(v)},[]),m=r.useCallback(async()=>{if(!x)return;await z(x)?u.success("角色已删除"):u.error("删除失败"),R(null)},[x,z]),C=r.useCallback(async()=>{await P(),u.success("已刷新")},[P]);return b?t.jsxs("div",{className:"character-list__loading",children:[t.jsx(oe,{size:"small"}),t.jsx("span",{children:"加载中..."})]}):D.length===0?t.jsxs("div",{className:"character-list",children:[d&&t.jsxs("div",{className:"character-list__header",children:[t.jsx("h4",{children:$}),t.jsx(_,{size:"small",variant:"text",icon:t.jsx(je,{}),"data-track":"character_click_refresh",onClick:C})]}),t.jsxs("div",{className:"character-list__empty",children:[t.jsx("div",{className:"character-list__empty-icon",children:t.jsx(as,{})}),t.jsx("div",{children:"暂无角色"}),t.jsx("div",{style:{fontSize:"12px",marginTop:"4px",color:"#999"},children:"从已完成的 Sora-2 视频中提取角色"})]})]}):t.jsxs("div",{className:"character-list",children:[d&&t.jsxs("div",{className:"character-list__header",children:[t.jsxs("h4",{children:[$,w.length>0&&t.jsxs("span",{style:{fontWeight:"normal",fontSize:"12px",color:"#666",marginLeft:"8px"},children:["(",w.length," 创建中)"]})]}),t.jsx(_,{size:"small",variant:"text",icon:t.jsx(je,{}),"data-track":"character_click_refresh",onClick:C})]}),t.jsx("div",{className:"character-list__items",children:D.map(v=>t.jsx(As,{character:v,onDelete:A,onSelect:l},v.id))}),t.jsx(ce,{open:!!x,title:"确认删除",description:"确定要删除此角色吗?删除后将无法在提示词中使用该角色。",confirmText:"删除",cancelText:"取消",danger:!0,onOpenChange:v=>{v||R(null)},onConfirm:m})]})},{TabPanel:te}=ut,Fs="task-queue-drawer-width";function Gs(l){var f,n,d;return Array.isArray((f=l.result)==null?void 0:f.urls)&&l.result.urls.length>0?l.result.urls.length:(n=l.result)!=null&&n.url||(d=l.result)!=null&&d.chatResponse||se(l)?1:0}function Bs(l){const f=Gs(l);return{taskId:l.id,taskType:l.type,taskStatus:l.status,model:typeof l.params.model=="string"&&l.params.model.trim()?l.params.model:void 0,resultCount:f||void 0,hasMultipleResults:f>1}}const Xs=({expanded:l,onClose:f,onTaskAction:n})=>{const{tasks:d,activeTasks:$,completedTasks:T,failedTasks:j,cancelledTasks:w,isLoading:b,isLoadingMore:z,hasMore:P,totalCount:x,loadedCount:R,loadMore:D,retryTask:A,deleteTask:m,clearCompleted:C,clearFailed:v,batchDeleteTasks:de,batchRetryTasks:ue,batchCancelTasks:pt}=rs(),{board:G,openDialog:Ie}=ls(),{characters:we}=mt(),[O,ht]=r.useState("all"),[ft,me]=r.useState(!1),[be,gt]=r.useState("completed"),[ae,xt]=r.useState(""),[k,Y]=r.useState("all"),[Hs,ke]=r.useState(null),[vt,pe]=r.useState(!1),[Ct,yt]=r.useState(0),[_t,jt]=r.useState("single"),[Se,he]=r.useState(!1),[De,fe]=r.useState(""),[It,ge]=r.useState(!1),[xe,Ne]=r.useState(null),[Ee,ve]=r.useState(null),[B,ee]=r.useState(!1),[g,Q]=r.useState(new Set),[wt,Ce]=r.useState(!1),[Me,Ue]=r.useState(null),{isConfigured:bt}=Ts(),[re,$e]=r.useState(!1),[kt,le]=r.useState(0),Te=k==="character";r.useEffect(()=>{at.initCacheStatus()},[]),r.useEffect(()=>{if(!l)return;let s=!1;return ye.getArchivedTaskCount().then(e=>{s||Ue(e)}).catch(()=>{s||Ue(0)}),()=>{s=!0}},[l,O]);const H=r.useMemo(()=>{let s;switch(O){case"all":s=d;break;case"active":s=$;break;case"completed":s=T;break;case"failed":s=j;break;case"cancelled":s=w;break;case"archived":return[];default:s=d}if(k!=="all"&&k!=="character"&&(s=s.filter(e=>e.type===(k==="image"?p.IMAGE:k==="audio"?p.AUDIO:k==="text"?p.CHAT:p.VIDEO))),ae.trim()){const e=ae.toLowerCase().trim();s=s.filter(a=>{var o,y,L,W,K;return a.params.prompt.toLowerCase().includes(e)||String(((o=a.result)==null?void 0:o.title)||"").toLowerCase().includes(e)||String(((y=a.result)==null?void 0:y.lyricsTitle)||"").toLowerCase().includes(e)||String(((L=a.result)==null?void 0:L.lyricsText)||"").toLowerCase().includes(e)||String(((W=a.result)==null?void 0:W.chatResponse)||"").toLowerCase().includes(e)||(((K=a.result)==null?void 0:K.lyricsTags)||[]).some(c=>String(c).toLowerCase().includes(e))})}return[...s].sort((e,a)=>a.createdAt-e.createdAt)},[O,d,$,T,j,w,k,ae]),St=s=>{gt(s),me(!0)},Dt=()=>{be==="completed"?C():v(),me(!1)},Nt=s=>{A(s),n==null||n("retry",s)},Et=s=>{Ne(s),ge(!0)},Mt=()=>{xe&&(m(xe),n==null||n("delete",xe)),ge(!1),Ne(null)},Ut=()=>{B?(ee(!1),Q(new Set)):ee(!0)},$t=(s,e)=>{Q(a=>{const o=new Set(a);return e?o.add(s):o.delete(s),o})},Tt=()=>{const s=H.map(e=>e.id);Q(new Set(s))},Lt=()=>{Q(new Set)},qt=()=>{g.size!==0&&Ce(!0)},zt=()=>{de(Array.from(g)),Q(new Set),ee(!1),Ce(!1),u.success(`已删除 ${g.size} 个任务`)},Pt=()=>{const s=Array.from(g).filter(e=>{const a=d.find(o=>o.id===e);return(a==null?void 0:a.status)===q.FAILED||(a==null?void 0:a.status)===q.CANCELLED});if(s.length===0){u.warning("没有可重试的任务");return}ue(s),Q(new Set),ee(!1),u.success(`已重试 ${s.length} 个任务`)},Le=r.useMemo(()=>Array.from(g).filter(s=>{const e=d.find(a=>a.id===s);return(e==null?void 0:e.status)===q.FAILED||(e==null?void 0:e.status)===q.CANCELLED}).length,[g,d]),qe=r.useMemo(()=>Array.from(g).filter(s=>{const e=d.find(a=>a.id===s);return(e==null?void 0:e.status)===q.PENDING||(e==null?void 0:e.status)===q.PROCESSING}).length,[g,d]),ze=r.useMemo(()=>Array.from(g).filter(s=>{const e=d.find(a=>a.id===s);return(e==null?void 0:e.status)===q.COMPLETED&&((e==null?void 0:e.type)===p.IMAGE||(e==null?void 0:e.type)===p.VIDEO)}).length,[g,d]),Z=r.useMemo(()=>({all:d.length,image:d.filter(s=>s.type===p.IMAGE).length,video:d.filter(s=>s.type===p.VIDEO).length,audio:d.filter(s=>s.type===p.AUDIO).length,text:d.filter(s=>s.type===p.CHAT).length,character:we.length}),[d,we]),Rt=()=>{const s=Array.from(g).filter(e=>{const a=d.find(o=>o.id===e);return(a==null?void 0:a.status)===q.PENDING||(a==null?void 0:a.status)===q.PROCESSING});if(s.length===0){u.warning("没有可取消的进行中任务");return}pt(s),Q(new Set),ee(!1),u.success(`已取消 ${s.length} 个任务`)},Ot=async()=>{const s=Array.from(g).filter(e=>{const a=d.find(o=>o.id===e);return(a==null?void 0:a.status)===q.COMPLETED&&((a==null?void 0:a.type)===p.IMAGE||(a==null?void 0:a.type)===p.VIDEO)});if(!(s.length===0||re)){$e(!0),le(0);try{const e=await zs.syncMultipleTasks(s,(a,o)=>{le(Math.round(a/o*100))});le(100),e.succeeded>0&&u.success(`已同步 ${e.succeeded} 个任务`),e.failed>0&&u.warning(`${e.failed} 个任务同步失败`)}catch(e){console.error("[TaskQueuePanel] Batch sync failed:",e),u.error("同步失败,请稍后重试")}finally{$e(!1),le(0)}}},Pe=async s=>{const e=d.find(o=>o.id===s);if(e&&se(e)){u.info("歌词任务支持复制或插入画布");return}if(!e)return;const a=xs(e);if(a.length!==0)try{const o=await vs(a);o.openedCount>0&&o.downloadedCount===0?u.success(o.openedCount>1?`已打开 ${o.openedCount} 个链接,请在新标签页下载`:"资源不支持直接下载,已打开链接"):u.success(e.type===p.AUDIO?a.length>1?"多条音频已开始下载":"音频下载成功":a.length>1?"多图已开始下载":"下载成功"),Cs.track("generation_result_download",{...Bs(e),downloadedCount:o.downloadedCount,openedCount:o.openedCount}),n==null||n("download",s)}catch(o){console.error("Download failed:",o),u.error("下载失败,请稍后重试")}},At=async s=>{const e=d.find(o=>o.id===s);if(!e||!se(e)){u.warning("暂无可复制的歌词");return}const a=nt(e);if(!a.trim()){u.warning("暂无可复制的歌词");return}try{await ot(a),u.success("歌词已复制"),n==null||n("copy",s)}catch(o){console.error("Failed to copy lyrics:",o),u.error("复制失败,请稍后重试")}},Vt=async s=>{var a,o,y,L,W,K,c,J,V,X,S,N;const e=d.find(i=>i.id===s);if(!e||!G){console.warn("Cannot insert: task result or board not available"),u.warning("无法插入:白板未就绪");return}if(!((a=e.result)!=null&&a.url)&&!((y=(o=e.result)==null?void 0:o.urls)!=null&&y.length)&&!se(e)){const i=e.type===p.CHAT?(L=e.result)==null?void 0:L.chatResponse:void 0;if(i!=null&&i.trim()){const h=(e.params.prompt||"").slice(0,20)||void 0;await ne({items:[{type:"text",content:i,label:h}]}),u.success("文本已插入到白板"),ie.markAsInserted(s,"manual"),n==null||n("insert",s);return}console.warn("Cannot insert: task result is empty"),u.warning("无法插入:任务结果为空");return}try{const i=e.result;if(e.type===p.IMAGE){const h=(W=i.urls)!=null&&W.length?i.urls:[i.url];for(const E of h)await lt(G,rt(E));u.success(h.length>1?"多图已插入到白板":"图片已插入到白板")}else if(e.type===p.VIDEO)await Is(G,i.url),u.success("视频已插入到白板");else if(e.type===p.AUDIO){if(se(e)){const F=ct(i,e.params.title||e.params.prompt)||(e.params.prompt||"").slice(0,20)||void 0;await ne({items:[{type:"text",content:nt(e),label:F,metadata:{title:ct(i,e.params.title||e.params.prompt),tags:ws(i)}}]}),u.success("歌词已插入到白板"),ie.markAsInserted(s,"manual"),n==null||n("insert",s);return}const h=Ps(i),E=(c=(K=i.clips)==null?void 0:K[0])==null?void 0:c.duration,M={title:i.title||e.params.title||e.params.prompt,duration:typeof E=="number"?E:i.duration,previewImageUrl:i.previewImageUrl,tags:typeof e.params.tags=="string"?e.params.tags:void 0,mv:typeof e.params.mv=="string"?e.params.mv:void 0,prompt:e.params.prompt,providerTaskId:i.providerTaskId||e.remoteId,clipId:i.primaryClipId||((V=(J=i.clips)==null?void 0:J[0])==null?void 0:V.clipId)||((S=(X=i.clips)==null?void 0:X[0])==null?void 0:S.id)||((N=i.clipIds)==null?void 0:N[0]),clipIds:i.clipIds};h.length===1?await bs(G,h[0],M):await ne({items:h.map((F,U)=>{var Fe,Ge,Be,He,We,Ke,Qe,Ye,Ze,Je,Xe,et,tt;return{type:"audio",content:F,groupId:`task-audio-${e.id}`,dimensions:{width:Ss,height:ks},metadata:{...M,title:((Ge=(Fe=i.clips)==null?void 0:Fe[U])==null?void 0:Ge.title)||`${M.title||"Audio"} ${U+1}`,previewImageUrl:((He=(Be=i.clips)==null?void 0:Be[U])==null?void 0:He.imageLargeUrl)||((Ke=(We=i.clips)==null?void 0:We[U])==null?void 0:Ke.imageUrl)||M.previewImageUrl,duration:typeof((Ye=(Qe=i.clips)==null?void 0:Qe[U])==null?void 0:Ye.duration)=="number"?i.clips[U].duration||void 0:M.duration,clipId:((Je=(Ze=i.clips)==null?void 0:Ze[U])==null?void 0:Je.clipId)||((et=(Xe=i.clips)==null?void 0:Xe[U])==null?void 0:et.id)||((tt=i.clipIds)==null?void 0:tt[U])||M.clipId}}})}),u.success(h.length>1?"多条音频卡片已插入到白板":"音频卡片已插入到白板")}else if(e.type===p.CHAT){const h=i.chatResponse||"",E=(e.params.prompt||"").slice(0,20)||void 0;await ne({items:[{type:"text",content:h,label:E}]}),u.success("文本已插入到白板")}ie.markAsInserted(s,"manual"),n==null||n("insert",s)}catch(i){console.error("Failed to insert to board:",i),u.error(`插入失败: ${i instanceof Error?i.message:"未知错误"}`)}},Ft=async s=>{const e=await ye.getTask(s)||ie.getTask(s)||d.find(a=>a.id===s);if(!e||e.type!==p.IMAGE){u.warning("未找到可回填的图片任务");return}ys({..._s(e),source:"task-queue"}),n==null||n("regenerate",s)},Gt=s=>{var a,o;const e=d.find(y=>y.id===s);if(!e){console.warn("Cannot edit: task not found");return}if(e.type===p.IMAGE)Ie(it.aiImageGeneration,js(e));else if(e.type===p.VIDEO){const y={initialPrompt:e.params.prompt,initialDuration:typeof e.params.seconds=="string"?parseInt(e.params.seconds,10):e.params.seconds,initialModel:e.params.model,initialSize:e.params.size,initialImages:e.params.uploadedImages,initialResultUrl:(a=e.result)==null?void 0:a.url,initialResultUrls:(o=e.result)==null?void 0:o.urls};Ie(it.aiVideoGeneration,y)}else if(e.type===p.AUDIO){u.info("音频任务暂不支持从任务面板直接编辑");return}n==null||n("edit",s)},Bt=s=>{const e=d.find(a=>a.id===s);e&&(ve(e),n==null||n("extractCharacter",s))},Re=r.useMemo(()=>{const s=new Set;return H.filter(e=>{var a,o,y,L;return e.status!==q.COMPLETED||!((a=e.result)!=null&&a.url)&&!((y=(o=e.result)==null?void 0:o.urls)!=null&&y.length)||e.type!==p.IMAGE&&e.type!==p.VIDEO&&!(e.type===p.AUDIO&&((L=e.result)==null?void 0:L.resultKind)!=="lyrics")||s.has(e.id)?!1:(s.add(e.id),!0)})},[H]),{previewMediaItems:Ht,taskIdToPreviewConfig:Oe}=r.useMemo(()=>{var a,o,y,L,W,K;const s=[],e=new Map;for(const c of Re){const J=s.length,V=((a=c.result)==null?void 0:a.title)||c.params.title||((o=c.params.prompt)==null?void 0:o.substring(0,50))||"媒体预览";if(c.type===p.AUDIO){const S=((L=(y=c.result)==null?void 0:y.clips)==null?void 0:L.filter(h=>!!h.audioUrl).map((h,E)=>{var M,F,U;return{id:h.clipId||h.id||`${c.id}-${E}`,url:h.audioUrl,type:"audio",title:h.title||((M=c.result)!=null&&M.clips&&c.result.clips.length>1?`${V} (${E+1}/${c.result.clips.length})`:V),posterUrl:h.imageLargeUrl||h.imageUrl||((F=c.result)==null?void 0:F.previewImageUrl),duration:typeof h.duration=="number"?h.duration:(U=c.result)==null?void 0:U.duration,prompt:c.params.prompt,tags:typeof c.params.tags=="string"?c.params.tags:void 0,artist:c.params.model||c.params.mv||"Aitu",album:"Aitu Generated"}}))??[],N=(W=c.result.urls)!=null&&W.length?c.result.urls:c.result.url?[c.result.url]:[],i=S.length>0?S:N.map((h,E)=>{var M,F;return{id:N.length>1?`${c.id}-${E}`:c.id,url:h,type:"audio",title:N.length>1?`${V} (${E+1}/${N.length})`:V,posterUrl:(M=c.result)==null?void 0:M.previewImageUrl,duration:(F=c.result)==null?void 0:F.duration,prompt:c.params.prompt,tags:typeof c.params.tags=="string"?c.params.tags:void 0,artist:c.params.model||c.params.mv||"Aitu",album:"Aitu Generated"}});s.push(...i)}else{const S=(K=c.result.urls)!=null&&K.length?c.result.urls:[c.result.url],N=c.type===p.VIDEO?"video":"image";for(let i=0;i<S.length;i++){const h=N==="image"?rt(S[i]):S[i];s.push({id:S.length>1?`${c.id}-${i}`:c.id,url:h,type:N,title:S.length>1?`${V} (${i+1}/${S.length})`:V})}}const X=s.length-J;e.set(c.id,{mode:c.type===p.AUDIO&&X>1?"compare":"single",index:c.type===p.AUDIO&&X>1?Array.from({length:Math.min(X,4)},(S,N)=>J+N):J})}return{previewMediaItems:s,taskIdToPreviewConfig:e}},[Re]),Ae=r.useCallback(s=>{ke(s);const e=Oe.get(s);e!==void 0&&(jt(e.mode),yt(e.index),pe(!0))},[Oe]),Wt=r.useCallback(()=>{ke(null),pe(!1)},[]),Kt=r.useCallback(s=>{s.type==="image"&&(fe(s.url),he(!0),pe(!1))},[]),Qt=r.useCallback(async s=>{if(G)try{const e=`edited-image-${Date.now()}`,a=`/__aitu_cache__/image/${e}.png`,y=await(await fetch(s)).blob();await at.cacheMediaFromBlob(a,y,"image",{taskId:e}),await lt(G,a),he(!1),fe("")}catch(e){console.error("Failed to insert edited image:",e)}},[G]),Yt=r.useCallback(()=>{f==null||f()},[f]),Zt=x>0?x:d.length,Ve="这里只显示最近 100 个任务,更早的任务会自动移到“历史”中继续保留。",Jt=t.jsx(I,{content:Ve,children:t.jsxs("span",{children:["全部 (",Zt,")"]})}),Xt=Me===null?"历史":`历史 (${Me})`,es=x>=100?`已加载最近 ${x} 个任务,较早任务已移至“历史”`:`已加载全部 ${x} 个任务`,ts=t.jsxs("div",{className:"task-queue-panel__filters-container",children:[t.jsxs(ut,{value:O,onChange:s=>ht(s),children:[t.jsx(te,{value:"all",label:Jt}),t.jsx(te,{value:"active",label:`生成中 (${$.length})`}),t.jsx(te,{value:"failed",label:`失败 (${j.length})`}),t.jsx(te,{value:"completed",label:`已完成 (${T.length})`}),t.jsx(te,{value:"archived",label:Xt})]}),O!=="archived"&&t.jsxs("div",{className:"task-queue-panel__filters",children:[t.jsxs("div",{className:"task-queue-panel__type-filters",children:[t.jsx(I,{content:`全部 (${Z.all})`,children:t.jsx(_,{size:"small",variant:"text",shape:"square",onClick:()=>Y("all"),className:k==="all"?"task-queue-panel__filter-btn--active":"",children:t.jsx(is,{size:"16px"})})}),t.jsx(I,{content:`图片 (${Z.image})`,children:t.jsx(_,{size:"small",variant:"text",shape:"square",onClick:()=>Y("image"),className:k==="image"?"task-queue-panel__filter-btn--active":"",children:t.jsx(ns,{size:"16px"})})}),t.jsx(I,{content:`视频 (${Z.video})`,children:t.jsx(_,{size:"small",variant:"text",shape:"square",onClick:()=>Y("video"),className:k==="video"?"task-queue-panel__filter-btn--active":"",children:t.jsx(cs,{size:"16px"})})}),t.jsx(I,{content:`音频 (${Z.audio})`,children:t.jsx(_,{size:"small",variant:"text",shape:"square",onClick:()=>Y("audio"),className:k==="audio"?"task-queue-panel__filter-btn--active":"",children:t.jsx(os,{size:16,strokeWidth:1.9})})}),t.jsx(I,{content:`文本 (${Z.text})`,children:t.jsx(_,{size:"small",variant:"text",shape:"square",onClick:()=>Y("text"),className:k==="text"?"task-queue-panel__filter-btn--active":"",children:"文"})}),t.jsx(I,{content:`角色 (${Z.character})`,children:t.jsx(_,{size:"small",variant:"text",shape:"square",onClick:()=>Y("character"),className:k==="character"?"task-queue-panel__filter-btn--active":"",children:t.jsx(dt,{size:"16px"})})})]}),t.jsxs("div",{className:"task-queue-panel__search-row",children:[t.jsx(ds,{value:ae,onChange:s=>xt(s),placeholder:"搜索...",clearable:!0,prefixIcon:t.jsx(us,{}),size:"small",className:"task-queue-panel__search-input"}),t.jsxs("div",{className:"task-queue-panel__filter-actions",children:[t.jsx(I,{content:B?"退出多选":"批量操作",children:t.jsx(_,{size:"small",variant:B?"base":"outline",theme:B?"primary":"default",icon:t.jsx(ms,{}),"data-track":"task_click_toggle_selection",onClick:Ut,children:B?"退出":"多选"})}),j.length>0&&!B&&t.jsx(I,{content:"清除失败",children:t.jsx(_,{size:"small",variant:"text",theme:"default",icon:t.jsx(_e,{style:{color:"var(--td-text-color-placeholder)"}}),"data-track":"task_click_clear_failed",onClick:()=>St("failed"),className:"task-queue-panel__clear-btn"})})]})]})]}),B&&!Te&&t.jsxs("div",{className:"task-queue-panel__batch-actions",children:[t.jsxs("div",{className:"task-queue-panel__batch-select",children:[t.jsx(ps,{checked:g.size===H.length&&H.length>0,indeterminate:g.size>0&&g.size<H.length,onChange:s=>s?Tt():Lt()}),t.jsxs("span",{className:"task-queue-panel__batch-count",children:["已选 ",g.size," / ",H.length]})]}),t.jsxs("div",{className:"task-queue-panel__batch-buttons",children:[qe>0&&t.jsxs(_,{size:"small",variant:"outline",theme:"warning",icon:t.jsx(hs,{}),"data-track":"task_click_batch_cancel",onClick:Rt,children:["取消 (",qe,")"]}),Le>0&&t.jsxs(_,{size:"small",theme:"primary",icon:t.jsx(je,{}),"data-track":"task_click_batch_retry",onClick:Pt,children:["重试 (",Le,")"]}),bt&&ze>0&&t.jsx(I,{content:"同步选中的任务到云端",placement:"bottom",children:t.jsx(_,{size:"small",variant:"outline",icon:t.jsx(fs,{}),"data-track":"task_click_batch_sync",onClick:Ot,disabled:re,loading:re,children:re?`${kt}%`:`同步 (${ze})`})}),t.jsxs(_,{size:"small",variant:"text",theme:"default",icon:t.jsx(_e,{}),"data-track":"task_click_batch_delete",onClick:qt,disabled:g.size===0,children:["删除 (",g.size,")"]})]})]})]});return t.jsxs(t.Fragment,{children:[t.jsx(Ls,{isOpen:l,onClose:Yt,title:"任务队列",filterSection:ts,position:"toolbar-right",width:"responsive",storageKey:Fs,pinStorageKey:gs.task,showBackdrop:!1,closeOnEsc:!1,showCloseButton:!0,className:"task-queue-panel",contentClassName:"task-queue-panel__content",resizable:!0,minWidth:320,maxWidth:1024,"data-testid":"task-queue-panel",children:Te?t.jsx(Vs,{showHeader:!1,title:""}):O==="archived"?t.jsx(Os,{onPreviewOpen:Ae,onDownload:Pe,className:"task-queue-panel__list"}):t.jsx(Es,{tasks:H,selectionMode:B,selectedTaskIds:g,onSelectionChange:$t,onRetry:Nt,onDelete:Et,onDownload:Pe,onInsert:Vt,onCopy:At,onEdit:Gt,onRegenerate:Ft,onPreviewOpen:Ae,onExtractCharacter:Bt,hasMore:P,isLoadingMore:z,onLoadMore:D,totalCount:x,loadedCount:R,allLoadedText:es,allLoadedHint:x>=100?Ve:void 0,className:"task-queue-panel__list",emptyContent:b?t.jsxs("div",{className:"task-queue-panel__empty",children:[t.jsx("div",{className:"task-queue-panel__empty-icon",children:"⏳"}),t.jsx("div",{className:"task-queue-panel__empty-text",children:"加载中..."})]}):t.jsxs("div",{className:"task-queue-panel__empty",children:[t.jsx("div",{className:"task-queue-panel__empty-icon",children:"📋"}),t.jsx("div",{className:"task-queue-panel__empty-text",children:O==="all"?"暂无任务":`暂无${O==="active"?"生成中":O==="completed"?"已完成":O==="failed"?"失败":"已取消"}任务`})]})})}),t.jsx(ce,{open:ft,title:"确认清除",description:`确定要清除所有${be==="completed"?"已完成":"失败"}的任务吗?此操作无法撤销。`,confirmText:"清除",cancelText:"取消",danger:!0,onOpenChange:me,onConfirm:Dt}),t.jsx(ce,{open:It,title:"确认删除",description:"确定要删除此任务吗?此操作无法撤销。",confirmText:"删除",cancelText:"取消",danger:!0,onOpenChange:ge,onConfirm:Mt}),t.jsx(ce,{open:wt,title:"确认批量删除",description:`确定要删除选中的 ${g.size} 个任务吗?此操作无法撤销。`,confirmText:"删除",cancelText:"取消",danger:!0,onOpenChange:Ce,onConfirm:zt}),t.jsx($s,{visible:vt,items:Ht,initialMode:_t,initialIndex:Ct,onClose:Wt,showThumbnails:!0,onEdit:Kt}),Se&&De&&t.jsx(qs,{visible:Se,imageUrl:De,showOverwrite:!1,onClose:()=>{he(!1),fe("")},onInsert:G?Qt:void 0}),t.jsx(Ms,{visible:!!Ee,task:Ee,onClose:()=>ve(null),onCreateStart:()=>{},onCreateComplete:s=>{ve(null)}})]})};export{Fs as TASK_DRAWER_WIDTH_KEY,Xs as TaskQueuePanel};
1
+ import{r,dA as ye,j as t,d8 as oe,er as _,ba as ot,M as u,E as I,kl as ss,b$ as _e,km as dt,y as st,gs as je,kn as as,c1 as ce,i5 as rs,ck as ls,e0 as at,bg as p,dB as q,n as rt,d as lt,ko as ut,kp as is,cq as ns,kq as cs,p as os,c7 as ds,c8 as us,kr as ms,dc as ps,ks as hs,ig as fs,hz as gs,g7 as se,ji as xs,ei as vs,am as Cs,bz as ie,kt as ys,ku as _s,hb as it,jh as js,gc as nt,c as Is,ge as ct,kv as ws,aT as bs,aN as ks,aO as Ss}from"./startup-app-M6vjXkRC.js";import{T as Ds,C as Ns,u as mt,V as Es,a as Ms}from"./useCharacters-BVPiqeuF.js";import{M as Us,U as $s}from"./ai-chat-D_s8vs6j.js";import{e as Ts,B as Ls,I as qs,m as zs,f as ne,r as Ps}from"./tool-windows-Cf62DjP-.js";/* empty css */import"./startup-runtime-DTmhLESk.js";const Rs=30,Os=({onPreviewOpen:l,onDownload:f,className:n})=>{const[d,$]=r.useState([]),[T,j]=r.useState(!0),[w,b]=r.useState(!1),[z,P]=r.useState(!1),x=r.useRef(0),R=r.useRef(null),D=r.useCallback(async m=>{try{return await ye.getArchivedTasks(m,Rs)}catch{return{tasks:[],hasMore:!1}}},[]);r.useEffect(()=>{let m=!1;return j(!0),x.current=0,D(0).then(C=>{m||($(C.tasks),P(C.hasMore),x.current=C.tasks.length,j(!1))}),()=>{m=!0}},[D]);const A=r.useCallback(async()=>{if(w||!z)return;b(!0);const m=await D(x.current);$(C=>[...C,...m.tasks]),P(m.hasMore),x.current+=m.tasks.length,b(!1)},[w,z,D]);return r.useEffect(()=>{const m=R.current;if(!m)return;const C=()=>{m.scrollHeight-m.scrollTop-m.clientHeight<200&&A()};return m.addEventListener("scroll",C,{passive:!0}),()=>m.removeEventListener("scroll",C)},[A]),T?t.jsxs("div",{className:"task-queue-panel__empty",children:[t.jsx(oe,{size:"small"}),t.jsx("div",{className:"task-queue-panel__empty-text",children:"加载历史任务..."})]}):d.length===0?t.jsxs("div",{className:"task-queue-panel__empty",children:[t.jsx("div",{className:"task-queue-panel__empty-icon",children:"📦"}),t.jsx("div",{className:"task-queue-panel__empty-text",children:"暂无历史任务"})]}):t.jsxs("div",{ref:R,className:n,style:{overflow:"auto",height:"100%"},children:[d.map(m=>t.jsx(Ds,{task:m,onPreviewOpen:l?()=>l(m.id):void 0,onDownload:f},m.id)),z&&t.jsx("div",{style:{padding:"12px",textAlign:"center"},children:w?t.jsx(oe,{size:"small"}):t.jsx(_,{size:"small",variant:"text",theme:"default",onClick:A,children:"加载更多"})})]})},As=({character:l,onDelete:f,onSelect:n,compact:d=!1})=>{const[$,T]=r.useState(!1),j=l.status==="processing"||l.status==="pending",w=l.status==="failed",b=l.status==="completed",z=r.useCallback(async m=>{if(m.stopPropagation(),!l.username)return;const C=`@${l.username}`;try{await ot(C),u.success(`已复制: ${C}`)}catch(v){console.error("Failed to copy:",v),u.error("复制失败")}},[l.username]),P=r.useCallback(()=>{b&&n&&n(l)},[b,n,l]),x=r.useCallback(m=>{m.stopPropagation(),f==null||f(l.id)},[f,l.id]),R=r.useCallback(m=>{m.stopPropagation(),b&&l.profilePictureUrl&&T(!0)},[b,l.profilePictureUrl]),D=()=>l.profilePictureUrl||b?t.jsx(I,{content:"点击查看大图",children:t.jsx(Ns,{characterId:l.id,profilePictureUrl:l.profilePictureUrl,alt:l.username||"Character",className:"character-card__avatar-img",onClick:R})}):t.jsx("div",{className:"character-card__avatar-placeholder",children:t.jsx(dt,{})}),A=()=>j?t.jsxs("div",{className:"character-card__status character-card__status--processing",children:[t.jsx(oe,{size:"small"}),t.jsx("span",{children:"创建中..."})]}):w?t.jsxs("div",{className:"character-card__status character-card__status--failed",children:["创建失败: ",l.error||"未知错误"]}):null;return d?t.jsxs("div",{className:`character-card character-card--compact ${j?"character-card--loading":""} ${w?"character-card--failed":""}`,onClick:P,children:[t.jsx("div",{className:"character-card__avatar",children:D()}),t.jsx("span",{className:"character-card__username-text",children:l.username||"创建中..."})]}):t.jsxs("div",{className:`character-card ${j?"character-card--loading":""} ${w?"character-card--failed":""}`,onClick:P,children:[t.jsx("div",{className:"character-card__avatar",children:D()}),t.jsxs("div",{className:"character-card__info",children:[b&&l.username?t.jsx(I,{content:"点击复制",children:t.jsxs("div",{className:"character-card__username",onClick:z,children:["@",l.username,t.jsx(ss,{className:"character-card__username-copy"})]})}):t.jsx("div",{className:"character-card__username",style:{cursor:"default"},children:j?"创建中...":"角色"}),l.id&&t.jsx(I,{content:l.id,placement:"bottom",children:t.jsx("div",{className:"character-card__source",children:l.id})}),A()]}),t.jsx("div",{className:"character-card__actions",children:t.jsx(I,{content:"删除角色",children:t.jsx(_,{size:"small",variant:"text",theme:"danger",icon:t.jsx(_e,{}),"data-track":"character_click_delete",onClick:x})})}),l.profilePictureUrl&&t.jsx(Us,{visible:$,onClose:()=>T(!1),items:[{url:l.profilePictureUrl,type:"image",title:`@${l.username||"Character"}`}]})]})},Vs=({onSelect:l,completedOnly:f=!1,maxItems:n,showHeader:d=!0,title:$="角色列表"})=>{const{characters:T,completedCharacters:j,pendingCharacters:w,isLoading:b,deleteCharacter:z,refreshCharacters:P}=mt(),[x,R]=st.useState(null),D=st.useMemo(()=>{let v=f?j:T;return v=[...v].sort((de,ue)=>ue.createdAt-de.createdAt),n&&v.length>n&&(v=v.slice(0,n)),v},[f,T,j,n]),A=r.useCallback(v=>{R(v)},[]),m=r.useCallback(async()=>{if(!x)return;await z(x)?u.success("角色已删除"):u.error("删除失败"),R(null)},[x,z]),C=r.useCallback(async()=>{await P(),u.success("已刷新")},[P]);return b?t.jsxs("div",{className:"character-list__loading",children:[t.jsx(oe,{size:"small"}),t.jsx("span",{children:"加载中..."})]}):D.length===0?t.jsxs("div",{className:"character-list",children:[d&&t.jsxs("div",{className:"character-list__header",children:[t.jsx("h4",{children:$}),t.jsx(_,{size:"small",variant:"text",icon:t.jsx(je,{}),"data-track":"character_click_refresh",onClick:C})]}),t.jsxs("div",{className:"character-list__empty",children:[t.jsx("div",{className:"character-list__empty-icon",children:t.jsx(as,{})}),t.jsx("div",{children:"暂无角色"}),t.jsx("div",{style:{fontSize:"12px",marginTop:"4px",color:"#999"},children:"从已完成的 Sora-2 视频中提取角色"})]})]}):t.jsxs("div",{className:"character-list",children:[d&&t.jsxs("div",{className:"character-list__header",children:[t.jsxs("h4",{children:[$,w.length>0&&t.jsxs("span",{style:{fontWeight:"normal",fontSize:"12px",color:"#666",marginLeft:"8px"},children:["(",w.length," 创建中)"]})]}),t.jsx(_,{size:"small",variant:"text",icon:t.jsx(je,{}),"data-track":"character_click_refresh",onClick:C})]}),t.jsx("div",{className:"character-list__items",children:D.map(v=>t.jsx(As,{character:v,onDelete:A,onSelect:l},v.id))}),t.jsx(ce,{open:!!x,title:"确认删除",description:"确定要删除此角色吗?删除后将无法在提示词中使用该角色。",confirmText:"删除",cancelText:"取消",danger:!0,onOpenChange:v=>{v||R(null)},onConfirm:m})]})},{TabPanel:te}=ut,Fs="task-queue-drawer-width";function Gs(l){var f,n,d;return Array.isArray((f=l.result)==null?void 0:f.urls)&&l.result.urls.length>0?l.result.urls.length:(n=l.result)!=null&&n.url||(d=l.result)!=null&&d.chatResponse||se(l)?1:0}function Bs(l){const f=Gs(l);return{taskId:l.id,taskType:l.type,taskStatus:l.status,model:typeof l.params.model=="string"&&l.params.model.trim()?l.params.model:void 0,resultCount:f||void 0,hasMultipleResults:f>1}}const Xs=({expanded:l,onClose:f,onTaskAction:n})=>{const{tasks:d,activeTasks:$,completedTasks:T,failedTasks:j,cancelledTasks:w,isLoading:b,isLoadingMore:z,hasMore:P,totalCount:x,loadedCount:R,loadMore:D,retryTask:A,deleteTask:m,clearCompleted:C,clearFailed:v,batchDeleteTasks:de,batchRetryTasks:ue,batchCancelTasks:pt}=rs(),{board:G,openDialog:Ie}=ls(),{characters:we}=mt(),[O,ht]=r.useState("all"),[ft,me]=r.useState(!1),[be,gt]=r.useState("completed"),[ae,xt]=r.useState(""),[k,Y]=r.useState("all"),[Hs,ke]=r.useState(null),[vt,pe]=r.useState(!1),[Ct,yt]=r.useState(0),[_t,jt]=r.useState("single"),[Se,he]=r.useState(!1),[De,fe]=r.useState(""),[It,ge]=r.useState(!1),[xe,Ne]=r.useState(null),[Ee,ve]=r.useState(null),[B,ee]=r.useState(!1),[g,Q]=r.useState(new Set),[wt,Ce]=r.useState(!1),[Me,Ue]=r.useState(null),{isConfigured:bt}=Ts(),[re,$e]=r.useState(!1),[kt,le]=r.useState(0),Te=k==="character";r.useEffect(()=>{at.initCacheStatus()},[]),r.useEffect(()=>{if(!l)return;let s=!1;return ye.getArchivedTaskCount().then(e=>{s||Ue(e)}).catch(()=>{s||Ue(0)}),()=>{s=!0}},[l,O]);const H=r.useMemo(()=>{let s;switch(O){case"all":s=d;break;case"active":s=$;break;case"completed":s=T;break;case"failed":s=j;break;case"cancelled":s=w;break;case"archived":return[];default:s=d}if(k!=="all"&&k!=="character"&&(s=s.filter(e=>e.type===(k==="image"?p.IMAGE:k==="audio"?p.AUDIO:k==="text"?p.CHAT:p.VIDEO))),ae.trim()){const e=ae.toLowerCase().trim();s=s.filter(a=>{var o,y,L,W,K;return a.params.prompt.toLowerCase().includes(e)||String(((o=a.result)==null?void 0:o.title)||"").toLowerCase().includes(e)||String(((y=a.result)==null?void 0:y.lyricsTitle)||"").toLowerCase().includes(e)||String(((L=a.result)==null?void 0:L.lyricsText)||"").toLowerCase().includes(e)||String(((W=a.result)==null?void 0:W.chatResponse)||"").toLowerCase().includes(e)||(((K=a.result)==null?void 0:K.lyricsTags)||[]).some(c=>String(c).toLowerCase().includes(e))})}return[...s].sort((e,a)=>a.createdAt-e.createdAt)},[O,d,$,T,j,w,k,ae]),St=s=>{gt(s),me(!0)},Dt=()=>{be==="completed"?C():v(),me(!1)},Nt=s=>{A(s),n==null||n("retry",s)},Et=s=>{Ne(s),ge(!0)},Mt=()=>{xe&&(m(xe),n==null||n("delete",xe)),ge(!1),Ne(null)},Ut=()=>{B?(ee(!1),Q(new Set)):ee(!0)},$t=(s,e)=>{Q(a=>{const o=new Set(a);return e?o.add(s):o.delete(s),o})},Tt=()=>{const s=H.map(e=>e.id);Q(new Set(s))},Lt=()=>{Q(new Set)},qt=()=>{g.size!==0&&Ce(!0)},zt=()=>{de(Array.from(g)),Q(new Set),ee(!1),Ce(!1),u.success(`已删除 ${g.size} 个任务`)},Pt=()=>{const s=Array.from(g).filter(e=>{const a=d.find(o=>o.id===e);return(a==null?void 0:a.status)===q.FAILED||(a==null?void 0:a.status)===q.CANCELLED});if(s.length===0){u.warning("没有可重试的任务");return}ue(s),Q(new Set),ee(!1),u.success(`已重试 ${s.length} 个任务`)},Le=r.useMemo(()=>Array.from(g).filter(s=>{const e=d.find(a=>a.id===s);return(e==null?void 0:e.status)===q.FAILED||(e==null?void 0:e.status)===q.CANCELLED}).length,[g,d]),qe=r.useMemo(()=>Array.from(g).filter(s=>{const e=d.find(a=>a.id===s);return(e==null?void 0:e.status)===q.PENDING||(e==null?void 0:e.status)===q.PROCESSING}).length,[g,d]),ze=r.useMemo(()=>Array.from(g).filter(s=>{const e=d.find(a=>a.id===s);return(e==null?void 0:e.status)===q.COMPLETED&&((e==null?void 0:e.type)===p.IMAGE||(e==null?void 0:e.type)===p.VIDEO)}).length,[g,d]),Z=r.useMemo(()=>({all:d.length,image:d.filter(s=>s.type===p.IMAGE).length,video:d.filter(s=>s.type===p.VIDEO).length,audio:d.filter(s=>s.type===p.AUDIO).length,text:d.filter(s=>s.type===p.CHAT).length,character:we.length}),[d,we]),Rt=()=>{const s=Array.from(g).filter(e=>{const a=d.find(o=>o.id===e);return(a==null?void 0:a.status)===q.PENDING||(a==null?void 0:a.status)===q.PROCESSING});if(s.length===0){u.warning("没有可取消的进行中任务");return}pt(s),Q(new Set),ee(!1),u.success(`已取消 ${s.length} 个任务`)},Ot=async()=>{const s=Array.from(g).filter(e=>{const a=d.find(o=>o.id===e);return(a==null?void 0:a.status)===q.COMPLETED&&((a==null?void 0:a.type)===p.IMAGE||(a==null?void 0:a.type)===p.VIDEO)});if(!(s.length===0||re)){$e(!0),le(0);try{const e=await zs.syncMultipleTasks(s,(a,o)=>{le(Math.round(a/o*100))});le(100),e.succeeded>0&&u.success(`已同步 ${e.succeeded} 个任务`),e.failed>0&&u.warning(`${e.failed} 个任务同步失败`)}catch(e){console.error("[TaskQueuePanel] Batch sync failed:",e),u.error("同步失败,请稍后重试")}finally{$e(!1),le(0)}}},Pe=async s=>{const e=d.find(o=>o.id===s);if(e&&se(e)){u.info("歌词任务支持复制或插入画布");return}if(!e)return;const a=xs(e);if(a.length!==0)try{const o=await vs(a);o.openedCount>0&&o.downloadedCount===0?u.success(o.openedCount>1?`已打开 ${o.openedCount} 个链接,请在新标签页下载`:"资源不支持直接下载,已打开链接"):u.success(e.type===p.AUDIO?a.length>1?"多条音频已开始下载":"音频下载成功":a.length>1?"多图已开始下载":"下载成功"),Cs.track("generation_result_download",{...Bs(e),downloadedCount:o.downloadedCount,openedCount:o.openedCount}),n==null||n("download",s)}catch(o){console.error("Download failed:",o),u.error("下载失败,请稍后重试")}},At=async s=>{const e=d.find(o=>o.id===s);if(!e||!se(e)){u.warning("暂无可复制的歌词");return}const a=nt(e);if(!a.trim()){u.warning("暂无可复制的歌词");return}try{await ot(a),u.success("歌词已复制"),n==null||n("copy",s)}catch(o){console.error("Failed to copy lyrics:",o),u.error("复制失败,请稍后重试")}},Vt=async s=>{var a,o,y,L,W,K,c,J,V,X,S,N;const e=d.find(i=>i.id===s);if(!e||!G){console.warn("Cannot insert: task result or board not available"),u.warning("无法插入:白板未就绪");return}if(!((a=e.result)!=null&&a.url)&&!((y=(o=e.result)==null?void 0:o.urls)!=null&&y.length)&&!se(e)){const i=e.type===p.CHAT?(L=e.result)==null?void 0:L.chatResponse:void 0;if(i!=null&&i.trim()){const h=(e.params.prompt||"").slice(0,20)||void 0;await ne({items:[{type:"text",content:i,label:h}]}),u.success("文本已插入到白板"),ie.markAsInserted(s,"manual"),n==null||n("insert",s);return}console.warn("Cannot insert: task result is empty"),u.warning("无法插入:任务结果为空");return}try{const i=e.result;if(e.type===p.IMAGE){const h=(W=i.urls)!=null&&W.length?i.urls:[i.url];for(const E of h)await lt(G,rt(E));u.success(h.length>1?"多图已插入到白板":"图片已插入到白板")}else if(e.type===p.VIDEO)await Is(G,i.url),u.success("视频已插入到白板");else if(e.type===p.AUDIO){if(se(e)){const F=ct(i,e.params.title||e.params.prompt)||(e.params.prompt||"").slice(0,20)||void 0;await ne({items:[{type:"text",content:nt(e),label:F,metadata:{title:ct(i,e.params.title||e.params.prompt),tags:ws(i)}}]}),u.success("歌词已插入到白板"),ie.markAsInserted(s,"manual"),n==null||n("insert",s);return}const h=Ps(i),E=(c=(K=i.clips)==null?void 0:K[0])==null?void 0:c.duration,M={title:i.title||e.params.title||e.params.prompt,duration:typeof E=="number"?E:i.duration,previewImageUrl:i.previewImageUrl,tags:typeof e.params.tags=="string"?e.params.tags:void 0,mv:typeof e.params.mv=="string"?e.params.mv:void 0,prompt:e.params.prompt,providerTaskId:i.providerTaskId||e.remoteId,clipId:i.primaryClipId||((V=(J=i.clips)==null?void 0:J[0])==null?void 0:V.clipId)||((S=(X=i.clips)==null?void 0:X[0])==null?void 0:S.id)||((N=i.clipIds)==null?void 0:N[0]),clipIds:i.clipIds};h.length===1?await bs(G,h[0],M):await ne({items:h.map((F,U)=>{var Fe,Ge,Be,He,We,Ke,Qe,Ye,Ze,Je,Xe,et,tt;return{type:"audio",content:F,groupId:`task-audio-${e.id}`,dimensions:{width:Ss,height:ks},metadata:{...M,title:((Ge=(Fe=i.clips)==null?void 0:Fe[U])==null?void 0:Ge.title)||`${M.title||"Audio"} ${U+1}`,previewImageUrl:((He=(Be=i.clips)==null?void 0:Be[U])==null?void 0:He.imageLargeUrl)||((Ke=(We=i.clips)==null?void 0:We[U])==null?void 0:Ke.imageUrl)||M.previewImageUrl,duration:typeof((Ye=(Qe=i.clips)==null?void 0:Qe[U])==null?void 0:Ye.duration)=="number"?i.clips[U].duration||void 0:M.duration,clipId:((Je=(Ze=i.clips)==null?void 0:Ze[U])==null?void 0:Je.clipId)||((et=(Xe=i.clips)==null?void 0:Xe[U])==null?void 0:et.id)||((tt=i.clipIds)==null?void 0:tt[U])||M.clipId}}})}),u.success(h.length>1?"多条音频卡片已插入到白板":"音频卡片已插入到白板")}else if(e.type===p.CHAT){const h=i.chatResponse||"",E=(e.params.prompt||"").slice(0,20)||void 0;await ne({items:[{type:"text",content:h,label:E}]}),u.success("文本已插入到白板")}ie.markAsInserted(s,"manual"),n==null||n("insert",s)}catch(i){console.error("Failed to insert to board:",i),u.error(`插入失败: ${i instanceof Error?i.message:"未知错误"}`)}},Ft=async s=>{const e=await ye.getTask(s)||ie.getTask(s)||d.find(a=>a.id===s);if(!e||e.type!==p.IMAGE){u.warning("未找到可回填的图片任务");return}ys({..._s(e),source:"task-queue"}),n==null||n("regenerate",s)},Gt=s=>{var a,o;const e=d.find(y=>y.id===s);if(!e){console.warn("Cannot edit: task not found");return}if(e.type===p.IMAGE)Ie(it.aiImageGeneration,js(e));else if(e.type===p.VIDEO){const y={initialPrompt:e.params.prompt,initialDuration:typeof e.params.seconds=="string"?parseInt(e.params.seconds,10):e.params.seconds,initialModel:e.params.model,initialSize:e.params.size,initialImages:e.params.uploadedImages,initialResultUrl:(a=e.result)==null?void 0:a.url,initialResultUrls:(o=e.result)==null?void 0:o.urls};Ie(it.aiVideoGeneration,y)}else if(e.type===p.AUDIO){u.info("音频任务暂不支持从任务面板直接编辑");return}n==null||n("edit",s)},Bt=s=>{const e=d.find(a=>a.id===s);e&&(ve(e),n==null||n("extractCharacter",s))},Re=r.useMemo(()=>{const s=new Set;return H.filter(e=>{var a,o,y,L;return e.status!==q.COMPLETED||!((a=e.result)!=null&&a.url)&&!((y=(o=e.result)==null?void 0:o.urls)!=null&&y.length)||e.type!==p.IMAGE&&e.type!==p.VIDEO&&!(e.type===p.AUDIO&&((L=e.result)==null?void 0:L.resultKind)!=="lyrics")||s.has(e.id)?!1:(s.add(e.id),!0)})},[H]),{previewMediaItems:Ht,taskIdToPreviewConfig:Oe}=r.useMemo(()=>{var a,o,y,L,W,K;const s=[],e=new Map;for(const c of Re){const J=s.length,V=((a=c.result)==null?void 0:a.title)||c.params.title||((o=c.params.prompt)==null?void 0:o.substring(0,50))||"媒体预览";if(c.type===p.AUDIO){const S=((L=(y=c.result)==null?void 0:y.clips)==null?void 0:L.filter(h=>!!h.audioUrl).map((h,E)=>{var M,F,U;return{id:h.clipId||h.id||`${c.id}-${E}`,url:h.audioUrl,type:"audio",title:h.title||((M=c.result)!=null&&M.clips&&c.result.clips.length>1?`${V} (${E+1}/${c.result.clips.length})`:V),posterUrl:h.imageLargeUrl||h.imageUrl||((F=c.result)==null?void 0:F.previewImageUrl),duration:typeof h.duration=="number"?h.duration:(U=c.result)==null?void 0:U.duration,prompt:c.params.prompt,tags:typeof c.params.tags=="string"?c.params.tags:void 0,artist:c.params.model||c.params.mv||"Aitu",album:"Aitu Generated"}}))??[],N=(W=c.result.urls)!=null&&W.length?c.result.urls:c.result.url?[c.result.url]:[],i=S.length>0?S:N.map((h,E)=>{var M,F;return{id:N.length>1?`${c.id}-${E}`:c.id,url:h,type:"audio",title:N.length>1?`${V} (${E+1}/${N.length})`:V,posterUrl:(M=c.result)==null?void 0:M.previewImageUrl,duration:(F=c.result)==null?void 0:F.duration,prompt:c.params.prompt,tags:typeof c.params.tags=="string"?c.params.tags:void 0,artist:c.params.model||c.params.mv||"Aitu",album:"Aitu Generated"}});s.push(...i)}else{const S=(K=c.result.urls)!=null&&K.length?c.result.urls:[c.result.url],N=c.type===p.VIDEO?"video":"image";for(let i=0;i<S.length;i++){const h=N==="image"?rt(S[i]):S[i];s.push({id:S.length>1?`${c.id}-${i}`:c.id,url:h,type:N,title:S.length>1?`${V} (${i+1}/${S.length})`:V})}}const X=s.length-J;e.set(c.id,{mode:c.type===p.AUDIO&&X>1?"compare":"single",index:c.type===p.AUDIO&&X>1?Array.from({length:Math.min(X,4)},(S,N)=>J+N):J})}return{previewMediaItems:s,taskIdToPreviewConfig:e}},[Re]),Ae=r.useCallback(s=>{ke(s);const e=Oe.get(s);e!==void 0&&(jt(e.mode),yt(e.index),pe(!0))},[Oe]),Wt=r.useCallback(()=>{ke(null),pe(!1)},[]),Kt=r.useCallback(s=>{s.type==="image"&&(fe(s.url),he(!0),pe(!1))},[]),Qt=r.useCallback(async s=>{if(G)try{const e=`edited-image-${Date.now()}`,a=`/__aitu_cache__/image/${e}.png`,y=await(await fetch(s)).blob();await at.cacheMediaFromBlob(a,y,"image",{taskId:e}),await lt(G,a),he(!1),fe("")}catch(e){console.error("Failed to insert edited image:",e)}},[G]),Yt=r.useCallback(()=>{f==null||f()},[f]),Zt=x>0?x:d.length,Ve="这里只显示最近 100 个任务,更早的任务会自动移到“历史”中继续保留。",Jt=t.jsx(I,{content:Ve,children:t.jsxs("span",{children:["全部 (",Zt,")"]})}),Xt=Me===null?"历史":`历史 (${Me})`,es=x>=100?`已加载最近 ${x} 个任务,较早任务已移至“历史”`:`已加载全部 ${x} 个任务`,ts=t.jsxs("div",{className:"task-queue-panel__filters-container",children:[t.jsxs(ut,{value:O,onChange:s=>ht(s),children:[t.jsx(te,{value:"all",label:Jt}),t.jsx(te,{value:"active",label:`生成中 (${$.length})`}),t.jsx(te,{value:"failed",label:`失败 (${j.length})`}),t.jsx(te,{value:"completed",label:`已完成 (${T.length})`}),t.jsx(te,{value:"archived",label:Xt})]}),O!=="archived"&&t.jsxs("div",{className:"task-queue-panel__filters",children:[t.jsxs("div",{className:"task-queue-panel__type-filters",children:[t.jsx(I,{content:`全部 (${Z.all})`,children:t.jsx(_,{size:"small",variant:"text",shape:"square",onClick:()=>Y("all"),className:k==="all"?"task-queue-panel__filter-btn--active":"",children:t.jsx(is,{size:"16px"})})}),t.jsx(I,{content:`图片 (${Z.image})`,children:t.jsx(_,{size:"small",variant:"text",shape:"square",onClick:()=>Y("image"),className:k==="image"?"task-queue-panel__filter-btn--active":"",children:t.jsx(ns,{size:"16px"})})}),t.jsx(I,{content:`视频 (${Z.video})`,children:t.jsx(_,{size:"small",variant:"text",shape:"square",onClick:()=>Y("video"),className:k==="video"?"task-queue-panel__filter-btn--active":"",children:t.jsx(cs,{size:"16px"})})}),t.jsx(I,{content:`音频 (${Z.audio})`,children:t.jsx(_,{size:"small",variant:"text",shape:"square",onClick:()=>Y("audio"),className:k==="audio"?"task-queue-panel__filter-btn--active":"",children:t.jsx(os,{size:16,strokeWidth:1.9})})}),t.jsx(I,{content:`文本 (${Z.text})`,children:t.jsx(_,{size:"small",variant:"text",shape:"square",onClick:()=>Y("text"),className:k==="text"?"task-queue-panel__filter-btn--active":"",children:"文"})}),t.jsx(I,{content:`角色 (${Z.character})`,children:t.jsx(_,{size:"small",variant:"text",shape:"square",onClick:()=>Y("character"),className:k==="character"?"task-queue-panel__filter-btn--active":"",children:t.jsx(dt,{size:"16px"})})})]}),t.jsxs("div",{className:"task-queue-panel__search-row",children:[t.jsx(ds,{value:ae,onChange:s=>xt(s),placeholder:"搜索...",clearable:!0,prefixIcon:t.jsx(us,{}),size:"small",className:"task-queue-panel__search-input"}),t.jsxs("div",{className:"task-queue-panel__filter-actions",children:[t.jsx(I,{content:B?"退出多选":"批量操作",children:t.jsx(_,{size:"small",variant:B?"base":"outline",theme:B?"primary":"default",icon:t.jsx(ms,{}),"data-track":"task_click_toggle_selection",onClick:Ut,children:B?"退出":"多选"})}),j.length>0&&!B&&t.jsx(I,{content:"清除失败",children:t.jsx(_,{size:"small",variant:"text",theme:"default",icon:t.jsx(_e,{style:{color:"var(--td-text-color-placeholder)"}}),"data-track":"task_click_clear_failed",onClick:()=>St("failed"),className:"task-queue-panel__clear-btn"})})]})]})]}),B&&!Te&&t.jsxs("div",{className:"task-queue-panel__batch-actions",children:[t.jsxs("div",{className:"task-queue-panel__batch-select",children:[t.jsx(ps,{checked:g.size===H.length&&H.length>0,indeterminate:g.size>0&&g.size<H.length,onChange:s=>s?Tt():Lt()}),t.jsxs("span",{className:"task-queue-panel__batch-count",children:["已选 ",g.size," / ",H.length]})]}),t.jsxs("div",{className:"task-queue-panel__batch-buttons",children:[qe>0&&t.jsxs(_,{size:"small",variant:"outline",theme:"warning",icon:t.jsx(hs,{}),"data-track":"task_click_batch_cancel",onClick:Rt,children:["取消 (",qe,")"]}),Le>0&&t.jsxs(_,{size:"small",theme:"primary",icon:t.jsx(je,{}),"data-track":"task_click_batch_retry",onClick:Pt,children:["重试 (",Le,")"]}),bt&&ze>0&&t.jsx(I,{content:"同步选中的任务到云端",placement:"bottom",children:t.jsx(_,{size:"small",variant:"outline",icon:t.jsx(fs,{}),"data-track":"task_click_batch_sync",onClick:Ot,disabled:re,loading:re,children:re?`${kt}%`:`同步 (${ze})`})}),t.jsxs(_,{size:"small",variant:"text",theme:"default",icon:t.jsx(_e,{}),"data-track":"task_click_batch_delete",onClick:qt,disabled:g.size===0,children:["删除 (",g.size,")"]})]})]})]});return t.jsxs(t.Fragment,{children:[t.jsx(Ls,{isOpen:l,onClose:Yt,title:"任务队列",filterSection:ts,position:"toolbar-right",width:"responsive",storageKey:Fs,pinStorageKey:gs.task,showBackdrop:!1,closeOnEsc:!1,showCloseButton:!0,className:"task-queue-panel",contentClassName:"task-queue-panel__content",resizable:!0,minWidth:320,maxWidth:1024,"data-testid":"task-queue-panel",children:Te?t.jsx(Vs,{showHeader:!1,title:""}):O==="archived"?t.jsx(Os,{onPreviewOpen:Ae,onDownload:Pe,className:"task-queue-panel__list"}):t.jsx(Es,{tasks:H,selectionMode:B,selectedTaskIds:g,onSelectionChange:$t,onRetry:Nt,onDelete:Et,onDownload:Pe,onInsert:Vt,onCopy:At,onEdit:Gt,onRegenerate:Ft,onPreviewOpen:Ae,onExtractCharacter:Bt,hasMore:P,isLoadingMore:z,onLoadMore:D,totalCount:x,loadedCount:R,allLoadedText:es,allLoadedHint:x>=100?Ve:void 0,className:"task-queue-panel__list",emptyContent:b?t.jsxs("div",{className:"task-queue-panel__empty",children:[t.jsx("div",{className:"task-queue-panel__empty-icon",children:"⏳"}),t.jsx("div",{className:"task-queue-panel__empty-text",children:"加载中..."})]}):t.jsxs("div",{className:"task-queue-panel__empty",children:[t.jsx("div",{className:"task-queue-panel__empty-icon",children:"📋"}),t.jsx("div",{className:"task-queue-panel__empty-text",children:O==="all"?"暂无任务":`暂无${O==="active"?"生成中":O==="completed"?"已完成":O==="failed"?"失败":"已取消"}任务`})]})})}),t.jsx(ce,{open:ft,title:"确认清除",description:`确定要清除所有${be==="completed"?"已完成":"失败"}的任务吗?此操作无法撤销。`,confirmText:"清除",cancelText:"取消",danger:!0,onOpenChange:me,onConfirm:Dt}),t.jsx(ce,{open:It,title:"确认删除",description:"确定要删除此任务吗?此操作无法撤销。",confirmText:"删除",cancelText:"取消",danger:!0,onOpenChange:ge,onConfirm:Mt}),t.jsx(ce,{open:wt,title:"确认批量删除",description:`确定要删除选中的 ${g.size} 个任务吗?此操作无法撤销。`,confirmText:"删除",cancelText:"取消",danger:!0,onOpenChange:Ce,onConfirm:zt}),t.jsx($s,{visible:vt,items:Ht,initialMode:_t,initialIndex:Ct,onClose:Wt,showThumbnails:!0,onEdit:Kt}),Se&&De&&t.jsx(qs,{visible:Se,imageUrl:De,showOverwrite:!1,onClose:()=>{he(!1),fe("")},onInsert:G?Qt:void 0}),t.jsx(Ms,{visible:!!Ee,task:Ee,onClose:()=>ve(null),onCreateStart:()=>{},onCreateComplete:s=>{ve(null)}})]})};export{Fs as TASK_DRAWER_WIDTH_KEY,Xs as TaskQueuePanel};