aitu-app 1.0.0 → 1.0.2

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 (106) hide show
  1. package/README.md +3 -3
  2. package/assets/{CanvasAudioPlayer-DyUPmMV6.js → CanvasAudioPlayer-HtUs8HDj.js} +2 -2
  3. package/assets/ComicCreator-DhxXCyJR.js +43 -0
  4. package/assets/{DeferredAIInputBar-Cq0t7wNK.js → DeferredAIInputBar-B2R2-2RU.js} +3 -3
  5. package/assets/{DrawnixDeferredFeatures-B9y0GPYR.js → DrawnixDeferredFeatures-DHTr0c-V.js} +2 -2
  6. package/assets/{KnowledgeBaseContent-C8zmce09.js → KnowledgeBaseContent-CAq5kXdt.js} +6 -6
  7. package/assets/{MVCreator-Bl8GH4mR.js → MVCreator-B9uaRsGE.js} +16 -16
  8. package/assets/{ModelBenchmarkWorkbench-BwfeZDt-.js → ModelBenchmarkWorkbench-CK33zizl.js} +1 -1
  9. package/assets/{MusicAnalyzer-CdMhl-kU.js → MusicAnalyzer-D2NTonEA.js} +1 -1
  10. package/assets/{PromptHistoryTool-CCxoST3H.js → PromptHistoryTool-q6vOxFr6.js} +1 -1
  11. package/assets/{ResizableDivider-D1jgqdmh.js → ResizableDivider-BvT-DCEo.js} +2 -2
  12. package/assets/{TaskQueuePanel-WF6aq1G7.js → TaskQueuePanel-PayswYlG.js} +1 -1
  13. package/assets/{VideoAnalyzer-BOqRFjZ9.js → VideoAnalyzer-DnowtohS.js} +1 -1
  14. package/assets/{VideoAnalyzer-BrEKSLeh.js → VideoAnalyzer-DoaGlK92.js} +2 -2
  15. package/assets/{ai-chat-DbjmzngX.css → ai-chat-BlxYfB4O.css} +1 -1
  16. package/assets/ai-chat-BnWVpTEI.js +2977 -0
  17. package/assets/{batch-image-generation-DyWeiTsw.js → batch-image-generation-CkmX4dem.js} +5 -5
  18. package/assets/{bootstrap-DadYvnge.js → bootstrap-CQRLkOtk.js} +7 -7
  19. package/assets/{clean-confirm-CpWpcTF5.js → clean-confirm-CIViVQ8s.js} +1 -1
  20. package/assets/{diagram-engines-C0Ljec4Z.js → diagram-engines-DpAsX7pc.js} +3 -3
  21. package/assets/{editor-engines-Dz5Mk5YB.js → editor-engines-9_72Ghfn.js} +1 -1
  22. package/assets/{external-skill-service-BQUJLLLc.js → external-skill-service-BN8ZCtPn.js} +1 -1
  23. package/assets/{frame-size-matcher-2sxA9X-P.js → frame-size-matcher-9rxQ-bAY.js} +1 -1
  24. package/assets/{index-CRuDVxTu.js → index-291TeU7i.js} +1 -1
  25. package/assets/{index-BNtKpMlh.js → index-BJ-vS89P.js} +1 -1
  26. package/assets/{index-Ct7MFvFo.js → index-BSZAS0wO.js} +1 -1
  27. package/assets/{index-BfdBtWT6.js → index-C7DAD_xK.js} +1 -1
  28. package/assets/{index-o8hm5yhT.js → index-CIgiIDgZ.js} +1 -1
  29. package/assets/{index-BwW4Qp-A.js → index-CpHWUe__.js} +1 -1
  30. package/assets/{index-D7UBK5T7.js → index-D1LQ9eQM.js} +1 -1
  31. package/assets/{index-D_Yn26AT.js → index-DRGxmFyd.js} +1 -1
  32. package/assets/{index-CBMgStgL.js → index-DmtcRYr8.js} +1 -1
  33. package/assets/{index.es-CYBRnsv6.js → index.es-Ch45-H39.js} +1 -1
  34. package/assets/{jspdf.es.min-I7TkFvGI.js → jspdf.es.min-bNprb1JY.js} +3 -3
  35. package/assets/{link-popup-fCfgZp17.js → link-popup-B6ReK6iq.js} +1 -1
  36. package/assets/{markdown-to-drawnix-3yksNvbU.js → markdown-to-drawnix-BqT-3zQO.js} +3 -3
  37. package/assets/{mermaid-to-drawnix-C7rF-30X.js → mermaid-to-drawnix-CSctnpU0.js} +3 -3
  38. package/assets/{model-benchmark-launcher-uYoranwQ.js → model-benchmark-launcher-DNMp2MLQ.js} +1 -1
  39. package/assets/{photo-wall-splitter-CfRBAwCy.js → photo-wall-splitter-DhBTEpdG.js} +1 -1
  40. package/assets/{popup-toolbar-tKtYPGvw.js → popup-toolbar-BChsudwW.js} +7 -7
  41. package/assets/{prompt-utils-C_mjEqkz.js → prompt-utils-BX0pRV-Z.js} +1 -1
  42. package/assets/quick-creation-toolbar-3-AYFpEF.js +2 -0
  43. package/assets/{settings-dialog-DfK6bcBd.js → settings-dialog-Ccemaout.js} +1 -1
  44. package/assets/{size-picker-DvMt8S3Z.js → size-picker-DTrdjyLh.js} +1 -1
  45. package/assets/{skill-dsl-parser-CTM4hEIp.js → skill-dsl-parser-ZR--uu5h.js} +1 -1
  46. package/assets/{startup-app-9gZEGv85.js → startup-app-CH3QzBb4.js} +2 -2
  47. package/assets/{task-sync-D7bw59_K.js → task-sync-C5XXOQ5m.js} +1 -1
  48. package/assets/{tool-windows-BnDZa9FH.js → tool-windows-Bf_pMml-.js} +6 -6
  49. package/assets/ttd-dialog-CohjwODB.js +6 -0
  50. package/assets/{ttd-dialog-submit-shortcut-UfHT9Z9k.js → ttd-dialog-submit-shortcut-BVB8O_wE.js} +1 -1
  51. package/assets/{useCharacters-6u0Wuwt4.js → useCharacters-CFlPvydq.js} +1 -1
  52. package/assets/{useWorkflowSubmission-DTWha6Vn.js → useWorkflowSubmission-CKkOEcAT.js} +3 -3
  53. package/assets/{video-merge-webcodecs-Cwy2df91.js → video-merge-webcodecs-BInWo9HA.js} +2 -2
  54. package/assets/{video-recovery-service-CgZ3pA_1.js → video-recovery-service-DITdD0pC.js} +1 -1
  55. package/assets/{workflow-generation-utils-BPT49S-Z.js → workflow-generation-utils-e0nRpAgJ.js} +3 -3
  56. package/assets/{workflow-submission-service-C-6Uf9FA.js → workflow-submission-service-BqiL_5Cj.js} +3 -3
  57. package/changelog.json +105 -6
  58. package/idle-prefetch-manifest.json +136 -288
  59. package/manifest.json +3 -3
  60. package/package.json +1 -1
  61. package/precache-manifest.json +6 -6
  62. package/sw.js +1 -1
  63. package/version.json +63 -3
  64. package/.DS_Store +0 -0
  65. package/assets/ComicCreator-DjOhYrZt.js +0 -43
  66. package/assets/ai-chat-B-XdoWBQ.js +0 -2976
  67. package/assets/quick-creation-toolbar-CrQ0g0kO.js +0 -2
  68. package/assets/ttd-dialog-DS6KiOOa.js +0 -6
  69. package/assets/useMediaViewer-BrBFopM-.js +0 -1
  70. package/user-manual/gifs//346/200/235/347/273/264/345/257/274/345/233/276/345/210/233/345/273/272/346/274/224/347/244/272.gif +0 -0
  71. package/user-manual/screenshots/ai-step-0.png +0 -0
  72. package/user-manual/screenshots/ai-step-1.png +0 -0
  73. package/user-manual/screenshots/ai-step-2.png +0 -0
  74. package/user-manual/screenshots/ai-step-3.png +0 -0
  75. package/user-manual/screenshots/app-menu.png +0 -0
  76. package/user-manual/screenshots/backup-restore.png +0 -0
  77. package/user-manual/screenshots/canvas-tools.png +0 -0
  78. package/user-manual/screenshots/debug-panel.png +0 -0
  79. package/user-manual/screenshots/drawing-step-0.png +0 -0
  80. package/user-manual/screenshots/drawing-step-1.png +0 -0
  81. package/user-manual/screenshots/drawing-step-2.png +0 -0
  82. package/user-manual/screenshots/edit-selected.png +0 -0
  83. package/user-manual/screenshots/element-selected.png +0 -0
  84. package/user-manual/screenshots/flowchart-step-1.png +0 -0
  85. package/user-manual/screenshots/flowchart-step-2.png +0 -0
  86. package/user-manual/screenshots/flowchart-step-3.png +0 -0
  87. package/user-manual/screenshots/image-preview-empty.png +0 -0
  88. package/user-manual/screenshots/insert-from-library.png +0 -0
  89. package/user-manual/screenshots/insert-tools.png +0 -0
  90. package/user-manual/screenshots/inspiration-step-1.png +0 -0
  91. package/user-manual/screenshots/inspiration-step-2.png +0 -0
  92. package/user-manual/screenshots/media-library.png +0 -0
  93. package/user-manual/screenshots/mindmap-step-1.png +0 -0
  94. package/user-manual/screenshots/mindmap-step-2.png +0 -0
  95. package/user-manual/screenshots/mindmap-toolbar-menu.png +0 -0
  96. package/user-manual/screenshots/project-drawer.png +0 -0
  97. package/user-manual/screenshots/settings-dialog.png +0 -0
  98. package/user-manual/screenshots/shape-step-1.png +0 -0
  99. package/user-manual/screenshots/shape-step-2.png +0 -0
  100. package/user-manual/screenshots/text-step-1.png +0 -0
  101. package/user-manual/screenshots/text-step-2.png +0 -0
  102. package/user-manual/screenshots/toolbox-drawer.png +0 -0
  103. package/user-manual/screenshots/toolbox-entry.png +0 -0
  104. package/user-manual/screenshots/video-entry.png +0 -0
  105. package/user-manual/screenshots/view-navigation.png +0 -0
  106. package/user-manual/screenshots/zoom-menu.png +0 -0
