aitu-app 0.9.7 → 0.9.8

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 (117) hide show
  1. package/README.md +3 -3
  2. package/assets/CanvasAudioPlayer-NaurjaqO.js +2 -0
  3. package/assets/{ComicCreator-C3PbhtE8.js → ComicCreator-C8SZS44f.js} +9 -9
  4. package/assets/DeferredAIInputBar-CCUMGs0l.js +107 -0
  5. package/assets/DeferredAIInputBar-DUkSo7tK.css +1 -0
  6. package/assets/DrawnixDeferredFeatures-DqjUETdo.js +2 -0
  7. package/assets/KnowledgeBaseContent-DxM-pw_7.js +53 -0
  8. package/assets/{MVCreator-e7FhHP2z.js → MVCreator-BS_NfARa.js} +13 -13
  9. package/assets/MediaLibrarySidebar-CcSibzET.css +1 -0
  10. package/assets/{ModelBenchmarkWorkbench-QIv1uUix.js → ModelBenchmarkWorkbench-DYomqfBA.js} +2 -2
  11. package/assets/{MusicAnalyzer-BgVPbS4D.js → MusicAnalyzer-BlM2pXPF.js} +2 -2
  12. package/assets/PromptHistoryTool-C2Koi6p7.js +2 -0
  13. package/assets/ResizableDivider-CEd9dAev.js +2 -0
  14. package/assets/TaskQueuePanel-DURtohEc.js +1 -0
  15. package/assets/VideoAnalyzer-B9AB-uKK.js +1 -0
  16. package/assets/VideoAnalyzer-CCpP_8AL.js +3 -0
  17. package/assets/ai-chat-B_eUkugc.js +2976 -0
  18. package/assets/ai-chat-DbjmzngX.css +1 -0
  19. package/assets/{batch-image-generation-DcHCIoof.js → batch-image-generation-CLqA7K7k.js} +6 -6
  20. package/assets/bootstrap--vhX3jSM.js +22 -0
  21. package/assets/bootstrap-5wOMkP8H.css +1 -0
  22. package/assets/clean-confirm-BCtMl6GQ.js +1 -0
  23. package/assets/{clipper-p8ORpTD7.js → clipper-CpI1VJRD.js} +1 -1
  24. package/assets/{diagram-engines-S1bDVojr.js → diagram-engines-Ct_Uat6U.js} +47 -47
  25. package/assets/{editor-engines-EPZ_ejkW.js → editor-engines-DYqevike.js} +24 -24
  26. package/assets/external-skill-parser-y-iaYa67.js +27 -0
  27. package/assets/external-skill-service-DdQz3H85.js +1 -0
  28. package/assets/frame-size-matcher-B39rYZIB.js +1 -0
  29. package/assets/image-task-prefill-DtECrkJn.js +1 -0
  30. package/assets/index-9DeaffiD.js +1 -0
  31. package/assets/index-B-3Oh_lg.js +1 -0
  32. package/assets/{index-CfdDcIPo.js → index-B0ogtT6R.js} +2 -2
  33. package/assets/index-BBR2ncNs.css +1 -0
  34. package/assets/index-BUD4zoiJ.css +1 -0
  35. package/assets/index-CCC31Km2.js +1 -0
  36. package/assets/{index-OKv6hRlo.js → index-Cv_GPiVn.js} +8 -8
  37. package/assets/index-D8TVSKQO.js +1 -0
  38. package/assets/{index-C2C9RW9e.css → index-DH4Jn0bg.css} +1 -1
  39. package/assets/index-DJOrjLNU.js +1 -0
  40. package/assets/index-DWIHW2I-.css +1 -0
  41. package/assets/index-DaoXZouJ.js +1 -0
  42. package/assets/index-JCrC27Ds.js +1 -0
  43. package/assets/{index.es-ChDclJnu.js → index.es-5OXHX2GF.js} +1 -1
  44. package/assets/{jspdf.es.min-DCrW3ylD.js → jspdf.es.min-kh506BZ7.js} +4 -4
  45. package/assets/link-popup-By5ld_Sx.css +1 -0
  46. package/assets/link-popup-CcAajDCv.js +1 -0
  47. package/assets/{markdown-to-drawnix-_NUG6Tzn.js → markdown-to-drawnix-DzV9sLBQ.js} +3 -3
  48. package/assets/mermaid-to-drawnix-kboS8PhX.js +7 -0
  49. package/assets/model-benchmark-launcher-CkMmnYiw.js +1 -0
  50. package/assets/{office-data-ByisqnCq.js → office-data-DMEex_0S.js} +1 -1
  51. package/assets/photo-wall-splitter-CnSaoVJX.js +1 -0
  52. package/assets/popup-toolbar-BakCHNFj.js +18 -0
  53. package/assets/popup-toolbar-Dloei_m7.css +1 -0
  54. package/assets/prompt-utils-DPJzr9JJ.js +1 -0
  55. package/assets/quick-creation-toolbar-bpZffpTF.css +1 -0
  56. package/assets/quick-creation-toolbar-muZ5Hnok.js +2 -0
  57. package/assets/settings-dialog-DwsSfnPG.js +1 -0
  58. package/assets/size-picker-C7nCXy3t.js +1 -0
  59. package/assets/{skill-dsl-parser-BiA4SriU.js → skill-dsl-parser-peD1ijZf.js} +2 -2
  60. package/assets/skills-DHghxQBn.js +66 -0
  61. package/assets/startup-app-BEXbZ0qn.js +4 -0
  62. package/assets/{startup-runtime-DTmhLESk.js → startup-runtime-BrfuwjQS.js} +1 -1
  63. package/assets/task-sync-Co3IFDmM.js +1 -0
  64. package/assets/tool-windows-Bp0hMtkJ.js +221 -0
  65. package/assets/tool-windows-DW-CDfPc.css +1 -0
  66. package/assets/ttd-dialog-B4XPPPw8.js +6 -0
  67. package/assets/ttd-dialog-submit-shortcut-LohjEcs7.js +1 -0
  68. package/assets/{useCharacters-xnh0EaPs.js → useCharacters-C5fqCxIN.js} +2 -2
  69. package/assets/useMediaViewer-D9rGyapJ.js +1 -0
  70. package/assets/useWorkflowSubmission-DR3KpWnr.js +44 -0
  71. package/assets/video-merge-webcodecs-0qQ9_AJI.js +3 -0
  72. package/assets/video-recovery-service-CzOwrmHg.js +1 -0
  73. package/assets/workflow-generation-utils-vycKhx7Y.js +3 -0
  74. package/assets/workflow-submission-service-D12TZFaL.js +4 -0
  75. package/changelog.json +24 -15
  76. package/idle-prefetch-manifest.json +189 -593
  77. package/manifest.json +3 -3
  78. package/package.json +1 -1
  79. package/precache-manifest.json +8 -8
  80. package/sw.js +1 -1
  81. package/version.json +9 -3
  82. package/assets/CanvasAudioPlayer-BwYHGRWS.js +0 -2
  83. package/assets/DeferredAIInputBar-7-2PXeX8.js +0 -107
  84. package/assets/DeferredAIInputBar-CVXfAbVO.css +0 -1
  85. package/assets/DrawnixDeferredFeatures-CqTh9FP7.js +0 -2
  86. package/assets/KnowledgeBaseContent-DfDkro1U.js +0 -53
  87. package/assets/MediaLibrarySidebar-CNCXXhfY.css +0 -1
  88. package/assets/ParametersDropdown-BE58BbHs.css +0 -1
  89. package/assets/ParametersDropdown-CtvS928J.js +0 -1
  90. package/assets/PromptHistoryTool-n6bmd0rg.js +0 -2
  91. package/assets/ResizableDivider-DA04HI_o.js +0 -1
  92. package/assets/TaskQueuePanel-D5PuYj3i.js +0 -1
  93. package/assets/VideoAnalyzer-CSi4LHOb.js +0 -3
  94. package/assets/VideoAnalyzer-DWSCdOuG.js +0 -1
  95. package/assets/ai-chat-BB-1jJe1.css +0 -1
  96. package/assets/ai-chat-QSLr1hM1.js +0 -650
  97. package/assets/ai-generation-preferences-service-FF4lIcs-.js +0 -1
  98. package/assets/index-CTh6qkej.js +0 -2
  99. package/assets/index-CVIj7JUk.js +0 -1
  100. package/assets/index-DBNBO6fw.js +0 -1
  101. package/assets/mermaid-to-drawnix-Dwr6lDtB.js +0 -7
  102. package/assets/model-benchmark-launcher-ErBIOJST.js +0 -1
  103. package/assets/photo-wall-splitter-BwEE0sAo.js +0 -1
  104. package/assets/prompt-utils-DdPr2ZTI.js +0 -1
  105. package/assets/settings-dialog-Xnh1sJo3.js +0 -1
  106. package/assets/startup-app-C1ovhMB8.css +0 -1
  107. package/assets/startup-app-DwKN8joE.js +0 -2590
  108. package/assets/task-sync-DG9hPeiE.js +0 -1
  109. package/assets/tool-windows-CegtMid1.css +0 -1
  110. package/assets/tool-windows-D4GW91a2.js +0 -94
  111. package/assets/ttd-dialog-BWmNZJbV.js +0 -6
  112. package/assets/ttd-dialog-submit-shortcut-BA-UwJnt.js +0 -1
  113. package/assets/useMediaViewer-DBFuSic8.js +0 -1
  114. package/assets/useWorkflowSubmission-Dqo0pSKe.js +0 -44
  115. package/assets/video-recovery-service-BlAz1_O-.js +0 -1
  116. package/assets/workflow-generation-utils-B1MXuUN_.js +0 -3
  117. package/assets/workflow-submission-service-Bax5sedc.js +0 -4
