aitu-app 0.5.48 → 0.5.49
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.
- package/README.md +3 -3
- package/assets/{ChatMessagesArea-JoqYi_ld.js → ChatMessagesArea-B1bvPNpp.js} +3 -3
- package/assets/DialogTaskList-BSSAOh5P.js +1 -0
- package/assets/{DialogTaskList-CKYvHKiR.css → DialogTaskList-CB3gJdCM.css} +1 -1
- package/assets/{ToolboxDrawer-BOUbQFDR.js → ToolboxDrawer-D0eNy0jh.js} +1 -1
- package/assets/{ai-analyze-kieSuHap.js → ai-analyze-BfguOEXf.js} +1 -1
- package/assets/ai-image-generation-8fHKU7WT.js +1 -0
- package/assets/ai-image-generation-C0zeQsiB.css +1 -0
- package/assets/ai-video-generation-CUxwbJSx.js +5 -0
- package/assets/ai-video-generation-D3hRXNLI.css +1 -0
- package/assets/{arc-CK8n3maf.js → arc-CMg9c-1-.js} +1 -1
- package/assets/{arc-BaS7Wfdw.js → arc-Ch5MOiK9.js} +1 -1
- package/assets/{batch-image-generation-CXI7JS0B.js → batch-image-generation-Do-DwI3V.js} +1 -1
- package/assets/{blockDiagram-38ab4fdb-t4yZT92L.js → blockDiagram-38ab4fdb-BSLYbN30.js} +1 -1
- package/assets/{blockDiagram-38ab4fdb-2I9X-Mrl.js → blockDiagram-38ab4fdb-Ggjt8TxA.js} +1 -1
- package/assets/{c4Diagram-3d4e48cf-33GS-ewd.js → c4Diagram-3d4e48cf-C0C3iAjE.js} +1 -1
- package/assets/{c4Diagram-3d4e48cf-BC8WFOQe.js → c4Diagram-3d4e48cf-DkqBfxSN.js} +1 -1
- package/assets/channel-Ck9KEf2t.js +1 -0
- package/assets/channel-D5T_ahKm.js +1 -0
- package/assets/{classDiagram-70f12bd4-C8akklOH.js → classDiagram-70f12bd4-B4UmUpMK.js} +1 -1
- package/assets/{classDiagram-70f12bd4-CqBjoz8w.js → classDiagram-70f12bd4-Be9fBTCV.js} +1 -1
- package/assets/{classDiagram-v2-f2320105-B2ATMAZk.js → classDiagram-v2-f2320105-C2mLjgdh.js} +1 -1
- package/assets/{classDiagram-v2-f2320105-BupfQjOQ.js → classDiagram-v2-f2320105-VmfLSAro.js} +1 -1
- package/assets/clone-B_t1LC0g.js +1 -0
- package/assets/clone-pVjeeFE0.js +1 -0
- package/assets/{createText-2e5e7dd3-BYZnckX_.js → createText-2e5e7dd3--nnrtJNV.js} +1 -1
- package/assets/{createText-2e5e7dd3-CNyW-xvt.js → createText-2e5e7dd3-Br8kBZH8.js} +1 -1
- package/assets/{edges-e0da2a9e-BosqVjkA.js → edges-e0da2a9e-CHqsQcjz.js} +1 -1
- package/assets/{edges-e0da2a9e-UXCUvB-1.js → edges-e0da2a9e-Cjrn7Aq-.js} +1 -1
- package/assets/{erDiagram-9861fffd--Z0GlgEn.js → erDiagram-9861fffd-B_6GFzTQ.js} +1 -1
- package/assets/{erDiagram-9861fffd-wOY7N0rY.js → erDiagram-9861fffd-ufYXjhwZ.js} +1 -1
- package/assets/{flowDb-956e92f1-C3fx0kTY.js → flowDb-956e92f1-BKwUQ-hl.js} +1 -1
- package/assets/{flowDb-956e92f1-BVIXa6sC.js → flowDb-956e92f1-CAj-C03Q.js} +1 -1
- package/assets/{flowDiagram-66a62f08-BfFxG84W.js → flowDiagram-66a62f08-C8FXmVce.js} +1 -1
- package/assets/{flowDiagram-66a62f08-CDDobrgc.js → flowDiagram-66a62f08-Dq5fbX1Y.js} +1 -1
- package/assets/flowDiagram-v2-96b9c2cf-8w1P8dgG.js +1 -0
- package/assets/flowDiagram-v2-96b9c2cf-CRt8Tw6t.js +1 -0
- package/assets/{flowchart-elk-definition-4a651766-DTa5Ugc1.js → flowchart-elk-definition-4a651766-BjL7RQ7O.js} +1 -1
- package/assets/{flowchart-elk-definition-4a651766-BmmcFiPZ.js → flowchart-elk-definition-4a651766-CD9vIlxr.js} +1 -1
- package/assets/{ganttDiagram-c361ad54-DPlnAJJx.js → ganttDiagram-c361ad54-D7_HVbbq.js} +1 -1
- package/assets/{ganttDiagram-c361ad54-Bbn-nHAs.js → ganttDiagram-c361ad54-n9ELUpiB.js} +1 -1
- package/assets/{gitGraphDiagram-72cf32ee-Dl7ComzH.js → gitGraphDiagram-72cf32ee-B47OoAyc.js} +1 -1
- package/assets/{gitGraphDiagram-72cf32ee-DeIZExbc.js → gitGraphDiagram-72cf32ee-xb7q7cuL.js} +1 -1
- package/assets/{graph-DHiGmXV6.js → graph-BeeTwCH3.js} +1 -1
- package/assets/{graph-Dfptg6Al.js → graph-Dz4khTZm.js} +1 -1
- package/assets/{grid-image-CARGYvh_.js → grid-image-ggMTti9w.js} +1 -1
- package/assets/{has-9uhq4yT9.js → has-BsV_fqUH.js} +1 -1
- package/assets/{hasIn-CvQXXf4b.js → hasIn-__wdhirj.js} +1 -1
- package/assets/{index-3862675e-DUJvwjP7.js → index-3862675e-CYiGbhd6.js} +1 -1
- package/assets/{index-3862675e-DCshUjlh.js → index-3862675e-CkTdLODf.js} +1 -1
- package/assets/{index-DM-AXm0q.js → index-4geuWAgE.js} +1 -1
- package/assets/index-920UvYLQ.css +9 -0
- package/assets/{index-Dj4_g4Si.js → index-9ACcVAdm.js} +4 -4
- package/assets/{index-sBjGDMrw.js → index-B-LmeOUH.js} +1 -1
- package/assets/{index-DIw6QU0k.js → index-BNEDl4J2.js} +1 -1
- package/assets/{index-B-jeRaNV.js → index-BVpCfTKg.js} +1 -1
- package/assets/{index-DVI-EeTo.js → index-C6OIGmaF.js} +1 -1
- package/assets/{index-Y-mRUgjd.js → index-CvrZFlag.js} +314 -314
- package/assets/{index-CpsKZ1yJ.js → index-DxPda7bw.js} +1 -1
- package/assets/{index-CeRB07JB.js → index-FYEvKL6-.js} +2 -2
- package/assets/{index-DB2ccmBs.js → index-WI9w4wcL.js} +1 -1
- package/assets/{infoDiagram-f8f76790-BoZxRLZa.js → infoDiagram-f8f76790-BAaXqHpe.js} +1 -1
- package/assets/{infoDiagram-f8f76790-BjAnq3Fb.js → infoDiagram-f8f76790-C8gMSdke.js} +1 -1
- package/assets/{inspiration-board-DXC6MTKm.js → inspiration-board-DLQ3bgA5.js} +1 -1
- package/assets/{isEmpty-CRzPUjzr.js → isEmpty-CRXO1bLi.js} +1 -1
- package/assets/{journeyDiagram-49397b02-CsYOzIaw.js → journeyDiagram-49397b02-Bth8e3TS.js} +1 -1
- package/assets/{journeyDiagram-49397b02-vhPJlWtN.js → journeyDiagram-49397b02-C7g-8Hvn.js} +1 -1
- package/assets/{layout-DsD2W5B-.js → layout-B0Pa2rBm.js} +1 -1
- package/assets/{layout-XsNQWLV0.js → layout-KY-X4wEQ.js} +1 -1
- package/assets/{line-GD0UFJy2.js → line-BDjluZsg.js} +1 -1
- package/assets/{line-DrBei8wT.js → line-Nete9nw6.js} +1 -1
- package/assets/{linear-DARUpMG_.js → linear-BlRKrrAt.js} +1 -1
- package/assets/{linear-C3LLInY2.js → linear-Bu02SEaK.js} +1 -1
- package/assets/{mermaid.core-mIRDwmS-.js → mermaid.core-yVPD7ieH.js} +4 -4
- package/assets/{mindmap-definition-fc14e90a-DzsbYOPH.js → mindmap-definition-fc14e90a-CbPO3n6C.js} +1 -1
- package/assets/{mindmap-definition-fc14e90a-RTmso76i.js → mindmap-definition-fc14e90a-U1pw-9Ng.js} +1 -1
- package/assets/{photo-wall-splitter-BCzhetlI.js → photo-wall-splitter-gAV3J-3j.js} +1 -1
- package/assets/{pick-Cnk3HYZr.js → pick-CIdLSF0Z.js} +1 -1
- package/assets/{pieDiagram-8a3498a8-BAWZdKJV.js → pieDiagram-8a3498a8-CFDa6wYQ.js} +1 -1
- package/assets/{pieDiagram-8a3498a8-BtX8nRt7.js → pieDiagram-8a3498a8-D0ywaKa6.js} +1 -1
- package/assets/{quadrantDiagram-120e2f19-9KVrLKzH.js → quadrantDiagram-120e2f19-B0aJtXqY.js} +1 -1
- package/assets/{quadrantDiagram-120e2f19-DuY-5Itm.js → quadrantDiagram-120e2f19-JUTgchBu.js} +1 -1
- package/assets/{requirementDiagram-deff3bca-C8rxl4Fw.js → requirementDiagram-deff3bca-B9FhatVo.js} +1 -1
- package/assets/{requirementDiagram-deff3bca-x1t2_QSh.js → requirementDiagram-deff3bca-D8Rme9Ge.js} +1 -1
- package/assets/{sankeyDiagram-04a897e0-BkVc7A98.js → sankeyDiagram-04a897e0-B-gbcDvI.js} +1 -1
- package/assets/{sankeyDiagram-04a897e0-DOdzmEl3.js → sankeyDiagram-04a897e0-DfbHNdsW.js} +1 -1
- package/assets/{sequenceDiagram-704730f1-BcyOOfKB.js → sequenceDiagram-704730f1-B6l3EwQG.js} +1 -1
- package/assets/{sequenceDiagram-704730f1-CYZBUVl_.js → sequenceDiagram-704730f1-BKBzlyjL.js} +1 -1
- package/assets/settings-dialog-Blkz7e5P.js +1 -0
- package/assets/{stateDiagram-587899a1-AYFDuJIM.js → stateDiagram-587899a1-CWO6S--h.js} +1 -1
- package/assets/{stateDiagram-587899a1-CAV_A2k6.js → stateDiagram-587899a1-D9ZTBTJW.js} +1 -1
- package/assets/{stateDiagram-v2-d93cdb3a-BS-kfhoL.js → stateDiagram-v2-d93cdb3a-DpPNUJIJ.js} +1 -1
- package/assets/{stateDiagram-v2-d93cdb3a-2j9li-ny.js → stateDiagram-v2-d93cdb3a-RDHyBBsc.js} +1 -1
- package/assets/{styles-6aaf32cf-CJe3mUWs.js → styles-6aaf32cf-raskOVgm.js} +1 -1
- package/assets/{styles-6aaf32cf-Dt2RGJ8A.js → styles-6aaf32cf-rn-U3G-T.js} +1 -1
- package/assets/{styles-9a916d00-IS97_M50.js → styles-9a916d00-8SvYD_6R.js} +1 -1
- package/assets/{styles-9a916d00-cAlItWAP.js → styles-9a916d00-het7_VjA.js} +1 -1
- package/assets/{styles-c10674c1-C-hWHZcb.js → styles-c10674c1-C1pqdP96.js} +1 -1
- package/assets/{styles-c10674c1-DVJIr7Cb.js → styles-c10674c1-CUvKZMsb.js} +1 -1
- package/assets/{svgDrawCommon-08f97a94-C0x85f0W.js → svgDrawCommon-08f97a94-CzdMcmjT.js} +1 -1
- package/assets/{svgDrawCommon-08f97a94-CaM6o6f6.js → svgDrawCommon-08f97a94-DfziZaZJ.js} +1 -1
- package/assets/{timeline-definition-85554ec2-BYDl8yjo.js → timeline-definition-85554ec2-D8z5E6iu.js} +1 -1
- package/assets/{timeline-definition-85554ec2-hev3Czd5.js → timeline-definition-85554ec2-DSFZUclI.js} +1 -1
- package/assets/{ttd-dialog-Dz9MP-od.js → ttd-dialog-DMiivQmt.js} +4 -4
- package/assets/{upload-Dw77S_Me.js → upload-Dh3D6Z7E.js} +1 -1
- package/assets/{video-recovery-service-DrA0J5gR.js → video-recovery-service-DYhEBO96.js} +1 -1
- package/assets/{xychartDiagram-e933f94c-Dd-QLan6.js → xychartDiagram-e933f94c-O_OlRzES.js} +1 -1
- package/assets/{xychartDiagram-e933f94c-PAtdBcGf.js → xychartDiagram-e933f94c-pg-_fREb.js} +1 -1
- package/cdn-config.js +0 -7
- package/package.json +1 -1
- package/precache-manifest.json +305 -233
- package/sw.js +7 -7
- package/user-manual/gifs//346/200/235/347/273/264/345/257/274/345/233/276/345/210/233/345/273/272/346/274/224/347/244/272.gif +0 -0
- package/user-manual/screenshots/ai-step-0.png +0 -0
- package/user-manual/screenshots/ai-step-1.png +0 -0
- package/user-manual/screenshots/ai-step-2.png +0 -0
- package/user-manual/screenshots/ai-step-3.png +0 -0
- package/user-manual/screenshots/app-menu.png +0 -0
- package/user-manual/screenshots/backup-restore.png +0 -0
- package/user-manual/screenshots/canvas-tools.png +0 -0
- package/user-manual/screenshots/debug-panel.png +0 -0
- package/user-manual/screenshots/drawing-step-0.png +0 -0
- package/user-manual/screenshots/drawing-step-1.png +0 -0
- package/user-manual/screenshots/drawing-step-2.png +0 -0
- package/user-manual/screenshots/edit-selected.png +0 -0
- package/user-manual/screenshots/element-selected.png +0 -0
- package/user-manual/screenshots/flowchart-step-1.png +0 -0
- package/user-manual/screenshots/flowchart-step-2.png +0 -0
- package/user-manual/screenshots/flowchart-step-3.png +0 -0
- package/user-manual/screenshots/image-preview-empty.png +0 -0
- package/user-manual/screenshots/insert-from-library.png +0 -0
- package/user-manual/screenshots/insert-tools.png +0 -0
- package/user-manual/screenshots/inspiration-step-1.png +0 -0
- package/user-manual/screenshots/inspiration-step-2.png +0 -0
- package/user-manual/screenshots/media-library.png +0 -0
- package/user-manual/screenshots/mindmap-step-1.png +0 -0
- package/user-manual/screenshots/mindmap-step-2.png +0 -0
- package/user-manual/screenshots/mindmap-toolbar-menu.png +0 -0
- package/user-manual/screenshots/project-drawer.png +0 -0
- package/user-manual/screenshots/settings-dialog.png +0 -0
- package/user-manual/screenshots/shape-step-1.png +0 -0
- package/user-manual/screenshots/shape-step-2.png +0 -0
- package/user-manual/screenshots/text-step-1.png +0 -0
- package/user-manual/screenshots/text-step-2.png +0 -0
- package/user-manual/screenshots/toolbox-drawer.png +0 -0
- package/user-manual/screenshots/toolbox-entry.png +0 -0
- package/user-manual/screenshots/video-entry.png +0 -0
- package/user-manual/screenshots/view-navigation.png +0 -0
- package/user-manual/screenshots/zoom-menu.png +0 -0
- package/version.json +8 -3
- package/assets/DialogTaskList-Bny0jVKZ.js +0 -1
- package/assets/ai-image-generation-BFVVUcys.js +0 -1
- package/assets/ai-image-generation-DGSgu0yT.css +0 -1
- package/assets/ai-video-generation-BeUDCJbm.js +0 -5
- package/assets/ai-video-generation-DcOYvVJu.css +0 -1
- package/assets/channel-CDoSfPuP.js +0 -1
- package/assets/channel-EocIoBTY.js +0 -1
- package/assets/clone-B1Q1_5Pt.js +0 -1
- package/assets/clone-BSgWY5XH.js +0 -1
- package/assets/flowDiagram-v2-96b9c2cf-CHM0pX9Y.js +0 -1
- package/assets/flowDiagram-v2-96b9c2cf-DKLcZ2Te.js +0 -1
- package/assets/index-DGDQ0Qn2.css +0 -9
- package/assets/settings-dialog-Dq2kMBKN.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ae as ve,r as i,n as B,F as s,K as se,ab as Ce,ak as G,bO as je,bP as xe,bQ as Ie,bR as Z,bS as Se,bT as De,bU as Ne,bV as ke,bW as Me,bX as Pe,bY as Te,bZ as Le,b_ as Ee,b$ as Re,c0 as Ae,c1 as ze,b3 as Fe,a6 as O,an as de,b4 as Oe,as as $e,bd as Be,am as ue,al as me,c2 as Ue,a_ as we,c3 as be,A as He,Z as X,bj as We,bk as Ge,c4 as qe,bc as pe,c5 as Ve,bH as fe,c6 as Xe,c7 as Ke,c8 as Qe,u as Ye,c9 as Ze,ca as Je,cb as et}from"./index-CvrZFlag.js";function mt(){const{completedTasks:n}=ve(),r=i.useMemo(()=>n.filter(a=>{var d;return a.type===B.IMAGE&&((d=a.result)==null?void 0:d.url)}).map(a=>({id:a.id,type:"image",prompt:a.params.prompt,timestamp:a.completedAt||a.createdAt,imageUrl:a.result.url,width:a.result.width||1024,height:a.result.height||1024,uploadedImages:a.params.uploadedImages})).sort((a,d)=>d.timestamp-a.timestamp),[n]),c=i.useMemo(()=>n.filter(a=>{var d;return a.type===B.VIDEO&&((d=a.result)==null?void 0:d.url)}).map(a=>({id:a.id,type:"video",prompt:a.params.prompt,timestamp:a.completedAt||a.createdAt,imageUrl:a.result.thumbnailUrl||a.result.url,width:a.result.width||400,height:a.result.height||225,previewUrl:a.result.url,downloadUrl:a.result.url,uploadedImage:a.params.uploadedImage})).sort((a,d)=>d.timestamp-a.timestamp),[n]),o=i.useMemo(()=>[...r,...c].sort((a,d)=>d.timestamp-a.timestamp),[r,c]);return{imageHistory:r,videoHistory:c,allHistory:o}}const he=(n,r,c)=>{const o=c==="image"?{isGenerating:n,imageLoading:r}:{isGenerating:n,videoLoading:r};window.dispatchEvent(new CustomEvent("ai-generation-state-change",{detail:o}))},pt=(n,r,c)=>{i.useEffect(()=>{const o=a=>{(a.metaKey||a.ctrlKey)&&a.key==="Enter"&&(a.preventDefault(),!n&&r.trim()&&c())};return document.addEventListener("keydown",o),()=>{document.removeEventListener("keydown",o)}},[n,r,c])},ft=n=>{const[r,c]=i.useState(!1),[o,a]=i.useState(!1),d=i.useCallback(h=>{c(h),he(h,o,n)},[o,n]),y=i.useCallback(h=>{a(h),he(r,h,n)},[r,n]);return{isGenerating:r,isLoading:o,updateIsGenerating:d,updateIsLoading:y}},tt=(n,r,c)=>r==="image"?n==="zh"?"一只可爱的小猫坐在窗台上,阳光透过窗户洒在它的毛发上,背景是温馨的家居环境":"A cute kitten sitting on a windowsill, with sunlight streaming through the window onto its fur, with a cozy home environment in the background":c==="sora"?n==="zh"?"描述视频内容,输入 @ 可引用已创建的角色,如 @username 在海边漫步...":"Describe video content, type @ to reference created characters, e.g. @username walking on the beach...":n==="zh"?"生成一个美丽的日出场景,阳光从山峰后缓缓升起,云朵轻柔地飘动":"Generate a beautiful sunrise scene where the sun slowly rises from behind mountains with clouds gently floating",st=[1,2,3,4,5,10,20,50,100],nt="aitu_image_generation_quantity",at="aitu_video_generation_quantity",te=100,ht=({language:n,type:r,isGenerating:c,hasGenerated:o,canGenerate:a,onGenerate:d,onReset:y,leftContent:h})=>{const b=r==="video"?at:nt,[u,j]=i.useState(()=>{try{const f=localStorage.getItem(b);if(f){const k=parseInt(f,10);if(!isNaN(k)&&k>=1&&k<=te)return k}}catch{}return 1}),[M,_]=i.useState(!1),[l,m]=i.useState(()=>u.toString()),C=i.useRef(null);i.useEffect(()=>{m(u.toString());try{localStorage.setItem(b,u.toString())}catch{}},[u,b]),i.useEffect(()=>{const f=k=>{C.current&&!C.current.contains(k.target)&&(_(!1),v())};return document.addEventListener("mousedown",f),()=>document.removeEventListener("mousedown",f)},[l]);const v=()=>{let f=parseInt(l,10);(isNaN(f)||f<1)&&(f=1),f>te&&(f=te),m(f.toString()),j(f)},S=f=>{const k=f.target.value;(k===""||/^\d*$/.test(k))&&m(k)},L=f=>{j(f),m(f.toString()),_(!1)},p=()=>{c||_(!M)},T=()=>{d(u)};return s.jsxs("div",{className:"section-actions unified-action-bar",children:[h&&s.jsx("div",{className:"action-bar-left",children:h}),s.jsxs("div",{className:`unified-action-box ${c?"is-generating":""} ${a?"can-generate":""}`,children:[s.jsxs("div",{className:"quantity-section",ref:C,children:[s.jsx(se,{content:n==="zh"?"生成数量":"Quantity",theme:"light",children:s.jsxs("div",{className:`quantity-control ${M?"is-open":""} ${c?"is-disabled":""}`,children:[s.jsx("input",{type:"text",inputMode:"numeric",value:l,onChange:S,onBlur:v,"data-track":"ai_click_quantity_input",onClick:()=>!c&&_(!0),disabled:c,className:"quantity-input"}),s.jsx("button",{type:"button","data-track":"ai_click_quantity_toggle",onClick:f=>{f.stopPropagation(),p()},disabled:c,className:"quantity-toggle",children:s.jsx(Ce,{className:`quantity-icon ${M?"is-open":""}`})})]})}),M&&s.jsxs("div",{className:"quantity-dropdown",children:[s.jsx("div",{className:"quantity-dropdown-header",children:n==="zh"?"选择数量":"Select Quantity"}),st.map(f=>s.jsxs("button",{type:"button","data-track":"ai_click_quantity_select",onClick:()=>L(f),className:`quantity-option ${u===f?"is-selected":""}`,children:[s.jsxs("span",{children:[f," ",r==="video"?n==="zh"?"个":f>1?"videos":"video":n==="zh"?"张":f>1?"images":"image"]}),u===f&&s.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:s.jsx("polyline",{points:"20 6 9 17 4 12"})})]},f))]})]}),s.jsx("div",{className:"action-divider"}),s.jsx("button",{"data-track":"ai_click_generate",onClick:T,disabled:c||!a,className:`generate-button ${c?"loading":""}`,children:c?n==="zh"?"生成中...":"Generating...":o?n==="zh"?"重新生成":"Regenerate":r==="video"?n==="zh"?"生成视频":"Generate Video":n==="zh"?"生成":"Generate"})]}),s.jsx(se,{content:n==="zh"?"重置表单":"Reset form",theme:"light",children:s.jsx(G,{"data-track":"ai_click_reset",onClick:y,disabled:c,variant:"text",shape:"circle",icon:s.jsx(je,{}),className:"action-button--reset-subtle"})})]})},gt=({error:n})=>n?s.jsx("div",{className:"form-error",children:n}):null,rt=({visible:n,query:r,position:c,showBelow:o=!1,selectedIndex:a,onSelect:d,onClose:y})=>{const{completedCharacters:h,isLoading:b}=xe(),u=i.useRef(null),j=i.useMemo(()=>{if(!r)return h;const l=r.toLowerCase();return h.filter(m=>m.username.toLowerCase().includes(l))},[h,r]);i.useEffect(()=>{if(!n||!u.current)return;const l=u.current.querySelector(".character-mention-popup__item--selected");l&&l.scrollIntoView({block:"nearest"})},[n,a]),i.useEffect(()=>{if(!n)return;const l=m=>{u.current&&!u.current.contains(m.target)&&y()};return document.addEventListener("mousedown",l),()=>document.removeEventListener("mousedown",l)},[n,y]);const M=i.useCallback(l=>{d(l)},[d]);if(!n)return null;const _={position:"fixed",top:c.top,left:c.left,transform:o?"none":"translateY(-100%)",zIndex:1e4,maxHeight:"200px",overflowY:"auto"};return b?s.jsx("div",{ref:u,className:"character-mention-popup",style:_,children:s.jsx("div",{className:"character-mention-popup__empty",children:"加载中..."})}):j.length===0?s.jsx("div",{ref:u,className:"character-mention-popup",style:_,children:s.jsx("div",{className:"character-mention-popup__empty",children:r?`未找到 "${r}" 相关角色`:"暂无可用角色"})}):s.jsx("div",{ref:u,className:"character-mention-popup",style:_,children:j.map((l,m)=>s.jsxs("div",{className:`character-mention-popup__item ${m===a?"character-mention-popup__item--selected":""}`,onClick:()=>M(l),"data-track":"character_click_mention",children:[s.jsx("div",{className:"character-mention-popup__item-avatar",children:s.jsx(Ie,{characterId:l.id,profilePictureUrl:l.profilePictureUrl,alt:l.username})}),s.jsxs("span",{className:"character-mention-popup__item-name",children:["@",l.username]})]},l.id))})},it={visible:!1,query:"",position:{top:0,left:0},showBelow:!1,startIndex:-1,selectedIndex:0};function ot({enabled:n=!0,onPromptChange:r,prompt:c}){const[o,a]=i.useState(it),d=i.useRef(null),{completedCharacters:y}=xe(),h=i.useCallback(l=>{if(!d.current)return{top:0,left:0,showBelow:!1};const m=d.current,C=m.getBoundingClientRect(),v=document.createElement("div"),S=window.getComputedStyle(m),L=["fontFamily","fontSize","fontWeight","fontStyle","letterSpacing","lineHeight","textTransform","wordSpacing","whiteSpace","paddingTop","paddingRight","paddingBottom","paddingLeft","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","boxSizing"];v.style.position="absolute",v.style.top="0",v.style.left="-9999px",v.style.visibility="hidden",v.style.whiteSpace="pre-wrap",v.style.overflowWrap="break-word",v.style.overflow="hidden",v.style.width=`${m.clientWidth}px`,L.forEach($=>{v.style[$]=S.getPropertyValue($.replace(/([A-Z])/g,"-$1").toLowerCase())}),document.body.appendChild(v);let p=0,T=0;try{const $=m.value.substring(0,l),H=document.createTextNode($),D=document.createElement("span");D.textContent="",v.appendChild(H),v.appendChild(D);const I=D.getBoundingClientRect(),N=v.getBoundingClientRect();p=I.top-N.top,T=I.left-N.left}finally{document.body.removeChild(v)}const f=m.scrollTop,k=parseInt(S.lineHeight)||20;let z=C.top+p-f,A=C.left+T;const R=240,U=window.innerWidth;A+R>U-16&&(A=U-R-16),A<16&&(A=16);const P=z<220+16;return P?z=z+k+4:z=z-48,{top:z,left:A,showBelow:P}},[]),b=i.useCallback((l,m)=>{if(!n)return;const C=l.substring(0,m),v=C.lastIndexOf("@");if(v===-1){a(T=>({...T,visible:!1}));return}const S=v>0?l[v-1]:" ";if(!/\s/.test(S)&&v!==0){a(T=>({...T,visible:!1}));return}const L=C.substring(v+1);if(L.includes(" ")){a(T=>({...T,visible:!1}));return}const p=h(m);a({visible:!0,query:L,position:{top:p.top,left:p.left},showBelow:p.showBelow,startIndex:v,selectedIndex:0})},[n,h]),u=i.useCallback(l=>{var L;if(o.startIndex===-1)return;const m=c.substring(0,o.startIndex),C=((L=d.current)==null?void 0:L.selectionStart)||c.length,v=c.substring(C),S=`${m}@${l.username} ${v}`;r(S),a(p=>({...p,visible:!1})),setTimeout(()=>{if(d.current){const p=m.length+l.username.length+2;d.current.focus(),d.current.setSelectionRange(p,p)}},0)},[o.startIndex,c,r]),j=i.useCallback(l=>{if(!o.visible)return;const m=o.query?y.filter(C=>C.username.toLowerCase().includes(o.query.toLowerCase())):y;switch(l.key){case"ArrowDown":l.preventDefault(),a(C=>({...C,selectedIndex:Math.min(C.selectedIndex+1,m.length-1)}));break;case"ArrowUp":l.preventDefault(),a(C=>({...C,selectedIndex:Math.max(C.selectedIndex-1,0)}));break;case"Enter":case"Tab":m.length>0&&(l.preventDefault(),u(m[o.selectedIndex]));break;case"Escape":l.preventDefault(),a(C=>({...C,visible:!1}));break}},[o,y,u]),M=i.useCallback((l,m)=>{r(l),b(l,m)},[r,b]),_=i.useCallback(()=>{a(l=>({...l,visible:!1}))},[]);return{mentionState:o,setMentionState:a,textareaRef:d,completedCharacters:y,handleTextChange:M,handleKeyDown:j,handleCharacterSelect:u,closeMentionPopup:_,calculateMentionPosition:h}}const vt=({prompt:n,onPromptChange:r,presetPrompts:c,language:o,type:a,disabled:d=!1,onError:y,enableMention:h=!0,videoProvider:b})=>{const[u,j]=i.useState(!1),M=i.useRef(null),_=i.useRef(null),[l,m]=i.useState(null),[C,v]=i.useState(0),S=i.useMemo(()=>Z.sortPrompts(a,c).map((I,N)=>({id:`preset-${N}-${I.slice(0,20)}`,content:I,pinned:Z.isPinned(a,I)})),[a,c,C]),L=h&&a==="video"&&b==="sora",{mentionState:p,textareaRef:T,handleTextChange:f,handleKeyDown:k,handleCharacterSelect:z,closeMentionPopup:A}=ot({enabled:L,onPromptChange:r,prompt:n}),R=i.useCallback(()=>{if(_.current&&u){const D=_.current.getBoundingClientRect();m({top:D.top-4,left:D.right})}},[u]);i.useEffect(()=>{if(u)return R(),window.addEventListener("scroll",R,!0),window.addEventListener("resize",R),()=>{window.removeEventListener("scroll",R,!0),window.removeEventListener("resize",R)}},[u,R]),i.useEffect(()=>{const D=I=>{const N=I.target;if(M.current&&!M.current.contains(N)){const W=document.querySelector(".preset-prompt-panel-portal");W!=null&&W.contains(N)||j(!1)}};if(u)return document.addEventListener("mousedown",D),()=>document.removeEventListener("mousedown",D)},[u]);const U=i.useCallback(D=>{r(D),y==null||y(null),j(!1)},[r,y]),F=i.useCallback(D=>{const I=S.find(N=>N.id===D);I&&(I.pinned?Z.unpinPrompt(a,I.content):Z.pinPrompt(a,I.content),v(N=>N+1))},[a,S]),P=i.useCallback(D=>{const I=S.find(N=>N.id===D);I&&(Z.deletePrompt(a,I.content),v(N=>N+1))},[a,S]),$=i.useCallback(D=>{const I=D.target.value,N=D.target.selectionStart||0;f(I,N),y==null||y(null)},[f,y]);i.useEffect(()=>{a!=="video"&&A()},[a,A]);const H=()=>{if(!u||!l)return null;const D=o==="zh"?`${a==="image"?"图片":"视频"}描述预设`:`${a==="image"?"Image":"Video"} Description Presets`,I=s.jsx("div",{className:"preset-prompt-panel-portal",style:{position:"fixed",top:l.top,left:l.left,transform:"translate(-100%, -100%)",zIndex:De.DIALOG_POPOVER},children:s.jsx(Ne,{title:D,items:S,onSelect:U,onTogglePin:F,onDelete:P,language:o,disabled:d,showCount:!0})});return ke.createPortal(I,document.body)};return s.jsxs("div",{className:"form-field form-field--prompt",children:[s.jsxs("div",{className:"form-label-with-icon",children:[s.jsx("label",{className:"form-label",children:o==="zh"?`${a==="image"?"图片":"视频"}描述`:`${a==="image"?"Image":"Video"} Description`}),s.jsx("div",{className:"textarea-with-preset",children:s.jsxs("div",{className:"preset-tooltip-container",ref:M,children:[s.jsx("button",{ref:_,type:"button",className:"preset-icon-button",disabled:d,onClick:()=>j(!u),children:s.jsx(Se,{size:16})}),H()]})})]}),s.jsx("textarea",{ref:T,className:"form-textarea",value:n,onChange:$,onKeyDown:k,placeholder:tt(o,a,b),rows:4,disabled:d}),L&&s.jsx(rt,{visible:p.visible,query:p.query,position:p.position,showBelow:p.showBelow,selectedIndex:p.selectedIndex,onSelect:z,onClose:A})]})};function lt(n){return n.map(r=>r.prompt.trim()).filter(r=>r.length>0).filter((r,c,o)=>o.indexOf(r)===c)}const xt=(n,r,c)=>{const o=n==="image"?Le(r):Ee(r),a=lt(c);return[...[...n==="video"?Me():Pe(),...a].filter((b,u,j)=>j.indexOf(b)===u).slice(0,Te),...o].filter((b,u,j)=>j.indexOf(b)===u).slice(0,Re)},wt=(n,r,c)=>{!r||!r.trim()||(n==="video"?Ae(r.trim()):ze(r.trim()))},bt=({images:n,onImagesChange:r,language:c="zh",disabled:o=!1,multiple:a=!0,maxCount:d=10,label:y,slotLabels:h,onError:b})=>{const[u,j]=i.useState(!1),[M,_]=i.useState(!1),[l,m]=i.useState(0),C=i.useRef(null),v=i.useRef(null),{addAsset:S}=Fe(),p={zh:{local:"本地",library:"素材库",dragHint:"拖拽图片到此处",pasteHint:"或 Ctrl+V 粘贴",invalidFile:"请上传图片文件",fileTooLarge:"图片大小不能超过 10MB",someFilesInvalid:"部分文件格式不支持或超过10MB限制",loadFailed:"加载图片失败",maxCountReached:"最多上传 {count} 张图片"},en:{local:"Local",library:"Library",dragHint:"Drop images here",pasteHint:"or Ctrl+V to paste",invalidFile:"Please upload image files",fileTooLarge:"Image size cannot exceed 10MB",someFilesInvalid:"Some files are not supported or exceed 10MB limit",loadFailed:"Failed to load image",maxCountReached:"Maximum {count} images allowed"}}[c],T=i.useCallback(e=>e.type.startsWith("image/")?e.size>10*1024*1024?(O.error(p.fileTooLarge),!1):!0:(O.error(p.invalidFile),!1),[p]),f=i.useCallback(e=>new Promise((t,w)=>{const x=new FileReader;x.onload=()=>{t({url:x.result,name:e.name,file:e})},x.onerror=w,x.readAsDataURL(e)}),[]),k=i.useCallback(async(e,t)=>{const x=Array.from(e).filter(T);if(x.length!==0){a&&n.length+x.length>d&&(O.warning(p.maxCountReached.replace("{count}",String(d))),x.splice(d-n.length)),x.forEach(g=>{S(g,de.IMAGE,Oe.LOCAL,g.name).catch(E=>{console.warn("[ReferenceImageUpload] Failed to add asset to library:",E)})});try{const g=await Promise.all(x.map(f));if(h&&t!==void 0){const E=[...n];E[t]=g[0],r(E.filter(Boolean))}else r(a?[...n,...g]:g.slice(0,1));b==null||b(null)}catch(g){console.error("[ReferenceImageUpload] Failed to process files:",g),b==null||b(p.loadFailed)}}},[n,a,d,h,T,f,S,r,b,p]),z=i.useCallback(e=>{const t=e.target.files;t&&t.length>0&&k(t,h?l:void 0),e.target.value=""},[k,h,l]),A=i.useCallback(async e=>{try{const w=await(await fetch(e.url)).blob(),x=new FileReader;x.onload=()=>{const g={url:x.result,name:e.name};if(h){const E=[...n];E[l]=g,r(E.filter(Boolean))}else if(a){if(n.length>=d){O.warning(p.maxCountReached.replace("{count}",String(d)));return}r([...n,g])}else r([g]);j(!1),b==null||b(null)},x.readAsDataURL(w)}catch(t){console.error("[ReferenceImageUpload] Failed to convert asset to base64:",t),b==null||b(p.loadFailed),j(!1)}},[n,a,d,h,l,r,b,p]),R=i.useCallback(e=>{e.preventDefault(),e.stopPropagation(),o||_(!0)},[o]),U=i.useCallback(e=>{var w;e.preventDefault(),e.stopPropagation();const t=(w=C.current)==null?void 0:w.getBoundingClientRect();if(t){const{clientX:x,clientY:g}=e;(x<t.left||x>t.right||g<t.top||g>t.bottom)&&_(!1)}},[]),F=i.useCallback(e=>{e.preventDefault(),e.stopPropagation()},[]),P=i.useCallback((e,t)=>{if(e.preventDefault(),e.stopPropagation(),_(!1),o)return;const w=e.dataTransfer.files;w&&w.length>0&&k(w,t)},[o,k]);i.useEffect(()=>{const e=async t=>{var K;if(o)return;const w=document.activeElement,x=C.current;if(!x||!(x.contains(w)||w===document.body||(w==null?void 0:w.tagName)==="BODY"))return;const E=(K=t.clipboardData)==null?void 0:K.items;if(!E)return;const q=[];for(let V=0;V<E.length;V++){const Q=E[V];if(Q.type.startsWith("image/")){const Y=Q.getAsFile();Y&&q.push(Y)}}q.length>0&&(t.preventDefault(),k(q))};return document.addEventListener("paste",e),()=>{document.removeEventListener("paste",e)}},[o,k]);const $=i.useCallback(e=>{const t=n.filter((w,x)=>x!==e);r(t)},[n,r]),H=i.useCallback(e=>{var t;e!==void 0&&m(e),(t=v.current)==null||t.click()},[]),D=i.useCallback(e=>{e!==void 0&&m(e),j(!0)},[]),I=e=>s.jsx("div",{className:`reference-image-upload__placeholder ${M?"reference-image-upload__placeholder--dragging":""}`,onDragEnter:R,onDragLeave:U,onDragOver:F,onDrop:t=>P(t,e),children:s.jsxs("div",{className:"reference-image-upload__buttons",children:[s.jsx(G,{variant:"outline",icon:s.jsx(ue,{size:16}),onClick:()=>H(e),disabled:o,"data-track":"reference_image_upload_local",className:"reference-image-upload__btn",children:p.local}),s.jsx(G,{variant:"outline",icon:s.jsx(me,{size:16}),onClick:()=>D(e),disabled:o,"data-track":"reference_image_upload_library",className:"reference-image-upload__btn",children:p.library})]})}),N=(e,t)=>s.jsxs("div",{className:"reference-image-upload__preview",children:[s.jsx("img",{src:e.url,alt:e.name,className:"reference-image-upload__image"}),s.jsx("button",{type:"button",className:"reference-image-upload__remove",onClick:()=>$(t),disabled:o,"data-track":"reference_image_upload_remove",children:s.jsx(Ue,{size:14})}),h&&h[t]&&s.jsx("div",{className:"reference-image-upload__slot-label",children:h[t]})]},t),W=()=>h?s.jsx("div",{className:"reference-image-upload__slots",children:h.map((e,t)=>{const w=n[t];return s.jsxs("div",{className:"reference-image-upload__slot",children:[s.jsx("div",{className:"reference-image-upload__slot-title",children:e}),w?N(w,t):s.jsx("div",{className:`reference-image-upload__slot-placeholder ${M?"reference-image-upload__slot-placeholder--dragging":""}`,onDragEnter:R,onDragLeave:U,onDragOver:F,onDrop:x=>P(x,t),children:s.jsxs("div",{className:"reference-image-upload__slot-buttons",children:[s.jsx(G,{variant:"outline",icon:s.jsx(ue,{size:16}),onClick:()=>H(t),disabled:o,"data-track":"reference_image_upload_slot_local",className:"reference-image-upload__slot-btn",children:p.local}),s.jsx(G,{variant:"outline",icon:s.jsx(me,{size:16}),onClick:()=>D(t),disabled:o,"data-track":"reference_image_upload_slot_library",className:"reference-image-upload__slot-btn",children:p.library})]})})]},t)})}):null,ee=()=>{const e=a&&n.length<d;return s.jsxs("div",{className:"reference-image-upload__grid",children:[n.map((t,w)=>N(t,w)),e&&I(),n.length===0&&!e&&I()]})},J=()=>n.length>0?s.jsxs("div",{className:"reference-image-upload__single",children:[N(n[0],0),s.jsx("div",{className:"reference-image-upload__replace",children:I()})]}):I();return s.jsxs("div",{ref:C,className:`reference-image-upload ${o?"reference-image-upload--disabled":""}`,tabIndex:0,children:[y&&s.jsx("div",{className:"reference-image-upload__label",children:y}),s.jsx("input",{ref:v,type:"file",accept:"image/*",multiple:a&&!h,onChange:z,className:"reference-image-upload__input",disabled:o}),h?W():a?ee():J(),s.jsx($e,{isOpen:u,onClose:()=>j(!1),mode:Be.SELECT,filterType:de.IMAGE,onSelect:A})]})},ye="aitu-dialog-task-list-width-",ne=240,ae=800,ct=()=>{const n=Math.round(660);return Math.max(ne,Math.min(ae,n))},yt=n=>{try{const r=localStorage.getItem(ye+n);if(r){const c=parseInt(r,10);if(!isNaN(c)&&c>=ne&&c<=ae)return c}}catch{}return ct()},ge=(n,r)=>{try{localStorage.setItem(ye+n,r.toString())}catch{}},_t=({isRightPanelVisible:n,onToggleRightPanel:r,onWidthChange:c,rightPanelWidth:o,minWidth:a=ne,maxWidth:d=ae,onResizeStart:y,onResizeEnd:h,language:b="zh",disabled:u=!1,storageKey:j="image"})=>{const[M,_]=i.useState(!1),l=i.useRef(0),m=i.useRef(0);i.useEffect(()=>(M?(document.body.style.userSelect="none",document.body.style.cursor="col-resize"):(document.body.style.userSelect="",document.body.style.cursor=""),()=>{document.body.style.userSelect="",document.body.style.cursor=""}),[M]);const C=i.useCallback(S=>{if(u||!n)return;S.preventDefault(),S.stopPropagation(),_(!0),l.current=S.clientX,m.current=o,y==null||y();const L=T=>{const f=l.current-T.clientX,k=Math.max(a,Math.min(d,m.current+f));c(k)},p=()=>{_(!1),h==null||h(),m.current+(l.current-document.body.getBoundingClientRect().left),ge(j,o),document.removeEventListener("mousemove",L),document.removeEventListener("mouseup",p)};document.addEventListener("mousemove",L),document.addEventListener("mouseup",p)},[u,n,o,a,d,c,y,h,j]);i.useEffect(()=>{!M&&n&&ge(j,o)},[o,M,n,j]);const v=n?b==="zh"?"隐藏任务列表":"Hide Task List":b==="zh"?"显示任务列表":"Show Task List";return s.jsxs("div",{className:`resizable-divider ${M?"is-dragging":""} ${n?"":"is-collapsed"} ${u?"is-disabled":""}`,onMouseDown:C,children:[s.jsx("div",{className:"resizable-divider__bar"}),s.jsx(se,{content:v,theme:"light",placement:"left",children:s.jsx("button",{type:"button",className:"resizable-divider__toggle",onClick:S=>{S.stopPropagation(),r()},"aria-label":v,children:n?s.jsx(we,{size:"14px"}):s.jsx(be,{size:"14px"})})})]})},Ct=({taskIds:n,taskType:r,onEditTask:c})=>{var J;const{tasks:o,retryTask:a,deleteTask:d}=ve(),{board:y,openDialog:h}=He(),[b,u]=i.useState(!1),[j,M]=i.useState(null),[_,l]=i.useState(null),[m,C]=i.useState(""),[v,S]=i.useState(null),L=(e,t)=>{var q,K,V,Q,Y,re,ie,oe,le,ce;if(!t.trim())return!0;const w=t.toLowerCase().split(/\s+/).filter(Boolean),x={[X.PENDING]:"待处理",[X.PROCESSING]:"处理中",[X.COMPLETED]:"已完成",[X.FAILED]:"失败",[X.CANCELLED]:"已取消"},g=[];g.push(((q=e.params)==null?void 0:q.prompt)??""),g.push(((K=e.params)==null?void 0:K.model)??""),g.push(e.id??""),g.push(x[e.status]??String(e.status)),(V=e.params)!=null&&V.batchId&&g.push(String(e.params.batchId)),(Q=e.params)!=null&&Q.batchIndex&&g.push(String(e.params.batchIndex)),(Y=e.params)!=null&&Y.batchTotal&&g.push(String(e.params.batchTotal)),(re=e.result)!=null&&re.format&&g.push(String(e.result.format)),(ie=e.result)!=null&&ie.width&&((oe=e.result)!=null&&oe.height)?g.push(`${e.result.width}x${e.result.height}`):(le=e.params)!=null&&le.width&&((ce=e.params)!=null&&ce.height)&&g.push(`${e.params.width}x${e.params.height}`);const E=g.join(" ").toLowerCase();return w.every(_e=>E.includes(_e))},p=i.useMemo(()=>{let e=o;return n&&n.length>0&&(e=e.filter(t=>n.includes(t.id))),r!==void 0&&(e=e.filter(t=>t.type===r)),m.trim()&&(e=e.filter(t=>L(t,m))),e.sort((t,w)=>w.createdAt-t.createdAt)},[o,n,r,m]),T=e=>{a(e)},f=e=>{M(e),u(!0)},k=()=>{j&&d(j),u(!1),M(null)},z=async e=>{var x;const t=o.find(g=>g.id===e);if(!((x=t==null?void 0:t.result)!=null&&x.url))return;const w=`${Qe(t.params.prompt)||t.type}.${t.result.format}`;try{const g=await Ye.getCachedBlob(t.result.url);if(g){Ze(g,w),O.success("下载成功");return}const E=await Je(t.result.url,t.params.prompt,t.result.format,t.type);E&&"opened"in E?O.success("已在新标签页打开,请右键另存为"):O.success("下载成功")}catch(g){console.error("Download failed:",g),O.error("下载失败,请稍后重试")}},A=async e=>{var w;const t=o.find(x=>x.id===e);if(!((w=t==null?void 0:t.result)!=null&&w.url)||!y){console.warn("Cannot insert: task result or board not available"),O.warning("无法插入:白板未就绪");return}try{t.type===B.IMAGE?(await Xe(y,t.result.url),O.success("图片已插入到白板")):t.type===B.VIDEO&&(await Ke(y,t.result.url),O.success("视频已插入到白板"))}catch(x){console.error("Failed to insert to board:",x),O.error(`插入失败: ${x instanceof Error?x.message:"未知错误"}`)}},R=e=>{var w,x;const t=o.find(g=>g.id===e);if(!t){console.warn("Cannot edit: task not found");return}if(c){c(t);return}if(t.type===B.IMAGE){const g={initialPrompt:t.params.prompt,initialWidth:t.params.width,initialHeight:t.params.height,initialImages:t.params.uploadedImages,initialResultUrl:(w=t.result)==null?void 0:w.url};h(fe.aiImageGeneration,g)}else if(t.type===B.VIDEO){const g={initialPrompt:t.params.prompt,initialDuration:typeof t.params.seconds=="string"?parseInt(t.params.seconds,10):t.params.seconds,initialModel:t.params.model,initialSize:t.params.size,initialImages:t.params.uploadedImages,initialResultUrl:(x=t.result)==null?void 0:x.url};h(fe.aiVideoGeneration,g)}},U=e=>{const t=o.find(w=>w.id===e);t&&S(t)},F=i.useMemo(()=>p.filter(e=>{var t;return e.status===X.COMPLETED&&((t=e.result)==null?void 0:t.url)}),[p]),P=i.useMemo(()=>{if(!_)return null;const e=F.findIndex(t=>t.id===_);return e===-1?null:{currentIndex:e,total:F.length,hasPrevious:e>0,hasNext:e<F.length-1}},[_,F]),$=e=>{l(e)},H=()=>{l(null)},D=()=>{!P||!P.hasPrevious||l(F[P.currentIndex-1].id)},I=()=>{!P||!P.hasNext||l(F[P.currentIndex+1].id)},N=i.useMemo(()=>_?o.find(e=>e.id===_):null,[_,o]);i.useEffect(()=>{if(!_)return;const e=t=>{t.key==="ArrowLeft"||t.key==="ArrowUp"?(t.preventDefault(),D()):t.key==="ArrowRight"||t.key==="ArrowDown"?(t.preventDefault(),I()):t.key==="Escape"&&(t.preventDefault(),H())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[_,P]);const W=i.useMemo(()=>{let e=o;return n&&n.length>0&&(e=e.filter(t=>n.includes(t.id))),r!==void 0&&(e=e.filter(t=>t.type===r)),e.length},[o,n,r]),ee=m.trim()&&p.length===0&&W>0;return s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"dialog-task-list",children:[s.jsxs("div",{className:"dialog-task-list__header",style:{display:"flex",alignItems:"center",gap:8,justifyContent:"space-between"},children:[s.jsxs("h4",{children:["生成任务 (",p.length,")"]}),s.jsx("div",{style:{minWidth:"180px",maxWidth:"240px",flexShrink:0},children:s.jsx(We,{value:m,onChange:e=>C(e),placeholder:"搜索任务(提示词/模型/...)",clearable:!0,prefixIcon:s.jsx(Ge,{}),size:"small"})})]}),s.jsx(qe,{tasks:p,onRetry:T,onDelete:f,onDownload:z,onInsert:A,onEdit:R,onPreviewOpen:$,onExtractCharacter:U,className:"dialog-task-list__content",emptyContent:s.jsx("div",{className:"dialog-task-list__empty",children:ee?s.jsx("p",{children:"未找到匹配的任务"}):s.jsx("p",{children:"暂无生成任务"})})})]}),s.jsx(pe,{visible:b,header:"确认删除",onClose:()=>u(!1),onConfirm:k,onCancel:()=>u(!1),children:"确定要删除此任务吗?此操作无法撤销。"}),N&&((J=N.result)==null?void 0:J.url)&&s.jsx(pe,{visible:!!_,onClose:H,width:"90vw",header:s.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[s.jsx("span",{children:N.type===B.IMAGE?"图片预览":N.type===B.CHARACTER?"角色预览":"视频预览"}),P&&s.jsxs("span",{style:{fontSize:"14px",color:"#757575",fontWeight:"normal"},children:[P.currentIndex+1," / ",P.total]})]}),footer:null,className:"task-preview-dialog",children:s.jsxs("div",{className:"task-preview-container",children:[s.jsx(G,{className:"task-preview-nav task-preview-nav--left",icon:s.jsx(be,{}),"data-track":"task_click_preview_previous",onClick:D,size:"large",shape:"circle",variant:"outline",disabled:!(P!=null&&P.hasPrevious)}),s.jsx(dt,{task:N}),s.jsx(G,{className:"task-preview-nav task-preview-nav--right",icon:s.jsx(we,{}),"data-track":"task_click_preview_next",onClick:I,size:"large",shape:"circle",variant:"outline",disabled:!(P!=null&&P.hasNext)})]})}),s.jsx(Ve,{visible:!!v,task:v,onClose:()=>S(null),onCreateComplete:e=>{S(null)}})]})},dt=({task:n})=>{var o;const{url:r,isFromCache:c}=et(n.id,(o=n.result)==null?void 0:o.url);return r?s.jsxs("div",{className:"task-preview-content",children:[n.type===B.IMAGE||n.type===B.CHARACTER?s.jsx("img",{src:r,alt:"Preview",style:{maxWidth:"100%",maxHeight:"85vh",objectFit:"contain"}},n.id):s.jsx("video",{src:r,controls:!0,autoPlay:!0,style:{maxWidth:"100%",maxHeight:"85vh"}},n.id),c&&s.jsx("div",{className:"task-preview-cache-badge",children:"已缓存"})]}):s.jsx("div",{className:"task-preview-content",children:"加载中..."})};export{ht as A,rt as C,Ct as D,gt as E,vt as P,bt as R,ft as a,pt as b,_t as c,ot as d,xt as g,yt as l,wt as s,mt as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@charset "UTF-8";:export{themeFilter:invert(93%) hue-rotate(180deg);rightSidebarWidth:302px}.drawnix .Dialog.ttd-dialog{padding:1.25rem;display:flex;flex-direction:column;width:100%;max-width:1024px;height:100%;max-height:540px}.drawnix .Dialog.ttd-dialog.Dialog--fullscreen{margin-top:0}.drawnix .Dialog.ttd-dialog .Island{padding-inline:0!important;height:100%;display:flex;flex-direction:column;flex:1 1 auto;box-shadow:none}.drawnix .Dialog.ttd-dialog .Modal__content{height:auto;max-height:100%}@media screen and (min-width:861px){.drawnix .Dialog.ttd-dialog .Modal__content{max-height:750px;height:100%}}.drawnix .Dialog.ttd-dialog .Dialog__content{flex:1 1 auto}.drawnix .ttd-dialog-desc{font-size:15px;font-style:italic;font-weight:500;margin-bottom:1.5rem}.drawnix .ttd-dialog-tabs-root{width:100%;height:100%;display:flex;flex-direction:column}.drawnix .ttd-dialog-tab-trigger{color:var(--color-on-surface);font-size:.875rem;margin:0;padding:0 1rem;background-color:transparent;border:0;height:2.875rem;font-weight:600;font-family:inherit;letter-spacing:.4px}.drawnix .ttd-dialog-tab-trigger[data-state=active]{border-bottom:2px solid var(--color-primary)}.drawnix .ttd-dialog-triggers{border-bottom:1px solid var(--color-surface-high);margin-bottom:1.5rem;padding-inline:2.5rem}.drawnix .ttd-dialog-content{padding-inline:2.5rem;height:100%;display:flex;flex-direction:column}.drawnix .ttd-dialog-content[hidden]{display:none}.drawnix .ttd-dialog-input{width:auto;height:10rem;resize:none;border-radius:var(--border-radius-lg);border:1px solid var(--dialog-border-color);white-space:pre-wrap;padding:.85rem;box-sizing:border-box;font-family:monospace}@media screen and (min-width:861px){.drawnix .ttd-dialog-input{width:100%;height:100%}}.drawnix .ttd-dialog-output-wrapper{display:flex;align-items:center;justify-content:center;padding:.85rem;box-sizing:border-box;flex-grow:1;position:relative;border-radius:var(--border-radius-lg);border:1px solid var(--dialog-border-color);height:400px;width:auto}@media screen and (min-width:861px){.drawnix .ttd-dialog-output-wrapper{width:100%;height:200px}}.drawnix .ttd-dialog-output-wrapper canvas{max-width:100%;max-height:100%}.drawnix .ttd-dialog-output-canvas-container{display:flex;width:100%;height:100%;align-items:center;justify-content:center;flex-grow:1;overflow:hidden}.drawnix .ttd-dialog-output-error{color:red;font-weight:700;font-size:30px;word-break:break-word;overflow:auto;max-height:100%;height:100%;width:100%;text-align:center;position:absolute;z-index:10}.drawnix .ttd-dialog-output-error p{font-weight:500;font-family:Cascadia;text-align:left;white-space:pre-wrap;font-size:.875rem;padding:0 10px}.drawnix .ttd-dialog-panels{height:100%}@media screen and (min-width:861px){.drawnix .ttd-dialog-panels{display:grid;grid-template-columns:1fr 1fr;gap:4rem}}.drawnix .ttd-dialog-panel{display:flex;flex-direction:column;width:100%}.drawnix .ttd-dialog-panel__header{display:flex;margin:0 4px 4px;align-items:center;gap:1rem}.drawnix .ttd-dialog-panel__header label{font-size:14px;font-style:normal;font-weight:600}.drawnix .ttd-dialog-panel:first-child .ttd-dialog-panel-button-container:not(.invisible){margin-bottom:4rem}@media screen and (min-width:861px){.drawnix .ttd-dialog-panel .ttd-dialog-panel-button-container:not(.invisible){margin-bottom:.5rem!important}}.drawnix .ttd-dialog-panel textarea{height:100%;resize:none;border-radius:var(--border-radius-lg);border:1px solid var(--dialog-border-color);white-space:pre-wrap;padding:.85rem;box-sizing:border-box;width:100%;font-family:monospace}@media screen and (max-width:861px){.drawnix .ttd-dialog-panel textarea{width:auto;height:10rem}}.drawnix .ttd-dialog-panel-button-container{margin-top:1rem;margin-bottom:.5rem}.drawnix .ttd-dialog-panel-button-container.invisible .ttd-dialog-panel-button{display:none}@media screen and (min-width:861px){.drawnix .ttd-dialog-panel-button-container.invisible .ttd-dialog-panel-button{display:block;visibility:hidden}}.drawnix .ttd-dialog-panel-button.drawnix-button{font-family:inherit;font-weight:600;height:2.5rem;font-size:12px;color:#fff;background-color:var(--color-primary);width:100%}.drawnix .ttd-dialog-panel-button.drawnix-button:hover{background-color:var(--color-primary-darker)}.drawnix .ttd-dialog-panel-button.drawnix-button:active{background-color:var(--color-primary-darkest)}.drawnix .ttd-dialog-panel-button.drawnix-button:disabled{opacity:.5;cursor:not-allowed}.drawnix .ttd-dialog-panel-button.drawnix-button:disabled:hover{background-color:var(--color-primary)}@media screen and (min-width:861px){.drawnix .ttd-dialog-panel-button.drawnix-button{width:auto;min-width:7.5rem}}.drawnix.theme--dark.drawnix .ttd-dialog-panel-button.drawnix-button{color:var(--color-gray-100)}.drawnix .ttd-dialog-panel-button{position:relative}.drawnix .ttd-dialog-panel-button div{display:contents}.drawnix .ttd-dialog-panel-button div.invisible{visibility:hidden}.drawnix .ttd-dialog-panel-button div.Spinner{display:flex!important;position:absolute;top:0;right:0;bottom:0;left:0;--spinner-color: white}.drawnix.theme--dark.drawnix .ttd-dialog-panel-button div.Spinner{--spinner-color: var(--color-gray-100)}.drawnix .ttd-dialog-panel-button div span{padding-left:.5rem;display:flex}.drawnix .ttd-dialog-submit-shortcut{margin-inline-start:.5rem;font-size:.625rem;opacity:.6;display:flex;gap:.125rem}.drawnix .ttd-dialog-submit-shortcut__key{border:1px solid gray;padding:2px 3px;border-radius:4px}@media(max-width:768px){.drawnix .Dialog.ttd-dialog{padding:1rem;max-height:85vh;margin-top:60px}.drawnix .Dialog.ttd-dialog .Island{padding:0}.drawnix .ttd-dialog-triggers{padding-inline:1rem;margin-bottom:1rem}.drawnix .ttd-dialog-content{padding-inline:1rem}}@media(max-width:480px){.drawnix .Dialog.ttd-dialog{padding:.75rem;max-height:80vh;margin-top:50px;max-width:95vw}.drawnix .Dialog.ttd-dialog .Modal__content{max-height:75vh}.drawnix .ttd-dialog-triggers{padding-inline:.5rem;margin-bottom:.75rem}.drawnix .ttd-dialog-content{padding-inline:.5rem}.drawnix .ttd-dialog-tab-trigger{padding:0 .5rem;font-size:.75rem;height:2.5rem}}@media(max-width:768px){.drawnix .t-dialog__header>div{flex-wrap:wrap;gap:8px!important}.drawnix .t-dialog__header .t-select{max-width:200px!important;min-width:120px!important;flex-shrink:1}}@media(max-width:480px){.drawnix .t-dialog__header>div{gap:6px!important}.drawnix .t-dialog__header .t-select{max-width:140px!important;min-width:100px!important}.drawnix .t-dialog__header .t-select .t-input__inner{font-size:12px}}.video-model-options{display:flex;flex-direction:column;gap:12px}.video-model-options__row{display:flex;align-items:center;gap:12px}.video-model-options__label{font-size:13px;font-weight:500;color:var(--td-text-color-primary, #000000);min-width:40px;flex-shrink:0}.video-model-options__control{flex:1;display:flex;align-items:center}.video-model-options__fixed-value{font-size:13px;color:var(--td-text-color-secondary, #666666);padding:2px 12px;background:var(--td-bg-color-component, #f3f3f3);border-radius:4px}.video-model-options .t-radio-group{gap:8px}.video-model-options .t-radio-button{font-size:12px;padding:0 12px;height:28px;line-height:28px}.video-model-options .t-select{font-size:13px}.multi-image-upload__header{display:flex;align-items:center;gap:8px;margin-bottom:12px}.multi-image-upload__title{font-size:13px;font-weight:500;color:var(--td-text-color-primary, #000000)}.multi-image-upload__hint{font-size:12px;color:var(--td-text-color-placeholder, #999999)}.multi-image-upload__slots{display:flex;gap:12px;flex-wrap:wrap}.multi-image-upload__slot{display:flex;flex-direction:column;gap:6px}.multi-image-upload__slot-label{font-size:12px;color:var(--td-text-color-secondary, #666666);text-align:center}.multi-image-upload__preview{position:relative;width:100px;height:100px;border-radius:8px;overflow:hidden;border:1px solid var(--td-component-border, #e7e7e7)}.multi-image-upload__preview:hover .multi-image-upload__overlay{opacity:1}.multi-image-upload__image{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.multi-image-upload__overlay{position:absolute;top:0;right:0;bottom:0;left:0;background:#00000080;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .2s ease}.multi-image-upload__placeholder{width:100px;height:100px;border:2px dashed var(--td-component-border, #dcdcdc);border-radius:8px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;cursor:pointer;transition:all .2s ease;background:var(--td-bg-color-container, #ffffff)}.multi-image-upload__placeholder:hover{border-color:var(--td-brand-color, #0052d9);background:var(--td-bg-color-container-hover, #f9f9f9)}.multi-image-upload__placeholder-container{display:flex;flex-direction:column;gap:6px;align-items:center}.multi-image-upload__library-btn{font-size:11px;padding:2px 6px;height:auto;min-width:auto}.multi-image-upload__add-icon{font-size:24px;color:var(--td-text-color-placeholder, #999999)}.multi-image-upload__add-text{font-size:11px;color:var(--td-text-color-placeholder, #999999)}.multi-image-upload .t-upload{display:block}.multi-image-upload .t-upload__dragger{padding:0;border:none;background:transparent}.aspect-ratio-selector{display:flex;flex-direction:column;gap:8px}.aspect-ratio-selector__label{font-size:14px;font-weight:500;color:#333}.aspect-ratio-selector__options{display:flex;flex-wrap:wrap;gap:8px}.aspect-ratio-selector__option{display:flex;flex-direction:column;align-items:center;justify-content:center;min-width:56px;padding:8px 12px;border:1px solid #dcdcdc;border-radius:6px;background-color:#fff;cursor:pointer;transition:all .2s ease}.aspect-ratio-selector__option:hover{border-color:#f39c12;background-color:#fff9f0}.aspect-ratio-selector__option--selected{border-color:#f39c12;background-color:#fff9f0;box-shadow:0 0 0 1px #f39c12}.aspect-ratio-selector__option-ratio{font-size:13px;font-weight:500;color:#333}.aspect-ratio-selector__option-desc{font-size:10px;color:#999;margin-top:2px}.aspect-ratio-selector--compact{display:flex;align-items:center;gap:0;position:relative}.aspect-ratio-selector--compact .aspect-ratio-selector__label{display:none}.aspect-ratio-selector__trigger{display:flex;align-items:center;gap:6px;padding:6px 10px;min-width:60px;border:1px solid #dcdcdc;border-radius:6px;background-color:#fff;cursor:pointer;transition:all .2s ease;height:36px}.aspect-ratio-selector__trigger:hover{border-color:#f39c12;background-color:#fff9f0}.aspect-ratio-selector__trigger--open{border-color:#f39c12;background-color:#fff9f0;box-shadow:0 0 0 1px #f39c12}.aspect-ratio-selector__trigger-value{font-size:13px;font-weight:500;color:#333;flex:1}.aspect-ratio-selector__trigger-icon{font-size:10px;color:#999;transition:transform .2s ease}.aspect-ratio-selector__trigger-icon--open{transform:rotate(180deg)}.aspect-ratio-selector__dropdown{position:absolute;bottom:100%;left:0;margin-bottom:8px;padding:8px;background:#fff;border:1px solid #e8e8e8;border-radius:8px;box-shadow:0 -8px 24px #0000001f;z-index:1000;min-width:200px;animation:dropdownFadeInUp .15s ease}.aspect-ratio-selector__dropdown-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:6px}.aspect-ratio-selector__dropdown-item{display:flex;align-items:center;justify-content:center;padding:8px 6px;font-size:13px;font-weight:600;color:#333;background:#f5f5f5;border:1px solid #e8e8e8;border-radius:6px;cursor:pointer;transition:all .15s ease;min-width:42px;white-space:nowrap}.aspect-ratio-selector__dropdown-item:hover{background:#fff9f0;border-color:#f39c12;color:#e67e22}.aspect-ratio-selector__dropdown-item--selected{background:#fff9f0;border-color:#f39c12;color:#e67e22;font-weight:600}@keyframes dropdownFadeInUp{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@media(max-width:768px){.aspect-ratio-selector__dropdown{min-width:180px;padding:6px;bottom:auto;top:100%;margin-top:8px;margin-bottom:0;box-shadow:0 8px 24px #0000001f;animation:dropdownFadeInDown .15s ease}.aspect-ratio-selector__dropdown-grid{grid-template-columns:repeat(4,1fr);gap:4px}.aspect-ratio-selector__dropdown-item{padding:6px 4px;font-size:12px;min-width:36px}@keyframes dropdownFadeInDown{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}}@media(max-width:480px){.aspect-ratio-selector--compact{gap:4px}.aspect-ratio-selector--compact .aspect-ratio-selector__label{font-size:12px}.aspect-ratio-selector__trigger{padding:4px 8px;min-width:60px}.aspect-ratio-selector__trigger-value{font-size:12px}.aspect-ratio-selector__trigger-icon{font-size:8px}.aspect-ratio-selector__dropdown{min-width:160px;max-width:calc(100vw - 40px);padding:6px;left:0;right:auto;bottom:auto;top:100%;margin-top:6px}.aspect-ratio-selector__dropdown-grid{grid-template-columns:repeat(3,1fr);gap:4px}.aspect-ratio-selector__dropdown-item{padding:8px 4px;font-size:12px;min-width:40px;border-radius:4px}}.aspect-ratio-selector__preview{display:flex;align-items:center;gap:12px;margin-top:4px;padding:8px 12px;background-color:#f9f9f9;border-radius:6px}.aspect-ratio-selector__preview-box{display:flex;align-items:center;justify-content:center;width:48px;height:48px}.aspect-ratio-selector__preview-box-inner{background-color:#f39c12;border-radius:2px;opacity:.8}.aspect-ratio-selector__preview-info{display:flex;flex-direction:column;gap:2px}.aspect-ratio-selector__preview-info-ratio{font-size:14px;font-weight:500;color:#333}.aspect-ratio-selector__preview-info-desc{font-size:12px;color:#666}.storyboard-editor{display:flex;flex-direction:column;gap:16px;padding:16px;background:var(--td-bg-color-container, #ffffff);border:1px solid var(--td-component-stroke, #e7e7e7);border-radius:12px}.storyboard-editor__header{display:flex;align-items:flex-start;justify-content:space-between}.storyboard-editor__toggle{display:flex;align-items:flex-start;gap:12px}.storyboard-editor__toggle .t-switch{margin-top:2px}.storyboard-editor__title{display:flex;flex-direction:column;gap:2px}.storyboard-editor__title-text{font-size:14px;font-weight:600;color:var(--td-text-color-primary, #000000)}.storyboard-editor__title-desc{font-size:12px;color:var(--td-text-color-secondary, #666666)}.storyboard-editor__new-badge{font-size:10px;font-weight:600;color:#f59e0b;background:#fef3c7;padding:2px 6px;border-radius:4px;letter-spacing:.5px}.storyboard-editor__content{display:flex;flex-direction:column;gap:12px}.storyboard-editor__section-header{display:flex;align-items:center;justify-content:space-between}.storyboard-editor__section-title{font-size:14px;font-weight:600;color:var(--td-text-color-primary, #000000)}.storyboard-editor__section-hint{font-size:12px;color:var(--td-text-color-placeholder, #999999)}.storyboard-editor__scenes{display:flex;flex-direction:column;gap:0;position:relative;width:100%;display:block}.storyboard-editor__scene-wrapper{display:flex;align-items:flex-start;position:relative;padding-left:32px;min-height:44px;transition:all .2s ease;box-sizing:border-box;width:100%;max-width:100%}.storyboard-editor__scene-wrapper.is-selected .storyboard-editor__scene--expanded{animation:sceneExpand .25s ease-out}.storyboard-editor__timeline-line{position:absolute;left:11px;top:0;bottom:0;width:2px;background:linear-gradient(to bottom,var(--td-component-stroke, #e7e7e7) 0%,var(--td-component-stroke, #e7e7e7) 100%)}.storyboard-editor__timeline-line.is-last{bottom:50%}.storyboard-editor__timeline-node{position:absolute;left:4px;top:14px;width:16px;height:16px;border-radius:50%;background:var(--td-bg-color-container, #ffffff);border:2px solid var(--td-component-stroke, #dcdcdc);display:flex;align-items:center;justify-content:center;font-size:9px;font-weight:600;color:transparent;transition:all .2s ease;z-index:1}.storyboard-editor__timeline-node.is-selected{width:20px;height:20px;left:2px;top:12px;border-color:var(--td-brand-color, #f39c12);background:var(--td-brand-color, #f39c12);color:#fff;box-shadow:0 2px 8px #f39c124d}.storyboard-editor__scene{flex:1;min-width:0;display:flex;flex-direction:column;border-radius:8px;border:none;transition:all .2s ease;margin-bottom:8px;overflow:hidden}.storyboard-editor__scene--compact{display:grid;grid-template-columns:20px 1fr auto auto;align-items:center;gap:10px;padding:10px 12px;background:var(--td-bg-color-secondarycontainer, #f9f9f9);cursor:pointer}.storyboard-editor__scene--compact:hover{background:var(--td-bg-color-secondarycontainer-hover, #f3f3f3)}.storyboard-editor__scene-index{width:20px;height:20px;border-radius:50%;background:var(--td-component-stroke, #e7e7e7);display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:600;color:var(--td-text-color-secondary, #666666)}.storyboard-editor__scene-preview{min-width:0;overflow:hidden}.storyboard-editor__scene-preview-text{font-size:13px;color:var(--td-text-color-primary, #333333);margin:0;line-height:1.4;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.storyboard-editor__scene-duration-badge{display:flex;align-items:center;gap:3px;padding:2px 6px;background:#0000000a;border-radius:4px;font-size:11px;color:var(--td-text-color-secondary, #666666);white-space:nowrap}.storyboard-editor__scene-arrow{color:var(--td-text-color-placeholder, #999999);transition:transform .2s ease}.storyboard-editor__scene--compact:hover .storyboard-editor__scene-arrow{transform:translate(2px)}.storyboard-editor__scene--expanded{padding:14px;background:var(--td-bg-color-container, #ffffff);border:1px solid var(--td-brand-color, #f39c12);box-shadow:0 4px 16px #f39c121f;gap:12px}.storyboard-editor__scene-header{display:flex;align-items:center;justify-content:space-between}.storyboard-editor__scene-info{display:flex;align-items:center;gap:10px}.storyboard-editor__scene-label{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:600;color:var(--td-text-color-primary, #1a1a1a)}.storyboard-editor__active-indicator{width:6px;height:6px;border-radius:50%;background:var(--td-brand-color, #f39c12);animation:pulse 1.5s ease-in-out infinite}.storyboard-editor__scene-controls{display:flex;align-items:center;gap:4px}.storyboard-editor__time-icon{font-size:14px;color:var(--td-text-color-placeholder, #999999)}.storyboard-editor__duration-select{width:90px!important}.storyboard-editor__duration-select .t-input{font-size:13px;font-weight:500;text-align:center}.storyboard-editor__duration-select .t-input__inner{text-align:center}.storyboard-editor__duration-popup{max-height:120px}.storyboard-editor__duration-popup .t-select-option{font-size:12px;text-align:center;justify-content:center;padding:2px 8px;min-height:24px;line-height:20px}.storyboard-editor__scene-delete{opacity:.4;transition:opacity .15s ease,color .15s ease;margin-left:4px;padding:4px}.storyboard-editor__scene-delete:hover{opacity:1;color:var(--td-error-color, #e34d59)}.storyboard-editor__scene-prompt{width:100%}.storyboard-editor__add-btn{margin-top:4px;margin-left:32px;width:calc(100% - 32px)!important;border:1px dashed var(--td-component-stroke, #dcdcdc)!important;color:var(--td-text-color-secondary, #666666)!important;background:transparent!important;transition:all .2s ease!important}.storyboard-editor__add-btn:hover{border-color:var(--td-brand-color, #f39c12)!important;color:var(--td-brand-color, #f39c12)!important;background:#f39c120a!important}.storyboard-editor__add-btn:active{background:#f39c1214!important}.storyboard-editor .t-switch{flex-shrink:0}.scene-prompt-input{position:relative;width:100%}.scene-prompt-input__textarea{width:100%;min-height:72px;padding:10px 12px;font-size:13px;line-height:1.6;color:var(--td-text-color-primary, #000000);background:var(--td-bg-color-secondarycontainer, #f9f9f9);border:1px solid var(--td-component-stroke, #e7e7e7);border-radius:8px;resize:none;outline:none;transition:border-color .15s ease,box-shadow .15s ease,background .15s ease;box-sizing:border-box}.scene-prompt-input__textarea:hover:not(:disabled){border-color:var(--td-text-color-placeholder, #b8b8b8)}.scene-prompt-input__textarea:focus{border-color:var(--td-brand-color, #f39c12);box-shadow:0 0 0 2px #f39c121a;background:var(--td-bg-color-container, #ffffff)}.scene-prompt-input__textarea::-moz-placeholder{color:var(--td-text-color-placeholder, #b8b8b8)}.scene-prompt-input__textarea::placeholder{color:var(--td-text-color-placeholder, #b8b8b8)}.scene-prompt-input__textarea:disabled{opacity:.6;cursor:not-allowed}@keyframes sceneExpand{0%{opacity:.8;transform:scale(.98)}to{opacity:1;transform:scale(1)}}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.6;transform:scale(.9)}}.reference-image-upload{outline:none}.reference-image-upload--disabled{opacity:.6;pointer-events:none}.reference-image-upload__label{font-size:14px;font-weight:500;color:var(--td-text-color-primary, #333);margin-bottom:8px}.reference-image-upload__input{display:none}.reference-image-upload__placeholder{display:flex;align-items:center;justify-content:center;min-height:100px;padding:16px;border:2px dashed var(--td-component-border, #dcdcdc);border-radius:8px;background:var(--td-bg-color-container, #fff);transition:all .2s ease;cursor:default}.reference-image-upload__placeholder:hover{border-color:var(--td-brand-color-hover, #4787f0);background:var(--td-bg-color-container-hover, #f9f9f9)}.reference-image-upload__placeholder--dragging{border-color:var(--td-brand-color, #0052d9);background:var(--td-brand-color-light, #e6f4ff);border-style:solid}.reference-image-upload__buttons{display:flex;flex-direction:column;gap:8px;width:100%;max-width:120px}.reference-image-upload__btn,.reference-image-upload__slot-btn{width:100%;justify-content:center;height:32px;border-width:1px;font-size:13px!important;font-weight:400!important;font-family:inherit!important}.reference-image-upload__btn svg,.reference-image-upload__slot-btn svg{width:16px!important;height:16px!important;flex-shrink:0}.reference-image-upload__btn:hover:not(:disabled),.reference-image-upload__slot-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 2px 8px #0052d926}.reference-image-upload__btn:active:not(:disabled),.reference-image-upload__slot-btn:active:not(:disabled){transform:translateY(0)}.reference-image-upload__grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:8px}.reference-image-upload__single{display:flex;gap:12px;align-items:flex-start}.reference-image-upload__replace{flex:1;min-width:120px}.reference-image-upload__preview{position:relative;width:100px;height:100px;border-radius:8px;overflow:hidden;border:1px solid var(--td-component-border, #e7e7e7);background:var(--td-bg-color-secondarycontainer, #f5f5f5)}.reference-image-upload__preview:hover .reference-image-upload__remove{opacity:1}.reference-image-upload__image{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.reference-image-upload__remove{position:absolute;top:4px;right:4px;width:22px;height:22px;border:none;border-radius:50%;background:#0009;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:0;transition:all .2s ease}.reference-image-upload__remove:hover:not(:disabled){background:var(--td-error-color, #e34d59);transform:scale(1.1)}.reference-image-upload__remove:disabled{cursor:not-allowed}.reference-image-upload__slots{display:flex;gap:16px;flex-wrap:wrap}.reference-image-upload__slot{display:flex;flex-direction:column;gap:6px;flex:1;min-width:120px;max-width:160px}.reference-image-upload__slot-title{font-size:12px;font-weight:500;color:var(--td-text-color-secondary, #666);text-align:center}.reference-image-upload__slot-placeholder{display:flex;align-items:center;justify-content:center;min-height:100px;padding:12px;border:2px dashed var(--td-component-border, #dcdcdc);border-radius:8px;background:var(--td-bg-color-container, #fff);transition:all .2s ease}.reference-image-upload__slot-placeholder:hover{border-color:var(--td-brand-color-hover, #4787f0);background:var(--td-bg-color-container-hover, #f9f9f9)}.reference-image-upload__slot-placeholder--dragging{border-color:var(--td-brand-color, #0052d9);background:var(--td-brand-color-light, #e6f4ff);border-style:solid}.reference-image-upload__slot-buttons{display:flex;flex-direction:column;gap:6px;width:100%}.reference-image-upload__slot-label{position:absolute;bottom:0;left:0;right:0;padding:4px;background:#0009;color:#fff;font-size:11px;text-align:center}.reference-image-upload,.reference-image-upload *{color-scheme:light}.reference-image-upload__label{color:#333!important}.reference-image-upload__placeholder{background:#fff!important;border-color:#dcdcdc!important}.reference-image-upload__placeholder:hover{border-color:#4787f0!important;background:#f9f9f9!important}.reference-image-upload__placeholder--dragging{border-color:#0052d9!important;background:#e6f4ff!important}.reference-image-upload__slot-placeholder{background:#fff!important;border-color:#dcdcdc!important}.reference-image-upload__slot-placeholder:hover{border-color:#4787f0!important;background:#f9f9f9!important}.reference-image-upload__slot-placeholder--dragging{border-color:#0052d9!important;background:#e6f4ff!important}.reference-image-upload__slot-title{color:#666!important}.reference-image-upload__preview{border-color:#e7e7e7!important;background:#f5f5f5!important}.dialog-task-list{display:flex;flex-direction:column;gap:12px;margin:0;padding:0;background-color:transparent;border-radius:8px;min-height:100%;max-height:100%;overflow-y:visible;height:100%}.dialog-task-list__header{flex-shrink:0;padding-bottom:8px;border-bottom:1px solid #f0f0f0}.dialog-task-list__header h4{margin:0;font-size:13px;font-weight:600;color:#424242}.dialog-task-list__content{display:flex;flex-direction:column;gap:8px;flex:1;min-height:0;overflow:visible}.dialog-task-list__empty{display:flex;align-items:center;justify-content:center;padding:32px 16px;color:#999;font-size:13px;text-align:center;flex:1;min-height:100px}.dialog-task-list__empty p{margin:0}.dialog-task-list .task-item{padding:10px;font-size:12px}.dialog-task-list .task-item__preview-wrapper{width:100px;height:75px}.dialog-task-list .task-item__prompt{font-size:12px;-webkit-line-clamp:2}.dialog-task-list .task-item__tags .t-tag{font-size:10px!important;height:16px!important;padding:0 4px!important}.dialog-task-list .task-item__details{font-size:10px}.dialog-task-list .task-item__primary-action{height:24px!important;padding:0 8px!important;font-size:11px!important}.dialog-task-list .task-item__secondary-actions .t-button{height:22px!important;width:22px!important}@media(max-width:768px){.dialog-task-list{padding:0;gap:6px;height:auto;min-height:auto;max-height:none}.dialog-task-list__header{padding-bottom:6px}.dialog-task-list__header h4{font-size:12px}.dialog-task-list__content{gap:6px}.dialog-task-list .task-item{padding:8px;grid-template-columns:80px 1fr!important;grid-template-areas:"preview prompt" "info info"!important}.dialog-task-list .task-item__checkbox{display:none}.dialog-task-list .task-item__preview-wrapper{grid-area:preview;width:80px!important;height:60px!important}.dialog-task-list .task-item__body{display:contents}.dialog-task-list .task-item__prompt-area{grid-area:prompt}.dialog-task-list .task-item__info-area{grid-area:info;margin-top:4px}}@media(max-width:480px){.dialog-task-list{padding:0;gap:4px}.dialog-task-list__header{padding-bottom:4px}.dialog-task-list__header h4{font-size:11px}.dialog-task-list__content{gap:4px}.dialog-task-list .task-item{padding:6px;grid-template-columns:70px 1fr!important}.dialog-task-list .task-item__preview-wrapper{width:70px!important;height:52px!important}.dialog-task-list .task-item__prompt{font-size:11px!important;-webkit-line-clamp:2!important}.dialog-task-list .task-item__tags{gap:2px}.dialog-task-list .task-item__tags .t-tag{font-size:9px!important;height:14px!important;padding:0 3px!important}.dialog-task-list .task-item__details{font-size:9px;flex-wrap:wrap;gap:2px 4px}.dialog-task-list .task-item__actions{gap:4px}.dialog-task-list .task-item__primary-action{height:22px!important;padding:0 6px!important;font-size:10px!important}.dialog-task-list .task-item__secondary-actions .t-button{height:20px!important;width:20px!important}}
|
|
1
|
+
@charset "UTF-8";:export{themeFilter:invert(93%) hue-rotate(180deg);rightSidebarWidth:302px}.drawnix .Dialog.ttd-dialog{padding:1.25rem;display:flex;flex-direction:column;width:100%;max-width:1024px;height:100%;max-height:540px}.drawnix .Dialog.ttd-dialog.Dialog--fullscreen{margin-top:0}.drawnix .Dialog.ttd-dialog .Island{padding-inline:0!important;height:100%;display:flex;flex-direction:column;flex:1 1 auto;box-shadow:none}.drawnix .Dialog.ttd-dialog .Modal__content{height:auto;max-height:100%}@media screen and (min-width:861px){.drawnix .Dialog.ttd-dialog .Modal__content{max-height:750px;height:100%}}.drawnix .Dialog.ttd-dialog .Dialog__content{flex:1 1 auto}.drawnix .ttd-dialog-desc{font-size:15px;font-style:italic;font-weight:500;margin-bottom:1.5rem}.drawnix .ttd-dialog-tabs-root{width:100%;height:100%;display:flex;flex-direction:column}.drawnix .ttd-dialog-tab-trigger{color:var(--color-on-surface);font-size:.875rem;margin:0;padding:0 1rem;background-color:transparent;border:0;height:2.875rem;font-weight:600;font-family:inherit;letter-spacing:.4px}.drawnix .ttd-dialog-tab-trigger[data-state=active]{border-bottom:2px solid var(--color-primary)}.drawnix .ttd-dialog-triggers{border-bottom:1px solid var(--color-surface-high);margin-bottom:1.5rem;padding-inline:2.5rem}.drawnix .ttd-dialog-content{padding-inline:2.5rem;height:100%;display:flex;flex-direction:column}.drawnix .ttd-dialog-content[hidden]{display:none}.drawnix .ttd-dialog-input{width:auto;height:10rem;resize:none;border-radius:var(--border-radius-lg);border:1px solid var(--dialog-border-color);white-space:pre-wrap;padding:.85rem;box-sizing:border-box;font-family:monospace}@media screen and (min-width:861px){.drawnix .ttd-dialog-input{width:100%;height:100%}}.drawnix .ttd-dialog-output-wrapper{display:flex;align-items:center;justify-content:center;padding:.85rem;box-sizing:border-box;flex-grow:1;position:relative;border-radius:var(--border-radius-lg);border:1px solid var(--dialog-border-color);height:400px;width:auto}@media screen and (min-width:861px){.drawnix .ttd-dialog-output-wrapper{width:100%;height:200px}}.drawnix .ttd-dialog-output-wrapper canvas{max-width:100%;max-height:100%}.drawnix .ttd-dialog-output-canvas-container{display:flex;width:100%;height:100%;align-items:center;justify-content:center;flex-grow:1;overflow:hidden}.drawnix .ttd-dialog-output-error{color:red;font-weight:700;font-size:30px;word-break:break-word;overflow:auto;max-height:100%;height:100%;width:100%;text-align:center;position:absolute;z-index:10}.drawnix .ttd-dialog-output-error p{font-weight:500;font-family:Cascadia;text-align:left;white-space:pre-wrap;font-size:.875rem;padding:0 10px}.drawnix .ttd-dialog-panels{height:100%}@media screen and (min-width:861px){.drawnix .ttd-dialog-panels{display:grid;grid-template-columns:1fr 1fr;gap:4rem}}.drawnix .ttd-dialog-panel{display:flex;flex-direction:column;width:100%}.drawnix .ttd-dialog-panel__header{display:flex;margin:0 4px 4px;align-items:center;gap:1rem}.drawnix .ttd-dialog-panel__header label{font-size:14px;font-style:normal;font-weight:600}.drawnix .ttd-dialog-panel:first-child .ttd-dialog-panel-button-container:not(.invisible){margin-bottom:4rem}@media screen and (min-width:861px){.drawnix .ttd-dialog-panel .ttd-dialog-panel-button-container:not(.invisible){margin-bottom:.5rem!important}}.drawnix .ttd-dialog-panel textarea{height:100%;resize:none;border-radius:var(--border-radius-lg);border:1px solid var(--dialog-border-color);white-space:pre-wrap;padding:.85rem;box-sizing:border-box;width:100%;font-family:monospace}@media screen and (max-width:861px){.drawnix .ttd-dialog-panel textarea{width:auto;height:10rem}}.drawnix .ttd-dialog-panel-button-container{margin-top:1rem;margin-bottom:.5rem}.drawnix .ttd-dialog-panel-button-container.invisible .ttd-dialog-panel-button{display:none}@media screen and (min-width:861px){.drawnix .ttd-dialog-panel-button-container.invisible .ttd-dialog-panel-button{display:block;visibility:hidden}}.drawnix .ttd-dialog-panel-button.drawnix-button{font-family:inherit;font-weight:600;height:2.5rem;font-size:12px;color:#fff;background-color:var(--color-primary);width:100%}.drawnix .ttd-dialog-panel-button.drawnix-button:hover{background-color:var(--color-primary-darker)}.drawnix .ttd-dialog-panel-button.drawnix-button:active{background-color:var(--color-primary-darkest)}.drawnix .ttd-dialog-panel-button.drawnix-button:disabled{opacity:.5;cursor:not-allowed}.drawnix .ttd-dialog-panel-button.drawnix-button:disabled:hover{background-color:var(--color-primary)}@media screen and (min-width:861px){.drawnix .ttd-dialog-panel-button.drawnix-button{width:auto;min-width:7.5rem}}.drawnix.theme--dark.drawnix .ttd-dialog-panel-button.drawnix-button{color:var(--color-gray-100)}.drawnix .ttd-dialog-panel-button{position:relative}.drawnix .ttd-dialog-panel-button div{display:contents}.drawnix .ttd-dialog-panel-button div.invisible{visibility:hidden}.drawnix .ttd-dialog-panel-button div.Spinner{display:flex!important;position:absolute;top:0;right:0;bottom:0;left:0;--spinner-color: white}.drawnix.theme--dark.drawnix .ttd-dialog-panel-button div.Spinner{--spinner-color: var(--color-gray-100)}.drawnix .ttd-dialog-panel-button div span{padding-left:.5rem;display:flex}.drawnix .ttd-dialog-submit-shortcut{margin-inline-start:.5rem;font-size:.625rem;opacity:.6;display:flex;gap:.125rem}.drawnix .ttd-dialog-submit-shortcut__key{border:1px solid gray;padding:2px 3px;border-radius:4px}@media(max-width:768px){.drawnix .Dialog.ttd-dialog{padding:1rem;max-height:85vh;margin-top:60px}.drawnix .Dialog.ttd-dialog .Island{padding:0}.drawnix .ttd-dialog-triggers{padding-inline:1rem;margin-bottom:1rem}.drawnix .ttd-dialog-content{padding-inline:1rem}}@media(max-width:480px){.drawnix .Dialog.ttd-dialog{padding:.75rem;max-height:80vh;margin-top:50px;max-width:95vw}.drawnix .Dialog.ttd-dialog .Modal__content{max-height:75vh}.drawnix .ttd-dialog-triggers{padding-inline:.5rem;margin-bottom:.75rem}.drawnix .ttd-dialog-content{padding-inline:.5rem}.drawnix .ttd-dialog-tab-trigger{padding:0 .5rem;font-size:.75rem;height:2.5rem}}@media(max-width:768px){.drawnix .t-dialog__header>div{flex-wrap:wrap;gap:8px!important}.drawnix .t-dialog__header .t-select{max-width:200px!important;min-width:120px!important;flex-shrink:1}}@media(max-width:480px){.drawnix .t-dialog__header>div{gap:6px!important}.drawnix .t-dialog__header .t-select{max-width:140px!important;min-width:100px!important}.drawnix .t-dialog__header .t-select .t-input__inner{font-size:12px}}.video-model-options{display:flex;flex-direction:column;gap:12px}.video-model-options__row{display:flex;align-items:center;gap:12px}.video-model-options__label{font-size:13px;font-weight:500;color:var(--td-text-color-primary, #000000);min-width:40px;flex-shrink:0}.video-model-options__control{flex:1;display:flex;align-items:center}.video-model-options__fixed-value{font-size:13px;color:var(--td-text-color-secondary, #666666);padding:2px 12px;background:var(--td-bg-color-component, #f3f3f3);border-radius:4px}.video-model-options .t-radio-group{gap:8px}.video-model-options .t-radio-button{font-size:12px;padding:0 12px;height:28px;line-height:28px}.video-model-options .t-select{font-size:13px}.multi-image-upload__header{display:flex;align-items:center;gap:8px;margin-bottom:12px}.multi-image-upload__title{font-size:13px;font-weight:500;color:var(--td-text-color-primary, #000000)}.multi-image-upload__hint{font-size:12px;color:var(--td-text-color-placeholder, #999999)}.multi-image-upload__slots{display:flex;gap:12px;flex-wrap:wrap}.multi-image-upload__slot{display:flex;flex-direction:column;gap:6px}.multi-image-upload__slot-label{font-size:12px;color:var(--td-text-color-secondary, #666666);text-align:center}.multi-image-upload__preview{position:relative;width:100px;height:100px;border-radius:8px;overflow:hidden;border:1px solid var(--td-component-border, #e7e7e7)}.multi-image-upload__preview:hover .multi-image-upload__overlay{opacity:1}.multi-image-upload__image{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.multi-image-upload__overlay{position:absolute;top:0;right:0;bottom:0;left:0;background:#00000080;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .2s ease}.multi-image-upload__placeholder{width:100px;height:100px;border:2px dashed var(--td-component-border, #dcdcdc);border-radius:8px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;cursor:pointer;transition:all .2s ease;background:var(--td-bg-color-container, #ffffff)}.multi-image-upload__placeholder:hover{border-color:var(--td-brand-color, #0052d9);background:var(--td-bg-color-container-hover, #f9f9f9)}.multi-image-upload__placeholder-container{display:flex;flex-direction:column;gap:6px;align-items:center}.multi-image-upload__library-btn{font-size:11px;padding:2px 6px;height:auto;min-width:auto}.multi-image-upload__add-icon{font-size:24px;color:var(--td-text-color-placeholder, #999999)}.multi-image-upload__add-text{font-size:11px;color:var(--td-text-color-placeholder, #999999)}.multi-image-upload .t-upload{display:block}.multi-image-upload .t-upload__dragger{padding:0;border:none;background:transparent}.aspect-ratio-selector{display:flex;flex-direction:column;gap:8px}.aspect-ratio-selector__label{font-size:14px;font-weight:500;color:#333}.aspect-ratio-selector__options{display:flex;flex-wrap:wrap;gap:8px}.aspect-ratio-selector__option{display:flex;flex-direction:column;align-items:center;justify-content:center;min-width:56px;padding:8px 12px;border:1px solid #dcdcdc;border-radius:6px;background-color:#fff;cursor:pointer;transition:all .2s ease}.aspect-ratio-selector__option:hover{border-color:#f39c12;background-color:#fff9f0}.aspect-ratio-selector__option--selected{border-color:#f39c12;background-color:#fff9f0;box-shadow:0 0 0 1px #f39c12}.aspect-ratio-selector__option-ratio{font-size:13px;font-weight:500;color:#333}.aspect-ratio-selector__option-desc{font-size:10px;color:#999;margin-top:2px}.aspect-ratio-selector--compact{display:flex;align-items:center;gap:0;position:relative}.aspect-ratio-selector--compact .aspect-ratio-selector__label{display:none}.aspect-ratio-selector__trigger{display:flex;align-items:center;gap:6px;padding:6px 10px;min-width:60px;border:1px solid #dcdcdc;border-radius:6px;background-color:#fff;cursor:pointer;transition:all .2s ease;height:36px}.aspect-ratio-selector__trigger:hover{border-color:#f39c12;background-color:#fff9f0}.aspect-ratio-selector__trigger--open{border-color:#f39c12;background-color:#fff9f0;box-shadow:0 0 0 1px #f39c12}.aspect-ratio-selector__trigger-value{font-size:13px;font-weight:500;color:#333;flex:1}.aspect-ratio-selector__trigger-icon{font-size:10px;color:#999;transition:transform .2s ease}.aspect-ratio-selector__trigger-icon--open{transform:rotate(180deg)}.aspect-ratio-selector__dropdown{position:absolute;bottom:100%;left:0;margin-bottom:8px;padding:8px;background:#fff;border:1px solid #e8e8e8;border-radius:8px;box-shadow:0 -8px 24px #0000001f;z-index:1000;min-width:200px;animation:dropdownFadeInUp .15s ease}.aspect-ratio-selector__dropdown-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:6px}.aspect-ratio-selector__dropdown-item{display:flex;align-items:center;justify-content:center;padding:8px 6px;font-size:13px;font-weight:600;color:#333;background:#f5f5f5;border:1px solid #e8e8e8;border-radius:6px;cursor:pointer;transition:all .15s ease;min-width:42px;white-space:nowrap}.aspect-ratio-selector__dropdown-item:hover{background:#fff9f0;border-color:#f39c12;color:#e67e22}.aspect-ratio-selector__dropdown-item--selected{background:#fff9f0;border-color:#f39c12;color:#e67e22;font-weight:600}@keyframes dropdownFadeInUp{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@media(max-width:768px){.aspect-ratio-selector__dropdown{min-width:180px;padding:6px;bottom:auto;top:100%;margin-top:8px;margin-bottom:0;box-shadow:0 8px 24px #0000001f;animation:dropdownFadeInDown .15s ease}.aspect-ratio-selector__dropdown-grid{grid-template-columns:repeat(4,1fr);gap:4px}.aspect-ratio-selector__dropdown-item{padding:6px 4px;font-size:12px;min-width:36px}@keyframes dropdownFadeInDown{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}}@media(max-width:480px){.aspect-ratio-selector--compact{gap:4px}.aspect-ratio-selector--compact .aspect-ratio-selector__label{font-size:12px}.aspect-ratio-selector__trigger{padding:4px 8px;min-width:60px}.aspect-ratio-selector__trigger-value{font-size:12px}.aspect-ratio-selector__trigger-icon{font-size:8px}.aspect-ratio-selector__dropdown{min-width:160px;max-width:calc(100vw - 40px);padding:6px;left:0;right:auto;bottom:auto;top:100%;margin-top:6px}.aspect-ratio-selector__dropdown-grid{grid-template-columns:repeat(3,1fr);gap:4px}.aspect-ratio-selector__dropdown-item{padding:8px 4px;font-size:12px;min-width:40px;border-radius:4px}}.aspect-ratio-selector__preview{display:flex;align-items:center;gap:12px;margin-top:4px;padding:8px 12px;background-color:#f9f9f9;border-radius:6px}.aspect-ratio-selector__preview-box{display:flex;align-items:center;justify-content:center;width:48px;height:48px}.aspect-ratio-selector__preview-box-inner{background-color:#f39c12;border-radius:2px;opacity:.8}.aspect-ratio-selector__preview-info{display:flex;flex-direction:column;gap:2px}.aspect-ratio-selector__preview-info-ratio{font-size:14px;font-weight:500;color:#333}.aspect-ratio-selector__preview-info-desc{font-size:12px;color:#666}.storyboard-editor{display:flex;flex-direction:column;gap:16px;padding:16px;background:var(--td-bg-color-container, #ffffff);border:1px solid var(--td-component-stroke, #e7e7e7);border-radius:12px}.storyboard-editor__header{display:flex;align-items:flex-start;justify-content:space-between}.storyboard-editor__toggle{display:flex;align-items:flex-start;gap:12px}.storyboard-editor__toggle .t-switch{margin-top:2px}.storyboard-editor__title{display:flex;flex-direction:column;gap:2px}.storyboard-editor__title-text{font-size:14px;font-weight:600;color:var(--td-text-color-primary, #000000)}.storyboard-editor__title-desc{font-size:12px;color:var(--td-text-color-secondary, #666666)}.storyboard-editor__new-badge{font-size:10px;font-weight:600;color:#f59e0b;background:#fef3c7;padding:2px 6px;border-radius:4px;letter-spacing:.5px}.storyboard-editor__content{display:flex;flex-direction:column;gap:12px}.storyboard-editor__section-header{display:flex;align-items:center;justify-content:space-between}.storyboard-editor__section-title{font-size:14px;font-weight:600;color:var(--td-text-color-primary, #000000)}.storyboard-editor__section-hint{font-size:12px;color:var(--td-text-color-placeholder, #999999)}.storyboard-editor__scenes{display:flex;flex-direction:column;gap:0;position:relative;width:100%;display:block}.storyboard-editor__scene-wrapper{display:flex;align-items:flex-start;position:relative;padding-left:32px;min-height:44px;transition:all .2s ease;box-sizing:border-box;width:100%;max-width:100%}.storyboard-editor__scene-wrapper.is-selected .storyboard-editor__scene--expanded{animation:sceneExpand .25s ease-out}.storyboard-editor__timeline-line{position:absolute;left:11px;top:0;bottom:0;width:2px;background:linear-gradient(to bottom,var(--td-component-stroke, #e7e7e7) 0%,var(--td-component-stroke, #e7e7e7) 100%)}.storyboard-editor__timeline-line.is-last{bottom:50%}.storyboard-editor__timeline-node{position:absolute;left:4px;top:14px;width:16px;height:16px;border-radius:50%;background:var(--td-bg-color-container, #ffffff);border:2px solid var(--td-component-stroke, #dcdcdc);display:flex;align-items:center;justify-content:center;font-size:9px;font-weight:600;color:transparent;transition:all .2s ease;z-index:1}.storyboard-editor__timeline-node.is-selected{width:20px;height:20px;left:2px;top:12px;border-color:var(--td-brand-color, #f39c12);background:var(--td-brand-color, #f39c12);color:#fff;box-shadow:0 2px 8px #f39c124d}.storyboard-editor__scene{flex:1;min-width:0;display:flex;flex-direction:column;border-radius:8px;border:none;transition:all .2s ease;margin-bottom:8px;overflow:hidden}.storyboard-editor__scene--compact{display:grid;grid-template-columns:20px 1fr auto auto;align-items:center;gap:10px;padding:10px 12px;background:var(--td-bg-color-secondarycontainer, #f9f9f9);cursor:pointer}.storyboard-editor__scene--compact:hover{background:var(--td-bg-color-secondarycontainer-hover, #f3f3f3)}.storyboard-editor__scene-index{width:20px;height:20px;border-radius:50%;background:var(--td-component-stroke, #e7e7e7);display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:600;color:var(--td-text-color-secondary, #666666)}.storyboard-editor__scene-preview{min-width:0;overflow:hidden}.storyboard-editor__scene-preview-text{font-size:13px;color:var(--td-text-color-primary, #333333);margin:0;line-height:1.4;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.storyboard-editor__scene-duration-badge{display:flex;align-items:center;gap:3px;padding:2px 6px;background:#0000000a;border-radius:4px;font-size:11px;color:var(--td-text-color-secondary, #666666);white-space:nowrap}.storyboard-editor__scene-arrow{color:var(--td-text-color-placeholder, #999999);transition:transform .2s ease}.storyboard-editor__scene--compact:hover .storyboard-editor__scene-arrow{transform:translate(2px)}.storyboard-editor__scene--expanded{padding:14px;background:var(--td-bg-color-container, #ffffff);border:1px solid var(--td-brand-color, #f39c12);box-shadow:0 4px 16px #f39c121f;gap:12px}.storyboard-editor__scene-header{display:flex;align-items:center;justify-content:space-between}.storyboard-editor__scene-info{display:flex;align-items:center;gap:10px}.storyboard-editor__scene-label{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:600;color:var(--td-text-color-primary, #1a1a1a)}.storyboard-editor__active-indicator{width:6px;height:6px;border-radius:50%;background:var(--td-brand-color, #f39c12);animation:pulse 1.5s ease-in-out infinite}.storyboard-editor__scene-controls{display:flex;align-items:center;gap:4px}.storyboard-editor__time-icon{font-size:14px;color:var(--td-text-color-placeholder, #999999)}.storyboard-editor__duration-select{width:90px!important}.storyboard-editor__duration-select .t-input{font-size:13px;font-weight:500;text-align:center}.storyboard-editor__duration-select .t-input__inner{text-align:center}.storyboard-editor__duration-popup{max-height:120px}.storyboard-editor__duration-popup .t-select-option{font-size:12px;text-align:center;justify-content:center;padding:2px 8px;min-height:24px;line-height:20px}.storyboard-editor__scene-delete{opacity:.4;transition:opacity .15s ease,color .15s ease;margin-left:4px;padding:4px}.storyboard-editor__scene-delete:hover{opacity:1;color:var(--td-error-color, #e34d59)}.storyboard-editor__scene-prompt{width:100%}.storyboard-editor__add-btn{margin-top:4px;margin-left:32px;width:calc(100% - 32px)!important;border:1px dashed var(--td-component-stroke, #dcdcdc)!important;color:var(--td-text-color-secondary, #666666)!important;background:transparent!important;transition:all .2s ease!important}.storyboard-editor__add-btn:hover{border-color:var(--td-brand-color, #f39c12)!important;color:var(--td-brand-color, #f39c12)!important;background:#f39c120a!important}.storyboard-editor__add-btn:active{background:#f39c1214!important}.storyboard-editor .t-switch{flex-shrink:0}.scene-prompt-input{position:relative;width:100%}.scene-prompt-input__textarea{width:100%;min-height:72px;padding:10px 12px;font-size:13px;line-height:1.6;color:var(--td-text-color-primary, #000000);background:var(--td-bg-color-secondarycontainer, #f9f9f9);border:1px solid var(--td-component-stroke, #e7e7e7);border-radius:8px;resize:none;outline:none;transition:border-color .15s ease,box-shadow .15s ease,background .15s ease;box-sizing:border-box}.scene-prompt-input__textarea:hover:not(:disabled){border-color:var(--td-text-color-placeholder, #b8b8b8)}.scene-prompt-input__textarea:focus{border-color:var(--td-brand-color, #f39c12);box-shadow:0 0 0 2px #f39c121a;background:var(--td-bg-color-container, #ffffff)}.scene-prompt-input__textarea::-moz-placeholder{color:var(--td-text-color-placeholder, #b8b8b8)}.scene-prompt-input__textarea::placeholder{color:var(--td-text-color-placeholder, #b8b8b8)}.scene-prompt-input__textarea:disabled{opacity:.6;cursor:not-allowed}@keyframes sceneExpand{0%{opacity:.8;transform:scale(.98)}to{opacity:1;transform:scale(1)}}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.6;transform:scale(.9)}}.reference-image-upload{outline:none;max-width:400px}.reference-image-upload--disabled{opacity:.6;pointer-events:none}.reference-image-upload__label{font-size:14px;font-weight:500;color:var(--td-text-color-primary, #333);margin-bottom:8px}.reference-image-upload__input{display:none}.reference-image-upload__placeholder{display:flex;align-items:center;justify-content:center;min-height:100px;padding:16px;border:2px dashed var(--td-component-border, #dcdcdc);border-radius:8px;background:var(--td-bg-color-container, #fff);transition:all .2s ease;cursor:default}.reference-image-upload__placeholder:hover{border-color:var(--td-brand-color-hover, #4787f0);background:var(--td-bg-color-container-hover, #f9f9f9)}.reference-image-upload__placeholder--dragging{border-color:var(--td-brand-color, #0052d9);background:var(--td-brand-color-light, #e6f4ff);border-style:solid}.reference-image-upload__buttons{display:flex;flex-direction:column;gap:8px;width:100%;max-width:120px}.reference-image-upload__btn,.reference-image-upload__slot-btn{width:100%;justify-content:center;height:32px;border-width:1px;font-size:13px!important;font-weight:400!important;font-family:inherit!important}.reference-image-upload__btn svg,.reference-image-upload__slot-btn svg{width:16px!important;height:16px!important;flex-shrink:0}.reference-image-upload__btn:hover:not(:disabled),.reference-image-upload__slot-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 2px 8px #0052d926}.reference-image-upload__btn:active:not(:disabled),.reference-image-upload__slot-btn:active:not(:disabled){transform:translateY(0)}.reference-image-upload__grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:8px}.reference-image-upload__single{display:flex;gap:12px;align-items:flex-start}.reference-image-upload__replace{flex:1;min-width:120px}.reference-image-upload__preview{position:relative;width:100px;height:100px;border-radius:8px;overflow:hidden;border:1px solid var(--td-component-border, #e7e7e7);background:var(--td-bg-color-secondarycontainer, #f5f5f5)}.reference-image-upload__preview:hover .reference-image-upload__remove{opacity:1}.reference-image-upload__image{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.reference-image-upload__remove{position:absolute;top:4px;right:4px;width:22px;height:22px;border:none;border-radius:50%;background:#0009;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:0;transition:all .2s ease}.reference-image-upload__remove:hover:not(:disabled){background:var(--td-error-color, #e34d59);transform:scale(1.1)}.reference-image-upload__remove:disabled{cursor:not-allowed}.reference-image-upload__slots{display:flex;gap:16px;flex-wrap:wrap}.reference-image-upload__slot{display:flex;flex-direction:column;gap:6px;flex:1;min-width:120px;max-width:160px}.reference-image-upload__slot-title{font-size:12px;font-weight:500;color:var(--td-text-color-secondary, #666);text-align:center}.reference-image-upload__slot-placeholder{display:flex;align-items:center;justify-content:center;min-height:100px;padding:12px;border:2px dashed var(--td-component-border, #dcdcdc);border-radius:8px;background:var(--td-bg-color-container, #fff);transition:all .2s ease}.reference-image-upload__slot-placeholder:hover{border-color:var(--td-brand-color-hover, #4787f0);background:var(--td-bg-color-container-hover, #f9f9f9)}.reference-image-upload__slot-placeholder--dragging{border-color:var(--td-brand-color, #0052d9);background:var(--td-brand-color-light, #e6f4ff);border-style:solid}.reference-image-upload__slot-buttons{display:flex;flex-direction:column;gap:6px;width:100%}.reference-image-upload__slot-label{position:absolute;bottom:0;left:0;right:0;padding:4px;background:#0009;color:#fff;font-size:11px;text-align:center}.reference-image-upload,.reference-image-upload *{color-scheme:light}.reference-image-upload__label{color:#333!important}.reference-image-upload__placeholder{background:#fff!important;border-color:#dcdcdc!important}.reference-image-upload__placeholder:hover{border-color:#4787f0!important;background:#f9f9f9!important}.reference-image-upload__placeholder--dragging{border-color:#0052d9!important;background:#e6f4ff!important}.reference-image-upload__slot-placeholder{background:#fff!important;border-color:#dcdcdc!important}.reference-image-upload__slot-placeholder:hover{border-color:#4787f0!important;background:#f9f9f9!important}.reference-image-upload__slot-placeholder--dragging{border-color:#0052d9!important;background:#e6f4ff!important}.reference-image-upload__slot-title{color:#666!important}.reference-image-upload__preview{border-color:#e7e7e7!important;background:#f5f5f5!important}.resizable-divider{position:relative;display:flex;align-items:flex-end;justify-content:center;width:12px;min-width:12px;height:100%;cursor:col-resize;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;z-index:10;padding-bottom:12px}.resizable-divider:hover .resizable-divider__bar,.resizable-divider.is-dragging .resizable-divider__bar{background:var(--color-primary, #f39c12);opacity:.8;width:3px}.resizable-divider.is-dragging .resizable-divider__bar{opacity:1}.resizable-divider.is-collapsed{cursor:default;width:16px;min-width:16px}.resizable-divider.is-collapsed .resizable-divider__bar{display:none}.resizable-divider.is-disabled{cursor:not-allowed;pointer-events:none;opacity:.5}.resizable-divider__bar{position:absolute;left:50%;transform:translate(-50%);width:2px;height:100%;background:var(--color-border-light, #e8e8e8);border-radius:1px;transition:background .2s ease,opacity .2s ease,width .15s ease}.resizable-divider__toggle{position:relative;display:flex;align-items:center;justify-content:center;width:16px;height:28px;background:var(--color-bg-container, #fff);border:1px solid var(--color-border-light, #e8e8e8);border-radius:3px;cursor:pointer;transition:all .2s ease;color:var(--color-text-placeholder, #bbb);z-index:11;opacity:.6}.resizable-divider__toggle:hover{background:var(--color-bg-secondary, #f5f5f5);border-color:var(--color-primary, #f39c12);color:var(--color-primary, #f39c12);opacity:1}.resizable-divider__toggle:active{transform:scale(.95)}.resizable-divider.is-collapsed .resizable-divider__toggle{opacity:.8;color:var(--color-text-secondary, #999)}@media(max-width:768px){.resizable-divider{display:none}}.dialog-task-list{display:flex;flex-direction:column;gap:12px;margin:0;padding:0;background-color:transparent;border-radius:8px;min-height:100%;max-height:100%;overflow-y:visible;height:100%}.dialog-task-list__header{flex-shrink:0;padding-bottom:8px;border-bottom:1px solid #f0f0f0}.dialog-task-list__header h4{margin:0;font-size:13px;font-weight:600;color:#424242}.dialog-task-list__content{display:flex;flex-direction:column;gap:8px;flex:1;min-height:0;overflow:visible}.dialog-task-list__empty{display:flex;align-items:center;justify-content:center;padding:32px 16px;color:#999;font-size:13px;text-align:center;flex:1;min-height:100px}.dialog-task-list__empty p{margin:0}.dialog-task-list .task-item{padding:10px;font-size:12px}.dialog-task-list .task-item__preview-wrapper{width:100px;height:75px}.dialog-task-list .task-item__prompt{font-size:12px;-webkit-line-clamp:2}.dialog-task-list .task-item__tags .t-tag{font-size:10px!important;height:16px!important;padding:0 4px!important}.dialog-task-list .task-item__details{font-size:10px}.dialog-task-list .task-item__primary-action{height:24px!important;padding:0 8px!important;font-size:11px!important}.dialog-task-list .task-item__secondary-actions .t-button{height:22px!important;width:22px!important}@media(max-width:768px){.dialog-task-list{padding:0;gap:6px;height:auto;min-height:auto;max-height:none}.dialog-task-list__header{padding-bottom:6px}.dialog-task-list__header h4{font-size:12px}.dialog-task-list__content{gap:6px}.dialog-task-list .task-item{padding:8px;grid-template-columns:80px 1fr!important;grid-template-areas:"preview prompt" "info info"!important}.dialog-task-list .task-item__checkbox{display:none}.dialog-task-list .task-item__preview-wrapper{grid-area:preview;width:80px!important;height:60px!important}.dialog-task-list .task-item__body{display:contents}.dialog-task-list .task-item__prompt-area{grid-area:prompt}.dialog-task-list .task-item__info-area{grid-area:info;margin-top:4px}}@media(max-width:480px){.dialog-task-list{padding:0;gap:4px}.dialog-task-list__header{padding-bottom:4px}.dialog-task-list__header h4{font-size:11px}.dialog-task-list__content{gap:4px}.dialog-task-list .task-item{padding:6px;grid-template-columns:70px 1fr!important}.dialog-task-list .task-item__preview-wrapper{width:70px!important;height:52px!important}.dialog-task-list .task-item__prompt{font-size:11px!important;-webkit-line-clamp:2!important}.dialog-task-list .task-item__tags{gap:2px}.dialog-task-list .task-item__tags .t-tag{font-size:9px!important;height:14px!important;padding:0 3px!important}.dialog-task-list .task-item__details{font-size:9px;flex-wrap:wrap;gap:2px 4px}.dialog-task-list .task-item__actions{gap:4px}.dialog-task-list .task-item__primary-action{height:22px!important;padding:0 6px!important;font-size:10px!important}.dialog-task-list .task-item__secondary-actions .t-button{height:20px!important;width:20px!important}}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{d as Vr,cO as In,ci as Me,cP as yt,aU as z,cm as kr,cQ as dt,af as Z,r as F,cc as re,cg as ue,cR as Qt,aM as tt,cS as Dr,aT as Fe,aC as Rr,co as Tn,aN as Pn,aO as An,aP as Mn,aQ as Vn,aS as Yt,cd as qe,aG as vt,cn as vr,cT as Zt,cU as kn,cp as Nr,cu as Xe,z as Dn,cq as Rn,ce as Nn,cV as $n,cW as mr,cX as qn,cY as Hn,cZ as Un,I as Kn,_ as Wn,c_ as zn,F as D,K as Dt,ak as Ce,a$ as Bn,c$ as Gn,d0 as $r,d1 as Ze,d2 as Qn,a6 as Se,d3 as $e,bc as Yn,bj as Je,A as Zn,o as Jn,bB as Xn,bC as ea,d4 as gr,d5 as ta,d6 as hr,d7 as ra,a7 as na,bk as aa,bh as la,b0 as ia}from"./index-
|
|
1
|
+
import{d as Vr,cO as In,ci as Me,cP as yt,aU as z,cm as kr,cQ as dt,af as Z,r as F,cc as re,cg as ue,cR as Qt,aM as tt,cS as Dr,aT as Fe,aC as Rr,co as Tn,aN as Pn,aO as An,aP as Mn,aQ as Vn,aS as Yt,cd as qe,aG as vt,cn as vr,cT as Zt,cU as kn,cp as Nr,cu as Xe,z as Dn,cq as Rn,ce as Nn,cV as $n,cW as mr,cX as qn,cY as Hn,cZ as Un,I as Kn,_ as Wn,c_ as zn,F as D,K as Dt,ak as Ce,a$ as Bn,c$ as Gn,d0 as $r,d1 as Ze,d2 as Qn,a6 as Se,d3 as $e,bc as Yn,bj as Je,A as Zn,o as Jn,bB as Xn,bC as ea,d4 as gr,d5 as ta,d6 as hr,d7 as ra,a7 as na,bk as aa,bh as la,b0 as ia}from"./index-CvrZFlag.js";import{i as Ke}from"./isEmpty-CRXO1bLi.js";import{g as oe}from"./hasIn-__wdhirj.js";import{h as qr}from"./has-BsV_fqUH.js";import{b as oa}from"./pick-CIdLSF0Z.js";import{S as Hr}from"./index-C6OIGmaF.js";function ua(){if(!arguments.length)return[];var t=arguments[0];return Vr(t)?t:[t]}function pr(t){return t===null}function He(t,r,e){return t==null?t:oa(t,r,e)}function et(t,r){return t==null?!0:In(t,r)}/**
|
|
2
2
|
* tdesign v1.16.3
|
|
3
3
|
* (c) 2026 tdesign
|
|
4
4
|
* @license MIT
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{w as M,o as v,p as A,x as S}from"./index-
|
|
1
|
+
import{w as M,o as v,p as A,x as S}from"./index-CvrZFlag.js";function T(s,e){switch(s){case"generate_image":return`生成图片: ${((e==null?void 0:e.prompt)||"").substring(0,30)}...`;case"generate_video":return`生成视频: ${((e==null?void 0:e.prompt)||"").substring(0,30)}...`;case"generate_grid_image":return`生成宫格图: ${((e==null?void 0:e.theme)||"").substring(0,30)}...`;case"insert_svg":return"插入SVG矢量图";case"canvas_insertion":case"insert_to_canvas":return"插入到画布";default:return`执行 ${s}`}}async function I(s,e){if(!s)return{success:!1,error:"缺少必填参数 context"};const n=[];try{const a=await M.execute(s,{model:s.model.id,onChunk:r=>{var t;(t=e==null?void 0:e.onChunk)==null||t.call(e,r)},onToolCall:r=>{var l,m;const t={...r.arguments};if(["generate_image","generate_video","generate_grid_image","generate_photo_wall"].includes(r.name)){const o=t.model,i=r.name==="generate_video",g=v.get(),f=g.imageModelName||((l=A[0])==null?void 0:l.id)||"gemini-2.5-flash-image-vip",_=g.videoModelName||"veo3";if(o){const d=S(o);if(i?d!=="video":d!=="image"){const h=i?_:f;t.model=h}}else{const d=i?_:f;t.model=d}}const u={id:`step-tool-${Date.now()}-${Math.random().toString(36).substring(2,6)}`,mcp:r.name,args:t,description:T(r.name,t),status:"pending"};n.push(u),(m=e==null?void 0:e.onAddSteps)==null||m.call(e,[u])},onToolResult:r=>{var t;if(n.length>0){const c=n[n.length-1];c.status=r.success?"completed":"failed",(t=e==null?void 0:e.onUpdateStep)==null||t.call(e,c.id,c.status,r.data,r.error)}}});return a.success?{success:!0,generatedSteps:n,response:a.response}:{success:!1,error:a.error||"AI 分析失败",generatedSteps:n}}catch(a){return console.error("[AIAnalyze] Analysis failed:",a),{success:!1,error:a.message||"AI 分析失败",generatedSteps:n}}}export{I as analyzeWithAI};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{B as H,r,a9 as de,aa as me,F as s,K as R,ab as pe,ac as U,ad as W,ae as ue,af as q,M as ge,n as E,o as I,ag as he,ah as V,a6 as B}from"./index-CvrZFlag.js";import{l as fe,u as _e,a as ve,g as xe,b as we,R as Ie,P as Te,E as ke,A as je,c as ye,D as be,s as Ae}from"./DialogTaskList-BSSAOh5P.js";const Re=({value:l,onChange:m,compact:T=!0})=>{const{language:p}=H(),[c,u]=r.useState(!1),g=r.useRef(null),h=r.useMemo(()=>l==="auto"?de:me(l),[l]);r.useEffect(()=>{const a=_=>{g.current&&!g.current.contains(_.target)&&u(!1)};return c&&document.addEventListener("mousedown",a),()=>{document.removeEventListener("mousedown",a)}},[c]);const d=a=>{m(a.value),u(!1)};return T?s.jsxs("div",{className:"aspect-ratio-selector aspect-ratio-selector--compact",ref:g,children:[s.jsx(R,{content:p==="zh"?"选择图片比例":"Select aspect ratio",theme:"light",children:s.jsxs("div",{className:`aspect-ratio-selector__trigger ${c?"aspect-ratio-selector__trigger--open":""}`,"data-track":"ai_click_ratio_toggle",onClick:()=>u(!c),children:[s.jsx("span",{className:"aspect-ratio-selector__trigger-value",children:(h==null?void 0:h.label)||l}),s.jsx(pe,{className:`aspect-ratio-selector__trigger-icon ${c?"aspect-ratio-selector__trigger-icon--open":""}`})]})}),c&&s.jsx("div",{className:"aspect-ratio-selector__dropdown",children:s.jsx("div",{className:"aspect-ratio-selector__dropdown-grid",children:U.map(a=>s.jsx(R,{content:a.description,theme:"light",placement:"top",showArrow:!1,children:s.jsx("div",{className:`aspect-ratio-selector__dropdown-item ${l===a.value?"aspect-ratio-selector__dropdown-item--selected":""}`,"data-track":"ai_click_ratio_select",onClick:()=>d(a),children:a.label})},a.value))})})]}):s.jsxs("div",{className:"aspect-ratio-selector",children:[s.jsx("div",{className:"aspect-ratio-selector__label",children:p==="zh"?"图片比例":"Aspect Ratio"}),s.jsx("div",{className:"aspect-ratio-selector__options",children:U.map(a=>s.jsx(R,{content:a.description,theme:"light",placement:"top",showArrow:!1,children:s.jsx("div",{className:`aspect-ratio-selector__option ${l===a.value?"aspect-ratio-selector__option--selected":""}`,"data-track":"ai_click_ratio_select",onClick:()=>m(a.value),children:s.jsx("span",{className:"aspect-ratio-selector__option-ratio",children:a.label})})},a.value))})]})},Ce=({initialPrompt:l="",initialImages:m=[],selectedElementIds:T=[],initialWidth:p,initialHeight:c,initialResultUrl:u,selectedModel:g,onModelChange:h}={})=>{const[d,a]=r.useState(l),[_,S]=r.useState(p||1024),[y,N]=r.useState(c||1024),[v,b]=r.useState(W),[J,o]=r.useState(null),[P,x]=r.useState(m),[z,Q]=r.useState(!0),[C,X]=r.useState(()=>fe("image")),Y=r.useRef(null),{imageHistory:M}=_e(),{isGenerating:w}=ve("image"),{language:t}=H(),{createTask:D}=ue(),[G,k]=r.useState(!1),Z=r.useCallback(e=>{X(e)},[]),ee=r.useCallback(()=>{Q(e=>!e)},[]),O=q.useRef("");r.useEffect(()=>{if(G)return;const e=JSON.stringify({prompt:l,images:m==null?void 0:m.map(f=>f.url),elementIds:T,width:p,height:c,result:u});O.current!==e&&(O.current=e,a(l),x(m||[]),p&&S(p),c&&N(c))},[l,m,T,p,c,u,G]),r.useEffect(()=>(o(null),()=>{o(null)}),[]);const se=()=>{a(""),x([]),o(null),b(W),k(!1),window.dispatchEvent(new CustomEvent("ai-image-clear"))},ae=q.useMemo(()=>xe("image",t,M),[M,t]),K=e=>{Ae("image",e)},te=e=>{if(k(!0),a(e.params.prompt||""),S(e.params.width||1024),N(e.params.height||1024),e.params.uploadedImages&&e.params.uploadedImages.length>0?x(e.params.uploadedImages):x([]),e.params.model){const f=I.get();I.update({...f,imageModelName:e.params.model})}e.params.aspectRatio&&b(e.params.aspectRatio),o(null)},re=async()=>Promise.all(P.map(async e=>{if(e.file)return new Promise((f,n)=>{const i=new FileReader;i.onload=()=>{f({type:"url",url:i.result,name:e.name})},i.onerror=n,i.readAsDataURL(e.file)});if(e.url)return{type:"url",url:e.url,name:e.name};throw new Error("Invalid image data")})),L=async(e=1)=>{if(!d.trim()){o(t==="zh"?"请输入图像描述":"Please enter image description");return}if(!I.get().apiKey&&!await he()){o(t==="zh"?"需要 API Key 才能生成图片":"API Key is required to generate images");return}try{const n=typeof _=="string"?parseInt(_)||1024:_,i=typeof y=="string"?parseInt(y)||1024:y,$=await re();if(e>1){const j=[],ce=`batch_${Date.now()}`,ie=I.get().imageModelName||"gemini-3-pro-image-preview-vip";for(let A=0;A<e;A++){const le={prompt:d.trim(),width:n,height:i,aspectRatio:v,size:V(v),model:ie,uploadedImages:$,batchId:ce,batchIndex:A+1,batchTotal:e,autoInsertToCanvas:!0},F=D(le,E.IMAGE);F&&j.push(F.id)}j.length>0?(B.success(t==="zh"?`已添加 ${j.length} 个任务到队列`:`Added ${j.length} tasks to queue`),K(d),o(null),k(!1)):o(t==="zh"?"批量任务创建失败,请稍后重试":"Failed to create batch tasks, please try again later");return}const oe=I.get().imageModelName||"gemini-2.5-flash-image-vip",ne={prompt:d.trim(),width:n,height:i,aspectRatio:v,size:V(v),model:oe,uploadedImages:$,autoInsertToCanvas:!0};D(ne,E.IMAGE)?(B.success(t==="zh"?"任务已添加到队列,将在后台生成":"Task added to queue, will be generated in background"),K(d),o(null),k(!1)):o(t==="zh"?"任务创建失败,请检查参数或稍后重试":"Failed to create task, please check parameters or try again later")}catch(n){console.error("Failed to create task:",n);let i=t==="zh"?"任务创建失败,请检查参数或稍后重试":"Failed to create task, please check parameters or try again later";n.message&&(n.message.includes("exceed 5000 characters")?i=t==="zh"?"提示词不能超过 5000 字符":"Prompt must not exceed 5000 characters":n.message.includes("Duplicate submission")?i=t==="zh"?"请勿重复提交,请等待 5 秒后再试":"Duplicate submission. Please wait 5 seconds.":n.message.includes("Invalid parameters")&&(i=t==="zh"?`参数错误: ${n.message.replace("Invalid parameters: ","")}`:n.message)),o(i)}};return we(w,d,()=>L(1)),s.jsx("div",{className:"ai-image-generation-container",children:s.jsxs("div",{className:"main-content",ref:Y,children:[s.jsxs("div",{className:"ai-image-generation-section",children:[s.jsxs("div",{className:"ai-image-generation-form",children:[g!==void 0&&h&&s.jsx("div",{className:"form-header-row",children:s.jsx("div",{className:"model-selector-wrapper",children:s.jsx(ge,{selectedModel:g,onSelect:e=>h(e),language:t,placement:"down",variant:"form",disabled:w})})}),s.jsx(Ie,{images:P,onImagesChange:x,language:t,disabled:w,multiple:!0,label:t==="zh"?"参考图片 (可选)":"Reference Images (Optional)",onError:o}),s.jsx(Te,{prompt:d,onPromptChange:a,presetPrompts:ae,language:t,type:"image",disabled:w,onError:o}),s.jsx(ke,{error:J})]}),s.jsx(je,{language:t,type:"image",isGenerating:w,hasGenerated:!1,canGenerate:!!d.trim(),onGenerate:L,onReset:se,leftContent:s.jsx(Re,{value:v,onChange:b,compact:!0})})]}),s.jsx(ye,{isRightPanelVisible:z,onToggleRightPanel:ee,onWidthChange:Z,rightPanelWidth:C,language:t,storageKey:"image"}),z&&s.jsx("div",{className:"task-sidebar",style:{width:C,flexShrink:0},children:s.jsx(be,{taskType:E.IMAGE,onEditTask:te})})]})})};export{Ce as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@charset "UTF-8";.ai-image-generation-container{display:flex;flex-direction:column;height:80vh;overflow:hidden;position:relative}.dialog-close-button{position:absolute;top:1px;right:1px;width:24px;height:24px;border:none;background:var(--color-bg-container, #fff);color:var(--color-text-secondary, #666);border-radius:6px;cursor:pointer;font-size:20px;font-weight:400;line-height:1;display:flex;align-items:center;justify-content:center;transition:all .2s ease;box-shadow:0 2px 8px #0000001a;z-index:10}.dialog-close-button:hover{background:var(--color-error-light, #fff2f0);color:var(--color-error, #ff4d4f);transform:scale(1.05)}.dialog-close-button:active{transform:scale(.95)}.main-content{display:flex;gap:0;min-height:400px;height:100%;align-items:stretch;flex:1;overflow:hidden}.ai-image-generation-section{flex:1;min-width:280px;display:flex;flex-direction:column;gap:16px;height:100%;overflow-y:auto;overflow-x:hidden;padding-right:8px;scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.15) transparent}.ai-image-generation-section::-webkit-scrollbar{width:4px}.ai-image-generation-section::-webkit-scrollbar-track{background:transparent}.ai-image-generation-section::-webkit-scrollbar-thumb{background:#00000026;border-radius:2px}.ai-image-generation-section::-webkit-scrollbar-thumb:hover{background:#00000040}.preview-section{flex:1;display:flex;flex-direction:column;gap:16px;max-height:70vh;position:relative}.section-title{font-size:18px;font-weight:600;color:var(--color-text-primary, #333);margin:0;padding-bottom:8px;border-bottom:1px solid var(--color-border-light, #f0f0f0)}.section-actions{display:flex;justify-content:center;align-items:center;gap:8px;flex-wrap:nowrap;margin-top:12px}.section-actions.unified-action-bar{gap:8px}.task-sidebar{min-width:240px;height:100%;overflow-y:auto;background:var(--color-bg-container, #fff);border:1px solid var(--color-border-light, #e8e8e8);border-radius:10px;padding:12px;box-shadow:0 2px 8px #0000000f;scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.15) transparent}.task-sidebar::-webkit-scrollbar{width:4px}.task-sidebar::-webkit-scrollbar-track{background:transparent}.task-sidebar::-webkit-scrollbar-thumb{background:#00000026;border-radius:2px}.task-sidebar::-webkit-scrollbar-thumb:hover{background:#00000040}.form-header-row{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}.form-header-row .model-selector-wrapper{flex:1;width:100%;max-width:none}.batch-mode-btn{padding:6px 12px;background:none;color:#666;border:none;font-size:13px;font-weight:400;cursor:pointer;transition:all .2s ease;white-space:nowrap;flex-shrink:0}.batch-mode-btn:hover:not(:disabled){color:#f39c12}.batch-mode-btn:disabled{opacity:.5;cursor:not-allowed}.loading-fallback{display:flex;align-items:center;justify-content:center;height:400px;color:#999;font-size:14px}.unified-action-box{display:flex;align-items:center;padding:4px;background:#fff;border:1px solid #e8e8e8;border-radius:8px;box-shadow:0 2px 4px #0000000d;transition:all .2s ease;height:36px;min-width:140px;flex-shrink:1;max-width:100%}.unified-action-box:hover{box-shadow:0 4px 8px #0000001a;border-color:#f39c12}.unified-action-box:focus-within{border-color:#f39c12;box-shadow:0 0 0 2px #f39c121a}.unified-action-box.is-generating{opacity:.9}.quantity-section{display:flex;align-items:center;position:relative;z-index:10}.quantity-label{display:none}.quantity-control{display:flex;align-items:center;background:#f5f5f5;border:1px solid #e8e8e8;border-radius:6px;transition:all .2s ease}.quantity-control:hover{border-color:#d9d9d9}.quantity-control.is-open{border-color:var(--color-primary, #0052d9);box-shadow:0 0 0 2px #0052d91a}.quantity-control.is-disabled{opacity:.5;cursor:not-allowed;background:#f0f0f0}.quantity-input{width:36px;padding:4px 0 4px 8px;border:none;background:transparent;font-size:14px;font-weight:600;color:#333;text-align:center;outline:none}.quantity-input:disabled{cursor:not-allowed}.quantity-toggle{padding:4px 6px 4px 2px;border:none;background:transparent;color:#999;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:color .2s ease}.quantity-toggle:hover:not(:disabled){color:#666}.quantity-toggle:disabled{cursor:not-allowed}.quantity-icon{transition:transform .2s ease}.quantity-icon.is-open{transform:rotate(180deg)}.quantity-dropdown{position:absolute;bottom:100%;left:0;margin-bottom:8px;width:140px;max-height:280px;overflow-y:auto;background:#fff;border:1px solid #e8e8e8;border-radius:8px;box-shadow:0 -8px 24px #0000001f;z-index:1000;animation:dropdownFadeInUp .15s ease}@keyframes dropdownFadeInUp{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.quantity-dropdown-header{padding:8px 12px;font-size:11px;font-weight:600;color:#999;text-transform:uppercase;letter-spacing:.5px;background:#fafafa;border-bottom:1px solid #f0f0f0}.quantity-option{width:100%;padding:8px 12px;border:none;background:transparent;text-align:left;font-size:13px;color:#666;cursor:pointer;display:flex;align-items:center;justify-content:space-between;transition:all .15s ease}.quantity-option:hover{background:#f5f5f5}.quantity-option.is-selected{color:var(--color-primary, #0052d9);font-weight:500;background:#0052d90d}.quantity-option.is-selected svg{color:var(--color-primary, #0052d9)}.action-divider{width:1px;height:28px;background:#e8e8e8;margin:0 4px}.generate-button{display:flex;align-items:center;justify-content:center;gap:8px;padding:8px 16px;height:28px;min-width:80px;flex:1;overflow:hidden;text-overflow:ellipsis;background:linear-gradient(135deg,#fbd38d,#f6ad55);color:#fff;font-size:14px;font-weight:600;border:none;border-radius:6px;cursor:pointer;transition:all .2s ease;box-shadow:0 2px 4px #f39c1233;white-space:nowrap}.generate-button:hover:not(:disabled){background:linear-gradient(135deg,#e67e22,#d35400);transform:translateY(-1px);box-shadow:0 4px 8px #f39c124d}.generate-button:active:not(:disabled){transform:translateY(0)}.generate-button:disabled{background:linear-gradient(135deg,#fbd38d,#f6ad55);box-shadow:none;cursor:not-allowed;opacity:.8}.generate-button.loading{position:relative;color:transparent}.generate-button.loading:after{content:"";position:absolute;width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top:2px solid #fff;border-radius:50%;animation:spin 1s linear infinite}.unified-action-box.can-generate .generate-button{background:linear-gradient(135deg,#f39c12,#e67e22)}.unified-action-box.can-generate .generate-button:hover:not(:disabled){background:linear-gradient(135deg,#e67e22,#d35400)}.unified-action-box.can-generate .generate-button .action-button--reset-subtle{color:var(--color-text-placeholder, #999)!important;transition:all .2s ease!important}.unified-action-box.can-generate .generate-button .action-button--reset-subtle:hover{background:var(--color-bg-secondary, #f5f5f5)!important;color:#f39c12!important}.unified-action-box.can-generate .generate-button .action-button--reset-subtle .t-icon{font-size:18px}.action-button{padding:8px 16px;border-radius:6px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s;border:1px solid transparent;min-width:80px;height:36px;display:inline-flex;align-items:center;justify-content:center}.action-button.primary{background:#f39c12;color:#fff;border-color:#f39c12}.action-button.primary:hover:not(:disabled){background:#e67e22;border-color:#e67e22}.action-button.primary:active:not(:disabled){background:#d35400;border-color:#d35400}.action-button.primary.loading{position:relative;color:transparent}.action-button.primary.loading:after{content:"";position:absolute;width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top:2px solid #fff;border-radius:50%;animation:spin 1s linear infinite}.action-button.secondary{background:var(--color-bg-container, #fff);color:var(--color-text-primary, #333);border-color:var(--color-border, #d9d9d9)}.action-button.secondary:hover:not(:disabled){background:var(--color-bg-hover, #f5f5f5);border-color:var(--color-primary, #0052d9);color:var(--color-primary, #0052d9)}.action-button.secondary:active:not(:disabled){background:var(--color-bg-active, #e6f7ff)}.action-button.tertiary{background:transparent;color:var(--color-text-secondary, #666);border-color:var(--color-border, #d9d9d9)}.action-button.tertiary:hover:not(:disabled){background:var(--color-error-light, #fff2f0);border-color:var(--color-error, #ff4d4f);color:var(--color-error, #ff4d4f)}.action-button.tertiary:active:not(:disabled){background:var(--color-error-light, #fff2f0)}.action-button:disabled{background:var(--color-bg-disabled, #f5f5f5);color:var(--color-text-disabled, #999);border-color:var(--color-border-disabled, #d9d9d9);cursor:not-allowed}.image-params-row{display:flex;align-items:flex-start;gap:16px}.image-params-row .image-upload-container{flex:1}.image-params-row .aspect-ratio-selector--compact{flex-shrink:0;padding-top:4px}.ai-image-generation-form{display:flex;flex-direction:column;gap:12px;flex:1 1 auto}.ai-image-generation-form .form-field--prompt{flex:1 1 auto;display:flex;flex-direction:column;min-height:150px}.ai-image-generation-form .form-field--prompt .form-textarea{flex:1 1 auto;min-height:100px!important;height:auto}.ai-image-generation-form .form-description{font-size:14px;color:var(--color-text-secondary, #666);line-height:1.5;margin-bottom:8px}.ai-image-generation-form .form-field{display:flex;flex-direction:column;gap:8px}.ai-image-generation-form .form-field .form-label-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.ai-image-generation-form .form-field .form-label-right{flex-shrink:0}.ai-image-generation-form .form-field .form-label{font-size:14px;font-weight:500;color:var(--color-text-primary, #333);margin:0}.ai-image-generation-form .form-field .form-label-with-icon{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}.ai-image-generation-form .form-field .textarea-with-preset{position:relative;display:flex;gap:8px;align-items:flex-start}.ai-image-generation-form .form-field .preset-tooltip-container{position:relative;display:inline-block;flex-shrink:0}.ai-image-generation-form .form-field .preset-icon-button{background:none;border:1px solid var(--color-border, #d9d9d9);border-radius:6px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease;color:var(--color-text-placeholder, #999);height:32px;width:32px}.ai-image-generation-form .form-field .preset-icon-button:hover{background:var(--color-bg-secondary, #f5f5f5);border-color:var(--color-primary, #0052d9);color:#f39c12}.ai-image-generation-form .form-field .preset-icon-button .t-icon{font-size:18px}.ai-image-generation-form .form-field .preset-icon-button:active{background:var(--color-bg-tertiary, #e8e8e8)}.ai-image-generation-form .form-field .preset-icon-button:disabled{opacity:.6;cursor:not-allowed}.ai-image-generation-form .form-field .form-textarea{flex:1;min-height:120px;padding:12px;border:1px solid var(--color-border, #d9d9d9);border-radius:6px;font-size:14px;line-height:1.5;resize:vertical;transition:border-color .2s;font-family:inherit;background:var(--color-bg-container, #fff);color:var(--color-text-primary, #333)}.ai-image-generation-form .form-field .form-textarea:focus{outline:none;border-color:var(--color-primary, #0052d9);box-shadow:0 0 0 2px #0052d91a}.ai-image-generation-form .form-field .form-textarea:disabled{background-color:var(--color-bg-disabled, #f5f5f5);color:var(--color-text-disabled, #999);cursor:not-allowed}.ai-image-generation-form .form-field .form-textarea::-moz-placeholder{color:var(--color-text-placeholder, #999)}.ai-image-generation-form .form-field .form-textarea::placeholder{color:var(--color-text-placeholder, #999)}.ai-image-generation-form .form-field .preset-tooltip{border:1px solid var(--color-border, #d9d9d9);border-radius:6px;background:var(--color-bg-container, #fff);box-shadow:0 4px 12px #00000026;max-height:280px;overflow-y:auto;min-width:280px;max-width:320px;scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.15) transparent}.ai-image-generation-form .form-field .preset-tooltip::-webkit-scrollbar{width:4px}.ai-image-generation-form .form-field .preset-tooltip::-webkit-scrollbar-track{background:transparent}.ai-image-generation-form .form-field .preset-tooltip::-webkit-scrollbar-thumb{background:#00000026;border-radius:2px}.ai-image-generation-form .form-field .preset-header{padding:8px 12px;font-size:12px;font-weight:500;color:var(--color-text-secondary, #666);border-bottom:1px solid var(--color-border, #d9d9d9);background:var(--color-bg-secondary, #f5f5f5)}.ai-image-generation-form .form-field .preset-list{display:flex;flex-direction:column}.ai-image-generation-form .form-field .preset-item{padding:8px 12px;border:none;background:none;text-align:left;font-size:13px;color:var(--color-text-primary, #333);cursor:pointer;border-bottom:1px solid var(--color-border-light, #f0f0f0);transition:background-color .2s ease}.ai-image-generation-form .form-field .preset-item:hover{background:var(--color-bg-secondary, #f5f5f5)}.ai-image-generation-form .form-field .preset-item:last-child{border-bottom:none}.ai-image-generation-form .form-field .preset-item:disabled{opacity:.6;cursor:not-allowed}.ai-image-generation-form .form-field .size-inputs{display:flex;flex-direction:row;gap:16px;align-items:center}.ai-image-generation-form .form-field .size-input-row{display:flex;align-items:center;gap:8px;position:relative;flex:1}.ai-image-generation-form .form-field .size-label{font-size:14px;color:var(--color-text-primary, #333);font-weight:500;min-width:60px;flex-shrink:0}.ai-image-generation-form .form-field .size-input{padding:8px 12px;border:1px solid var(--color-border, #d9d9d9);border-radius:6px;font-size:14px;background:var(--color-bg-container, #fff);color:var(--color-text-primary, #333);flex:1}.ai-image-generation-form .form-field .size-input:focus{outline:none;border-color:var(--color-primary, #0052d9);box-shadow:0 0 0 2px #0052d91a}.ai-image-generation-form .form-field .size-input:disabled{background-color:var(--color-bg-disabled, #f5f5f5);color:var(--color-text-disabled, #999);cursor:not-allowed}.ai-image-generation-form .form-field .size-shortcuts-tooltip{position:relative;margin-left:8px}.ai-image-generation-form .form-field .tooltip-trigger{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:4px;background:var(--color-bg-secondary, #f5f5f5);cursor:pointer;font-size:14px;transition:all .2s ease}.ai-image-generation-form .form-field .tooltip-trigger:hover{background:var(--color-primary-light, #e6f7ff);color:var(--color-primary, #0052d9)}.ai-image-generation-form .form-field .tooltip-content{position:absolute;bottom:100%;right:0;margin-bottom:8px;padding:8px;background:var(--color-bg-container, #fff);border:1px solid var(--color-border, #d9d9d9);border-radius:6px;box-shadow:0 4px 12px #00000026;min-width:200px;z-index:1000;opacity:0;visibility:hidden;transform:translateY(4px);transition:all .2s ease}.ai-image-generation-form .form-field .size-shortcuts-tooltip:hover .tooltip-content{opacity:1;visibility:visible;transform:translateY(0)}.ai-image-generation-form .form-field .tooltip-header{font-size:12px;font-weight:500;color:var(--color-text-secondary, #666);margin-bottom:8px;padding-bottom:4px;border-bottom:1px solid var(--color-border-light, #f0f0f0)}.ai-image-generation-form .form-field .shortcuts-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:4px}.ai-image-generation-form .form-field .shortcut-button{padding:6px 8px;border:1px solid var(--color-border, #d9d9d9);border-radius:4px;background:var(--color-bg-container, #fff);color:var(--color-text-primary, #333);font-size:12px;cursor:pointer;transition:all .2s ease;text-align:center}.ai-image-generation-form .form-field .shortcut-button:hover:not(:disabled){background:var(--color-primary-light, #e6f7ff);border-color:var(--color-primary, #0052d9);color:var(--color-primary, #0052d9)}.ai-image-generation-form .form-field .shortcut-button:disabled{opacity:.6;cursor:not-allowed}.ai-image-generation-form .form-field .form-select{width:100%;padding:8px 12px;border:1px solid var(--color-border, #d9d9d9);border-radius:6px;font-size:14px;background:var(--color-bg-container, #fff);color:var(--color-text-primary, #333);cursor:pointer;transition:border-color .2s}.ai-image-generation-form .form-field .form-select:focus{outline:none;border-color:var(--color-primary, #0052d9);box-shadow:0 0 0 2px #0052d91a}.ai-image-generation-form .form-field .form-select:disabled{background-color:var(--color-bg-disabled, #f5f5f5);color:var(--color-text-disabled, #999);cursor:not-allowed}.ai-image-generation-form .form-field .api-mode-selector{display:flex;flex-direction:column;gap:8px}.ai-image-generation-form .form-field .api-mode-option{display:flex;align-items:center;gap:8px;padding:8px 12px;border:1px solid var(--color-border, #d9d9d9);border-radius:6px;cursor:pointer;transition:all .2s ease}.ai-image-generation-form .form-field .api-mode-option:hover{background:var(--color-bg-hover, #f5f5f5);border-color:var(--color-primary, #0052d9)}.ai-image-generation-form .form-field .api-mode-option input[type=radio]{margin:0;accent-color:var(--color-primary, #0052d9)}.ai-image-generation-form .form-field .api-mode-option .api-mode-label{font-weight:500;color:var(--color-text-primary, #333)}.ai-image-generation-form .form-field .api-mode-option .api-mode-desc{font-size:12px;color:var(--color-text-secondary, #666);font-family:monospace}.ai-image-generation-form .form-field .api-mode-option:has(input:checked){background:var(--color-primary-light, #e6f7ff);border-color:var(--color-primary, #0052d9)}.ai-image-generation-form .form-field .api-mode-option:has(input:disabled){opacity:.6;cursor:not-allowed}.ai-image-generation-form .form-field .image-upload-container{display:flex;flex-direction:column;gap:16px}.ai-image-generation-form .form-field .unified-image-area{min-height:120px}.ai-image-generation-form .form-field .upload-area{position:relative}.ai-image-generation-form .form-field .upload-source-buttons{display:flex;gap:12px;margin-bottom:0}.ai-image-generation-form .form-field .upload-source-buttons button{flex:1;display:flex;align-items:center;justify-content:center;gap:8px;padding:12px 16px;min-height:100px;border:2px dashed var(--color-border, #d9d9d9);border-radius:8px;background:var(--color-bg-secondary, #f5f5f5);color:var(--color-text-primary, #333);font-size:14px;font-weight:500;cursor:pointer;transition:all .2s ease;flex-direction:column}.ai-image-generation-form .form-field .upload-source-buttons button:hover:not(:disabled){border-color:var(--color-primary, #0052d9);background:var(--color-primary-light, #e6f7ff);color:var(--color-primary, #0052d9)}.ai-image-generation-form .form-field .upload-source-buttons button:hover:not(:disabled) svg{color:var(--color-primary, #0052d9)}.ai-image-generation-form .form-field .upload-source-buttons button:disabled{opacity:.6;cursor:not-allowed}.ai-image-generation-form .form-field .upload-source-buttons button svg{flex-shrink:0;transition:color .2s ease}.ai-image-generation-form .form-field .upload-input{position:absolute;width:0;height:0;opacity:0;overflow:hidden}.ai-image-generation-form .form-field .upload-label{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:24px;border:2px dashed var(--color-border, #d9d9d9);border-radius:8px;background:var(--color-bg-secondary, #f5f5f5);cursor:pointer;transition:all .2s ease}.ai-image-generation-form .form-field .upload-label:hover{border-color:var(--color-primary, #0052d9);background:var(--color-primary-light, #e6f7ff)}.ai-image-generation-form .form-field .upload-label .upload-icon{font-size:24px;margin-bottom:8px}.ai-image-generation-form .form-field .upload-label .upload-text{font-size:14px;font-weight:500;color:var(--color-text-primary, #333);margin-bottom:4px}.ai-image-generation-form .form-field .upload-label .upload-hint{font-size:12px;color:var(--color-text-secondary, #666)}.ai-image-generation-form .form-field .uploaded-images{border:1px solid var(--color-border, #d9d9d9);border-radius:6px;padding:12px}.ai-image-generation-form .form-field .uploaded-images-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid var(--color-border-light, #f0f0f0)}.ai-image-generation-form .form-field .uploaded-images-header .images-count{font-size:13px;color:var(--color-text-secondary, #666);font-weight:500}.ai-image-generation-form .form-field .uploaded-images-header .clear-images-btn{padding:4px 8px;border:1px solid var(--color-border, #d9d9d9);border-radius:4px;background:var(--color-bg-container, #fff);color:var(--color-text-secondary, #666);font-size:12px;cursor:pointer;transition:all .2s ease}.ai-image-generation-form .form-field .uploaded-images-header .clear-images-btn:hover:not(:disabled){background:var(--color-error-light, #fff2f0);border-color:var(--color-error, #ff4d4f);color:var(--color-error, #ff4d4f)}.ai-image-generation-form .form-field .uploaded-images-header .clear-images-btn:disabled{opacity:.6;cursor:not-allowed}.ai-image-generation-form .form-field .form-label-with-icon .clear-images-btn{padding:4px 8px;border:1px solid var(--color-border, #d9d9d9);border-radius:4px;background:var(--color-bg-container, #fff);color:var(--color-text-secondary, #666);font-size:12px;cursor:pointer;transition:all .2s ease}.ai-image-generation-form .form-field .form-label-with-icon .clear-images-btn:hover:not(:disabled){background:var(--color-error-light, #fff2f0);border-color:var(--color-error, #ff4d4f);color:var(--color-error, #ff4d4f)}.ai-image-generation-form .form-field .form-label-with-icon .clear-images-btn:disabled{opacity:.6;cursor:not-allowed}.ai-image-generation-form .form-field .images-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:8px}.ai-image-generation-form .form-field .add-more-item{display:flex;align-items:center;justify-content:center;min-height:100px;border:2px dashed var(--color-border, #d9d9d9);border-radius:6px;background:var(--color-bg-secondary, #f5f5f5);cursor:pointer;transition:all .2s ease;position:relative}.ai-image-generation-form .form-field .add-more-item:hover{border-color:var(--color-primary, #0052d9);background:var(--color-primary-light, #e6f7ff)}.ai-image-generation-form .form-field .add-more-item .add-more-buttons{display:flex;flex-direction:column;gap:8px;width:100%;padding:16px}.ai-image-generation-form .form-field .add-more-item .add-more-buttons .add-more-btn{flex:1;height:36px;font-size:13px;font-weight:500;border-width:1.5px}.ai-image-generation-form .form-field .add-more-item .add-more-buttons .add-more-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 2px 8px #0052d926}.ai-image-generation-form .form-field .add-more-item .add-more-buttons .add-more-btn:active:not(:disabled){transform:translateY(0)}.ai-image-generation-form .form-field .add-more-item:has(.add-more-buttons){cursor:default}.ai-image-generation-form .form-field .add-more-item:has(.add-more-buttons):hover{border-color:var(--color-border, #d9d9d9);background:var(--color-bg-secondary, #f5f5f5)}.ai-image-generation-form .form-field .add-more-item .add-more-label{display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:pointer;width:100%;height:100%;padding:8px}.ai-image-generation-form .form-field .add-more-item .add-more-label .add-more-icon{font-size:24px;font-weight:700;color:var(--color-text-secondary, #666);margin-bottom:4px}.ai-image-generation-form .form-field .add-more-item .add-more-label .add-more-text{font-size:12px;color:var(--color-text-secondary, #666);font-weight:500}.ai-image-generation-form .form-field .add-more-item:hover .add-more-label .add-more-icon,.ai-image-generation-form .form-field .add-more-item:hover .add-more-label .add-more-text{color:var(--color-primary, #0052d9)}.ai-image-generation-form .form-field .uploaded-image-item{position:relative;border-radius:6px;overflow:visible;border:1px solid var(--color-border, #d9d9d9)}.ai-image-generation-form .form-field .uploaded-image-item .uploaded-image-preview-container{position:relative;display:block;border-radius:6px;overflow:hidden;height:80px}.ai-image-generation-form .form-field .uploaded-image-item .uploaded-image-preview-container .uploaded-image-preview{width:100%;max-height:80px;-o-object-fit:contain;object-fit:contain;display:block;background:var(--color-bg-layout, #f5f5f5)}.ai-image-generation-form .form-field .uploaded-image-item .uploaded-image-preview-container .image-hover-tooltip{position:fixed;bottom:auto;top:auto;left:auto;right:auto;transform:translate(-50%,-100%);background:var(--color-bg-container, #fff);border:2px solid var(--color-primary, #1890ff);border-radius:8px;padding:8px;box-shadow:0 8px 24px #0003;opacity:0;visibility:hidden;transition:all .2s ease;z-index:9999;pointer-events:none;margin-bottom:8px;max-width:300px;max-height:300px}.ai-image-generation-form .form-field .uploaded-image-item .uploaded-image-preview-container .image-hover-tooltip img{max-width:100%;max-height:100%;-o-object-fit:contain;object-fit:contain;display:block}.ai-image-generation-form .form-field .uploaded-image-item .uploaded-image-preview-container .image-hover-tooltip:after{content:"";position:absolute;top:100%;left:50%;transform:translate(-50%);border:6px solid transparent;border-top-color:var(--color-primary, #1890ff)}.ai-image-generation-form .form-field .uploaded-image-item .uploaded-image-preview-container:hover .image-hover-tooltip{opacity:1;visibility:visible}.ai-image-generation-form .form-field .uploaded-image-item .remove-image-btn{position:absolute;top:4px;right:4px;width:20px;height:20px;border:none;border-radius:50%;background:#0009;color:#fff;font-size:14px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease}.ai-image-generation-form .form-field .uploaded-image-item .remove-image-btn:hover:not(:disabled){background:var(--color-error, #ff4d4f)}.ai-image-generation-form .form-field .uploaded-image-item .remove-image-btn:disabled{opacity:.6;cursor:not-allowed}.ai-image-generation-form .form-field .uploaded-image-item .image-info{padding:6px 8px;background:var(--color-bg-container, #fff);display:flex;flex-direction:column;gap:2px}.ai-image-generation-form .form-field .uploaded-image-item .image-info .image-name{font-size:11px;color:var(--color-text-primary, #333);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ai-image-generation-form .form-field .uploaded-image-item .image-info .image-size{font-size:10px;color:var(--color-text-secondary, #666)}.ai-image-generation-form .form-error{padding:8px 12px;background-color:var(--color-error-bg, #fff2f0);border:1px solid var(--color-error-border, #ffccc7);border-radius:6px;color:var(--color-error, #ff4d4f);font-size:14px;line-height:1.5}.ai-image-generation-form .form-success{padding:8px 12px;background-color:var(--color-success-bg, #f6ffed);border:1px solid var(--color-success-border, #b7eb8f);border-radius:6px;color:var(--color-success, #52c41a);font-size:14px;line-height:1.5}.ai-image-generation-form .form-hint{font-size:12px;color:var(--color-text-secondary, #666);line-height:1.4;margin-top:4px}.ai-image-generation-form .form-link{color:var(--color-primary, #0052d9);text-decoration:none}.ai-image-generation-form .form-link:hover{text-decoration:underline}.image-preview-container{display:flex;align-items:center;justify-content:center;min-height:350px;height:calc(100% - 100px);max-height:510px;padding:16px;border:1px dashed var(--color-border, #d9d9d9);border-radius:8px;background:var(--color-bg-container, #fff)}.image-preview-container .preview-loading{display:flex;flex-direction:column;align-items:center;gap:16px;color:var(--color-text-secondary, #666)}.image-preview-container .preview-loading .loading-spinner{width:32px;height:32px;border:3px solid var(--color-border-light, #f0f0f0);border-top:3px solid var(--color-primary, #0052d9);border-radius:50%;animation:spin 1s linear infinite}.image-preview-container .preview-loading .loading-text{font-size:14px;font-weight:500}.image-preview-container .preview-image-wrapper{max-width:100%;max-height:400px;display:flex;align-items:center;justify-content:center}.image-preview-container .preview-image-wrapper .preview-image{max-width:100%;max-height:400px;border-radius:8px;box-shadow:0 2px 8px #0000001a;-o-object-fit:contain;object-fit:contain}.image-preview-container .preview-placeholder{display:flex;flex-direction:column;align-items:center;gap:12px;color:var(--color-text-secondary, #666)}.image-preview-container .preview-placeholder .placeholder-icon{font-size:48px;opacity:.5}.image-preview-container .preview-placeholder .placeholder-text{font-size:14px;text-align:center}.keyboard-shortcut{margin-left:auto;font-size:12px;color:var(--color-text-secondary, #666);padding:4px 8px;background:var(--color-bg-secondary, #f5f5f5);border-radius:4px;font-family:monospace}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ai-image-generation-container,.ai-image-generation-container *{color-scheme:light}.ai-image-generation-container .section-title{color:#333!important;border-color:#f0f0f0!important}.ai-image-generation-container .form-description{color:#666!important}.ai-image-generation-container .form-label,.ai-image-generation-container .size-label{color:#333!important}.ai-image-generation-container .form-textarea,.ai-image-generation-container .form-select,.ai-image-generation-container .size-input{background:#fff!important;color:#333!important;border-color:#d9d9d9!important}.ai-image-generation-container .form-textarea::-moz-placeholder,.ai-image-generation-container .form-select::-moz-placeholder,.ai-image-generation-container .size-input::-moz-placeholder{color:#999!important}.ai-image-generation-container .form-textarea::placeholder,.ai-image-generation-container .form-select::placeholder,.ai-image-generation-container .size-input::placeholder{color:#999!important}.ai-image-generation-container .form-textarea:disabled,.ai-image-generation-container .form-select:disabled,.ai-image-generation-container .size-input:disabled{background-color:#f5f5f5!important;color:#999!important}.ai-image-generation-container .api-mode-option{background:#fff!important;border-color:#d9d9d9!important}.ai-image-generation-container .api-mode-option:hover{background:#f5f5f5!important;border-color:#0052d9!important}.ai-image-generation-container .api-mode-option:has(input:checked){background:#e6f7ff!important;border-color:#0052d9!important}.ai-image-generation-container .api-mode-option .api-mode-label{color:#333!important}.ai-image-generation-container .api-mode-option .api-mode-desc{color:#666!important}.ai-image-generation-container .upload-label{background:#f5f5f5!important;border-color:#d9d9d9!important}.ai-image-generation-container .upload-label:hover{background:#e6f7ff!important;border-color:#0052d9!important}.ai-image-generation-container .upload-label .upload-text{color:#333!important}.ai-image-generation-container .upload-label .upload-hint{color:#666!important}.ai-image-generation-container .uploaded-images{background:#fff!important;border-color:#d9d9d9!important}.ai-image-generation-container .uploaded-images .uploaded-images-header{border-color:#f0f0f0!important}.ai-image-generation-container .uploaded-images .uploaded-images-header .images-count{color:#666!important}.ai-image-generation-container .uploaded-images .uploaded-images-header .clear-images-btn{background:#fff!important;border-color:#d9d9d9!important;color:#666!important}.ai-image-generation-container .uploaded-images .uploaded-images-header .clear-images-btn:hover:not(:disabled){background:#fff2f0!important;border-color:#ff4d4f!important;color:#ff4d4f!important}.ai-image-generation-container .uploaded-images .form-label-with-icon .clear-images-btn{background:#fff!important;border-color:#d9d9d9!important;color:#666!important}.ai-image-generation-container .uploaded-images .form-label-with-icon .clear-images-btn:hover:not(:disabled){background:#fff2f0!important;border-color:#ff4d4f!important;color:#ff4d4f!important}.ai-image-generation-container .uploaded-images .uploaded-image-item{border-color:#d9d9d9!important}.ai-image-generation-container .uploaded-images .uploaded-image-item .image-info{background:#fff!important}.ai-image-generation-container .uploaded-images .uploaded-image-item .image-info .image-name{color:#333!important}.ai-image-generation-container .uploaded-images .uploaded-image-item .image-info .image-size{color:#666!important}.ai-image-generation-container .uploaded-images .add-more-item{background:#f5f5f5!important;border-color:#d9d9d9!important}.ai-image-generation-container .uploaded-images .add-more-item:hover{background:#e6f7ff!important;border-color:#0052d9!important}.ai-image-generation-container .uploaded-images .add-more-item .add-more-label .add-more-icon,.ai-image-generation-container .uploaded-images .add-more-item .add-more-label .add-more-text{color:#666!important}.ai-image-generation-container .uploaded-images .add-more-item:hover .add-more-label .add-more-icon,.ai-image-generation-container .uploaded-images .add-more-item:hover .add-more-label .add-more-text{color:#0052d9!important}.ai-image-generation-container .tooltip-trigger{background:#f5f5f5!important;color:#333!important}.ai-image-generation-container .tooltip-trigger:hover{background:#e6f7ff!important;color:#0052d9!important}.ai-image-generation-container .tooltip-content{background:#fff!important;border-color:#d9d9d9!important;color:#333!important}.ai-image-generation-container .tooltip-header{color:#666!important;border-color:#f0f0f0!important}.ai-image-generation-container .shortcut-button{background:#fff!important;color:#333!important;border-color:#d9d9d9!important}.ai-image-generation-container .shortcut-button:hover:not(:disabled){background:#e6f7ff!important;border-color:#0052d9!important;color:#0052d9!important}.ai-image-generation-container .preview-loading,.ai-image-generation-container .preview-placeholder{color:#666!important}.ai-image-generation-container .action-button.secondary{background:#fff!important;color:#333!important;border-color:#d9d9d9!important}.ai-image-generation-container .action-button.secondary:hover:not(:disabled){background:#f5f5f5!important;border-color:#0052d9!important;color:#0052d9!important}.ai-image-generation-container .keyboard-shortcut{background:#f5f5f5!important;color:#666!important}.ai-image-generation-container .dialog-close-button{background:#fff!important;color:#666!important}.ai-image-generation-container .dialog-close-button:hover{background:#fff2f0!important;color:#ff4d4f!important}.history-icon-container{position:absolute;bottom:8px;right:8px;z-index:10}.history-icon-button{width:32px;height:32px;border:none;background:#ffffffe6;border-radius:16px;cursor:pointer;font-size:16px;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px #0000001a;transition:all .2s ease}.history-icon-button:hover{background:#fff;transform:scale(1.05);box-shadow:0 4px 12px #00000026}.history-icon-button:active{transform:scale(.95)}.history-popover{position:absolute;bottom:40px;right:0;width:320px;max-height:400px;background:var(--color-bg-container, #fff);border:1px solid var(--color-border, #d9d9d9);border-radius:8px;box-shadow:0 8px 32px #00000026;z-index:1000;overflow:hidden}.history-popover-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--color-border, #d9d9d9);background:var(--color-bg-secondary, #f5f5f5)}.history-title{font-size:14px;font-weight:500;color:var(--color-text-primary, #333)}.history-close-button{width:20px;height:20px;border:none;background:none;cursor:pointer;font-size:16px;color:var(--color-text-secondary, #666);display:flex;align-items:center;justify-content:center;border-radius:4px;transition:all .2s ease}.history-close-button:hover{background:var(--color-bg-tertiary, #e8e8e8);color:var(--color-text-primary, #333)}.history-list{max-height:300px;overflow-y:auto}.history-item{display:flex;align-items:flex-start;padding:12px 16px;cursor:pointer;border-bottom:1px solid var(--color-border-light, #f0f0f0);transition:background-color .2s ease}.history-item:hover{background:var(--color-bg-secondary, #f5f5f5)}.history-item:last-child{border-bottom:none}.history-item-image{width:48px;height:48px;-o-object-fit:cover;object-fit:cover;border-radius:4px;margin-right:12px;flex-shrink:0}.history-item-info{flex:1;min-width:0}.history-item-prompt{font-size:13px;color:var(--color-text-primary, #333);margin-bottom:4px;line-height:1.4;word-break:break-all}.history-item-time{font-size:11px;color:var(--color-text-secondary, #666)}.history-more-info{padding:8px 16px;text-align:center;font-size:12px;color:var(--color-text-secondary, #666);background:var(--color-bg-secondary, #f5f5f5);border-top:1px solid var(--color-border-light, #f0f0f0)}@media(max-width:768px){.ai-image-generation-container{height:auto;min-height:100%;overflow-y:auto;display:flex;flex-direction:column}.main-content{flex-direction:column;gap:12px;min-height:auto;height:auto;flex:1;overflow-y:auto}.ai-image-generation-section{max-height:none;flex:none;order:1}.preview-section{max-height:none}.task-sidebar{flex:none;height:auto;min-height:100px;max-height:180px;overflow-y:auto;padding:8px;order:2;margin-top:8px}.winbox.max .task-sidebar,.winbox.full .task-sidebar{max-height:40vh}.section-actions{flex-wrap:wrap;gap:8px;padding:8px 0;position:relative;z-index:10;background:#fff}.section-actions.unified-action-bar{gap:8px}.unified-action-box{min-width:160px}.generate-button{padding:8px 20px;min-width:90px}.action-button{padding:8px 12px;min-width:60px}}@media(max-width:480px){.task-sidebar{min-height:80px;max-height:150px;padding:6px}.section-actions{justify-content:center;gap:6px;padding:6px 0;flex-wrap:wrap}.section-actions.unified-action-bar{gap:6px}.unified-action-box{min-width:140px;padding:3px 3px 3px 6px;height:32px}.quantity-section{padding:0 4px}.quantity-label{font-size:11px;margin-right:4px}.quantity-input{width:28px;font-size:13px;padding:3px 0 3px 4px}.generate-button{padding:6px 14px;min-width:70px;font-size:13px;height:26px}.action-button{padding:6px 10px;min-width:50px;font-size:13px;height:32px}.action-button.secondary{padding:6px 8px}.action-divider{height:20px;margin:0 2px}}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{r as l,I as Me,_ as Oe,aW as Q,aX as X,F as e,aY as de,aZ as ke,a_ as ze,ak as ie,a$ as $e,b0 as Te,o as W,af as $,b1 as Le,b2 as ce,B as Re,ae as Fe,M as Ie,V as Ue,n as ue,a6 as Ve}from"./index-CvrZFlag.js";import{d as De,C as Ae,l as Ge,u as Be,a as We,g as He,b as Ke,R as qe,P as Ze,E as Je,A as Qe,c as Xe,D as Ye,s as es}from"./DialogTaskList-BSSAOh5P.js";import{S as he}from"./index-C6OIGmaF.js";import"./pick-CIdLSF0Z.js";import"./hasIn-__wdhirj.js";function pe(n,a){var o=Object.keys(n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(n);a&&(i=i.filter(function(c){return Object.getOwnPropertyDescriptor(n,c).enumerable})),o.push.apply(o,i)}return o}function me(n){for(var a=1;a<arguments.length;a++){var o=arguments[a]!=null?arguments[a]:{};a%2?pe(Object(o),!0).forEach(function(i){Oe(n,i,o[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(o)):pe(Object(o)).forEach(function(i){Object.defineProperty(n,i,Object.getOwnPropertyDescriptor(o,i))})}return n}var ss={tag:"svg",attrs:{fill:"none",viewBox:"0 0 24 24",width:"1em",height:"1em"},children:[{tag:"path",attrs:{fill:"currentColor",d:"M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21ZM23 12C23 18.0751 18.0751 23 12 23C5.92487 23 0.999999 18.0751 1 12C1 5.92487 5.92487 0.999999 12 1C18.0751 1 23 5.92487 23 12ZM15 16.4142L11 12.4142L11 5.5H13L13 11.5858L16.4142 15L15 16.4142Z"}}]},Y=l.forwardRef(function(n,a){return l.createElement(Me,me(me({},n),{},{id:"time",ref:a,icon:ss}))});Y.displayName="TimeIcon";const ts=({model:n,duration:a,size:o,onDurationChange:i,onSizeChange:c,disabled:r=!1})=>{const f=X(n);l.useEffect(()=>{const p=Q(n);f.durationOptions.find(y=>y.value===a)||i(p.duration),f.sizeOptions.find(y=>y.value===o)||c(p.size)},[n]);const x=f.durationOptions.map(p=>({label:p.label,value:p.value})),w=f.sizeOptions.map(p=>({label:`${p.label} (${p.value})`,value:p.value}));return e.jsxs("div",{className:"video-model-options",children:[e.jsxs("div",{className:"video-model-options__row",children:[e.jsx("label",{className:"video-model-options__label",children:"时长"}),e.jsx("div",{className:"video-model-options__control",children:f.durationOptions.length===1?e.jsx("span",{className:"video-model-options__fixed-value",children:f.durationOptions[0].label}):e.jsx(de.Group,{value:a,onChange:p=>i(p),disabled:r,variant:"default-filled",size:"small",children:x.map(p=>e.jsx(de.Button,{value:p.value,children:p.label},p.value))})})]}),e.jsxs("div",{className:"video-model-options__row",children:[e.jsx("label",{className:"video-model-options__label",children:"尺寸"}),e.jsx("div",{className:"video-model-options__control",children:e.jsx(he,{value:o,onChange:p=>c(p),disabled:r,size:"small",options:w,style:{width:"200px"}})})]})]})};function be(){return`scene-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}function fe(n,a){return{id:be(),order:n,duration:a,prompt:""}}function os(n,a,o=1){if(n.length===0)return{valid:!1,error:"至少需要一个场景"};for(const c of n){if(c.duration<o)return{valid:!1,error:`场景 ${c.order} 时长不能少于 ${o} 秒`};if(c.duration>a)return{valid:!1,error:`场景 ${c.order} 时长不能超过 ${a} 秒`}}const i=n.find(c=>!c.prompt.trim());return i?{valid:!1,error:`场景 ${i.order} 需要填写提示词`}:{valid:!0}}function as(n){return n.sort((a,o)=>a.order-o.order).map((a,o)=>`Shot ${o+1}:
|
|
2
|
+
duration: ${a.duration}sec
|
|
3
|
+
Scene: ${a.prompt.trim()}`).join(`
|
|
4
|
+
|
|
5
|
+
`)}function rs(n){const a=/Shot\s+(\d+):\s*\n\s*duration:\s*([\d.]+)\s*sec\s*\n\s*Scene:\s*([^\n]+(?:\n(?!Shot\s+\d+:)[^\n]*)*)/gi,o=[];let i;for(;(i=a.exec(n))!==null;){const c=parseInt(i[1],10),r=parseFloat(i[2]),f=i[3].trim();o.push({id:be(),order:c,duration:r,prompt:f})}return o.length===0?null:o.sort((c,r)=>c.order-r.order)}const ns=({value:n,onChange:a,placeholder:o,disabled:i=!1,autoFocus:c=!1,enableMention:r=!0})=>{const{mentionState:f,textareaRef:x,handleTextChange:w,handleKeyDown:p,handleCharacterSelect:P,closeMentionPopup:F}=De({enabled:r,onPromptChange:a,prompt:n}),y=l.useCallback(E=>{const D=E.target.value,I=E.target.selectionStart||0;w(D,I)},[w]);return l.useEffect(()=>{c&&x.current&&x.current.focus()},[c,x]),e.jsxs("div",{className:"scene-prompt-input",children:[e.jsx("textarea",{ref:x,className:"scene-prompt-input__textarea",value:n,onChange:y,onKeyDown:p,placeholder:o,disabled:i,rows:3}),r&&e.jsx(Ae,{visible:f.visible,query:f.query,position:f.position,showBelow:f.showBelow,selectedIndex:f.selectedIndex,onSelect:P,onClose:F})]})},ls=({enabled:n,onEnabledChange:a,totalDuration:o,maxScenes:i,minSceneDuration:c,scenes:r,onScenesChange:f,disabled:x=!1})=>{const[w,p]=l.useState(null),P=l.useRef(null);l.useEffect(()=>{n&&r.length>0&&!w&&p(r[0].id)},[n,r,w]);const F=l.useCallback(()=>{if(r.length>=i)return;const t=r.reduce((g,S)=>g+S.duration,0),m=o-t;let u=Math.max(c,m/2);u=parseFloat(u.toFixed(1)),u<c&&(u=c);const v=fe(r.length+1,u);f([...r,v]),p(v.id),setTimeout(()=>{var g;(g=P.current)==null||g.scrollIntoView({behavior:"smooth"})},100)},[r,i,o,c,f]),y=l.useCallback(t=>{var v;if(r.length<=1)return;const u=r.filter(g=>g.id!==t).map((g,S)=>({...g,order:S+1}));f(u),w===t&&p(((v=u[0])==null?void 0:v.id)||null)},[r,f,w]),E=l.useCallback(t=>{const m=r.filter(u=>u.id!==t).reduce((u,v)=>u+v.duration,0);return Math.max(c,o-m)},[r,o,c]),D=l.useCallback(t=>{const m=E(t),u=[],v=.1;for(let g=c;g<=m+.001;g+=v){const S=parseFloat(g.toFixed(1));S<=m&&u.push({label:`${S}`,value:S})}return u},[c,E]),I=l.useCallback((t,m)=>{const u=typeof m=="string"?parseFloat(m):m;if(isNaN(u))return;const v=E(t),g=r.map(S=>{if(S.id===t){const G=Math.max(c,Math.min(u,v)),O=parseFloat(G.toFixed(1));return{...S,duration:O}}return S});f(g)},[r,c,E,f]),H=l.useCallback((t,m)=>{const u=r.map(v=>v.id===t?{...v,prompt:m}:v);f(u)},[r,f]),K=l.useCallback(t=>{if(a(t),t&&r.length===0){const m=fe(1,o);f([m]),p(m.id)}},[r,o,a,f]),j=l.useCallback(t=>{p(t)},[]),A=r.length<i;return e.jsxs("div",{className:"storyboard-editor",children:[e.jsxs("div",{className:"storyboard-editor__header",children:[e.jsxs("div",{className:"storyboard-editor__toggle",children:[e.jsx(ke,{value:n,onChange:K,disabled:x,size:"small"}),e.jsxs("div",{className:"storyboard-editor__title",children:[e.jsx("span",{className:"storyboard-editor__title-text",children:"故事场景模式"}),e.jsx("span",{className:"storyboard-editor__title-desc",children:"定义多个场景及其时长"})]})]}),n&&e.jsx("span",{className:"storyboard-editor__new-badge",children:"NEW"})]}),n&&e.jsxs("div",{className:"storyboard-editor__content",children:[e.jsxs("div",{className:"storyboard-editor__section-header",children:[e.jsx("span",{className:"storyboard-editor__section-title",children:"场景列表"}),e.jsxs("span",{className:"storyboard-editor__section-hint",children:["共 ",r.length," 个场景,已用 ",r.reduce((t,m)=>t+m.duration,0).toFixed(1)," 秒 / 总时长 ",o," 秒"]})]}),e.jsxs("div",{className:"storyboard-editor__scenes",children:[r.map((t,m)=>{const u=w===t.id,v=m===r.length-1;return e.jsxs("div",{className:`storyboard-editor__scene-wrapper ${u?"is-selected":""}`,children:[e.jsx("div",{className:`storyboard-editor__timeline-line ${v?"is-last":""}`}),e.jsx("div",{className:`storyboard-editor__timeline-node ${u?"is-selected":""}`,children:u?m+1:""}),!u&&e.jsxs("div",{className:"storyboard-editor__scene storyboard-editor__scene--compact",onClick:()=>j(t.id),children:[e.jsx("span",{className:"storyboard-editor__scene-index",children:m+1}),e.jsx("div",{className:"storyboard-editor__scene-preview",children:e.jsx("p",{className:"storyboard-editor__scene-preview-text",children:t.prompt||"暂无场景描述..."})}),e.jsxs("div",{className:"storyboard-editor__scene-duration-badge",children:[e.jsx(Y,{size:"12px"}),e.jsxs("span",{children:[t.duration,"s"]})]}),e.jsx(ze,{className:"storyboard-editor__scene-arrow",size:"14px"})]}),u&&e.jsxs("div",{className:"storyboard-editor__scene storyboard-editor__scene--expanded",children:[e.jsxs("div",{className:"storyboard-editor__scene-header",children:[e.jsx("div",{className:"storyboard-editor__scene-info",children:e.jsxs("span",{className:"storyboard-editor__scene-label",children:[e.jsx("span",{className:"storyboard-editor__active-indicator"}),"场景 ",m+1]})}),e.jsxs("div",{className:"storyboard-editor__scene-controls",children:[e.jsx(Y,{className:"storyboard-editor__time-icon"}),e.jsx(he,{value:parseFloat(t.duration.toFixed(1)),onChange:g=>I(t.id,g),disabled:x,className:"storyboard-editor__duration-select",size:"small",options:D(t.id),filterable:!0,creatable:!0,popupProps:{overlayClassName:"storyboard-editor__duration-popup"}}),r.length>1&&e.jsx(ie,{theme:"default",variant:"text",size:"small",icon:e.jsx($e,{}),onClick:g=>{g.stopPropagation(),y(t.id)},disabled:x,className:"storyboard-editor__scene-delete"})]})]}),e.jsx("div",{className:"storyboard-editor__scene-prompt",children:e.jsx(ns,{value:t.prompt,onChange:g=>H(t.id,g),placeholder:`描述场景 ${m+1} 的内容,输入 @ 可引用角色`,disabled:x,autoFocus:!0,enableMention:!0})})]})]},t.id)}),e.jsx("div",{ref:P})]}),A&&e.jsx(ie,{theme:"default",variant:"dashed",size:"medium",icon:e.jsx(Te,{}),onClick:F,disabled:x,className:"storyboard-editor__add-btn",block:!0,children:"添加场景"})]})]})},ms=({initialPrompt:n="",initialImage:a,initialImages:o,initialDuration:i,initialModel:c,initialSize:r,initialResultUrl:f,selectedModel:x,onModelChange:w}={})=>{const[p,P]=l.useState(n),[F,y]=l.useState(null),[E,D]=l.useState(!0),[I,H]=l.useState(()=>Ge("video")),K=l.useRef(null),[j,A]=l.useState(()=>{const s=W.get();return c||s.videoModelName||"veo3"}),t=$.useMemo(()=>X(j),[j]),m=$.useMemo(()=>Q(j),[j]),[u,v]=l.useState((i==null?void 0:i.toString())||m.duration),[g,S]=l.useState(r||m.size),[G,O]=l.useState(()=>o&&o.length>0?o:a?[{slot:0,slotLabel:"参考图",url:a.url||"",name:a.name,file:a.file}]:[]),[ee,k]=l.useState(()=>{const s=t.imageUpload.maxCount,d=t.imageUpload.labels||[];let h=[];return o&&o.length>0?h=o:a&&(h=[{slot:0,slotLabel:d[0]||"参考图",url:a.url||"",name:a.name,file:a.file}]),h.slice(0,s).map((b,_)=>({...b,slot:_,slotLabel:d[_]||`参考图${_+1}`}))}),[U,T]=l.useState(!1),[B,L]=l.useState([]),q=$.useMemo(()=>Le(j),[j]),ve=ce(j),{videoHistory:se}=Be(),[ge,xe]=l.useState(0),{isGenerating:R}=We("video"),ye=l.useCallback(s=>{H(s)},[]),_e=l.useCallback(()=>{D(s=>!s)},[]),{language:C}=Re(),{createTask:je}=Fe();l.useEffect(()=>{const s=d=>{const h=d.videoModelName||"veo3";h!==j&&A(h)};return W.addListener(s),()=>W.removeListener(s)},[j]),l.useEffect(()=>{x&&x!==j&&A(x)},[x]);const[te,Z]=l.useState(!1),[oe,ae]=l.useState(!1);l.useEffect(()=>{if(oe){ae(!1);return}const s=t.imageUpload.maxCount,d=t.imageUpload.labels||[];if(v(m.duration),S(m.size),G.length>0){const h=G.slice(0,s).map((b,_)=>({...b,slot:_,slotLabel:d[_]||`参考图${_+1}`}));k(h)}else k([]);ce(j)||(T(!1),L([]))},[j,m,oe,G,t.imageUpload]);const re=$.useRef("");l.useEffect(()=>{if(te)return;const s=JSON.stringify({prompt:n,image:a==null?void 0:a.url,images:o==null?void 0:o.map(N=>N.url),duration:i,model:c,size:r,result:f});if(re.current===s)return;re.current=s,P(n);const d=t.imageUpload.maxCount,h=t.imageUpload.labels||[];let b=[];o&&o.length>0?b=o:a&&(b=[{slot:0,slotLabel:"参考图",url:a.url||"",name:a.name,file:a.file}]),O(b);const _=b.slice(0,d).map((N,M)=>({...N,slot:M,slotLabel:h[M]||`参考图${M+1}`}));k(_),i!==void 0&&v(i.toString()),r&&S(r),y(null)},[n,a,o,i,r,f,t.imageUpload,te]),l.useEffect(()=>(y(null),()=>{y(null)}),[]);const Se=()=>{P(""),O([]),k([]),y(null);const s=Q(j);v(s.duration),S(s.size),Z(!1),T(!1),L([]),window.dispatchEvent(new CustomEvent("ai-video-clear"))},ne=$.useCallback((s,d)=>s.map((h,b)=>({slot:b,slotLabel:d[b]||`参考图${b+1}`,url:h.url,name:h.name,file:h.file})),[]),Ce=$.useCallback(s=>s.map(d=>({url:d.url,name:d.name,file:d.file})),[]),Ne=$.useCallback(s=>{const d=t.imageUpload.labels||[],h=ne(s,d);k(h),O(h)},[t.imageUpload.labels,ne]),we=$.useMemo(()=>He("video",C,se),[se,C,ge]),Pe=s=>{es("video",s),xe(d=>d+1)},Ee=s=>{var d,h;if(Z(!0),ae(!0),s.params.model){A(s.params.model);const b=W.get();W.update({...b,videoModelName:s.params.model})}if((d=s.params.storyboard)!=null&&d.enabled&&((h=s.params.storyboard)!=null&&h.scenes))T(!0),L(s.params.storyboard.scenes),P("");else{const b=s.params.prompt||"",_=rs(b);_&&_.length>0?(T(!0),L(_),P("")):(T(!1),L([]),P(b))}if(s.params.seconds!==void 0){const b=typeof s.params.seconds=="string"?s.params.seconds:s.params.seconds.toString();v(b)}if(s.params.size&&S(s.params.size),s.params.uploadedImages&&s.params.uploadedImages.length>0){O(s.params.uploadedImages);const b=s.params.model||j,_=X(b),N=_.imageUpload.maxCount,M=_.imageUpload.labels||[],V=s.params.uploadedImages.slice(0,N).map((J,z)=>({...J,slot:z,slotLabel:M[z]||`参考图${z+1}`}));k(V)}else O([]),k([]);y(null)},le=async(s=1)=>{if(U){const d=os(B,parseFloat(u),q.minSceneDuration);if(!d.valid){y(d.error||"场景配置无效");return}}else if(!p.trim()){y(C==="zh"?"请输入视频描述":"Please enter video description");return}try{const d=[];for(const N of ee)if(N.file){const M=await new Promise((V,J)=>{const z=new FileReader;z.onload=()=>V(z.result),z.onerror=J,z.readAsDataURL(N.file)});d.push({...N,url:M,file:void 0})}else d.push({...N,file:void 0});const h=U?as(B):p.trim(),b=[],_=s>1?`video_batch_${Date.now()}`:void 0;for(let N=0;N<s;N++){const M={prompt:h,model:j,seconds:u,size:g,uploadedImages:d,...U&&{storyboard:{enabled:!0,scenes:B,totalDuration:parseFloat(u)}},..._&&{batchId:_,batchIndex:N+1,batchTotal:s},autoInsertToCanvas:!0},V=je(M,ue.VIDEO);V&&b.push(V.id)}b.length>0?(Ve.success(C==="zh"?s>1?`${b.length} 个视频任务已添加到队列,将在后台生成`:"视频任务已添加到队列,将在后台生成":s>1?`${b.length} video tasks added to queue, will be generated in background`:"Video task added to queue, will be generated in background"),Pe(h),P(""),O([]),k([]),T(!1),L([]),y(null),Z(!1)):y(C==="zh"?"任务创建失败,请检查参数或稍后重试":"Failed to create task, please check parameters or try again later")}catch(d){console.error("Failed to create task:",d);let h=C==="zh"?"任务创建失败,请检查参数或稍后重试":"Failed to create task, please check parameters or try again later";d.message&&(d.message.includes("exceed 5000 characters")?h=C==="zh"?"提示词不能超过 5000 字符":"Prompt must not exceed 5000 characters":d.message.includes("Duplicate submission")?h=C==="zh"?"请勿重复提交,请等待 5 秒后再试":"Duplicate submission. Please wait 5 seconds.":d.message.includes("Invalid parameters")&&(h=C==="zh"?`参数错误: ${d.message.replace("Invalid parameters: ","")}`:d.message)),y(h)}};return Ke(R,p,le),e.jsx("div",{className:"ai-video-generation-container",children:e.jsxs("div",{className:"main-content",ref:K,children:[e.jsxs("div",{className:"ai-image-generation-section",children:[e.jsxs("div",{className:"ai-image-generation-form",children:[x!==void 0&&w&&e.jsx("div",{className:"model-selector-wrapper",children:e.jsx(Ie,{selectedModel:x,onSelect:s=>w(s),language:C,models:Ue,placement:"down",variant:"form",placeholder:C==="zh"?"选择视频模型":"Select Video Model",disabled:R})}),e.jsx(ts,{model:j,duration:u,size:g,onDurationChange:v,onSizeChange:S,disabled:R}),e.jsx(qe,{images:Ce(ee),onImagesChange:Ne,language:C,disabled:R,multiple:t.imageUpload.maxCount>1,maxCount:t.imageUpload.maxCount,slotLabels:t.imageUpload.mode==="frames"?t.imageUpload.labels:void 0,label:t.imageUpload.mode==="frames"?C==="zh"?"首尾帧图片 (可选)":"Start/End Frames (Optional)":C==="zh"?"参考图片 (可选)":"Reference Images (Optional)"}),ve&&e.jsx(ls,{enabled:U,onEnabledChange:T,totalDuration:parseFloat(u),maxScenes:q.maxScenes,minSceneDuration:q.minSceneDuration,scenes:B,onScenesChange:L,disabled:R}),!U&&e.jsx(Ze,{prompt:p,onPromptChange:P,presetPrompts:we,language:C,type:"video",disabled:R,onError:y,videoProvider:t.provider}),e.jsx(Je,{error:F})]}),e.jsx(Qe,{language:C,type:"video",isGenerating:R,hasGenerated:!1,canGenerate:U?B.length>0:!!p.trim(),onGenerate:le,onReset:Se})]}),e.jsx(Xe,{isRightPanelVisible:E,onToggleRightPanel:_e,onWidthChange:ye,rightPanelWidth:I,language:C,storageKey:"video"}),E&&e.jsx("div",{className:"task-sidebar",style:{width:I,flexShrink:0},children:e.jsx(Ye,{taskType:ue.VIDEO,onEditTask:Ee})})]})})};export{ms as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@charset "UTF-8";.ai-video-generation-container{display:flex;flex-direction:column;height:80vh;overflow:hidden;position:relative}.main-content{display:flex;gap:0;min-height:400px;height:100%;align-items:stretch;flex:1;overflow:hidden}.ai-image-generation-section{flex:1;min-width:280px;display:flex;flex-direction:column;gap:16px;height:100%;overflow-y:auto;overflow-x:hidden;padding-right:8px;scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.15) transparent}.ai-image-generation-section::-webkit-scrollbar{width:4px}.ai-image-generation-section::-webkit-scrollbar-track{background:transparent}.ai-image-generation-section::-webkit-scrollbar-thumb{background:#00000026;border-radius:2px}.ai-image-generation-section::-webkit-scrollbar-thumb:hover{background:#00000040}.ai-image-generation-section .ai-image-generation-form{flex:1 1 auto;display:flex;flex-direction:column;gap:12px}.ai-image-generation-section .ai-image-generation-form .form-field--prompt{flex:1 1 auto;display:flex;flex-direction:column;min-height:150px}.ai-image-generation-section .ai-image-generation-form .form-field--prompt .form-textarea{flex:1 1 auto;min-height:100px!important;height:auto}.task-sidebar{min-width:240px;height:100%;overflow-y:auto;background:var(--color-bg-container, #fff);border:1px solid var(--color-border-light, #e8e8e8);border-radius:10px;padding:12px;box-shadow:0 2px 8px #0000000f;scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.15) transparent}.task-sidebar::-webkit-scrollbar{width:4px}.task-sidebar::-webkit-scrollbar-track{background:transparent}.task-sidebar::-webkit-scrollbar-thumb{background:#00000026;border-radius:2px}.task-sidebar::-webkit-scrollbar-thumb:hover{background:#00000040}.video-origin{border-radius:6px}.video-origin--focus{outline:2px solid var(--td-brand-color, #0052d9);outline-offset:2px}.video-origin--selected{box-shadow:0 0 0 2px var(--td-brand-color, #0052d9)}.video-origin::-webkit-media-controls{border-radius:6px}@media(max-width:768px){.ai-video-generation-container{height:auto;min-height:100%;overflow-y:auto;display:flex;flex-direction:column}.ai-video-generation-container .main-content{flex-direction:column;gap:12px;min-height:auto;height:auto;flex:1;overflow-y:auto}.ai-video-generation-container .ai-image-generation-section{max-height:none;flex:none;order:1}.ai-video-generation-container .task-sidebar{flex:none;height:auto;min-height:100px;max-height:180px;overflow-y:auto;padding:8px;order:2;margin-top:8px}.ai-video-generation-container .section-actions{flex-wrap:wrap;gap:8px;padding:8px 0;position:relative;z-index:10;background:#fff}.winbox.max .ai-video-generation-container .task-sidebar,.winbox.full .ai-video-generation-container .task-sidebar{max-height:40vh}}@media(max-width:480px){.ai-video-generation-container .task-sidebar{min-height:80px;max-height:150px;padding:6px}.ai-video-generation-container .section-actions{justify-content:center;gap:6px;padding:6px 0;flex-wrap:wrap}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{w as ln,c as J}from"./path-CY0bYimO.js";import{D as rn,E as N,F as D,G as an,H as y,I as on,J as z,K as _,L as un,M as t,N as sn,O as tn,P as fn}from"./mermaid.core-
|
|
1
|
+
import{w as ln,c as J}from"./path-CY0bYimO.js";import{D as rn,E as N,F as D,G as an,H as y,I as on,J as z,K as _,L as un,M as t,N as sn,O as tn,P as fn}from"./mermaid.core-yVPD7ieH.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function mn(l){return l.endAngle}function pn(l){return l&&l.padAngle}function dn(l,h,O,E,v,A,K,r){var q=O-l,i=E-h,n=K-v,m=r-A,a=m*q-n*i;if(!(a*a<y))return a=(n*(h-A)-m*(l-v))/a,[l+a*q,h+a*i]}function W(l,h,O,E,v,A,K){var r=l-O,q=h-E,i=(K?A:-A)/z(r*r+q*q),n=i*q,m=-i*r,a=l+n,s=h+m,f=O+n,c=E+m,L=(a+f)/2,o=(s+c)/2,p=f-a,g=c-s,R=p*p+g*g,T=v-A,P=a*c-f*s,F=(g<0?-1:1)*z(tn(0,T*T*R-P*P)),G=(P*g-p*F)/R,H=(-P*p-g*F)/R,w=(P*g+p*F)/R,d=(-P*p+g*F)/R,x=G-L,e=H-o,u=w-L,M=d-o;return x*x+e*e>u*u+M*M&&(G=w,H=d),{cx:G,cy:H,x01:-n,y01:-m,x11:G*(v/T-1),y11:H*(v/T-1)}}function vn(){var l=cn,h=yn,O=J(0),E=null,v=gn,A=mn,K=pn,r=null,q=ln(i);function i(){var n,m,a=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-an,c=A.apply(this,arguments)-an,L=un(c-f),o=c>f;if(r||(r=n=q()),s<a&&(m=s,s=a,a=m),!(s>y))r.moveTo(0,0);else if(L>on-y)r.moveTo(s*N(f),s*D(f)),r.arc(0,0,s,f,c,!o),a>y&&(r.moveTo(a*N(c),a*D(c)),r.arc(0,0,a,c,f,o));else{var p=f,g=c,R=f,T=c,P=L,F=L,G=K.apply(this,arguments)/2,H=G>y&&(E?+E.apply(this,arguments):z(a*a+s*s)),w=_(un(s-a)/2,+O.apply(this,arguments)),d=w,x=w,e,u;if(H>y){var M=sn(H/a*D(G)),B=sn(H/s*D(G));(P-=M*2)>y?(M*=o?1:-1,R+=M,T-=M):(P=0,R=T=(f+c)/2),(F-=B*2)>y?(B*=o?1:-1,p+=B,g-=B):(F=0,p=g=(f+c)/2)}var S=s*N(p),j=s*D(p),C=a*N(T),Q=a*D(T);if(w>y){var U=s*N(g),V=s*D(g),X=a*N(R),Y=a*D(R),I;if(L<rn)if(I=dn(S,j,X,Y,U,V,C,Q)){var Z=S-I[0],$=j-I[1],k=U-I[0],b=V-I[1],nn=1/D(fn((Z*k+$*b)/(z(Z*Z+$*$)*z(k*k+b*b)))/2),en=z(I[0]*I[0]+I[1]*I[1]);d=_(w,(a-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else d=x=0}F>y?x>y?(e=W(X,Y,S,j,s,x,o),u=W(U,V,C,Q,s,x,o),r.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?r.arc(e.cx,e.cy,x,t(e.y01,e.x01),t(u.y01,u.x01),!o):(r.arc(e.cx,e.cy,x,t(e.y01,e.x01),t(e.y11,e.x11),!o),r.arc(0,0,s,t(e.cy+e.y11,e.cx+e.x11),t(u.cy+u.y11,u.cx+u.x11),!o),r.arc(u.cx,u.cy,x,t(u.y11,u.x11),t(u.y01,u.x01),!o))):(r.moveTo(S,j),r.arc(0,0,s,p,g,!o)):r.moveTo(S,j),!(a>y)||!(P>y)?r.lineTo(C,Q):d>y?(e=W(C,Q,U,V,a,-d,o),u=W(S,j,X,Y,a,-d,o),r.lineTo(e.cx+e.x01,e.cy+e.y01),d<w?r.arc(e.cx,e.cy,d,t(e.y01,e.x01),t(u.y01,u.x01),!o):(r.arc(e.cx,e.cy,d,t(e.y01,e.x01),t(e.y11,e.x11),!o),r.arc(0,0,a,t(e.cy+e.y11,e.cx+e.x11),t(u.cy+u.y11,u.cx+u.x11),o),r.arc(u.cx,u.cy,d,t(u.y11,u.x11),t(u.y01,u.x01),!o))):r.arc(0,0,a,T,R,o)}if(r.closePath(),n)return r=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,m=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-rn/2;return[N(m)*n,D(m)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:J(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:J(+n),i):h},i.cornerRadius=function(n){return arguments.length?(O=typeof n=="function"?n:J(+n),i):O},i.padRadius=function(n){return arguments.length?(E=n==null?null:typeof n=="function"?n:J(+n),i):E},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:J(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:J(+n),i):A},i.padAngle=function(n){return arguments.length?(K=typeof n=="function"?n:J(+n),i):K},i.context=function(n){return arguments.length?(r=n??null,i):r},i}export{vn as a};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{w as ln,c as J}from"./path-CbwjOpE9.js";import{E as rn,F as N,G as E,H as an,I as y,J as on,K as j,L as _,M as un,N as t,O as sn,P as tn,Q as fn}from"./index-
|
|
1
|
+
import{w as ln,c as J}from"./path-CbwjOpE9.js";import{E as rn,F as N,G as E,H as an,I as y,J as on,K as j,L as _,M as un,N as t,O as sn,P as tn,Q as fn}from"./index-9ACcVAdm.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function mn(l){return l.endAngle}function pn(l){return l&&l.padAngle}function dn(l,h,q,I,v,A,K,r){var D=q-l,i=I-h,n=K-v,m=r-A,a=m*D-n*i;if(!(a*a<y))return a=(n*(h-A)-m*(l-v))/a,[l+a*D,h+a*i]}function W(l,h,q,I,v,A,K){var r=l-q,D=h-I,i=(K?A:-A)/j(r*r+D*D),n=i*D,m=-i*r,a=l+n,s=h+m,f=q+n,c=I+m,L=(a+f)/2,o=(s+c)/2,p=f-a,g=c-s,R=p*p+g*g,T=v-A,P=a*c-f*s,F=(g<0?-1:1)*j(tn(0,T*T*R-P*P)),G=(P*g-p*F)/R,H=(-P*p-g*F)/R,w=(P*g+p*F)/R,d=(-P*p+g*F)/R,x=G-L,e=H-o,u=w-L,M=d-o;return x*x+e*e>u*u+M*M&&(G=w,H=d),{cx:G,cy:H,x01:-n,y01:-m,x11:G*(v/T-1),y11:H*(v/T-1)}}function vn(){var l=cn,h=yn,q=J(0),I=null,v=gn,A=mn,K=pn,r=null,D=ln(i);function i(){var n,m,a=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-an,c=A.apply(this,arguments)-an,L=un(c-f),o=c>f;if(r||(r=n=D()),s<a&&(m=s,s=a,a=m),!(s>y))r.moveTo(0,0);else if(L>on-y)r.moveTo(s*N(f),s*E(f)),r.arc(0,0,s,f,c,!o),a>y&&(r.moveTo(a*N(c),a*E(c)),r.arc(0,0,a,c,f,o));else{var p=f,g=c,R=f,T=c,P=L,F=L,G=K.apply(this,arguments)/2,H=G>y&&(I?+I.apply(this,arguments):j(a*a+s*s)),w=_(un(s-a)/2,+q.apply(this,arguments)),d=w,x=w,e,u;if(H>y){var M=sn(H/a*E(G)),z=sn(H/s*E(G));(P-=M*2)>y?(M*=o?1:-1,R+=M,T-=M):(P=0,R=T=(f+c)/2),(F-=z*2)>y?(z*=o?1:-1,p+=z,g-=z):(F=0,p=g=(f+c)/2)}var Q=s*N(p),S=s*E(p),B=a*N(T),C=a*E(T);if(w>y){var U=s*N(g),V=s*E(g),X=a*N(R),Y=a*E(R),O;if(L<rn)if(O=dn(Q,S,X,Y,U,V,B,C)){var Z=Q-O[0],$=S-O[1],k=U-O[0],b=V-O[1],nn=1/E(fn((Z*k+$*b)/(j(Z*Z+$*$)*j(k*k+b*b)))/2),en=j(O[0]*O[0]+O[1]*O[1]);d=_(w,(a-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else d=x=0}F>y?x>y?(e=W(X,Y,Q,S,s,x,o),u=W(U,V,B,C,s,x,o),r.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?r.arc(e.cx,e.cy,x,t(e.y01,e.x01),t(u.y01,u.x01),!o):(r.arc(e.cx,e.cy,x,t(e.y01,e.x01),t(e.y11,e.x11),!o),r.arc(0,0,s,t(e.cy+e.y11,e.cx+e.x11),t(u.cy+u.y11,u.cx+u.x11),!o),r.arc(u.cx,u.cy,x,t(u.y11,u.x11),t(u.y01,u.x01),!o))):(r.moveTo(Q,S),r.arc(0,0,s,p,g,!o)):r.moveTo(Q,S),!(a>y)||!(P>y)?r.lineTo(B,C):d>y?(e=W(B,C,U,V,a,-d,o),u=W(Q,S,X,Y,a,-d,o),r.lineTo(e.cx+e.x01,e.cy+e.y01),d<w?r.arc(e.cx,e.cy,d,t(e.y01,e.x01),t(u.y01,u.x01),!o):(r.arc(e.cx,e.cy,d,t(e.y01,e.x01),t(e.y11,e.x11),!o),r.arc(0,0,a,t(e.cy+e.y11,e.cx+e.x11),t(u.cy+u.y11,u.cx+u.x11),o),r.arc(u.cx,u.cy,d,t(u.y11,u.x11),t(u.y01,u.x01),!o))):r.arc(0,0,a,T,R,o)}if(r.closePath(),n)return r=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,m=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-rn/2;return[N(m)*n,E(m)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:J(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:J(+n),i):h},i.cornerRadius=function(n){return arguments.length?(q=typeof n=="function"?n:J(+n),i):q},i.padRadius=function(n){return arguments.length?(I=n==null?null:typeof n=="function"?n:J(+n),i):I},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:J(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:J(+n),i):A},i.padAngle=function(n){return arguments.length?(K=typeof n=="function"?n:J(+n),i):K},i.context=function(n){return arguments.length?(r=n??null,i):r},i}export{vn as a};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as i,I as Ee,_ as Oe,B as ds,ae as hs,b3 as ms,an as ne,a3 as dt,a4 as ps,o as Xe,a6 as x,b4 as ze,b5 as gs,b6 as Ye,Z as B,b7 as fs,ag as ws,n as bs,a7 as vs,F as s,K as A,ak as _,b8 as ht,b9 as ks,a$ as xs,M as ys,al as mt,a8 as pt,b0 as js,ba as Cs,a_ as Ss,am as gt,bb as Ns,bc as ft,as as _s,bd as zs}from"./index-Y-mRUgjd.js";function wt(w,n){var v=Object.keys(w);if(Object.getOwnPropertySymbols){var b=Object.getOwnPropertySymbols(w);n&&(b=b.filter(function(R){return Object.getOwnPropertyDescriptor(w,R).enumerable})),v.push.apply(v,b)}return v}function bt(w){for(var n=1;n<arguments.length;n++){var v=arguments[n]!=null?arguments[n]:{};n%2?wt(Object(v),!0).forEach(function(b){Oe(w,b,v[b])}):Object.getOwnPropertyDescriptors?Object.defineProperties(w,Object.getOwnPropertyDescriptors(v)):wt(Object(v)).forEach(function(b){Object.defineProperty(w,b,Object.getOwnPropertyDescriptor(v,b))})}return w}var Rs={tag:"svg",attrs:{fill:"none",viewBox:"0 0 24 24",width:"1em",height:"1em"},children:[{tag:"path",attrs:{fill:"currentColor",d:"M11.0002 4.5L11.0002 16.0858L6.50015 11.5858L5.08594 13L12.0002 19.9142L18.9144 13L17.5001 11.5858L13.0002 16.0858L13.0002 4.5L11.0002 4.5Z"}}]},de=i.forwardRef(function(w,n){return i.createElement(Ee,bt(bt({},w),{},{id:"arrow-down",ref:n,icon:Rs}))});de.displayName="ArrowDownIcon";function vt(w,n){var v=Object.keys(w);if(Object.getOwnPropertySymbols){var b=Object.getOwnPropertySymbols(w);n&&(b=b.filter(function(R){return Object.getOwnPropertyDescriptor(w,R).enumerable})),v.push.apply(v,b)}return v}function kt(w){for(var n=1;n<arguments.length;n++){var v=arguments[n]!=null?arguments[n]:{};n%2?vt(Object(v),!0).forEach(function(b){Oe(w,b,v[b])}):Object.getOwnPropertyDescriptors?Object.defineProperties(w,Object.getOwnPropertyDescriptors(v)):vt(Object(v)).forEach(function(b){Object.defineProperty(w,b,Object.getOwnPropertyDescriptor(v,b))})}return w}var Es={tag:"svg",attrs:{fill:"none",viewBox:"0 0 24 24",width:"1em",height:"1em"},children:[{tag:"path",attrs:{fill:"currentColor",d:"M2 2H22V22H2V2ZM4 4V20H20V4H4ZM17.9142 9L10.5 16.4142L6.08579 12L7.5 10.5858L10.5 13.5858L16.5 7.58579L17.9142 9Z"}}]},Nt=i.forwardRef(function(w,n){return i.createElement(Ee,kt(kt({},w),{},{id:"check-rectangle",ref:n,icon:Es}))});Nt.displayName="CheckRectangleIcon";function xt(w,n){var v=Object.keys(w);if(Object.getOwnPropertySymbols){var b=Object.getOwnPropertySymbols(w);n&&(b=b.filter(function(R){return Object.getOwnPropertyDescriptor(w,R).enumerable})),v.push.apply(v,b)}return v}function yt(w){for(var n=1;n<arguments.length;n++){var v=arguments[n]!=null?arguments[n]:{};n%2?xt(Object(v),!0).forEach(function(b){Oe(w,b,v[b])}):Object.getOwnPropertyDescriptors?Object.defineProperties(w,Object.getOwnPropertyDescriptors(v)):xt(Object(v)).forEach(function(b){Object.defineProperty(w,b,Object.getOwnPropertyDescriptor(v,b))})}return w}var Os={tag:"svg",attrs:{fill:"none",viewBox:"0 0 24 24",width:"1em",height:"1em"},children:[{tag:"path",attrs:{fill:"currentColor",d:"M3 1H15.4142L21 6.58579V23H3V1ZM19 9H13V3H5V21H19V9ZM15 3.41745V7H18.5853L15 3.41745ZM7 10H9.6V12H9V12.6H7V10ZM10.4 10H13V12.6H11V12H10.4V10ZM9 14V13.4H7V16H9.6V14H9ZM11 14H17V20H11V14ZM13 16V18H15V16H13Z"}}]},_t=i.forwardRef(function(w,n){return i.createElement(Ee,yt(yt({},w),{},{id:"file-paste",ref:n,icon:Os}))});_t.displayName="FilePasteIcon";function jt(w,n){var v=Object.keys(w);if(Object.getOwnPropertySymbols){var b=Object.getOwnPropertySymbols(w);n&&(b=b.filter(function(R){return Object.getOwnPropertyDescriptor(w,R).enumerable})),v.push.apply(v,b)}return v}function Ct(w){for(var n=1;n<arguments.length;n++){var v=arguments[n]!=null?arguments[n]:{};n%2?jt(Object(v),!0).forEach(function(b){Oe(w,b,v[b])}):Object.getOwnPropertyDescriptors?Object.defineProperties(w,Object.getOwnPropertyDescriptors(v)):jt(Object(v)).forEach(function(b){Object.defineProperty(w,b,Object.getOwnPropertyDescriptor(v,b))})}return w}var Ds={tag:"svg",attrs:{fill:"none",viewBox:"0 0 24 24",width:"1em",height:"1em"},children:[{tag:"path",attrs:{fill:"currentColor",d:"M15.0002 3.08569L22.4144 10.4999L2.00015 10.4999V8.4999L17.5859 8.4999L13.5859 4.49991L15.0002 3.08569ZM22.0002 13.4999V15.4999L6.41437 15.4999L10.4144 19.4999L9.00015 20.9141L1.58594 13.4999L22.0002 13.4999Z"}}]},zt=i.forwardRef(function(w,n){return i.createElement(Ee,Ct(Ct({},w),{},{id:"swap",ref:n,icon:Ds}))});zt.displayName="SwapIcon";function Ms(w={}){const{showNavbar:n=!0,showToolbar:v=!0,showTitle:b=!0,videoAutoPlay:R=!0,videoLoop:he=!0,onClose:W,onIndexChange:X}=w,[f,O]=i.useState(!1),[P,Y]=i.useState([]),[te,se]=i.useState(0),re=i.useCallback((z,I=0)=>{const M=Array.isArray(z)?z:[z];M.length!==0&&(Y(M),se(Math.max(0,Math.min(I,M.length-1))),O(!0))},[]),q=i.useCallback(()=>{O(!1),Y([]),se(0),W==null||W()},[W]),y=i.useCallback(z=>{se(z),X==null||X(z)},[X]),H=i.useMemo(()=>({visible:f,items:P,initialIndex:te,onClose:q,onIndexChange:y,showNavbar:n,showToolbar:v,showTitle:b,videoAutoPlay:R,videoLoop:he}),[f,P,te,q,y,n,v,b,R,he]);return{openViewer:re,closeViewer:q,isOpen:f,currentIndex:te,items:P,viewerProps:H}}function Ls(w,n="image"){return w.map((v,b)=>({url:v,type:n,alt:`${n==="image"?"Image":"Video"} ${b+1}`}))}const St=ps.BATCH_IMAGE_CACHE,Re=["auto","1x1","2x3","3x2","3x4","4x3","4x5","5x4","9x16","16x9","21x9"],qe={auto:"自动","1x1":"1:1","2x3":"2:3","3x2":"3:2","3x4":"3:4","4x3":"4:3","4x5":"4:5","5x4":"5:4","9x16":"9:16","16x9":"16:9","21x9":"21:9"},E=["prompt","size","images","count","preview"];function $s(){const w=[];for(let n=0;n<5;n++)w.push({id:n+1,prompt:"",size:"auto",images:[],count:1,taskIds:[]});return w}const Is=({onSwitchToSingle:w})=>{const{language:n}=ds(),{createTask:v,tasks:b}=hs(),{addAsset:R,assets:he,loadAssets:W}=ms(),X=he.filter(t=>t.type===ne.IMAGE);i.useEffect(()=>{W()},[W]);const[f,O]=i.useState($s),[P,Y]=i.useState(6),[te,se]=i.useState(!1),[re,q]=i.useState(!1);i.useEffect(()=>{let t=!0;return dt.get(St).then(e=>{t&&(e&&e.tasks&&Array.isArray(e.tasks)&&e.tasks.length>0&&(O(e.tasks),e.taskIdCounter&&Y(e.taskIdCounter)),se(!0))}).catch(e=>{console.warn("Failed to load batch image cache:",e),t&&se(!0)}),()=>{t=!1}},[]);const[y,H]=i.useState(null),[z,I]=i.useState([]),[M,D]=i.useState(null),[j,U]=i.useState(new Set),{validSelectedRows:Ts,selectedTaskCount:Ps,selectedInfoText:Rt}=i.useMemo(()=>{const t=[...j].filter(r=>{const o=f[r];return o&&o.prompt&&o.prompt.trim()!==""}).sort((r,o)=>r-o),e=t.reduce((r,o)=>{const h=f[o];return r+((h==null?void 0:h.count)||1)},0),a=t.length>0?n==="zh"?`已选 ${t.length} 行 / ${e} 任务`:`${t.length} rows / ${e} tasks`:"";return{validSelectedRows:t,selectedTaskCount:e,selectedInfoText:a}},[j,f,n]),F=i.useRef([]),V=i.useRef(-1),le=i.useRef(!1),[Qe,De]=i.useState(!0),[Et,Me]=i.useState(!1),[K,et]=i.useState(!1),[T,tt]=i.useState(null),[st,at]=i.useState([]),[me,Le]=i.useState(null),[ae,$e]=i.useState(!1),[pe,Te]=i.useState(null),[Ot,Pe]=i.useState(null),[G,Dt]=i.useState(1),[Mt,Ae]=i.useState(!1),[L,Ie]=i.useState([]),[Z,nt]=i.useState(1),Fe=i.useMemo(()=>L.slice(0,12).map(t=>URL.createObjectURL(t)),[L]);i.useEffect(()=>()=>{Fe.forEach(t=>URL.revokeObjectURL(t))},[Fe]);const[ge,Lt]=i.useState(()=>Xe.get().imageModelName||"gemini-2.5-flash-image-vip"),{openViewer:rt,viewerProps:$t}=Ms(),[ie,Ve]=i.useState(null),[Tt,fe]=i.useState(!1),[we,Pt]=i.useState(5),[At,Ke]=i.useState(!1),[Be,He]=i.useState(null),be=i.useRef(null),ve=i.useRef(null),ke=i.useRef(null),xe=i.useRef(null),lt=i.useRef(null),ye=i.useRef(null),Ue=i.useRef(null);i.useEffect(()=>{if(!te)return;const t={tasks:f,taskIdCounter:P,timestamp:Date.now()};dt.set(St,t).catch(e=>{console.warn("Failed to save batch image cache:",e)})},[f,P,te]);const it=i.useCallback((t,e,a,r)=>{if(le.current){le.current=!1;return}F.current=F.current.slice(0,V.current+1);const o={tasks:JSON.parse(JSON.stringify(t)),selectedCells:[...e],activeCell:a?{...a}:null,selectedRows:Array.from(r)};F.current.push(o),V.current=F.current.length-1,F.current.length>50&&(F.current.shift(),V.current--)},[]);i.useEffect(()=>{f.length>0&&it(f,z,y,j)},[f,it]),i.useEffect(()=>{if(F.current.length>0&&V.current>=0&&!le.current){const t=F.current[V.current];t&&(t.selectedCells=[...z],t.activeCell=y?{...y}:null,t.selectedRows=Array.from(j))}},[z,y,j]);const ot=i.useCallback(()=>{if(V.current>0){V.current--,le.current=!0;const t=F.current[V.current];O(JSON.parse(JSON.stringify(t.tasks))),I([...t.selectedCells]),H(t.activeCell?{...t.activeCell}:null),U(new Set(t.selectedRows)),x.info(n==="zh"?"已撤销":"Undone")}else x.warning(n==="zh"?"没有可撤销的操作":"Nothing to undo")},[n]),ct=i.useCallback(()=>{if(V.current<F.current.length-1){V.current++,le.current=!0;const t=F.current[V.current];O(JSON.parse(JSON.stringify(t.tasks))),I([...t.selectedCells]),H(t.activeCell?{...t.activeCell}:null),U(new Set(t.selectedRows)),x.info(n==="zh"?"已重做":"Redone")}else x.warning(n==="zh"?"没有可重做的操作":"Nothing to redo")},[n]),It=i.useCallback(t=>{O(e=>{const a=[...e];for(let r=0;r<t;r++)a.push({id:P+r,prompt:"",size:"auto",images:[],count:1,taskIds:[]});return a}),Y(e=>e+t)},[P]),Ft=i.useCallback(()=>{if(j.size===0){x.warning(n==="zh"?"请先勾选要删除的行":"Please check rows to delete");return}O(t=>t.filter((e,a)=>!j.has(a))),U(new Set),I([]),H(null)},[j,n]),S=i.useCallback((t,e)=>{H({row:t,col:e}),I([{row:t,col:e}]),D(null)},[]),je=i.useCallback((t,e)=>{S(t,e),E.includes(e)&&e!=="images"&&D({row:t,col:e})},[S]),N=i.useCallback((t,e,a)=>{O(r=>{if(!r[t])return r;const o=[...r];return o[t]={...o[t],[e]:a},o})},[]),oe=i.useCallback((t,e,a)=>{if(t.shiftKey&&y){const r=Math.min(y.row,e),o=Math.max(y.row,e);U(c=>{const u=new Set(c);for(let k=r;k<=o;k++)u.add(k);return u});const h=[];for(let c=r;c<=o;c++)h.push({row:c,col:y.col});I(h),lt.current=e}else t.ctrlKey||t.metaKey?I(r=>r.some(h=>h.row===e&&h.col===a)?r.filter(h=>!(h.row===e&&h.col===a)):[...r,{row:e,col:a}]):(S(e,a),lt.current=e)},[y,S]),Ce=i.useCallback(t=>{var a;if(!y){x.warning(n==="zh"?"请先选中一个单元格作为填充源":"Please select a cell as fill source");return}const e=(a=f[y.row])==null?void 0:a[t];if(e==null||typeof e=="string"&&e.trim()===""||Array.isArray(e)&&e.length===0){x.warning(n==="zh"?"选中的单元格没有数据":"Selected cell has no data");return}O(r=>r.map(o=>({...o,[t]:t==="images"&&Array.isArray(e)?[...e]:e}))),x.success(n==="zh"?"已填充整列":"Column filled")},[y,f,n]),Se=i.useCallback((t,e)=>{$e(!1),Te(null),et(!0),tt({row:t,col:e}),Le(t)},[]),Ge=i.useCallback((t,e)=>{K||($e(!0),Te({row:t,col:e}),H({row:t,col:e}),I([{row:t,col:e}]))},[K]),Vt=i.useCallback(t=>{if(!K&&!ae)return;const a=t.target.closest("tr[data-row-index]");if(!a)return;const r=parseInt(a.dataset.rowIndex||"-1");if(!(r<0)){if(K&&T){Le(r);const o=T.row,h=r,c=Math.min(o,h),u=Math.max(o,h),k=[];for(let p=c;p<=u;p++)p!==o&&k.push(p);at(k)}if(ae&&pe){const o=pe.col,h=pe.row,c=r,u=Math.min(h,c),k=Math.max(h,c),p=[];for(let d=u;d<=k;d++)p.push({row:d,col:o});I(p)}}},[K,T,ae,pe]),Ne=i.useCallback(()=>{var t;if(K&&T&&me!==null&&me!==T.row){const e=(t=f[T.row])==null?void 0:t[T.col],a=T.row,r=me,o=Math.min(a,r),h=Math.max(a,r);O(u=>{const k=[...u];for(let p=o;p<=h;p++)p!==a&&k[p]&&(k[p]={...k[p],[T.col]:Array.isArray(e)?[...e]:e});return k});const c=[];for(let u=o;u<=h;u++)c.push({row:u,col:T.col});I(c),x.success(n==="zh"?`已填充 ${Math.abs(r-a)} 行`:`Filled ${Math.abs(r-a)} rows`)}et(!1),tt(null),Le(null),at([]),$e(!1),Te(null)},[K,T,me,f,n]),Kt=i.useCallback(t=>{const e=t.target.files;e&&(Array.from(e).forEach(a=>{a.type.startsWith("image/")&&R(a,ne.IMAGE,ze.LOCAL,a.name).catch(r=>{console.warn("[BatchImageGeneration] Failed to add asset to library:",r)})}),be.current&&(be.current.value=""))},[R]),Bt=i.useCallback(t=>{let e=[];if(j.size>0?e=[...j]:z.length>0?e=[...new Set(z.map(a=>a.row))]:y&&(e=[y.row]),e.length===0){x.warning(n==="zh"?"请先选中要添加图片的行":"Please select a row first");return}O(a=>{const r=[...a];return e.forEach(o=>{r[o]&&!r[o].images.includes(t)&&(r[o]={...r[o],images:[...r[o].images,t]})}),r})},[j,z,y,n]),Q=i.useCallback((t,e)=>{O(a=>{const r=[...a];return r[t]&&!r[t].images.includes(e)&&(r[t]={...r[t],images:[...r[t].images,e]}),r})},[]),Ht=i.useCallback((t,e)=>{O(a=>{const r=[...a];return r[t]&&(r[t]={...r[t],images:r[t].images.filter(o=>o!==e)}),r})},[]),Ut=i.useCallback(t=>{const e=t.target.files,a=Ue.current;!e||e.length===0||a===null||(Array.from(e).forEach(r=>{if(!r.type.startsWith("image/"))return;R(r,ne.IMAGE,ze.LOCAL,r.name).catch(h=>{console.warn("[BatchImageGeneration] Failed to add asset to library:",h)});const o=new FileReader;o.onload=h=>{var u;const c=(u=h.target)==null?void 0:u.result;Q(a,c)},o.readAsDataURL(r)}),xe.current&&(xe.current.value=""),Ue.current=null)},[Q,R]),Gt=i.useCallback(t=>{var e;Ue.current=t,De(!0),(e=xe.current)==null||e.click()},[]),Zt=i.useCallback(t=>{He(t),Ke(!0)},[]),Jt=i.useCallback(t=>{Be!==null&&(t.url&&Q(Be,t.url),Ke(!1),He(null))},[Be,Q]),Wt=i.useCallback((t,e)=>{t.preventDefault(),t.dataTransfer.dropEffect="copy",Pe(e)},[]),Xt=i.useCallback(t=>{const e=t.relatedTarget;(!e||!t.currentTarget.contains(e))&&Pe(null)},[]),Yt=i.useCallback((t,e)=>{t.preventDefault(),Pe(null);const a=t.dataTransfer.getData("text/library-image");if(a){Q(e,a),x.success(n==="zh"?`已添加图片到第 ${e+1} 行`:`Added image to row ${e+1}`);return}const r=t.dataTransfer.files;if(!r||r.length===0)return;let o=0;Array.from(r).forEach(h=>{if(!h.type.startsWith("image/"))return;R(h,ne.IMAGE,ze.LOCAL,h.name).catch(u=>{console.warn("[BatchImageGeneration] Failed to add asset to library:",u)});const c=new FileReader;c.onload=u=>{var p;const k=(p=u.target)==null?void 0:p.result;Q(e,k)},c.readAsDataURL(h),o++}),o>0&&x.success(n==="zh"?`已添加 ${o} 张图片到第 ${e+1} 行`:`Added ${o} images to row ${e+1}`)},[Q,n,R]),qt=i.useCallback((t,e)=>{t.dataTransfer.setData("text/library-image",e),t.dataTransfer.effectAllowed="copy"},[]),Qt=i.useCallback(t=>{const e=t.target.files;if(!e||e.length===0)return;const a=Array.from(e).filter(o=>o.type.startsWith("image/"));if(a.length===0){x.warning(n==="zh"?"请选择图片文件":"Please select image files");return}Ie(a);const r=y?y.row+1:1;nt(Math.min(r,f.length)),Ae(!0),ve.current&&(ve.current.value="")},[n,y,f.length]),es=i.useCallback(async()=>{if(L.length===0)return;const t=gs(`批量导入(${L.length}张)`),e=G,a=L.length,r=Math.ceil(a/e),o=Z-1,h=[];for(const p of L){R(p,ne.IMAGE,ze.LOCAL,p.name).catch(l=>{console.warn("[BatchImageGeneration] Failed to add asset to library:",l)});const d=await new Promise((l,m)=>{const g=new FileReader;g.onload=C=>{var $;return l(($=C.target)==null?void 0:$.result)},g.onerror=m,g.readAsDataURL(p)});h.push(d)}O(p=>{const d=[...p];let l=0,m=0;for(let g=0;g<r;g++){const C=o+g,$=[];for(let ee=0;ee<e&&l<a;ee++)$.push(h[l]),l++;C<d.length?d[C]={...d[C],images:[...d[C].images,...$]}:(d.push({id:P+m,prompt:"",size:"auto",images:$,count:1,taskIds:[]}),m++)}return d});const c=Math.min(r,f.length-o),u=Math.max(0,r-c);u>0&&Y(p=>p+u),Ie([]),Ae(!1),t();const k=n==="zh"?`已导入 ${a} 张图片,从第 ${Z} 行开始`:`Imported ${a} images starting from row ${Z}`;x.success(k)},[L,G,Z,P,f.length,n,R]),Ze=i.useCallback(()=>{Ie([]),Ae(!1)},[]),ts=i.useCallback(async()=>{try{const t=await Ye(()=>import("./xlsx-CkFp8p6R.js"),[],import.meta.url),e=[{提示词:"一只可爱的橘猫在阳光下睡觉",尺寸:"1x1",数量:1},{提示词:"未来城市的夜景,霓虹灯闪烁",尺寸:"16x9",数量:2},{提示词:"古风美女,水墨画风格",尺寸:"3x4",数量:1},{提示词:"",尺寸:"1x1",数量:1},{提示词:"",尺寸:"1x1",数量:1}],a=t.utils.book_new(),r=t.utils.json_to_sheet(e);r["!cols"]=[{wch:60},{wch:10},{wch:8}],t.utils.book_append_sheet(a,r,"批量出图模板"),t.writeFile(a,"batch-image-template.xlsx"),x.success(n==="zh"?"模板下载成功,填写后可导入使用":"Template downloaded, fill and import to use")}catch(t){console.error("Excel template download error:",t),x.error(n==="zh"?"下载失败,请稍后重试":"Download failed, please try again")}},[n]),ss=i.useCallback(async t=>{var a;const e=(a=t.target.files)==null?void 0:a[0];if(e){try{const r=await Ye(()=>import("./xlsx-CkFp8p6R.js"),[],import.meta.url),o=new FileReader;o.onload=h=>{var c;try{const u=new Uint8Array((c=h.target)==null?void 0:c.result),k=r.read(u,{type:"array"}),p=k.SheetNames[0],d=k.Sheets[p],l=r.utils.sheet_to_json(d);if(l.length===0){x.warning(n==="zh"?"Excel 文件为空":"Excel file is empty");return}const m=l.map((g,C)=>{const $=g.提示词||g.prompt||g.Prompt||"",ee=g.尺寸||g.size||g.Size||"1x1",cs=parseInt(String(g.数量||g.count||g.Count||"1"))||1,ut=g.参考图||g.images||g.Images||"",us=ut?ut.split(`
|
|
1
|
+
import{r as i,I as Ee,_ as Oe,B as ds,ae as hs,b3 as ms,an as ne,a3 as dt,a4 as ps,o as Xe,a6 as x,b4 as ze,b5 as gs,b6 as Ye,Z as B,b7 as fs,ag as ws,n as bs,a7 as vs,F as s,K as A,ak as _,b8 as ht,b9 as ks,a$ as xs,M as ys,al as mt,a8 as pt,b0 as js,ba as Cs,a_ as Ss,am as gt,bb as Ns,bc as ft,as as _s,bd as zs}from"./index-CvrZFlag.js";function wt(w,n){var v=Object.keys(w);if(Object.getOwnPropertySymbols){var b=Object.getOwnPropertySymbols(w);n&&(b=b.filter(function(R){return Object.getOwnPropertyDescriptor(w,R).enumerable})),v.push.apply(v,b)}return v}function bt(w){for(var n=1;n<arguments.length;n++){var v=arguments[n]!=null?arguments[n]:{};n%2?wt(Object(v),!0).forEach(function(b){Oe(w,b,v[b])}):Object.getOwnPropertyDescriptors?Object.defineProperties(w,Object.getOwnPropertyDescriptors(v)):wt(Object(v)).forEach(function(b){Object.defineProperty(w,b,Object.getOwnPropertyDescriptor(v,b))})}return w}var Rs={tag:"svg",attrs:{fill:"none",viewBox:"0 0 24 24",width:"1em",height:"1em"},children:[{tag:"path",attrs:{fill:"currentColor",d:"M11.0002 4.5L11.0002 16.0858L6.50015 11.5858L5.08594 13L12.0002 19.9142L18.9144 13L17.5001 11.5858L13.0002 16.0858L13.0002 4.5L11.0002 4.5Z"}}]},de=i.forwardRef(function(w,n){return i.createElement(Ee,bt(bt({},w),{},{id:"arrow-down",ref:n,icon:Rs}))});de.displayName="ArrowDownIcon";function vt(w,n){var v=Object.keys(w);if(Object.getOwnPropertySymbols){var b=Object.getOwnPropertySymbols(w);n&&(b=b.filter(function(R){return Object.getOwnPropertyDescriptor(w,R).enumerable})),v.push.apply(v,b)}return v}function kt(w){for(var n=1;n<arguments.length;n++){var v=arguments[n]!=null?arguments[n]:{};n%2?vt(Object(v),!0).forEach(function(b){Oe(w,b,v[b])}):Object.getOwnPropertyDescriptors?Object.defineProperties(w,Object.getOwnPropertyDescriptors(v)):vt(Object(v)).forEach(function(b){Object.defineProperty(w,b,Object.getOwnPropertyDescriptor(v,b))})}return w}var Es={tag:"svg",attrs:{fill:"none",viewBox:"0 0 24 24",width:"1em",height:"1em"},children:[{tag:"path",attrs:{fill:"currentColor",d:"M2 2H22V22H2V2ZM4 4V20H20V4H4ZM17.9142 9L10.5 16.4142L6.08579 12L7.5 10.5858L10.5 13.5858L16.5 7.58579L17.9142 9Z"}}]},Nt=i.forwardRef(function(w,n){return i.createElement(Ee,kt(kt({},w),{},{id:"check-rectangle",ref:n,icon:Es}))});Nt.displayName="CheckRectangleIcon";function xt(w,n){var v=Object.keys(w);if(Object.getOwnPropertySymbols){var b=Object.getOwnPropertySymbols(w);n&&(b=b.filter(function(R){return Object.getOwnPropertyDescriptor(w,R).enumerable})),v.push.apply(v,b)}return v}function yt(w){for(var n=1;n<arguments.length;n++){var v=arguments[n]!=null?arguments[n]:{};n%2?xt(Object(v),!0).forEach(function(b){Oe(w,b,v[b])}):Object.getOwnPropertyDescriptors?Object.defineProperties(w,Object.getOwnPropertyDescriptors(v)):xt(Object(v)).forEach(function(b){Object.defineProperty(w,b,Object.getOwnPropertyDescriptor(v,b))})}return w}var Os={tag:"svg",attrs:{fill:"none",viewBox:"0 0 24 24",width:"1em",height:"1em"},children:[{tag:"path",attrs:{fill:"currentColor",d:"M3 1H15.4142L21 6.58579V23H3V1ZM19 9H13V3H5V21H19V9ZM15 3.41745V7H18.5853L15 3.41745ZM7 10H9.6V12H9V12.6H7V10ZM10.4 10H13V12.6H11V12H10.4V10ZM9 14V13.4H7V16H9.6V14H9ZM11 14H17V20H11V14ZM13 16V18H15V16H13Z"}}]},_t=i.forwardRef(function(w,n){return i.createElement(Ee,yt(yt({},w),{},{id:"file-paste",ref:n,icon:Os}))});_t.displayName="FilePasteIcon";function jt(w,n){var v=Object.keys(w);if(Object.getOwnPropertySymbols){var b=Object.getOwnPropertySymbols(w);n&&(b=b.filter(function(R){return Object.getOwnPropertyDescriptor(w,R).enumerable})),v.push.apply(v,b)}return v}function Ct(w){for(var n=1;n<arguments.length;n++){var v=arguments[n]!=null?arguments[n]:{};n%2?jt(Object(v),!0).forEach(function(b){Oe(w,b,v[b])}):Object.getOwnPropertyDescriptors?Object.defineProperties(w,Object.getOwnPropertyDescriptors(v)):jt(Object(v)).forEach(function(b){Object.defineProperty(w,b,Object.getOwnPropertyDescriptor(v,b))})}return w}var Ds={tag:"svg",attrs:{fill:"none",viewBox:"0 0 24 24",width:"1em",height:"1em"},children:[{tag:"path",attrs:{fill:"currentColor",d:"M15.0002 3.08569L22.4144 10.4999L2.00015 10.4999V8.4999L17.5859 8.4999L13.5859 4.49991L15.0002 3.08569ZM22.0002 13.4999V15.4999L6.41437 15.4999L10.4144 19.4999L9.00015 20.9141L1.58594 13.4999L22.0002 13.4999Z"}}]},zt=i.forwardRef(function(w,n){return i.createElement(Ee,Ct(Ct({},w),{},{id:"swap",ref:n,icon:Ds}))});zt.displayName="SwapIcon";function Ms(w={}){const{showNavbar:n=!0,showToolbar:v=!0,showTitle:b=!0,videoAutoPlay:R=!0,videoLoop:he=!0,onClose:W,onIndexChange:X}=w,[f,O]=i.useState(!1),[P,Y]=i.useState([]),[te,se]=i.useState(0),re=i.useCallback((z,I=0)=>{const M=Array.isArray(z)?z:[z];M.length!==0&&(Y(M),se(Math.max(0,Math.min(I,M.length-1))),O(!0))},[]),q=i.useCallback(()=>{O(!1),Y([]),se(0),W==null||W()},[W]),y=i.useCallback(z=>{se(z),X==null||X(z)},[X]),H=i.useMemo(()=>({visible:f,items:P,initialIndex:te,onClose:q,onIndexChange:y,showNavbar:n,showToolbar:v,showTitle:b,videoAutoPlay:R,videoLoop:he}),[f,P,te,q,y,n,v,b,R,he]);return{openViewer:re,closeViewer:q,isOpen:f,currentIndex:te,items:P,viewerProps:H}}function Ls(w,n="image"){return w.map((v,b)=>({url:v,type:n,alt:`${n==="image"?"Image":"Video"} ${b+1}`}))}const St=ps.BATCH_IMAGE_CACHE,Re=["auto","1x1","2x3","3x2","3x4","4x3","4x5","5x4","9x16","16x9","21x9"],qe={auto:"自动","1x1":"1:1","2x3":"2:3","3x2":"3:2","3x4":"3:4","4x3":"4:3","4x5":"4:5","5x4":"5:4","9x16":"9:16","16x9":"16:9","21x9":"21:9"},E=["prompt","size","images","count","preview"];function $s(){const w=[];for(let n=0;n<5;n++)w.push({id:n+1,prompt:"",size:"auto",images:[],count:1,taskIds:[]});return w}const Is=({onSwitchToSingle:w})=>{const{language:n}=ds(),{createTask:v,tasks:b}=hs(),{addAsset:R,assets:he,loadAssets:W}=ms(),X=he.filter(t=>t.type===ne.IMAGE);i.useEffect(()=>{W()},[W]);const[f,O]=i.useState($s),[P,Y]=i.useState(6),[te,se]=i.useState(!1),[re,q]=i.useState(!1);i.useEffect(()=>{let t=!0;return dt.get(St).then(e=>{t&&(e&&e.tasks&&Array.isArray(e.tasks)&&e.tasks.length>0&&(O(e.tasks),e.taskIdCounter&&Y(e.taskIdCounter)),se(!0))}).catch(e=>{console.warn("Failed to load batch image cache:",e),t&&se(!0)}),()=>{t=!1}},[]);const[y,H]=i.useState(null),[z,I]=i.useState([]),[M,D]=i.useState(null),[j,U]=i.useState(new Set),{validSelectedRows:Ts,selectedTaskCount:Ps,selectedInfoText:Rt}=i.useMemo(()=>{const t=[...j].filter(r=>{const o=f[r];return o&&o.prompt&&o.prompt.trim()!==""}).sort((r,o)=>r-o),e=t.reduce((r,o)=>{const h=f[o];return r+((h==null?void 0:h.count)||1)},0),a=t.length>0?n==="zh"?`已选 ${t.length} 行 / ${e} 任务`:`${t.length} rows / ${e} tasks`:"";return{validSelectedRows:t,selectedTaskCount:e,selectedInfoText:a}},[j,f,n]),F=i.useRef([]),V=i.useRef(-1),le=i.useRef(!1),[Qe,De]=i.useState(!0),[Et,Me]=i.useState(!1),[K,et]=i.useState(!1),[T,tt]=i.useState(null),[st,at]=i.useState([]),[me,Le]=i.useState(null),[ae,$e]=i.useState(!1),[pe,Te]=i.useState(null),[Ot,Pe]=i.useState(null),[G,Dt]=i.useState(1),[Mt,Ae]=i.useState(!1),[L,Ie]=i.useState([]),[Z,nt]=i.useState(1),Fe=i.useMemo(()=>L.slice(0,12).map(t=>URL.createObjectURL(t)),[L]);i.useEffect(()=>()=>{Fe.forEach(t=>URL.revokeObjectURL(t))},[Fe]);const[ge,Lt]=i.useState(()=>Xe.get().imageModelName||"gemini-2.5-flash-image-vip"),{openViewer:rt,viewerProps:$t}=Ms(),[ie,Ve]=i.useState(null),[Tt,fe]=i.useState(!1),[we,Pt]=i.useState(5),[At,Ke]=i.useState(!1),[Be,He]=i.useState(null),be=i.useRef(null),ve=i.useRef(null),ke=i.useRef(null),xe=i.useRef(null),lt=i.useRef(null),ye=i.useRef(null),Ue=i.useRef(null);i.useEffect(()=>{if(!te)return;const t={tasks:f,taskIdCounter:P,timestamp:Date.now()};dt.set(St,t).catch(e=>{console.warn("Failed to save batch image cache:",e)})},[f,P,te]);const it=i.useCallback((t,e,a,r)=>{if(le.current){le.current=!1;return}F.current=F.current.slice(0,V.current+1);const o={tasks:JSON.parse(JSON.stringify(t)),selectedCells:[...e],activeCell:a?{...a}:null,selectedRows:Array.from(r)};F.current.push(o),V.current=F.current.length-1,F.current.length>50&&(F.current.shift(),V.current--)},[]);i.useEffect(()=>{f.length>0&&it(f,z,y,j)},[f,it]),i.useEffect(()=>{if(F.current.length>0&&V.current>=0&&!le.current){const t=F.current[V.current];t&&(t.selectedCells=[...z],t.activeCell=y?{...y}:null,t.selectedRows=Array.from(j))}},[z,y,j]);const ot=i.useCallback(()=>{if(V.current>0){V.current--,le.current=!0;const t=F.current[V.current];O(JSON.parse(JSON.stringify(t.tasks))),I([...t.selectedCells]),H(t.activeCell?{...t.activeCell}:null),U(new Set(t.selectedRows)),x.info(n==="zh"?"已撤销":"Undone")}else x.warning(n==="zh"?"没有可撤销的操作":"Nothing to undo")},[n]),ct=i.useCallback(()=>{if(V.current<F.current.length-1){V.current++,le.current=!0;const t=F.current[V.current];O(JSON.parse(JSON.stringify(t.tasks))),I([...t.selectedCells]),H(t.activeCell?{...t.activeCell}:null),U(new Set(t.selectedRows)),x.info(n==="zh"?"已重做":"Redone")}else x.warning(n==="zh"?"没有可重做的操作":"Nothing to redo")},[n]),It=i.useCallback(t=>{O(e=>{const a=[...e];for(let r=0;r<t;r++)a.push({id:P+r,prompt:"",size:"auto",images:[],count:1,taskIds:[]});return a}),Y(e=>e+t)},[P]),Ft=i.useCallback(()=>{if(j.size===0){x.warning(n==="zh"?"请先勾选要删除的行":"Please check rows to delete");return}O(t=>t.filter((e,a)=>!j.has(a))),U(new Set),I([]),H(null)},[j,n]),S=i.useCallback((t,e)=>{H({row:t,col:e}),I([{row:t,col:e}]),D(null)},[]),je=i.useCallback((t,e)=>{S(t,e),E.includes(e)&&e!=="images"&&D({row:t,col:e})},[S]),N=i.useCallback((t,e,a)=>{O(r=>{if(!r[t])return r;const o=[...r];return o[t]={...o[t],[e]:a},o})},[]),oe=i.useCallback((t,e,a)=>{if(t.shiftKey&&y){const r=Math.min(y.row,e),o=Math.max(y.row,e);U(c=>{const u=new Set(c);for(let k=r;k<=o;k++)u.add(k);return u});const h=[];for(let c=r;c<=o;c++)h.push({row:c,col:y.col});I(h),lt.current=e}else t.ctrlKey||t.metaKey?I(r=>r.some(h=>h.row===e&&h.col===a)?r.filter(h=>!(h.row===e&&h.col===a)):[...r,{row:e,col:a}]):(S(e,a),lt.current=e)},[y,S]),Ce=i.useCallback(t=>{var a;if(!y){x.warning(n==="zh"?"请先选中一个单元格作为填充源":"Please select a cell as fill source");return}const e=(a=f[y.row])==null?void 0:a[t];if(e==null||typeof e=="string"&&e.trim()===""||Array.isArray(e)&&e.length===0){x.warning(n==="zh"?"选中的单元格没有数据":"Selected cell has no data");return}O(r=>r.map(o=>({...o,[t]:t==="images"&&Array.isArray(e)?[...e]:e}))),x.success(n==="zh"?"已填充整列":"Column filled")},[y,f,n]),Se=i.useCallback((t,e)=>{$e(!1),Te(null),et(!0),tt({row:t,col:e}),Le(t)},[]),Ge=i.useCallback((t,e)=>{K||($e(!0),Te({row:t,col:e}),H({row:t,col:e}),I([{row:t,col:e}]))},[K]),Vt=i.useCallback(t=>{if(!K&&!ae)return;const a=t.target.closest("tr[data-row-index]");if(!a)return;const r=parseInt(a.dataset.rowIndex||"-1");if(!(r<0)){if(K&&T){Le(r);const o=T.row,h=r,c=Math.min(o,h),u=Math.max(o,h),k=[];for(let p=c;p<=u;p++)p!==o&&k.push(p);at(k)}if(ae&&pe){const o=pe.col,h=pe.row,c=r,u=Math.min(h,c),k=Math.max(h,c),p=[];for(let d=u;d<=k;d++)p.push({row:d,col:o});I(p)}}},[K,T,ae,pe]),Ne=i.useCallback(()=>{var t;if(K&&T&&me!==null&&me!==T.row){const e=(t=f[T.row])==null?void 0:t[T.col],a=T.row,r=me,o=Math.min(a,r),h=Math.max(a,r);O(u=>{const k=[...u];for(let p=o;p<=h;p++)p!==a&&k[p]&&(k[p]={...k[p],[T.col]:Array.isArray(e)?[...e]:e});return k});const c=[];for(let u=o;u<=h;u++)c.push({row:u,col:T.col});I(c),x.success(n==="zh"?`已填充 ${Math.abs(r-a)} 行`:`Filled ${Math.abs(r-a)} rows`)}et(!1),tt(null),Le(null),at([]),$e(!1),Te(null)},[K,T,me,f,n]),Kt=i.useCallback(t=>{const e=t.target.files;e&&(Array.from(e).forEach(a=>{a.type.startsWith("image/")&&R(a,ne.IMAGE,ze.LOCAL,a.name).catch(r=>{console.warn("[BatchImageGeneration] Failed to add asset to library:",r)})}),be.current&&(be.current.value=""))},[R]),Bt=i.useCallback(t=>{let e=[];if(j.size>0?e=[...j]:z.length>0?e=[...new Set(z.map(a=>a.row))]:y&&(e=[y.row]),e.length===0){x.warning(n==="zh"?"请先选中要添加图片的行":"Please select a row first");return}O(a=>{const r=[...a];return e.forEach(o=>{r[o]&&!r[o].images.includes(t)&&(r[o]={...r[o],images:[...r[o].images,t]})}),r})},[j,z,y,n]),Q=i.useCallback((t,e)=>{O(a=>{const r=[...a];return r[t]&&!r[t].images.includes(e)&&(r[t]={...r[t],images:[...r[t].images,e]}),r})},[]),Ht=i.useCallback((t,e)=>{O(a=>{const r=[...a];return r[t]&&(r[t]={...r[t],images:r[t].images.filter(o=>o!==e)}),r})},[]),Ut=i.useCallback(t=>{const e=t.target.files,a=Ue.current;!e||e.length===0||a===null||(Array.from(e).forEach(r=>{if(!r.type.startsWith("image/"))return;R(r,ne.IMAGE,ze.LOCAL,r.name).catch(h=>{console.warn("[BatchImageGeneration] Failed to add asset to library:",h)});const o=new FileReader;o.onload=h=>{var u;const c=(u=h.target)==null?void 0:u.result;Q(a,c)},o.readAsDataURL(r)}),xe.current&&(xe.current.value=""),Ue.current=null)},[Q,R]),Gt=i.useCallback(t=>{var e;Ue.current=t,De(!0),(e=xe.current)==null||e.click()},[]),Zt=i.useCallback(t=>{He(t),Ke(!0)},[]),Jt=i.useCallback(t=>{Be!==null&&(t.url&&Q(Be,t.url),Ke(!1),He(null))},[Be,Q]),Wt=i.useCallback((t,e)=>{t.preventDefault(),t.dataTransfer.dropEffect="copy",Pe(e)},[]),Xt=i.useCallback(t=>{const e=t.relatedTarget;(!e||!t.currentTarget.contains(e))&&Pe(null)},[]),Yt=i.useCallback((t,e)=>{t.preventDefault(),Pe(null);const a=t.dataTransfer.getData("text/library-image");if(a){Q(e,a),x.success(n==="zh"?`已添加图片到第 ${e+1} 行`:`Added image to row ${e+1}`);return}const r=t.dataTransfer.files;if(!r||r.length===0)return;let o=0;Array.from(r).forEach(h=>{if(!h.type.startsWith("image/"))return;R(h,ne.IMAGE,ze.LOCAL,h.name).catch(u=>{console.warn("[BatchImageGeneration] Failed to add asset to library:",u)});const c=new FileReader;c.onload=u=>{var p;const k=(p=u.target)==null?void 0:p.result;Q(e,k)},c.readAsDataURL(h),o++}),o>0&&x.success(n==="zh"?`已添加 ${o} 张图片到第 ${e+1} 行`:`Added ${o} images to row ${e+1}`)},[Q,n,R]),qt=i.useCallback((t,e)=>{t.dataTransfer.setData("text/library-image",e),t.dataTransfer.effectAllowed="copy"},[]),Qt=i.useCallback(t=>{const e=t.target.files;if(!e||e.length===0)return;const a=Array.from(e).filter(o=>o.type.startsWith("image/"));if(a.length===0){x.warning(n==="zh"?"请选择图片文件":"Please select image files");return}Ie(a);const r=y?y.row+1:1;nt(Math.min(r,f.length)),Ae(!0),ve.current&&(ve.current.value="")},[n,y,f.length]),es=i.useCallback(async()=>{if(L.length===0)return;const t=gs(`批量导入(${L.length}张)`),e=G,a=L.length,r=Math.ceil(a/e),o=Z-1,h=[];for(const p of L){R(p,ne.IMAGE,ze.LOCAL,p.name).catch(l=>{console.warn("[BatchImageGeneration] Failed to add asset to library:",l)});const d=await new Promise((l,m)=>{const g=new FileReader;g.onload=C=>{var $;return l(($=C.target)==null?void 0:$.result)},g.onerror=m,g.readAsDataURL(p)});h.push(d)}O(p=>{const d=[...p];let l=0,m=0;for(let g=0;g<r;g++){const C=o+g,$=[];for(let ee=0;ee<e&&l<a;ee++)$.push(h[l]),l++;C<d.length?d[C]={...d[C],images:[...d[C].images,...$]}:(d.push({id:P+m,prompt:"",size:"auto",images:$,count:1,taskIds:[]}),m++)}return d});const c=Math.min(r,f.length-o),u=Math.max(0,r-c);u>0&&Y(p=>p+u),Ie([]),Ae(!1),t();const k=n==="zh"?`已导入 ${a} 张图片,从第 ${Z} 行开始`:`Imported ${a} images starting from row ${Z}`;x.success(k)},[L,G,Z,P,f.length,n,R]),Ze=i.useCallback(()=>{Ie([]),Ae(!1)},[]),ts=i.useCallback(async()=>{try{const t=await Ye(()=>import("./xlsx-CkFp8p6R.js"),[],import.meta.url),e=[{提示词:"一只可爱的橘猫在阳光下睡觉",尺寸:"1x1",数量:1},{提示词:"未来城市的夜景,霓虹灯闪烁",尺寸:"16x9",数量:2},{提示词:"古风美女,水墨画风格",尺寸:"3x4",数量:1},{提示词:"",尺寸:"1x1",数量:1},{提示词:"",尺寸:"1x1",数量:1}],a=t.utils.book_new(),r=t.utils.json_to_sheet(e);r["!cols"]=[{wch:60},{wch:10},{wch:8}],t.utils.book_append_sheet(a,r,"批量出图模板"),t.writeFile(a,"batch-image-template.xlsx"),x.success(n==="zh"?"模板下载成功,填写后可导入使用":"Template downloaded, fill and import to use")}catch(t){console.error("Excel template download error:",t),x.error(n==="zh"?"下载失败,请稍后重试":"Download failed, please try again")}},[n]),ss=i.useCallback(async t=>{var a;const e=(a=t.target.files)==null?void 0:a[0];if(e){try{const r=await Ye(()=>import("./xlsx-CkFp8p6R.js"),[],import.meta.url),o=new FileReader;o.onload=h=>{var c;try{const u=new Uint8Array((c=h.target)==null?void 0:c.result),k=r.read(u,{type:"array"}),p=k.SheetNames[0],d=k.Sheets[p],l=r.utils.sheet_to_json(d);if(l.length===0){x.warning(n==="zh"?"Excel 文件为空":"Excel file is empty");return}const m=l.map((g,C)=>{const $=g.提示词||g.prompt||g.Prompt||"",ee=g.尺寸||g.size||g.Size||"1x1",cs=parseInt(String(g.数量||g.count||g.Count||"1"))||1,ut=g.参考图||g.images||g.Images||"",us=ut?ut.split(`
|
|
2
2
|
`).map(ue=>ue.trim()).filter(ue=>ue.length>0&&!ue.startsWith("[")&&!ue.endsWith("]")):[];return{id:P+C,prompt:String($).trim(),size:Re.includes(ee)?ee:"1x1",images:us,count:Math.max(1,cs),taskIds:[]}});O(g=>[...g,...m]),Y(g=>g+m.length),x.success(n==="zh"?`已导入 ${m.length} 行数据`:`Imported ${m.length} rows`)}catch(u){console.error("Excel import error:",u),x.error(n==="zh"?"导入失败,请检查文件格式":"Import failed, please check file format")}},o.readAsArrayBuffer(e)}catch(r){console.error("Excel library load error:",r),x.error(n==="zh"?"加载 Excel 处理库失败":"Failed to load Excel library")}ke.current&&(ke.current.value="")}},[P,n]),J=i.useCallback(t=>{if(t.taskIds.length===0)return{status:"idle",tasks:[],completedCount:0,failedCount:0};const e=b.filter(c=>t.taskIds.includes(c.id)),a=e.filter(c=>c.status===B.COMPLETED).length,r=e.filter(c=>c.status===B.FAILED).length,o=e.filter(c=>c.status===B.PENDING||c.status===B.PROCESSING).length;let h="idle";return o>0?h="generating":r>0&&a>0?h="partial":r>0?h="failed":a>0&&(h="completed"),{status:h,tasks:e,completedCount:a,failedCount:r}},[b]),as=i.useCallback(async()=>{try{const t=await Ye(()=>import("./xlsx-CkFp8p6R.js"),[],import.meta.url),e=32e3,a=d=>{const m=d.map((g,C)=>g.startsWith("data:")?`[本地图片${C+1}]`:g).join(`
|
|
3
3
|
`);return m.length>e?m.substring(0,e-20)+`
|
|
4
4
|
...[已截断]`:m},r=f.map(d=>{const l=J(d),m=l.tasks.filter(g=>{var C;return g.status===B.COMPLETED&&((C=g.result)==null?void 0:C.url)}).map(g=>g.result.url);return{提示词:d.prompt,尺寸:d.size,参考图:a(d.images),数量:d.count,预览图:a(m),状态:l.status==="idle"?"未生成":l.status==="generating"?"生成中":l.status==="completed"?"已完成":l.status==="failed"?"失败":l.status==="partial"?"部分完成":""}}),o=t.utils.book_new(),h=t.utils.json_to_sheet(r);h["!cols"]=[{wch:60},{wch:10},{wch:80},{wch:8},{wch:80},{wch:12}],t.utils.book_append_sheet(o,h,"批量出图数据");const c=new Date,u=`${c.getFullYear()}${String(c.getMonth()+1).padStart(2,"0")}${String(c.getDate()).padStart(2,"0")}`,k=`${String(c.getHours()).padStart(2,"0")}${String(c.getMinutes()).padStart(2,"0")}`,p=`batch-image-export_${u}_${k}.xlsx`;t.writeFile(o,p),x.success(n==="zh"?`已导出 ${f.length} 行数据`:`Exported ${f.length} rows`)}catch(t){console.error("Excel export error:",t),x.error(n==="zh"?"导出失败,请稍后重试":"Export failed, please try again")}},[f,J,n]),ns=i.useCallback(()=>{const t=[];if(f.forEach((e,a)=>{const{status:r}=J(e);(r==="failed"||r==="partial")&&t.push(a)}),t.length===0){x.info(n==="zh"?"没有失败的行":"No failed rows");return}U(new Set(t)),x.success(n==="zh"?`已选中 ${t.length} 个失败行`:`Selected ${t.length} failed rows`)},[f,J,n]),rs=i.useCallback(()=>{const t=new Set;f.forEach((e,a)=>{j.has(a)||t.add(a)}),U(t)},[f,j]),Je=i.useCallback((t,e=0)=>{rt(Ls(t,"image"),e)},[rt]),_e=i.useCallback((t,e=!1)=>{U(a=>{const r=new Set(a);if(e&&ye.current!==null){const o=Math.min(ye.current,t),h=Math.max(ye.current,t);for(let c=o;c<=h;c++)r.add(c)}else r.has(t)?r.delete(t):r.add(t);return r}),ye.current=t},[]),ls=i.useCallback(()=>{j.size===f.length&&f.length>0?U(new Set):U(new Set(f.map((t,e)=>e)))},[f,j.size]),is=i.useCallback(async()=>{const t=[...j].sort((a,r)=>a-r);if(t.length===0){x.warning(n==="zh"?"请先勾选要下载的行":"Please check rows to download");return}const e=[];if(t.forEach(a=>{const r=f[a];r&&r.taskIds.forEach((o,h)=>{var u;const c=b.find(k=>k.id===o);(c==null?void 0:c.status)===B.COMPLETED&&((u=c.result)!=null&&u.url)&&e.push({url:c.result.url,filename:`row${a+1}_${h+1}_${r.prompt.slice(0,20).replace(/[^\w\u4e00-\u9fa5]/g,"_")}.png`})})}),e.length===0){x.warning(n==="zh"?"选中的行没有已生成的图片":"No generated images in selected rows");return}try{x.info(n==="zh"?"正在准备下载...":"Preparing download...");const a=new Date,r=`${a.getFullYear()}${String(a.getMonth()+1).padStart(2,"0")}${String(a.getDate()).padStart(2,"0")}`,o=`${String(a.getHours()).padStart(2,"0")}${String(a.getMinutes()).padStart(2,"0")}`,h=`aitu_images_${e.length}pics_${r}_${o}.zip`,c=e.map(u=>({url:u.url,type:"image",filename:u.filename}));await fs(c,h),x.success(n==="zh"?"下载成功":"Download complete")}catch(a){console.error("Download failed:",a),x.error(n==="zh"?"下载失败":"Download failed")}},[j,f,b,n]),We=i.useCallback(async t=>{q(!0);const e=Xe.get();if(!e.apiKey){D(null),H(null);const h=await ws();if(!h){q(!1),x.warning(n==="zh"?"需要 API Key 才能生成图片":"API Key is required to generate images");return}Xe.update({apiKey:h})}const a=Date.now();let r=0,o=0;for(const{task:h,rowIndex:c}of t){const u=h.count||1,k=`batch_${h.id}_${a}`,p=h.images.map((l,m)=>({type:"url",url:l,name:`reference_${m+1}`})),d=[];for(let l=0;l<u;l++){r++;const m={prompt:h.prompt.trim(),aspectRatio:h.size,model:ge||e.imageModelName||"gemini-2.5-flash-image-vip",uploadedImages:p,batchId:k,batchIndex:l+1,batchTotal:u,globalIndex:r,autoInsertToCanvas:!0},g=v(m,bs.IMAGE);g&&(o++,d.push(g.id))}d.length>0&&O(l=>{const m=[...l];return m[c]&&(m[c]={...m[c],taskIds:[...m[c].taskIds,...d]}),m})}q(!1),o>0&&x.success(n==="zh"?`已提交 ${o} 个任务到队列`:`Submitted ${o} tasks to queue`)},[v,n,ge,O,D,H]),os=i.useCallback(async()=>{const t=[...j].sort((c,u)=>c-u);if(t.length===0){x.warning(n==="zh"?"请先勾选要生成的行":"Please check rows to generate");return}const e=t.map(c=>({task:f[c],rowIndex:c})).filter(({task:c})=>c&&c.prompt&&c.prompt.trim()!=="");if(e.length===0){x.warning(n==="zh"?"选中的行没有填写提示词":"Selected rows have no prompts");return}const a=e.filter(({task:c})=>J(c).status==="generating"),r=e.filter(({task:c})=>(c.count||1)>=100),o=e.reduce((c,{task:u})=>c+(u.count||1),0),h=o>=100;if(a.length>0||r.length>0||h){const c=[];if(a.length>0){const d=a.map(({rowIndex:l})=>l+1).join("、");c.push(n==="zh"?`第 ${d} 行正在生成中`:`Row ${d} is generating`)}if(r.length>0){const d=r.map(({task:l,rowIndex:m})=>n==="zh"?`第 ${m+1} 行数量为 ${l.count}`:`Row ${m+1} count is ${l.count}`).join("、");c.push(d)}h&&c.push(n==="zh"?`总任务数为 ${o}`:`Total task count is ${o}`);const u=c.join(n==="zh"?";":"; "),k=n==="zh"?`${u},是否继续?`:`${u}. Continue?`,p=vs.confirm({header:n==="zh"?"生成提醒":"Generation Warning",body:k,confirmBtn:n==="zh"?"继续生成":"Continue",cancelBtn:n==="zh"?"取消":"Cancel",theme:"warning",closeBtn:!0,onConfirm:()=>{p.destroy(),We(e)},onCancel:()=>{p.destroy()},onClose:()=>{p.destroy()}});return}We(e)},[f,j,n,We,J]);i.useEffect(()=>{const t=e=>{if(!y||M)return;const{row:a,col:r}=y,o=E.indexOf(r);if(e.key.length===1&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&E.includes(r)&&r!=="images"&&r!=="size"){if(e.preventDefault(),r==="count"){const c=parseInt(e.key);isNaN(c)?N(a,r,0):N(a,r,c)}else r==="prompt"&&N(a,r,e.key);D({row:a,col:r}),window.__cellEditSelectAll=!1;return}if((e.ctrlKey||e.metaKey)&&e.key==="z"&&!e.shiftKey){e.preventDefault(),ot();return}if((e.ctrlKey||e.metaKey)&&(e.key==="y"||e.key==="z"&&e.shiftKey)){e.preventDefault(),ct();return}if((e.ctrlKey||e.metaKey)&&e.key==="c"){e.preventDefault();const u=[...z].sort((k,p)=>k.row-p.row).map(k=>{var d;const p=(d=f[k.row])==null?void 0:d[k.col];return{row:k.row,col:k.col,value:p}});if(u.length>0){const k=u.map(p=>p.col==="images"?JSON.stringify(p.value):String(p.value??"")).join(`
|