@@ -0,0 +1,6 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ai-chat-BlxYfB4O.css","./tool-windows-DW-CDfPc.css","./batch-image-generation-DuPmleAE.css","./bootstrap-5wOMkP8H.css","./ttd-dialog-submit-shortcut-DyioEoKX.css","./useCharacters-DRBoWvvj.css","./character-Bo9jcTNu.css","./ResizableDivider-ClzYJk-6.css"])))=>i.map(i=>d[i]);
2
+ import{_ as Et}from"./startup-runtime-BrfuwjQS.js";import{P as e,a8 as t,ab as it,gh as zs,co as bt,dF as Ls,bP as $s,dV as is,n8 as He,m6 as Vs,nI as Os,e$ as Fs,dU as Us,nV as Gs,gr as Ks,nW as zt,fq as ls,fx as Ws,eN as cs,e8 as qs,nk as Bs,f1 as Hs,bm as xt,Q as kt,el as ds,ep as Xs,T as We,ao as Me,aD as Se,nb as Js,c$ as Qs,eU as Ys,c5 as Lt,nX as Zs,eP as xe,b9 as en,ba as tn,nY as sn,mU as nn,en as us,eo as Je,ew as Oe,et as Le,ey as It,ex as ze,f3 as Te,nZ as $t,gA as Pt,cm as Mt,R as Ie,nq as an,n_ as lt,aE as $e,n$ as on,f2 as ms,nL as fs,nN as ps,c6 as ot,o0 as rn,dc as Tt,o1 as ln,o2 as vt,nC as cn,kH as dn,o3 as yt,o4 as Vt,ns as hs,o5 as Ot,o6 as un,o7 as Ft,o8 as mn,o9 as Ut,oa as Gt,kh as wt,kd as Kt,ke as Wt,gc as qt,gd as Bt,gC as Ht,ak as fn,bk as pn,at as hn,nQ as Xt,ob as Jt}from"./ai-chat-BnWVpTEI.js";import{ap as gn,aq as bn,ar as xn,p as gs}from"./tool-windows-Bf_pMml-.js";import{u as Rt,r as In,g as bs,s as xs}from"./prompt-utils-BX0pRV-Z.js";import{u as Is,C as vn,V as yn,a as wn}from"./useCharacters-CFlPvydq.js";/* empty css */import{R as vs}from"./ResizableDivider-BvT-DCEo.js";import{a as Qt,g as Sn,c as Cn}from"./image-task-prefill-DtECrkJn.js";import{b as Yt}from"./mj-params-M-7csAp7.js";import{g as _n}from"./bootstrap-CQRLkOtk.js";import{m as kn}from"./frame-size-matcher-9rxQ-bAY.js";import"./startup-app-CH3QzBb4.js";const Zt=(n,s,a)=>{const l=a==="image"?{isGenerating:n,imageLoading:s}:{isGenerating:n,videoLoading:s};window.dispatchEvent(new CustomEvent("ai-generation-state-change",{detail:l}))},ys=(n,s,a)=>{e.useEffect(()=>{const l=r=>{(r.metaKey||r.ctrlKey)&&r.key==="Enter"&&(r.preventDefault(),!n&&s.trim()&&a())};return document.addEventListener("keydown",l),()=>{document.removeEventListener("keydown",l)}},[n,s,a])},ws=n=>{const[s,a]=e.useState(!1),[l,r]=e.useState(!1),d=e.useCallback(P=>{a(P),Zt(P,l,n)},[l,n]),y=e.useCallback(P=>{r(P),Zt(s,P,n)},[s,n]);return{isGenerating:s,isLoading:l,updateIsGenerating:d,updateIsLoading:y}},Tn=(n,s,a)=>s==="image"?n==="zh"?"一只可爱的小猫坐在窗台上,阳光透过窗户洒在它的毛发上,背景是温馨的家居环境":"A cute kitten sitting on a windowsill, with sunlight streaming through the window onto its fur, with a cozy home environment in the background":a==="sora"?n==="zh"?"描述视频内容,输入 @ 可引用已创建的角色,如 @username 在海边漫步...":"Describe video content, type @ to reference created characters, e.g. @username walking on the beach...":n==="zh"?"生成一个美丽的日出场景,阳光从山峰后缓缓升起,云朵轻柔地飘动":"Generate a beautiful sunrise scene where the sun slowly rises from behind mountains with clouds gently floating",jn=[1,2,3,4,5,10,20,50,100],En="aitu_image_generation_quantity",Pn="aitu_video_generation_quantity",St=100,Ss=({language:n,type:s,isGenerating:a,hasGenerated:l,canGenerate:r,onGenerate:d,onReset:y,leftContent:P})=>{const N=s==="video"?Pn:En,[o,p]=e.useState(()=>{try{const i=localStorage.getItem(N);if(i){const w=parseInt(i,10);if(!isNaN(w)&&w>=1&&w<=St)return w}}catch{}return 1}),[D,B]=e.useState(!1),[x,T]=e.useState(()=>o.toString()),j=e.useRef(null);e.useEffect(()=>{T(o.toString());try{localStorage.setItem(N,o.toString())}catch{}},[o,N]),e.useEffect(()=>{const i=w=>{j.current&&!j.current.contains(w.target)&&(B(!1),v())};return document.addEventListener("mousedown",i),()=>document.removeEventListener("mousedown",i)},[x]);const v=()=>{let i=parseInt(x,10);(isNaN(i)||i<1)&&(i=1),i>St&&(i=St),T(i.toString()),p(i)},U=i=>{const w=i.target.value;(w===""||/^\d*$/.test(w))&&T(w)},ee=i=>{p(i),T(i.toString()),B(!1)},O=()=>{a||B(!D)},se=()=>{d(o)};return t.jsxs("div",{className:"section-actions unified-action-bar",children:[P&&t.jsx("div",{className:"action-bar-left",children:P}),t.jsxs("div",{className:`unified-action-box ${a?"is-generating":""} ${r?"can-generate":""}`,children:[t.jsxs("div",{className:"quantity-section",ref:j,children:[t.jsx(it,{content:n==="zh"?"生成数量":"Quantity",theme:"light",children:t.jsxs("div",{className:`quantity-control ${D?"is-open":""} ${a?"is-disabled":""}`,children:[t.jsx("input",{type:"text",inputMode:"numeric",value:x,onChange:U,onBlur:v,"data-track":"ai_click_quantity_input",onClick:()=>!a&&B(!0),disabled:a,className:"quantity-input"}),t.jsx("button",{type:"button","data-track":"ai_click_quantity_toggle",onClick:i=>{i.stopPropagation(),O()},disabled:a,className:"quantity-toggle",children:t.jsx(zs,{className:`quantity-icon ${D?"is-open":""}`})})]})}),D&&t.jsxs("div",{className:"quantity-dropdown",children:[t.jsx("div",{className:"quantity-dropdown-header",children:n==="zh"?"选择数量":"Select Quantity"}),jn.map(i=>t.jsxs("button",{type:"button","data-track":"ai_click_quantity_select",onClick:()=>ee(i),className:`quantity-option ${o===i?"is-selected":""}`,children:[t.jsxs("span",{children:[i," ",s==="video"?n==="zh"?"个":i>1?"videos":"video":n==="zh"?"张":i>1?"images":"image"]}),o===i&&t.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:t.jsx("polyline",{points:"20 6 9 17 4 12"})})]},i))]})]}),t.jsx("div",{className:"action-divider"}),t.jsx("button",{"data-track":"ai_click_generate",onClick:se,disabled:a||!r,className:`generate-button ${a?"loading":""}`,children:a?n==="zh"?"生成中...":"Generating...":l?n==="zh"?"重新生成":"Regenerate":s==="video"?n==="zh"?"生成视频":"Generate Video":n==="zh"?"生成":"Generate"})]}),t.jsx(it,{content:n==="zh"?"重置表单":"Reset form",theme:"light",children:t.jsx(bt,{"data-track":"ai_click_reset",onClick:y,disabled:a,variant:"text",shape:"circle",icon:t.jsx(Ls,{}),className:"action-button--reset-subtle"})})]})},Cs=({error:n})=>n?t.jsx("div",{className:"form-error",children:n}):null,_s=({visible:n,query:s,position:a,showBelow:l=!1,selectedIndex:r,onSelect:d,onClose:y})=>{const{completedCharacters:P,isLoading:N}=Is(),o=e.useRef(null),p=e.useMemo(()=>{if(!s)return P;const x=s.toLowerCase();return P.filter(T=>T.username.toLowerCase().includes(x))},[P,s]);e.useEffect(()=>{if(!n||!o.current)return;const x=o.current.querySelector(".character-mention-popup__item--selected");x&&x.scrollIntoView({block:"nearest"})},[n,r]),e.useEffect(()=>{if(!n)return;const x=T=>{o.current&&!o.current.contains(T.target)&&y()};return document.addEventListener("mousedown",x),()=>document.removeEventListener("mousedown",x)},[n,y]);const D=e.useCallback(x=>{$s.track("character_used_in_prompt",{characterId:x.id,username:x.username}),d(x)},[d]);if(!n)return null;const B={position:"fixed",top:a.top,left:a.left,transform:l?"none":"translateY(-100%)",zIndex:is.DROPDOWN_PORTAL,maxHeight:"200px",overflowY:"auto"};return N?t.jsx("div",{ref:o,className:"character-mention-popup",style:B,children:t.jsx("div",{className:"character-mention-popup__empty",children:"加载中..."})}):p.length===0?t.jsx("div",{ref:o,className:"character-mention-popup",style:B,children:t.jsx("div",{className:"character-mention-popup__empty",children:s?`未找到 "${s}" 相关角色`:"暂无可用角色"})}):t.jsx("div",{ref:o,className:"character-mention-popup",style:B,children:p.map((x,T)=>t.jsxs("div",{className:`character-mention-popup__item ${T===r?"character-mention-popup__item--selected":""}`,onClick:()=>D(x),"data-track":"character_click_mention",children:[t.jsx("div",{className:"character-mention-popup__item-avatar",children:t.jsx(vn,{characterId:x.id,profilePictureUrl:x.profilePictureUrl,alt:x.username})}),t.jsxs("span",{className:"character-mention-popup__item-name",children:["@",x.username]})]},x.id))})},Mn={visible:!1,query:"",position:{top:0,left:0},showBelow:!1,startIndex:-1,selectedIndex:0};function ks({enabled:n=!0,onPromptChange:s,prompt:a}){const[l,r]=e.useState(Mn),d=e.useRef(null),{completedCharacters:y}=Is(),P=e.useCallback(x=>{if(!d.current)return{top:0,left:0,showBelow:!1};const T=d.current,j=T.getBoundingClientRect(),v=document.createElement("div"),U=window.getComputedStyle(T),ee=["fontFamily","fontSize","fontWeight","fontStyle","letterSpacing","lineHeight","textTransform","wordSpacing","whiteSpace","paddingTop","paddingRight","paddingBottom","paddingLeft","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","boxSizing"];v.style.position="absolute",v.style.top="0",v.style.left="-9999px",v.style.visibility="hidden",v.style.whiteSpace="pre-wrap",v.style.overflowWrap="break-word",v.style.overflow="hidden",v.style.width=`${T.clientWidth}px`,ee.forEach(we=>{v.style[we]=U.getPropertyValue(we.replace(/([A-Z])/g,"-$1").toLowerCase())}),document.body.appendChild(v);let O=0,se=0;try{const we=T.value.substring(0,x),Q=document.createTextNode(we),pe=document.createElement("span");pe.textContent="​",v.appendChild(Q),v.appendChild(pe);const ne=pe.getBoundingClientRect(),F=v.getBoundingClientRect();O=ne.top-F.top,se=ne.left-F.left}finally{document.body.removeChild(v)}const i=T.scrollTop,w=parseInt(U.lineHeight)||20;let _=j.top+O-i,S=j.left+se;const z=240,R=window.innerWidth;S+z>R-16&&(S=R-z-16),S<16&&(S=16);const Ce=_<220+16;return Ce?_=_+w+4:_=_-48,{top:_,left:S,showBelow:Ce}},[]),N=e.useCallback((x,T)=>{if(!n)return;const j=x.substring(0,T),v=j.lastIndexOf("@");if(v===-1){r(se=>({...se,visible:!1}));return}const U=v>0?x[v-1]:" ";if(!/\s/.test(U)&&v!==0){r(se=>({...se,visible:!1}));return}const ee=j.substring(v+1);if(ee.includes(" ")){r(se=>({...se,visible:!1}));return}const O=P(T);r({visible:!0,query:ee,position:{top:O.top,left:O.left},showBelow:O.showBelow,startIndex:v,selectedIndex:0})},[n,P]),o=e.useCallback(x=>{var ee;if(l.startIndex===-1)return;const T=a.substring(0,l.startIndex),j=((ee=d.current)==null?void 0:ee.selectionStart)||a.length,v=a.substring(j),U=`${T}@${x.username} ${v}`;s(U),r(O=>({...O,visible:!1})),setTimeout(()=>{if(d.current){const O=T.length+x.username.length+2;d.current.focus(),d.current.setSelectionRange(O,O)}},0)},[l.startIndex,a,s]),p=e.useCallback(x=>{if(!l.visible)return;const T=l.query?y.filter(j=>j.username.toLowerCase().includes(l.query.toLowerCase())):y;switch(x.key){case"ArrowDown":x.preventDefault(),r(j=>({...j,selectedIndex:Math.min(j.selectedIndex+1,T.length-1)}));break;case"ArrowUp":x.preventDefault(),r(j=>({...j,selectedIndex:Math.max(j.selectedIndex-1,0)}));break;case"Enter":case"Tab":T.length>0&&(x.preventDefault(),o(T[l.selectedIndex]));break;case"Escape":x.preventDefault(),r(j=>({...j,visible:!1}));break}},[l,y,o]),D=e.useCallback((x,T)=>{s(x),N(x,T)},[s,N]),B=e.useCallback(()=>{r(x=>({...x,visible:!1}))},[]);return{mentionState:l,setMentionState:r,textareaRef:d,completedCharacters:y,handleTextChange:D,handleKeyDown:p,handleCharacterSelect:o,closeMentionPopup:B,calculateMentionPosition:P}}const Ts=({prompt:n,onPromptChange:s,presetPrompts:a,language:l,type:r,disabled:d=!1,onError:y,enableMention:P=!0,videoProvider:N})=>{const[o,p]=e.useState(!1),D=e.useRef(null),B=e.useRef(null),[x,T]=e.useState(null),[j,v]=e.useState(0),{imageHistory:U,videoHistory:ee}=Rt();e.useEffect(()=>{if(typeof He.subscribeChanges=="function")return He.subscribeChanges(()=>{v(F=>F+1)})},[]);const O=e.useMemo(()=>In({generationType:r,language:l,promptContents:a,imageHistory:U,videoHistory:ee}),[U,l,r,a,j,ee]),se=P&&r==="video"&&N==="sora",{mentionState:i,textareaRef:w,handleTextChange:_,handleKeyDown:S,handleCharacterSelect:z,closeMentionPopup:R}=ks({enabled:se,onPromptChange:s,prompt:n}),Z=e.useCallback(()=>{if(B.current&&o){const F=B.current.getBoundingClientRect(),k=8,G=320,M=400,_e=window.innerHeight-F.top+4,X=Math.min(G,window.innerWidth-k*2),he=window.innerWidth-F.right,Ae=window.innerWidth-X-k,ke=Math.max(Math.min(he,Ae),k),ae=Math.min(M,F.top-k,window.innerHeight*.45);T({bottom:_e,right:ke,maxHeight:ae})}},[o]);e.useEffect(()=>{if(o)return Z(),window.addEventListener("scroll",Z,!0),window.addEventListener("resize",Z),()=>{window.removeEventListener("scroll",Z,!0),window.removeEventListener("resize",Z)}},[o,Z]),e.useEffect(()=>{const F=k=>{const G=k.target;if(D.current&&!D.current.contains(G)){const M=document.querySelector(".preset-prompt-panel-portal");M!=null&&M.contains(G)||p(!1)}};if(o)return document.addEventListener("mousedown",F),()=>document.removeEventListener("mousedown",F)},[o]);const Ce=e.useCallback(F=>{const k=typeof F=="string"?F:F.content;s(k),y==null||y(null),p(!1)},[s,y]),we=e.useCallback(F=>{const k=O.find(G=>G.id===F);k&&(k.pinned?He.unpinPrompt(r,k.content):He.pinPrompt(r,k.content),v(G=>G+1))},[r,O]),Q=e.useCallback(F=>{const k=O.find(G=>G.id===F);k&&(He.deletePrompt(r,k.content),v(G=>G+1))},[r,O]),pe=e.useCallback(F=>{const k=F.target.value,G=F.target.selectionStart||0;_(k,G),y==null||y(null)},[_,y]);e.useEffect(()=>{r!=="video"&&R()},[r,R]);const ne=()=>{if(!o||!x)return null;const F=l==="zh"?`${r==="image"?"图片":"视频"}描述预设`:`${r==="image"?"Image":"Video"} Description Presets`,k=t.jsx("div",{className:"preset-prompt-panel-portal",style:{position:"fixed",bottom:x.bottom,right:x.right,zIndex:is.DIALOG_POPOVER,"--panel-max-width":"calc(100vw - 16px)","--panel-max-height":`${x.maxHeight}px`},children:t.jsx(Fs,{title:F,items:O,onSelect:Ce,onTogglePin:we,onDelete:Q,language:l,disabled:d,showCount:!0})});return Us.createPortal(k,document.body)};return t.jsxs("div",{className:"form-field form-field--prompt",children:[t.jsxs("div",{className:"form-label-with-icon",children:[t.jsx("label",{className:"form-label",children:l==="zh"?`${r==="image"?"图片":"视频"}描述`:`${r==="image"?"Image":"Video"} Description`}),t.jsx("div",{className:"textarea-with-preset",children:t.jsxs("div",{className:"preset-tooltip-container",ref:D,children:[t.jsx("button",{ref:B,type:"button",className:"preset-icon-button",disabled:d,onClick:()=>p(!o),children:t.jsx(Vs,{size:16})}),ne()]})})]}),t.jsxs("div",{className:"prompt-textarea-wrapper",children:[t.jsx("textarea",{ref:w,className:"form-textarea",value:n,onChange:pe,onKeyDown:S,placeholder:Tn(l,r,N),rows:4,disabled:d}),t.jsx(Os,{className:"prompt-optimize-button",originalPrompt:n,language:l,scenarioId:r==="image"?"tool.image":"tool.video",disabled:d,tooltipPlacement:"top",allowStructuredMode:!0,onApply:F=>{s(F),y==null||y(null)}})]}),se&&t.jsx(_s,{visible:i.visible,query:i.query,position:i.position,showBelow:i.showBelow,selectedIndex:i.selectedIndex,onSelect:z,onClose:R})]})};function js(){return Gs("scene")}function es(n,s){return{id:js(),order:n,duration:s,prompt:""}}function Rn(n,s,a=1){if(n.length===0)return{valid:!1,error:"至少需要一个场景"};for(const r of n){if(r.duration<a)return{valid:!1,error:`场景 ${r.order} 时长不能少于 ${a} 秒`};if(r.duration>s)return{valid:!1,error:`场景 ${r.order} 时长不能超过 ${s} 秒`}}const l=n.find(r=>!r.prompt.trim());return l?{valid:!1,error:`场景 ${l.order} 需要填写提示词`}:{valid:!0}}function Nn(n){return n.sort((s,a)=>s.order-a.order).map((s,a)=>`Shot ${a+1}:
3
+ duration: ${s.duration}sec
4
+ Scene: ${s.prompt.trim()}`).join(`
5
+
6
+ `)}function An(n){const s=/Shot\s+(\d+):\s*\n\s*duration:\s*([\d.]+)\s*sec\s*\n\s*Scene:\s*([^\n]+(?:\n(?!Shot\s+\d+:)[^\n]*)*)/gi,a=[];let l;for(;(l=s.exec(n))!==null;){const r=parseInt(l[1],10),d=parseFloat(l[2]),y=l[3].trim();a.push({id:js(),order:r,duration:d,prompt:y})}return a.length===0?null:a.sort((r,d)=>r.order-d.order)}const Dn=({value:n,onChange:s,placeholder:a,disabled:l=!1,autoFocus:r=!1,enableMention:d=!0})=>{const{mentionState:y,textareaRef:P,handleTextChange:N,handleKeyDown:o,handleCharacterSelect:p,closeMentionPopup:D}=ks({enabled:d,onPromptChange:s,prompt:n}),B=e.useCallback(x=>{const T=x.target.value,j=x.target.selectionStart||0;N(T,j)},[N]);return e.useEffect(()=>{r&&P.current&&P.current.focus()},[r,P]),t.jsxs("div",{className:"scene-prompt-input",children:[t.jsx("textarea",{ref:P,className:"scene-prompt-input__textarea",value:n,onChange:B,onKeyDown:o,placeholder:a,disabled:l,rows:3}),d&&t.jsx(_s,{visible:y.visible,query:y.query,position:y.position,showBelow:y.showBelow,selectedIndex:y.selectedIndex,onSelect:p,onClose:D})]})},zn=({enabled:n,onEnabledChange:s,totalDuration:a,maxScenes:l,minSceneDuration:r,scenes:d,onScenesChange:y,disabled:P=!1})=>{const[N,o]=e.useState(null),p=e.useRef(null),D=d.map(i=>i.id).join("|");e.useEffect(()=>{if(!n||d.length===0)return;!(N?d.some(w=>w.id===N):!1)&&N!==d[0].id&&o(d[0].id)},[n,D,d,N]);const B=e.useCallback(()=>{if(d.length>=l)return;const i=d.reduce((z,R)=>z+R.duration,0),w=a-i;let _=Math.max(r,w/2);_=parseFloat(_.toFixed(1)),_<r&&(_=r);const S=es(d.length+1,_);y([...d,S]),o(S.id),setTimeout(()=>{var z;(z=p.current)==null||z.scrollIntoView({behavior:"smooth"})},100)},[d,l,a,r,y]),x=e.useCallback(i=>{var S;if(d.length<=1)return;const _=d.filter(z=>z.id!==i).map((z,R)=>({...z,order:R+1}));y(_),N===i&&o(((S=_[0])==null?void 0:S.id)||null)},[d,y,N]),T=e.useCallback(i=>{const w=d.filter(_=>_.id!==i).reduce((_,S)=>_+S.duration,0);return Math.max(r,a-w)},[d,a,r]),j=e.useCallback(i=>{const w=T(i),_=[],S=.1;for(let z=r;z<=w+.001;z+=S){const R=parseFloat(z.toFixed(1));R<=w&&_.push({label:`${R}`,value:R})}return _},[r,T]),v=e.useCallback((i,w)=>{const _=typeof w=="string"?parseFloat(w):w;if(isNaN(_))return;const S=T(i),z=d.map(R=>{if(R.id===i){const Z=Math.max(r,Math.min(_,S)),Ce=parseFloat(Z.toFixed(1));return Ce===R.duration?R:{...R,duration:Ce}}return R});z.every((R,Z)=>R===d[Z])||y(z)},[d,r,T,y]),U=e.useCallback((i,w)=>{const _=d.find(z=>z.id===i);if((_==null?void 0:_.prompt)===w)return;const S=d.map(z=>z.id===i?{...z,prompt:w}:z);y(S)},[d,y]),ee=e.useCallback(i=>{if(s(i),i&&d.length===0){const w=es(1,a);y([w]),o(w.id)}},[d,a,s,y]),O=e.useCallback(i=>{o(i)},[]),se=d.length<l;return t.jsxs("div",{className:"storyboard-editor",children:[t.jsxs("div",{className:"storyboard-editor__header",children:[t.jsxs("div",{className:"storyboard-editor__toggle",children:[t.jsx(Ks,{value:n,onChange:ee,disabled:P,size:"small"}),t.jsxs("div",{className:"storyboard-editor__title",children:[t.jsx("span",{className:"storyboard-editor__title-text",children:"故事场景模式"}),t.jsx("span",{className:"storyboard-editor__title-desc",children:"定义多个场景及其时长"})]})]}),n&&t.jsx("span",{className:"storyboard-editor__new-badge",children:"NEW"})]}),n&&t.jsxs("div",{className:"storyboard-editor__content",children:[t.jsxs("div",{className:"storyboard-editor__section-header",children:[t.jsx("span",{className:"storyboard-editor__section-title",children:"场景列表"}),t.jsxs("span",{className:"storyboard-editor__section-hint",children:["共 ",d.length," 个场景,已用 ",d.reduce((i,w)=>i+w.duration,0).toFixed(1)," 秒 / 总时长 ",a," 秒"]})]}),t.jsxs("div",{className:"storyboard-editor__scenes",children:[d.map((i,w)=>{const _=N===i.id,S=w===d.length-1;return t.jsxs("div",{className:`storyboard-editor__scene-wrapper ${_?"is-selected":""}`,children:[t.jsx("div",{className:`storyboard-editor__timeline-line ${S?"is-last":""}`}),t.jsx("div",{className:`storyboard-editor__timeline-node ${_?"is-selected":""}`,children:_?w+1:""}),!_&&t.jsxs("div",{className:"storyboard-editor__scene storyboard-editor__scene--compact",onClick:()=>O(i.id),children:[t.jsx("span",{className:"storyboard-editor__scene-index",children:w+1}),t.jsx("div",{className:"storyboard-editor__scene-preview",children:t.jsx("p",{className:"storyboard-editor__scene-preview-text",children:i.prompt||"暂无场景描述..."})}),t.jsxs("div",{className:"storyboard-editor__scene-duration-badge",children:[t.jsx(zt,{size:"12px"}),t.jsxs("span",{children:[i.duration,"s"]})]}),t.jsx(ls,{className:"storyboard-editor__scene-arrow",size:"14px"})]}),_&&t.jsxs("div",{className:"storyboard-editor__scene storyboard-editor__scene--expanded",children:[t.jsxs("div",{className:"storyboard-editor__scene-header",children:[t.jsx("div",{className:"storyboard-editor__scene-info",children:t.jsxs("span",{className:"storyboard-editor__scene-label",children:[t.jsx("span",{className:"storyboard-editor__active-indicator"}),"场景 ",w+1]})}),t.jsxs("div",{className:"storyboard-editor__scene-controls",children:[t.jsx(zt,{className:"storyboard-editor__time-icon"}),t.jsx(Ws,{value:parseFloat(i.duration.toFixed(1)),onChange:z=>v(i.id,z),disabled:P,className:"storyboard-editor__duration-select",size:"small",options:j(i.id),filterable:!0,creatable:!0,popupProps:{overlayClassName:"storyboard-editor__duration-popup"}}),d.length>1&&t.jsx(bt,{theme:"default",variant:"text",size:"small",icon:t.jsx(cs,{}),onClick:z=>{z.stopPropagation(),x(i.id)},disabled:P,className:"storyboard-editor__scene-delete"})]})]}),t.jsx("div",{className:"storyboard-editor__scene-prompt",children:t.jsx(Dn,{value:i.prompt,onChange:z=>U(i.id,z),placeholder:`描述场景 ${w+1} 的内容,输入 @ 可引用角色`,disabled:P,autoFocus:!0,enableMention:!0})})]})]},i.id)}),t.jsx("div",{ref:p})]}),se&&t.jsx(bt,{theme:"default",variant:"dashed",size:"medium",icon:t.jsx(qs,{}),onClick:B,disabled:P,className:"storyboard-editor__add-btn",block:!0,children:"添加场景"})]})]})},Es="aitu-dialog-task-list-width-",Nt=240,At=800,Ln=()=>{const n=Math.round(660);return Math.max(Nt,Math.min(At,n))},Ps=n=>{try{const s=localStorage.getItem(Es+n);if(s){const a=parseInt(s,10);if(!isNaN(a)&&a>=Nt&&a<=At)return a}}catch{}return Ln()},ts=(n,s)=>{try{localStorage.setItem(Es+n,s.toString())}catch{}},Ms=({isRightPanelVisible:n,onToggleRightPanel:s,onWidthChange:a,rightPanelWidth:l,minWidth:r=Nt,maxWidth:d=At,onResizeStart:y,onResizeEnd:P,language:N="zh",disabled:o=!1,storageKey:p="image"})=>{const[D,B]=e.useState(!1),x=e.useRef(0),T=e.useRef(0);e.useEffect(()=>(D?(document.body.style.userSelect="none",document.body.style.cursor="col-resize"):(document.body.style.userSelect="",document.body.style.cursor=""),()=>{document.body.style.userSelect="",document.body.style.cursor=""}),[D]);const j=e.useCallback(U=>{if(o||!n)return;U.preventDefault(),U.stopPropagation(),B(!0),x.current=U.clientX,T.current=l,y==null||y();const ee=se=>{const i=x.current-se.clientX,w=Math.max(r,Math.min(d,T.current+i));a(w)},O=()=>{B(!1),P==null||P(),T.current+(x.current-document.body.getBoundingClientRect().left),ts(p,l),document.removeEventListener("mousemove",ee),document.removeEventListener("mouseup",O)};document.addEventListener("mousemove",ee),document.addEventListener("mouseup",O)},[o,n,l,r,d,a,y,P,p]);e.useEffect(()=>{!D&&n&&ts(p,l)},[l,D,n,p]);const v=n?N==="zh"?"隐藏任务列表":"Hide Task List":N==="zh"?"显示任务列表":"Show Task List";return t.jsxs("div",{className:`resizable-divider ${D?"is-dragging":""} ${n?"":"is-collapsed"} ${o?"is-disabled":""}`,onMouseDown:j,children:[t.jsx("div",{className:"resizable-divider__bar"}),t.jsx(it,{content:v,placement:"left",children:t.jsx("button",{type:"button",className:"resizable-divider__toggle",onClick:U=>{U.stopPropagation(),s()},"aria-label":v,children:n?t.jsx(ls,{size:"14px"}):t.jsx(Bs,{size:"14px"})})})]})},Rs=({storageKey:n,language:s})=>{const[a,l]=e.useState(()=>{try{return localStorage.getItem(n)!=="false"}catch{return!0}}),r=e.useCallback(d=>{l(d);try{localStorage.setItem(n,String(d))}catch{}},[n]);return t.jsx(it,{content:s==="zh"?"生成后自动插入画布":"Auto insert to canvas after generation",theme:"light",children:t.jsx(Hs,{checked:a,onChange:r,className:"auto-insert-checkbox"})})};function jt(n){try{return localStorage.getItem(n)!=="false"}catch{return!0}}function $n(n={}){const{taskType:s}=n,{tasks:a,isLoading:l}=gn(),{retryTask:r,deleteTask:d}=bn(),y=e.useMemo(()=>[...s?a.filter(p=>p.type===s):a].sort((p,D)=>D.createdAt-p.createdAt),[a,s]),P=e.useCallback(async()=>{},[]),N=e.useCallback(async()=>{if(xn(),!await xt.isAvailable())return;const p=await xt.getAllTasks();p.length>0&&kt.restoreTasks(p)},[]);return{tasks:y,isLoading:l,isLoadingMore:!1,hasMore:!1,totalCount:y.length,loadedCount:y.length,loadMore:P,refresh:N,retryTask:r,deleteTask:d}}let rt={prompt:"",imageCount:0,knowledgeContextCount:0};function Vn(n){rt={prompt:n.prompt,imageCount:n.imageCount,knowledgeContextCount:n.knowledgeContextCount}}function On(){rt={prompt:"",imageCount:0,knowledgeContextCount:0}}function Fn(){return rt.prompt.trim().length>0||rt.imageCount>0||rt.knowledgeContextCount>0}const Ns=({taskIds:n,taskType:s,onEditTask:a})=>{const{tasks:l,isLoading:r,isLoadingMore:d,hasMore:y,totalCount:P,loadedCount:N,loadMore:o,retryTask:p,deleteTask:D}=$n({taskType:s}),{board:B,openDialog:x}=ds(),{confirm:T,confirmDialog:j}=Xs(),[v,U]=e.useState(!1),[ee,O]=e.useState(null),[se,i]=e.useState(!1),[w,_]=e.useState(0),[S,z]=e.useState("single"),[R,Z]=e.useState(""),[Ce,we]=e.useState(null),[Q,pe]=e.useState(!1),ne=e.useMemo(()=>l.filter(u=>u.status===We.FAILED).length,[l]),F=e.useCallback(()=>{const u=l.filter(h=>h.status===We.FAILED);u.forEach(h=>D(h.id)),pe(!1),Me.success(`已清除 ${u.length} 个失败任务`)},[l,D]),k=(u,h)=>{var oe,g,ue,me,De,ge,ve,ye,le,Re,Ne;if(!h.trim())return!0;const $=h.toLowerCase().split(/\s+/).filter(Boolean),E={[We.PENDING]:"处理中",[We.PROCESSING]:"处理中",[We.COMPLETED]:"已完成",[We.FAILED]:"失败",[We.CANCELLED]:"已取消"},C=[],A=(oe=u.params)!=null&&oe.params&&typeof u.params.params=="object"?u.params.params:null;C.push(((g=u.params)==null?void 0:g.prompt)??""),C.push(((ue=u.params)==null?void 0:ue.model)??""),C.push(u.id??""),C.push(E[u.status]??String(u.status)),(me=u.params)!=null&&me.batchId&&C.push(String(u.params.batchId)),(De=u.params)!=null&&De.batchIndex&&C.push(String(u.params.batchIndex)),(ge=u.params)!=null&&ge.batchTotal&&C.push(String(u.params.batchTotal)),typeof(A==null?void 0:A.model_name)=="string"&&C.push(A.model_name),typeof(A==null?void 0:A.mode)=="string"&&C.push(A.mode),typeof(A==null?void 0:A.klingAction2)=="string"&&C.push(A.klingAction2),(ve=u.result)!=null&&ve.format&&C.push(String(u.result.format)),(ye=u.result)!=null&&ye.width&&((le=u.result)!=null&&le.height)?C.push(`${u.result.width}x${u.result.height}`):(Re=u.params)!=null&&Re.width&&((Ne=u.params)!=null&&Ne.height)&&C.push(`${u.params.width}x${u.params.height}`);const K=C.join(" ").toLowerCase();return $.every(J=>K.includes(J))},G=e.useMemo(()=>{let u=l;return n&&n.length>0&&(u=u.filter(h=>n.includes(h.id))),R.trim()&&(u=u.filter(h=>k(h,R))),u.sort((h,$)=>$.createdAt-h.createdAt)},[l,n,R]),M=u=>{p(u)},_e=u=>{O(u),U(!0)},X=()=>{ee&&D(ee),U(!1),O(null)},he=async u=>{const h=l.find(E=>E.id===u);if(!h)return;const $=sn(h);if($.length!==0)try{const E=await nn($);E.openedCount>0&&E.downloadedCount===0?Me.success(E.openedCount>1?`已打开 ${E.openedCount} 个链接,请在新标签页下载`:"资源不支持直接下载,已打开链接"):Me.success(h.type===Se.AUDIO?$.length>1?"多条音频已开始下载":"音频下载成功":$.length>1?"多图已开始下载":"下载成功")}catch(E){console.error("Download failed:",E),Me.error("下载失败,请稍后重试")}},Ae=async u=>{var $,E,C,A;const h=l.find(K=>K.id===u);if(!(($=h==null?void 0:h.result)!=null&&$.url)&&!((C=(E=h==null?void 0:h.result)==null?void 0:E.urls)!=null&&C.length)||!B){console.warn("Cannot insert: task result or board not available"),Me.warning("无法插入:白板未就绪");return}try{if(h.type===Se.IMAGE){const K=(A=h.result.urls)!=null&&A.length?h.result.urls:[h.result.url];for(const oe of K)await en(B,oe);Me.success(K.length>1?"多图已插入到白板":"图片已插入到白板")}else h.type===Se.VIDEO&&(await tn(B,h.result.url),Me.success("视频已插入到白板"))}catch(K){console.error("Failed to insert to board:",K),Me.error(`插入失败: ${K instanceof Error?K.message:"未知错误"}`)}},ke=e.useCallback(async()=>Fn()?T({title:"覆盖当前输入?",description:"当前 AI 图片生成窗口已有提示词或参考图,继续会覆盖当前输入。",confirmText:"覆盖当前输入",cancelText:"取消",confirmTheme:"warning"}):!0,[T]),ae=async u=>{const h=await xt.getTask(u)||kt.getTask(u)||l.find($=>$.id===u);if(!h||h.type!==Se.IMAGE){Me.warning("未找到可回填的图片任务");return}await ke()&&(a?a(h):x(xe.aiImageGeneration,Qt(h)),Me.success("已回填历史提示词和参考图,请手动发送"))},ce=async u=>{var $,E;const h=await xt.getTask(u)||kt.getTask(u)||l.find(C=>C.id===u);if(!h){console.warn("Cannot edit: task not found");return}if(a){a(h);return}if(h.type===Se.IMAGE)x(xe.aiImageGeneration,Qt(h));else if(h.type===Se.VIDEO){const C={initialPrompt:h.params.prompt,initialDuration:typeof h.params.seconds=="string"?parseInt(h.params.seconds,10):h.params.seconds,initialModel:h.params.model,initialSize:h.params.size,initialImages:h.params.uploadedImages,initialResultUrl:($=h.result)==null?void 0:$.url,initialResultUrls:(E=h.result)==null?void 0:E.urls};x(xe.aiVideoGeneration,C)}},te=u=>{const h=l.find($=>$.id===u);h&&we(h)},de=e.useMemo(()=>{const u=new Set;return G.filter(h=>{var $,E,C,A;return h.status!==We.COMPLETED||!(($=h.result)!=null&&$.url)&&!((C=(E=h.result)==null?void 0:E.urls)!=null&&C.length)||h.type!==Se.IMAGE&&h.type!==Se.VIDEO&&!(h.type===Se.AUDIO&&((A=h.result)==null?void 0:A.resultKind)!=="lyrics")||u.has(h.id)?!1:(u.add(h.id),!0)})},[G]),{previewMediaItems:ie,taskIdToPreviewConfig:je}=e.useMemo(()=>{var $,E,C,A,K,oe;const u=[],h=new Map;for(const g of de){const ue=u.length,me=(($=g.result)==null?void 0:$.title)||g.params.title||((E=g.params.prompt)==null?void 0:E.substring(0,50))||"媒体预览";if(g.type===Se.AUDIO){const ge=((A=(C=g.result)==null?void 0:C.clips)==null?void 0:A.filter(le=>!!le.audioUrl).map((le,Re)=>{var Ne,J,Ue;return{id:le.clipId||le.id||`${g.id}-${Re}`,url:le.audioUrl,type:"audio",title:le.title||((Ne=g.result)!=null&&Ne.clips&&g.result.clips.length>1?`${me} (${Re+1}/${g.result.clips.length})`:me),posterUrl:le.imageLargeUrl||le.imageUrl||((J=g.result)==null?void 0:J.previewImageUrl),duration:typeof le.duration=="number"?le.duration:(Ue=g.result)==null?void 0:Ue.duration,prompt:g.params.prompt,tags:typeof g.params.tags=="string"?g.params.tags:void 0,artist:g.params.model||g.params.mv||"Aitu",album:"Aitu Generated"}}))??[],ve=(K=g.result.urls)!=null&&K.length?g.result.urls:g.result.url?[g.result.url]:[],ye=ge.length>0?ge:ve.map((le,Re)=>{var Ne,J;return{id:ve.length>1?`${g.id}-${Re}`:g.id,url:le,type:"audio",title:ve.length>1?`${me} (${Re+1}/${ve.length})`:me,posterUrl:(Ne=g.result)==null?void 0:Ne.previewImageUrl,duration:(J=g.result)==null?void 0:J.duration,prompt:g.params.prompt,tags:typeof g.params.tags=="string"?g.params.tags:void 0,artist:g.params.model||g.params.mv||"Aitu",album:"Aitu Generated"}});u.push(...ye)}else{const ge=(oe=g.result.urls)!=null&&oe.length?g.result.urls:[g.result.url],ve=g.type===Se.VIDEO?"video":"image";for(let ye=0;ye<ge.length;ye++)u.push({id:ge.length>1?`${g.id}-${ye}`:g.id,url:ve==="image"?Js(ge[ye]):ge[ye],type:ve,title:ge.length>1?`${me} (${ye+1}/${ge.length})`:me})}const De=u.length-ue;h.set(g.id,{mode:g.type===Se.AUDIO&&De>1?"compare":"single",index:g.type===Se.AUDIO&&De>1?Array.from({length:Math.min(De,4)},(ge,ve)=>ue+ve):ue})}return{previewMediaItems:u,taskIdToPreviewConfig:h}},[de]),Fe=e.useCallback(u=>{const h=je.get(u);h!==void 0&&(z(h.mode),_(h.index),i(!0))},[je]),re=e.useCallback(()=>{i(!1)},[]),I=R.trim()&&G.length===0&&l.length>0,H=P>0?P:l.length;return t.jsxs(t.Fragment,{children:[j,t.jsxs("div",{className:"dialog-task-list",children:[t.jsxs("div",{className:"dialog-task-list__header",children:[t.jsxs("div",{className:"dialog-task-list__header-main",children:[t.jsxs("h4",{children:["生成任务 (",H,")"]}),t.jsx("div",{className:"dialog-task-list__header-actions",children:ne>0&&t.jsx(it,{content:`清除全部失败任务 (${ne})`,theme:"light",children:t.jsx(bt,{size:"small",variant:"text",icon:t.jsx(cs,{}),onClick:()=>pe(!0)})})})]}),t.jsx("div",{className:"dialog-task-list__search",children:t.jsx(Qs,{value:R,onChange:u=>Z(u),placeholder:"搜索任务(提示词/模型/...)",clearable:!0,prefixIcon:t.jsx(Ys,{}),size:"small"})})]}),t.jsx(yn,{tasks:G,onRetry:M,onDelete:_e,onDownload:he,onInsert:Ae,onEdit:ce,onRegenerate:ae,onPreviewOpen:Fe,onExtractCharacter:te,hasMore:y,isLoadingMore:d,onLoadMore:o,totalCount:H,loadedCount:N,className:"dialog-task-list__content",emptyContent:t.jsx("div",{className:"dialog-task-list__empty",children:r?t.jsx("p",{children:"加载中..."}):I?t.jsx("p",{children:"未找到匹配的任务"}):t.jsx("p",{children:"暂无生成任务"})})})]}),t.jsx(Lt,{open:v,title:"确认删除",description:"确定要删除此任务吗?此操作无法撤销。",confirmText:"删除",cancelText:"取消",danger:!0,onOpenChange:U,onConfirm:X}),t.jsx(Lt,{open:Q,title:"清除失败任务",description:`确定要清除全部 ${ne} 个失败任务吗?此操作无法撤销。`,confirmText:"清除",cancelText:"取消",danger:!0,onOpenChange:pe,onConfirm:F}),t.jsx(Zs,{visible:se,items:ie,initialMode:S,initialIndex:w,onClose:re,showThumbnails:!0}),t.jsx(wn,{visible:!!Ce,task:Ce,onClose:()=>we(null),onCreateComplete:u=>{we(null)}})]})};function As(n){if(!n)return;if(n==="auto")return lt;const s=n.replace(/[xX]/g,":");return ln.some(a=>a.value===s)?s:void 0}function ht(n,s){return As(n.size)||s||lt}function ss(n,s,a){if(n.startsWith("mj")||!a)return s;const l=a===lt?"auto":Tt(a);return!l||!rn(n).some(r=>r.value===l)||s.size===l?s:{...s,size:l}}function ns(n){var a;const s=n.length===1?(a=n[0].maskImage)==null?void 0:a.trim():"";return s?{referenceImages:[n[0].url],generationMode:"image_edit",maskImage:s}:{}}function Un(n){return n.map(({maskImage:s,...a})=>a)}const Gn=({initialPrompt:n="",initialImages:s=[],initialKnowledgeContextRefs:a=[],selectedElementIds:l=[],initialWidth:r,initialHeight:d,initialResultUrl:y,initialAspectRatio:P,targetFrameId:N,targetFrameDimensions:o,pptSlideImage:p,pptSlidePrompt:D,pptReplaceElementId:B,selectedModel:x,selectedModelRef:T,onModelChange:j,onModelRefChange:v,externalBatchId:U,assetMetadata:ee,initialAutoInsertToCanvas:O,onDraftChange:se}={})=>{var et,tt,mt;const i=us("image"),w=Je("image"),_=Oe(i,w.modelId,Le(w.profileId,w.modelId))||It("image",w.modelId,Le(w.profileId,w.modelId)),[S,z]=e.useState((_==null?void 0:_.id)||((et=i[0])==null?void 0:et.id)||"gemini-2.5-flash-image-vip"),[R,Z]=e.useState(ze(_)||Le(w.profileId,w.modelId)),Ce=Te((_==null?void 0:_.id)||((tt=i[0])==null?void 0:tt.id)||"gemini-2.5-flash-image-vip",ze(_)||Le(w.profileId,w.modelId)),we=$t((_==null?void 0:_.id)||((mt=i[0])==null?void 0:mt.id)||"gemini-2.5-flash-image-vip",Ce),[Q,pe]=e.useState(n),[ne,F]=e.useState(a),[k,G]=e.useState(we.extraParams),M=e.useMemo(()=>{if(Oe(i,S,R)||!S)return i;const V=It("image",S,R);return V?[V,...i]:i},[S,R,i]),[_e,X]=e.useState(r||1024),[he,Ae]=e.useState(d||1024),[ke,ae]=e.useState(P||ht(we.extraParams,we.aspectRatio)),[ce,te]=e.useState(null),[de,ie]=e.useState(s),[je,Fe]=e.useState(!0),[re,I]=e.useState(()=>Ps("image")),[H,u]=e.useState("config"),h=e.useRef(null),{viewportWidth:$}=Pt(),E=$<=768,{imageHistory:C}=Rt(),[A,K]=e.useState(0),{isGenerating:oe}=ws("image"),{language:g}=Mt(),{createTask:ue}=gs(),me=e.useRef(!1);e.useEffect(()=>He.subscribeChanges(()=>{K(b=>b+1)}),[]);const De=S.startsWith("mj"),ge=Ie.useMemo(()=>an(S).length>0,[S]),[ve,ye]=e.useState(!1);e.useEffect(()=>{if(ve)return;const b=$t(S,Te(S,R)),V=P?ss(S,b.extraParams,P):b.extraParams;G(V),ae(ht(V,P||b.aspectRatio))},[S,R,P,ve]);const le=e.useCallback((b,V)=>{if(!V||V==="default"){b==="size"&&ae(lt),G(q=>{const W={...q};return delete W[b],W});return}b==="size"&&ae(As(V)||lt),G(q=>({...q,[b]:V}))},[]),Re=e.useCallback(b=>{I(b)},[]),Ne=e.useCallback(()=>{Fe(b=>!b)},[]),J=Ie.useRef("");e.useEffect(()=>{if(ve)return;const b=JSON.stringify({prompt:n,images:s==null?void 0:s.map(V=>V.url),knowledgeContextRefs:a.map(V=>V.noteId),elementIds:l,width:r,height:d,result:y,aspectRatio:P,targetFrameId:N,pptSlideImage:p,pptSlidePrompt:D,pptReplaceElementId:B});J.current!==b&&(J.current=b,pe(n),F(a),ie(s||[]),r&&X(r),d&&Ae(d),P&&(ae(P),G(V=>ss(S,V,P))))},[n,s,a,l,r,d,y,P,N,p,D,B,ve,S]);const Ue=e.useRef("");e.useEffect(()=>(Vn({prompt:Q,imageCount:de.length,knowledgeContextCount:ne.length}),On),[ne.length,Q,de.length]),e.useEffect(()=>{if(!se)return;const b={prompt:Q,images:de.map(W=>({url:W.url,name:W.name})),aspectRatio:ke},V=JSON.stringify(b);if(Ue.current===V)return;const q=window.setTimeout(()=>{Ue.current!==V&&(Ue.current=V,se(b))},200);return()=>{window.clearTimeout(q)}},[ke,se,Q,de]),e.useEffect(()=>{const b=V=>{var W;const q=V.imageModelName||((W=M[0])==null?void 0:W.id)||"gemini-2.5-flash-image-vip";if(q!==S){z(q);const Ee=Oe(M,q,R);Z(ze(Ee)||null)}};return $e.addListener(b),()=>$e.removeListener(b)},[S,R,M]),e.useEffect(()=>{if(M.length===0)return;if(!Oe(M,S,R)){const V=M[0];z(V.id);const q=ze(V);Z(W=>W&&q&&W.profileId===q.profileId&&W.modelId===q.modelId?W:q)}},[S,R,M]),e.useEffect(()=>{if(!x)return;const b=Te(S,R),V=Te(x,T);if(b!==V){z(x);const q=Oe(M,x,T),W=ze(q)||T||null;Z(Ee=>Ee&&W&&Ee.profileId===W.profileId&&Ee.modelId===W.modelId?Ee:W)}},[S,R,x,T,M]),e.useEffect(()=>{!ge&&Object.keys(k).length>0&&G({})},[ge,k]),e.useEffect(()=>{on({currentModel:S,currentSelectionKey:Te(S,R),extraParams:k,aspectRatio:ke})},[S,R,k,ke]),e.useEffect(()=>(te(null),()=>{te(null)}),[]);const Qe=()=>{const b=vt(S,{});pe(""),G(b),ie([]),F([]),te(null),ae(ht(b)),u("config"),ye(!1),window.dispatchEvent(new CustomEvent("ai-image-clear"))},ct=Ie.useMemo(()=>bs("image",g,C),[C,g,A]),dt=!!(p||D!=null&&D.trim()),Ge=b=>{dt||(xs("image",b),K(V=>V+1))},ut=b=>{const V=b.params.model||S,q={...b.params.params||{},...b.params.size!==void 0?{size:b.params.size}:{},...b.params.resolution!==void 0?{resolution:b.params.resolution}:{},...b.params.quality!==void 0?{quality:b.params.quality}:{}},W=Object.keys(q).length>0?vt(V,q):vt(V,{});if(ye(!0),u("config"),pe(b.params.prompt||""),G(W),X(b.params.width||1024),Ae(b.params.height||1024),ie(Sn(b)),F(Cn(b)),b.params.model){z(b.params.model),Z(b.params.modelRef||null);const Ee=$e.get();$e.update({...Ee,imageModelName:b.params.model})}ae(ht(W,b.params.aspectRatio)),te(null)},Ye=async()=>Promise.all(de.map(async b=>{if(b.file)return new Promise((V,q)=>{const W=new FileReader;W.onload=()=>{V({type:"url",url:W.result,name:b.name,maskImage:b.maskImage})},W.onerror=q,W.readAsDataURL(b.file)});if(b.url)return{type:"url",url:b.url,name:b.name,maskImage:b.maskImage};throw new Error("Invalid image data")})),Ze=async(b=1)=>{const V=b;if(!me.current){me.current=!0;try{if(!Q||!Q.trim()){te(g==="zh"?"请输入图像描述":"Please enter image description");return}if(!cn("image",R||S)&&!await dn()){te(g==="zh"?"需要 API Key 才能生成图片":"API Key is required to generate images");return}De&&te(null);try{const q=typeof _e=="string"?parseInt(_e)||1024:_e,W=typeof he=="string"?parseInt(he)||1024:he,Ee=await Ye(),Xe=Un(Ee);if(V>1){const f=[],L=`batch_${Date.now()}`,Y=S||Je("image").modelId,fe=Y.startsWith("mj")?[Q.trim(),Yt(k)].filter(Boolean).join(" "):(Q||"").trim(),be=!Y.startsWith("mj")&&Object.keys(k).length>0?k:void 0,Ke=be!=null&&be.size?be.size:Tt(ke),qe=ns(Ee);for(let Pe=0;Pe<V;Pe++){const at={prompt:fe,knowledgeContextRefs:ne,width:q,height:W,aspectRatio:ke,size:Ke,model:Y,modelRef:R||null,uploadedImages:Xe,batchId:L,batchIndex:Pe+1,batchTotal:V,assetMetadata:ee,autoInsertToCanvas:O??jt(ot.AI_IMAGE_AUTO_INSERT),targetFrameId:N,targetFrameDimensions:o,pptSlideImage:p,pptSlidePrompt:D,pptReplaceElementId:B,...qe,...be?{params:be}:{}},Dt=ue(at,Se.IMAGE);Dt&&f.push(Dt.id)}f.length>0?(Me.success(g==="zh"?`已添加 ${f.length} 个任务到队列`:`Added ${f.length} tasks to queue`),Ge(fe),te(null),u("tasks"),ye(!1)):te(g==="zh"?"批量任务创建失败,请稍后重试":"Failed to create batch tasks, please try again later");return}const st=S||Je("image").modelId,nt=st.startsWith("mj")?[Q.trim(),Yt(k)].filter(Boolean).join(" "):(Q||"").trim(),Ve=!st.startsWith("mj")&&Object.keys(k).length>0?k:void 0,ft=Ve!=null&&Ve.size?Ve.size:Tt(ke),pt=ns(Ee),c={prompt:nt,knowledgeContextRefs:ne,width:q,height:W,aspectRatio:ke,size:ft,model:st,modelRef:R||null,uploadedImages:Xe,autoInsertToCanvas:O??jt(ot.AI_IMAGE_AUTO_INSERT),batchId:U||`image_single_${Date.now()}`,batchIndex:1,batchTotal:1,assetMetadata:ee,targetFrameId:N,targetFrameDimensions:o,pptSlideImage:p,pptSlidePrompt:D,pptReplaceElementId:B,...pt,...Ve?{params:Ve}:{}};ue(c,Se.IMAGE)?(Me.success(g==="zh"?"任务已添加到队列,将在后台生成":"Task added to queue, will be generated in background"),Ge(nt),te(null),u("tasks"),ye(!1)):te(g==="zh"?"任务创建失败,请检查参数或稍后重试":"Failed to create task, please check parameters or try again later")}catch(q){console.error("Failed to create task:",q);let W=g==="zh"?"任务创建失败,请检查参数或稍后重试":"Failed to create task, please check parameters or try again later";q.message&&(q.message.includes("exceed 5000 characters")?W=g==="zh"?"提示词不能超过 5000 字符":"Prompt must not exceed 5000 characters":q.message.includes("Duplicate submission")?W=g==="zh"?"请勿重复提交,请等待 5 秒后再试":"Duplicate submission. Please wait 5 seconds.":q.message.includes("Invalid parameters")&&(W=g==="zh"?`参数错误: ${q.message.replace("Invalid parameters: ","")}`:q.message)),te(W)}}finally{me.current=!1}}};return ys(oe,Q,()=>Ze(1)),t.jsxs("div",{className:"ai-image-generation-container",children:[E?t.jsxs("div",{className:"ai-generation-mobile-switcher",role:"tablist",children:[t.jsx("button",{type:"button",className:`ai-generation-mobile-switcher__tab ${H==="config"?"ai-generation-mobile-switcher__tab--active":""}`,onClick:()=>u("config"),children:"生成设置"}),t.jsx("button",{type:"button",className:`ai-generation-mobile-switcher__tab ${H==="tasks"?"ai-generation-mobile-switcher__tab--active":""}`,onClick:()=>u("tasks"),children:"生成任务"})]}):null,t.jsxs("div",{className:`main-content ${E?"main-content--mobile-panels":""}`,ref:h,children:[t.jsxs("div",{className:`ai-image-generation-section ${E&&H!=="config"?"ai-generation-mobile-panel--hidden":""}`,children:[t.jsxs("div",{className:"ai-image-generation-form",children:[x!==void 0&&j&&t.jsx("div",{className:"form-header-row",children:t.jsx("div",{className:"model-selector-wrapper",children:t.jsx(ms,{selectedModel:S,selectedSelectionKey:Te(S,R),onSelect:b=>{z(b),Z(null),j(b),v==null||v(null)},onSelectModel:b=>{z(b.id);const V=ze(b);Z(V),j(b.id),v==null||v(V)},language:g,models:M,placement:"down",variant:"form",disabled:oe})})}),ge&&t.jsx("div",{className:"model-params-row",children:t.jsx(fs,{selectedParams:k,onParamChange:le,modelId:S,language:g,disabled:oe,placement:"down"})}),t.jsx(vs,{images:de,onImagesChange:ie,language:g,disabled:oe,multiple:!0,label:g==="zh"?"参考图片 (可选)":"Reference Images (Optional)",onError:te}),t.jsx(Ts,{prompt:Q,onPromptChange:pe,presetPrompts:ct,language:g,type:"image",disabled:oe,onError:te}),t.jsx(ps,{value:ne,onChange:F,disabled:oe,language:g}),t.jsx(Cs,{error:ce})]}),t.jsx(Ss,{language:g,type:"image",isGenerating:oe,hasGenerated:!1,canGenerate:!!(Q&&Q.trim()),onGenerate:Ze,onReset:Qe,leftContent:t.jsx(Rs,{storageKey:ot.AI_IMAGE_AUTO_INSERT,language:g})})]}),E?null:t.jsx(Ms,{isRightPanelVisible:je,onToggleRightPanel:Ne,onWidthChange:Re,rightPanelWidth:re,language:g,storageKey:"image"}),(E||je)&&t.jsx("div",{className:`task-sidebar ${E?"task-sidebar--mobile-panel":""} ${E&&H!=="tasks"?"ai-generation-mobile-panel--hidden":""}`,style:E?void 0:{width:re,flexShrink:0},children:t.jsx(Ns,{taskType:Se.IMAGE,onEditTask:ut})})]})]})};function as(n,s){const a=Object.keys(n),l=Object.keys(s);return a.length!==l.length?!1:a.every(r=>n[r]===s[r])}function os(n,s,a){return n.slice(0,s).map((l,r)=>({...l,slot:r,slotLabel:a[r]||`参考图${r+1}`}))}function Kn(n,s){return n.length===s.length&&n.every((a,l)=>{const r=s[l];return a.slot===r.slot&&a.slotLabel===r.slotLabel&&a.url===r.url&&a.name===r.name&&a.file===r.file})}function Ct(n,s){return((n==null?void 0:n.profileId)||null)===((s==null?void 0:s.profileId)||null)&&((n==null?void 0:n.modelId)||null)===((s==null?void 0:s.modelId)||null)}function Ds(n,s){const a=Le(s==null?void 0:s.profileId,s==null?void 0:s.modelId);return(a==null?void 0:a.modelId)===(n||null)?a:null}function Be(n,s,a){if(!s)return null;const l=Ds(s,a),r=Oe(n,s,l);return ze(r)||l}function Wn(n){return n.reduce((s,a)=>(a.defaultValue&&(s[a.id]=a.defaultValue),s),{})}function _t(n,s){return Wn(hs(n,s||n,{}))}function gt(n,s,a){return{...n,...s!=null?{duration:String(s)}:{},...a?{size:a}:{}}}function rs(n,s,a){const{duration:l,size:r,...d}=n;return{extraParams:d,duration:s,size:a}}const qn=({initialPrompt:n="",initialImage:s,initialImages:a,initialKnowledgeContextRefs:l=[],initialDuration:r,initialModel:d,initialSize:y,initialResultUrl:P,selectedModel:N,selectedModelRef:o,onModelChange:p,onModelRefChange:D,externalBatchId:B,initialAutoInsertToCanvas:x,onDraftChange:T}={})=>{var Ve,ft,pt;const j=us("video"),[v,U]=e.useState(n),[ee,O]=e.useState(l),[se,i]=e.useState(null),[w,_]=e.useState(!0),[S,z]=e.useState(()=>Ps("video")),[R,Z]=e.useState("config"),Ce=e.useRef(null),{viewportWidth:we}=Pt(),Q=we<=768,pe=Je("video"),ne=d||pe.modelId,F=Ds(ne,d&&d===N?o:pe.modelId===ne?Le(pe.profileId,pe.modelId):null),k=Oe(j,ne,F)||It("video",ne,F),G=Be(j,(k==null?void 0:k.id)||ne,ze(k)||F),[M,_e]=e.useState((k==null?void 0:k.id)||((Ve=j[0])==null?void 0:Ve.id)||yt("veo3")),[X,he]=e.useState(G),Ae=Te((k==null?void 0:k.id)||((ft=j[0])==null?void 0:ft.id)||yt("veo3"),G),ke=Vt((k==null?void 0:k.id)||((pt=j[0])==null?void 0:pt.id)||yt("veo3"),Ae),ae=Ie.useMemo(()=>{if(Oe(j,M,X)||!M)return j;const m=It("video",M,X);return m?[m,...j]:j},[M,X,j]),[ce,te]=e.useState(()=>gt(ke.extraParams,(r==null?void 0:r.toString())||ke.duration,y||ke.size)),de=Ie.useMemo(()=>hs(M,X||M,ce),[M,X,ce]),ie=Ie.useMemo(()=>Ot(M,X||M,ce),[M,X,ce]),je=Ie.useMemo(()=>(ie.imageUpload.labels||[]).join("|"),[ie.imageUpload.labels]),Fe=Ie.useMemo(()=>je?je.split("|"):[],[je]),re=Ie.useMemo(()=>({maxCount:ie.imageUpload.maxCount,mode:ie.imageUpload.mode,required:ie.imageUpload.required,labels:Fe,labelsSignature:je}),[ie.imageUpload.maxCount,ie.imageUpload.mode,ie.imageUpload.required,Fe,je]),I=Ie.useMemo(()=>{var f;const c=de.find(L=>L.id==="duration"),m=ce.duration;return m&&((f=c==null?void 0:c.options)!=null&&f.some(L=>L.value===m))?m:(c==null?void 0:c.defaultValue)||ie.defaultDuration},[de,ie.defaultDuration,ce.duration]),H=Ie.useMemo(()=>{var f;const c=de.find(L=>L.id==="size"),m=ce.size;return m&&((f=c==null?void 0:c.options)!=null&&f.some(L=>L.value===m))?m:(c==null?void 0:c.defaultValue)||ie.defaultSize},[de,ie.defaultSize,ce.size]),u=Ie.useMemo(()=>de.length>0,[de]),h=e.useCallback((c,m)=>{if(!m||m==="default"){te(f=>{const L={...f};return delete L[c],L});return}te(f=>({...f,[c]:m}))},[]);e.useEffect(()=>{const c=de.reduce((m,f)=>{const L=ce[f.id],Y=!L||f.valueType!=="enum"||!f.options||f.options.some(fe=>fe.value===L);return L&&Y?m[f.id]=L:f.defaultValue&&(m[f.id]=f.defaultValue),m},{});as(ce,c)||te(c)},[de,ce]);const[$,E]=e.useState(()=>a&&a.length>0?a:s?[{slot:0,slotLabel:"参考图",url:s.url||"",name:s.name,file:s.file}]:[]),[C,A]=e.useState(()=>{const c=ie.imageUpload.maxCount,m=ie.imageUpload.labels||[];let f=[];return a&&a.length>0?f=a:s&&(f=[{slot:0,slotLabel:m[0]||"参考图",url:s.url||"",name:s.name,file:s.file}]),f.slice(0,c).map((L,Y)=>({...L,slot:Y,slotLabel:m[Y]||`参考图${Y+1}`}))}),[K,oe]=e.useState(!1),[g,ue]=e.useState([]),me=Ie.useMemo(()=>un(M),[M]),De=Ft(M),{videoHistory:ge}=Rt(),[ve,ye]=e.useState(0);e.useEffect(()=>He.subscribeChanges(()=>{ye(c=>c+1)}),[]);const{isGenerating:le}=ws("video"),Re=e.useCallback(c=>{z(c)},[]),Ne=e.useCallback(()=>{_(c=>!c)},[]),{language:J}=Mt(),{createTask:Ue}=gs(),Qe=e.useRef(!1),ct=N!==void 0,dt=Ie.useRef(null),Ge=Ie.useRef(null);e.useEffect(()=>{if(ct)return;const c=m=>{const f=m.videoModelName||"veo3";if(f!==M){_e(f);const L=Be(ae,f,X);he(L)}};return $e.addListener(c),()=>$e.removeListener(c)},[M,X,ct,N,o,ae]),e.useEffect(()=>{if(ae.length===0)return;const c=Oe(ae,M,X),m=Be(ae,M,X);if(!c){const f=ae[0],L=ze(f);_e(f.id),he(Y=>Ct(Y,L)?Y:L);return}he(f=>Ct(f,m)?f:m)},[M,X,ae]),e.useEffect(()=>{if(!N)return;const c=Te(N,o);if(dt.current===c||Ge.current&&Ge.current!==N)return;dt.current=c,_e(f=>f===N?f:N);const m=Be(ae,N,o);he(f=>Ct(f,m)?f:m)},[N,o,ae,d]);const[ut,Ye]=e.useState(!1),[Ze,et]=e.useState(!1);e.useEffect(()=>{if(Ze){et(!1);return}const c=Vt(M,Te(M,X)),m=gt(c.extraParams,r!==void 0?r.toString():c.duration,y||c.size);te(f=>as(f,m)?f:m),Ft(M)||(oe(f=>f&&!1),ue(f=>f.length>0?[]:f))},[M,X,Ze,r,y]),e.useEffect(()=>{const c=$.length>0?os($,re.maxCount,re.labels):[];A(m=>Kn(m,c)?m:c)},[$,re.labels,re.labelsSignature,re.maxCount]),e.useEffect(()=>{const c=rs(ce,I,H);mn({currentModel:M,currentSelectionKey:Te(M,X),extraParams:c.extraParams,duration:c.duration,size:c.size})},[M,X,I,H,ce]);const tt=Ie.useRef("");e.useEffect(()=>{if(ut)return;const c=JSON.stringify({prompt:n,image:s==null?void 0:s.url,images:a==null?void 0:a.map(L=>L.url),knowledgeContextRefs:l.map(L=>L.noteId),duration:r,model:d,size:y,result:P});if(tt.current===c)return;tt.current=c,d&&(Ge.current=d,_e(d),he(Be(j,d,o))),U(n),O(l);let m=[];a&&a.length>0?m=a:s&&(m=[{slot:0,slotLabel:"参考图",url:s.url||"",name:s.name,file:s.file}]),E(m);const f=os(m,re.maxCount,re.labels);A(f),(r!==void 0||y)&&te(L=>gt(L,r,y)),i(null)},[n,s,a,l,r,y,P,re.labels,re.labelsSignature,re.maxCount,ut]),e.useEffect(()=>(i(null),()=>{i(null)}),[]);const mt=()=>{U(""),E([]),A([]),i(null),Z("config"),Ye(!1),oe(!1),ue([]),te(_t(M,X||M)),window.dispatchEvent(new CustomEvent("ai-video-clear"))},b=Ie.useCallback((c,m)=>c.map((f,L)=>{const Y=f.slot??L;return{slot:Y,slotLabel:m[Y]||`参考图${Y+1}`,url:f.url,name:f.name,file:f.file}}),[]),V=Ie.useCallback(c=>c.map(m=>({url:m.url,name:m.name,file:m.file,slot:m.slot})),[]),q=Ie.useCallback(c=>{const m=b(c,re.labels);A(m),E(m)},[re.labels,b]),W=Ie.useMemo(()=>bs("video",J,ge),[ge,J,ve]),Ee=c=>{xs("video",c),ye(m=>m+1)},Xe=e.useRef("");e.useEffect(()=>{if(!T)return;const c=Number.parseFloat(I),m={prompt:v,images:C.map(Y=>({url:Y.url,name:Y.name})),duration:Number.isFinite(c)?c:void 0,size:H||void 0},f=JSON.stringify(m);if(Xe.current===f)return;const L=window.setTimeout(()=>{Xe.current!==f&&(Xe.current=f,T(m))},200);return()=>{window.clearTimeout(L)}},[I,H,T,v,C]);const st=c=>{var f,L;if(Ye(!0),Z("config"),et(!0),c.params.model){_e(c.params.model),he(c.params.modelRef||null);const Y=$e.get();$e.update({...Y,videoModelName:c.params.model})}if((f=c.params.storyboard)!=null&&f.enabled&&((L=c.params.storyboard)!=null&&L.scenes))oe(!0),ue(c.params.storyboard.scenes),U("");else{const Y=c.params.prompt||"",fe=An(Y);fe&&fe.length>0?(oe(!0),ue(fe),U("")):(oe(!1),ue([]),U(Y))}const m=c.params.params&&typeof c.params.params=="object"?Object.entries(c.params.params).reduce((Y,[fe,be])=>(be!=null&&String(be).trim()&&(Y[fe]=String(be)),Y),{}):{};if(te(gt(m,c.params.duration??c.params.seconds,c.params.size)),c.params.uploadedImages&&c.params.uploadedImages.length>0){E(c.params.uploadedImages);const Y=c.params.model||M,fe=Ot(Y,c.params.modelRef||Y,m),be=fe.imageUpload.maxCount,Ke=fe.imageUpload.labels||[],qe=c.params.uploadedImages.slice(0,be).map((Pe,at)=>({...Pe,slot:at,slotLabel:Ke[at]||`参考图${at+1}`}));A(qe)}else E([]),A([]);i(null)},nt=async(c=1)=>{if(!Qe.current){Qe.current=!0;try{if(K){const m=Rn(g,parseFloat(I),me.minSceneDuration);if(!m.valid){i(m.error||"场景配置无效");return}}else if(!v||!v.trim()){i(J==="zh"?"请输入视频描述":"Please enter video description");return}if(re.required&&!C.some(m=>m.url||m.file)){i(J==="zh"?"请上传模型所需的参考图片":"Please upload the required reference image");return}try{const m=[];for(const fe of C)if(fe.file){const be=await new Promise((Ke,qe)=>{const Pe=new FileReader;Pe.onload=()=>Ke(Pe.result),Pe.onerror=qe,Pe.readAsDataURL(fe.file)});m.push({...fe,url:be,file:void 0})}else m.push({...fe,file:void 0});const f=K?Nn(g):(v||"").trim(),L=[],Y=B||`video_batch_${Date.now()}`;for(let fe=0;fe<c;fe++){const be=rs(ce,I,H),Ke=Object.keys(be.extraParams).length>0?be.extraParams:void 0,qe={prompt:f,knowledgeContextRefs:ee,model:M,modelRef:X||null,seconds:be.duration,size:be.size,uploadedImages:m,...K&&{storyboard:{enabled:!0,scenes:g,totalDuration:parseFloat(I)}},batchId:Y,batchIndex:fe+1,batchTotal:c,autoInsertToCanvas:x??jt(ot.AI_VIDEO_AUTO_INSERT),...Ke?{params:Ke}:{}},Pe=Ue(qe,Se.VIDEO);Pe&&L.push(Pe.id)}L.length>0?(Me.success(J==="zh"?c>1?`${L.length} 个视频任务已添加到队列,将在后台生成`:"视频任务已添加到队列,将在后台生成":c>1?`${L.length} video tasks added to queue, will be generated in background`:"Video task added to queue, will be generated in background"),Ee(f),U(""),E([]),A([]),oe(!1),ue([]),i(null),Z("tasks"),Ye(!1)):i(J==="zh"?"任务创建失败,请检查参数或稍后重试":"Failed to create task, please check parameters or try again later")}catch(m){console.error("Failed to create task:",m);let f=J==="zh"?"任务创建失败,请检查参数或稍后重试":"Failed to create task, please check parameters or try again later";m.message&&(m.message.includes("exceed 5000 characters")?f=J==="zh"?"提示词不能超过 5000 字符":"Prompt must not exceed 5000 characters":m.message.includes("Duplicate submission")?f=J==="zh"?"请勿重复提交,请等待 5 秒后再试":"Duplicate submission. Please wait 5 seconds.":m.message.includes("Invalid parameters")&&(f=J==="zh"?`参数错误: ${m.message.replace("Invalid parameters: ","")}`:m.message)),i(f)}}finally{Qe.current=!1}}};return ys(le,v,nt),t.jsxs("div",{className:"ai-video-generation-container",children:[Q?t.jsxs("div",{className:"ai-generation-mobile-switcher",role:"tablist",children:[t.jsx("button",{type:"button",className:`ai-generation-mobile-switcher__tab ${R==="config"?"ai-generation-mobile-switcher__tab--active":""}`,onClick:()=>Z("config"),children:"生成设置"}),t.jsx("button",{type:"button",className:`ai-generation-mobile-switcher__tab ${R==="tasks"?"ai-generation-mobile-switcher__tab--active":""}`,onClick:()=>Z("tasks"),children:"生成任务"})]}):null,t.jsxs("div",{className:`main-content ${Q?"main-content--mobile-panels":""}`,ref:Ce,children:[t.jsxs("div",{className:`ai-image-generation-section ${Q&&R!=="config"?"ai-generation-mobile-panel--hidden":""}`,children:[t.jsxs("div",{className:"ai-image-generation-form",children:[N!==void 0&&p&&t.jsx("div",{className:"form-header-row",children:t.jsx("div",{className:"model-selector-wrapper",children:t.jsx(ms,{selectedModel:M,selectedSelectionKey:Te(M,X),onSelect:(c,m)=>{const f=c,L=Be(ae,f,m||null);Ge.current=null,_e(f),he(L),te(_t(f,L||f)),p(c),D==null||D(L)},onSelectModel:c=>{const m=c.id;Ge.current=null,_e(m);const f=Be(ae,m,ze(c));he(f),te(_t(m,f||m)),p(c.id),D==null||D(f)},language:J,models:ae,placement:"down",variant:"form",placeholder:J==="zh"?"选择视频模型":"Select Video Model",disabled:le})})}),u&&t.jsx("div",{className:"model-params-row",children:t.jsx(fs,{selectedParams:ce,onParamChange:h,compatibleParams:de,modelId:M,language:J,disabled:le,placement:"down"})}),re.maxCount>0&&t.jsx(vs,{images:V(C),onImagesChange:q,language:J,disabled:le,multiple:re.maxCount>1,maxCount:re.maxCount,slotLabels:re.mode==="frames"?re.labels:void 0,label:re.mode==="frames"?J==="zh"?"首尾帧图片 (可选)":"Start/End Frames (Optional)":re.required?J==="zh"?"参考图片":"Reference Images":J==="zh"?"参考图片 (可选)":"Reference Images (Optional)"}),De&&t.jsx(zn,{enabled:K,onEnabledChange:oe,totalDuration:parseFloat(I),maxScenes:me.maxScenes,minSceneDuration:me.minSceneDuration,scenes:g,onScenesChange:ue,disabled:le}),!K&&t.jsx(Ts,{prompt:v,onPromptChange:U,presetPrompts:W,language:J,type:"video",disabled:le,onError:i,videoProvider:ie.provider}),t.jsx(ps,{value:ee,onChange:O,disabled:le,language:J}),t.jsx(Cs,{error:se})]}),t.jsx(Ss,{language:J,type:"video",isGenerating:le,hasGenerated:!1,canGenerate:K?g.length>0:!!(v&&v.trim()),onGenerate:nt,onReset:mt,leftContent:t.jsx(Rs,{storageKey:ot.AI_VIDEO_AUTO_INSERT,language:J})})]}),Q?null:t.jsx(Ms,{isRightPanelVisible:w,onToggleRightPanel:Ne,onWidthChange:Re,rightPanelWidth:S,language:J,storageKey:"video"}),(Q||w)&&t.jsx("div",{className:`task-sidebar ${Q?"task-sidebar--mobile-panel":""} ${Q&&R!=="tasks"?"ai-generation-mobile-panel--hidden":""}`,style:Q?void 0:{width:S,flexShrink:0},children:t.jsx(Ns,{taskType:Se.VIDEO,onEditTask:st})})]})]})},Bn=e.lazy(()=>Et(()=>import("./batch-image-generation-CkmX4dem.js"),__vite__mapDeps([0,1,2]),import.meta.url)),Hn=e.lazy(()=>Et(()=>import("./mermaid-to-drawnix-CSctnpU0.js"),__vite__mapDeps([0,1,3,4,5,6,7]),import.meta.url)),Xn=e.lazy(()=>Et(()=>import("./markdown-to-drawnix-BqT-3zQO.js"),__vite__mapDeps([0,1,3,4,5,6,7]),import.meta.url)),Jn=({container:n})=>{const{appState:s,openDialog:a,closeDialog:l}=ds(),{language:r}=Mt(),d=_n(),{isMobile:y,isTablet:P}=Pt(),N=s.dialogInitialDataByType,o=(N==null?void 0:N[xe.aiImageGeneration])??null,p=(N==null?void 0:N[xe.aiVideoGeneration])??null,D=(o==null?void 0:o.prefillId)||(o==null?void 0:o.batchId)||"ai-image-dialog",[B,x]=e.useState(null),T=!y&&!P,j=e.useRef(!1),v=e.useRef(null),[U,ee]=e.useState(""),[O,se]=e.useState(null),[i,w]=e.useState(""),[_,S]=e.useState(null),z=e.useRef(null),R=e.useRef(null),Z=e.useCallback(()=>{const I=Je("image"),H=Je("video"),u=I.modelId||"gemini-3-pro-image-preview-vip",h=Le(I.profileId,u),$=H.modelId||"veo3",E=Le(H.profileId,$);ee(C=>C===u?C:u),se(C=>Te(u,C)===Te(u,h)?C:h),w(C=>C===$?C:$),S(C=>Te($,C)===Te($,E)?C:E)},[]);e.useEffect(()=>{Z()},[Z]),e.useEffect(()=>{const I=()=>{Z()};return $e.addListener(I),Ut.addListener(I),()=>{$e.removeListener(I),Ut.removeListener(I)}},[Z]);const Ce=I=>{ee(I)},we=I=>{w(I)},Q=I=>{se(I)},pe=I=>{S(I)};e.useEffect(()=>{if(!U)return;const I=Te(U,O);z.current!==I&&(z.current=I,Gt("image",Le(O==null?void 0:O.profileId,U)))},[U,O]),e.useEffect(()=>{if(!i)return;const I=Te(i,_);R.current!==I&&(R.current=I,Gt("video",Le(_==null?void 0:_.profileId,i)))},[i,_]);const[ne,F]=e.useState({initialPrompt:"",initialImages:[],selectedElementIds:[]}),k=o?{initialPrompt:o.initialPrompt||o.prompt||"",initialImages:o.initialImages||o.uploadedImages||[],selectedElementIds:[],initialKnowledgeContextRefs:o.initialKnowledgeContextRefs||o.knowledgeContextRefs||[],initialResultUrl:o.initialResultUrl||o.resultUrl,initialAspectRatio:o.initialAspectRatio,targetFrameId:o.targetFrameId,targetFrameDimensions:o.targetFrameDimensions,pptSlideImage:o.pptSlideImage,pptSlidePrompt:o.pptSlidePrompt,pptReplaceElementId:o.pptReplaceElementId}:ne,[G,M]=e.useState({initialPrompt:"",initialImage:void 0}),[_e,X]=e.useState(!1),[he,Ae]=e.useState(()=>{try{return localStorage.getItem(wt)==="batch"?"batch":"single"}catch{return"single"}}),ae=!!o&&B!==D?"single":he;e.useEffect(()=>{x(null)},[o]),e.useEffect(()=>{!T&&he==="batch"&&Ae("single")},[T,he]);const ce=e.useCallback(I=>{x(D),Ae(I),I==="batch"&&(X(!0),setTimeout(()=>X(!1),50));try{localStorage.setItem(wt,I)}catch(H){console.warn("Failed to save image mode:",H)}},[D]);e.useEffect(()=>{if(s.openDialogTypes.has(xe.aiImageGeneration)){if(ne.initialImages&&ne.initialImages.length>0||ne.initialPrompt&&ne.initialPrompt.trim()!==""){X(!1);return}try{localStorage.getItem(wt)==="batch"&&(X(!0),setTimeout(()=>X(!1),50))}catch{X(!1)}}},[s.openDialogTypes,ne.initialImages,ne.initialPrompt]);const te=e.useRef(!1),de=e.useRef(o),ie=e.useRef(!1),je=e.useRef(p);e.useEffect(()=>{if(!d)return;const I=s.openDialogTypes.has(xe.aiImageGeneration),H=I&&!te.current,u=de.current!==o;if(te.current=I,de.current=o,!I||!H&&!u||j.current)return;(async()=>{j.current=!0,v.current&&clearTimeout(v.current),v.current=setTimeout(()=>{console.warn("Processing timeout, resetting processing state"),j.current=!1},1e4);try{if(o){F({initialPrompt:o.initialPrompt||o.prompt||"",initialImages:o.initialImages||o.uploadedImages||[],initialKnowledgeContextRefs:o.initialKnowledgeContextRefs||o.knowledgeContextRefs||[],selectedElementIds:[],initialResultUrl:o.initialResultUrl||o.resultUrl,initialAspectRatio:o.initialAspectRatio,targetFrameId:o.targetFrameId,targetFrameDimensions:o.targetFrameDimensions,pptSlideImage:o.pptSlideImage,pptSlidePrompt:o.pptSlidePrompt,pptReplaceElementId:o.pptReplaceElementId}),o.initialModel&&ee(o.initialModel),o.initialModelRef!==void 0&&se(o.initialModelRef);return}const $=s.lastSelectedElementIds||[];let E,C,A;const K=fn(d);if(K.length===1&&pn(K[0])){const ue=K[0],me=hn.getRectangleByPoints(ue.points);E=kn(me.width,me.height),C=ue.id,A={width:me.width,height:me.height}}const oe=await Xt(d,$),g=[];oe.remainingImages.forEach(ue=>{g.push({url:ue.url,name:ue.name||`selected-image-${Date.now()}.png`})}),oe.graphicsImage&&g.push({url:oe.graphicsImage,name:`graphics-combined-${Date.now()}.png`}),F({initialPrompt:oe.remainingText||"",initialImages:g,initialKnowledgeContextRefs:[],selectedElementIds:$,initialAspectRatio:E,targetFrameId:C,targetFrameDimensions:A})}catch($){console.warn("Error processing selected content for AI:",$);const E=Jt(d),C=E.images.map(A=>({url:A.url,name:A.name||`selected-image-${Date.now()}.png`}));F({initialPrompt:E.text||"",initialImages:C,initialKnowledgeContextRefs:[],selectedElementIds:[]})}finally{j.current=!1,v.current&&(clearTimeout(v.current),v.current=null)}})()},[s.lastSelectedElementIds,s.openDialogTypes,d,o]),e.useEffect(()=>{if(!d)return;const I=s.openDialogTypes.has(xe.aiVideoGeneration),H=I&&!ie.current,u=je.current!==p;if(ie.current=I,je.current=p,!I||!H&&!u||j.current)return;(async()=>{j.current=!0,v.current&&clearTimeout(v.current),v.current=setTimeout(()=>{console.warn("Video processing timeout, resetting processing state"),j.current=!1},1e4);try{if(p){M({initialPrompt:p.initialPrompt||p.prompt||"",initialImage:p.initialImage||p.uploadedImage,initialImages:p.initialImages||p.uploadedImages,initialDuration:p.initialDuration||p.duration,initialModel:p.initialModel||p.model,initialSize:p.initialSize||p.size,initialResultUrl:p.initialResultUrl||p.resultUrl});const A=p.initialModel||p.model;A&&w(A),p.initialModelRef!==void 0&&S(p.initialModelRef);return}const $=s.lastSelectedElementIds||[],E=await Xt(d,$),C=[];E.remainingImages.length>0?E.remainingImages.forEach((A,K)=>{C.push({url:A.url,name:A.name||`selected-image-${K+1}-${Date.now()}.png`})}):E.graphicsImage&&C.push({url:E.graphicsImage,name:`graphics-combined-${Date.now()}.png`}),M({initialPrompt:E.remainingText||"",initialImage:C.length>0?C[0]:void 0,initialImages:C.map((A,K)=>({slot:K,slotLabel:`参考图${K+1}`,url:A.url,name:A.name}))})}catch($){console.warn("Error processing selected content for AI video:",$);const E=Jt(d),C=E.images.map((A,K)=>({url:A.url,name:A.name||`selected-image-${K+1}-${Date.now()}.png`}));M({initialPrompt:E.text||"",initialImage:C.length>0?C[0]:void 0,initialImages:C.map((A,K)=>({slot:K,slotLabel:`参考图${K+1}`,url:A.url,name:A.name}))})}finally{j.current=!1,v.current&&(clearTimeout(v.current),v.current=null)}})()},[s.lastSelectedElementIds,s.openDialogTypes,d,p]),e.useEffect(()=>{s.openDialogTypes.size===0&&(j.current=!1,te.current=!1,de.current=null,ie.current=!1,je.current=null,v.current&&(clearTimeout(v.current),v.current=null))},[s.openDialogTypes]);const Fe=e.useCallback(()=>{const I=localStorage.getItem(Kt);if(I)try{const H=JSON.parse(I);H.timestamp=Date.now(),localStorage.setItem(Kt,JSON.stringify(H))}catch(H){console.warn("Failed to update cache timestamp:",H)}l(xe.aiImageGeneration)},[l]),re=e.useCallback(()=>{const I=localStorage.getItem(Wt);if(I)try{const H=JSON.parse(I);H.timestamp=Date.now(),localStorage.setItem(Wt,JSON.stringify(H))}catch(H){console.warn("Failed to update cache timestamp:",H)}l(xe.aiVideoGeneration)},[l]);return t.jsxs(t.Fragment,{children:[t.jsx(qt,{open:s.openDialogTypes.has(xe.mermaidToDrawnix),onOpenChange:I=>{I?a(xe.mermaidToDrawnix):l(xe.mermaidToDrawnix)},children:t.jsx(Bt,{className:"Dialog ttd-dialog",container:n,children:t.jsx(e.Suspense,{fallback:null,children:t.jsx(Hn,{})})})}),t.jsx(qt,{open:s.openDialogTypes.has(xe.markdownToDrawnix),onOpenChange:I=>{I?a(xe.markdownToDrawnix):l(xe.markdownToDrawnix)},children:t.jsx(Bt,{className:"Dialog ttd-dialog",container:n,children:t.jsx(e.Suspense,{fallback:null,children:t.jsx(Xn,{})})})}),t.jsx(Ht,{id:"ai-image-dialog",visible:s.openDialogTypes.has(xe.aiImageGeneration),title:ae==="batch"?r==="zh"?"批量出图":"Batch Generation":r==="zh"?"AI 图片生成":"AI Image Generation",headerContent:T?t.jsxs("div",{className:"image-generation-mode-tabs",onMouseDown:I=>I.stopPropagation(),onTouchStart:I=>I.stopPropagation(),onPointerDown:I=>I.stopPropagation(),children:[t.jsx("button",{type:"button",className:`mode-tab ${ae==="single"?"active":""}`,onClick:I=>{I.stopPropagation(),I.preventDefault(),ce("single")},children:r==="zh"?"AI 图片生成":"AI Image"}),t.jsx("button",{type:"button",className:`mode-tab ${ae==="batch"?"active":""}`,onClick:I=>{I.stopPropagation(),I.preventDefault(),ce("batch")},children:r==="zh"?"批量出图":"Batch"})]}):void 0,onClose:Fe,width:"80%",height:"60%",minWidth:800,minHeight:500,x:"center",y:"center",modal:!1,minimizable:!1,className:"winbox-ai-generation winbox-ai-image-generation",container:n,autoMaximize:_e||y,children:s.openDialogTypes.has(xe.aiImageGeneration)&&(ae==="batch"?t.jsx(e.Suspense,{fallback:t.jsx("div",{className:"loading-fallback",children:r==="zh"?"加载中...":"Loading..."}),children:t.jsx(Bn,{onSwitchToSingle:()=>ce("single"),selectedModel:U,selectedModelRef:O,onModelChange:Ce,onModelRefChange:Q})}):t.jsx(Gn,{initialPrompt:k.initialPrompt,initialImages:k.initialImages,initialKnowledgeContextRefs:k.initialKnowledgeContextRefs||[],selectedElementIds:k.selectedElementIds,initialWidth:(o==null?void 0:o.initialWidth)||(o==null?void 0:o.width),initialHeight:(o==null?void 0:o.initialHeight)||(o==null?void 0:o.height),initialResultUrl:k.initialResultUrl,initialAspectRatio:k.initialAspectRatio,targetFrameId:k.targetFrameId,targetFrameDimensions:k.targetFrameDimensions,pptSlideImage:k.pptSlideImage,pptSlidePrompt:k.pptSlidePrompt,pptReplaceElementId:k.pptReplaceElementId,selectedModel:U,selectedModelRef:O,onModelChange:Ce,onModelRefChange:Q,externalBatchId:o==null?void 0:o.batchId,assetMetadata:o==null?void 0:o.assetMetadata,initialAutoInsertToCanvas:o==null?void 0:o.autoInsertToCanvas,onDraftChange:o==null?void 0:o.onDraftChange},D))},D),t.jsx(Ht,{id:"ai-video-dialog",visible:s.openDialogTypes.has(xe.aiVideoGeneration),title:r==="zh"?"AI 视频生成":"AI Video Generation",onClose:re,width:"70%",height:"60%",minWidth:800,minHeight:600,x:"center",y:"center",modal:!1,minimizable:!1,className:"winbox-ai-generation winbox-ai-video-generation",container:n,autoMaximize:y,children:s.openDialogTypes.has(xe.aiVideoGeneration)&&t.jsx(qn,{initialPrompt:G.initialPrompt,initialImage:G.initialImage,initialImages:G.initialImages,initialKnowledgeContextRefs:(p==null?void 0:p.initialKnowledgeContextRefs)||(p==null?void 0:p.knowledgeContextRefs)||[],initialDuration:G.initialDuration,initialModel:G.initialModel,initialSize:G.initialSize,initialResultUrl:G.initialResultUrl,selectedModel:i,selectedModelRef:_,onModelChange:we,onModelRefChange:pe,externalBatchId:p==null?void 0:p.batchId,initialAutoInsertToCanvas:p==null?void 0:p.autoInsertToCanvas,onDraftChange:p==null?void 0:p.onDraftChange},(p==null?void 0:p.batchId)||"ai-video-dialog")})]})},ca=e.memo(Jn,(n,s)=>n.container===s.container);export{ca as TTDDialog};
@@ -1 +1 @@
1
- import{a8 as s,aa as x,qb as E,qc as v,P as n,i4 as j,jX as h,jZ as D,jY as _,k2 as f,k9 as m}from"./ai-chat-B-XdoWBQ.js";import{W as g,w as p,B as y}from"./bootstrap-DadYvnge.js";const O=({children:t})=>s.jsx("div",{className:"ttd-dialog-panels",children:t}),b=({label:t,children:c,panelAction:a,panelActionDisabled:r=!1,onTextSubmitInProgress:l,renderTopRight:e,renderSubmitShortcut:d,renderBottomRight:i})=>s.jsxs("div",{className:"ttd-dialog-panel",children:[s.jsxs("div",{className:"ttd-dialog-panel__header",children:[s.jsx("label",{children:t}),e==null?void 0:e()]}),c,s.jsxs("div",{className:x("ttd-dialog-panel-button-container",{invisible:!a}),style:{display:"flex",alignItems:"center"},children:[s.jsx("button",{className:"ttd-dialog-panel-button drawnix-button ","data-track":"ttd_click_panel_action",onClick:a&&a.action,disabled:r||l,children:s.jsxs("div",{className:x({invisible:l}),children:[a==null?void 0:a.label,(a==null?void 0:a.icon)&&s.jsx("span",{children:a.icon})]})}),!r&&!l&&(d==null?void 0:d()),i==null?void 0:i()]})]}),N={CTRL_OR_CMD:E||v?"metaKey":"ctrlKey",ENTER:"Enter"},k=({input:t,placeholder:c,onChange:a,onKeyboardSubmit:r})=>{const l=n.useRef(null),e=n.useRef(r);return e.current=r,n.useEffect(()=>{if(!e.current)return;const d=l.current;if(d){const i=o=>{var u;o[N.CTRL_OR_CMD]&&o.key===N.ENTER&&(o.preventDefault(),(u=e.current)==null||u.call(e))};return d.addEventListener(j.KEYDOWN,i),()=>{d.removeEventListener(j.KEYDOWN,i)}}},[]),s.jsx("textarea",{className:"ttd-dialog-input",onChange:a,value:t,placeholder:c,autoFocus:!0,ref:l})},C=({error:t})=>s.jsxs("div",{"data-testid":"ttd-dialog-output-error",className:"ttd-dialog-output-error",children:["Error! ",s.jsx("p",{children:t})]}),K=({error:t,value:c,loaded:a})=>{const r=[h,D,_,p],l={readonly:!0,hideScrollbar:!1,disabledScrollOnNonFocus:!0,themeColors:f};return s.jsxs("div",{className:"ttd-dialog-output-wrapper",children:[t&&s.jsx(C,{error:t.message}),s.jsx("div",{style:{opacity:t?"0.15":1},className:"ttd-dialog-output-canvas-container",children:s.jsx(g,{value:c,options:l,plugins:r,children:s.jsx(y,{})})})]})},L=()=>s.jsxs("div",{className:"ttd-dialog-submit-shortcut",children:[s.jsx("div",{className:"ttd-dialog-submit-shortcut__key",children:m("CtrlOrCmd")}),s.jsx("div",{className:"ttd-dialog-submit-shortcut__key",children:m("Enter")})]});export{O as T,b as a,k as b,K as c,L as d};
1
+ import{a8 as s,aa as x,qd as E,qe as v,P as n,i4 as j,jX as h,jZ as D,jY as _,k2 as f,k9 as m}from"./ai-chat-BnWVpTEI.js";import{W as g,w as p,B as y}from"./bootstrap-CQRLkOtk.js";const O=({children:t})=>s.jsx("div",{className:"ttd-dialog-panels",children:t}),k=({label:t,children:c,panelAction:a,panelActionDisabled:r=!1,onTextSubmitInProgress:l,renderTopRight:e,renderSubmitShortcut:d,renderBottomRight:i})=>s.jsxs("div",{className:"ttd-dialog-panel",children:[s.jsxs("div",{className:"ttd-dialog-panel__header",children:[s.jsx("label",{children:t}),e==null?void 0:e()]}),c,s.jsxs("div",{className:x("ttd-dialog-panel-button-container",{invisible:!a}),style:{display:"flex",alignItems:"center"},children:[s.jsx("button",{className:"ttd-dialog-panel-button drawnix-button ","data-track":"ttd_click_panel_action",onClick:a&&a.action,disabled:r||l,children:s.jsxs("div",{className:x({invisible:l}),children:[a==null?void 0:a.label,(a==null?void 0:a.icon)&&s.jsx("span",{children:a.icon})]})}),!r&&!l&&(d==null?void 0:d()),i==null?void 0:i()]})]}),N={CTRL_OR_CMD:E||v?"metaKey":"ctrlKey",ENTER:"Enter"},b=({input:t,placeholder:c,onChange:a,onKeyboardSubmit:r})=>{const l=n.useRef(null),e=n.useRef(r);return e.current=r,n.useEffect(()=>{if(!e.current)return;const d=l.current;if(d){const i=o=>{var u;o[N.CTRL_OR_CMD]&&o.key===N.ENTER&&(o.preventDefault(),(u=e.current)==null||u.call(e))};return d.addEventListener(j.KEYDOWN,i),()=>{d.removeEventListener(j.KEYDOWN,i)}}},[]),s.jsx("textarea",{className:"ttd-dialog-input",onChange:a,value:t,placeholder:c,autoFocus:!0,ref:l})},C=({error:t})=>s.jsxs("div",{"data-testid":"ttd-dialog-output-error",className:"ttd-dialog-output-error",children:["Error! ",s.jsx("p",{children:t})]}),K=({error:t,value:c,loaded:a})=>{const r=[h,D,_,p],l={readonly:!0,hideScrollbar:!1,disabledScrollOnNonFocus:!0,themeColors:f};return s.jsxs("div",{className:"ttd-dialog-output-wrapper",children:[t&&s.jsx(C,{error:t.message}),s.jsx("div",{style:{opacity:t?"0.15":1},className:"ttd-dialog-output-canvas-container",children:s.jsx(g,{value:c,options:l,plugins:r,children:s.jsx(y,{})})})]})},L=()=>s.jsxs("div",{className:"ttd-dialog-submit-shortcut",children:[s.jsx("div",{className:"ttd-dialog-submit-shortcut__key",children:m("CtrlOrCmd")}),s.jsx("div",{className:"ttd-dialog-submit-shortcut__key",children:m("Enter")})]});export{O as T,k as a,b,K as c,L as d};
@@ -1,2 +1,2 @@
1
- import{P as r,T as k,aD as g,a8 as t,R as nt,nb as ct,pn as it,fc as lt,f1 as ot,po as dt,c1 as ye,eX as _e,pc as qe,pe as Ee,pp as ut,eL as mt,pi as ht,ab as ee,pq as X,pr as pt,ps as ft,co as q,fo as gt,eJ as vt,dF as _t,eN as xt,pt as jt,pu as Ze,dd as xe,ao as Ce,d1 as yt,bP as Ne}from"./ai-chat-B-XdoWBQ.js";import{aE as Tt,aF as Ct,aG as Nt,aH as bt,aI as St,aJ as Et,aK as It,aL as wt,aB as At,aM as Mt,aC as Rt,p as Lt,aN as Dt,aO as kt,aP as be,aQ as Q,aR as Se}from"./tool-windows-BnDZa9FH.js";/* empty css */const zt=({taskType:e,taskStatus:s,realProgress:v,startedAt:_,mediaUrl:d,isImageLoading:f=!1,onImageLoaded:w,onImageError:y,estimatedDuration:T=Ct})=>{const[A,j]=r.useState(1),C=r.useRef(null),{displayProgress:i}=Tt({taskType:e,taskStatus:s,startedAt:_,realProgress:v,mediaUrl:d,isImageLoading:f,estimatedDuration:T}),a=90,n=80,N=.5,S=1.2;if(r.useEffect(()=>{const P=C.current;if(!P)return;const Y=()=>{const{width:ae,height:U}=P.getBoundingClientRect(),V=U-10,z=ae-20,G=V/a,O=z/n,R=Math.min(G,O,S);j(Math.max(R,N))};Y();const M=new ResizeObserver(Y);return M.observe(P),()=>M.disconnect()},[]),s!==k.PROCESSING)return null;const u=i??0,F=e===g.IMAGE?Nt(u,!!d,f):e===g.AUDIO?u<10?"提交任务...":u<45?"生成旋律...":u<85?"渲染音轨...":"整理结果...":u<10?"准备中...":u<50?"生成中...":u<90?"渲染中...":"即将完成...",o=["task-progress-overlay",e===g.VIDEO||e===g.AUDIO?"task-progress-overlay--video":"",d&&f?"task-progress-overlay--loading":""].filter(Boolean).join(" ");return t.jsxs("div",{ref:C,className:o,children:[t.jsx("div",{className:"task-progress-overlay__backdrop"}),t.jsx("div",{className:"task-progress-overlay__pulse"}),t.jsx("div",{className:"task-progress-overlay__dots"}),t.jsx("div",{className:"task-progress-overlay__content",style:{transform:`scale(${A})`},children:t.jsx(bt,{progress:u,progressMode:"determinate",statusText:F,tone:d&&f?"loading":"default",className:"task-progress-overlay__progress"})}),t.jsx("div",{className:"task-progress-overlay__bar",children:t.jsx("div",{className:"task-progress-overlay__bar-fill",style:{width:`${u}%`}})})]})},Pt=500;function Ot(e){if(typeof e!="number"||!Number.isFinite(e)||e<=0)return null;const s=Math.round(e),v=Math.floor(s/60),_=s%60;return`${v}:${String(_).padStart(2,"0")}`}function pe(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function Ut(e){if(!e)return!1;const s=e.toLowerCase();return s==="kling_video"||s.startsWith("kling-v")}function Ht(e){if(e==="text2video")return"文生视频";if(e==="image2video")return"图生视频"}function Ft(e){return e==="std"?"std 高性能":e==="pro"?"pro 高表现":e}function Ie(e){const s=e.params.videoAnalyzerAction;return s==="analyze"||s==="rewrite"?s:null}function $t(e){const s=Ie(e);if(s==="analyze")return pe(e.params.videoAnalyzerSourceLabel)||null;if(s==="rewrite"){const v=pe(e.params.prompt);return v?v.replace(/^改编脚本:\s*/,""):null}return null}function Vt(e){const s=Ie(e);return s==="analyze"?"视频分析":s==="rewrite"?"脚本改编":null}function Gt(e){const s=e.params.batchIndex;return typeof s!="number"||!Number.isFinite(s)?null:e.type===g.AUDIO?s+1:s>=1?s:s+1}function Bt(e){switch(e){case k.PENDING:case k.PROCESSING:return"primary";case k.COMPLETED:return"success";case k.FAILED:return"danger";case k.CANCELLED:return"default";default:return"default"}}function Wt(e){switch(e){case k.PENDING:case k.PROCESSING:return"处理中";case k.COMPLETED:return"已完成";case k.FAILED:return"失败";case k.CANCELLED:return"已取消";default:return"未知"}}const et=nt.memo(({task:e,selectionMode:s=!1,isSelected:v=!1,isCompact:_,onSelectionChange:d,onRetry:f,onDelete:w,onDownload:y,onInsert:T,onCopy:A,onPreviewOpen:j,onEdit:C,onRegenerate:i,onExtractCharacter:a})=>{var we,Ae,Me,Re,Le,De,ke,ze,Pe,Oe,Ue,He,Fe,$e,Ve,Ge,Be,We,Xe,Ke,Ye,Je,Qe;const[n,N]=r.useState(null),[S,u]=r.useState(!1),F=r.useRef(null),o=e.status===k.COMPLETED,P=e.status===k.FAILED,Y=e.status===k.CANCELLED,M=P||Y,ae=_!==void 0?_:S;r.useEffect(()=>{if(_!==void 0)return;const h=F.current;if(!h)return;const re=new ResizeObserver(ge=>{for(const ve of ge){const at=ve.contentRect.width;u(at<Pt)}});return re.observe(h),()=>re.disconnect()},[_]);const U=((we=e.params.storyboard)==null?void 0:we.enabled)===!0,V=o&&e.type===g.VIDEO&&St(e.remoteId)&&Et(e.params.model)&&!U,z=e.type===g.CHARACTER,G=e.type===g.AUDIO,O=e.type===g.CHAT,R=G&&It(e.result),ie=e.type===g.IMAGE,le=e.type===g.IMAGE||e.type===g.VIDEO||e.type===g.AUDIO&&!R,oe=wt(e.result),he=At(e.result,e.params.title||e.params.prompt),de=Mt(oe),Z=Rt(e.result),ne=Ie(e),K=$t(e),ue=Vt(e),me=Gt(e),l=z?o&&((Ae=e.result)!=null&&Ae.characterUsername)?`@${e.result.characterUsername}`:"角色创建中...":O?((Me=e.result)==null?void 0:Me.title)||e.params.prompt||((Re=e.result)==null?void 0:Re.chatResponse):R?he||de||e.params.prompt:((Le=e.result)==null?void 0:Le.title)||e.params.title||e.params.prompt,p=e.params.params&&typeof e.params.params=="object"?e.params.params:null,L=e.type===g.AUDIO&&!R?Ot((De=e.result)==null?void 0:De.duration):null,I=e.type===g.VIDEO&&Ut(e.params.model),H=pe(p==null?void 0:p.model_name)||((ke=e.params.model)!=null&&ke.toLowerCase().startsWith("kling-v")?e.params.model:void 0),te=Ft(pe(p==null?void 0:p.mode)),c=pe(p==null?void 0:p.klingAction2),m=Ht(c);pe(p==null?void 0:p.cfg_scale);const b=R?void 0:((Pe=(ze=e.result)==null?void 0:ze.urls)==null?void 0:Pe[0])||((Oe=e.result)==null?void 0:Oe.url),x=e.type===g.IMAGE&&b?ct(b):b,{isCached:J,cacheWarning:$}=it(z||G?void 0:x),D=le&&!G&&!J?$||((Ue=e.result)==null?void 0:Ue.cacheWarning):void 0,B=D?`${D.message}${D.expiresHint?`
1
+ import{P as r,T as k,aD as g,a8 as t,R as nt,nb as ct,pn as it,fc as lt,f1 as ot,po as dt,c1 as ye,eX as _e,pc as qe,pe as Ee,pp as ut,eL as mt,pi as ht,ab as ee,pq as X,pr as pt,ps as ft,co as q,fo as gt,eJ as vt,dF as _t,eN as xt,pt as jt,pu as Ze,dd as xe,ao as Ce,d1 as yt,bP as Ne}from"./ai-chat-BnWVpTEI.js";import{aE as Tt,aF as Ct,aG as Nt,aH as bt,aI as St,aJ as Et,aK as It,aL as wt,aB as At,aM as Mt,aC as Rt,p as Lt,aN as Dt,aO as kt,aP as be,aQ as Q,aR as Se}from"./tool-windows-Bf_pMml-.js";/* empty css */const zt=({taskType:e,taskStatus:s,realProgress:v,startedAt:_,mediaUrl:d,isImageLoading:f=!1,onImageLoaded:w,onImageError:y,estimatedDuration:T=Ct})=>{const[A,j]=r.useState(1),C=r.useRef(null),{displayProgress:i}=Tt({taskType:e,taskStatus:s,startedAt:_,realProgress:v,mediaUrl:d,isImageLoading:f,estimatedDuration:T}),a=90,n=80,N=.5,S=1.2;if(r.useEffect(()=>{const P=C.current;if(!P)return;const Y=()=>{const{width:ae,height:U}=P.getBoundingClientRect(),V=U-10,z=ae-20,G=V/a,O=z/n,R=Math.min(G,O,S);j(Math.max(R,N))};Y();const M=new ResizeObserver(Y);return M.observe(P),()=>M.disconnect()},[]),s!==k.PROCESSING)return null;const u=i??0,F=e===g.IMAGE?Nt(u,!!d,f):e===g.AUDIO?u<10?"提交任务...":u<45?"生成旋律...":u<85?"渲染音轨...":"整理结果...":u<10?"准备中...":u<50?"生成中...":u<90?"渲染中...":"即将完成...",o=["task-progress-overlay",e===g.VIDEO||e===g.AUDIO?"task-progress-overlay--video":"",d&&f?"task-progress-overlay--loading":""].filter(Boolean).join(" ");return t.jsxs("div",{ref:C,className:o,children:[t.jsx("div",{className:"task-progress-overlay__backdrop"}),t.jsx("div",{className:"task-progress-overlay__pulse"}),t.jsx("div",{className:"task-progress-overlay__dots"}),t.jsx("div",{className:"task-progress-overlay__content",style:{transform:`scale(${A})`},children:t.jsx(bt,{progress:u,progressMode:"determinate",statusText:F,tone:d&&f?"loading":"default",className:"task-progress-overlay__progress"})}),t.jsx("div",{className:"task-progress-overlay__bar",children:t.jsx("div",{className:"task-progress-overlay__bar-fill",style:{width:`${u}%`}})})]})},Pt=500;function Ot(e){if(typeof e!="number"||!Number.isFinite(e)||e<=0)return null;const s=Math.round(e),v=Math.floor(s/60),_=s%60;return`${v}:${String(_).padStart(2,"0")}`}function pe(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function Ut(e){if(!e)return!1;const s=e.toLowerCase();return s==="kling_video"||s.startsWith("kling-v")}function Ht(e){if(e==="text2video")return"文生视频";if(e==="image2video")return"图生视频"}function Ft(e){return e==="std"?"std 高性能":e==="pro"?"pro 高表现":e}function Ie(e){const s=e.params.videoAnalyzerAction;return s==="analyze"||s==="rewrite"?s:null}function $t(e){const s=Ie(e);if(s==="analyze")return pe(e.params.videoAnalyzerSourceLabel)||null;if(s==="rewrite"){const v=pe(e.params.prompt);return v?v.replace(/^改编脚本:\s*/,""):null}return null}function Vt(e){const s=Ie(e);return s==="analyze"?"视频分析":s==="rewrite"?"脚本改编":null}function Gt(e){const s=e.params.batchIndex;return typeof s!="number"||!Number.isFinite(s)?null:e.type===g.AUDIO?s+1:s>=1?s:s+1}function Bt(e){switch(e){case k.PENDING:case k.PROCESSING:return"primary";case k.COMPLETED:return"success";case k.FAILED:return"danger";case k.CANCELLED:return"default";default:return"default"}}function Wt(e){switch(e){case k.PENDING:case k.PROCESSING:return"处理中";case k.COMPLETED:return"已完成";case k.FAILED:return"失败";case k.CANCELLED:return"已取消";default:return"未知"}}const et=nt.memo(({task:e,selectionMode:s=!1,isSelected:v=!1,isCompact:_,onSelectionChange:d,onRetry:f,onDelete:w,onDownload:y,onInsert:T,onCopy:A,onPreviewOpen:j,onEdit:C,onRegenerate:i,onExtractCharacter:a})=>{var we,Ae,Me,Re,Le,De,ke,ze,Pe,Oe,Ue,He,Fe,$e,Ve,Ge,Be,We,Xe,Ke,Ye,Je,Qe;const[n,N]=r.useState(null),[S,u]=r.useState(!1),F=r.useRef(null),o=e.status===k.COMPLETED,P=e.status===k.FAILED,Y=e.status===k.CANCELLED,M=P||Y,ae=_!==void 0?_:S;r.useEffect(()=>{if(_!==void 0)return;const h=F.current;if(!h)return;const re=new ResizeObserver(ge=>{for(const ve of ge){const at=ve.contentRect.width;u(at<Pt)}});return re.observe(h),()=>re.disconnect()},[_]);const U=((we=e.params.storyboard)==null?void 0:we.enabled)===!0,V=o&&e.type===g.VIDEO&&St(e.remoteId)&&Et(e.params.model)&&!U,z=e.type===g.CHARACTER,G=e.type===g.AUDIO,O=e.type===g.CHAT,R=G&&It(e.result),ie=e.type===g.IMAGE,le=e.type===g.IMAGE||e.type===g.VIDEO||e.type===g.AUDIO&&!R,oe=wt(e.result),he=At(e.result,e.params.title||e.params.prompt),de=Mt(oe),Z=Rt(e.result),ne=Ie(e),K=$t(e),ue=Vt(e),me=Gt(e),l=z?o&&((Ae=e.result)!=null&&Ae.characterUsername)?`@${e.result.characterUsername}`:"角色创建中...":O?((Me=e.result)==null?void 0:Me.title)||e.params.prompt||((Re=e.result)==null?void 0:Re.chatResponse):R?he||de||e.params.prompt:((Le=e.result)==null?void 0:Le.title)||e.params.title||e.params.prompt,p=e.params.params&&typeof e.params.params=="object"?e.params.params:null,L=e.type===g.AUDIO&&!R?Ot((De=e.result)==null?void 0:De.duration):null,I=e.type===g.VIDEO&&Ut(e.params.model),H=pe(p==null?void 0:p.model_name)||((ke=e.params.model)!=null&&ke.toLowerCase().startsWith("kling-v")?e.params.model:void 0),te=Ft(pe(p==null?void 0:p.mode)),c=pe(p==null?void 0:p.klingAction2),m=Ht(c);pe(p==null?void 0:p.cfg_scale);const b=R?void 0:((Pe=(ze=e.result)==null?void 0:ze.urls)==null?void 0:Pe[0])||((Oe=e.result)==null?void 0:Oe.url),x=e.type===g.IMAGE&&b?ct(b):b,{isCached:J,cacheWarning:$}=it(z||G?void 0:x),D=le&&!G&&!J?$||((Ue=e.result)==null?void 0:Ue.cacheWarning):void 0,B=D?`${D.message}${D.expiresHint?`
2
2
  ${D.expiresHint}`:""}`:"",E=R?0:((Fe=(He=e.result)==null?void 0:He.urls)==null?void 0:Fe.length)||(($e=e.result)!=null&&$e.url?1:0),ce=r.useMemo(()=>JSON.stringify({taskId:e.id,taskType:e.type,taskStatus:e.status,hasMultipleResults:E>1}),[E,e.id,e.status,e.type]),W=G?R||(Ve=e.result)==null?void 0:Ve.previewImageUrl:x,se=lt(W,e.type===g.IMAGE?"image":void 0,"small");r.useEffect(()=>{if(o&&W&&e.type===g.IMAGE){const h=new Image;h.onload=()=>{N({width:h.naturalWidth,height:h.naturalHeight})},h.onerror=()=>{N(null)},h.src=W}},[o,W,e.type]);const Te=h=>{const re=h.target;re.closest("button")||re.closest(".t-checkbox")||re.closest("a")||re.closest(".task-item__preview")||(s?d==null||d(e.id,!v):o&&x&&le&&(j==null||j()))},fe=h=>{h.stopPropagation(),o&&x&&le&&(j==null||j())};return t.jsxs("div",{ref:F,className:`task-item ${s?"task-item--selection-mode":""} ${v?"task-item--selected":""} ${ae?"task-item--compact":"task-item--wide"} task-item--${e.status.toLowerCase()}`,onClick:Te,children:[s&&t.jsx("div",{className:"task-item__checkbox",children:t.jsx(ot,{checked:v,onChange:h=>d==null?void 0:d(e.id,h)})}),(o||P||e.status===k.PROCESSING)&&(W||z||O||e.type===g.VIDEO||e.type===g.IMAGE||e.type===g.AUDIO)&&t.jsx("div",{className:"task-item__preview-wrapper",children:t.jsx("div",{className:"task-item__preview","data-track":"task_click_preview",onClick:fe,children:P?t.jsxs("div",{className:"task-item__preview-failed",children:[t.jsx(dt,{size:"24px"}),t.jsx("span",{children:"生成失败"})]}):e.status===k.PROCESSING?O?t.jsx("div",{className:"task-item__preview-placeholder",children:t.jsx("span",{children:ne==="analyze"?`视频分析中 ${Math.round(e.progress??0)}%`:ne==="rewrite"?`脚本改编中 ${Math.round(e.progress??0)}%`:"生成文本中"})}):t.jsx(zt,{taskType:e.type,taskStatus:e.status,realProgress:e.progress,startedAt:e.startedAt,mediaUrl:W},e.startedAt):t.jsxs(t.Fragment,{children:[e.type===g.IMAGE&&x?t.jsxs(t.Fragment,{children:[t.jsx(ye,{src:se||x,alt:"Generated",maxRetries:5,fallback:t.jsx("div",{className:"task-item__preview-placeholder",children:t.jsx("span",{children:"图片加载失败"})})}),E>1&&t.jsxs("span",{className:"task-item__multi-badge",children:[E,"张"]})]}):G&&W?t.jsxs(t.Fragment,{children:[t.jsx(ye,{src:W,alt:l||"音频封面",maxRetries:3,fallback:t.jsxs("div",{className:"task-item__preview-placeholder",children:[t.jsx(_e,{size:"24px"}),t.jsx("span",{children:"音频封面"})]})}),t.jsx("div",{className:"task-item__video-play-overlay",children:t.jsx(_e,{size:"28px"})}),E>1&&t.jsxs("span",{className:"task-item__multi-badge",children:[E,"首"]})]}):R?t.jsxs("div",{className:"task-item__preview-placeholder",children:[t.jsx(qe,{size:"24px"}),t.jsx("span",{children:"歌词"})]}):O?t.jsx("div",{className:"task-item__preview-placeholder",children:t.jsx("span",{children:"文本"})}):z&&((Ge=e.result)!=null&&Ge.characterProfileUrl)?t.jsx("div",{className:"task-item__character-preview",children:t.jsx(ye,{src:e.result.characterProfileUrl,alt:`@${e.result.characterUsername}`,maxRetries:5,fallback:t.jsx("div",{className:"task-item__character-fallback",children:t.jsx(Ee,{size:"32px"})})})}):x?t.jsxs(t.Fragment,{children:[t.jsx(ut,{src:x,poster:(Be=e.result)==null?void 0:Be.previewImageUrl,alt:l||"视频预览",thumbnailSize:"small",videoProps:{muted:!0,playsInline:!0,preload:"metadata"}}),t.jsx("div",{className:"task-item__video-play-overlay",children:t.jsx(_e,{size:"32px"})})]}):t.jsx("div",{className:"task-item__preview-placeholder",children:e.type===g.IMAGE?t.jsx(mt,{size:"24px"}):e.type===g.VIDEO?t.jsx(ht,{size:"24px"}):t.jsxs(t.Fragment,{children:[t.jsx(_e,{size:"24px"}),t.jsx("span",{children:"音频"})]})}),D&&t.jsx(ee,{content:B,showArrow:!1,children:t.jsx("span",{className:"task-item__cache-warning-badge",children:"需下载"})})]})})}),t.jsxs("div",{className:"task-item__body",children:[t.jsxs("div",{className:"task-item__prompt-area",children:[t.jsx(ee,{content:e.params.prompt,showArrow:!1,children:t.jsx("div",{className:"task-item__prompt",children:l})}),O&&K&&t.jsx(ee,{content:K,showArrow:!1,children:t.jsx("div",{className:"task-item__subtitle",children:K})})]}),t.jsxs("div",{className:"task-item__info-area",children:[t.jsxs("div",{className:"task-item__content-row",children:[t.jsxs("div",{className:"task-item__meta",children:[t.jsxs("div",{className:"task-item__tags",children:[t.jsx(X,{theme:Bt(e.status),variant:"light",className:"task-item__status-tag",children:Wt(e.status)}),e.params.model&&t.jsx(X,{variant:"outline",className:"task-item__model-tag",children:e.params.model}),O&&ue&&t.jsx(X,{variant:"outline",children:ue}),I&&H&&t.jsx(X,{variant:"outline",children:H}),I&&te&&t.jsx(X,{variant:"outline",children:te}),I&&m&&t.jsx(X,{variant:"outline",children:m}),e.type===g.VIDEO&&e.params.seconds&&t.jsxs(X,{variant:"outline",children:[e.params.seconds,"s"]}),e.type===g.VIDEO&&e.params.size&&t.jsx(X,{variant:"outline",children:e.params.size}),L&&t.jsx(X,{variant:"outline",children:L}),e.type===g.AUDIO&&e.params.mv&&!R&&t.jsx(X,{variant:"outline",children:e.params.mv}),e.type===g.AUDIO&&e.params.tags&&!R&&t.jsx(X,{variant:"outline",children:((We=String(e.params.tags).split(",")[0])==null?void 0:We.trim())||"音频"}),R&&t.jsx(X,{variant:"outline",children:"歌词"}),R&&Z[0]&&t.jsx(X,{variant:"outline",children:Z[0]}),e.params.batchId&&me!==null&&typeof e.params.batchTotal=="number"&&t.jsxs(X,{variant:"outline",children:["批量 ",me,"/",e.params.batchTotal]})]}),t.jsxs("div",{className:"task-item__details",children:[t.jsx("span",{className:"task-item__time",children:pt(e.createdAt)}),e.startedAt&&t.jsxs("span",{className:"task-item__duration",children:["·"," ",ft((e.completedAt||Date.now())-e.startedAt)]}),(()=>{var ge,ve;const h=(n==null?void 0:n.width)||((ge=e.result)==null?void 0:ge.width)||e.params.width,re=(n==null?void 0:n.height)||((ve=e.result)==null?void 0:ve.height)||e.params.height;return h&&re?t.jsxs("span",{className:"task-item__size",children:[" ","· ",h,"x",re]}):null})(),L&&t.jsxs("span",{className:"task-item__size",children:[" · ",L]}),o&&((Xe=e.result)==null?void 0:Xe.url)&&!R&&t.jsx("a",{href:e.result.url,target:"_blank",rel:"noopener noreferrer",className:"task-item__link","data-track":"task_click_open_link",onClick:h=>h.stopPropagation(),children:"· 打开链接"})]}),(e.type===g.VIDEO||e.type===g.AUDIO||e.type===g.CHAT&&typeof e.progress=="number")&&e.status===k.PROCESSING&&t.jsx("div",{className:"task-item__progress-container",children:t.jsx("div",{className:"task-item__progress-bar",children:t.jsx("div",{className:`task-item__progress-fill task-item__progress-fill--${e.status}`,style:{width:`${e.progress??0}%`}})})})]}),t.jsxs("div",{className:"task-item__actions",children:[t.jsxs("div",{className:"task-item__secondary-actions",children:[o&&((Ke=e.result)==null?void 0:Ke.url)&&!z&&t.jsx(ee,{content:"下载",children:t.jsx(q,{size:"small",variant:"text",icon:t.jsx(gt,{}),"data-track":"task_click_download","data-track-params":ce,onClick:h=>{h.stopPropagation(),y==null||y(e.id)}})}),o&&R&&oe&&t.jsx(ee,{content:"复制歌词",children:t.jsx(q,{size:"small",variant:"text",icon:t.jsx(qe,{}),onClick:h=>{h.stopPropagation(),A==null||A(e.id)}})}),!z&&!G&&!O&&t.jsx(ee,{content:"编辑",children:t.jsx(q,{size:"small",variant:"text",icon:t.jsx(vt,{}),onClick:h=>{h.stopPropagation(),C==null||C(e.id)}})}),ie&&t.jsx(ee,{content:"以当前提示词再次生成",children:t.jsx(q,{size:"small",variant:"text",icon:t.jsx(_t,{}),"aria-label":"再次生成","data-track":"task_click_regenerate_prefill","data-track-params":ce,onClick:h=>{h.stopPropagation(),i==null||i(e.id)}})}),V&&t.jsx(ee,{content:"角色",children:t.jsx(q,{size:"small",variant:"text",icon:t.jsx(Ee,{}),onClick:h=>{h.stopPropagation(),a==null||a(e.id)}})}),t.jsx(ee,{content:"删除",children:t.jsx(q,{size:"small",variant:"text",className:"task-item__delete-btn",icon:t.jsx(xt,{}),onClick:h=>{h.stopPropagation(),w==null||w(e.id)}})})]}),o&&((((Ye=e.result)==null?void 0:Ye.url)||((Je=e.result)==null?void 0:Je.chatResponse))&&!z||R)&&t.jsx(q,{size:"small",theme:"primary",className:"task-item__primary-action","data-track":"task_click_insert","data-track-params":ce,onClick:h=>{h.stopPropagation(),T==null||T(e.id)},children:"插入"}),M&&t.jsx(q,{size:"small",theme:"primary",className:"task-item__primary-action","data-track":"task_click_retry","data-track-params":ce,onClick:h=>{h.stopPropagation(),f==null||f(e.id)},children:"重试"})]})]}),P&&e.error&&t.jsx("div",{className:"task-item__error",children:t.jsxs("div",{className:"task-item__error-message",children:[e.error.message,((Qe=e.error.details)==null?void 0:Qe.originalError)&&t.jsx(ee,{content:t.jsxs("div",{className:"task-item__error-details-tooltip",children:[t.jsx("div",{className:"task-item__error-details-title",children:"详细错误:"}),t.jsx("div",{className:"task-item__error-details-content",children:e.error.details.originalError})]}),theme:"light",placement:"bottom",children:t.jsx("span",{className:"task-item__error-details-link",onClick:h=>h.stopPropagation(),children:"[详情]"})})]})})]})]})]})},(e,s)=>{var v,_;return e.task.id===s.task.id&&e.task.status===s.task.status&&e.task.progress===s.task.progress&&((v=e.task.error)==null?void 0:v.message)===((_=s.task.error)==null?void 0:_.message)&&e.task.result===s.task.result&&e.isSelected===s.isSelected&&e.selectionMode===s.selectionMode&&e.isCompact===s.isCompact&&e.onRegenerate===s.onRegenerate}),Xt=new Set,Kt=140,tt=0,Yt=3,st=375,Jt=20,ss=({tasks:e,selectionMode:s=!1,selectedTaskIds:v,onSelectionChange:_,onRetry:d,onDelete:f,onDownload:w,onInsert:y,onCopy:T,onEdit:A,onRegenerate:j,onPreviewOpen:C,onExtractCharacter:i,className:a="",emptyContent:n,isCompact:N,hasMore:S=!1,isLoadingMore:u=!1,onLoadMore:F,totalCount:o,loadedCount:P,allLoadedText:Y,allLoadedHint:M})=>{const ae=v??Xt,U=r.useRef(null),V=r.useRef(null),z=r.useRef(null),G=r.useRef(0),[O,R]=r.useState(()=>typeof window<"u"&&window.innerWidth<st),[ie,le]=r.useState(!1),oe=N!==void 0?N:O,he=l=>{let p=l;for(;p;){const I=getComputedStyle(p).overflowY;if((I==="auto"||I==="scroll")&&p.scrollHeight>p.clientHeight)return p;p=p.parentElement}return null};r.useEffect(()=>{if(!S||!F)return;const l=U.current;if(!l)return;const p=setTimeout(()=>{const I=l.scrollHeight>l.clientHeight?l:he(l);if(z.current=I,!I)return;const H=()=>{const{scrollTop:te,scrollHeight:c,clientHeight:m}=I,b=c-te-m,x=Date.now();x-G.current<500||b<300&&S&&!u&&(G.current=x,F())};I.addEventListener("scroll",H,{passive:!0}),H(),l.__loadMoreCleanup=()=>{I.removeEventListener("scroll",H)}},150);return()=>{var L;clearTimeout(p),(L=l.__loadMoreCleanup)==null||L.call(l)}},[S,u,F,e.length]),r.useEffect(()=>{const l=U.current;if(!l)return;const p=setTimeout(()=>{const I=l.scrollHeight>l.clientHeight?l:he(l);if(z.current=I,!I)return;const H=()=>{le(I.scrollTop>I.clientHeight)};I.addEventListener("scroll",H),H(),l.__scrollCleanup=()=>{I.removeEventListener("scroll",H)}},100);return()=>{var L;clearTimeout(p),(L=l.__scrollCleanup)==null||L.call(l)}},[e.length]);const de=()=>{const l=z.current||U.current;l&&(l.scrollTop=0)};r.useEffect(()=>{if(N!==void 0)return;const l=U.current;if(!l)return;const p=l,L=H=>{const te=H??p.getBoundingClientRect().width;R(te<st)},I=new ResizeObserver(H=>{L(H[0].contentRect.width)});return I.observe(p),L(),()=>{I.disconnect()}},[N,U.current]);const Z=e.length>Jt,ne=jt({count:Z?e.length:0,getScrollElement:()=>U.current,estimateSize:()=>Kt+tt,overscan:Yt,enabled:Z,measureElement:l=>l.offsetHeight});if(e.length===0)return t.jsx("div",{className:`virtual-task-list virtual-task-list--empty ${a}`,children:n});const K=e.length||P||0,ue=()=>t.jsxs(t.Fragment,{children:[u&&t.jsxs("div",{className:"virtual-task-list__loading-more",children:[t.jsx("span",{className:"virtual-task-list__loading-spinner"}),t.jsx("span",{children:"加载中..."})]}),S&&!u&&o!==void 0&&o>0&&t.jsxs("div",{className:"virtual-task-list__pagination-info",children:["已加载 ",K," / ",o]}),!S&&e.length>0&&o!==void 0&&o>50&&t.jsx("div",{className:"virtual-task-list__no-more",children:M?t.jsx(ee,{content:M,children:t.jsx("span",{children:Y||`已加载全部 ${o} 个任务`})}):Y||`已加载全部 ${o} 个任务`})]});if(!Z)return t.jsxs("div",{ref:V,className:`virtual-task-list-container ${a}`,style:{height:"100%",position:"relative",display:"flex",flexDirection:"column"},children:[t.jsxs("div",{ref:U,className:"virtual-task-list-scrollarea",style:{flex:1,overflow:"auto"},children:[e.map(l=>t.jsx(et,{task:l,selectionMode:s,isSelected:ae.has(l.id),isCompact:oe,onSelectionChange:_,onRetry:d,onDelete:f,onDownload:w,onInsert:y,onEdit:A,onRegenerate:j,onPreviewOpen:()=>C==null?void 0:C(l.id),onExtractCharacter:i},l.id)),t.jsx(ue,{})]}),ie&&t.jsx(q,{shape:"circle",variant:"base",theme:"default",icon:t.jsx(Ze,{}),onClick:de,className:"virtual-task-list__back-to-top"})]});const me=ne.getVirtualItems();return t.jsxs("div",{ref:V,className:`virtual-task-list-container ${a}`,style:{height:"100%",width:"100%",position:"relative",display:"flex",flexDirection:"column"},children:[t.jsxs("div",{ref:U,className:"virtual-task-list-scrollarea",style:{flex:1,width:"100%",overflow:"auto"},children:[t.jsx("div",{style:{height:`${ne.getTotalSize()}px`,width:"100%",position:"relative"},children:me.map(l=>{const p=e[l.index];return p?t.jsx("div",{"data-index":l.index,ref:L=>{L&&ne.measureElement(L)},style:{position:"absolute",top:0,left:0,width:"100%",transform:`translateY(${l.start}px)`,paddingBottom:`${tt}px`},children:t.jsx(et,{task:p,selectionMode:s,isSelected:ae.has(p.id),isCompact:oe,onSelectionChange:_,onRetry:d,onDelete:f,onDownload:w,onInsert:y,onCopy:T,onEdit:A,onRegenerate:j,onPreviewOpen:()=>C==null?void 0:C(p.id),onExtractCharacter:i})},p.id):null})}),t.jsx(ue,{})]}),ie&&t.jsx(q,{shape:"circle",variant:"base",theme:"default",icon:t.jsx(Ze,{}),onClick:de,className:"virtual-task-list__back-to-top"})]})};function Qt(e,s){const[v,_]=r.useState(s||null),[d,f]=r.useState(!1),[w,y]=r.useState(!0),[T,A]=r.useState(null),j=r.useRef("none"),C=r.useCallback(async()=>{if(y(!0),!s){_(null),f(!1),y(!1);return}const i=await xe.getCachedUrl(s);i?(T&&T!==i&&URL.revokeObjectURL(T),A(i),_(i),f(!0)):s?(_(s),f(!1)):(_(null),f(!1)),y(!1)},[s,T]);return r.useEffect(()=>{C(),s&&(j.current=xe.getCacheStatus(s))},[e,s]),r.useEffect(()=>xe.subscribe(()=>{if(!s)return;const a=xe.getCacheStatus(s),n=j.current;a!==n&&(j.current=a,(a==="cached"||a==="none")&&C())}),[s,C]),r.useEffect(()=>()=>{T&&URL.revokeObjectURL(T)},[T]),{url:v,isFromCache:d,isLoading:w}}const rt=1,je=3,qt=({videoUrl:e,videoDuration:s,onConfirm:v,onCancel:_,disabled:d=!1})=>{const f=r.useRef(null),w=r.useRef(null),y=r.useRef(null),T=r.useRef(null),A=r.useRef(0),[j,C]=r.useState(!0),[i,a]=r.useState(s),[n,N]=r.useState(0),[S,u]=r.useState(Math.min(je,s)),[F,o]=r.useState(0),[P,Y]=r.useState(""),[M,ae]=r.useState(!1),[U,V]=r.useState(null),[z,G]=r.useState([]),[O,R]=r.useState(!1),ie=S-n,le=i>0?ie/i*100:100,oe=i>0?n/i*100:0;r.useEffect(()=>(e&&(C(!0),Y(""),G([]),ae(!1),V(null)),()=>{T.current!==null&&cancelAnimationFrame(T.current)}),[e]);const he=()=>{const c=f.current;if(c){const m=c.duration;a(m),ae(!0),u(Math.min(je,m))}},de=r.useCallback(async()=>{const c=f.current;if(!(!c||!M||i<=0||O)){R(!0);try{const b=Math.max(4,Math.ceil(i*2)),x=i/b,J=[],$=document.createElement("canvas"),D=$.getContext("2d");if(!D)return;const B=50,E=c.videoWidth/c.videoHeight||16/9,ce=Math.round(B*E);$.width=ce,$.height=B;for(let W=0;W<b;W++){const se=Math.min((W+.5)*x,i-.01);await new Promise(Te=>{const fe=()=>{c.removeEventListener("seeked",fe),Te()};c.addEventListener("seeked",fe),c.currentTime=se}),D.drawImage(c,0,0,ce,B),J.push($.toDataURL("image/jpeg",.5))}G(J),c.currentTime=n}catch(m){console.warn("Failed to generate frame strip:",m)}finally{R(!1)}}},[M,i,O,n]);r.useEffect(()=>{if(M&&i>0&&z.length===0&&!O){const c=setTimeout(()=>{de()},100);return()=>clearTimeout(c)}},[M,i,z.length,O,de]);const Z=r.useCallback(()=>{const c=f.current,m=w.current;if(!c||!m)return;const b=m.getContext("2d");if(b)try{m.width=c.videoWidth,m.height=c.videoHeight,b.drawImage(c,0,0,m.width,m.height);const x=m.toDataURL("image/jpeg",.8);Y(x),C(!1)}catch(x){console.warn("Failed to generate frame image:",x)}},[]),ne=r.useCallback(()=>{const c=f.current;c&&j&&(c.currentTime===0||Math.abs(c.currentTime-n)<.1)&&Z()},[j,n,Z]),K=r.useCallback(c=>{const m=f.current;!m||!M||Math.abs(c-A.current)<.1||(A.current=c,m.readyState>=2&&(m.currentTime=c))},[M]),ue=r.useCallback(()=>{Z()},[Z]);r.useEffect(()=>{if(M&&i>0){o(n);const c=f.current;c&&c.readyState>=2&&(c.currentTime=n)}},[M,i]);const me=r.useCallback(c=>{const m=y.current;if(!m)return 0;const b=m.getBoundingClientRect(),x=c.clientX-b.left;return Math.max(0,Math.min(1,x/b.width))*i},[i]),l=c=>{if(d||!M)return;c.preventDefault(),c.stopPropagation(),V("left");const m=S,b=J=>{const $=me(J),D=m-rt,B=Math.max(0,m-je),E=Math.max(B,Math.min(D,$));N(E),o(E),K(E)},x=()=>{V(null),document.removeEventListener("mousemove",b),document.removeEventListener("mouseup",x),K(n)};document.addEventListener("mousemove",b),document.addEventListener("mouseup",x)},p=c=>{if(d||!M)return;c.preventDefault(),c.stopPropagation(),V("right");const m=n,b=J=>{const $=me(J),D=m+rt,B=Math.min(i,m+je),E=Math.max(D,Math.min(B,$));u(E),o(E),K(E)},x=()=>{V(null),document.removeEventListener("mousemove",b),document.removeEventListener("mouseup",x),K(S)};document.addEventListener("mousemove",b),document.addEventListener("mouseup",x)},L=c=>{if(d||!M)return;c.preventDefault(),V("center");const m=y.current;if(!m)return;const b=m.getBoundingClientRect(),x=c.clientX,J=n,$=S-n,D=E=>{const W=(E.clientX-x)/b.width*i;let se=J+W;se=Math.max(0,Math.min(i-$,se)),N(se),u(se+$),o(se),K(se)},B=()=>{V(null),document.removeEventListener("mousemove",D),document.removeEventListener("mouseup",B),K(n)};document.addEventListener("mousemove",D),document.addEventListener("mouseup",B)},I=c=>{if(d||!M||U||c.target.closest(".character-time-selector__range"))return;const b=y.current;if(!b)return;const x=b.getBoundingClientRect(),$=(c.clientX-x.left)/x.width*i,D=S-n,B=D/2;let E=$-B;E=Math.max(0,Math.min(i-D,E)),N(E),u(E+D),o(E),K(E)},H=()=>{v(Math.round(n),Math.round(S))},te=c=>c.toFixed(1)+"s";return t.jsxs("div",{className:`character-time-selector ${U?"is-dragging":""}`,children:[t.jsx("video",{ref:f,src:e,style:{display:"none"},muted:!0,playsInline:!0,preload:"auto",crossOrigin:"anonymous",onLoadedMetadata:he,onSeeked:ue,onCanPlay:ne}),t.jsx("canvas",{ref:w,style:{display:"none"}}),t.jsxs("div",{className:"character-time-selector__preview",children:[j?t.jsxs("div",{className:"character-time-selector__loading",children:[t.jsx("div",{className:"character-time-selector__spinner"}),t.jsx("span",{children:"加载中..."})]}):P?t.jsx("img",{src:P,alt:"Video frame",className:"character-time-selector__frame"}):t.jsx("div",{className:"character-time-selector__placeholder",children:"视频帧加载失败"}),t.jsx("div",{className:"character-time-selector__time-badge",children:te(F)})]}),t.jsxs("div",{className:"character-time-selector__timeline",ref:y,onClick:I,children:[z.length>0?t.jsx("div",{className:"character-time-selector__frame-strip",children:z.map((c,m)=>t.jsx("img",{src:c,alt:"",className:"character-time-selector__frame-thumb",draggable:!1},m))}):O?t.jsx("div",{className:"character-time-selector__frame-strip character-time-selector__frame-strip--loading",children:t.jsx("div",{className:"character-time-selector__strip-shimmer"})}):t.jsx("div",{className:"character-time-selector__timeline-bg"}),t.jsxs("div",{className:`character-time-selector__range ${U?"dragging":""}`,style:{left:`${oe}%`,width:`${le}%`},children:[t.jsx("div",{className:"character-time-selector__handle character-time-selector__handle--left",onMouseDown:l}),t.jsx("div",{className:"character-time-selector__range-content",onMouseDown:L,children:t.jsxs("span",{className:"character-time-selector__range-label",children:[te(n)," - ",te(S)]})}),t.jsx("div",{className:"character-time-selector__handle character-time-selector__handle--right",onMouseDown:p})]})]}),t.jsxs("div",{className:"character-time-selector__info",children:[t.jsxs("span",{children:["API参数: ",Math.round(n),", ",Math.round(S)]}),t.jsxs("span",{children:["时长: ",ie.toFixed(1),"s"]})]}),t.jsxs("div",{className:"character-time-selector__actions",children:[t.jsx(q,{variant:"outline",onClick:_,disabled:d,children:"取消"}),t.jsx(q,{theme:"primary",onClick:H,disabled:d||!M,children:"创建角色"})]})]})},rs=({visible:e,task:s,onClose:v,onCreateStart:_,onCreateComplete:d})=>{var S;const{createTask:f,tasks:w}=Lt(),[y,T]=r.useState(!1),A=r.useRef(!1),{url:j}=Qt((s==null?void 0:s.id)??"",(S=s==null?void 0:s.result)==null?void 0:S.url),C=r.useMemo(()=>s!=null&&s.params.seconds?parseFloat(s.params.seconds.toString()):10,[s==null?void 0:s.params.seconds]),i=r.useMemo(()=>s?w.some(u=>u.type===g.CHARACTER&&u.params.sourceLocalTaskId===s.id&&(u.status===k.PENDING||u.status===k.PROCESSING)):!1,[s,w]),a=r.useCallback(async(u,F)=>{if(!(A.current||y||i)){if(!s||!s.remoteId){Ce.error("无效的任务数据");return}A.current=!0,T(!0),_==null||_();try{const o=Dt(u,F),P=kt(s.params.model),Y=f({prompt:s.params.prompt||"角色提取",model:P,sourceVideoTaskId:s.remoteId,characterTimestamps:o,sourceLocalTaskId:s.id},g.CHARACTER);Ce.success("角色创建任务已加入队列"),d==null||d(Y.id),v()}catch(o){console.error("Failed to create character task:",o);const P=o.message||"创建任务失败";Ce.error(P)}finally{A.current=!1,T(!1)}}},[i,f,y,v,d,_,s]),n=()=>{y||v()},N=()=>{y||v()};return!s||!j?null:t.jsxs(yt,{visible:e,header:"角色",onClose:n,footer:null,width:560,className:"character-create-dialog",closeOnOverlayClick:!y,closeOnEscKeydown:!y,children:[t.jsxs("div",{className:"character-create-dialog__description",children:["从视频中提取角色,创建后可通过 ",t.jsx("code",{children:"@username"})," 在提示词中引用"]}),i&&t.jsx("div",{className:"character-create-dialog__warning",children:"此视频已有一个角色正在创建中"}),t.jsx(qt,{videoUrl:j,videoDuration:C,onConfirm:a,onCancel:N,disabled:y||i})]})},as=({characterId:e,profilePictureUrl:s,alt:v="Character",className:_,onClick:d})=>{const[f,w]=r.useState(s||null),[y,T]=r.useState(!1),[A,j]=r.useState(!0);r.useEffect(()=>{let a=!1;return(async()=>{j(!0),T(!1);const N=await be.getCachedUrl(e);if(!a){if(N){w(N),j(!1);return}s?(w(s),be.cacheAvatar(e,s).catch(()=>{})):T(!0),j(!1)}})(),()=>{a=!0}},[e,s]);const C=async()=>{if(f===s){const a=await be.getCachedUrl(e);if(a&&a!==f){w(a);return}}T(!0)},i=()=>{j(!1)};return y||!f?t.jsx("div",{className:_,onClick:d,style:d?{cursor:"pointer"}:void 0,children:t.jsx(Ee,{})}):t.jsx(ye,{src:f,alt:v,className:_,onLoadFailure:()=>void C(),onLoad:i,onClick:d,style:{display:A?"none":"block",cursor:d?"pointer":void 0},showSkeleton:!1,eager:!0})};function ns(){const[e,s]=r.useState([]),[v,_]=r.useState(!0),d=r.useRef(new Map);r.useEffect(()=>{const a=Q.getCharacters$().subscribe(n=>{s(n),_(!1)});return Q.init(),()=>a.unsubscribe()},[]),r.useEffect(()=>{v||(async()=>{const n=Q.getPendingCharacters();for(const N of n)d.current.get(N.id)||f(N)})()},[v]);const f=r.useCallback(async a=>{if(!d.current.get(a.id)){d.current.set(a.id,!0);try{const n=await Se.resumePolling(a.id,{onStatusChange:async N=>{await Q.updateCharacterStatus(a.id,N)}});await Q.updateCharacter(a.id,{username:n.username,profilePictureUrl:n.profile_picture_url,permalink:n.permalink,status:"completed",completedAt:Date.now()})}catch(n){console.error("[useCharacters] Character polling failed:",n),await Q.updateCharacterStatus(a.id,"failed",n.message)}finally{d.current.delete(a.id)}}},[]),w=r.useCallback(async a=>{var N;const n=Date.now();Ne.track("character_extract_start",{videoTaskId:a.videoTaskId,hasTimestamps:!!((N=a.characterTimestamps)!=null&&N.length)});try{const u=(await Se.createCharacter(a)).id,F={id:u,username:"",profilePictureUrl:"",sourceTaskId:a.localTaskId||"",sourceVideoId:a.videoTaskId,sourcePrompt:a.sourcePrompt,characterTimestamps:a.characterTimestamps,status:"processing",createdAt:Date.now()};return await Q.saveCharacter(F),d.current.set(u,!0),Se.resumePolling(u,{onStatusChange:async o=>{await Q.updateCharacterStatus(u,o)}}).then(async o=>{await Q.updateCharacter(u,{username:o.username,profilePictureUrl:o.profile_picture_url,permalink:o.permalink,status:"completed",completedAt:Date.now()}),Ne.track("character_extract_success",{characterId:u,username:o.username,duration:Date.now()-n})}).catch(async o=>{console.error("[useCharacters] Character creation failed:",o),await Q.updateCharacterStatus(u,"failed",o.message),Ne.track("character_extract_failed",{characterId:u,error:o.message,duration:Date.now()-n})}).finally(()=>{d.current.delete(u)}),F}catch(S){throw console.error("[useCharacters] Failed to create character:",S),S}},[]),y=r.useCallback(async a=>(d.current.delete(a),Q.deleteCharacter(a)),[]),T=r.useCallback(async()=>{await Q.init()},[]),A=r.useCallback(a=>e.find(n=>n.id===a),[e]),j=r.useCallback(a=>e.some(n=>n.sourceTaskId===a&&(n.status==="pending"||n.status==="processing")),[e]),C=e.filter(a=>a.status==="completed"),i=e.filter(a=>a.status==="pending"||a.status==="processing");return{characters:e,completedCharacters:C,pendingCharacters:i,isLoading:v,createCharacter:w,deleteCharacter:y,refreshCharacters:T,getCharacterById:A,isCreatingCharacterForTask:j}}export{as as C,et as T,ss as V,rs as a,ns as u};
@@ -1,5 +1,5 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ai-chat-DbjmzngX.css","./tool-windows-DW-CDfPc.css"])))=>i.map(i=>d[i]);
2
- import{_ as Z}from"./startup-runtime-BrfuwjQS.js";import{nF as H,pC as X,pD as le,pE as oe,pF as ke,ny as Se,aL as ye,pG as he,P as y,a8 as We,Q as ne,T as K,nt as ce,aD as ue,ju as xe,aE as se}from"./ai-chat-B-XdoWBQ.js";import{w as N}from"./workflow-submission-service-C-6Uf9FA.js";import{S as re}from"./skill-dsl-parser-CTM4hEIp.js";import{c as ve}from"./external-skill-parser-y-iaYa67.js";import{ak as $,aa as Re}from"./tool-windows-BnDZa9FH.js";function Ie(t){if(!/\[(?:Intro|Verse|Chorus|Pre-Chorus|Bridge|Outro|Hook|Fade|Instrumental|Interlude)/i.test(t))return{lyrics:t};const e=t.split(`
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ai-chat-BlxYfB4O.css","./tool-windows-DW-CDfPc.css"])))=>i.map(i=>d[i]);
2
+ import{_ as Z}from"./startup-runtime-BrfuwjQS.js";import{nF as H,pC as X,pD as le,pE as oe,pF as ke,ny as Se,aL as ye,pG as he,P as y,a8 as We,Q as ne,T as K,nt as ce,aD as ue,ju as xe,aE as se}from"./ai-chat-BnWVpTEI.js";import{w as N}from"./workflow-submission-service-BqiL_5Cj.js";import{S as re}from"./skill-dsl-parser-ZR--uu5h.js";import{c as ve}from"./external-skill-parser-y-iaYa67.js";import{ak as $,aa as Re}from"./tool-windows-Bf_pMml-.js";function Ie(t){if(!/\[(?:Intro|Verse|Chorus|Pre-Chorus|Bridge|Outro|Hook|Fade|Instrumental|Interlude)/i.test(t))return{lyrics:t};const e=t.split(`
3
3
  `);let o,n;const a=[];for(const l of e){const s=l.trim();if(!o&&/^#\s+(.+)/.test(s)){o=s.replace(/^#\s+/,"").trim();continue}if(!n&&/^(?:标签|tags)\s*[::]\s*(.+)/i.test(s)){n=s.replace(/^(?:标签|tags)\s*[::]\s*/i,"").trim();continue}a.push(l)}for(;a.length>0&&a[0].trim()==="";)a.shift();for(;a.length>0&&a[a.length-1].trim()==="";)a.pop();return{title:o,tags:n,lyrics:a.join(`
4
4
  `)}}function Y(){return`wf-${Date.now()}-${Math.random().toString(36).substring(2,8)}`}const _e=new Set(["generate_image","generate_video","generate_long_video","generate_audio","generate_text"]);function ee(t){return Se(t)}function V(t,e){return e.length===0?t:{...t,knowledgeContextRefs:e}}function be(t,e){return e.length===0?t:t.map(o=>!_e.has(o.mcp)||o.args.knowledgeContextRefs?o:{...o,args:V(o.args,e)})}function Te(t,e,o=!1){return t.map(n=>({...n,args:ye(n.mcp,{...n.args},{defaultModels:e.defaultModels,defaultModelRefs:e.defaultModelRefs,contextModel:{id:e.modelId,type:e.generationType==="agent"?"text":e.generationType},contextModelRef:e.modelRef,overrideSpecifiedModel:o})}))}function Ce(t,e){return e.length===0?t:t.map(o=>{var l;if(o.args.referenceImages)return o;const n=H.getTool(o.mcp);return o.mcp==="generate_ppt"||!!((l=n==null?void 0:n.inputSchema.properties)!=null&&l.referenceImages)?{...o,args:{...o.args,referenceImages:e}}:o})}function Me(t,e=[]){var I;const{generationType:o,modelId:n,modelRef:a,isModelExplicit:l,prompt:s,userInstruction:g,rawInput:m,count:c,size:p,duration:x,extraParams:u,selection:r,defaultModels:d,defaultModelRefs:h,knowledgeContextRefs:M}=t,_=ee(M),i=[],v=Y(),w=`wf_batch_${v}`;for(let W=0;W<c;W++){const b=`${v}-step-${W+1}`,T={mode:"queue",batchId:w,batchIndex:W+1,batchTotal:c,globalIndex:W+1};if(o==="image"){const f=V({prompt:s,model:n,modelRef:a,workflowId:v,batchId:w,batchIndex:W+1,batchTotal:c,globalIndex:W+1},_);if(p&&(f.size=p),e.length>0){const R=typeof(r==null?void 0:r.maskImage)=="string"&&r.maskImage.trim().length>0&&e.length===1;f.referenceImages=R?[e[0]]:e,R&&(f.generationMode="image_edit",f.maskImage=r.maskImage)}u&&(f.params=u),i.push({id:b,mcp:"generate_image",args:f,options:T,description:c>1?`生成图片 (${W+1}/${c})`:"生成图片",status:"pending"})}else if(o==="video"){const f=V({prompt:s,model:n,modelRef:a,seconds:x||"5",workflowId:v,batchId:w,batchIndex:W+1,batchTotal:c,globalIndex:W+1},_);p&&(f.size=p),e.length>0&&(f.referenceImages=e);const R={...u||{}};n==="happyhorse-1.0-video-edit"&&((I=r==null?void 0:r.videos)!=null&&I[0])&&!R.input_video&&(R.input_video=r.videos[0]),Object.keys(R).length>0&&(f.params=R),i.push({id:b,mcp:"generate_video",args:f,options:T,description:c>1?`生成视频 (${W+1}/${c})`:"生成视频",status:"pending"})}else if(o==="audio"){const f=typeof(u==null?void 0:u.sunoAction)=="string"?u.sunoAction:"music",R=f==="lyrics",C=V({prompt:s,model:n,modelRef:a,sunoAction:f,workflowId:v,batchId:w,batchIndex:W+1,batchTotal:c,globalIndex:W+1},_);if(!R&&s){const S=Ie(s);(S.title||S.tags)&&(C.prompt=S.lyrics,S.title&&!(u!=null&&u.title)&&(C.title=S.title),S.tags&&!(u!=null&&u.tags)&&(C.tags=S.tags))}u&&(C.params=u,u.notifyHook&&(C.notifyHook=u.notifyHook),!R&&u.mv&&(C.mv=u.mv),!R&&u.title&&(C.title=u.title),!R&&u.tags&&(C.tags=u.tags),!R&&u.continueClipId&&(C.continueClipId=u.continueClipId),!R&&u.continueAt!==void 0&&u.continueAt!==null&&u.continueAt!==""&&(C.continueAt=Number(u.continueAt))),i.push({id:b,mcp:"generate_audio",args:C,options:T,description:c>1?`${R?"生成歌词":"生成音频"} (${W+1}/${c})`:R?"生成歌词":"生成音频",status:"pending"})}else{const f=V({prompt:s,model:n,modelRef:a,rawInput:m,workflowId:v,batchId:w,batchIndex:W+1,batchTotal:c,globalIndex:W+1},_);e.length>0&&(f.referenceImages=e),u&&(f.params=u),i.push({id:b,mcp:"generate_text",args:f,options:T,description:"生成文本",status:"pending"})}}const k=o==="audio"&&i.every(W=>W.args.sunoAction==="lyrics");return{id:v,name:o==="image"?"图片生成":o==="video"?"视频生成":o==="text"?"文本生成":k?"歌词生成":"音频生成",description:`使用 ${n} 模型${c>1?`生成 ${c} 个`:"生成"}${o==="image"?"图片":o==="video"?"视频":o==="text"?"文本":k?"歌词":"音频"}`,scenarioType:"direct_generation",generationType:o,steps:i,metadata:{prompt:s,userInstruction:g,rawInput:m,modelId:n,modelRef:a,defaultModels:d,defaultModelRefs:h,isModelExplicit:l,count:c,size:p,duration:x,referenceImages:e.length>0?e:void 0,selection:r,knowledgeContextRefs:_.length>0?_:void 0},createdAt:Date.now()}}function Ae(t,e=[]){const{generationType:o,modelId:n,modelRef:a,isModelExplicit:l,prompt:s,userInstruction:g,rawInput:m,count:c,size:p,duration:x,extraParams:u,selection:r,defaultModels:d,defaultModelRefs:h,knowledgeContextRefs:M}=t,_=ee(M),i=Y(),v={userInstruction:g,rawInput:m,model:{id:n,type:o==="agent"?"text":o,isExplicit:l},params:{count:c,size:p,duration:x,...u},defaultModels:d,defaultModelRefs:h,selection:r,finalPrompt:s,knowledgeContextRefs:_.length>0?_:void 0},w=[...r.images||[],...r.graphics||[]];let k=he();w.length>0&&(k+=X(w.length,r.imageDimensions));const I=le(v),W=[{role:"system",content:k},{role:"user",content:I}],b=[{id:`${i}-step-analyze`,mcp:"ai_analyze",args:{context:v,messages:W,referenceImages:w.length>0?w:void 0,textModel:n,modelRef:a,knowledgeContextRefs:_.length>0?_:void 0},options:{mode:"async"},description:"AI 分析用户意图",status:"pending"}];return{id:i,name:"AI 智能生成",description:"AI 分析用户请求并执行相应操作",scenarioType:"agent_flow",generationType:o,steps:b,metadata:{prompt:s,userInstruction:g,rawInput:m,modelId:n,modelRef:a,isModelExplicit:l,count:c,size:p,duration:x,defaultModels:d,defaultModelRefs:h,referenceImages:e.length>0?e:void 0,selection:r,knowledgeContextRefs:_.length>0?_:void 0},createdAt:Date.now()}}function Ee(t){const e=[];for(const o of t){const n=H.getTool(o);if(!n)continue;const a=n.inputSchema.properties||{},l=n.inputSchema.required||[],s=n.promptGuidance,g=Object.entries(a).map(([c,p])=>{var _;const u=l.includes(c)?"(必填)":"(可选)",r=[];p.type&&r.push(`类型: ${p.type}`),p.enum&&Array.isArray(p.enum)&&r.push(`可选值: ${p.enum.map(i=>`"${i}"`).join(" | ")}`),p.default!==void 0&&r.push(`默认: "${p.default}"`);const d=r.length>0?` [${r.join(", ")}]`:"",h=(_=s==null?void 0:s.parameterGuidance)==null?void 0:_[c],M=h?`
5
5
  💡 ${h}`:"";return` - **${c}**${u}: ${p.description||"无描述"}${d}${M}`}).join(`
@@ -41,4 +41,4 @@ ${O}`),f.length>0&&(j+=X(f.length,d.imageDimensions)),j+=`
41
41
  请基于以上 Skill 指令构建详细的图片描述 prompt,并使用以下 JSON 格式回复以调用图片生成工具:
42
42
  {"content": "你的分析", "next": [{"mcp": "generate_image", "args": {"prompt": "你构建的完整 prompt"}}]}
43
43
 
44
- 你必须实际调用 generate_image 工具生成图片,不要仅输出文字描述。`);const G=[{role:"system",content:U},{role:"user",content:W}],pe=[{id:`${v}-step-analyze`,mcp:"ai_analyze",args:{context:R,messages:G,referenceImages:f.length>0?f:void 0,textModel:s,modelRef:l,knowledgeContextRefs:i.length>0?i:void 0},options:{mode:"async"},description:`AI 以「${k}」角色回复`,status:"pending"}];return{id:v,name:k,description:`使用「${k}」Skill 生成内容`,scenarioType:"skill_flow",skillId:w,generationType:a,steps:pe,metadata:{prompt:m,userInstruction:c,rawInput:p,modelId:s,modelRef:l,defaultModels:h,defaultModelRefs:M,isModelExplicit:g,count:x,size:u,duration:r,referenceImages:o.length>0?o:void 0,selection:d,knowledgeContextRefs:i.length>0?i:void 0,parseMethod:"agent_fallback"},createdAt:Date.now()}}function $e(t,e=[]){return t.scenario==="direct_generation"?Me(t,e):Ae(t,e)}function De(t,e=0){try{let o=oe(t);if(!o){const l=ke(t),s=l.indexOf("{"),g=l.lastIndexOf("}");s>=0&&g>s&&(o=oe(l.slice(s,g+1)))}if(!o)return{content:"",steps:[]};const n=typeof o.content=="string"?o.content:"";if(!Array.isArray(o.next)||o.next.length===0)return{content:n,steps:[]};const a=o.next.filter(l=>typeof l.mcp=="string"&&typeof l.args=="object").map((l,s)=>({id:`step-${e+s+1}`,mcp:l.mcp,args:l.args,description:Pe(l.mcp,l.args),status:"pending"}));return{content:n,steps:a}}catch{return{content:"",steps:[]}}}function Pe(t,e){var o,n,a,l;switch(t){case"generate_image":return`生成图片: ${((o=e.prompt)==null?void 0:o.substring(0,30))||""}...`;case"generate_video":return`生成视频: ${((n=e.prompt)==null?void 0:n.substring(0,30))||""}...`;case"generate_audio":return`生成音频: ${((a=e.prompt)==null?void 0:a.substring(0,30))||""}...`;case"generate_text":return`生成文本: ${((l=e.prompt)==null?void 0:l.substring(0,30))||""}...`;case"ai_analyze":return"AI 分析用户意图";case"format_markdown":return"格式化输出";case"show_result":return"展示结果";default:return`执行 ${t}`}}function Fe(t,e,o,n,a,l){return{...t,steps:t.steps.map(s=>s.id===e?{...s,status:o,result:n!==void 0?n:s.result,error:a,duration:l}:s)}}function ze(t,e){const o=new Set(t.steps.map(a=>a.id)),n=e.filter(a=>!o.has(a.id));return n.length===0?t:{...t,steps:[...t.steps,...n]}}function B(t){const e=t.steps.filter(s=>s.status==="completed").length,o=t.steps.filter(s=>s.status==="failed").length,n=t.steps.find(s=>s.status==="running"),a=t.steps.filter(s=>s.status==="pending").length;let l;return o>0?l="failed":n?l="running":a===0&&e>0?l="completed":l="pending",{status:l,completedSteps:e,totalSteps:t.steps.length,currentStep:n||t.steps.find(s=>s.status==="pending")}}const ae={workflow:null,status:"idle",currentStep:null,completedSteps:0,totalSteps:0,error:null};function Oe(){const[t,e]=y.useState(ae),o=y.useRef(null),n=y.useRef(!1),a=y.useCallback(r=>{o.current=r,n.current=!1;const d=B(r);e({workflow:r,status:"running",currentStep:d.currentStep||null,completedSteps:d.completedSteps,totalSteps:d.totalSteps,error:null})},[]),l=y.useCallback(r=>{o.current=r,n.current=!1;const d=B(r);let h="running";r.status==="completed"?h="completed":(r.status==="failed"||r.status==="cancelled")&&(h="failed"),e({workflow:r,status:h,currentStep:d.currentStep||null,completedSteps:d.completedSteps,totalSteps:d.totalSteps,error:r.error||null})},[]),s=y.useCallback((r,d,h,M,_)=>{if(n.current)return;const i=o.current;if(!i)return;const v=Fe(i,r,d,h,M,_);o.current=v,e(w=>{const k=B(v);let I="running";return k.status==="completed"?I="completed":k.status==="failed"&&(I="failed"),{...w,workflow:v,status:I,currentStep:k.currentStep||null,completedSteps:k.completedSteps,totalSteps:k.totalSteps,error:M||w.error}})},[]),g=y.useCallback(r=>{if(n.current||r.length===0)return;const d=o.current;if(!d)return;const h=ze(d,r);o.current=h,e(M=>{const _=B(h);return{...M,workflow:h,currentStep:_.currentStep||M.currentStep,totalSteps:_.totalSteps}})},[]),m=y.useCallback(r=>{const d=o.current;if(!d||n.current)return{content:"",steps:[]};const h=d.steps.length,{content:M,steps:_}=De(r,h);return M&&!d.aiAnalysis&&(o.current={...d,aiAnalysis:M}),_.length>0&&g(_),{content:M,steps:_}},[g]),c=y.useCallback(()=>{o.current=null,n.current=!1,e(ae)},[]),p=y.useCallback(()=>{n.current=!0,e(r=>({...r,status:"failed",error:"工作流已中止"}))},[]),x=y.useCallback(()=>{n.current=!1,e(r=>({...r,status:"running",error:null}))},[]),u=y.useCallback(()=>o.current,[]);return{state:t,startWorkflow:a,restoreWorkflow:l,updateStep:s,addSteps:g,addStepsFromAIResponse:m,resetWorkflow:c,abortWorkflow:p,resumeWorkflow:x,getWorkflow:u}}const de=y.createContext(null),st=({children:t})=>{const e=Oe(),o=y.useMemo(()=>({state:e.state,startWorkflow:e.startWorkflow,restoreWorkflow:e.restoreWorkflow,updateStep:e.updateStep,addSteps:e.addSteps,addStepsFromAIResponse:e.addStepsFromAIResponse,resetWorkflow:e.resetWorkflow,abortWorkflow:e.abortWorkflow,resumeWorkflow:e.resumeWorkflow,getWorkflow:e.getWorkflow}),[e.state,e.startWorkflow,e.restoreWorkflow,e.updateStep,e.addSteps,e.addStepsFromAIResponse,e.resetWorkflow,e.abortWorkflow,e.resumeWorkflow,e.getWorkflow]);return We.jsx(de.Provider,{value:o,children:t})};function Ne(){const t=y.useContext(de);if(!t)throw new Error("useWorkflowContext must be used within a WorkflowProvider");return t}function Le(){const t=Ne();return{startWorkflow:t.startWorkflow,restoreWorkflow:t.restoreWorkflow,updateStep:t.updateStep,addSteps:t.addSteps,addStepsFromAIResponse:t.addStepsFromAIResponse,resetWorkflow:t.resetWorkflow,abortWorkflow:t.abortWorkflow,resumeWorkflow:t.resumeWorkflow,getWorkflow:t.getWorkflow}}function P(t,e,o,n){var l;const a=t.metadata||{};return{id:t.id,name:t.name,generationType:t.generationType,prompt:a.prompt||((l=e==null?void 0:e.aiContext)==null?void 0:l.finalPrompt)||"",aiAnalysis:t.aiAnalysis,count:a.count,createdAt:t.createdAt,steps:t.steps.map(s=>({id:s.id,description:s.description,status:s.status,mcp:s.mcp,args:s.args,result:s.result,error:s.error,duration:s.duration,options:s.options})),retryContext:e,postProcessingStatus:o,insertedCount:n}}const Ue=20,ie=2e3,je=3e4;function Ze(t){return t.steps.length>0&&t.steps.every(e=>e.status==="completed")}function fe(t){var e;return t.status===K.PROCESSING?{status:"running",result:{taskId:t.id}}:t.status===K.COMPLETED&&t.result?{status:"completed",result:typeof t.result=="object"&&t.result!==null?{...t.result,taskId:t.id}:{result:t.result,taskId:t.id}}:t.status===K.FAILED?{status:"failed",error:typeof t.error=="string"?t.error:((e=t.error)==null?void 0:e.message)||"Task failed"}:null}function Ve(t,e,o,n,a,l){const s=o.getWorkflow(),g=ce(s,t);if(!g)return!1;const m=t.type!==ue.IMAGE&&(s==null?void 0:s.generationType)!=="image";e.status==="running"&&o.resumeWorkflow(),o.updateStep(g.id,e.status,e.result,e.error);const c=o.getWorkflow();if(c){const p=P(c,void 0,c.generationType==="image"&&Ze(c)?"completed":void 0);n.current(p);const x=a.current,u=l.current;m&&x&&u&&$.updateWorkflow(x,u,p)}return!0}function Ge(t,e,o,n,a,l){const s=a.current;if(!s||t.type===ue.IMAGE)return!1;for(const g of s.children){if(!Re(g))continue;const m=g;if(m.workflow.generationType==="image")continue;const c=ce(m.workflow,t);if(!c)continue;const p=m.workflow.steps.map(u=>u.id!==c.id?u:{...u,status:e.status,...e.result!==void 0&&{result:e.result},...e.error!==void 0&&{error:e.error}}),x={...m.workflow,steps:p};if(e.status==="running"&&delete x.error,$.updateWorkflow(s,m.id,x),l.current=m.id,n.current(x),o.restoreWorkflow){const u={id:x.id,name:x.name||"",description:"",scenarioType:"direct_generation",generationType:x.generationType,status:e.status==="running"?"running":"failed",steps:p.map(r=>({id:r.id,mcp:r.mcp||"",args:r.args||{},description:r.description||"",status:r.status,result:r.result,error:r.error,duration:r.duration,options:r.options})),createdAt:x.createdAt||Date.now(),metadata:{prompt:x.prompt||"",userInstruction:"",rawInput:"",modelId:"",isModelExplicit:!1,count:x.count||1,selection:{texts:[],images:[],videos:[],graphics:[]}},aiAnalysis:x.aiAnalysis};o.restoreWorkflow(u)}return!0}return!1}function J(t,e,o,n,a,l){var m;const s=t.task,g=fe(s);return g?Ve(s,g,e,o,a,l)||Ge(s,g,e,o,a,l)?!0:((m=n.current)==null?void 0:m.call(n,s))??!1:!1}function Be(t){const{workflowControl:e,boardRef:o,workZoneIdRef:n}=t,a=y.useRef(t.updateWorkflowMessage);y.useEffect(()=>{a.current=t.updateWorkflowMessage},[t.updateWorkflowMessage]);const l=y.useRef(t.syncWorkflowTaskUpdate);y.useEffect(()=>{l.current=t.syncWorkflowTaskUpdate},[t.syncWorkflowTaskUpdate]);const s=y.useRef(new Map),g=y.useRef(null),m=y.useRef(0),c=y.useRef(!1);y.useEffect(()=>{const p=r=>{const d=s.current;if(!d.has(r.task.id)&&d.size>=Ue){const h=d.keys().next().value;h&&d.delete(h)}d.set(r.task.id,r)},x=()=>{const r=new Map;for(const[d,h]of s.current.entries())J(h,e,a,l,o,n)||r.set(d,h);s.current=r,(r.size===0||Date.now()-m.current>je)&&(g.current&&(clearInterval(g.current),g.current=null),s.current=new Map)};if(!c.current){c.current=!0;const r=ne.getAllTasks();for(const d of r){const h=fe(d);h&&(h.status==="completed"||h.status==="failed")&&J({task:d},e,a,l,o,n)}}const u=ne.observeTaskUpdates().subscribe(r=>{if(r.type!=="taskUpdated")return;if(r.task.status===K.PROCESSING&&s.current.has(r.task.id)){p(r),g.current||(m.current=Date.now(),g.current=setInterval(x,ie));return}J(r,e,a,l,o,n)?s.current.delete(r.task.id):(p(r),g.current||(m.current=Date.now(),g.current=setInterval(x,ie)))});return()=>{u.unsubscribe(),g.current&&(clearInterval(g.current),g.current=null),s.current=new Map}},[e,o,n])}let q=null;const Ke=new Promise(t=>{q=t});async function qe(t,e){const{operation:o,params:n}=e;try{const{insertImageFromUrl:a}=await Z(async()=>{const{insertImageFromUrl:c}=await import("./ai-chat-B-XdoWBQ.js").then(p=>p.sR);return{insertImageFromUrl:c}},__vite__mapDeps([0]),import.meta.url),{insertVideoFromUrl:l}=await Z(async()=>{const{insertVideoFromUrl:c}=await import("./ai-chat-B-XdoWBQ.js").then(p=>p.sS);return{insertVideoFromUrl:c}},__vite__mapDeps([0]),import.meta.url),{insertAudioFromUrl:s}=await Z(async()=>{const{insertAudioFromUrl:c}=await import("./ai-chat-B-XdoWBQ.js").then(p=>p.sT);return{insertAudioFromUrl:c}},__vite__mapDeps([0]),import.meta.url),{getSmartInsertionPoint:g}=await Z(async()=>{const{getSmartInsertionPoint:c}=await import("./ai-chat-B-XdoWBQ.js").then(p=>p.sQ);return{getSmartInsertionPoint:c}},__vite__mapDeps([0]),import.meta.url),m=n.position?[n.position.x,n.position.y]:g(t)||[100,100];if(o==="canvas_insert"&&n.items)for(const c of n.items)c.type==="image"&&c.url?await a(t,c.url,m,!1,void 0,void 0,void 0,void 0,!0):c.type==="video"&&c.url?await l(t,c.url,m):c.type==="audio"&&c.url&&await s(t,c.url,c,m);else o==="insert_image"&&n.url?await a(t,n.url,m,!1,void 0,void 0,void 0,void 0,!0):o==="insert_video"&&n.url?await l(t,n.url,m):o==="insert_audio"&&n.url&&await s(t,n.url,n,m)}catch(a){console.error("[useWorkflowSubmission] Failed to insert to canvas:",a)}}function He(t){const{boardRef:e,workZoneIdRef:o}=t,n=Le(),a=xe(),l=y.useRef(a.sendWorkflowMessage),s=y.useRef(a.updateWorkflowMessage);y.useEffect(()=>{l.current=a.sendWorkflowMessage,s.current=a.updateWorkflowMessage},[a.sendWorkflowMessage,a.updateWorkflowMessage]),Be({workflowControl:n,updateWorkflowMessage:a.updateWorkflowMessage,syncWorkflowTaskUpdate:a.syncWorkflowTaskUpdate,boardRef:e,workZoneIdRef:o});const g=y.useRef(null),m=y.useRef([]),c=y.useRef(!1),p=y.useRef(null),x=y.useCallback(i=>i!=="image",[]),u=y.useCallback(async()=>{if(!c.current){c.current=!0;try{await N.recoverWorkflows()}catch(i){console.warn("[useWorkflowSubmission] Failed to recover workflows:",i)}finally{q==null||q()}}},[]);y.useEffect(()=>{N.init(),N.registerCanvasHandler(async(v,w)=>({success:!0}));const i=N.subscribeToAllEvents(v=>{var w,k,I,W,b,T,f,R,C;if(v.type==="recovered"&&v.workflow){const S=v.workflow,z=S.status==="running"||S.status==="pending",E=S.status==="failed"&&S.updatedAt&&Date.now()-S.updatedAt<300*1e3;if(!z&&!E)return;(w=n.restoreWorkflow)==null||w.call(n,S);const A=se.get(),F={aiContext:{rawInput:((k=S.context)==null?void 0:k.userInput)||"",userInstruction:((I=S.context)==null?void 0:I.userInput)||"",model:{id:((W=S.context)==null?void 0:W.model)||"",type:S.generationType==="video"?"video":S.generationType==="audio"?"audio":"image",isExplicit:!0},defaultModels:{image:A.imageModelName||"gemini-3-pro-image-preview-vip",video:A.videoModelName||"veo3.1",audio:A.audioModelName||"suno_music"},defaultModelRefs:void 0,params:{count:(b=S.metadata)==null?void 0:b.count,size:(T=S.metadata)==null?void 0:T.size,duration:(f=S.metadata)==null?void 0:f.duration},selection:{texts:[],images:[],videos:[],graphics:[]},finalPrompt:((R=S.metadata)==null?void 0:R.prompt)||""},referenceImages:((C=S.context)==null?void 0:C.referenceImages)||[],textModel:A.textModelName},Q=P(S,F);s.current(Q);const D=e.current,L=o.current;x(S.generationType)&&L&&D&&$.updateWorkflow(D,L,Q);const U=N.subscribeToWorkflow(S.id,async te=>{var G;await((G=p.current)==null?void 0:G.call(p,te,S,F))});m.current.push(U)}});return m.current.push(i),u(),()=>{m.current.forEach(v=>v.unsubscribe()),m.current=[]}},[]);const r=y.useCallback(async(i,v,w)=>{const k=e.current,I=o.current,W=x(v.generationType);switch(i.type){case"step":{n.updateStep(i.stepId,i.status,i.result,i.error,i.duration);const b=n.getWorkflow();if(b){const T=P(b,w);s.current(T),W&&I&&k&&$.updateWorkflow(k,I,T)}break}case"completed":{const b=n.getWorkflow();let T=!1;b&&b.steps.forEach(R=>{const C=R.result,S=C==null?void 0:C.taskId;S&&(T=!0),(R.status==="running"||R.status==="pending")&&!S&&n.updateStep(R.id,"completed")});const f=n.getWorkflow();if(f){const R=P(f,w);if(s.current(R),W&&I&&k){if($.updateWorkflow(k,I,R),f.steps.some(S=>S.status==="pending"||S.status==="running"))break;if(!T)setTimeout(()=>{$.removeWorkZone(k,I)},1500);else{const{workflowCompletionService:S}=await Z(async()=>{const{workflowCompletionService:E}=await import("./tool-windows-BnDZa9FH.js").then(A=>A.b1);return{workflowCompletionService:E}},__vite__mapDeps([0,1]),import.meta.url);f.steps.every(E=>{const A=E.result;return A!=null&&A.taskId?S.isPostProcessingCompleted(A.taskId):!0})&&setTimeout(()=>{$.removeWorkZone(k,I)},1500)}}}break}case"failed":{n.abortWorkflow();const b=n.getWorkflow();if(b){const T=P(b,w);s.current(T),W&&I&&k&&$.updateWorkflow(k,I,T)}break}case"steps_added":{const b=i;n.addSteps(b.steps.map(f=>({id:f.id,mcp:f.mcp,args:f.args,description:f.description,status:f.status})));const T=n.getWorkflow();if(T){const f=P(T,w);s.current(f),W&&I&&k&&$.updateWorkflow(k,I,f)}break}case"canvas_insert":{k&&qe(k,i);break}}},[n,e,o,x]);y.useEffect(()=>{p.current=r},[r]);const d=y.useCallback(async(i,v,w,k,I)=>{var C,S,z;const W=k||$e(i,v);n.startWorkflow(W);const b=se.get(),T=b.textModelName,f=w||{aiContext:{rawInput:i.rawInput||i.userInstruction,userInstruction:i.userInstruction,model:{id:i.modelId,type:i.generationType,isExplicit:i.isModelExplicit},modelRef:i.modelRef,defaultModels:{image:((C=i.defaultModels)==null?void 0:C.image)||b.imageModelName||"gemini-3-pro-image-preview-vip",video:((S=i.defaultModels)==null?void 0:S.video)||b.videoModelName||"veo3.1",audio:((z=i.defaultModels)==null?void 0:z.audio)||b.audioModelName||"suno_music"},defaultModelRefs:i.defaultModelRefs,params:{count:i.count,size:i.size,duration:i.duration},selection:i.selection||{texts:[],images:[],videos:[],graphics:[]},finalPrompt:i.prompt,knowledgeContextRefs:i.knowledgeContextRefs},referenceImages:v,textModel:T};g.current=f;const R=P(W,f);return await l.current({context:f.aiContext,workflow:R,textModel:T,autoOpen:!1,appendToCurrentSession:I==null?void 0:I.appendToCurrentChatSession}),{workflowId:W.id,usedSW:!1}},[n]),h=y.useCallback(async i=>{await N.cancel(i),n.abortWorkflow()},[n]),M=y.useCallback(async(i,v)=>{const w=i.retryContext;if(!w){console.error("[useWorkflowSubmission] No retry context available");return}const k={prompt:i.prompt,userInstruction:w.aiContext.userInstruction,rawInput:w.aiContext.rawInput,modelId:w.aiContext.model.id,modelRef:w.aiContext.modelRef,defaultModels:w.aiContext.defaultModels,defaultModelRefs:w.aiContext.defaultModelRefs,isModelExplicit:w.aiContext.model.isExplicit,generationType:w.aiContext.model.type,count:i.count||1,size:w.aiContext.params.size,duration:w.aiContext.params.duration,scenario:w.aiContext.model.type==="agent"?"agent_flow":"direct_generation",selection:w.aiContext.selection,parseResult:{},hasExtraContent:!1};await d(k,w.referenceImages||[],w)},[d]),_=y.useCallback(()=>g.current,[]);return{submitWorkflow:d,cancelWorkflow:h,retryWorkflow:M,getRetryContext:_}}const rt=Object.freeze(Object.defineProperty({__proto__:null,toWorkflowMessageData:P,useWorkflowSubmission:He,workflowRecoveryPromise:Ke},Symbol.toStringTag,{value:"Module"}));export{st as W,He as a,$e as b,nt as c,rt as d,Le as u};
44
+ 你必须实际调用 generate_image 工具生成图片,不要仅输出文字描述。`);const G=[{role:"system",content:U},{role:"user",content:W}],pe=[{id:`${v}-step-analyze`,mcp:"ai_analyze",args:{context:R,messages:G,referenceImages:f.length>0?f:void 0,textModel:s,modelRef:l,knowledgeContextRefs:i.length>0?i:void 0},options:{mode:"async"},description:`AI 以「${k}」角色回复`,status:"pending"}];return{id:v,name:k,description:`使用「${k}」Skill 生成内容`,scenarioType:"skill_flow",skillId:w,generationType:a,steps:pe,metadata:{prompt:m,userInstruction:c,rawInput:p,modelId:s,modelRef:l,defaultModels:h,defaultModelRefs:M,isModelExplicit:g,count:x,size:u,duration:r,referenceImages:o.length>0?o:void 0,selection:d,knowledgeContextRefs:i.length>0?i:void 0,parseMethod:"agent_fallback"},createdAt:Date.now()}}function $e(t,e=[]){return t.scenario==="direct_generation"?Me(t,e):Ae(t,e)}function De(t,e=0){try{let o=oe(t);if(!o){const l=ke(t),s=l.indexOf("{"),g=l.lastIndexOf("}");s>=0&&g>s&&(o=oe(l.slice(s,g+1)))}if(!o)return{content:"",steps:[]};const n=typeof o.content=="string"?o.content:"";if(!Array.isArray(o.next)||o.next.length===0)return{content:n,steps:[]};const a=o.next.filter(l=>typeof l.mcp=="string"&&typeof l.args=="object").map((l,s)=>({id:`step-${e+s+1}`,mcp:l.mcp,args:l.args,description:Pe(l.mcp,l.args),status:"pending"}));return{content:n,steps:a}}catch{return{content:"",steps:[]}}}function Pe(t,e){var o,n,a,l;switch(t){case"generate_image":return`生成图片: ${((o=e.prompt)==null?void 0:o.substring(0,30))||""}...`;case"generate_video":return`生成视频: ${((n=e.prompt)==null?void 0:n.substring(0,30))||""}...`;case"generate_audio":return`生成音频: ${((a=e.prompt)==null?void 0:a.substring(0,30))||""}...`;case"generate_text":return`生成文本: ${((l=e.prompt)==null?void 0:l.substring(0,30))||""}...`;case"ai_analyze":return"AI 分析用户意图";case"format_markdown":return"格式化输出";case"show_result":return"展示结果";default:return`执行 ${t}`}}function Fe(t,e,o,n,a,l){return{...t,steps:t.steps.map(s=>s.id===e?{...s,status:o,result:n!==void 0?n:s.result,error:a,duration:l}:s)}}function ze(t,e){const o=new Set(t.steps.map(a=>a.id)),n=e.filter(a=>!o.has(a.id));return n.length===0?t:{...t,steps:[...t.steps,...n]}}function B(t){const e=t.steps.filter(s=>s.status==="completed").length,o=t.steps.filter(s=>s.status==="failed").length,n=t.steps.find(s=>s.status==="running"),a=t.steps.filter(s=>s.status==="pending").length;let l;return o>0?l="failed":n?l="running":a===0&&e>0?l="completed":l="pending",{status:l,completedSteps:e,totalSteps:t.steps.length,currentStep:n||t.steps.find(s=>s.status==="pending")}}const ae={workflow:null,status:"idle",currentStep:null,completedSteps:0,totalSteps:0,error:null};function Oe(){const[t,e]=y.useState(ae),o=y.useRef(null),n=y.useRef(!1),a=y.useCallback(r=>{o.current=r,n.current=!1;const d=B(r);e({workflow:r,status:"running",currentStep:d.currentStep||null,completedSteps:d.completedSteps,totalSteps:d.totalSteps,error:null})},[]),l=y.useCallback(r=>{o.current=r,n.current=!1;const d=B(r);let h="running";r.status==="completed"?h="completed":(r.status==="failed"||r.status==="cancelled")&&(h="failed"),e({workflow:r,status:h,currentStep:d.currentStep||null,completedSteps:d.completedSteps,totalSteps:d.totalSteps,error:r.error||null})},[]),s=y.useCallback((r,d,h,M,_)=>{if(n.current)return;const i=o.current;if(!i)return;const v=Fe(i,r,d,h,M,_);o.current=v,e(w=>{const k=B(v);let I="running";return k.status==="completed"?I="completed":k.status==="failed"&&(I="failed"),{...w,workflow:v,status:I,currentStep:k.currentStep||null,completedSteps:k.completedSteps,totalSteps:k.totalSteps,error:M||w.error}})},[]),g=y.useCallback(r=>{if(n.current||r.length===0)return;const d=o.current;if(!d)return;const h=ze(d,r);o.current=h,e(M=>{const _=B(h);return{...M,workflow:h,currentStep:_.currentStep||M.currentStep,totalSteps:_.totalSteps}})},[]),m=y.useCallback(r=>{const d=o.current;if(!d||n.current)return{content:"",steps:[]};const h=d.steps.length,{content:M,steps:_}=De(r,h);return M&&!d.aiAnalysis&&(o.current={...d,aiAnalysis:M}),_.length>0&&g(_),{content:M,steps:_}},[g]),c=y.useCallback(()=>{o.current=null,n.current=!1,e(ae)},[]),p=y.useCallback(()=>{n.current=!0,e(r=>({...r,status:"failed",error:"工作流已中止"}))},[]),x=y.useCallback(()=>{n.current=!1,e(r=>({...r,status:"running",error:null}))},[]),u=y.useCallback(()=>o.current,[]);return{state:t,startWorkflow:a,restoreWorkflow:l,updateStep:s,addSteps:g,addStepsFromAIResponse:m,resetWorkflow:c,abortWorkflow:p,resumeWorkflow:x,getWorkflow:u}}const de=y.createContext(null),st=({children:t})=>{const e=Oe(),o=y.useMemo(()=>({state:e.state,startWorkflow:e.startWorkflow,restoreWorkflow:e.restoreWorkflow,updateStep:e.updateStep,addSteps:e.addSteps,addStepsFromAIResponse:e.addStepsFromAIResponse,resetWorkflow:e.resetWorkflow,abortWorkflow:e.abortWorkflow,resumeWorkflow:e.resumeWorkflow,getWorkflow:e.getWorkflow}),[e.state,e.startWorkflow,e.restoreWorkflow,e.updateStep,e.addSteps,e.addStepsFromAIResponse,e.resetWorkflow,e.abortWorkflow,e.resumeWorkflow,e.getWorkflow]);return We.jsx(de.Provider,{value:o,children:t})};function Ne(){const t=y.useContext(de);if(!t)throw new Error("useWorkflowContext must be used within a WorkflowProvider");return t}function Le(){const t=Ne();return{startWorkflow:t.startWorkflow,restoreWorkflow:t.restoreWorkflow,updateStep:t.updateStep,addSteps:t.addSteps,addStepsFromAIResponse:t.addStepsFromAIResponse,resetWorkflow:t.resetWorkflow,abortWorkflow:t.abortWorkflow,resumeWorkflow:t.resumeWorkflow,getWorkflow:t.getWorkflow}}function P(t,e,o,n){var l;const a=t.metadata||{};return{id:t.id,name:t.name,generationType:t.generationType,prompt:a.prompt||((l=e==null?void 0:e.aiContext)==null?void 0:l.finalPrompt)||"",aiAnalysis:t.aiAnalysis,count:a.count,createdAt:t.createdAt,steps:t.steps.map(s=>({id:s.id,description:s.description,status:s.status,mcp:s.mcp,args:s.args,result:s.result,error:s.error,duration:s.duration,options:s.options})),retryContext:e,postProcessingStatus:o,insertedCount:n}}const Ue=20,ie=2e3,je=3e4;function Ze(t){return t.steps.length>0&&t.steps.every(e=>e.status==="completed")}function fe(t){var e;return t.status===K.PROCESSING?{status:"running",result:{taskId:t.id}}:t.status===K.COMPLETED&&t.result?{status:"completed",result:typeof t.result=="object"&&t.result!==null?{...t.result,taskId:t.id}:{result:t.result,taskId:t.id}}:t.status===K.FAILED?{status:"failed",error:typeof t.error=="string"?t.error:((e=t.error)==null?void 0:e.message)||"Task failed"}:null}function Ve(t,e,o,n,a,l){const s=o.getWorkflow(),g=ce(s,t);if(!g)return!1;const m=t.type!==ue.IMAGE&&(s==null?void 0:s.generationType)!=="image";e.status==="running"&&o.resumeWorkflow(),o.updateStep(g.id,e.status,e.result,e.error);const c=o.getWorkflow();if(c){const p=P(c,void 0,c.generationType==="image"&&Ze(c)?"completed":void 0);n.current(p);const x=a.current,u=l.current;m&&x&&u&&$.updateWorkflow(x,u,p)}return!0}function Ge(t,e,o,n,a,l){const s=a.current;if(!s||t.type===ue.IMAGE)return!1;for(const g of s.children){if(!Re(g))continue;const m=g;if(m.workflow.generationType==="image")continue;const c=ce(m.workflow,t);if(!c)continue;const p=m.workflow.steps.map(u=>u.id!==c.id?u:{...u,status:e.status,...e.result!==void 0&&{result:e.result},...e.error!==void 0&&{error:e.error}}),x={...m.workflow,steps:p};if(e.status==="running"&&delete x.error,$.updateWorkflow(s,m.id,x),l.current=m.id,n.current(x),o.restoreWorkflow){const u={id:x.id,name:x.name||"",description:"",scenarioType:"direct_generation",generationType:x.generationType,status:e.status==="running"?"running":"failed",steps:p.map(r=>({id:r.id,mcp:r.mcp||"",args:r.args||{},description:r.description||"",status:r.status,result:r.result,error:r.error,duration:r.duration,options:r.options})),createdAt:x.createdAt||Date.now(),metadata:{prompt:x.prompt||"",userInstruction:"",rawInput:"",modelId:"",isModelExplicit:!1,count:x.count||1,selection:{texts:[],images:[],videos:[],graphics:[]}},aiAnalysis:x.aiAnalysis};o.restoreWorkflow(u)}return!0}return!1}function Q(t,e,o,n,a,l){var m;const s=t.task,g=fe(s);return g?Ve(s,g,e,o,a,l)||Ge(s,g,e,o,a,l)?!0:((m=n.current)==null?void 0:m.call(n,s))??!1:!1}function Be(t){const{workflowControl:e,boardRef:o,workZoneIdRef:n}=t,a=y.useRef(t.updateWorkflowMessage);y.useEffect(()=>{a.current=t.updateWorkflowMessage},[t.updateWorkflowMessage]);const l=y.useRef(t.syncWorkflowTaskUpdate);y.useEffect(()=>{l.current=t.syncWorkflowTaskUpdate},[t.syncWorkflowTaskUpdate]);const s=y.useRef(new Map),g=y.useRef(null),m=y.useRef(0),c=y.useRef(!1);y.useEffect(()=>{const p=r=>{const d=s.current;if(!d.has(r.task.id)&&d.size>=Ue){const h=d.keys().next().value;h&&d.delete(h)}d.set(r.task.id,r)},x=()=>{const r=new Map;for(const[d,h]of s.current.entries())Q(h,e,a,l,o,n)||r.set(d,h);s.current=r,(r.size===0||Date.now()-m.current>je)&&(g.current&&(clearInterval(g.current),g.current=null),s.current=new Map)};if(!c.current){c.current=!0;const r=ne.getAllTasks();for(const d of r){const h=fe(d);h&&(h.status==="completed"||h.status==="failed")&&Q({task:d},e,a,l,o,n)}}const u=ne.observeTaskUpdates().subscribe(r=>{if(r.type!=="taskUpdated")return;if(r.task.status===K.PROCESSING&&s.current.has(r.task.id)){p(r),g.current||(m.current=Date.now(),g.current=setInterval(x,ie));return}Q(r,e,a,l,o,n)?s.current.delete(r.task.id):(p(r),g.current||(m.current=Date.now(),g.current=setInterval(x,ie)))});return()=>{u.unsubscribe(),g.current&&(clearInterval(g.current),g.current=null),s.current=new Map}},[e,o,n])}let q=null;const Ke=new Promise(t=>{q=t});async function qe(t,e){const{operation:o,params:n}=e;try{const{insertImageFromUrl:a}=await Z(async()=>{const{insertImageFromUrl:c}=await import("./ai-chat-BnWVpTEI.js").then(p=>p.sS);return{insertImageFromUrl:c}},__vite__mapDeps([0]),import.meta.url),{insertVideoFromUrl:l}=await Z(async()=>{const{insertVideoFromUrl:c}=await import("./ai-chat-BnWVpTEI.js").then(p=>p.sT);return{insertVideoFromUrl:c}},__vite__mapDeps([0]),import.meta.url),{insertAudioFromUrl:s}=await Z(async()=>{const{insertAudioFromUrl:c}=await import("./ai-chat-BnWVpTEI.js").then(p=>p.sU);return{insertAudioFromUrl:c}},__vite__mapDeps([0]),import.meta.url),{getSmartInsertionPoint:g}=await Z(async()=>{const{getSmartInsertionPoint:c}=await import("./ai-chat-BnWVpTEI.js").then(p=>p.sR);return{getSmartInsertionPoint:c}},__vite__mapDeps([0]),import.meta.url),m=n.position?[n.position.x,n.position.y]:g(t)||[100,100];if(o==="canvas_insert"&&n.items)for(const c of n.items)c.type==="image"&&c.url?await a(t,c.url,m,!1,void 0,void 0,void 0,void 0,!0):c.type==="video"&&c.url?await l(t,c.url,m):c.type==="audio"&&c.url&&await s(t,c.url,c,m);else o==="insert_image"&&n.url?await a(t,n.url,m,!1,void 0,void 0,void 0,void 0,!0):o==="insert_video"&&n.url?await l(t,n.url,m):o==="insert_audio"&&n.url&&await s(t,n.url,n,m)}catch(a){console.error("[useWorkflowSubmission] Failed to insert to canvas:",a)}}function He(t){const{boardRef:e,workZoneIdRef:o}=t,n=Le(),a=xe(),l=y.useRef(a.sendWorkflowMessage),s=y.useRef(a.updateWorkflowMessage);y.useEffect(()=>{l.current=a.sendWorkflowMessage,s.current=a.updateWorkflowMessage},[a.sendWorkflowMessage,a.updateWorkflowMessage]),Be({workflowControl:n,updateWorkflowMessage:a.updateWorkflowMessage,syncWorkflowTaskUpdate:a.syncWorkflowTaskUpdate,boardRef:e,workZoneIdRef:o});const g=y.useRef(null),m=y.useRef([]),c=y.useRef(!1),p=y.useRef(null),x=y.useCallback(i=>i!=="image",[]),u=y.useCallback(async()=>{if(!c.current){c.current=!0;try{await N.recoverWorkflows()}catch(i){console.warn("[useWorkflowSubmission] Failed to recover workflows:",i)}finally{q==null||q()}}},[]);y.useEffect(()=>{N.init(),N.registerCanvasHandler(async(v,w)=>({success:!0}));const i=N.subscribeToAllEvents(v=>{var w,k,I,W,b,T,f,R,C;if(v.type==="recovered"&&v.workflow){const S=v.workflow,z=S.status==="running"||S.status==="pending",E=S.status==="failed"&&S.updatedAt&&Date.now()-S.updatedAt<300*1e3;if(!z&&!E)return;(w=n.restoreWorkflow)==null||w.call(n,S);const A=se.get(),F={aiContext:{rawInput:((k=S.context)==null?void 0:k.userInput)||"",userInstruction:((I=S.context)==null?void 0:I.userInput)||"",model:{id:((W=S.context)==null?void 0:W.model)||"",type:S.generationType==="video"?"video":S.generationType==="audio"?"audio":"image",isExplicit:!0},defaultModels:{image:A.imageModelName||"gemini-3-pro-image-preview-vip",video:A.videoModelName||"veo3.1",audio:A.audioModelName||"suno_music"},defaultModelRefs:void 0,params:{count:(b=S.metadata)==null?void 0:b.count,size:(T=S.metadata)==null?void 0:T.size,duration:(f=S.metadata)==null?void 0:f.duration},selection:{texts:[],images:[],videos:[],graphics:[]},finalPrompt:((R=S.metadata)==null?void 0:R.prompt)||""},referenceImages:((C=S.context)==null?void 0:C.referenceImages)||[],textModel:A.textModelName},J=P(S,F);s.current(J);const D=e.current,L=o.current;x(S.generationType)&&L&&D&&$.updateWorkflow(D,L,J);const U=N.subscribeToWorkflow(S.id,async te=>{var G;await((G=p.current)==null?void 0:G.call(p,te,S,F))});m.current.push(U)}});return m.current.push(i),u(),()=>{m.current.forEach(v=>v.unsubscribe()),m.current=[]}},[]);const r=y.useCallback(async(i,v,w)=>{const k=e.current,I=o.current,W=x(v.generationType);switch(i.type){case"step":{n.updateStep(i.stepId,i.status,i.result,i.error,i.duration);const b=n.getWorkflow();if(b){const T=P(b,w);s.current(T),W&&I&&k&&$.updateWorkflow(k,I,T)}break}case"completed":{const b=n.getWorkflow();let T=!1;b&&b.steps.forEach(R=>{const C=R.result,S=C==null?void 0:C.taskId;S&&(T=!0),(R.status==="running"||R.status==="pending")&&!S&&n.updateStep(R.id,"completed")});const f=n.getWorkflow();if(f){const R=P(f,w);if(s.current(R),W&&I&&k){if($.updateWorkflow(k,I,R),f.steps.some(S=>S.status==="pending"||S.status==="running"))break;if(!T)setTimeout(()=>{$.removeWorkZone(k,I)},1500);else{const{workflowCompletionService:S}=await Z(async()=>{const{workflowCompletionService:E}=await import("./tool-windows-Bf_pMml-.js").then(A=>A.b1);return{workflowCompletionService:E}},__vite__mapDeps([0,1]),import.meta.url);f.steps.every(E=>{const A=E.result;return A!=null&&A.taskId?S.isPostProcessingCompleted(A.taskId):!0})&&setTimeout(()=>{$.removeWorkZone(k,I)},1500)}}}break}case"failed":{n.abortWorkflow();const b=n.getWorkflow();if(b){const T=P(b,w);s.current(T),W&&I&&k&&$.updateWorkflow(k,I,T)}break}case"steps_added":{const b=i;n.addSteps(b.steps.map(f=>({id:f.id,mcp:f.mcp,args:f.args,description:f.description,status:f.status})));const T=n.getWorkflow();if(T){const f=P(T,w);s.current(f),W&&I&&k&&$.updateWorkflow(k,I,f)}break}case"canvas_insert":{k&&qe(k,i);break}}},[n,e,o,x]);y.useEffect(()=>{p.current=r},[r]);const d=y.useCallback(async(i,v,w,k,I)=>{var C,S,z;const W=k||$e(i,v);n.startWorkflow(W);const b=se.get(),T=b.textModelName,f=w||{aiContext:{rawInput:i.rawInput||i.userInstruction,userInstruction:i.userInstruction,model:{id:i.modelId,type:i.generationType,isExplicit:i.isModelExplicit},modelRef:i.modelRef,defaultModels:{image:((C=i.defaultModels)==null?void 0:C.image)||b.imageModelName||"gemini-3-pro-image-preview-vip",video:((S=i.defaultModels)==null?void 0:S.video)||b.videoModelName||"veo3.1",audio:((z=i.defaultModels)==null?void 0:z.audio)||b.audioModelName||"suno_music"},defaultModelRefs:i.defaultModelRefs,params:{count:i.count,size:i.size,duration:i.duration},selection:i.selection||{texts:[],images:[],videos:[],graphics:[]},finalPrompt:i.prompt,knowledgeContextRefs:i.knowledgeContextRefs},referenceImages:v,textModel:T};g.current=f;const R=P(W,f);return await l.current({context:f.aiContext,workflow:R,textModel:T,autoOpen:!1,appendToCurrentSession:I==null?void 0:I.appendToCurrentChatSession}),{workflowId:W.id,usedSW:!1}},[n]),h=y.useCallback(async i=>{await N.cancel(i),n.abortWorkflow()},[n]),M=y.useCallback(async(i,v)=>{const w=i.retryContext;if(!w){console.error("[useWorkflowSubmission] No retry context available");return}const k={prompt:i.prompt,userInstruction:w.aiContext.userInstruction,rawInput:w.aiContext.rawInput,modelId:w.aiContext.model.id,modelRef:w.aiContext.modelRef,defaultModels:w.aiContext.defaultModels,defaultModelRefs:w.aiContext.defaultModelRefs,isModelExplicit:w.aiContext.model.isExplicit,generationType:w.aiContext.model.type,count:i.count||1,size:w.aiContext.params.size,duration:w.aiContext.params.duration,scenario:w.aiContext.model.type==="agent"?"agent_flow":"direct_generation",selection:w.aiContext.selection,parseResult:{},hasExtraContent:!1};await d(k,w.referenceImages||[],w)},[d]),_=y.useCallback(()=>g.current,[]);return{submitWorkflow:d,cancelWorkflow:h,retryWorkflow:M,getRetryContext:_}}const rt=Object.freeze(Object.defineProperty({__proto__:null,toWorkflowMessageData:P,useWorkflowSubmission:He,workflowRecoveryPromise:Ke},Symbol.toStringTag,{value:"Module"}));export{st as W,He as a,$e as b,nt as c,rt as d,Le as u};
@@ -1,3 +1,3 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ai-chat-DbjmzngX.css"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ai-chat-BlxYfB4O.css"])))=>i.map(i=>d[i]);
2
2
  import{_ as F}from"./startup-runtime-BrfuwjQS.js";function V(){if(typeof VideoDecoder>"u"||typeof VideoEncoder>"u")throw new Error(`当前浏览器不支持 WebCodecs API。
3
- 请使用 Chrome 94+ 或 Edge 94+ 浏览器。`)}function M(){const i=[{mimeType:"video/mp4;codecs=avc1",extension:"mp4"},{mimeType:"video/webm;codecs=vp9",extension:"webm"},{mimeType:"video/webm;codecs=vp8",extension:"webm"}];for(const e of i)if(MediaRecorder.isTypeSupported(e.mimeType))return e;return console.warn("[WebCodecs] No preferred format supported, using default"),{mimeType:"video/webm",extension:"webm"}}async function k(i,e,n){const d=document.createElement("canvas"),o=d.getContext("2d",{willReadFrequently:!1});if(!o)throw new Error("无法创建 Canvas 2D 上下文");const c=document.createElement("video");c.crossOrigin="anonymous",c.src=i[0],await new Promise((a,t)=>{c.onloadedmetadata=()=>a(),c.onerror=()=>t(new Error("无法加载第一个视频"))}),d.width=c.videoWidth,d.height=c.videoHeight;const b=M(),u=new AudioContext,E=u.createMediaStreamDestination(),$=d.captureStream(30),x=new MediaStream([...$.getVideoTracks(),...E.stream.getAudioTracks()]),p=new MediaRecorder(x,{mimeType:b.mimeType,videoBitsPerSecond:8e6,audioBitsPerSecond:128e3}),v=[];p.ondataavailable=a=>{a.data.size>0&&v.push(a.data)},p.start(),e==null||e(0,"encoding","开始录制视频...");const T=(n==null?void 0:n.transitions)||[],S=(n==null?void 0:n.transitionDuration)??.5;for(let a=0;a<i.length;a++){e==null||e(a/i.length*100,"encoding",`正在处理视频 ${a+1}/${i.length}...`);const t=document.createElement("video");t.crossOrigin="anonymous",t.src=i[a],t.volume=1,await new Promise((r,f)=>{t.onloadedmetadata=()=>r(),t.onerror=()=>f(new Error(`无法加载视频 ${a+1}`))});let m=null;try{m=u.createMediaElementSource(t),m.connect(E)}catch(r){console.warn(`[WebCodecs] Failed to connect audio from video ${a+1}:`,r)}const s=a<T.length?T[a]:"cut",y=s==="dissolve"||s==="fade_to_black";await new Promise(r=>{t.play().catch(w=>{console.warn(`[WebCodecs] Failed to play video ${a+1}:`,w)});const f=()=>{if(t.ended){r();return}let w=1;if(y&&t.duration>0){const R=t.duration-t.currentTime;R<S&&(w=Math.max(0,R/S))}s==="fade_to_black"&&w<1&&(o.fillStyle="#000",o.fillRect(0,0,d.width,d.height)),o.globalAlpha=w,o.drawImage(t,0,0,d.width,d.height),o.globalAlpha=1,requestAnimationFrame(f)};t.onended=()=>r(),f()}),m&&m.disconnect(),t.pause(),t.src="",t.load()}e==null||e(100,"finalizing","正在生成最终视频..."),await new Promise(a=>{p.onstop=()=>a(),p.stop()}),await u.close();const D=b.mimeType.split(";")[0],h=new Blob(v,{type:D}),_=i.length*8;try{const{unifiedCacheService:a}=await F(async()=>{const{unifiedCacheService:y}=await import("./ai-chat-B-XdoWBQ.js").then(r=>r.sJ);return{unifiedCacheService:y}},__vite__mapDeps([0]),import.meta.url),t=`merged-video-${Date.now()}`,m=`/__aitu_cache__/video/${t}.mp4`,s=m;return await a.cacheMediaFromBlob(s,h,"video",{taskId:t}),{blob:h,url:m,duration:_,taskId:t}}catch(a){console.warn("[WebCodecs] Failed to cache video, using blob URL:",a);const t=URL.createObjectURL(h);return{blob:h,url:t,duration:_}}}class l{constructor(){}static getInstance(){return l.instance||(l.instance=new l),l.instance}async mergeVideos(e,n,d){if(e.length===0)throw new Error("没有视频可合并");if(e.length===1){n==null||n(0,"downloading","下载视频...");const c=await(await fetch(e[0])).blob();return{blob:c,url:URL.createObjectURL(c),duration:0}}V();try{n==null||n(0,"downloading",`下载 ${e.length} 个视频...`);const o=[];for(let c=0;c<e.length;c++){n==null||n(c/e.length*100,"downloading",`下载视频 ${c+1}/${e.length}...`);const u=await(await fetch(e[c])).blob();o.push(u)}return await k(e,n,d)}catch(o){throw console.error("[WebCodecs] Merge failed:",o),new Error(`视频合并失败: ${o instanceof Error?o.message:String(o)}`)}}static isSupported(){return typeof VideoDecoder<"u"&&typeof VideoEncoder<"u"}}const A=l.getInstance();async function L(i,e,n){return A.mergeVideos(i,e,n)}export{L as m};
3
+ 请使用 Chrome 94+ 或 Edge 94+ 浏览器。`)}function M(){const i=[{mimeType:"video/mp4;codecs=avc1",extension:"mp4"},{mimeType:"video/webm;codecs=vp9",extension:"webm"},{mimeType:"video/webm;codecs=vp8",extension:"webm"}];for(const e of i)if(MediaRecorder.isTypeSupported(e.mimeType))return e;return console.warn("[WebCodecs] No preferred format supported, using default"),{mimeType:"video/webm",extension:"webm"}}async function k(i,e,n){const d=document.createElement("canvas"),o=d.getContext("2d",{willReadFrequently:!1});if(!o)throw new Error("无法创建 Canvas 2D 上下文");const c=document.createElement("video");c.crossOrigin="anonymous",c.src=i[0],await new Promise((a,t)=>{c.onloadedmetadata=()=>a(),c.onerror=()=>t(new Error("无法加载第一个视频"))}),d.width=c.videoWidth,d.height=c.videoHeight;const b=M(),u=new AudioContext,E=u.createMediaStreamDestination(),$=d.captureStream(30),x=new MediaStream([...$.getVideoTracks(),...E.stream.getAudioTracks()]),p=new MediaRecorder(x,{mimeType:b.mimeType,videoBitsPerSecond:8e6,audioBitsPerSecond:128e3}),v=[];p.ondataavailable=a=>{a.data.size>0&&v.push(a.data)},p.start(),e==null||e(0,"encoding","开始录制视频...");const T=(n==null?void 0:n.transitions)||[],S=(n==null?void 0:n.transitionDuration)??.5;for(let a=0;a<i.length;a++){e==null||e(a/i.length*100,"encoding",`正在处理视频 ${a+1}/${i.length}...`);const t=document.createElement("video");t.crossOrigin="anonymous",t.src=i[a],t.volume=1,await new Promise((r,f)=>{t.onloadedmetadata=()=>r(),t.onerror=()=>f(new Error(`无法加载视频 ${a+1}`))});let m=null;try{m=u.createMediaElementSource(t),m.connect(E)}catch(r){console.warn(`[WebCodecs] Failed to connect audio from video ${a+1}:`,r)}const s=a<T.length?T[a]:"cut",y=s==="dissolve"||s==="fade_to_black";await new Promise(r=>{t.play().catch(w=>{console.warn(`[WebCodecs] Failed to play video ${a+1}:`,w)});const f=()=>{if(t.ended){r();return}let w=1;if(y&&t.duration>0){const R=t.duration-t.currentTime;R<S&&(w=Math.max(0,R/S))}s==="fade_to_black"&&w<1&&(o.fillStyle="#000",o.fillRect(0,0,d.width,d.height)),o.globalAlpha=w,o.drawImage(t,0,0,d.width,d.height),o.globalAlpha=1,requestAnimationFrame(f)};t.onended=()=>r(),f()}),m&&m.disconnect(),t.pause(),t.src="",t.load()}e==null||e(100,"finalizing","正在生成最终视频..."),await new Promise(a=>{p.onstop=()=>a(),p.stop()}),await u.close();const D=b.mimeType.split(";")[0],h=new Blob(v,{type:D}),_=i.length*8;try{const{unifiedCacheService:a}=await F(async()=>{const{unifiedCacheService:y}=await import("./ai-chat-BnWVpTEI.js").then(r=>r.sK);return{unifiedCacheService:y}},__vite__mapDeps([0]),import.meta.url),t=`merged-video-${Date.now()}`,m=`/__aitu_cache__/video/${t}.mp4`,s=m;return await a.cacheMediaFromBlob(s,h,"video",{taskId:t}),{blob:h,url:m,duration:_,taskId:t}}catch(a){console.warn("[WebCodecs] Failed to cache video, using blob URL:",a);const t=URL.createObjectURL(h);return{blob:h,url:t,duration:_}}}class l{constructor(){}static getInstance(){return l.instance||(l.instance=new l),l.instance}async mergeVideos(e,n,d){if(e.length===0)throw new Error("没有视频可合并");if(e.length===1){n==null||n(0,"downloading","下载视频...");const c=await(await fetch(e[0])).blob();return{blob:c,url:URL.createObjectURL(c),duration:0}}V();try{n==null||n(0,"downloading",`下载 ${e.length} 个视频...`);const o=[];for(let c=0;c<e.length;c++){n==null||n(c/e.length*100,"downloading",`下载视频 ${c+1}/${e.length}...`);const u=await(await fetch(e[c])).blob();o.push(u)}return await k(e,n,d)}catch(o){throw console.error("[WebCodecs] Merge failed:",o),new Error(`视频合并失败: ${o instanceof Error?o.message:String(o)}`)}}static isSupported(){return typeof VideoDecoder<"u"&&typeof VideoEncoder<"u"}}const A=l.getInstance();async function L(i,e,n){return A.mergeVideos(i,e,n)}export{L as m};
@@ -1 +1 @@
1
- import{dd as u,bj as v}from"./ai-chat-B-XdoWBQ.js";import"./startup-runtime-BrfuwjQS.js";async function h(e){if(!e||!e.children)return 0;let n=0;for(const c of e.children){const r=c.url;if(r&&r.startsWith("blob:")&&r.includes("#merged-video-")){const s=r.indexOf("#merged-video-");if(s===-1)continue;const i=r.substring(s+1),d=i.indexOf("#",1),o=d>0?i.substring(0,d):i;try{const t=await u.getCachedBlob(o);if(t){const a=URL.createObjectURL(t),f=`${a}#${o}`,l=e.children.indexOf(c);if(l===-1){URL.revokeObjectURL(a);continue}v.setNode(e,{url:f},[l]),n++}else console.warn("[VideoRecovery] Cache not found for taskId:",o)}catch(t){console.error("[VideoRecovery] Failed to recover video:",o,t)}}}return n}function y(e){e&&requestAnimationFrame(async()=>{try{await h(e)}catch(n){console.error("[VideoRecovery] Initialization failed:",n)}})}export{y as initVideoRecoveryService,h as recoverExpiredVideoUrls};
1
+ import{dd as u,bj as v}from"./ai-chat-BnWVpTEI.js";import"./startup-runtime-BrfuwjQS.js";async function h(e){if(!e||!e.children)return 0;let n=0;for(const c of e.children){const r=c.url;if(r&&r.startsWith("blob:")&&r.includes("#merged-video-")){const s=r.indexOf("#merged-video-");if(s===-1)continue;const i=r.substring(s+1),d=i.indexOf("#",1),o=d>0?i.substring(0,d):i;try{const t=await u.getCachedBlob(o);if(t){const a=URL.createObjectURL(t),f=`${a}#${o}`,l=e.children.indexOf(c);if(l===-1){URL.revokeObjectURL(a);continue}v.setNode(e,{url:f},[l]),n++}else console.warn("[VideoRecovery] Cache not found for taskId:",o)}catch(t){console.error("[VideoRecovery] Failed to recover video:",o,t)}}}return n}function y(e){e&&requestAnimationFrame(async()=>{try{await h(e)}catch(n){console.error("[VideoRecovery] Initialization failed:",n)}})}export{y as initVideoRecoveryService,h as recoverExpiredVideoUrls};
@@ -1,3 +1,3 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ai-chat-DbjmzngX.css"])))=>i.map(i=>d[i]);
2
- import{dd as k,eS as z,rY as V}from"./ai-chat-B-XdoWBQ.js";import{_ as b}from"./startup-runtime-BrfuwjQS.js";async function j(e,t,n){if(e.size===0)throw new Error("Invalid frame blob: size is 0");const a=`/__aitu_cache__/video-frame_${t}_${n}`;return await k.cacheMediaFromBlob(a,e,"image",{metadata:{source:"video-frame",shotId:t,frameType:n}}),a}async function ee(e,t,n){const a=URL.createObjectURL(e),s=document.createElement("video");s.muted=!0,s.preload="auto";try{await new Promise((d,p)=>{s.onloadedmetadata=()=>d(),s.onerror=()=>p(new Error("Failed to load video")),s.src=a});const i=document.createElement("canvas"),u=i.getContext("2d"),o=Math.min(1,320/s.videoWidth);i.width=Math.round(s.videoWidth*o),i.height=Math.round(s.videoHeight*o);const l=[];for(let d=0;d<t.length;d++){n==null||n(d,t.length);try{const p=await R(s,i,u,t[d]);l.push(p)}catch{l.push(null)}}return n==null||n(t.length,t.length),l}finally{URL.revokeObjectURL(a),s.src=""}}async function te(e,t,n,a){const s=a||n,i=document.createElement("video");i.muted=!0,i.preload="auto",i.crossOrigin="anonymous";try{await new Promise((E,I)=>{i.onloadedmetadata=()=>E(),i.onerror=()=>I(new Error("Failed to load video")),i.src=e});const u=document.createElement("canvas"),c=u.getContext("2d"),l=Math.min(1,1280/i.videoWidth);u.width=Math.round(i.videoWidth*l),u.height=Math.round(i.videoHeight*l);const d=s==="first"?Math.min(.1,i.duration):Math.max(0,i.duration-.1),p=await R(i,u,c,d);return await j(p,t,n)}catch{return null}finally{i.src=""}}function R(e,t,n,a){return new Promise((s,i)=>{const u=Math.min(Math.max(0,a),e.duration||0);e.currentTime=u;const c=()=>{e.removeEventListener("seeked",c),n.drawImage(e,0,0,t.width,t.height),t.toBlob(o=>{o&&o.size>0?s(o):i(new Error("toBlob returned empty"))},"image/jpeg",.85)};e.addEventListener("seeked",c)})}const P=/(?:^|[^\d])(?:400|401|402|403|404|413|415|422)(?:[^\d]|$)/,X=[/invalid\s*(?:request|parameters?|argument|input|field|payload|schema)/i,/bad\s*request/i,/unprocessable/i,/unsupported\s*(?:model|parameter|size|duration|resolution|format|input|image|media)?/i,/(?:missing|required)\s*(?:parameter|field|argument|input|prompt|model|duration|size)/i,/requires?\s+(?:a\s+)?(?:reference\s+image|input|image)/i,/(?:must|should)\s+be/i,/no\s+(?:task\s+)?id\s+returned|no\s+video\s+url/i,/\b(?:invalid_argument|invalid_parameter|parameter_invalid|validation_error|bad_request|unsupported_model)\b/i,/参数(?:错误|无效|非法|不正确|校验失败|验证失败)/,/请求(?:参数|数据).*?(?:无效|错误|非法|不支持)/,/缺少(?:必填|必要|参数|字段)/,/必须(?:是|为)|仅支持/,/不支持(?:的)?(?:参数|模型|尺寸|时长|分辨率|格式|图片|视频)/,/未返回(?:任务\s*)?ID|未返回有效的视频 URL/,/(?:校验|验证)失败|格式错误|字段错误/,/内容(?:政策|审核|安全)|安全策略|违规|敏感内容|policy|safety/i,/(?:ip|intellectual\s+property|copyright|trademark)\s*(?:infringement|violation)|涉嫌(?:知识产权|版权|商标|IP)(?:侵权|违规)|知识产权侵权/i];function q(e,t){var n,a;return[(n=e==null?void 0:e.error)==null?void 0:n.code,(a=e==null?void 0:e.error)==null?void 0:a.message,t].filter(s=>typeof s=="string"&&s.trim()!=="").join(" ")}function re(e,t){var s,i;const n=q(e,t);return!n||!(P.test(n)||X.some(u=>u.test(n)))?null:((s=e==null?void 0:e.error)==null?void 0:s.message)||t||((i=e==null?void 0:e.error)==null?void 0:i.code)||"不可重试的视频生成错误"}function ne(e){const{model:t,firstFrameUrl:n,lastFrameUrl:a,extraReferenceUrls:s=[],characterReferenceUrls:i=[]}=e,u=V(t),c=[],o=[],l=(d,p)=>{!d||c.includes(d)||(c.push(d),o.push(p))};if(u.imageUpload.mode==="frames"){l(n,"首帧图:只表示视频起始画面状态,视频必须从这张图开始,优先于故事上下文。"),l(a,"尾帧图:只表示视频结束画面状态,视频应自然过渡到这张图,优先于故事上下文。");const d=c.length>0?c.slice(0,u.imageUpload.maxCount):void 0,p=d?o.slice(0,d.length):void 0,E=i.length>0?i:void 0;return{referenceImages:d,referenceImageDescriptions:p,unusedCharacterReferenceUrls:E}}for(const d of i)if(l(d,"角色参考图:仅用于锁定人物身份、脸型、发型、服装、材质和气质,不表示时间顺序、动作或剧情。"),c.length>=u.imageUpload.maxCount)break;l(n,"首帧图:只表示视频起始画面状态,视频必须从这张图开始,优先于故事上下文。");for(const d of s)if(l(d,"全局/补充参考图:仅用于主体、产品、场景、风格或色彩一致性,不表示时间顺序、动作或剧情。"),c.length>=u.imageUpload.maxCount)break;return{referenceImages:c.length>0?c:void 0,referenceImageDescriptions:o.length>0?o:void 0}}async function ie(e,t){return z(e,{interval:1e3,timeout:1800*1e3,signal:t})}function J(e){return Math.max(2,String(Math.max(e,0)).length)}function M(e,t){return String(e).padStart(t,"0")}function T(e,t,n){const a=M(e+1,n);return t==="first"?`${a}.首帧`:t==="last"?`${a}.尾帧`:`${a}.视频`}function Y(e){return["#!/bin/sh","set -eu","",'cd "$(dirname "$0")"',"",`MANIFEST_FILE=${JSON.stringify(e)}`,"",'if [ ! -f "$MANIFEST_FILE" ]; then',' echo "未找到 $MANIFEST_FILE"'," exit 1","fi","","download_if_missing() {",' file_name="$1"',' source_url="$2"',' if [ -s "$file_name" ]; then',' echo "[skip] $file_name"'," return 0"," fi",' echo "[download] $file_name"',' curl -L --fail --retry 3 --retry-delay 1 --output "$file_name.part" "$source_url"',' mv "$file_name.part" "$file_name"',"}","","emit_entries() {"," if command -v node >/dev/null 2>&1; then",` node -e 'const fs=require("fs"); const manifest=JSON.parse(fs.readFileSync(process.argv[1],"utf8")); for (const entry of manifest.downloadEntries||[]) { if (entry?.fileName && entry?.url) process.stdout.write(String(entry.fileName)+"\\t"+String(entry.url)+"\\n"); }' "$MANIFEST_FILE"`," return 0"," fi",""," if command -v python3 >/dev/null 2>&1; then",` python3 - "$MANIFEST_FILE" <<'PY'`,"import json, sys","with open(sys.argv[1], 'r', encoding='utf-8') as fh:"," manifest = json.load(fh)","for entry in manifest.get('downloadEntries', []):"," file_name = entry.get('fileName')"," url = entry.get('url')"," if file_name and url:",' print(f"{file_name}\\t{url}")',"PY"," return 0"," fi","",' echo "需要 node 或 python3 来解析 $MANIFEST_FILE" >&2'," return 1","}","",'TMP_ENTRIES_FILE="$(mktemp -t workflow-download-entries.XXXXXX)"',`trap 'rm -f "$TMP_ENTRIES_FILE"' EXIT INT TERM`,"",'emit_entries > "$TMP_ENTRIES_FILE"',"","while IFS=' ' read -r file_name source_url; do",' [ -n "${file_name:-}" ] || continue',' [ -n "${source_url:-}" ] || continue',' download_if_missing "$file_name" "$source_url"','done < "$TMP_ENTRIES_FILE"',"",'echo "下载完成"',""].join(`
3
- `)}function G(e){return e.map(t=>({...t,generated_first_frame_url:void 0,generated_last_frame_url:void 0,generated_video_url:void 0,suppressed_generated_urls:Z(t)}))}function Z(e){const t={...e.suppressed_generated_urls||{}};return e.generated_first_frame_url&&(t.first=e.generated_first_frame_url),e.generated_last_frame_url&&(t.last=e.generated_last_frame_url),e.generated_video_url&&(t.video=e.generated_video_url),Object.keys(t).length>0?t:void 0}function H(e){return e.map(t=>({...t,referenceImageUrl:void 0}))}function oe(e,t){return{shots:G(e),characters:H(t)}}function ae(e){return e.flatMap((t,n)=>{const a=[];return t.generated_first_frame_url&&a.push({url:t.generated_first_frame_url,type:"image",kind:"first",shotIndex:n}),t.generated_last_frame_url&&a.push({url:t.generated_last_frame_url,type:"image",kind:"last",shotIndex:n}),t.generated_video_url&&a.push({url:t.generated_video_url,type:"video",kind:"video",shotIndex:n}),a})}async function le(e){const{recordId:t,fileNamePrefix:n,zipBaseName:a,scriptMarkdown:s,recordMeta:i,shots:u,assets:c,audioAsset:o,onProgress:l}=e,d=new Date().toISOString(),p=J(u.length),E=M(0,p),{default:I}=await b(async()=>{const{default:r}=await import("./office-data-DMEex_0S.js").then(f=>f.j);return{default:r}},[],import.meta.url),{downloadFromBlob:L,getFileExtension:F,normalizeImageDataUrl:U,processBatchWithConcurrency:W}=await b(async()=>{const{downloadFromBlob:r,getFileExtension:f,normalizeImageDataUrl:_,processBatchWithConcurrency:h}=await import("./ai-chat-B-XdoWBQ.js").then(g=>g.sG);return{downloadFromBlob:r,getFileExtension:f,normalizeImageDataUrl:_,processBatchWithConcurrency:h}},__vite__mapDeps([0]),import.meta.url),{unifiedCacheService:A}=await b(async()=>{const{unifiedCacheService:r}=await import("./ai-chat-B-XdoWBQ.js").then(f=>f.sJ);return{unifiedCacheService:r}},__vite__mapDeps([0]),import.meta.url),N=async r=>{const f=await A.getCachedBlob(r);if(!f)throw new Error("未找到可用缓存,且网络下载失败");return f},w=new I,m={exportedAt:d,record:i,files:{script:`${E}.脚本.md`,music:null,manifest:`${E}.manifest.json`,downloadScript:`${E}.补全下载.sh`},shots:u.map((r,f)=>({index:f+1,id:r.id,label:r.label||`镜头 ${f+1}`,startTime:r.startTime,endTime:r.endTime,files:{first:null,last:null,video:null}})),errors:[],downloadEntries:[]};if(w.file(m.files.script,s),l==null||l(c.length>0||o?8:40),o!=null&&o.url){const r=o.plannedFileName||`${E}.音乐.mp3`;m.downloadEntries.push({fileName:r,url:o.url});try{const f=await N(o.url),_=F(o.url,f.type),h=_!=="bin"?_:o.fallbackExtension||"mp3",g=r.replace(/\.[^.]+$/,`.${h}`);w.file(g,f),m.files.music=g,g!==r&&(m.downloadEntries[m.downloadEntries.length-1].fileName=g)}catch(f){m.files.music=r,m.errors.push(o.downloadErrorMessage||"音乐下载失败"),console.error("[workflow-export] Failed to export audio asset:",o.url,f)}}else o!=null&&o.missingErrorMessage&&m.errors.push(o.missingErrorMessage);await W(c,async(r,f)=>{const _=r.type==="image"?U(r.url):r.url,h=m.shots[r.shotIndex],g=r.type==="image"?"png":"mp4",$=`${T(r.shotIndex,r.kind,p)}.${g}`;m.downloadEntries.push({fileName:$,url:_});try{const v=await N(_),y=F(_,v.type),D=y!=="bin"?y:g,x=`${T(r.shotIndex,r.kind,p)}.${D}`;w.file(x,v),h.files[r.kind]=x,x!==$&&(m.downloadEntries[m.downloadEntries.length-1].fileName=x)}catch(v){const y=(h==null?void 0:h.label)||`镜头 ${r.shotIndex+1}`;m.errors.push(`${y} ${r.kind} 下载失败`),h.files[r.kind]=$,console.error("[workflow-export] Failed to export asset:",_,v)}finally{const v=f+1,y=c.length>0?Math.round(v/c.length*62):62;l==null||l(8+y)}},3),w.file(m.files.downloadScript,Y(m.files.manifest),{unixPermissions:493}),w.file(m.files.manifest,JSON.stringify(m,null,2));const B=await w.generateAsync({type:"blob"},r=>l==null?void 0:l(70+Math.round(r.percent*.3))),C=t.replace(/[^a-zA-Z0-9_-]/g,""),O=d.slice(0,19).replace(/[:T]/g,"-"),S=`${a}_${C||n}_${O}.zip`;return L(B,S),l==null||l(100),{assetCount:c.length,zipFileName:S}}export{ae as a,te as b,j as c,ne as d,ee as e,le as f,re as g,oe as r,ie as w};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ai-chat-BlxYfB4O.css"])))=>i.map(i=>d[i]);
2
+ import{dd as k,eS as z,r_ as V}from"./ai-chat-BnWVpTEI.js";import{_ as b}from"./startup-runtime-BrfuwjQS.js";async function j(e,t,n){if(e.size===0)throw new Error("Invalid frame blob: size is 0");const a=`/__aitu_cache__/video-frame_${t}_${n}`;return await k.cacheMediaFromBlob(a,e,"image",{metadata:{source:"video-frame",shotId:t,frameType:n}}),a}async function ee(e,t,n){const a=URL.createObjectURL(e),s=document.createElement("video");s.muted=!0,s.preload="auto";try{await new Promise((d,p)=>{s.onloadedmetadata=()=>d(),s.onerror=()=>p(new Error("Failed to load video")),s.src=a});const i=document.createElement("canvas"),u=i.getContext("2d"),o=Math.min(1,320/s.videoWidth);i.width=Math.round(s.videoWidth*o),i.height=Math.round(s.videoHeight*o);const l=[];for(let d=0;d<t.length;d++){n==null||n(d,t.length);try{const p=await R(s,i,u,t[d]);l.push(p)}catch{l.push(null)}}return n==null||n(t.length,t.length),l}finally{URL.revokeObjectURL(a),s.src=""}}async function te(e,t,n,a){const s=a||n,i=document.createElement("video");i.muted=!0,i.preload="auto",i.crossOrigin="anonymous";try{await new Promise((E,I)=>{i.onloadedmetadata=()=>E(),i.onerror=()=>I(new Error("Failed to load video")),i.src=e});const u=document.createElement("canvas"),c=u.getContext("2d"),l=Math.min(1,1280/i.videoWidth);u.width=Math.round(i.videoWidth*l),u.height=Math.round(i.videoHeight*l);const d=s==="first"?Math.min(.1,i.duration):Math.max(0,i.duration-.1),p=await R(i,u,c,d);return await j(p,t,n)}catch{return null}finally{i.src=""}}function R(e,t,n,a){return new Promise((s,i)=>{const u=Math.min(Math.max(0,a),e.duration||0);e.currentTime=u;const c=()=>{e.removeEventListener("seeked",c),n.drawImage(e,0,0,t.width,t.height),t.toBlob(o=>{o&&o.size>0?s(o):i(new Error("toBlob returned empty"))},"image/jpeg",.85)};e.addEventListener("seeked",c)})}const P=/(?:^|[^\d])(?:400|401|402|403|404|413|415|422)(?:[^\d]|$)/,X=[/invalid\s*(?:request|parameters?|argument|input|field|payload|schema)/i,/bad\s*request/i,/unprocessable/i,/unsupported\s*(?:model|parameter|size|duration|resolution|format|input|image|media)?/i,/(?:missing|required)\s*(?:parameter|field|argument|input|prompt|model|duration|size)/i,/requires?\s+(?:a\s+)?(?:reference\s+image|input|image)/i,/(?:must|should)\s+be/i,/no\s+(?:task\s+)?id\s+returned|no\s+video\s+url/i,/\b(?:invalid_argument|invalid_parameter|parameter_invalid|validation_error|bad_request|unsupported_model)\b/i,/参数(?:错误|无效|非法|不正确|校验失败|验证失败)/,/请求(?:参数|数据).*?(?:无效|错误|非法|不支持)/,/缺少(?:必填|必要|参数|字段)/,/必须(?:是|为)|仅支持/,/不支持(?:的)?(?:参数|模型|尺寸|时长|分辨率|格式|图片|视频)/,/未返回(?:任务\s*)?ID|未返回有效的视频 URL/,/(?:校验|验证)失败|格式错误|字段错误/,/内容(?:政策|审核|安全)|安全策略|违规|敏感内容|policy|safety/i,/(?:ip|intellectual\s+property|copyright|trademark)\s*(?:infringement|violation)|涉嫌(?:知识产权|版权|商标|IP)(?:侵权|违规)|知识产权侵权/i];function q(e,t){var n,a;return[(n=e==null?void 0:e.error)==null?void 0:n.code,(a=e==null?void 0:e.error)==null?void 0:a.message,t].filter(s=>typeof s=="string"&&s.trim()!=="").join(" ")}function re(e,t){var s,i;const n=q(e,t);return!n||!(P.test(n)||X.some(u=>u.test(n)))?null:((s=e==null?void 0:e.error)==null?void 0:s.message)||t||((i=e==null?void 0:e.error)==null?void 0:i.code)||"不可重试的视频生成错误"}function ne(e){const{model:t,firstFrameUrl:n,lastFrameUrl:a,extraReferenceUrls:s=[],characterReferenceUrls:i=[]}=e,u=V(t),c=[],o=[],l=(d,p)=>{!d||c.includes(d)||(c.push(d),o.push(p))};if(u.imageUpload.mode==="frames"){l(n,"首帧图:只表示视频起始画面状态,视频必须从这张图开始,优先于故事上下文。"),l(a,"尾帧图:只表示视频结束画面状态,视频应自然过渡到这张图,优先于故事上下文。");const d=c.length>0?c.slice(0,u.imageUpload.maxCount):void 0,p=d?o.slice(0,d.length):void 0,E=i.length>0?i:void 0;return{referenceImages:d,referenceImageDescriptions:p,unusedCharacterReferenceUrls:E}}for(const d of i)if(l(d,"角色参考图:仅用于锁定人物身份、脸型、发型、服装、材质和气质,不表示时间顺序、动作或剧情。"),c.length>=u.imageUpload.maxCount)break;l(n,"首帧图:只表示视频起始画面状态,视频必须从这张图开始,优先于故事上下文。");for(const d of s)if(l(d,"全局/补充参考图:仅用于主体、产品、场景、风格或色彩一致性,不表示时间顺序、动作或剧情。"),c.length>=u.imageUpload.maxCount)break;return{referenceImages:c.length>0?c:void 0,referenceImageDescriptions:o.length>0?o:void 0}}async function ie(e,t){return z(e,{interval:1e3,timeout:1800*1e3,signal:t})}function J(e){return Math.max(2,String(Math.max(e,0)).length)}function M(e,t){return String(e).padStart(t,"0")}function T(e,t,n){const a=M(e+1,n);return t==="first"?`${a}.首帧`:t==="last"?`${a}.尾帧`:`${a}.视频`}function Y(e){return["#!/bin/sh","set -eu","",'cd "$(dirname "$0")"',"",`MANIFEST_FILE=${JSON.stringify(e)}`,"",'if [ ! -f "$MANIFEST_FILE" ]; then',' echo "未找到 $MANIFEST_FILE"'," exit 1","fi","","download_if_missing() {",' file_name="$1"',' source_url="$2"',' if [ -s "$file_name" ]; then',' echo "[skip] $file_name"'," return 0"," fi",' echo "[download] $file_name"',' curl -L --fail --retry 3 --retry-delay 1 --output "$file_name.part" "$source_url"',' mv "$file_name.part" "$file_name"',"}","","emit_entries() {"," if command -v node >/dev/null 2>&1; then",` node -e 'const fs=require("fs"); const manifest=JSON.parse(fs.readFileSync(process.argv[1],"utf8")); for (const entry of manifest.downloadEntries||[]) { if (entry?.fileName && entry?.url) process.stdout.write(String(entry.fileName)+"\\t"+String(entry.url)+"\\n"); }' "$MANIFEST_FILE"`," return 0"," fi",""," if command -v python3 >/dev/null 2>&1; then",` python3 - "$MANIFEST_FILE" <<'PY'`,"import json, sys","with open(sys.argv[1], 'r', encoding='utf-8') as fh:"," manifest = json.load(fh)","for entry in manifest.get('downloadEntries', []):"," file_name = entry.get('fileName')"," url = entry.get('url')"," if file_name and url:",' print(f"{file_name}\\t{url}")',"PY"," return 0"," fi","",' echo "需要 node 或 python3 来解析 $MANIFEST_FILE" >&2'," return 1","}","",'TMP_ENTRIES_FILE="$(mktemp -t workflow-download-entries.XXXXXX)"',`trap 'rm -f "$TMP_ENTRIES_FILE"' EXIT INT TERM`,"",'emit_entries > "$TMP_ENTRIES_FILE"',"","while IFS=' ' read -r file_name source_url; do",' [ -n "${file_name:-}" ] || continue',' [ -n "${source_url:-}" ] || continue',' download_if_missing "$file_name" "$source_url"','done < "$TMP_ENTRIES_FILE"',"",'echo "下载完成"',""].join(`
3
+ `)}function Z(e){return e.map(t=>({...t,generated_first_frame_url:void 0,generated_last_frame_url:void 0,generated_video_url:void 0,suppressed_generated_urls:G(t)}))}function G(e){const t={...e.suppressed_generated_urls||{}};return e.generated_first_frame_url&&(t.first=e.generated_first_frame_url),e.generated_last_frame_url&&(t.last=e.generated_last_frame_url),e.generated_video_url&&(t.video=e.generated_video_url),Object.keys(t).length>0?t:void 0}function H(e){return e.map(t=>({...t,referenceImageUrl:void 0}))}function oe(e,t){return{shots:Z(e),characters:H(t)}}function ae(e){return e.flatMap((t,n)=>{const a=[];return t.generated_first_frame_url&&a.push({url:t.generated_first_frame_url,type:"image",kind:"first",shotIndex:n}),t.generated_last_frame_url&&a.push({url:t.generated_last_frame_url,type:"image",kind:"last",shotIndex:n}),t.generated_video_url&&a.push({url:t.generated_video_url,type:"video",kind:"video",shotIndex:n}),a})}async function le(e){const{recordId:t,fileNamePrefix:n,zipBaseName:a,scriptMarkdown:s,recordMeta:i,shots:u,assets:c,audioAsset:o,onProgress:l}=e,d=new Date().toISOString(),p=J(u.length),E=M(0,p),{default:I}=await b(async()=>{const{default:r}=await import("./office-data-DMEex_0S.js").then(f=>f.j);return{default:r}},[],import.meta.url),{downloadFromBlob:L,getFileExtension:F,normalizeImageDataUrl:U,processBatchWithConcurrency:W}=await b(async()=>{const{downloadFromBlob:r,getFileExtension:f,normalizeImageDataUrl:_,processBatchWithConcurrency:h}=await import("./ai-chat-BnWVpTEI.js").then(g=>g.sH);return{downloadFromBlob:r,getFileExtension:f,normalizeImageDataUrl:_,processBatchWithConcurrency:h}},__vite__mapDeps([0]),import.meta.url),{unifiedCacheService:A}=await b(async()=>{const{unifiedCacheService:r}=await import("./ai-chat-BnWVpTEI.js").then(f=>f.sK);return{unifiedCacheService:r}},__vite__mapDeps([0]),import.meta.url),N=async r=>{const f=await A.getCachedBlob(r);if(!f)throw new Error("未找到可用缓存,且网络下载失败");return f},w=new I,m={exportedAt:d,record:i,files:{script:`${E}.脚本.md`,music:null,manifest:`${E}.manifest.json`,downloadScript:`${E}.补全下载.sh`},shots:u.map((r,f)=>({index:f+1,id:r.id,label:r.label||`镜头 ${f+1}`,startTime:r.startTime,endTime:r.endTime,files:{first:null,last:null,video:null}})),errors:[],downloadEntries:[]};if(w.file(m.files.script,s),l==null||l(c.length>0||o?8:40),o!=null&&o.url){const r=o.plannedFileName||`${E}.音乐.mp3`;m.downloadEntries.push({fileName:r,url:o.url});try{const f=await N(o.url),_=F(o.url,f.type),h=_!=="bin"?_:o.fallbackExtension||"mp3",g=r.replace(/\.[^.]+$/,`.${h}`);w.file(g,f),m.files.music=g,g!==r&&(m.downloadEntries[m.downloadEntries.length-1].fileName=g)}catch(f){m.files.music=r,m.errors.push(o.downloadErrorMessage||"音乐下载失败"),console.error("[workflow-export] Failed to export audio asset:",o.url,f)}}else o!=null&&o.missingErrorMessage&&m.errors.push(o.missingErrorMessage);await W(c,async(r,f)=>{const _=r.type==="image"?U(r.url):r.url,h=m.shots[r.shotIndex],g=r.type==="image"?"png":"mp4",$=`${T(r.shotIndex,r.kind,p)}.${g}`;m.downloadEntries.push({fileName:$,url:_});try{const v=await N(_),y=F(_,v.type),D=y!=="bin"?y:g,x=`${T(r.shotIndex,r.kind,p)}.${D}`;w.file(x,v),h.files[r.kind]=x,x!==$&&(m.downloadEntries[m.downloadEntries.length-1].fileName=x)}catch(v){const y=(h==null?void 0:h.label)||`镜头 ${r.shotIndex+1}`;m.errors.push(`${y} ${r.kind} 下载失败`),h.files[r.kind]=$,console.error("[workflow-export] Failed to export asset:",_,v)}finally{const v=f+1,y=c.length>0?Math.round(v/c.length*62):62;l==null||l(8+y)}},3),w.file(m.files.downloadScript,Y(m.files.manifest),{unixPermissions:493}),w.file(m.files.manifest,JSON.stringify(m,null,2));const B=await w.generateAsync({type:"blob"},r=>l==null?void 0:l(70+Math.round(r.percent*.3))),C=t.replace(/[^a-zA-Z0-9_-]/g,""),O=d.slice(0,19).replace(/[:T]/g,"-"),S=`${a}_${C||n}_${O}.zip`;return L(B,S),l==null||l(100),{assetCount:c.length,zipFileName:S}}export{ae as a,te as b,j as c,ne as d,ee as e,le as f,re as g,oe as r,ie as w};