@@ -0,0 +1,107 @@
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{em as Vs,ep as Ks,P as r,n7 as gn,bP as Fe,a8 as u,ab as gt,n8 as qr,e$ as Zr,Q as Co,T as mt,aD as Jr,n9 as Qr,aI as Ln,aC as Fn,aQ as ea,na as ta,dd as ds,dv as na,b8 as oa,aH as sa,nb as at,nc as yo,aE as to,aO as Mo,aN as Yt,aM as Xt,aG as At,cF as Jn,nd as ra,dU as aa,ne as us,gy as ia,dV as ca,iq as Ys,lY as la,m7 as da,eV as ua,nf as fa,eB as pa,cA as ma,ng as ha,nh as ga,ao as tt,ni as wa,gz as xa,m6 as ya,nj as Ia,fq as ba,nk as _a,nl as To,at as Qn,ki as Po,R as Xs,cm as ka,en as Bn,ju as va,nm as Sa,cK as Ca,nn as Ma,et as Rt,eo as Vt,no as Hn,ey as Tt,np as fs,nq as ps,nr as Ta,ns as ms,nt as Gn,nu as Io,nv as Pa,bl as Ea,nw as Aa,nx as eo,cO as hs,i0 as Ra,ny as Da,nz as Na,nA as ja,nB as za,kH as Oa,ak as qs,bp as bo,bq as gs,ji as Wa,bk as Zs,b0 as ws,nC as xs,nD as ys,nE as Is,aa as Un,nF as La,cZ as Fa,nG as Ba,nH as Ha,nI as Ga,nJ as Ua,f2 as $n,nK as $a,nL as Va,iP as Ka,f6 as Ya,nM as Xa,fA as qa,eI as Za,nN as bs,nO as _s,nP as Ja,nQ as Qa,nR as ks,nS as vs,nT as ei}from"./ai-chat-B_eUkugc.js";import{u as ti,a as ni,c as Vn,b as Kt,W as oi}from"./useWorkflowSubmission-DR3KpWnr.js";import{_ as ht}from"./startup-runtime-BrfuwjQS.js";import{g as si}from"./bootstrap--vhX3jSM.js";import{ag as ri,ah as ai,ai as Pt,aj as _o,ak as Xe,al as ko,am as Ss,an as Cs,ao as Ms}from"./tool-windows-Bp0hMtkJ.js";import{u as ii,r as ci,g as li,a as di}from"./prompt-utils-DPJzr9JJ.js";import{s as Ts}from"./workflow-submission-service-D12TZFaL.js";import{m as ui}from"./video-merge-webcodecs-0qQ9_AJI.js";import{b as fi}from"./mj-params-M-7csAp7.js";import{S as Eo,a as rt,f as Kn,b as Ps}from"./skills-DHghxQBn.js";import{e as Ao}from"./external-skill-service-DdQz3H85.js";import{a as pi}from"./frame-size-matcher-B39rYZIB.js";import"./skill-dsl-parser-peD1ijZf.js";import"./external-skill-parser-y-iaYa67.js";import"./startup-app-BEXbZ0qn.js";const mi=({generationType:t,onSelectPrompt:e,language:n,extraActions:l,onBeforeOpenMyPrompts:a})=>{const{history:d,removeHistory:c,refreshHistory:g}=Vs({deduplicateWithPresets:!1,modelTypeFilter:t==="image"||t==="video"?void 0:t}),{imageHistory:f,videoHistory:h}=ii(),{confirm:m,confirmDialog:y}=Ks(),[_,S]=r.useState(!1),[,C]=r.useState(0),W=r.useRef(null),E=r.useRef(null),T=r.useRef(null),L=n==="zh"?"我的提示词":"My Prompts",A=t==="image"||t==="video"?ci({generationType:t,language:n,promptContents:li(t,n,t==="image"?f:h),imageHistory:f,videoHistory:h}):di({generationType:t,language:n,aiInputHistory:d,imageHistory:f,videoHistory:h});r.useEffect(()=>gn.subscribeChanges(()=>{g(),C(R=>R+1)}),[g]),r.useEffect(()=>()=>{E.current&&clearTimeout(E.current),T.current&&clearTimeout(T.current)},[]);const b=r.useCallback(()=>{T.current&&(clearTimeout(T.current),T.current=null),E.current=setTimeout(()=>{g(),C(R=>R+1),_||Fe.trackPromptAction({action:"open_panel",surface:"ai_input_prompt_popover",promptType:t,itemCount:A.length}),S(!0)},150)},[t,_,A.length,g]),N=r.useCallback(()=>{E.current&&(clearTimeout(E.current),E.current=null),T.current=setTimeout(()=>{S(!1)},200)},[]),F=r.useCallback(R=>{e({content:R.content,modelType:R.modelType,scene:R.scene}),S(!1)},[e]),J=r.useCallback(async R=>{const M=A.find(H=>H.id===R);!M||!await m({title:n==="zh"?"确认删除提示词":"Delete Prompt",description:n==="zh"?"确定要删除这条提示词吗?此操作不可撤销。":"Are you sure you want to delete this prompt? This action cannot be undone.",confirmText:n==="zh"?"删除":"Delete",cancelText:n==="zh"?"取消":"Cancel",danger:!0})||(gn.deletePrompt(t,M.content),M.historyId&&t!=="image"&&t!=="video"?c(M.historyId):C(H=>H+1))},[m,t,n,A,c]),k=r.useCallback(R=>{const M=A.find(z=>z.id===R);M&&(gn.isPinned(t,M.content)?gn.unpinPrompt(t,M.content):gn.pinPrompt(t,M.content),C(z=>z+1))},[t,A]),K=r.useCallback(async()=>{const[{toolWindowService:R},{toolRegistry:M}]=await Promise.all([ht(()=>import("./tool-windows-Bp0hMtkJ.js").then(G=>G.b0),__vite__mapDeps([0,1]),import.meta.url),ht(()=>import("./tool-windows-Bp0hMtkJ.js").then(G=>G.a$),__vite__mapDeps([0,1]),import.meta.url)]),z=M.getManifestById("prompt-history");if(!z){Fe.trackPromptAction({action:"open_tool",surface:"ai_input_prompt_popover",promptType:t,status:"failed",metadata:{tool_id:"prompt-history",reason:"tool_not_found"}});return}a==null||a();const H=R.getToolState("prompt-history");console.info("[PromptHistoryPopover] open my prompts",{generationType:t,beforeStatus:H==null?void 0:H.status,beforeInstanceId:H==null?void 0:H.instanceId,beforeIsLauncher:H==null?void 0:H.isLauncher,beforeIsPinned:H==null?void 0:H.isPinned}),Fe.trackPromptAction({action:"open_tool",surface:"ai_input_prompt_popover",promptType:t,status:"success",metadata:{tool_id:z.id}}),S(!1),R.openTool(z,{componentProps:{initialCategory:t}});const Y=R.getToolState("prompt-history");console.info("[PromptHistoryPopover] requested my prompts open",{generationType:t,afterStatus:Y==null?void 0:Y.status,afterInstanceId:Y==null?void 0:Y.instanceId,afterIsLauncher:Y==null?void 0:Y.isLauncher,afterIsPinned:Y==null?void 0:Y.isPinned})},[t,a]);return u.jsxs("div",{ref:W,className:"prompt-history-popover",children:[u.jsxs("div",{className:"prompt-history-popover__actions",children:[u.jsx(gt,{content:L,showArrow:!1,children:u.jsx("button",{className:"prompt-history-popover__trigger","data-track":"ai_input_click_history",onMouseEnter:b,onMouseLeave:N,children:u.jsx(qr,{size:18})})}),l]}),_&&u.jsx("div",{className:"prompt-history-popover__panel-wrapper",onMouseEnter:b,onMouseLeave:N,children:u.jsx(Zr,{title:L,items:A,onSelect:F,onTogglePin:k,onDelete:J,onTitleClick:K,language:n,showCount:!0,analyticsSurface:"ai_input_prompt_popover",analyticsPromptType:t})}),y]})};function hi(t){var e;return!!((e=t.params)!=null&&e.longVideoMeta)}function gi(t){var e;return((e=t.params)==null?void 0:e.longVideoMeta)||null}class qt{constructor(){this.isInitialized=!1,this.batches=new Map,this.initTimestamp=0}static getInstance(){return qt.instance||(qt.instance=new qt),qt.instance}initialize(){this.isInitialized||(this.isInitialized=!0,this.initTimestamp=Date.now(),Co.observeTaskUpdates().subscribe(e=>{if(e.type==="taskUpdated"&&e.task.status===mt.COMPLETED&&e.task.type===Jr.VIDEO&&hi(e.task)){if((e.task.completedAt||0)<this.initTimestamp)return;this.handleSegmentCompleted(e.task).catch(l=>{console.error("[LongVideoChain] Error handling completed segment:",l)})}}))}async handleSegmentCompleted(e){var h;const n=gi(e);if(!n)return;const{segmentIndex:l,totalSegments:a,scripts:d,batchId:c}=n,g=(h=e.result)==null?void 0:h.url;let f=this.batches.get(c);if(f||(f={batchId:c,totalSegments:a,completedSegments:new Map,processedSegments:new Set,creatingNextFor:null,isMerging:!1,mergeCompleted:!1,scripts:d||[],characterReferenceUrls:n.characterReferenceUrls,characterDescription:n.characterDescription},this.batches.set(c,f)),!f.processedSegments.has(l)){if(f.processedSegments.add(l),g&&f.completedSegments.set(l,g),f.completedSegments.size===a){await this.mergeAndInsert(f);return}if(f.creatingNextFor!==l&&l<a){f.creatingNextFor=l;try{await this.createNextSegment(e,n,d,g,f.characterReferenceUrls,f.characterDescription)}finally{f.creatingNextFor=null}}}}async createNextSegment(e,n,l,a,d,c){const g=n.segmentIndex+1,f=l.find(y=>y.index===g);if(!f){console.error(`[LongVideoChain] Script not found for segment ${g}`);return}let h;if(a)try{h=(await Qr(a)).dataUrl}catch(y){console.error("[LongVideoChain] Failed to extract last frame:",y)}const m={...n,segmentIndex:g,needsLastFrame:g<n.totalSegments,characterReferenceUrls:d??n.characterReferenceUrls,characterDescription:c??n.characterDescription};ri(f,m,h)}async mergeAndInsert(e){if(!(e.isMerging||e.mergeCompleted)){e.isMerging=!0;try{const n=[];for(let c=1;c<=e.totalSegments;c++){const g=e.completedSegments.get(c);g&&n.push(g)}if(n.length===0){console.error("[LongVideoChain] No video URLs to merge");return}const l=this.extractTransitions(e),d=await ui(n,(c,g,f)=>{const h=f||`${g} ${c.toFixed(1)}%`},{transitions:l,transitionDuration:.5});await this.insertMergedVideo(d.url),e.mergeCompleted=!0,this.cleanupBatch(e.batchId)}catch(n){console.error("[LongVideoChain] Merge failed:",n),this.cleanupBatch(e.batchId)}finally{e.isMerging=!1}}}async insertMergedVideo(e){try{await ai("video",e)}catch(n){console.error("[LongVideoChain] Failed to insert video to canvas:",n)}}extractTransitions(e){return!e.scripts||e.scripts.length===0?[]:e.scripts.sort((n,l)=>n.index-l.index).slice(0,-1).map(n=>n.transition_hint||"cut")}cleanupBatch(e){const n=this.batches.get(e);n&&(n.completedSegments.clear(),n.processedSegments.clear(),this.batches.delete(e))}getBatchStatus(e){const n=this.batches.get(e);return n?{completed:n.completedSegments.size,total:n.totalSegments,isMerging:n.isMerging,mergeCompleted:n.mergeCompleted}:null}}const wi=qt.getInstance();function xi(){wi.initialize()}function Es(){return`img-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}async function As(t){return new Promise((e,n)=>{const l=new Image,a=t.startsWith("http")&&!t.startsWith(location.origin);l.crossOrigin="anonymous",l.onload=()=>e(l),l.onerror=()=>{n(a?new Error("无法加载外部图片,可能是跨域 (CORS) 限制。请先下载图片到本地后再操作。"):new Error("图片加载失败,请检查图片是否有效"))},l.src=t})}function yi(t,e=.92){return t.toDataURL("image/jpeg",e)}class Ii{async split(e,n){const{rows:l,cols:a}=n;if(l<1||a<1)throw new Error("Grid rows and cols must be at least 1");const d=await As(e),c=d.naturalWidth,g=d.naturalHeight,f=Math.floor(c/a),h=Math.floor(g/l),m=[];for(let y=0;y<l;y++)for(let _=0;_<a;_++){const S=y*a+_,C=_*f,W=y*h,E=document.createElement("canvas");E.width=f,E.height=h;const T=E.getContext("2d");if(!T)throw new Error("Failed to get canvas 2d context");T.drawImage(d,C,W,f,h,0,0,f,h);const L=yi(E);m.push({id:Es(),imageData:L,originalIndex:S,width:f,height:h})}return m}async splitToBlob(e,n){const{rows:l,cols:a}=n;if(l<1||a<1)throw new Error("Grid rows and cols must be at least 1");const d=await As(e),c=d.naturalWidth,g=d.naturalHeight,f=Math.floor(c/a),h=Math.floor(g/l),m=[];for(let y=0;y<l;y++)for(let _=0;_<a;_++){const S=y*a+_,C=_*f,W=y*h,E=document.createElement("canvas");E.width=f,E.height=h;const T=E.getContext("2d");if(!T)throw new Error("Failed to get canvas 2d context");T.drawImage(d,C,W,f,h,0,0,f,h);const L=await new Promise((b,N)=>{E.toBlob(F=>{F?b(F):N(new Error("Failed to create blob"))},"image/png",.92)}),A=URL.createObjectURL(L);m.push({id:Es(),imageData:A,originalIndex:S,width:f,height:h})}return m}revokeBlobUrls(e){for(const n of e)n.imageData.startsWith("blob:")&&URL.revokeObjectURL(n.imageData)}}const Rs=new Ii;function We(t,e){return Math.random()*(e-t)+t}function Yn(t){const e=[...t];for(let n=e.length-1;n>0;n--){const l=Math.floor(Math.random()*(n+1));[e[n],e[l]]=[e[l],e[n]]}return e}class bi{calculate(e,n,l,a){switch(n){case"scattered":return this.scatteredLayout(e,l,a);case"grid":return this.gridLayout(e,l);case"circular":return this.circularLayout(e,l,a);case"inspiration-board":return this.inspirationBoardLayout(e,l,a);default:return console.warn(`[LayoutEngine] Unknown layout style: ${n}, falling back to grid`),this.gridLayout(e,l)}}scatteredLayout(e,n,l){const{maxRotation:a=15,minScale:d=.85,maxScale:c=1.15,positionJitter:g=40}=l||{},{canvasWidth:f,canvasHeight:h,startX:m,startY:y,gap:_=20}=n,S=e.length,C=Math.ceil(Math.sqrt(S)),W=Math.ceil(S/C),E=Math.max(...e.map(k=>k.width)),T=Math.max(...e.map(k=>k.height)),L=f-_*2,A=h-_*2,b=L/C,N=A/W,F=Math.min((b-_)/E,(N-_)/T,1),J=Yn(e.map((k,K)=>K));return e.map((k,K)=>{const R=Math.floor(K/C),M=K%C,z=m+_+M*b+b/2,H=y+_+R*N+N/2,Y=We(-g,g),G=We(-g,g),te=We(-a,a),re=We(d,c),it=F*re,Ie=k.width*it,Je=k.height*it;return{...k,x:z+Y-Ie/2,y:H+G-Je/2,rotation:te,scale:it,zIndex:J[K]}})}gridLayout(e,n){const{canvasWidth:l,canvasHeight:a,startX:d,startY:c,gap:g=20}=n,f=e.length,h=Math.ceil(Math.sqrt(f)),m=Math.ceil(f/h),y=Math.max(...e.map(L=>L.width)),_=Math.max(...e.map(L=>L.height)),S=l-g*(h+1),C=a-g*(m+1),W=S/h,E=C/m,T=Math.min(W/y,E/_,1);return e.map((L,A)=>{const b=Math.floor(A/h),N=A%h,F=L.width*T,J=L.height*T,k=d+g+N*(W+g),K=c+g+b*(E+g),R=k+(W-F)/2,M=K+(E-J)/2;return{...L,x:R,y:M,rotation:0,scale:T,zIndex:A}})}circularLayout(e,n,l){const{centerIndex:a=-1,radius:d,startAngle:c=-90}=l||{},{canvasWidth:g,canvasHeight:f,startX:h,startY:m}=n,y=h+g/2,_=m+f/2,S=a>=0&&a<e.length?e.filter((M,z)=>z!==a):e,C=a>=0&&a<e.length?e[a]:null,W=Math.max(...e.map(M=>M.width)),E=Math.max(...e.map(M=>M.height)),T=Math.max(W,E),L=S.length,A=T*.8,b=L*T*1.2,N=Math.max(A,b/(2*Math.PI)),F=d||Math.min(N,Math.min(g,f)/2-T/2),J=Math.min(g,f),k=Math.min(J*.25/T,1),K=[];if(C){const M=C.width*k*1.2,z=C.height*k*1.2;K.push({...C,x:y-M/2,y:_-z/2,rotation:0,scale:k*1.2,zIndex:L})}const R=360/L;return S.forEach((M,z)=>{const Y=(c+z*R)*Math.PI/180,G=M.width*k,te=M.height*k,re=y+F*Math.cos(Y)-G/2,it=_+F*Math.sin(Y)-te/2;K.push({...M,x:re,y:it,rotation:0,scale:k,zIndex:z})}),K}inspirationBoardLayout(e,n,l){const{minWidthRatio:a=Ln.minWidthRatio,maxWidthRatio:d=Ln.maxWidthRatio,maxRotation:c=Ln.maxRotation,gap:g=Ln.gap}=l||{},{canvasWidth:f,canvasHeight:h,startX:m,startY:y}=n,_=e.length,S=this.assignSizeCategories(_),C=e.reduce((N,F)=>N+F.width,0)/_,W=e.reduce((N,F)=>N+F.height,0)/_,E=f||1200,T=h||600,L=Math.min(E*.25/C,T*.4/W,1),A=this.calculateInspirationBoardPositions(_,E,T,g),b=Yn(e.map((N,F)=>F));return e.map((N,F)=>{const J=A[F],k=S[F];let K;switch(k){case"large":K=We(1.2,d);break;case"medium":K=We(.9,1.1);break;case"small":K=We(a,.85);break;default:K=1}const R=L*K,M=We(-c,c),z=We(-20,20),H=We(-15,15),Y=N.width*R,G=N.height*R;return{...N,x:m+J.x+z-Y/2,y:y+J.y+H-G/2,rotation:M,scale:R,zIndex:b[F]}})}assignSizeCategories(e){const n=[],l=Math.max(2,Math.floor(e*.25)),a=Math.max(2,Math.floor(e*.25)),d=e-l-a;for(let c=0;c<l;c++)n.push("large");for(let c=0;c<d;c++)n.push("medium");for(let c=0;c<a;c++)n.push("small");return Yn(n)}calculateInspirationBoardPositions(e,n,l,a){const d=[],c=Math.ceil(e/4),g=Math.ceil(e/c),f=(n-a*2)/g,h=(l-a*2)/c;for(let m=0;m<e;m++){const y=Math.floor(m/g),_=m%g,S=a+_*f+f/2,C=a+y*h+h/2,W=We(-f*.3,f*.3),E=We(-h*.2,h*.2);d.push({x:S+W,y:C+E})}return Yn(d)}calculateRequiredSize(e,n,l=.5){const a=e.length,d=Math.ceil(Math.sqrt(a)),c=Math.ceil(a/d),g=Math.max(...e.map(S=>S.width)),f=Math.max(...e.map(S=>S.height)),h=20,m=n==="scattered"?60:40,y=d*g*l+(d+1)*h+m*2,_=c*f*l+(c+1)*h+m*2;return{width:y,height:_}}}const Ds=new bi;class _i{constructor(){this.board=null}setBoard(e){this.board=e}getBoard(){return this.board}async generate(e){const{theme:n,gridConfig:l=Fn.gridConfig,layoutStyle:a=Fn.layoutStyle,imageSize:d=Fn.imageSize,imageQuality:c=Fn.imageQuality}=e;try{const g=this.buildPrompt(n,l),f=await ea.generateImage(g,{size:d,quality:c,response_format:"url"});if(!f.data||f.data.length===0)throw new Error("AI 生成图片失败:未返回图片数据");const h=f.data[0].url||f.data[0].b64_json,m=h&&ta(String(h));if(!m)throw new Error("AI 生成图片失败:未返回图片 URL");const y=await ds.getImageForAI(m),_=y.type==="base64"?y.value:m,S=await Rs.split(_,l),C=this.calculateLayoutParams(S),W=Ds.calculate(S,a,C);return{success:!0,originalImageUrl:m,elements:W}}catch(g){return console.error("[GridImageService] Generation failed:",g),{success:!1,error:g.message||"宫格图生成失败"}}}async processExistingImage(e,n,l="scattered"){try{const a=await ds.getImageForAI(e),d=a.type==="base64"?a.value:e,c=await Rs.split(d,n),g=this.calculateLayoutParams(c),f=Ds.calculate(c,l,g);return{success:!0,originalImageUrl:e,elements:f}}catch(a){return console.error("[GridImageService] Processing failed:",a),{success:!1,error:a.message||"宫格图处理失败"}}}async insertToBoard(e,n){if(!this.board)throw new Error("画板未初始化,请先调用 setBoard");let l=(n==null?void 0:n[0])??100,a=n==null?void 0:n[1];if(a===void 0){const c=na(this.board);a=(c==null?void 0:c[1])??100,l=(c==null?void 0:c[0])??l}const d=[...e].sort((c,g)=>c.zIndex-g.zIndex);for(const c of d){const g=l+c.x,f=a+c.y,h={url:c.imageData,width:c.width*c.scale,height:c.height*c.scale};oa.insertImage(this.board,h,[g,f])}}async generateAndInsert(e,n){const l=await this.generate(e);return l.success&&l.elements&&await this.insertToBoard(l.elements,n),l}buildPrompt(e,n){const l=sa.zh;return l(e,n.rows,n.cols)}calculateLayoutParams(e){const n=e.reduce((S,C)=>S+C.width,0),l=e.reduce((S,C)=>S+C.height,0),a=e.length,d=Math.ceil(Math.sqrt(a)),c=Math.ceil(a/d),g=n/a,f=l/a,h=30,m=50,y=d*g+(d+1)*h+m*2,_=c*f+(c+1)*h+m*2;return{canvasWidth:y,canvasHeight:_,startX:0,startY:0,gap:h}}}const Ns=new _i;function ki(t){return{cleanText:t,selectedAudioModel:null,selectedImageModel:null,selectedVideoModel:null,selectedParams:[],selectedCount:null}}function vi(){const t=to.get();return(t==null?void 0:t.imageModelName)||At()}function Si(){const t=to.get();return(t==null?void 0:t.videoModelName)||Yt()}function Ci(){const t=to.get();return(t==null?void 0:t.audioModelName)||Xt()}function js(){const t=to.get();return(t==null?void 0:t.textModelName)||Mo()}function Mi(t,e,n){if(e.length>0)return e.join(`
3
+ `);if(t){if(n===1)return"请仔细分析这张图片的内容、风格、构图、色调和艺术特点,推测生成这张图片可能使用的原始提示词,然后基于你推测的提示词重新生成一张全新的、风格相似但内容不完全相同的图片。不要直接复制原图。";if(n>1)return"请分析这些图片的主题、风格和视觉元素,找出它们之间的共同点或关联性,然后创造性地将它们融合成一张全新的、和谐统一的图片。融合时请保持各图片的精华元素,确保最终作品在构图、色调和风格上协调一致。"}return""}function wn(t){return t.replace(":","x").toLowerCase()}function Ti(t,e,n){const l=e.texts.length>0||e.images.length>0||e.videos.length>0||e.graphics.length>0,a=e.texts,d=e.images.length+e.graphics.length,c=ki(t),g=c.cleanText.trim().length>0;let f=(n==null?void 0:n.generationType)||"image",h,m=!1;if(n!=null&&n.modelId){const b=at(n.modelId);n.generationType||((b==null?void 0:b.type)==="video"?f="video":(b==null?void 0:b.type)==="audio"?f="audio":(b==null?void 0:b.type)==="text"?f="text":f="image"),h=n.modelId,m=!0}else c.selectedAudioModel?(f="audio",h=c.selectedAudioModel,m=!0):c.selectedVideoModel?(f="video",h=c.selectedVideoModel,m=!0):c.selectedImageModel?(f="image",h=c.selectedImageModel,m=!0):!l&&g&&!(n!=null&&n.generationType)?(f="agent",h=js()):f==="video"?h=Si():f==="audio"?h=Ci():f==="text"||f==="agent"?h=js():h=vi();let y;(n==null?void 0:n.generationType)==="image"||(n==null?void 0:n.generationType)==="video"||(n==null?void 0:n.generationType)==="audio"||(n==null?void 0:n.generationType)==="text"?y="direct_generation":(n==null?void 0:n.generationType)==="agent"?y="agent_flow":y=g?"agent_flow":"direct_generation";const _=c.cleanText.trim(),S=a.join(`
4
+ `).trim();let C;if(S&&_?C=`${S}
5
+
6
+ ${_}`:_?C=_:S?C=S:l&&d>0?C=f==="text"?"":Mi(l,[],d):C="",h.startsWith("mj")&&(n!=null&&n.params)){const b=fi(n.params);b&&(C=[C,b].filter(Boolean).join(" "))}const W=(n==null?void 0:n.count)||c.selectedCount||1;let E,T,L;if(n!=null&&n.params){f!=="audio"&&f!=="text"&&f!=="agent"&&!h.startsWith("mj")&&n.params.size&&(E=wn(n.params.size)),n.params.duration&&(T=n.params.duration);const b={};for(const[N,F]of Object.entries(n.params))N!=="size"&&N!=="duration"&&F&&(b[N]=F);Object.keys(b).length>0&&(L=b)}if(!E&&(n!=null&&n.size)&&n.size!=="auto"&&(E=wn(n.size)),!E&&(n==null?void 0:n.size)!=="auto"){for(const b of c.selectedParams)if(b.id==="size"){E=wn(b.value);break}}if(!T){for(const b of c.selectedParams)if(b.id==="duration"){T=b.value;break}}if(!E&&(n==null?void 0:n.size)!=="auto"&&f!=="text"&&f!=="agent"&&f!=="audio"){const b=at(h);if((b==null?void 0:b.type)==="image"&&b.imageDefaults)E="1x1";else if((b==null?void 0:b.type)==="video"&&b.videoDefaults){const N=yo(h,(n==null?void 0:n.modelRef)||h,n==null?void 0:n.params);E=wn(N.size||b.videoDefaults.size),T||(T=N.duration||b.videoDefaults.duration)}else if(f==="image")E="1x1";else if(f==="video"){const N=yo(h,(n==null?void 0:n.modelRef)||h,n==null?void 0:n.params);E=wn(N.size),T||(T=N.duration)}}!T&&f==="video"&&(T=yo(h,(n==null?void 0:n.modelRef)||h,n==null?void 0:n.params).duration);const A=c.cleanText.trim();return{scenario:y,generationType:f,modelId:h,modelRef:(n==null?void 0:n.modelRef)||null,defaultModels:n==null?void 0:n.defaultModels,defaultModelRefs:n==null?void 0:n.defaultModelRefs,isModelExplicit:m,prompt:C,userInstruction:A,rawInput:t,count:W,size:E,duration:T,extraParams:L,parseResult:c,hasExtraContent:g,selection:e,knowledgeContextRefs:n==null?void 0:n.knowledgeContextRefs}}const vo={id:rt,name:"自动"},zs=Eo.map(t=>({id:t.id,name:t.name,isSystem:!0,mcpTool:t.mcpTool,outputType:t.outputType})),Pi=({value:t,onSelect:e,onSelectSkill:n,onAddSkill:l,disabled:a=!1})=>{const[d,c]=r.useState(!1),[g,f]=r.useState([]),[h,m]=r.useState([]),[y,_]=r.useState(""),[S,C]=r.useState(0),W=r.useRef(null),E=r.useRef(null),T=r.useCallback(async()=>{try{const z=(await Jn.getAllDirectories()).find(te=>te.name==="Skill");if(!z)return;const H=await Jn.getNoteMetasByDirectory(z.id),Y=new Set(Eo.map(te=>te.id)),G=H.filter(te=>!Y.has(te.id)).map(te=>{var re;return{id:te.id,name:te.title,outputType:((re=te.metadata)==null?void 0:re.outputType)||void 0}});f(G)}catch{}},[]),L=r.useCallback(async()=>{try{const M=await Ao.getAllExternalSkillsMeta(),z=new Set(Eo.map(Y=>Y.id)),H=M.filter(Y=>!z.has(Y.id)).map(Y=>({id:Y.id,name:Y.name,isExternal:!0,source:Y.source,outputType:Y.outputType}));m(H)}catch{}},[]);r.useEffect(()=>{if(d){T(),L(),_("");const z=[vo,...zs,...h,...g].findIndex(H=>H.id===t);C(z>=0?z:0),setTimeout(()=>{var H;return(H=E.current)==null?void 0:H.focus()},50)}},[d,t]),r.useEffect(()=>{if(d&&W.current){const M=W.current.children[S];M&&M.scrollIntoView({block:"nearest"})}},[S,d]);const A=r.useCallback(M=>{M.preventDefault(),!a&&c(z=>!z)},[a]),b=r.useCallback(M=>{e(M.id),n==null||n(M),c(!1)},[e,n]),N=r.useCallback(M=>{M.stopPropagation(),c(!1),l()},[l]),F=[vo,...zs,...h,...g],J=y.trim()?F.filter(M=>M.name.toLowerCase().includes(y.toLowerCase())||M.id.toLowerCase().includes(y.toLowerCase())):F,k=F.length>15,K=r.useCallback(M=>M==="Escape"?(c(!1),!0):M==="ArrowDown"?(C(z=>z<J.length-1?z+1:0),!0):M==="ArrowUp"?(C(z=>z>0?z-1:J.length-1),!0):M==="Enter"||M===" "||M==="Tab"?(S<J.length&&b(J[S]),!0):!1,[S,J,b]),R=J.find(M=>M.id===t)||vo;return u.jsx(ra,{isOpen:d,setIsOpen:c,disabled:a,openKeys:["Enter"," ","ArrowDown","ArrowUp"],onOpenKey:K,children:({containerRef:M,menuRef:z,menuStyle:H,handleTriggerKeyDown:Y})=>u.jsxs("div",{className:"skill-dropdown",ref:M,children:[u.jsx(gt,{content:`Skill: ${R.name}`,showArrow:!1,children:u.jsxs("button",{className:`skill-dropdown__trigger ${d?"skill-dropdown__trigger--open":""}`,onMouseDown:A,onKeyDown:Y,disabled:a,type:"button",children:[u.jsx("span",{className:"skill-dropdown__icon-prefix",children:u.jsx(us,{size:14})}),u.jsx("span",{className:"skill-dropdown__label",children:R.name}),u.jsx(ia,{size:14,className:`skill-dropdown__chevron ${d?"skill-dropdown__chevron--open":""}`})]})}),d&&aa.createPortal(u.jsxs("div",{ref:z,className:`skill-dropdown__menu ${Ys}`,style:{...H,zIndex:ca.DROPDOWN_PORTAL},onMouseDown:G=>G.stopPropagation(),onClick:G=>G.stopPropagation(),children:[u.jsxs("div",{className:"skill-dropdown__header",children:[u.jsx(us,{size:14}),u.jsx("span",{children:"Skill"})]}),k&&u.jsx("div",{className:"skill-dropdown__search",children:u.jsx("input",{ref:E,type:"text",className:"skill-dropdown__search-input",placeholder:"搜索 Skill...",value:y,onChange:G=>{_(G.target.value),C(0)},onMouseDown:G=>G.stopPropagation(),onKeyDown:G=>G.stopPropagation()})}),u.jsx("div",{ref:W,className:"skill-dropdown__list",children:J.map((G,te)=>{const re=G.id===t,it=te===S;return u.jsxs("div",{className:`skill-dropdown__item ${re?"skill-dropdown__item--selected":""} ${it?"skill-dropdown__item--highlighted":""}`,onClick:()=>b(G),onMouseEnter:()=>C(te),children:[u.jsx("span",{className:"skill-dropdown__item-label",children:G.name}),G.outputType==="image"&&u.jsx(la,{size:12,className:"skill-dropdown__item-image-icon"}),G.outputType==="video"&&u.jsx(da,{size:12,className:"skill-dropdown__item-image-icon"}),G.outputType==="ppt"&&u.jsx(ua,{size:12,className:"skill-dropdown__item-image-icon"}),G.outputType==="audio"&&u.jsx(fa,{size:12,className:"skill-dropdown__item-image-icon"}),G.isSystem&&u.jsx("span",{className:"skill-dropdown__item-badge",children:"系统"}),G.isExternal&&u.jsx("span",{className:"skill-dropdown__item-badge",children:"系统"}),re&&u.jsx(pa,{size:14,className:"skill-dropdown__item-check"})]},G.id)})}),u.jsx("div",{className:"skill-dropdown__divider"}),u.jsxs("div",{className:"skill-dropdown__add-btn",onClick:N,onMouseDown:G=>G.preventDefault(),children:[u.jsx(ma,{size:14}),u.jsx("span",{children:"添加 Skill"})]})]}),document.body)]})})},Os=["image","video","audio"];function Ei(t){if(t==="image"||t==="video"||t==="audio")return t}function Et(t){if(!t)return[];const e=Ei(t.outputType);if(e)return[e];if(t.outputType==="text")return[];const n=new Set,l=ha(t.mcpTool);l&&n.add(l);const a=[t.id,t.name,t.description,t.content].filter(Boolean).join(`
7
+ `);if(a)for(const d of Os)Ai(d).some(g=>a.includes(g))&&n.add(d);return Os.filter(d=>n.has(d))}function Ai(t){switch(t){case"image":return["generate_image","generate_grid_image","generate_photo_wall","generate_inspiration_board"];case"video":return["generate_video","generate_long_video"];case"audio":return["generate_audio"]}}var Ze=(t=>(t.VIDEO="视频创作",t.IMAGE="图片生成",t.MINDMAP="思维导图",t.FLOWCHART="流程图",t.PPT="PPT大纲",t.GRID="宫格图",t.SVG="SVG矢量图",t))(Ze||{});const xn=3,Ri="data:image/svg+xml;utf8,"+encodeURIComponent(`
8
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 420 420">
9
+ <defs>
10
+ <linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
11
+ <stop offset="0" stop-color="#f8f4ff"/>
12
+ <stop offset="1" stop-color="#fff7ed"/>
13
+ </linearGradient>
14
+ <linearGradient id="accent" x1="0" y1="0" x2="1" y2="1">
15
+ <stop offset="0" stop-color="#a855f7"/>
16
+ <stop offset="1" stop-color="#f97316"/>
17
+ </linearGradient>
18
+ </defs>
19
+ <rect width="420" height="420" rx="34" fill="url(#bg)"/>
20
+ <rect x="38" y="46" width="344" height="316" rx="22" fill="#ffffff" opacity="0.95"/>
21
+ <g transform="translate(58 116)" stroke="#d8b4fe" stroke-width="3">
22
+ <rect width="86" height="72" rx="14" fill="#fff7ed"/>
23
+ <rect x="108" width="86" height="72" rx="14" fill="#f5f3ff"/>
24
+ <rect x="216" width="86" height="72" rx="14" fill="#fffbeb"/>
25
+ <rect y="92" width="86" height="72" rx="14" fill="#fef2f2"/>
26
+ <rect x="108" y="92" width="86" height="72" rx="14" fill="#eef2ff"/>
27
+ <rect x="216" y="92" width="86" height="72" rx="14" fill="#fff7ed"/>
28
+ <rect y="184" width="86" height="72" rx="14" fill="#f5f3ff"/>
29
+ <rect x="108" y="184" width="86" height="72" rx="14" fill="#fffbeb"/>
30
+ <rect x="216" y="184" width="86" height="72" rx="14" fill="#fef2f2"/>
31
+ </g>
32
+ <circle cx="101" cy="152" r="18" fill="#f97316"/>
33
+ <circle cx="209" cy="152" r="18" fill="#a855f7"/>
34
+ <circle cx="317" cy="152" r="18" fill="#f59e0b"/>
35
+ <circle cx="101" cy="244" r="18" fill="#ef4444"/>
36
+ <circle cx="209" cy="244" r="18" fill="#6366f1"/>
37
+ <circle cx="317" cy="244" r="18" fill="#fb923c"/>
38
+ <circle cx="101" cy="336" r="18" fill="#8b5cf6"/>
39
+ <circle cx="209" cy="336" r="18" fill="#eab308"/>
40
+ <circle cx="317" cy="336" r="18" fill="#f43f5e"/>
41
+ <path d="M356 78l8 10 12-20" fill="none" stroke="url(#accent)" stroke-width="7" stroke-linecap="round" stroke-linejoin="round"/>
42
+ </svg>`),Di="data:image/svg+xml;utf8,"+encodeURIComponent(`
43
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 420 420">
44
+ <defs>
45
+ <linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
46
+ <stop offset="0" stop-color="#eef5ff"/>
47
+ <stop offset="1" stop-color="#e7e2ff"/>
48
+ </linearGradient>
49
+ <linearGradient id="accent" x1="0" y1="0" x2="1" y2="1">
50
+ <stop offset="0" stop-color="#3b82f6"/>
51
+ <stop offset="1" stop-color="#8b5cf6"/>
52
+ </linearGradient>
53
+ </defs>
54
+ <rect width="420" height="420" rx="34" fill="url(#bg)"/>
55
+ <rect x="34" y="44" width="352" height="318" rx="22" fill="#ffffff" opacity="0.94"/>
56
+ <rect x="34" y="44" width="352" height="52" rx="22" fill="#e8edff"/>
57
+ <rect x="56" y="126" width="160" height="14" rx="7" fill="url(#accent)"/>
58
+ <rect x="56" y="164" width="274" height="12" rx="6" fill="#c7d2fe"/>
59
+ <rect x="56" y="192" width="220" height="12" rx="6" fill="#dbeafe"/>
60
+ <rect x="56" y="244" width="100" height="70" rx="12" fill="#eff6ff" stroke="#93c5fd"/>
61
+ <rect x="186" y="244" width="100" height="70" rx="12" fill="#f5f3ff" stroke="#a78bfa"/>
62
+ <rect x="316" y="244" width="52" height="70" rx="12" fill="#ecfeff" stroke="#67e8f9"/>
63
+ <circle cx="82" cy="279" r="14" fill="#3b82f6"/>
64
+ <circle cx="236" cy="279" r="14" fill="#8b5cf6"/>
65
+ <circle cx="342" cy="279" r="14" fill="#06b6d4"/>
66
+ <path d="M158 279h24M288 279h24" stroke="#94a3b8" stroke-width="8" stroke-linecap="round"/>
67
+ <rect x="56" y="334" width="312" height="10" rx="5" fill="#dbeafe"/>
68
+ </svg>`),Ni="data:image/svg+xml;utf8,"+encodeURIComponent(`
69
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 420 420">
70
+ <defs>
71
+ <linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
72
+ <stop offset="0" stop-color="#f0fdf4"/>
73
+ <stop offset="1" stop-color="#ecfeff"/>
74
+ </linearGradient>
75
+ <linearGradient id="lineA" x1="0" y1="0" x2="1" y2="1">
76
+ <stop offset="0" stop-color="#22c55e"/>
77
+ <stop offset="1" stop-color="#06b6d4"/>
78
+ </linearGradient>
79
+ </defs>
80
+ <rect width="420" height="420" rx="34" fill="url(#bg)"/>
81
+ <rect x="34" y="48" width="352" height="312" rx="22" fill="#ffffff" opacity="0.94"/>
82
+ <g fill="none" stroke="url(#lineA)" stroke-width="3" stroke-linecap="round">
83
+ <path d="M210 210C170 190 150 156 126 128"/>
84
+ <path d="M210 210C170 220 144 252 116 286"/>
85
+ <path d="M210 210C250 184 278 150 312 128"/>
86
+ <path d="M210 210C252 224 280 254 322 292"/>
87
+ <path d="M126 128C108 116 94 110 78 104"/>
88
+ <path d="M312 128C332 116 346 110 362 104"/>
89
+ <path d="M116 286C98 300 82 310 66 324"/>
90
+ <path d="M322 292C342 302 356 312 372 326"/>
91
+ </g>
92
+ <rect x="168" y="178" width="84" height="64" rx="18" fill="#ecfdf5" stroke="#22c55e" stroke-width="3"/>
93
+ <circle cx="210" cy="210" r="16" fill="#22c55e"/>
94
+ <rect x="76" y="98" width="98" height="36" rx="13" fill="#f0fdf4" stroke="#86efac"/>
95
+ <rect x="72" y="270" width="102" height="36" rx="13" fill="#eff6ff" stroke="#93c5fd"/>
96
+ <rect x="262" y="98" width="102" height="36" rx="13" fill="#ecfeff" stroke="#67e8f9"/>
97
+ <rect x="266" y="276" width="108" height="36" rx="13" fill="#f0fdfa" stroke="#5eead4"/>
98
+ <circle cx="96" cy="116" r="7" fill="#22c55e"/>
99
+ <circle cx="96" cy="288" r="7" fill="#3b82f6"/>
100
+ <circle cx="286" cy="116" r="7" fill="#06b6d4"/>
101
+ <circle cx="290" cy="294" r="7" fill="#14b8a6"/>
102
+ <rect x="116" y="112" width="42" height="7" rx="3.5" fill="#bbf7d0"/>
103
+ <rect x="116" y="284" width="44" height="7" rx="3.5" fill="#bfdbfe"/>
104
+ <rect x="306" y="112" width="42" height="7" rx="3.5" fill="#a5f3fc"/>
105
+ <rect x="310" y="290" width="46" height="7" rx="3.5" fill="#99f6e4"/>
106
+ </svg>`),Ws=[{id:"grid-emoji",title:"智能拆分宫格图",description:"宫格图,风格统一",prompt:"生成16宫格猫咪表情包",category:Ze.GRID,imageUrl:Ri,badgeColor:"badge--grid",skillId:"generate_grid_image"},{id:"ppt-outline",title:"生成PPT大纲",description:"用参考图片规划配图与页面提示词",prompt:"生成一份关于「AI 创作工作流」的 PPT 大纲;如果已上传参考图片,请将参考图片作为配图和视觉风格参考。",category:Ze.PPT,imageUrl:Di,badgeColor:"badge--ppt",skillId:"generate_ppt"},{id:"mindmap-project",title:"项目规划脑图",description:"快速生成结构化的思维导图,梳理项目计划",prompt:"创建一个关于「移动应用开发」的思维导图,包含需求分析、UI设计、前端开发、后端开发、测试上线等主要分支",category:Ze.MINDMAP,imageUrl:Ni,badgeColor:"badge--mindmap",skillId:"generate_mindmap"}],Js={[Ze.VIDEO]:{bg:"#fce7f3",text:"#be185d"},[Ze.IMAGE]:{bg:"#dbeafe",text:"#1d4ed8"},[Ze.MINDMAP]:{bg:"#dcfce7",text:"#15803d"},[Ze.FLOWCHART]:{bg:"#fef3c7",text:"#b45309"},[Ze.PPT]:{bg:"#dbeafe",text:"#1d4ed8"},[Ze.GRID]:{bg:"#f3e8ff",text:"#7c3aed"},[Ze.SVG]:{bg:"#e0e7ff",text:"#4338ca"}},ji=({template:t,onClick:e})=>{const n=Js[t.category],l=a=>{a.preventDefault()};return u.jsxs("div",{className:"inspiration-card",onMouseDown:l,onClick:e,"data-track":`inspiration_click_${t.id}`,children:[u.jsxs("div",{className:"inspiration-card__image-wrapper",children:[u.jsx("img",{src:t.imageUrl,alt:t.title,className:"inspiration-card__image",loading:"lazy"}),u.jsx("span",{className:"inspiration-card__badge",style:{backgroundColor:n.bg,color:n.text},children:t.category}),u.jsx("div",{className:"inspiration-card__hover-overlay",children:u.jsx("div",{className:"inspiration-card__arrow",children:u.jsx(ga,{size:16})})})]}),u.jsxs("div",{className:"inspiration-card__content",children:[u.jsx("h3",{className:"inspiration-card__title",children:t.title}),u.jsx("p",{className:"inspiration-card__description",children:t.description})]})]})},Ls="aitu_hide_inspiration_board",zi=({isCanvasEmpty:t,onSelectPrompt:e,onOpenPromptTool:n,visible:l=!0,className:a=""})=>{const[d,c]=r.useState(0),[g,f]=r.useState(!1),[h,m]=r.useState("board"),[y,_]=r.useState(null);r.useEffect(()=>{localStorage.getItem(Ls)==="true"&&f(!0)},[]);const S=Math.ceil(Ws.length/xn),C=S>1,W=Ws.slice(d*xn,(d+1)*xn),E=r.useCallback(k=>{k.preventDefault(),k.stopPropagation(),c(K=>(K-1+S)%S)},[S]),T=r.useCallback(k=>{k.preventDefault(),k.stopPropagation(),c(K=>(K+1)%S)},[S]),L=r.useCallback(k=>{_(k),m("guide"),e({prompt:k.prompt,modelType:"agent",skillId:k.skillId,templateId:k.id,title:k.title,category:k.category})},[e]),A=r.useCallback(k=>{k.preventDefault(),k.stopPropagation(),m("board")},[]),b=r.useCallback(k=>{k.preventDefault(),k.stopPropagation(),m("board"),_(null),f(!0),localStorage.setItem(Ls,"true")},[]),N=r.useCallback(k=>{k.preventDefault(),k.stopPropagation(),tt.info("请点击右下角真正的发送按钮开始生成")},[]);if(!t||!l||g)return null;const F=h==="guide"&&y,J=y?Js[y.category]:null;return u.jsxs("div",{className:`inspiration-board ${F?"inspiration-board--guide":""} ${a}`,"data-testid":"inspiration-board",children:[u.jsxs("div",{className:"inspiration-board__header",children:[F?u.jsxs("div",{className:"inspiration-board__guide-title-group",children:[u.jsxs("button",{className:"inspiration-board__back-btn",onMouseDown:k=>k.preventDefault(),onClick:A,"aria-label":"返回灵感创意","data-testid":"inspiration-guide-back","data-track":"inspiration_click_guide_back",children:[u.jsx(wa,{size:15}),u.jsx("span",{children:"返回"})]}),u.jsx("h3",{className:"inspiration-board__title",children:"确认后发送"})]}):u.jsx("h3",{className:"inspiration-board__title",children:"灵感创意"}),u.jsx(gt,{content:"不再提示",showArrow:!1,children:u.jsxs("button",{className:"inspiration-board__hide-btn",onClick:b,onMouseDown:k=>k.preventDefault(),"data-track":"inspiration_click_hide",children:[u.jsx(xa,{size:14}),u.jsx("span",{children:"不再提示"})]})}),!F&&n&&u.jsx(gt,{content:"提示词工具",showArrow:!1,children:u.jsxs("button",{className:"inspiration-board__prompt-btn",onClick:n,onMouseDown:k=>k.preventDefault(),"data-track":"inspiration_click_prompt_tool",children:[u.jsx(ya,{size:14}),u.jsx("span",{children:"提示词"})]})}),!F&&C&&u.jsxs("div",{className:"inspiration-board__pagination",children:[u.jsxs("span",{className:"inspiration-board__page-indicator",children:[d+1," / ",S]}),u.jsxs("div",{className:"inspiration-board__nav-buttons",children:[u.jsx("button",{className:"inspiration-board__nav-btn",onMouseDown:k=>k.preventDefault(),onClick:E,"aria-label":"上一页","data-track":"inspiration_click_prev",children:u.jsx(Ia,{size:16})}),u.jsx("button",{className:"inspiration-board__nav-btn",onMouseDown:k=>k.preventDefault(),onClick:T,"aria-label":"下一页","data-track":"inspiration_click_next",children:u.jsx(ba,{size:16})})]})]})]}),F?u.jsx("div",{className:"inspiration-board__guide","data-testid":"inspiration-send-guide",children:u.jsxs("div",{className:"inspiration-board__guide-main",children:[u.jsxs("div",{className:"inspiration-board__guide-summary",children:[u.jsx("img",{src:y.imageUrl,alt:y.title,className:"inspiration-board__guide-image",loading:"lazy"}),u.jsxs("div",{className:"inspiration-board__guide-content",children:[J&&u.jsx("span",{className:"inspiration-board__guide-badge",style:{backgroundColor:J.bg,color:J.text},children:y.category}),u.jsx("h4",{className:"inspiration-board__guide-name",children:y.title}),u.jsx("p",{className:"inspiration-board__guide-description",children:y.description})]})]}),u.jsxs("div",{className:"inspiration-board__guide-action",children:[u.jsxs("div",{className:"inspiration-board__guide-cue",children:[u.jsx(_a,{className:"inspiration-board__guide-pointer",size:26,"aria-hidden":"true"}),u.jsx(gt,{content:"请点击右下角真正的发送按钮",showArrow:!1,children:u.jsx("button",{type:"button",className:"inspiration-board__guide-send-preview",onClick:N,onMouseDown:k=>k.preventDefault(),"aria-label":"示意发送按钮",children:u.jsx(To,{size:17})})})]}),u.jsxs("div",{className:"inspiration-board__guide-tip",children:[u.jsx(To,{size:16}),u.jsx("span",{children:"下一步:点击发送按钮开始生成"})]})]})]})}):u.jsxs("div",{className:"inspiration-board__grid",children:[W.map(k=>u.jsx(ji,{template:k,onClick:()=>L(k)},k.id)),W.length<xn&&Array.from({length:xn-W.length}).map((k,K)=>u.jsx("div",{className:"inspiration-card inspiration-card--placeholder"},`placeholder-${K}`))]})]})},Qs=["right","bottom","left","top"],Xn=4;function Oi(t,e,n,l,a=32){const d=l<=2?l:l<=4?2:3,c=Math.floor(n/d),g=n%d;return[t[0]+g*(e.width+a),t[1]+c*(e.height+a)]}function er(t,e){const{ignoreElementIds:n=[],ignoreTypes:l=["workzone"],extraOccupiedRects:a=[]}=e;return[...t.children.filter(Wi).filter(d=>!l.includes(d.type??"")&&!n.includes(d.id??"")).map(d=>({...Qn.getRectangleByPoints(d.points),id:d.id,type:d.type})),...a]}function Wi(t){return typeof t=="object"&&t!==null&&Array.isArray(t.points)&&t.points.length===2}function tr(t,e,n){return t.x<e.x+e.width+n&&t.x+t.width+n>e.x&&t.y<e.y+e.height+n&&t.y+t.height+n>e.y}function Li(t,e,n,l){const a=[t];for(let d=1;d<=l;d+=1)a.push([t[0]+e*d,t[1]],[t[0],t[1]+n*d],[t[0]+e*d,t[1]+n*d],[t[0]-e*d,t[1]],[t[0]-e*d,t[1]+n*d],[t[0],t[1]-n*d],[t[0]+e*d,t[1]-n*d],[t[0]-e*d,t[1]-n*d]);return a}function Fi(t,e,n,l,a){const d=Math.max(a,32),c=Math.max(Math.round(Math.min(e.width,e.height)*.16),28),g=Math.max(Math.round(Math.min(e.width,e.height)*.12),18),f=e.width+c,h=e.height+c,m=[];for(let y=0;y<n;y+=1){const _=Math.floor(y/Xn),S=y%Xn,C=Math.min(Xn,n-_*Xn),W=S-(C-1)/2,E=t.x+t.width/2-e.width/2,T=t.y+t.height/2-e.height/2,L=Math.abs(W)*g;let A=E,b=T;switch(l){case"right":A=t.x+t.width+d+_*f+L,b=T+W*(e.height+c);break;case"left":A=t.x-d-e.width-_*f-L,b=T+W*(e.height+c);break;case"top":A=E+W*(e.width+c),b=t.y-d-e.height-_*h-L;break;case"bottom":default:A=E+W*(e.width+c),b=t.y+t.height+d+_*h+L;break}m.push([Math.round(A),Math.round(b)])}return m}function Fs(t,e,n,l,a){return t.reduce((c,g)=>{const f={x:g[0],y:g[1],width:e.width,height:e.height};return c+n.filter(h=>tr(f,h,l)).length},0)*1e3+Qs.indexOf(a)*10}function Bi(t,e,n,l,a){var h;const{gap:d=40,padding:c=16}=a,g=er(t,a),f=Qs.map(m=>({side:m,positions:Fi(e,n,l,m,d)}));return f.sort((m,y)=>Fs(m.positions,n,g,c,m.side)-Fs(y.positions,n,g,c,y.side)),((h=f[0])==null?void 0:h.positions)??[]}function Hi(t,e,n,l,a={}){const{frameRect:d,extraOccupiedRects:c=[],...g}=a,f={...g,extraOccupiedRects:c},h=d?Bi(t,d,n,l,f):Array.from({length:l},(y,_)=>Oi(e,n,_,l,f.gap)),m=[...c];return h.map(y=>{const _=Gi(t,y,n,{...f,extraOccupiedRects:m});return m.push({x:_[0],y:_[1],width:n.width,height:n.height}),_})}function Gi(t,e,n,l={}){const{gap:a=40,padding:d=16,maxSearchRadius:c=6}=l,g=er(t,l),f=n.width+a,h=n.height+a,m=Li(e,f,h,c);for(const y of m){const _={x:y[0],y:y[1],width:n.width,height:n.height};if(!g.some(C=>tr(_,C,d)))return y}return[e[0],e[1]+h*(c+1)]}function Dt(t){return typeof t=="string"&&t.trim()?t.trim():null}function Ui(t){return t==="image"||t==="video"||t==="audio"||t==="text"||t==="agent"}function $i(t){if(!t||typeof t!="object")return!1;const e=t;return typeof e.modelId=="string"&&e.modelId.trim().length>0&&(e.profileId===null||typeof e.profileId=="string")&&(e.providerIdHint===null||typeof e.providerIdHint=="string")&&(e.vendorHint===null||typeof e.vendorHint=="string")&&typeof e.updatedAt=="number"&&Number.isFinite(e.updatedAt)}function Ro(){try{const t=window.localStorage.getItem(Po);if(!t)return{};const e=JSON.parse(t);if(!e||typeof e!="object")return{};const n={};return Object.entries(e).forEach(([l,a])=>{Ui(l)&&$i(a)&&(n[l]={modelId:a.modelId.trim(),profileId:Dt(a.profileId),providerIdHint:Dt(a.providerIdHint),vendorHint:Dt(a.vendorHint),updatedAt:a.updatedAt})}),n}catch{return{}}}function nr(t){try{if(!Object.values(t).some(Boolean)){window.localStorage.removeItem(Po);return}window.localStorage.setItem(Po,JSON.stringify(t))}catch{}}function Vi(t){const e=Ro();return e[t]?e[t]||null:t==="agent"&&e.text||null}function Bs(t,e){var a;const n=Dt(e.modelId);if(!n){or(t);return}const l=Ro();l[t]={modelId:n,profileId:Dt((a=e.modelRef)==null?void 0:a.profileId),providerIdHint:Dt(e.providerIdHint),vendorHint:Dt(e.vendorHint),updatedAt:Date.now()},nr(l)}function or(t){const e=Ro();e[t]&&(delete e[t],nr(e))}function pt(t,e,n,l){var d;const a=t.metadata||{};return{id:t.id,name:t.name,generationType:t.generationType,prompt:a.prompt||((d=e==null?void 0:e.aiContext)==null?void 0:d.finalPrompt)||"",aiAnalysis:t.aiAnalysis,count:a.count,createdAt:t.createdAt,status:t.status,steps:t.steps.map(c=>({id:c.id,description:c.description,status:c.status,mcp:c.mcp,args:c.args,result:c.result,error:c.error,duration:c.duration,options:c.options})),retryContext:e,postProcessingStatus:n,insertedCount:l}}function Hs(t){return t.steps.length>0&&t.steps.every(e=>e.status==="completed")}const Ki=new Set(["generate_image","generate_video","generate_long_video","generate_audio","generate_text"]);function Yi(t,e){return t==="generate_image"?"image":t==="generate_video"||t==="generate_long_video"?"video":t==="generate_audio"?"audio":t==="generate_text"?"text":e.scenarioType==="skill_flow"||e.generationType==="agent"?"agent":e.generationType==="image"||e.generationType==="video"||e.generationType==="audio"||e.generationType==="text"?e.generationType:"agent"}function Xi(t){const e=t.trim();if(!e||e.startsWith("data:")||e.startsWith("blob:")||e.startsWith("http://")||e.startsWith("https://")||e.startsWith("/")||e.startsWith("./")||e.startsWith("../"))return e||t;const n=e.replace(/\s+/g,"");return!/^[A-Za-z0-9+/=]+$/.test(n)||n.length<32?e:`data:image/png;base64,${n}`}function qn(t){const e=Xi(t);try{const n=new URL(e,window.location.origin);return n.searchParams.delete("_retry"),n.searchParams.delete("bypass_sw"),n.toString()}catch{return e}}function qi(t,e){const n=typeof e.args.prompt=="string"?e.args.prompt.trim():t.metadata.prompt.trim(),l=(t.metadata.rawInput||t.metadata.userInstruction||t.metadata.prompt||n).trim().slice(0,2e3),a=t.scenarioType==="skill_flow"?t.name.trim():void 0,d=Yi(e.mcp,t),c=eo(t.metadata.knowledgeContextRefs);return{initialPrompt:l,sentPrompt:n.slice(0,2e3),category:d,skillId:t.skillId,skillName:a,tags:[d,a].filter(Boolean),knowledgeContextRefs:c.length>0?c:void 0}}function Zn(t,e){const n=eo(t.metadata.knowledgeContextRefs),l=n.length>0&&Ki.has(e.mcp)&&!e.args.knowledgeContextRefs?{...e.args,knowledgeContextRefs:n}:e.args;return l.promptMeta||!["generate_image","generate_video","generate_long_video","generate_audio","generate_text"].includes(e.mcp)?{...e,args:l}:{...e,args:{...l,promptMeta:qi(t,e)}}}let Gs=!1;Gs||(Qa(),xi(),Ao.initialize().catch(t=>{console.warn("[AIInputBar] 外部 Skill 服务初始化失败(非致命):",t)}),Gs=!0);function sr(t){return t.selectionKey||(t.sourceProfileId?`${t.sourceProfileId}::${t.id}`:t.id)}function Le(t,e){return e!=null&&e.profileId?`${e.profileId}::${t}`:t}function qe(t){return t?Rt(t.sourceProfileId||null,t.id):null}function So(t){return t<=0?"0":t<=20?"1-20":t<=100?"21-100":t<=300?"101-300":t<=800?"301-800":"800+"}const Zi=1,rr=4,Ji=6,Qi=5,ec=8,tc=.65,nc=320,oc=680,sc=1.5;function ar(t){const e=window.getComputedStyle(t),n=Number.parseFloat(e.fontSize)||15,l=Number.parseFloat(e.lineHeight)||n*sc,a=Number.parseFloat(e.paddingTop)+Number.parseFloat(e.paddingBottom),d=Number.parseFloat(e.borderTopWidth)+Number.parseFloat(e.borderBottomWidth);return{lineHeight:l,verticalPadding:a,verticalBorder:d}}function Us(t,e){const{lineHeight:n,verticalPadding:l,verticalBorder:a}=ar(t);return Math.ceil(n*e+l+a)}function rc(t){const{lineHeight:e,verticalPadding:n}=ar(t);let l=1;for(let g=0;g<t.value.length;g+=1)t.value.charCodeAt(g)===10&&(l+=1);const a=t.style.height;t.style.height="auto";const d=t.scrollHeight;t.style.height=a;const c=Math.ceil(Math.max(0,d-n)/e);return Math.max(l,c)}function ac(){return Math.min(Math.max(Math.floor(window.innerHeight*tc),nc),oc)}function $s(t,e){if(!t)return;if(e==="collapsed"){t.style.height="",t.style.overflowY="";return}t.style.height="auto";const n=t.scrollHeight;if(e==="long-text"){const c=ac();t.style.height=`${c}px`,t.style.overflowY=n>c?"auto":"hidden";return}const l=Us(t,rr),a=Us(t,Ji),d=Math.min(Math.max(n,l),a);t.style.height=`${d}px`,t.style.overflowY=n>a?"auto":"hidden"}function ye(t,e,n){if(!e)return;const l=Le(e,n),a=(n==null?void 0:n.profileId)||null;return t.find(d=>sr(d)===l)||t.find(d=>d.id===e&&(d.sourceProfileId||null)===a)||(a===null?t.find(d=>d.id===e&&!d.sourceProfileId):void 0)||t.find(d=>d.id===e)}function ic(t,e){return t==="agent"&&e==="text"?"agent":e}function cc(t){if(!t)return!1;const e=t.toLowerCase();return e.includes("#video")?!0:[".mp4",".webm",".mov",".avi",".mkv",".m4v",".flv",".wmv"].some(l=>e.includes(l))}const ir=Xs.memo(({language:t,onSelectionChange:e,externalBoardRef:n,onCanvasEmptyChange:l,isDataReady:a,onFrameSelected:d})=>{const c=si(),g=r.useRef(c);g.current=c,r.useEffect(()=>(ks(c),bs(c),vs(c),Ts(c),Ns.setBoard(c),n&&(n.current=c),()=>{ks(null),bs(null),vs(null),Ts(null),Ns.setBoard(null),n&&(n.current=null)}),[c,n]);const f=r.useRef(l);f.current=l,r.useEffect(()=>{if(!c||!f.current||!a)return;const _=setInterval(()=>{var C;const S=c.children||[];(C=f.current)==null||C.call(f,S.length===0)},500);return()=>{clearInterval(_)}},[c,a]);const h=r.useRef(e);h.current=e;const m=r.useRef(d);return m.current=d,r.useEffect(()=>{const y=async()=>{var W,E,T,L;const S=g.current;if(!S)return;const C=qs(S);if(C.length===1&&Zs(C[0])){const A=C[0],b=Qn.getRectangleByPoints(A.points);(W=m.current)==null||W.call(m,{id:A.id,width:b.width,height:b.height})}else(E=m.current)==null||E.call(m,null);if(C.length===0){h.current([]);return}try{const A=await Ja(S),b=[];A.graphicsImage&&b.push({url:A.graphicsImage,name:t==="zh"?"图形元素":"Graphics",type:"graphics",width:(T=A.graphicsImageDimensions)==null?void 0:T.width,height:(L=A.graphicsImageDimensions)==null?void 0:L.height});for(const N of A.remainingImages){const F=N.url||"",J=cc(F);b.push({url:F,maskImage:J?void 0:A.maskImage,name:N.name||(J?`video-${Date.now()}`:`image-${Date.now()}`),type:J?"video":"image",width:N.width,height:N.height})}A.remainingText&&A.remainingText.trim()&&b.push({type:"text",text:A.remainingText.trim(),name:t==="zh"?"文字内容":"Text Content"}),h.current(b)}catch(A){console.error("Failed to process selected content:",A),h.current([])}};y();const _=()=>{setTimeout(y,50)};return document.addEventListener("mouseup",_),document.addEventListener(_s,y),()=>{document.removeEventListener("mouseup",_),document.removeEventListener(_s,y)}},[t]),null});ir.displayName="SelectionWatcher";const cr=Xs.memo(({className:t,isDataReady:e,onEnableToolWindows:n,onEnableRuntime:l})=>{const{language:a}=ka(),d=Bn("image"),c=Bn("video"),g=Bn("audio"),f=Bn("text"),h=va(),m=ti(),{setActiveSelections:y}=Sa(),{addHistory:_}=Vs(),{addAsset:S}=Ca(),{confirm:C,confirmDialog:W}=Ks(),E=r.useRef(h.sendWorkflowMessage);E.current=h.sendWorkflowMessage;const T=r.useRef(h.updateWorkflowMessage);T.current=h.updateWorkflowMessage;const L=r.useRef(h.syncWorkflowTaskUpdate);L.current=h.syncWorkflowTaskUpdate;const A=r.useRef(h.appendAgentLog);A.current=h.appendAgentLog;const b=r.useRef(h.updateThinkingContent);b.current=h.updateThinkingContent;const N=r.useRef(h.setSelectedContent);N.current=h.setSelectedContent;const F=r.useRef(h.registerRetryHandler);F.current=h.registerRetryHandler;const J=r.useRef(h.registerGenerationSubmitter);J.current=h.registerGenerationSubmitter;const k=r.useRef(null),K=r.useRef([]),R=r.useRef(null),M=Ma(),z=r.useCallback((o,s,i)=>{if(!o)return;const p=K.current,w=(i!=null&&i.workflowId&&(i!=null&&i.batchId)&&typeof i.batchIndex=="number"?Pt.getAnchorByBatchSlot(o,{workflowId:i.workflowId,batchId:i.batchId,batchIndex:i.batchIndex}):null)||(i!=null&&i.workflowId?Pt.getAnchorByWorkflowId(o,i.workflowId):null)||(p[0]?Pt.getAnchorById(o,p[0]):null);if(!w)return;const x=w.taskIds.includes(s)?w.taskIds:[...w.taskIds,s];Pt.updateAnchor(o,w.id,{taskIds:x,primaryTaskId:w.primaryTaskId||s})},[]),H=r.useCallback((o,s,i)=>{const p=K.current;p.length===0||!o||p.forEach(w=>{Pt.updateAnchor(o,w,_o(s,i))})},[]),Y=r.useCallback(o=>{const s=K.current;s.length===0||!o||(s.forEach(i=>{Pt.removeAnchor(o,i)}),K.current=[])},[]),G=r.useCallback((o,s)=>{const i=Vi(o);if(!i)return;const p=ye(s,i.modelId,Rt(i.profileId,i.modelId));if(p)return p;or(o)},[]),te=r.useCallback((o,s)=>{const i=G(o,s);if(i)return i;const w=Vt(o==="video"?"video":o==="audio"?"audio":o==="text"||o==="agent"?"text":"image"),x=ye(s,w.modelId,Rt(w.profileId,w.modelId));if(x)return x;const j=o==="video"?Yt():o==="audio"?Xt():o==="text"||o==="agent"?Mo():At();return ye(s,j,null)||s[0]},[G]),re=M.generationType,Ie=te(re,re==="video"?c:re==="audio"?g:re==="text"||re==="agent"?f:d)||at(M.selectedModel)||at(re==="video"?Yt():re==="audio"?Xt():re==="text"||re==="agent"?Mo():At()),Je=te("image",d)||at(At()),yn=te("video",c)||at(Yt()),In=te("audio",g)||at(Xt()),no=Vt("image"),bn=(Je==null?void 0:Je.id)||no.modelId||At(),Do=qe(Je)||Rt(no.profileId,no.modelId),No=Le((Ie==null?void 0:Ie.id)||bn,qe(Ie)||Do),jo=re==="agent"?{}:Hn(re,(Ie==null?void 0:Ie.id)||bn,No,M.selectedParams),[Ce,ct]=r.useState(""),[lr,_n]=r.useState(!1),[dr,ur]=r.useState(!1),[Nt,wt]=r.useState([]),[lt,xt]=r.useState([]),[yt,kn]=r.useState([]),[Pe,It]=r.useState(!1),nt=r.useRef(!1),_e=r.useRef(null),[Zt,dt]=r.useState(!1),[Qe,zo]=r.useState(!1),[fr,pr]=r.useState(!1),[mr,hr]=r.useState(null),[v,et]=r.useState(re),[fe,vn]=r.useState(M.selectedSkillId||rt),[D,oo]=r.useState((Ie==null?void 0:Ie.id)||bn),[U,so]=r.useState(qe(Ie)||Do),[Be,Oo]=r.useState((Je==null?void 0:Je.id)||At()),[Ae,Wo]=r.useState(qe(Je)),[He,Lo]=r.useState((yn==null?void 0:yn.id)||Yt()),[Re,Fo]=r.useState(qe(yn)),[Ge,Bo]=r.useState((In==null?void 0:In.id)||Xt()),[De,Ho]=r.useState(qe(In)),[bt,ot]=r.useState([]),Sn=r.useMemo(()=>{if(v!=="image"||ye(d,D,U))return d;const s=Tt("image",D,U);return s?[s,...d]:d},[v,d,D,U]),Cn=r.useMemo(()=>{if(v!=="video"||ye(c,D,U))return c;const s=Tt("video",D,U);return s?[s,...c]:c},[v,D,U,c]),Mn=r.useMemo(()=>{if(v!=="audio"||ye(g,D,U))return g;const s=Tt("audio",D,U);return s?[s,...g]:g},[g,v,D,U]),Tn=r.useMemo(()=>{if(v!=="text"&&v!=="agent"||ye(f,D,U))return f;const s=Tt("text",D,U);return s?[s,...f]:f},[v,D,U,f]),Jt=r.useMemo(()=>{if(ye(d,Be,Ae))return d;const s=Tt("image",Be,Ae);return s?[s,...d]:d},[d,Be,Ae]),Qt=r.useMemo(()=>{if(ye(c,He,Re))return c;const s=Tt("video",He,Re);return s?[s,...c]:c},[He,Re,c]),en=r.useMemo(()=>{if(ye(g,Ge,De))return g;const s=Tt("audio",Ge,De);return s?[s,...g]:g},[g,Ge,De]),[Ne,tn]=r.useState(()=>{if(re==="agent")return{};const o=(Ie==null?void 0:Ie.id)||bn,s=fs(o).find(i=>i.id==="size");return{...jo,...o.startsWith("mj")||!s?{}:{size:jo.size||ps(o)}}}),jt=r.useRef(Ne),ro=r.useRef(re==="agent"?"agent":`${re}:${No}`),Go=r.useRef(Ce),ao=r.useRef(Nt),Uo=r.useRef(lt),nn=r.useRef(new Set);r.useEffect(()=>{jt.current=Ne},[Ne]),r.useEffect(()=>{Go.current=Ce},[Ce]),r.useEffect(()=>{ao.current=Nt},[Nt]),r.useEffect(()=>{Uo.current=lt},[lt]);const[on,io]=r.useState(M.selectedCount),[$o,co]=r.useState(!1),[Vo,lo]=r.useState(!1),[Ko,uo]=r.useState(!1),_t=r.useRef(null),gr=r.useCallback(o=>{co(o),o||(_t.current=null)},[]),wr=r.useCallback(o=>{lo(o),o||(_t.current=null)},[]),xr=r.useCallback(o=>{uo(o),o||(_t.current=null)},[]),[Yo,zt]=r.useState(!1),Ue=r.useMemo(()=>[...lt,...Nt],[lt,Nt]),kt=r.useMemo(()=>({invalidFile:a==="zh"?"请上传图片文件":"Please upload image files",fileTooLarge:a==="zh"?"图片大小不能超过 25MB":"Image size cannot exceed 25MB",loadFailed:a==="zh"?"加载图片失败":"Failed to load image",compressionFailed:a==="zh"?"图片压缩失败":"Image compression failed",compressing:o=>a==="zh"?`正在压缩图片 (${o.toFixed(1)}MB)...`:`Compressing image (${o.toFixed(1)}MB)...`,compressed:(o,s)=>a==="zh"?`压缩完成: ${o.toFixed(1)}MB → ${s.toFixed(1)}MB`:`Compressed: ${o.toFixed(1)}MB → ${s.toFixed(1)}MB`}),[a]);r.useEffect(()=>{const o=v==="video"?Cn:v==="audio"?Mn:v==="text"||v==="agent"?Tn:Sn,i=ye(o,D,U)||te(v,o);if(i){const p=Le(D,U),w=sr(i);p!==w&&(oo(i.id),so(qe(i)))}v!=="agent"&&vn(rt),(v==="agent"||v==="text"||v==="audio")&&io(1)},[Mn,v,Sn,te,D,U,Tn,Cn]),r.useEffect(()=>{const o=(s,i,p,w,x,j)=>{if(ye(i,p,w))return;const O=te(s,i);O&&(x(O.id),j(qe(O)))};o("image",Jt,Be,Ae,Oo,Wo),o("video",Qt,He,Re,Lo,Fo),o("audio",en,Ge,De,Bo,Ho)},[te,Ge,De,Be,Ae,He,Re,en,Jt,Qt]);const Pn=r.useMemo(()=>v==="video"?Cn:v==="audio"?Mn:v==="text"||v==="agent"?Tn:Sn,[Mn,v,Sn,Tn,Cn]);r.useEffect(()=>{let o=!1;return(async()=>{var j;if(v!=="agent"||fe===rt){ot([]);return}const i=Kn(fe);if(i){ot(Et(i));return}const p=Ps(fe);if(p){ot(Et(p));return}const w=await Ao.getSkillById(fe);if(o)return;if(w){ot(Et(w));return}const x=await Jn.getNoteById(fe);o||ot(x?Et({id:x.id,name:x.title,content:x.content,outputType:(j=x.metadata)==null?void 0:j.outputType}):[])})().catch(()=>{o||ot([])}),()=>{o=!0}},[v,fe]);const sn=r.useMemo(()=>{var i;if(v==="agent")return[];if(v==="video")return Ta(D,U||D,Ne);const o=fs(D);return v!=="audio"?o:(Ne.sunoAction||((i=o.find(p=>p.id==="sunoAction"))==null?void 0:i.defaultValue)||"music")==="lyrics"?o.filter(p=>p.id==="sunoAction"||p.id==="mv"||p.id==="title"||p.id==="tags"):o},[v,D,U,Ne]);r.useEffect(()=>{if(!Zt)return;const o=s=>{const i=s.target;En.current&&!En.current.contains(i)&&dt(!1)};return document.addEventListener("mousedown",o),()=>document.removeEventListener("mousedown",o)},[Zt]),r.useEffect(()=>()=>{_e.current&&clearTimeout(_e.current),nt.current=!1},[]),r.useEffect(()=>{const o=s=>{var i;((i=s.detail)==null?void 0:i.type)!=="image"&&(_e.current&&(clearTimeout(_e.current),_e.current=null),nt.current=!1,It(!1))};return window.addEventListener("ai-generation-complete",o),()=>{window.removeEventListener("ai-generation-complete",o)}},[]),r.useEffect(()=>{const o=Co.observeTaskUpdates().subscribe(s=>{var B,oe;const i=s.task;L.current(i);const p=m.getWorkflow();if(!p)return;const w=ms(p,i);if(!w)return;let x=w.status,j=w.result,$=w.error;switch(i.status){case mt.PENDING:case mt.PROCESSING:m.resumeWorkflow(),x="running",j=Gn(j,i.id),$=void 0;break;case mt.COMPLETED:x="completed",j={...j&&typeof j=="object"?j:{},taskId:i.id,result:i.result},$=void 0;break;case mt.FAILED:x="failed",j=Gn(j,i.id),$=((B=i.error)==null?void 0:B.message)||"任务执行失败";break;case mt.CANCELLED:x="skipped";break}const O=Io(j),X=Io(w.result),V=p.generationType==="image"&&i.status===mt.COMPLETED;if(x!==w.status||O!==X||$!==w.error||V){if(m.updateStep(w.id,x,j,$),x==="failed"){const ie=(oe=w.options)==null?void 0:oe.batchId;ie&&p.steps.forEach(le=>{var he;le.id!==w.id&&((he=le.options)==null?void 0:he.batchId)===ie&&le.status==="running"&&m.updateStep(le.id,"skipped",void 0,"前置任务失败")})}const ce=m.getWorkflow();if(ce){const ie=ce.generationType==="image"&&Hs(ce);ie&&(rn.current="completed");const le=pt(ce,k.current||void 0,ie?"completed":rn.current,an.current);T.current(le);const he=R.current,Ve=$e.current;he&&Ve&&Xe.updateWorkflow(Ve,he,le)}}});return()=>o.unsubscribe()},[m]);const rn=r.useRef(void 0),an=r.useRef(void 0);r.useEffect(()=>{const o=ko.observeCompletionEvents().subscribe(s=>{const i=m.getWorkflow(),p=Co.getTask(s.taskId),w=p?ms(i,p):Pa(i,s.taskId);let x,j;switch(s.type){case"postProcessingStarted":x="processing";break;case"postProcessingCompleted":x="completed",j=s.result.insertedCount;break;case"postProcessingFailed":x="failed";break}if(rn.current=x,j!==void 0&&(an.current=(an.current||0)+j),i&&w){!Io(w.result)&&p&&m.updateStep(w.id,w.status,Gn(w.result,s.taskId),w.error,w.duration),s.type==="postProcessingCompleted"&&w.status!=="completed"&&(p==null?void 0:p.status)===mt.COMPLETED&&m.updateStep(w.id,"completed",{...Gn(w.result,s.taskId),result:p.result},void 0,w.duration);const O=m.getWorkflow();if(O){const V=O.generationType==="image"&&Hs(O)?"completed":x;V==="completed"&&(rn.current="completed");const B=pt(O,k.current||void 0,V,an.current);T.current(B);const oe=R.current,ce=$e.current;oe&&ce&&Xe.updateWorkflow(ce,oe,B)}}if(s.type==="postProcessingCompleted"){const $=s.result.firstElementPosition;_e.current&&(clearTimeout(_e.current),_e.current=null),nt.current=!1,It(!1),setTimeout(async()=>{var V;h.closeChatDrawer();const O=R.current,X=$e.current;if(O&&X){const B=m.getWorkflow();if(B==null?void 0:B.steps.every(ce=>ce.status==="completed"||ce.status==="failed"||ce.status==="skipped")){const{workflowCompletionService:ce}=await ht(async()=>{const{workflowCompletionService:le}=await import("./tool-windows-Bp0hMtkJ.js").then(he=>he.b1);return{workflowCompletionService:le}},__vite__mapDeps([0,1]),import.meta.url);(B==null?void 0:B.steps.every(le=>{const he=le.result;return he!=null&&he.taskId?ce.isPostProcessingCompleted(he.taskId):!0}))&&(Xe.removeWorkZone(X,O),R.current=null)}}if($&&X){const B=(V=X.host)==null?void 0:V.getBoundingClientRect();if(B){const oe=X.viewport.zoom,ce=$[0]-B.width/(2*oe),ie=$[1]-B.height/(2*oe);Ea.updateViewport(X,[ce,ie],oe)}}},500),rn.current=void 0,an.current=void 0}});return()=>o.unsubscribe()},[m,h]);const $e=r.useRef(null),{submitWorkflow:Xo}=ni({boardRef:$e,workZoneIdRef:R}),Ee=r.useRef(null),En=r.useRef(null),qo=r.useRef(null);Aa(Ee,{enableCopy:!0,stopPropagation:!0});const An=r.useCallback(()=>{dt(!0),requestAnimationFrame(()=>{var o;(o=Ee.current)==null||o.focus()})},[]),Zo=r.useCallback(async o=>{const s=Go.current.trim().length>0,i=Uo.current.length>0,p=ao.current.length>0,w=yt.length>0;return(o==="canvas-toolbar"?s||i||w:s||i||p||w)?C({title:a==="zh"?"覆盖当前输入?":"Overwrite current input?",description:a==="zh"?"底部输入框已有提示词或参考图,继续会覆盖当前输入。":"The bottom input already has a prompt or reference images. Continuing will overwrite it.",confirmText:a==="zh"?"覆盖当前输入":"Overwrite input",cancelText:a==="zh"?"取消":"Cancel",confirmTheme:"warning"}):!0},[C,yt.length,a]);r.useEffect(()=>{const o=s=>{const i=s.detail;if(i!=null&&i.generationType&&et(i.generationType),i!=null&&i.skillId){vn(i.skillId);const p=Kn(i.skillId);p&&ot(Et(p))}An()};return window.addEventListener(Ss,o),()=>{window.removeEventListener(Ss,o)}},[An]),r.useEffect(()=>{const o=async s=>{const i=s.detail;if(!i||!await Zo(i.source))return;const p=i.generationType,w=p==="video"?c:p==="audio"?g:p==="text"||p==="agent"?f:d,x=ye(w,i.model,i.modelRef||null)||ye(w,i.model,null)||te(p,w),j=qe(x),$=(x==null?void 0:x.id)||i.model||D,O=Le($,j),X=p==="agent"?{}:{...Hn(p,$,O),...i.params||{}};if(i.source==="canvas-toolbar"){const V=ao.current.filter(B=>B.type==="image"&&typeof B.url=="string").map(B=>qn(B.url));nn.current=new Set(V),wt(B=>B.filter(oe=>oe.type!=="image"||typeof oe.url!="string"?!0:!nn.current.has(qn(oe.url))))}else nn.current=new Set,wt([]),fo.current=null;et(p),ct(i.prompt||""),xt((i.images||[]).map((V,B)=>({type:"image",url:V.url,name:V.name||`参考图 ${B+1}`,width:V.width,height:V.height,maskImage:V.maskImage}))),oo($),so(j),kn(eo(i.knowledgeContextRefs)),tn(X),jt.current=X,ro.current=p==="agent"?"agent":`${p}:${O}`,typeof i.count=="number"&&i.count>0&&io(i.count),tt.success(a==="zh"?"已回填到底部输入框,请手动发送":"Loaded into the bottom input. Send manually when ready."),An()};return window.addEventListener(Cs,o),()=>{window.removeEventListener(Cs,o)}},[g,Zo,An,d,a,te,D,f,c]);const yr=r.useCallback(o=>{var s;if(ct(o.prompt),_n(!0),et("agent"),o.skillId){vn(o.skillId);const i=Kn(o.skillId);i&&ot(Et(i))}(s=Ee.current)==null||s.focus(),Fe.track("inspiration_selected",{promptLength:o.prompt.length,modelType:o.modelType,skillId:o.skillId,templateId:o.templateId,title:o.title,category:o.category})},[]),Ir=r.useCallback(o=>{var s;ct(o.content),_n(!1),o.modelType&&(o.modelType==="image"?et("image"):o.modelType==="video"?et("video"):o.modelType==="audio"?et("audio"):o.modelType==="text"?et("text"):o.modelType==="agent"&&et("agent")),(s=Ee.current)==null||s.focus()},[]),br=r.useCallback(async()=>{const[{toolRegistry:o},{toolWindowService:s}]=await Promise.all([ht(()=>import("./tool-windows-Bp0hMtkJ.js").then(p=>p.a$),__vite__mapDeps([0,1]),import.meta.url),ht(()=>import("./tool-windows-Bp0hMtkJ.js").then(p=>p.b0),__vite__mapDeps([0,1]),import.meta.url)]),i=o.getManifestById("knowledge-base");i&&(window.__kbPendingNavigation={directoryName:"Skill",autoCreateNote:!0},s.openTool(i),setTimeout(()=>{window.dispatchEvent(new CustomEvent("kb:navigate",{detail:{directoryName:"Skill",autoCreateNote:!0}}))},300))},[]),Jo=r.useCallback(async(o="ai_input_bar")=>{const[{toolRegistry:s},{toolWindowService:i}]=await Promise.all([ht(()=>import("./tool-windows-Bp0hMtkJ.js").then(w=>w.a$),__vite__mapDeps([0,1]),import.meta.url),ht(()=>import("./tool-windows-Bp0hMtkJ.js").then(w=>w.b0),__vite__mapDeps([0,1]),import.meta.url)]),p=s.getManifestById("banana-prompt");if(!p){console.warn("[AIInputBar] Banana prompt tool not found"),Fe.trackPromptAction({action:"open_tool",surface:o,promptType:v,prompt:Ce,source:o,status:"failed",metadata:{tool_id:"banana-prompt",reason:"tool_not_found"}});return}Fe.trackPromptAction({action:"open_tool",surface:o,promptType:v,prompt:Ce,source:o,status:"success",metadata:{tool_id:p.id,tool_type:"external_prompt_library"}}),i.openTool(p)},[v,Ce]),_r=r.useCallback(()=>{Jo("inspiration_board")},[Jo]),Rn=r.useCallback(o=>new Promise(s=>{try{const i=new Image;i.onload=()=>{s({type:"image",url:o.url,name:o.name||`素材-${Date.now()}`,width:i.naturalWidth||void 0,height:i.naturalHeight||void 0})},i.onerror=()=>{s({type:"image",url:o.url,name:o.name||`素材-${Date.now()}`})},i.src=o.url}catch{s({type:"image",url:o.url,name:o.name||`素材-${Date.now()}`})}}),[]),kr=r.useCallback(async o=>{try{const s=await Rn(o);xt(i=>[...i,s]),zt(!1)}catch(s){console.error("Failed to select asset from library:",s),zt(!1)}},[Rn]),vr=r.useCallback(async o=>{if(o.length!==0)try{const s=await Promise.all(o.map(Rn));xt(i=>[...i,...s]),zt(!1)}catch(s){console.error("Failed to batch select assets from library:",s),zt(!1)}},[Rn]),Sr=r.useCallback(o=>{kn(eo(o))},[]),Cr=r.useCallback(()=>{var o;(o=qo.current)==null||o.click()},[]),Qo=r.useCallback(o=>new Promise((s,i)=>{const p=new FileReader;p.onload=()=>{const w=p.result,x=new Image;x.onload=()=>{s({url:w,width:x.naturalWidth,height:x.naturalHeight})},x.onerror=()=>{s({url:w,width:0,height:0})},x.src=w},p.onerror=i,p.readAsDataURL(o)}),[]),Dn=r.useCallback(async o=>{const s=Array.from(o);if(s.length===0)return;const i=[];for(const[p,w]of s.entries()){if(!w.type.startsWith("image/")){tt.error(kt.invalidFile);continue}if(w.size>25*1024*1024){tt.error(kt.fileTooLarge);continue}try{let x=w;if(w.size>10*1024*1024){const{compressImageBlob:V,getCompressionStrategy:B}=await ht(async()=>{const{compressImageBlob:ie,getCompressionStrategy:le}=await import("./ai-chat-B_eUkugc.js").then(he=>he.sF);return{compressImageBlob:ie,getCompressionStrategy:le}},__vite__mapDeps([0]),import.meta.url),oe=B(w.size/(1024*1024)),ce=tt.loading({content:kt.compressing(w.size/(1024*1024)),duration:0,placement:"top"});try{x=await V(w,oe.targetSizeMB),tt.close(ce),tt.success({content:kt.compressed(w.size/(1024*1024),x.size/(1024*1024)),duration:2})}catch(ie){tt.close(ce),console.error("[AIInputBar] Failed to compress image:",ie),tt.error(kt.compressionFailed);continue}}const j=x instanceof File?x:new File([x],w.name||`pasted-image-${Date.now()}.png`,{type:x.type||w.type||"image/png"});S(j,hs.IMAGE,Ra.LOCAL,j.name).catch(V=>{console.warn("[AIInputBar] Failed to add asset to library:",V)});const{url:$,width:O,height:X}=await Qo(j);i.push({type:"image",url:$,name:j.name||`上传图片 ${p+1}`,width:O||void 0,height:X||void 0})}catch(x){console.error("[AIInputBar] Failed to import local image:",x),tt.error(kt.loadFailed)}}i.length>0&&xt(p=>[...p,...i])},[S,Qo,kt]),Mr=r.useCallback(async o=>{const s=o.target.files;!s||s.length===0||(await Dn(s),o.target.value="")},[Dn]),Tr=r.useCallback(o=>{const s=nn.current;if(s.size===0){wt(o);return}if(!o.some(p=>p.type!=="image"||typeof p.url!="string"?!1:s.has(qn(p.url)))){nn.current=new Set,wt(o);return}wt(o.filter(p=>p.type!=="image"||typeof p.url!="string"?!0:!s.has(qn(p.url))))},[]),fo=r.useRef(null),Pr=r.useCallback(o=>{if(fo.current=o,!o)return;const s=pi(o.width,o.height,D);s&&tn(i=>({...i,size:s}))},[D]),Er=r.useCallback(o=>{o<lt.length&&xt(s=>s.filter((i,p)=>p!==o))},[lt.length]);r.useEffect(()=>{N.current(Ue.map(o=>({type:o.type,url:o.url,text:o.text,name:o.name,width:o.width,height:o.height})))},[Ue]),r.useEffect(()=>{const o=s=>{var O,X;const i=(O=s.clipboardData)==null?void 0:O.items;if(!i||i.length===0||!Array.from(i).some(V=>V.type.startsWith("image/")))return;const w=document.activeElement,x=En.current;if(!(!!x&&(x.contains(w)||Zt&&(w===document.body||(w==null?void 0:w.tagName)==="BODY"))))return;const $=[];for(const V of Array.from(i)){if(!V.type.startsWith("image/"))continue;const B=V.getAsFile();B&&$.push(B)}$.length!==0&&(s.preventDefault(),Dn($),(X=Ee.current)==null||X.focus())};return document.addEventListener("paste",o),()=>{document.removeEventListener("paste",o)}},[Dn,Zt]);const Ot=r.useCallback(()=>{if(_t.current!==null){const o=_t.current;ct(s=>s.substring(0,o)+s.substring(o+1)),_t.current=null}},[]),Nn=r.useCallback(o=>{const s=ic(v,o.type);Fe.track("ai_input_change_model",{model:o.id,type:o.type,profileId:o.sourceProfileId||null}),Ot(),et(s),oo(o.id);const i=qe(o);so(i),Bs(s,{modelId:o.id,modelRef:i,providerIdHint:o.sourceProfileId||(i==null?void 0:i.profileId),vendorHint:o.vendor}),tn(s==="agent"?{}:Hn(s,o.id,Le(o.id,i))),co(!1),setTimeout(()=>{var p;return(p=Ee.current)==null?void 0:p.focus()},0)},[Ot,v]),Ar=r.useCallback(o=>{const s=ye(Pn,o,U)||ye(Pn,o,null)||at(o);s&&Nn(s)},[Nn,Pn,U]),Rr=r.useCallback(o=>{Nn(o)},[Nn]),jn=r.useCallback((o,s)=>{const i=qe(s);o==="image"?(Oo(s.id),Wo(i)):o==="video"?(Lo(s.id),Fo(i)):(Bo(s.id),Ho(i)),Bs(o,{modelId:s.id,modelRef:i,providerIdHint:s.sourceProfileId||(i==null?void 0:i.profileId),vendorHint:s.vendor}),Fe.track("ai_input_change_agent_media_model",{model:s.id,type:o,profileId:s.sourceProfileId||null})},[]),po=r.useCallback((o,s,i)=>{const p=o==="image"?Jt:o==="video"?Qt:en,w=ye(p,s,i||null)||ye(p,s,null)||at(s);w&&jn(o,w)},[jn,en,Jt,Qt]),mo=r.useCallback((o,s)=>{jn(o,s)},[jn]),Dr=r.useCallback(o=>{ot(Et(o))},[]),es=r.useMemo(()=>({image:Be,video:He,audio:Ge}),[Ge,Be,He]),ts=r.useMemo(()=>({image:Ae,video:Re,audio:De}),[De,Ae,Re]);r.useEffect(()=>{const o=[{modelId:D,profileId:(U==null?void 0:U.profileId)||null}];v==="agent"&&fe!==rt&&(bt.includes("image")&&o.push({modelId:Be,profileId:(Ae==null?void 0:Ae.profileId)||null}),bt.includes("video")&&o.push({modelId:He,profileId:(Re==null?void 0:Re.profileId)||null}),bt.includes("audio")&&o.push({modelId:Ge,profileId:(De==null?void 0:De.profileId)||null})),y(o)},[v,Ge,De,Be,Ae,He,Re,D,U,fe,bt,y]),r.useEffect(()=>{const o=(O,X)=>{const V=Object.keys(O),B=Object.keys(X);return V.length!==B.length?!1:V.every(oe=>O[oe]===X[oe])},s=v==="agent"?"agent":`${v}:${Le(D,U)}`,i=v==="agent"?{}:ro.current===s?jt.current||{}:Hn(v,D,Le(D,U),jt.current),p={},w=sn.find(O=>O.id==="size"),x=i.size,j=!x||!(w!=null&&w.options)||w.options.some(O=>O.value===x);!D.startsWith("mj")&&w&&(p.size=x&&j?x:w.defaultValue||ps(D)),sn.forEach(O=>{if(O.id==="size")return;const X=i[O.id],V=!X||O.valueType!=="enum"||!O.options||O.options.some(B=>B.value===X);X&&V?p[O.id]=X:O.defaultValue&&(p[O.id]=O.defaultValue)});const $=Da(D,p);o(jt.current||{},$)||(tn($),jt.current=$),ro.current=s},[v,D,U,sn]),r.useEffect(()=>{Na({generationType:v,selectedModel:D,selectedParams:Ne,selectedCount:on,selectedSkillId:fe}),v!=="agent"&&ja(v,D,Ne,Le(D,U))},[v,D,U,Ne,on,fe]);const Nr=r.useCallback((o,s,i)=>{Ot(),tn(p=>{const w={...p};return s===void 0||s===""?delete w[o]:w[o]=s,w}),i!=null&&i.keepOpen||(lo(!1),setTimeout(()=>{var p;return(p=Ee.current)==null?void 0:p.focus()},0))},[Ot]),jr=r.useCallback(o=>{Ot(),io(o),uo(!1),setTimeout(()=>{var s;return(s=Ee.current)==null?void 0:s.focus()},0)},[Ot]),cn=r.useCallback(async(o="button")=>{var P,ne,ge,ve,pe,je,ln,dn;const s=typeof o=="string"?void 0:o,i=typeof o=="string"?o:"button",p=(s==null?void 0:s.prompt)??Ce,w=(s==null?void 0:s.content)??Ue,x=(s==null?void 0:s.generationType)??v,j=(s==null?void 0:s.selectedModel)??D,$=(s==null?void 0:s.selectedModelRef)??U,O=(s==null?void 0:s.selectedParams)??Ne,X=(s==null?void 0:s.selectedCount)??on,V=(s==null?void 0:s.appendToCurrentChatSession)??!1,B=!s,oe=s?[]:yt,ce=p.trim();if(!ce&&w.length===0||nt.current||Pe)return;nt.current=!0,_n(!1),l==null||l();const ie=Date.now(),le=ce.length,he={trigger:i,source:s?"chat_drawer":"ai_input_bar",generationType:x,generation_type:x,model:j,profileId:($==null?void 0:$.profileId)||null,profile_id:($==null?void 0:$.profileId)||null,hasAttachedContent:w.length>0,has_attached_content:w.length>0,attachedCount:w.length,attached_count:w.length,knowledgeContextCount:oe.length,knowledge_context_count:oe.length,promptLength:le,prompt_length:le,promptLengthBucket:So(le),prompt_length_bucket:So(le)},Ve=(ze,St={})=>{const st=Date.now()-ie;Fe.track("ai_input_submit",{...he,status:ze,durationMs:st,duration_ms:st,...St})};It(!0),Ve("start");try{if(!za(x==="video"?"video":x==="audio"?"audio":x==="text"||x==="agent"?"text":"image",$||j)&&!await Oa()){Ve("cancelled",{reason:"missing_api_key",submitMode:"preflight",submit_mode:"preflight"}),nt.current=!1,It(!1);return}const st=w.filter(I=>I.type==="image"&&I.url),Wt=w.filter(I=>I.type==="graphics"&&I.url),Se=[...st,...Wt].map(I=>{if(I.width&&I.height)return{width:I.width,height:I.height}}).filter(I=>I!==void 0),Lt={texts:w.filter(I=>I.type==="text"&&I.text).map(I=>I.text),images:st.map(I=>I.url),videos:w.filter(I=>I.type==="video"&&I.url).map(I=>I.url),graphics:Wt.map(I=>I.url),imageDimensions:Se,maskImage:st.length===1&&Wt.length===0?st[0].maskImage:void 0},Z=Ti(p,Lt,{modelId:j,modelRef:$,params:O,generationType:x,count:X,knowledgeContextRefs:oe,defaultModels:x==="agent"?es:void 0,defaultModelRefs:x==="agent"?ts:void 0}),ke=[...Lt.images,...Lt.graphics];let ee;if(x==="agent"&&fe!==rt){const I=Kn(fe);if(I)try{ee=await Vn(Z,I,ke)}catch(q){console.warn("[AIInputBar] 系统 Skill 工作流转换失败,降级到通用工作流:",q),ee=Kt(Z,ke)}else{const q=Ps(fe);if(q)try{ee=await Vn(Z,{id:q.id,name:q.name,type:"external",content:q.content,outputType:q.outputType},ke)}catch(Q){console.warn("[AIInputBar] 外部 Skill 工作流转换失败,降级到角色扮演:",Q),ee=await Vn(Z,{id:q.id,name:q.name,type:"external",content:q.content,outputType:q.outputType},ke).catch(()=>Kt(Z,ke))}else try{const Q=await Jn.getNoteById(fe);if(Q){const me=((P=Q.metadata)==null?void 0:P.outputType)||void 0;ee=await Vn(Z,{id:Q.id,name:Q.title,type:"user",content:Q.content,outputType:me},ke)}else ee=Kt(Z,ke)}catch{ee=Kt(Z,ke)}}ee||(console.warn("[AIInputBar] Skill 工作流未能生成,降级到通用工作流"),ee=Kt(Z,ke))}else ee=Kt(Z,ke);const se=$e.current;if(se){const me=(ne=se.host)==null?void 0:ne.getBoundingClientRect(),we=((ge=se.viewport)==null?void 0:ge.zoom)||1,xe=((pe=(ve=se.viewport)==null?void 0:ve.origination)==null?void 0:pe[0])||0,Ke=((ln=(je=se.viewport)==null?void 0:je.origination)==null?void 0:ln[1])||0,un=se.children.filter(be=>be.type!=="workzone"),Wn=xe+((me==null?void 0:me.width)||0)/2/we,Ht=Ke+((me==null?void 0:me.height)||0)/2/we;let Me=Wn-200,ae=Ht,Gt=Me,ft=Ht-240/2;if(un.length>0){const be=qs(se);let de=!1;if(be.length>0)try{const ue=bo(se,be,!1);be.every(Te=>gs.isDrawElement(Te)&&gs.isImage(Te)||Wa(Te))&&ue.width>ue.height?(Me=ue.x+ue.width+50,ae=ue.y):(Me=ue.x,ae=ue.y+ue.height+50),Gt=Me,ft=ae,de=!0}catch(ue){console.warn("[AIInputBar] Failed to calculate position for selected elements:",ue)}if(!de){let ue=null,pn=-1/0;for(const Te of un)try{const $t=bo(se,[Te],!1),mn=$t.y+$t.height;mn>pn&&(pn=mn,ue=Te)}catch($t){console.warn("[AIInputBar] Failed to get rectangle for element:",$t)}if(ue){const Te=bo(se,[ue],!1);Me=Te.x,ae=Te.y+Te.height+50,Gt=Me,ft=ae}}}const Ct=pt(ee),Ut=fo.current;let fn,Mt,is;if(Ut){const be=se.children.find(de=>de.id===Ut.id);if(be&&Zs(be)){fn=Ut.id,Mt={width:Ut.width,height:Ut.height};const de=Qn.getRectangleByPoints(be.points);is=de,Me=de.x,ae=de.y}}if(Z.generationType==="image"){const be=Math.max(Z.count??1,1),de=be>1,ue=de?void 0:fn,pn=de?void 0:Mt,Te=[],$t=`wf_batch_${ee.id}`,mn=ue?null:Hi(se,[Me,ae],Ms({workflowId:ee.id,expectedInsertPosition:[Me,ae],requestedSize:Z.size,requestedCount:1,zoom:we,title:Ct.name||"图片生成",..._o("submitted")}).size??{width:320,height:180},be,{frameRect:de?is:void 0});for(let Ye=0;Ye<be;Ye+=1){let hn=Ms({workflowId:ee.id,expectedInsertPosition:[Me,ae],targetFrameId:ue,targetFrameDimensions:pn,frameAffinityId:de?fn:void 0,frameAffinityDimensions:de?Mt:void 0,requestedSize:Z.size,requestedCount:de?1:be,batchId:de?$t:void 0,batchIndex:de?Ye+1:void 0,batchTotal:de?be:void 0,zoom:we,title:Ct.name||"图片生成",..._o("submitted")});if(!ue){const ls=mn?mn[Ye]??hn.position:hn.position;hn={...hn,position:ls,expectedInsertPosition:ls}}const Xr=Pt.insertAnchor(se,hn);Te.push(Xr)}K.current=Te.map(Ye=>Ye.id),R.current=null;const[cs]=Te;cs&&setTimeout(()=>{const Ye=Qn.getRectangleByPoints(cs.points);ws(se,[Ye.x+Ye.width/2,Ye.y+Ye.height/2],100)},100)}else{const be=Xe.insertWorkZone(se,{workflow:Ct,position:[Gt,ft],size:{width:360,height:240},expectedInsertPosition:[Me,ae],targetFrameId:fn,targetFrameDimensions:Mt,zoom:we});R.current=be.id,K.current=[],setTimeout(()=>{const de=Gt+180,ue=ft+240/2;ws(se,[de,ue],100)},100)}}const Ft=Vt("image"),wo=Vt("video"),xo=Vt("audio"),Ur={rawInput:p,userInstruction:Z.userInstruction,model:{id:Z.modelId,type:Z.generationType,isExplicit:Z.isModelExplicit},modelRef:Z.modelRef,defaultModels:Z.defaultModels||{audio:xo.modelId||Xt(),image:Ft.modelId||At(),video:wo.modelId||Yt()},defaultModelRefs:Z.defaultModelRefs||{audio:Rt(xo.profileId,xo.modelId),image:Rt(Ft.profileId,Ft.modelId),video:Rt(wo.profileId,wo.modelId)},params:{count:Z.count,size:Z.size,duration:Z.duration},selection:Lt,finalPrompt:Z.prompt,knowledgeContextRefs:Z.knowledgeContextRefs},$r=Vt("text").modelId,rs={aiContext:Ur,referenceImages:ke,textModel:$r};k.current=rs;try{const{usedSW:I}=await Xo(Z,ke,rs,ee,{appendToCurrentChatSession:V});if(I){if(Ve("success",{submitMode:"service_worker",submit_mode:"service_worker",workflowId:ee.id,workflow_id:ee.id,stepCount:ee.steps.length,step_count:ee.steps.length}),x==="image"&&H(se,"accepted"),p.trim()){const q=p.trim(),Q=w.length>0;_(q,Q,x),x==="image"?xs(q):x==="video"&&ys(q)}B&&(ct(""),wt([]),xt([]),kn([])),_e.current&&clearTimeout(_e.current),_e.current=setTimeout(()=>{nt.current=!1,It(!1),_e.current=null},1e3);return}}catch(I){console.warn("[AIInputBar] SW execution failed, falling back to main thread:",I)}if(x==="image"&&H(se,"handoff"),p.trim()){const I=p.trim(),q=w.length>0;_(I,q,x),x==="image"?xs(I):x==="video"&&ys(I)}B&&(ct(""),wt([]),xt([]),kn([])),_e.current&&clearTimeout(_e.current),_e.current=setTimeout(()=>{nt.current=!1,It(!1),_e.current=null},1e3);const zn=[],Bt=[],Vr=(I,q)=>({onChunk:Q=>{b.current(Q)},onAddSteps:Q=>{m.updateStep(I.id,"completed",{analysis:"completed"},void 0,Date.now()-q);const me=Q.map((xe,Ke)=>Zn(ee,{...xe,status:xe.status==="completed"?"completed":"pending",options:{mode:"queue",batchId:`agent_${Date.now()}`,batchIndex:Ke+1,batchTotal:Q.length,globalIndex:Ke+1}}));m.addSteps(me),Bt.push(...me),Q.forEach(xe=>{A.current({type:"tool_call",timestamp:Date.now(),toolName:xe.mcp,args:xe.args})});const we=pt(m.getWorkflow(),k.current||void 0);T.current(we),R.current&&se&&Xe.updateWorkflow(se,R.current,we)},onUpdateStep:(Q,me,we,xe)=>{m.updateStep(Q,me,we,xe),A.current({type:"tool_result",timestamp:Date.now(),toolName:Q,success:me==="completed",data:we,error:xe});const Ke=pt(m.getWorkflow(),k.current||void 0);T.current(Ke),R.current&&se&&Xe.updateWorkflow(se,R.current,Ke)}});let ut=!1;const On=()=>{const I=pt(m.getWorkflow(),k.current||void 0);T.current(I),R.current&&se&&Xe.updateWorkflow(se,R.current,I)},as=async I=>{var me,we,xe,Ke,un,Wn;const q=Date.now(),Q=Bt.length;m.updateStep(I.id,"running"),On();try{const Ht={...I.options,...Vr(I,q)},Me=Zn(ee,I),ae=await Is.executeTool({name:Me.mcp,arguments:Me.args},Ht),Gt=(we=(me=m.getWorkflow())==null?void 0:me.steps.find(ft=>ft.id===I.id))==null?void 0:we.status;if(ae.success){if(ae.taskId)zn.push(ae.taskId),m.updateStep(I.id,"running",{taskId:ae.taskId}),z(se,ae.taskId,{workflowId:ee.id,batchId:(xe=I.options)==null?void 0:xe.batchId,batchIndex:(Ke=I.options)==null?void 0:Ke.batchIndex});else if(Gt==="running"){const ft=ae.type==="text"&&ae.data&&typeof ae.data=="object"&&"content"in ae.data?{content:ae.data.content}:ae.data;m.updateStep(I.id,"completed",ft,void 0,Date.now()-q);const Ct=I.mcp==="generate_text"?(un=ae.data)==null?void 0:un.content:I.mcp==="ai_analyze"?(Wn=ae.data)==null?void 0:Wn.response:void 0;if((I.mcp==="generate_text"||I.mcp==="ai_analyze")&&Ct&&Ct.trim()&&Bt.length===Q){const Mt={id:`${I.id}-insert-text`,mcp:"insert_to_canvas",args:{items:[{type:"text",content:Ct}]},description:I.mcp==="generate_text"?"将生成文本插入画布":"将 AI 回复插入画布",status:"pending"};m.addSteps([Mt]),Bt.push(Mt)}}}else return m.updateStep(I.id,"failed",void 0,ae.error||"执行失败",Date.now()-q),!1;return!0}catch(Ht){return m.updateStep(I.id,"failed",void 0,String(Ht)),!1}finally{On()}};for(const I of ee.steps){if(ut){m.updateStep(I.id,"skipped"),On();continue}await as(I)||(ut=!0)}if(!ut&&Bt.length>0){const I=m.getWorkflow();for(const q of Bt){if(ut){m.updateStep(q.id,"skipped"),On();continue}const Q=(dn=m.getWorkflow())==null?void 0:dn.steps.find(we=>we.id===q.id);if(!Q){console.warn(`[AIInputBar] Step ${q.id} not found in workflow!`);continue}if(Q.status==="completed")continue;await as(Q)||(ut=!0)}}const Oe=m.getWorkflow(),Kr=Oe==null?void 0:Oe.steps.every(I=>I.status==="completed"||I.status==="failed"||I.status==="skipped"),Yr=zn.length>0;if(Kr&&!Yr){const I=R.current,q=K.current,Q=$e.current;(I||q.length>0)&&Q&&(Oe!=null&&Oe.steps.every(we=>{const xe=we.result;return xe!=null&&xe.taskId?ko.isPostProcessingCompleted(xe.taskId):!0}))&&setTimeout(()=>{I&&(Xe.removeWorkZone(Q,I),R.current=null),q.length>0&&(H(Q,"completed"),Y(Q))},1500)}Ve(ut?"failed":"success",{submitMode:"main_thread",submit_mode:"main_thread",workflowId:ee.id,workflow_id:ee.id,stepCount:(Oe==null?void 0:Oe.steps.length)||ee.steps.length,step_count:(Oe==null?void 0:Oe.steps.length)||ee.steps.length,createdTaskCount:zn.length,created_task_count:zn.length,failureReason:ut?"workflow_step_failed":void 0,failure_reason:ut?"workflow_step_failed":void 0})}catch(ze){console.error("Failed to create generation task:",ze),Ve("failed",{submitMode:"setup",submit_mode:"setup",error:ze instanceof Error?ze.message:String(ze)}),x==="image"&&H($e.current,"failed",{error:ze instanceof Error?ze.message:"创建图片任务失败"}),m.abortWorkflow(),nt.current=!1,It(!1)}},[Ce,Ue,Pe,D,U,m,Xo,_,Ne,yt,es,ts,v,on,fe,z,H,Y,l]);r.useEffect(()=>{const o=async s=>{await cn({prompt:s.prompt,content:s.selectedContent.map(i=>({type:i.type,url:i.url,maskImage:i.maskImage,text:i.text,name:i.name,width:i.width,height:i.height})),generationType:s.generationType,selectedModel:s.selectedModel,selectedModelRef:s.selectedModelRef,selectedParams:s.selectedParams,selectedCount:s.selectedCount,appendToCurrentChatSession:!0})};return J.current(o),()=>{J.current(null)}},[cn]);const ho=r.useCallback(async(o,s,i)=>{var Ve;const p=o.retryContext;if(!p){console.error("[AIInputBar] No retry context available for workflow");return}i&&(R.current=i);const w={id:o.id,name:o.name,description:`重试: ${o.name}`,scenarioType:o.steps.some(P=>P.mcp==="ai_analyze")?"agent_flow":"direct_generation",generationType:o.generationType,steps:o.steps.map((P,ne)=>({id:P.id,mcp:P.mcp,args:P.args,description:P.description,status:ne<s?P.status:"pending",result:ne<s?P.result:void 0,error:ne<s?P.error:void 0,duration:ne<s?P.duration:void 0,options:P.options})),metadata:{prompt:o.prompt,userInstruction:p.aiContext.userInstruction,rawInput:p.aiContext.rawInput,modelId:p.aiContext.model.id,modelRef:p.aiContext.modelRef,defaultModels:p.aiContext.defaultModels,defaultModelRefs:p.aiContext.defaultModelRefs,isModelExplicit:p.aiContext.model.isExplicit,count:o.count,size:p.aiContext.params.size,duration:p.aiContext.params.duration,referenceImages:p.referenceImages,selection:p.aiContext.selection,knowledgeContextRefs:p.aiContext.knowledgeContextRefs},createdAt:Date.now()};m.startWorkflow(w),A.current({type:"retry",timestamp:Date.now(),reason:`从步骤 ${s+1} 开始重试`,attempt:1});const x=$e.current,j=()=>{const P=pt(m.getWorkflow(),p);T.current(P),R.current&&x&&Xe.updateWorkflow(x,R.current,P)},$=pt(w,p);T.current($),R.current&&x&&Xe.updateWorkflow(x,R.current,$);const O=(P,ne)=>({onChunk:ge=>{b.current(ge)},onAddSteps:ge=>{m.updateStep(P.id,"completed",{analysis:"completed"},void 0,Date.now()-ne);const ve=ge.map((pe,je)=>Zn(w,{...pe,status:pe.status==="completed"?"completed":"pending",options:{mode:"queue",batchId:`agent_${Date.now()}`,batchIndex:je+1,batchTotal:ge.length,globalIndex:je+1}}));m.addSteps(ve),X.push(...ve),ge.forEach(pe=>{A.current({type:"tool_call",timestamp:Date.now(),toolName:pe.mcp,args:pe.args})}),j()},onUpdateStep:(ge,ve,pe,je)=>{m.updateStep(ge,ve,pe,je),A.current({type:"tool_result",timestamp:Date.now(),toolName:ge,success:ve==="completed",data:pe,error:je}),j()}}),X=[];let V=!1;const B=new Map;o.steps.forEach(P=>{var ge;const ne=(ge=P.result)==null?void 0:ge.taskId;ne&&B.set(P.id,ne)});const oe=async P=>{var ve,pe,je,ln,dn,ze;const ne=Date.now(),ge=X.length;m.updateStep(P.id,"running"),j();try{const St=B.get(P.id),st={...P.options,...O(P,ne),...St?{retryTaskId:St}:{}},Wt=Zn(w,P),Se=await Is.executeTool({name:Wt.mcp,arguments:Wt.args},st),Lt=(pe=(ve=m.getWorkflow())==null?void 0:ve.steps.find(Z=>Z.id===P.id))==null?void 0:pe.status;if(Se.success){if(Se.taskId)m.updateStep(P.id,"running",{taskId:Se.taskId}),z(x,Se.taskId,{workflowId:o.id,batchId:(je=P.options)==null?void 0:je.batchId,batchIndex:(ln=P.options)==null?void 0:ln.batchIndex});else if(Lt==="running"){const Z=Se.type==="text"&&Se.data&&typeof Se.data=="object"&&"content"in Se.data?{content:Se.data.content}:Se.data;m.updateStep(P.id,"completed",Z,void 0,Date.now()-ne);const ke=P.mcp==="generate_text"?(dn=Se.data)==null?void 0:dn.content:P.mcp==="ai_analyze"?(ze=Se.data)==null?void 0:ze.response:void 0;if((P.mcp==="generate_text"||P.mcp==="ai_analyze")&&ke&&ke.trim()&&X.length===ge){const Ft={id:`${P.id}-insert-text`,mcp:"insert_to_canvas",args:{items:[{type:"text",content:ke}]},description:P.mcp==="generate_text"?"将生成文本插入画布":"将 AI 回复插入画布",status:"pending"};m.addSteps([Ft]),X.push(Ft)}}}else return m.updateStep(P.id,"failed",void 0,Se.error||"执行失败",Date.now()-ne),!1;return!0}catch(St){return m.updateStep(P.id,"failed",void 0,String(St)),!1}finally{j()}},ce=w.steps.slice(s);for(const P of ce){if(V){m.updateStep(P.id,"skipped"),j();continue}await oe(P)||(V=!0)}if(!V&&X.length>0)for(const P of X){if(V){m.updateStep(P.id,"skipped"),j();continue}const ne=(Ve=m.getWorkflow())==null?void 0:Ve.steps.find(ve=>ve.id===P.id);if(!ne||ne.status==="completed")continue;await oe(ne)||(V=!0)}const ie=m.getWorkflow(),le=ie==null?void 0:ie.steps.every(P=>P.status==="completed"||P.status==="failed"||P.status==="skipped"),he=ie==null?void 0:ie.steps.some(P=>{var ne;return(ne=P.result)==null?void 0:ne.taskId});if(le&&!he){const P=R.current,ne=$e.current;P&&ne&&(ie!=null&&ie.steps.every(ve=>{const pe=ve.result;return pe!=null&&pe.taskId?ko.isPostProcessingCompleted(pe.taskId):!0}))&&setTimeout(()=>{Xe.removeWorkZone(ne,P),R.current=null},1500)}},[m,z]);r.useEffect(()=>{F.current(ho);const o=$e.current;o&&(o.__executeWorkflowRetry=ho)},[ho]);const zr=r.useCallback(o=>{var s;if(!o.nativeEvent.isComposing&&!(o.key==="Enter"&&(o.shiftKey||o.altKey))){if(($o||Vo||Ko)&&(o.key==="Enter"||o.key==="Tab")){o.preventDefault();return}if(o.key==="Enter"){o.preventDefault(),Fe.track("ai_input_submit_keyboard"),cn("keyboard");return}if(o.key==="Escape"){dt(!1),(s=Ee.current)==null||s.blur();return}}},[cn]),Or=r.useCallback(()=>{Fe.track("ai_input_focus_textarea"),dt(!0)},[]),Wr=r.useCallback(()=>{Fe.track("ai_input_blur_textarea"),dt(!1)},[]),Lr=r.useCallback(o=>{o.preventDefault(),o.stopPropagation(),zo(s=>!s),dt(!0),requestAnimationFrame(()=>{var s;(s=Ee.current)==null||s.focus()})},[]),Fr=r.useCallback(o=>{const s=o.target.value,i=o.target.selectionStart||s.length;if(ct(s),_n(!1),i>0){const p=s[i-1],w=i>1?s[i-2]:" ";p==="#"&&(w===" "||w===`
107
+ `||i===1)&&(_t.current=i-1,co(!0),lo(!1),uo(!1))}},[]),Br=r.useMemo(()=>JSON.stringify({generationType:v,model:D,profileId:(U==null?void 0:U.profileId)||null,hasAttachedContent:Ue.length>0,attachedCount:Ue.length,knowledgeContextCount:yt.length,promptLengthBucket:So(Ce.trim().length)}),[Ue.length,v,yt.length,Ce,D,U==null?void 0:U.profileId]),go=Ce.trim().length>0||Ue.length>0,Hr=lr&&go&&!Pe,ns=mr===!0,Gr=Nt.some(o=>{var s;return o.type==="text"&&((s=o.text)==null?void 0:s.trim())}),vt=Qe||Zt||Ue.length>0||dr,os=Qe?"long-text":vt?"expanded":"collapsed",ss=Qe?a==="zh"?"收起提示词输入框":"Collapse prompt input":a==="zh"?"展开提示词输入框":"Expand prompt input";return r.useLayoutEffect(()=>{const o=Ee.current;if(!o)return;const s=rc(o)>Qi;if(pr(s),!s&&Qe){zo(!1),$s(o,vt?"expanded":"collapsed");return}$s(o,os)},[os,Qe,Ce,vt]),u.jsxs(u.Fragment,{children:[W,u.jsxs("div",{ref:En,className:Un("ai-input-bar",Ys,t,{"ai-input-bar--with-inspiration":ns}),"data-testid":"ai-input-bar",children:[u.jsx(ir,{language:a,onSelectionChange:Tr,externalBoardRef:$e,onCanvasEmptyChange:hr,isDataReady:e,onFrameSelected:Pr}),u.jsx(zi,{isCanvasEmpty:ns,onSelectPrompt:yr,onOpenPromptTool:_r}),u.jsx(La,{variant:"canvas",expanded:vt,longText:Qe,disabled:Pe,leftTools:u.jsxs(u.Fragment,{children:[u.jsx("input",{ref:qo,type:"file",accept:"image/*",multiple:!0,onChange:Mr,style:{display:"none"}}),u.jsx(gt,{content:a==="zh"?"上传图片":"Upload images",showArrow:!1,children:u.jsx("button",{className:"ai-input-bar__upload-btn",onMouseDown:o=>{o.preventDefault(),o.stopPropagation()},onClick:Cr,"data-track":"ai_input_click_upload",children:u.jsx(Ka,{size:18})})}),u.jsx(gt,{content:a==="zh"?"从素材库选择":"Select from library",showArrow:!1,children:u.jsx("button",{className:"ai-input-bar__library-btn",onMouseDown:o=>{o.preventDefault(),o.stopPropagation()},onClick:()=>zt(!0),"data-track":"ai_input_click_library",children:u.jsx(Ya,{size:18})})}),u.jsx(Xa,{value:yt,onChange:Sr,disabled:Pe,language:a,variant:"compact",className:"ai-input-bar__knowledge-selector"})]}),controls:u.jsxs(u.Fragment,{children:[u.jsx(Ua,{value:v,onSelect:et,disabled:Pe}),v==="agent"&&u.jsx(Pi,{value:fe,onSelect:vn,onSelectSkill:Dr,onAddSkill:br,disabled:Pe}),u.jsx($n,{selectedModel:D,selectedSelectionKey:Le(D,U),onSelect:Ar,onSelectModel:Rr,language:a,models:Pn,header:a==="zh"?v==="agent"?"选择文本模型 (↑↓ Tab)":"选择模型 (↑↓ Tab)":v==="agent"?"Select text model (↑↓ Tab)":"Select model (↑↓ Tab)",isOpen:$o,onOpenChange:gr}),v==="agent"&&fe!==rt&&bt.includes("image")&&u.jsx($n,{selectedModel:Be,selectedSelectionKey:Le(Be,Ae),onSelect:(o,s)=>po("image",o,s),onSelectModel:o=>mo("image",o),language:a,models:Jt,header:a==="zh"?"选择图片模型 (↑↓ Tab)":"Select image model (↑↓ Tab)"}),v==="agent"&&fe!==rt&&bt.includes("video")&&u.jsx($n,{selectedModel:He,selectedSelectionKey:Le(He,Re),onSelect:(o,s)=>po("video",o,s),onSelectModel:o=>mo("video",o),language:a,models:Qt,header:a==="zh"?"选择视频模型 (↑↓ Tab)":"Select video model (↑↓ Tab)"}),v==="agent"&&fe!==rt&&bt.includes("audio")&&u.jsx($n,{selectedModel:Ge,selectedSelectionKey:Le(Ge,De),onSelect:(o,s)=>po("audio",o,s),onSelectModel:o=>mo("audio",o),language:a,models:en,header:a==="zh"?"选择音频模型 (↑↓ Tab)":"Select audio model (↑↓ Tab)"}),v!=="agent"&&sn.length>0&&u.jsx($a,{selectedParams:Ne,onParamChange:Nr,compatibleParams:sn,modelId:D,language:a,isOpen:Vo,onOpenChange:wr},D),v!=="agent"&&v!=="text"&&v!=="audio"&&u.jsx(Va,{value:on,onSelect:jr,disabled:Pe,isOpen:Ko,onOpenChange:xr})]}),sendButton:u.jsx("button",{className:Un("ai-input-bar__send-btn",{active:go,loading:Pe,"ai-input-bar__send-btn--guide":Hr}),onMouseDown:o=>{o.preventDefault(),o.stopPropagation()},onClick:()=>cn("button"),disabled:!go||Pe,"data-track":"ai_input_click_send","data-track-params":Br,"data-testid":"ai-send-btn",children:u.jsx(To,{size:18})}),preview:Ue.length>0?u.jsx(Ga,{items:Ue,language:a,enableHoverPreview:!0,onRemove:Er,removableStartIndex:lt.length}):null,textarea:u.jsxs(u.Fragment,{children:[u.jsxs("div",{className:"ai-input-bar__rich-input",children:[fr?u.jsx(gt,{content:ss,showArrow:!1,children:u.jsx("button",{type:"button",className:Un("ai-input-bar__prompt-expand-btn",{"ai-input-bar__prompt-expand-btn--active":Qe}),"aria-label":ss,onMouseDown:o=>{o.preventDefault(),o.stopPropagation()},onClick:Lr,disabled:Pe,children:Qe?u.jsx(Fa,{size:13,"aria-hidden":"true"}):u.jsx(Ba,{size:13,"aria-hidden":"true"})})}):null,u.jsx("textarea",{ref:Ee,className:Un("ai-input-bar__input",{"ai-input-bar__input--focused":vt,"ai-input-bar__input--long-text":Qe}),value:Ce,onChange:Fr,onKeyDown:zr,onFocus:Or,onBlur:Wr,placeholder:v==="agent"?a==="zh"?"输入指令,让 Agent 为你工作...":"Type instructions for Agent...":v==="text"?a==="zh"?"输入你想生成的文本内容、文章、摘要或 Markdown":"Describe the text, article, summary, or markdown you want":v==="audio"?Gr?a==="zh"?"已有文本,无需额外提示词,直接发送":"Text already selected. No extra prompt needed, just send":a==="zh"?"描述你想要生成的音乐、风格、歌词或情绪":"Describe the music, style, lyrics, or mood you want":a==="zh"?`描述你想要创建的${v==="image"?"图片":"视频"}`:`Describe the ${v==="image"?"image":"video"} you want to create`,rows:Qe?ec:vt?rr:Zi,disabled:Pe,"data-testid":"ai-input-textarea"})]}),u.jsx(mi,{generationType:v,onSelectPrompt:Ir,language:a,onBeforeOpenMyPrompts:n,extraActions:vt?u.jsx(Ha,{className:"prompt-history-popover__action-btn",originalPrompt:Ce,language:a,scenarioId:`ai-input.${v}`,disabled:Pe,allowStructuredMode:!0,onOpenChange:ur,onMouseDown:o=>{o.preventDefault(),o.stopPropagation(),dt(!0)},onApply:o=>{ct(o),dt(!0),requestAnimationFrame(()=>{var s;(s=Ee.current)==null||s.focus()})}}):null})]})}),Yo&&u.jsx(qa,{isOpen:Yo,onClose:()=>zt(!1),mode:Za.SELECT,filterType:hs.IMAGE,onSelect:kr,onSelectMultiple:vr,batchSelectButtonText:"批量插入对话框"})]})]})});cr.displayName="AIInputBar";function Sc({isDataReady:t,activationKey:e,onEnableToolWindows:n,onEnableRuntime:l}){const a=r.useRef(null);return r.useEffect(()=>{if(e<=0)return;const d=window.setTimeout(()=>{var g;const c=(g=a.current)==null?void 0:g.querySelector('[data-testid="ai-input-textarea"]');c==null||c.focus()},0);return()=>{window.clearTimeout(d)}},[e]),u.jsx(oi,{children:u.jsx(ei,{children:u.jsx("div",{ref:a,children:u.jsx(cr,{isDataReady:t,onEnableToolWindows:n,onEnableRuntime:l})})})})}export{Sc as DeferredAIInputBar,Sc as default};
@@ -0,0 +1 @@
1
+ @charset "UTF-8";.prompt-history-popover{position:relative;align-self:flex-start;z-index:10;display:flex;align-items:center;flex-shrink:0}.prompt-history-popover__actions{display:flex;flex-direction:column;align-items:center;gap:4px}.prompt-history-popover__trigger{display:flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:none;border-radius:6px;background:transparent;color:var(--td-text-color-secondary, #666);cursor:pointer;transition:all .2s ease}.prompt-history-popover__trigger:hover{background:var(--td-bg-color-container-hover, rgba(0, 0, 0, .04));color:var(--td-text-color-primary, #333)}.prompt-history-popover__action-btn{display:flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:none;border-radius:6px;background:transparent;color:var(--td-text-color-secondary, #666);cursor:pointer;transition:all .2s ease}.prompt-history-popover__action-btn:hover:not(:disabled){background:var(--td-bg-color-container-hover, rgba(0, 0, 0, .04));color:var(--td-text-color-primary, #333)}.prompt-history-popover__action-btn:disabled{opacity:.55;cursor:not-allowed}.prompt-history-popover__panel-wrapper{position:absolute;bottom:calc(100% + 8px);right:0;z-index:1000}.inspiration-board{padding:12px;background:var(--island-bg-color, #fff);border:none;border-radius:24px 24px 0 0;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:none;animation:slideUp .3s ease-out;pointer-events:auto;width:100%;box-sizing:border-box}.inspiration-board--guide .inspiration-board__header{align-items:flex-start}.inspiration-board--guide .inspiration-board__hide-btn{margin-left:auto;margin-right:0}.inspiration-board__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;gap:8px}.inspiration-board__title{margin:0;font-size:14px;font-weight:600;color:var(--td-text-color-primary);flex:1}.inspiration-board__guide-title-group{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.inspiration-board__back-btn{display:flex;align-items:center;gap:4px;padding:4px 8px;border:none;border-radius:6px;cursor:pointer;font-size:12px;font-weight:500;background:var(--td-bg-color-container-hover);color:var(--td-text-color-secondary);transition:all .2s ease;flex-shrink:0}.inspiration-board__back-btn:hover{color:var(--td-text-color-primary);background:var(--td-bg-color-container-active)}.inspiration-board__back-btn:active{transform:scale(.97)}.inspiration-board__back-btn svg{flex-shrink:0}.inspiration-board__hide-btn{display:flex;align-items:center;gap:4px;padding:4px 10px;border:none;border-radius:6px;cursor:pointer;font-size:12px;font-weight:500;background:transparent;color:var(--td-text-color-placeholder);transition:all .2s ease;margin-right:8px}.inspiration-board__hide-btn:hover{background:var(--td-bg-color-container-hover);color:var(--td-text-color-secondary)}.inspiration-board__hide-btn:active{transform:scale(.97)}.inspiration-board__hide-btn svg{flex-shrink:0}.inspiration-board__prompt-btn{display:flex;align-items:center;gap:4px;padding:4px 10px;border:none;border-radius:6px;cursor:pointer;font-size:12px;font-weight:500;transition:all .2s ease;margin-right:8px}.inspiration-board__prompt-btn:active{transform:scale(.97)}.inspiration-board__prompt-btn svg{flex-shrink:0}.inspiration-board__pagination{display:flex;align-items:center;gap:4px}.inspiration-board__page-indicator{font-size:11px;color:var(--td-text-color-placeholder);font-variant-numeric:tabular-nums}.inspiration-board__nav-buttons{display:flex;gap:2px}.inspiration-board__nav-btn{display:flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;background:#fff;border:1px solid var(--td-component-border);border-radius:6px;cursor:pointer;color:var(--td-text-color-secondary);transition:all .2s ease}.inspiration-board__nav-btn:hover{background:var(--td-bg-color-container-hover);color:var(--td-text-color-primary);border-color:var(--td-brand-color-light)}.inspiration-board__nav-btn:active{transform:scale(.95)}.inspiration-board__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.inspiration-board__guide{display:grid;gap:10px;width:100%;animation:fadeIn .3s ease-out;justify-items:stretch}.inspiration-board__guide-main{display:grid;grid-template-columns:minmax(0,1fr) minmax(220px,.78fr);gap:18px;align-items:center;width:100%;min-width:0}.inspiration-board__guide-summary{display:grid;grid-template-columns:84px minmax(0,1fr);gap:12px;align-items:center;width:100%;box-sizing:border-box;min-width:0}.inspiration-board__guide-image{width:84px;height:84px;-o-object-fit:cover;object-fit:cover;border-radius:10px;border:1px solid var(--td-component-border);background:var(--td-bg-color-container);flex-shrink:0}.inspiration-board__guide-content{display:flex;flex-direction:column;justify-content:center;min-width:0}.inspiration-board__guide-badge{width:-moz-fit-content;width:fit-content;margin-bottom:6px;padding:2px 8px;font-size:10px;font-weight:600;border-radius:4px}.inspiration-board__guide-name{margin:0 0 4px;font-size:14px;line-height:1.35;font-weight:600;color:var(--td-text-color-primary)}.inspiration-board__guide-description{margin:0;font-size:12px;line-height:1.5;color:var(--td-text-color-secondary)}.inspiration-board__guide-action{display:grid;gap:8px;min-width:0}.inspiration-board__guide-cue{position:relative;min-height:92px;overflow:hidden;border-radius:12px;background:linear-gradient(135deg,#f59e0b1a,#fff0),repeating-linear-gradient(135deg,rgba(245,158,11,.08) 0,rgba(245,158,11,.08) 1px,transparent 1px,transparent 12px)}.inspiration-board__guide-pointer{position:absolute;left:28px;top:18px;z-index:3;color:#b45309;pointer-events:none;filter:drop-shadow(0 4px 8px rgba(245,158,11,.18));transform-origin:70% 70%;animation:pointerTap 1.8s ease-in-out infinite}.inspiration-board__guide-send-preview{position:absolute;right:32px;bottom:24px;display:flex;align-items:center;justify-content:center;width:34px;height:34px;padding:0;border:0;border-radius:50%;background:#f59e0be0;color:#fff;cursor:pointer;z-index:2;box-shadow:inset 0 0 0 2px #ffffff94,0 8px 18px #f59e0b33}.inspiration-board__guide-send-preview:hover{background:#f59e0bf2}.inspiration-board__guide-tip{display:flex;align-items:center;gap:8px;width:100%;box-sizing:border-box;padding:8px 10px;border-radius:10px;background:#f59e0b1a;color:#b45309;font-size:12px;line-height:1.45;font-weight:500}.inspiration-board__guide-tip svg{flex-shrink:0}.inspiration-card{position:relative;display:flex;flex-direction:column;background:#fff;border:1px solid var(--td-component-border);border-radius:12px;overflow:hidden;cursor:pointer;transition:all .2s ease}.inspiration-card:hover{border-color:var(--td-brand-color-light);box-shadow:0 4px 12px #00000014;transform:translateY(-2px)}.inspiration-card:hover .inspiration-card__image{transform:scale(1.05)}.inspiration-card:hover .inspiration-card__hover-overlay{opacity:1}.inspiration-card:hover .inspiration-card__arrow{transform:translateY(0)}.inspiration-card:hover .inspiration-card__title{color:var(--td-brand-color)}.inspiration-card--placeholder{visibility:hidden}.inspiration-card__image-wrapper{position:relative;aspect-ratio:1/1;overflow:hidden;background:var(--td-bg-color-container)}.inspiration-card__image{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;transition:transform .5s ease}.inspiration-card__badge{position:absolute;top:8px;left:8px;padding:2px 8px;font-size:10px;font-weight:600;border-radius:4px;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background-color:#fffffff2}.inspiration-card__hover-overlay{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;background:#0000001a;opacity:0;transition:opacity .2s ease}.inspiration-card__arrow{display:flex;align-items:center;justify-content:center;width:28px;height:28px;background:#fffffff2;border-radius:50%;box-shadow:0 2px 8px #00000026;color:var(--td-text-color-primary);transform:translateY(8px);transition:transform .2s ease}.inspiration-card__content{padding:8px}.inspiration-card__title{margin:0 0 4px;font-size:13px;font-weight:600;color:var(--td-text-color-primary);line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:color .2s ease}.inspiration-card__description{margin:0;font-size:11px;color:var(--td-text-color-secondary);line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;height:32px}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes pointerTap{0%,18%,to{left:28px;top:18px;transform:rotate(-10deg) scale(1)}58%,70%{left:calc(100% - 62px);top:30px;transform:rotate(-10deg) scale(1)}78%{left:calc(100% - 62px);top:30px;transform:rotate(-10deg) scale(.82)}88%{left:calc(100% - 62px);top:30px;transform:rotate(-10deg) scale(1)}}@media(max-width:640px){.inspiration-board__guide-main{grid-template-columns:1fr;gap:10px}.inspiration-board__guide-summary{gap:10px}.inspiration-board__guide-image{width:68px;height:68px}.inspiration-board__guide-summary{grid-template-columns:68px minmax(0,1fr)}.inspiration-board__guide-cue{min-height:70px}.inspiration-board__hide-btn,.inspiration-board__prompt-btn,.inspiration-board__back-btn{padding-left:8px;padding-right:8px}}
@@ -0,0 +1,2 @@
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 s}from"./startup-runtime-BrfuwjQS.js";import{el as F,a8 as t,P as l}from"./ai-chat-B_eUkugc.js";const U=l.lazy(()=>s(()=>import("./tool-windows-Bp0hMtkJ.js").then(e=>e.b6),__vite__mapDeps([0,1]),import.meta.url).then(e=>({default:e.ProjectDrawer}))),W=l.lazy(()=>s(()=>import("./tool-windows-Bp0hMtkJ.js").then(e=>e.b7),__vite__mapDeps([0,1]),import.meta.url).then(e=>({default:e.ToolboxDrawer}))),q=l.lazy(()=>s(()=>import("./tool-windows-Bp0hMtkJ.js").then(e=>e.b8),__vite__mapDeps([0,1]),import.meta.url).then(e=>({default:e.DeferredMediaLibraryModal}))),G=l.lazy(()=>s(()=>import("./tool-windows-Bp0hMtkJ.js").then(e=>e.b9),__vite__mapDeps([0,1]),import.meta.url).then(e=>({default:e.BackupRestoreDialog}))),H=l.lazy(()=>s(()=>import("./tool-windows-Bp0hMtkJ.js").then(e=>e.ba),__vite__mapDeps([0,1]),import.meta.url).then(e=>({default:e.VersionUpdatePrompt}))),J=l.lazy(()=>s(()=>import("./tool-windows-Bp0hMtkJ.js").then(e=>e.bb),__vite__mapDeps([0,1]),import.meta.url).then(e=>({default:e.PerformancePanel}))),K=l.lazy(()=>s(()=>import("./tool-windows-Bp0hMtkJ.js").then(e=>e.bc),__vite__mapDeps([0,1]),import.meta.url).then(e=>({default:e.DeferredSyncSettings}))),N=l.lazy(()=>s(()=>import("./tool-windows-Bp0hMtkJ.js").then(e=>e.bd),__vite__mapDeps([0,1]),import.meta.url).then(e=>({default:e.CommandPalette}))),Q=l.lazy(()=>s(()=>import("./tool-windows-Bp0hMtkJ.js").then(e=>e.be),__vite__mapDeps([0,1]),import.meta.url).then(e=>({default:e.CanvasSearch}))),X=l.lazy(()=>s(()=>import("./tool-windows-Bp0hMtkJ.js").then(e=>e.bf),__vite__mapDeps([0,1]),import.meta.url).then(e=>({default:e.ToolWinBoxManager})));function $({board:e,value:T,containerRef:a,versionUpdateEnabled:v,performancePanelEnabled:d,toolWindowManagerEnabled:O,projectDrawerOpen:p,toolboxDrawerOpen:r,mediaLibraryOpen:_,mediaLibraryConfig:n,backupRestoreOpen:h,cloudSyncOpen:x,onBoardSwitch:c,setProjectDrawerOpen:k,setToolboxDrawerOpen:V,setMediaLibraryOpen:A,setBackupRestoreOpen:I,setCloudSyncOpen:R,handleOpenMediaLibrary:f,handleBeforeSwitch:m,onCreateProjectForMemory:w}){const{appState:P,setAppState:S}=F(),j=P.openCommandPalette||!1,E=P.openCanvasSearch||!1;return t.jsxs(t.Fragment,{children:[_&&t.jsx(l.Suspense,{fallback:null,children:t.jsx(q,{isOpen:_,onClose:()=>A(!1),mode:n==null?void 0:n.mode,filterType:n==null?void 0:n.filterType,onSelect:n==null?void 0:n.onSelect,onSelectMultiple:n==null?void 0:n.onSelectMultiple,selectButtonText:n==null?void 0:n.selectButtonText,batchSelectButtonText:n==null?void 0:n.batchSelectButtonText})}),h&&t.jsx(l.Suspense,{fallback:null,children:t.jsx(G,{open:h,onOpenChange:I,container:a.current,onBeforeImport:async()=>{await m()},onSwitchBoard:async(o,D)=>{const{workspaceService:z}=await s(async()=>{const{workspaceService:B}=await import("./ai-chat-B_eUkugc.js").then(M=>M.sD);return{workspaceService:B}},__vite__mapDeps([0]),import.meta.url),u=await z.switchBoard(o);u&&c&&(D&&(u.viewport=D),c(u))}})}),x&&t.jsx(l.Suspense,{fallback:null,children:t.jsx(K,{visible:x,onClose:()=>R(!1)})}),v&&t.jsx(l.Suspense,{fallback:null,children:t.jsx(H,{})}),O&&t.jsx(l.Suspense,{fallback:null,children:t.jsx(X,{})}),j&&t.jsx(l.Suspense,{fallback:null,children:t.jsx(N,{open:j,onClose:()=>{S(o=>({...o,openCommandPalette:!1}))},board:e,container:a.current})}),E&&t.jsx(l.Suspense,{fallback:null,children:t.jsx(Q,{open:E,onClose:()=>{S(o=>({...o,openCanvasSearch:!1}))},board:e})}),d&&t.jsx(l.Suspense,{fallback:null,children:t.jsx(J,{container:a.current,onCreateProject:w,elements:(e==null?void 0:e.children)||T})}),p&&t.jsx(l.Suspense,{fallback:null,children:t.jsx(U,{isOpen:p,onOpenChange:k,onBeforeSwitch:m,onBoardSwitch:c,onOpenMediaLibrary:f})}),r&&t.jsx(l.Suspense,{fallback:null,children:t.jsx(W,{isOpen:r,onOpenChange:V})})]})}export{$ as DrawnixDeferredFeatures,$ as default};