Files
NianAIGC/out/_next/static/chunks/app/create/page-7119a72fc1a049c0.js
T
2026-09-02 17:02:02 +08:00

1 line
119 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[323],{652:(e,t,a)=>{"use strict";a.r(t),a.d(t,{default:()=>tW});var n=a(5155),i=a(2115),l=a(7855),r=a(7209),s=a(5299),o=a(8085),c=a(6191),d=a(8514),u=a(5917),m=a(6667),h=a(2583),p=a(9397),g=a(1786),x=a(5229),f=a(6046),b=a(9867),v=a(9559),j=a(3327),y=a(2196),w=a(4274),N=a(3586),k=a(2821),A=a(368),S=a(7937);function C(e){let{page:t,pageSize:a,total:i,label:l="分页",onPageChange:r}=e,s=M(i,a);if(s<=1)return null;let o=z(t,i,a);return(0,n.jsxs)("nav",{className:"pagination","aria-label":l,children:[(0,n.jsx)("button",{className:"icon-button",type:"button",title:"上一页",disabled:o<=1,onClick:()=>r(o-1),children:(0,n.jsx)(A.A,{size:17})}),(0,n.jsxs)("span",{className:"pager-meta",children:[o," / ",s]}),(0,n.jsx)("button",{className:"icon-button",type:"button",title:"下一页",disabled:o>=s,onClick:()=>r(o+1),children:(0,n.jsx)(S.A,{size:17})})]})}function z(e,t,a){return Math.min(Math.max(1,e),M(t,a))}function M(e,t){return Math.max(1,Math.ceil(e/t))}var I=a(3606),E=a(1873),P=a(6577),U=a(4122),T=a(6548),R=a(1360);function D(e){return"/api/assets/".concat(encodeURIComponent(e.id),"/download?inline=1")}function F(e){return"/api/assets/".concat(encodeURIComponent(e.id),"/download")}function O(e){return e.id?D({id:e.id}):e.url}function q(e,t){if(!e)return"";let a=t.find(t=>t.url===e);return a?D(a):e}function L(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"box";return"stroke"===t?"@标记".concat(e):"@标注".concat(e)}function K(e,t){var a;let n=t&&t>0?"图".concat(t):"";return"point"===e.kind&&e.point?"".concat(n,"<point>").concat(_(e.point.x)," ").concat(_(e.point.y),"</point>"):"box"===e.kind&&e.box?"".concat(n,"<bbox>").concat(_(e.box.left)," ").concat(_(e.box.top)," ").concat(_(e.box.right)," ").concat(_(e.box.bottom),"</bbox>"):"stroke"===e.kind&&(null==(a=e.points)?void 0:a.length)?"".concat(n||"图片","中的蓝色标记区域"):""}function B(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return e.replace(/@(图片|图)(\d+)/g,(e,a,n)=>"图".concat(t?1:Number(n)))}function _(e){return Math.max(0,Math.min(1e3,Math.round(e)))}function J(e,t){return e.sourceKey&&t.get(e.sourceKey)||1}function W(e){var t;return Number((null==(t=e.match(/\d+$/))?void 0:t[0])||0)}function V(e){let{mode:t,sources:a,selectedSources:l,source:r,uploading:o,annotations:c,onAnnotationsChange:d,onSelectSource:m,onToggleSource:h,onUpload:p,onInsertAnnotation:f}=e,[b,v]=(0,i.useState)("box"),[j,w]=(0,i.useState)(null),[N,A]=(0,i.useState)(null),[S,C]=(0,i.useState)(null),[z,M]=(0,i.useState)([]),D=(0,i.useRef)(null),F=et(r),q=(0,i.useMemo)(()=>new Set(l.map(et)),[l]),K=(0,i.useMemo)(()=>new Map(l.map((e,t)=>[et(e),t+1])),[l]),B=(0,i.useMemo)(()=>c.filter(e=>!e.sourceKey||e.sourceKey===F),[c,F]),_=B.find(e=>e.id===S),J=(0,i.useMemo)(()=>c.reduce((e,t)=>Math.max(e,t.index),0)+1,[c]),W=l.length>=10;function V(e){d([...c,{...e,sourceKey:F}]),C(e.id),M([])}(0,i.useEffect)(()=>{w(null),A(null),C(null),M([])},[F,t]),(0,i.useEffect)(()=>{"layers"===t&&"point"===b&&v("box")},[t,b]);let Y=K.get(F)||1;return(0,n.jsxs)("section",{className:(0,k.A)("seedream-workspace","interactive"===t?"interactive":"layers"),"aria-label":"interactive"===t?"Seedream 交互编辑":"Seedream 图层拆分",children:[(0,n.jsxs)("header",{className:"seedream-workspace-head",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:"interactive"===t?"精准编辑画布":"指定拆分区域"}),(0,n.jsx)("span",{children:"interactive"===t?"可在最多 10 张图片间切换,使用坐标或蓝色涂鸦描述编辑位置":"可留空自动全拆,也可框选或涂鸦指定希望拆出的元素"})]}),(0,n.jsx)("span",{className:"seedream-model-pill",children:"Seedream 5.0 Pro"})]}),r?(0,n.jsxs)("div",{className:"seedream-editor-shell",children:[(0,n.jsxs)("div",{className:"seedream-editor-toolbar",role:"toolbar","aria-label":"标注工具",children:[(0,n.jsxs)("span",{className:"seedream-current-image-badge",children:["图",Y]}),(0,n.jsxs)("button",{className:(0,k.A)("box"===b&&"active"),type:"button","aria-pressed":"box"===b,title:"框选区域",onClick:()=>v("box"),children:[(0,n.jsx)(I.A,{size:16}),"框选"]}),"interactive"===t?(0,n.jsxs)("button",{className:(0,k.A)("point"===b&&"active"),type:"button","aria-pressed":"point"===b,title:"点选位置",onClick:()=>v("point"),children:[(0,n.jsx)(E.A,{size:16}),"点选"]}):null,(0,n.jsxs)("button",{className:(0,k.A)("brush"===b&&"active"),type:"button","aria-pressed":"brush"===b,title:"蓝色涂鸦标记",onClick:()=>v("brush"),children:[(0,n.jsx)(P.A,{size:16}),"涂鸦"]}),(0,n.jsx)("span",{className:"seedream-editor-toolbar-divider"}),(0,n.jsx)("button",{type:"button",disabled:!B.length,title:"撤销","aria-label":"撤销当前图片的最后一个标注",onClick:function(){let e=B.at(-1);e&&(d(c.filter(t=>t.id!==e.id)),M(t=>[...t,e]),S===e.id&&C(null))},children:(0,n.jsx)(U.A,{size:16})}),(0,n.jsx)("button",{type:"button",disabled:!z.length,title:"重做","aria-label":"恢复最后撤销的标注",onClick:function(){let e=z.at(-1);e&&(d([...c,e]),M(e=>e.slice(0,-1)),C(e.id))},children:(0,n.jsx)(T.A,{size:16})}),(0,n.jsx)("button",{className:"danger",type:"button",disabled:!_,title:"删除所选标注","aria-label":"删除所选标注",onClick:function(){_&&(d(c.filter(e=>e.id!==_.id)),M(e=>[...e,_]),C(null))},children:(0,n.jsx)(R.A,{size:16})}),(0,n.jsxs)("label",{className:"seedream-toolbar-upload",title:"interactive"===t?"添加图片":"更换图片",children:[o?(0,n.jsx)(s.A,{className:"spin",size:15}):(0,n.jsx)(g.A,{size:15}),"interactive"===t?"添加图片":"更换图片",(0,n.jsx)("input",{type:"file",multiple:"interactive"===t,accept:"layers"===t?"image/png,image/jpeg":"image/*",disabled:o||"interactive"===t&&W,onChange:e=>{p(e.currentTarget.files),e.currentTarget.value=""}})]})]}),(0,n.jsx)("div",{className:"seedream-canvas-viewport",children:(0,n.jsxs)("div",{className:"seedream-canvas-stage",children:[(0,n.jsx)("img",{src:O(r),alt:r.name||"".concat("interactive"===t?"编辑":"拆分","底图"),draggable:!1}),(0,n.jsxs)("svg",{ref:D,className:(0,k.A)("seedream-annotation-canvas","tool-".concat(b)),viewBox:"0 0 1000 1000",preserveAspectRatio:"none",onPointerDown:function(e){if(!r)return;let a=H(e,D.current);if(a){if("point"===b&&"interactive"===t)return void V({id:ea(),index:J,kind:"point",point:a});if(e.currentTarget.setPointerCapture(e.pointerId),C(null),"brush"===b)return void A({points:[a]});w({start:a,current:a})}},onPointerMove:function(e){let t=H(e,D.current);if(t){if(j)return void w(e=>e?{...e,current:t}:null);N&&A(e=>{var a,n;if(!e)return null;let i=e.points.at(-1);return i&&3>(a=i,n=t,Math.hypot(a.x-n.x,a.y-n.y))?e:{points:[...e.points,t]}})}},onPointerUp:function(e){if(e.currentTarget.hasPointerCapture(e.pointerId)&&e.currentTarget.releasePointerCapture(e.pointerId),N){let e=1===N.points.length?[N.points[0],{x:Math.min(1e3,N.points[0].x+1),y:Math.min(1e3,N.points[0].y+1)}]:N.points;A(null),V({id:ea(),index:J,kind:"stroke",points:e});return}if(!j)return;let t=Q(j.start,j.current);w(null),t.right-t.left<8||t.bottom-t.top<8||V({id:ea(),index:J,kind:"box",box:t})},onPointerCancel:function(){w(null),A(null)},children:[B.map(e=>(0,n.jsx)($,{annotation:e,selected:e.id===S,onSelect:()=>C(e.id)},e.id)),j?(0,n.jsx)(G,{draft:j}):null,N?(0,n.jsx)(X,{draft:N}):null]})]})}),(0,n.jsx)("div",{className:"seedream-canvas-note",children:"interactive"===t?"蓝色涂鸦会在提交时自动合成到对应输入图;框选和点选会转换成官方坐标标签。":"蓝色涂鸦会合成到待拆图片;框选会转换为 <bbox> 坐标,不会修改原始素材。"}),(0,n.jsx)("div",{className:"seedream-annotation-strip","aria-label":"当前图片标注",children:B.length?B.map(e=>{var t;return(0,n.jsxs)("button",{type:"button",className:(0,k.A)(e.id===S&&"active"),onClick:()=>{C(e.id),f(L(e.index,e.kind))},title:"点击插入提示词",children:[(0,n.jsx)("span",{children:"point"===(t=e.kind)?(0,n.jsx)(E.A,{size:13}):"stroke"===t?(0,n.jsx)(P.A,{size:13}):(0,n.jsx)(I.A,{size:13})}),L(e.index,e.kind),(0,n.jsx)("small",{children:"插入提示词"})]},e.id)}):(0,n.jsxs)("span",{className:"seedream-annotation-empty",children:["尚未标记。可以框选、","interactive"===t?"点选或":"或","使用蓝色涂鸦。"]})})]}):(0,n.jsxs)("div",{className:"seedream-source-empty",children:[(0,n.jsx)("span",{className:"seedream-source-empty-icon","aria-hidden":"true",children:(0,n.jsx)(y.A,{size:24})}),(0,n.jsx)("strong",{children:a.length?"选择参与生成的图片":"先上传一张图片"}),(0,n.jsx)("span",{children:"interactive"===t?"可以选择多张图片进行跨图定位编辑":"模板效果预览图不会自动参与拆分"}),(0,n.jsxs)("label",{className:"button primary",children:[o?(0,n.jsx)(s.A,{className:"spin",size:16}):(0,n.jsx)(g.A,{size:16}),"上传图片",(0,n.jsx)("input",{type:"file",multiple:"interactive"===t,accept:"layers"===t?"image/png,image/jpeg":"image/*",disabled:o,onChange:e=>{p(e.currentTarget.files),e.currentTarget.value=""}})]})]}),"interactive"===t&&a.length?(0,n.jsxs)("div",{className:"seedream-source-picker",children:[(0,n.jsxs)("div",{className:"seedream-source-picker-head",children:[(0,n.jsx)("span",{children:"输入图片 ".concat(l.length,"/").concat(10)}),(0,n.jsx)("small",{children:"图片编号按选中顺序生成,用于“图1 / 图2”坐标提示词"})]}),(0,n.jsx)("div",{children:a.map(e=>{let t=et(e),a=q.has(t),i=K.get(t);return(0,n.jsxs)("article",{className:(0,k.A)("seedream-source-card",t===F&&"active",a&&"included"),children:[(0,n.jsxs)("button",{type:"button",className:"seedream-source-card-main",title:e.name||e.label,"aria-pressed":t===F,onClick:()=>{if(!a)return void h(e);m(e)},children:[(0,n.jsx)("img",{src:O(e),alt:""}),(0,n.jsx)("span",{children:e.name||e.label||"图片"})]}),(0,n.jsx)("button",{type:"button",className:"seedream-source-toggle","aria-label":a?"移除".concat(e.name||"图片"):"加入".concat(e.name||"图片"),title:a?"不参与本次生成":W?"最多选择 10 张图片":"参与本次生成",disabled:!a&&W,onClick:()=>h(e),children:a?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(u.A,{size:12}),"图",i]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(x.A,{size:12}),"未选"]})})]},t)})})]}):null]})}function $(e){var t;let{annotation:a,selected:i,onSelect:l}=e;if("point"===a.kind&&a.point)return(0,n.jsxs)("g",{className:(0,k.A)("seedream-annotation-shape",i&&"selected"),onPointerDown:e=>{e.stopPropagation(),l()},children:[(0,n.jsx)("circle",{className:"seedream-annotation-halo",cx:a.point.x,cy:a.point.y,r:"24"}),(0,n.jsx)("circle",{className:"seedream-annotation-point",cx:a.point.x,cy:a.point.y,r:"9"}),(0,n.jsx)(Y,{x:a.point.x+18,y:a.point.y-18,index:a.index})]});if("box"===a.kind&&a.box){let e=a.box.right-a.box.left,t=a.box.bottom-a.box.top;return(0,n.jsxs)("g",{className:(0,k.A)("seedream-annotation-shape",i&&"selected"),onPointerDown:e=>{e.stopPropagation(),l()},children:[(0,n.jsx)("rect",{className:"seedream-annotation-box",x:a.box.left,y:a.box.top,width:e,height:t,rx:"4"}),(0,n.jsx)(Y,{x:a.box.left+10,y:a.box.top+10,index:a.index})]})}if("stroke"===a.kind&&(null==(t=a.points)?void 0:t.length)){let e=a.points[0];return(0,n.jsxs)("g",{className:(0,k.A)("seedream-annotation-shape stroke",i&&"selected"),onPointerDown:e=>{e.stopPropagation(),l()},children:[(0,n.jsx)("path",{className:"seedream-annotation-stroke-hit",d:Z(a.points)}),(0,n.jsx)("path",{className:"seedream-annotation-stroke",d:Z(a.points)}),(0,n.jsx)(Y,{x:e.x+18,y:e.y-18,index:a.index})]})}return null}function Y(e){let{x:t,y:a,index:i}=e,l=Math.min(955,Math.max(12,t)),r=Math.min(955,Math.max(34,a));return(0,n.jsxs)("g",{className:"seedream-annotation-label",transform:"translate(".concat(l," ").concat(r,")"),children:[(0,n.jsx)("circle",{r:"20"}),(0,n.jsx)("text",{textAnchor:"middle",dominantBaseline:"central",children:i})]})}function G(e){let{draft:t}=e,a=Q(t.start,t.current);return(0,n.jsx)("rect",{className:"seedream-annotation-box draft",x:a.left,y:a.top,width:a.right-a.left,height:a.bottom-a.top,rx:"4"})}function X(e){let{draft:t}=e;return(0,n.jsx)("path",{className:"seedream-annotation-stroke draft",d:Z(t.points)})}function Q(e,t){return{left:Math.min(e.x,t.x),top:Math.min(e.y,t.y),right:Math.max(e.x,t.x),bottom:Math.max(e.y,t.y)}}function H(e,t){if(!t)return null;let a=t.getBoundingClientRect();return a.width&&a.height?{x:ee((e.clientX-a.left)/a.width*1e3),y:ee((e.clientY-a.top)/a.height*1e3)}:null}function Z(e){return e.map((e,t)=>"".concat(0===t?"M":"L").concat(e.x," ").concat(e.y)).join(" ")}function ee(e){return Math.max(0,Math.min(1e3,Math.round(e)))}function et(e){return e?e.id||e.url:""}function ea(){return"annotation-".concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,8))}var en=a(9074),ei=a(8314),el=a(3141),er=a(6651),es=a(7828),eo=a(532),ec=a(562),ed=a(8803);async function eu(e,t){let a=e;for(let i=0;i<25;i+=1){if((i>0||0===a.outputAssetIds.length)&&["failed","expired","cancelled"].includes((a=await em(e.id,t)).status)){var n;throw Error((null==(n=a.error)?void 0:n.message)||"图层编辑任务未成功完成")}if(a.outputAssetIds.length){let e=await eh(a.outputAssetIds,t);if(e.length)return e}await function(e,t){return new Promise((e,a)=>{if(t.aborted)return void a(new DOMException("Aborted","AbortError"));let n=()=>{window.clearTimeout(i),a(new DOMException("Aborted","AbortError"))},i=window.setTimeout(()=>{t.removeEventListener("abort",n),e()},800);t.addEventListener("abort",n,{once:!0})})}(800,t)}return[]}async function em(e,t){let a=await fetch("/api/generations/image/".concat(encodeURIComponent(e)),{cache:"no-store",signal:t}),n=await eg(a);if(!a.ok)throw Error(ex(n,"刷新图层编辑任务失败"));let i=n.job;if(!(null==i?void 0:i.id)||!Array.isArray(i.outputAssetIds))throw Error("图层编辑任务返回数据不完整");return i}async function eh(e,t){let a=await fetch("/api/assets",{cache:"no-store",signal:t}),n=await eg(a);if(!a.ok)throw Error(ex(n,"读取编辑结果素材失败"));let i=new Map((Array.isArray(n.assets)?n.assets.filter(ep):[]).map(e=>[e.id,e]));return e.map(e=>i.get(e)).filter(e=>!!e)}function ep(e){return!!e&&"object"==typeof e&&"string"==typeof e.id&&"string"==typeof e.name&&"string"==typeof e.url}async function eg(e){return e.json().catch(()=>({}))}function ex(e,t){return"string"==typeof e.error&&e.error.trim()?e.error:t}async function ef(e){if(!e.items.some(e=>e.visible))throw Error("请至少显示一个图层后再导出");let t=[];try{for(let a of e.items)a.visible&&t.push({item:a,bitmap:await eb(a.url)});let r=t[0].bitmap,s=ev(e.width)||r.width,o=ev(e.height)||r.height,c=document.createElement("canvas");c.width=s,c.height=o;let d=c.getContext("2d");if(!d)throw Error("当前浏览器无法创建合成画布");for(let{item:e,bitmap:a}of(d.clearRect(0,0,s,o),t)){let[t,n,i,l]=e.box,r=t/1e3*s,c=n/1e3*o,u=Math.max(1,(i-t)/1e3*s),m=Math.max(1,(l-n)/1e3*o),h=Number.isFinite(e.rotation)&&e.rotation||0;if(!h){d.drawImage(a,r,c,u,m);continue}d.save(),d.translate(r+u/2,c+m/2),d.rotate(h*Math.PI/180),d.drawImage(a,-u/2,-m/2,u,m),d.restore()}var a,n,i=await (a=c,n="image/png",new Promise((e,t)=>{a.toBlob(a=>{a?e(a):t(Error("生成合成图片失败"))},n)})),l=e.fileName;let u=URL.createObjectURL(i),m=document.createElement("a");m.href=u,m.download=l,document.body.appendChild(m),m.click(),m.remove(),window.setTimeout(()=>URL.revokeObjectURL(u),0)}finally{for(let{bitmap:e}of t)e.close()}}async function eb(e){let t=await fetch(function(e){if(!e.startsWith("/api/assets/")||!e.includes("/download"))return e;let[t,a=""]=e.split("?",2),n=new URLSearchParams(a);n.delete("inline");let i=n.toString();return i?"".concat(t,"?").concat(i):t}(e),{credentials:"same-origin"});if(!t.ok)throw Error("读取图层失败(HTTP ".concat(t.status,")"));return createImageBitmap(await t.blob())}function ev(e){return e&&Number.isFinite(e)&&e>1?Math.round(e):void 0}async function ej(e,t){if(!e.length)return;let a=new Set,n=[];for(let t=0;t<e.length;t+=1){let i=e[t],l=await fetch(i.url,{credentials:"same-origin"});if(!l.ok)throw Error("下载第 ".concat(t+1," 个图层失败"));let r=new Uint8Array(await l.arrayBuffer()),s=function(e,t){if(!t.has(e))return t.add(e),e;let a=e.lastIndexOf("."),n=a>0?e.slice(0,a):e,i=a>0?e.slice(a):"",l=2;for(;t.has("".concat(n,"-").concat(l).concat(i));)l+=1;let r="".concat(n,"-").concat(l).concat(i);return t.add(r),r}(ew(i.name)||"layer-".concat(t,".png"),a);n.push({name:new TextEncoder().encode(s),data:r,crc:function(e){let t=0xffffffff;for(let a of e)t=eN[(t^a)&255]^t>>>8;return(0xffffffff^t)>>>0}(r),offset:0})}let i=function(e){let t=[],a=0;for(let n of e){n.offset=a;let e=new Uint8Array(30+n.name.length),i=new DataView(e.buffer);i.setUint32(0,0x4034b50,!0),i.setUint16(4,20,!0),i.setUint16(6,2048,!0),i.setUint16(8,0,!0),i.setUint32(14,n.crc,!0),i.setUint32(18,n.data.length,!0),i.setUint32(22,n.data.length,!0),i.setUint16(26,n.name.length,!0),e.set(n.name,30),t.push(e,n.data),a+=e.length+n.data.length}let n=a,i=[];for(let t of e){let e=new Uint8Array(46+t.name.length),n=new DataView(e.buffer);n.setUint32(0,0x2014b50,!0),n.setUint16(4,20,!0),n.setUint16(6,20,!0),n.setUint16(8,2048,!0),n.setUint16(10,0,!0),n.setUint32(16,t.crc,!0),n.setUint32(20,t.data.length,!0),n.setUint32(24,t.data.length,!0),n.setUint16(28,t.name.length,!0),n.setUint32(42,t.offset,!0),e.set(t.name,46),i.push(e),a+=e.length}let l=new Uint8Array(22),r=new DataView(l.buffer);return r.setUint32(0,0x6054b50,!0),r.setUint16(8,e.length,!0),r.setUint16(10,e.length,!0),r.setUint32(12,a-n,!0),r.setUint32(16,n,!0),new Blob([...t,...i,l].map(ey),{type:"application/zip"})}(n),l=URL.createObjectURL(i),r=document.createElement("a");r.href=l,r.download=ew(t)||"seedream-layers.zip",document.body.appendChild(r),r.click(),r.remove(),window.setTimeout(()=>URL.revokeObjectURL(l),1e3)}function ey(e){let t=new Uint8Array(e.byteLength);return t.set(e),t.buffer}function ew(e){return e.trim().replace(/[\\/:*?"<>|\u0000-\u001f]/g,"-").replace(/^\.+/,"").slice(0,120)}let eN=Array.from({length:256},(e,t)=>{let a=t;for(let e=0;e<8;e+=1)a=1&a?0xedb88320^a>>>1:a>>>1;return a>>>0}),ek="__seedream_base__",eA=[0,0,1e3,1e3];function eS(e){var t,a,r,o,m,h;let{jobId:p,outputs:f,assetLibrary:j}=e,y=(0,i.useMemo)(()=>[...f].sort((e,t)=>e.zIndex-t.zIndex),[f]),w=y.find(e=>0===e.zIndex)||y[0],N=(0,i.useMemo)(()=>y.filter(e=>e!==w),[w,y]),A=w.size||[1,1],S="".concat(p,":").concat(y.map(e=>{var t,a;return[e.asset.id,e.zIndex,e.size,null==(t=e.boundingBox)?void 0:t.normalized,null==(a=e.boundingBox)?void 0:a.absolute].join(":")})),C=j.map(e=>"".concat(e.id,":").concat(e.updatedAt)).join("|"),z=(0,i.useMemo)(()=>{var e,t,a;return e=w,t=N,a=A,{baseAssetId:e.asset.id,baseVisible:!0,layers:t.map((e,t)=>({id:"provider-".concat(e.asset.id),assetId:e.asset.id,name:e.name,description:e.description,visible:!0,box:eC(e,a,t),rotation:0,source:"provider"}))}},[w,A,N]),[M,I]=(0,i.useState)(z),[E,P]=(0,i.useState)(()=>eT([...j,...y.map(e=>e.asset)])),[U,T]=(0,i.useState)(N[0]?"provider-".concat(N[0].asset.id):ek),[O,q]=(0,i.useState)(null),[L,K]=(0,i.useState)("loading"),[B,_]=(0,i.useState)(null),[J,W]=(0,i.useState)(null),[V,$]=(0,i.useState)(null),[Y,G]=(0,i.useState)(!1),[X,Q]=(0,i.useState)(""),[H,Z]=(0,i.useState)(!1),[ee,et]=(0,i.useState)(!1),[ea,em]=(0,i.useState)(!1),[eh,ep]=(0,i.useState)(null),eg=(0,i.useRef)(null),ex=(0,i.useRef)(null),eb=(0,i.useRef)(null),ev=(0,i.useRef)(!1),ey=(0,i.useRef)(M),ew=(0,i.useRef)(0),eN=(0,i.useRef)(eD(z)),eS=(0,i.useRef)(!1),ez=(0,i.useRef)(!1),e_=M.layers.find(e=>e.id===U),eJ=E.get(M.baseAssetId)||w.asset,eW=M.layers,eV=[...eW].reverse(),e$=Math.max(1,560*A[0]/A[1]),eY=eD(M),eG=(0,i.useMemo)(()=>{let e=X.trim().toLocaleLowerCase();return[...E.values()].filter(e=>{var t;return("image"===(t=e).kind||"reference"===t.kind||"mask"===t.kind)&&e.id!==M.baseAssetId}).filter(t=>!e||"".concat(t.name," ").concat(t.tags.join(" ")).toLocaleLowerCase().includes(e)).sort((e,t)=>t.createdAt.localeCompare(e.createdAt)).slice(0,80)},[E,M.baseAssetId,X]);async function eX(){if(!ev.current)return;if(eS.current){ez.current=!0;return}let e=ey.current,t=eD(e);if(t===eN.current)return void K("saved");eS.current=!0,ez.current=!1;let a=!1;K("saving"),_(null);try{let n=await eO(p,ew.current,e);if(409===n.status){let t=await fetch("/api/layer-compositions/".concat(encodeURIComponent(p)),{cache:"no-store"}),a=await eq(t);if(!t.ok)throw Error(eL(a,"同步图层工程版本失败"));ew.current=eF(a.composition)?a.composition.version:0,n=await eO(p,ew.current,e)}let i=await eq(n);if(!n.ok)throw Error(eL(i,"保存图层工程失败"));if(!eF(i.composition))throw Error("保存图层工程返回数据不完整");ew.current=i.composition.version,eN.current=t,a=!0,K("saved")}catch(e){K("error"),_(eK(e,"保存图层工程失败"))}finally{eS.current=!1,a&&(ez.current||eD(ey.current)!==eN.current)&&(ez.current=!1,window.setTimeout(()=>void eX(),120))}}function eQ(e){I(t=>{let a=e(t);return ey.current=a,a})}function eH(e,t){eQ(a=>({...a,layers:a.layers.map(a=>a.id===e?t(a):a)}))}function eZ(e){if(e===ek)return void eQ(e=>({...e,baseVisible:!e.baseVisible}));eH(e,e=>({...e,visible:!e.visible}))}function e0(e,t){eQ(a=>{let n=a.layers.findIndex(t=>t.id===e),i=n+t;if(n<0||i<0||i>=a.layers.length)return a;let l=[...a.layers];return[l[n],l[i]]=[l[i],l[n]],{...a,layers:l}})}function e1(e,t){eH(e,e=>({...e,box:function(e,t){let a=e[2]-e[0],n=e[3]-e[1],i=eU(t,Math.max(20/a,20/n),Math.min(1e3/a,1e3/n)),l=a*i,r=n*i,s=(e[0]+e[2])/2,o=(e[1]+e[3])/2,c=eU(s-l/2,0,1e3-l),d=eU(o-r/2,0,1e3-r);return[c,d,c+l,d+r]}(e.box,t)}))}function e2(e,t){eH(e,e=>({...e,rotation:eP(e.rotation+t)}))}function e3(e,t,a){let n;if(e.preventDefault(),e.stopPropagation(),e.currentTarget.setPointerCapture(e.pointerId),T(t.id),"rotate"===a&&eg.current){let a=eg.current.getBoundingClientRect(),i=a.left+(t.box[0]+t.box[2])/2e3*a.width,l=a.top+(t.box[1]+t.box[3])/2e3*a.height;n=Math.atan2(e.clientY-l,e.clientX-i)}q({id:t.id,mode:a,pointerId:e.pointerId,startX:e.clientX,startY:e.clientY,startBox:t.box,startRotation:t.rotation,startPointerAngle:n})}function e6(e){(null==O?void 0:O.pointerId)===e.pointerId&&q(null)}async function e5(){em(!0),W(null);try{await ef({width:A[0],height:A[1],fileName:"seedream-composition-".concat(p,".png"),items:[{url:F(eJ),visible:M.baseVisible,box:eA,rotation:0},...M.layers.map(e=>{let t=E.get(e.assetId);return t?{url:F(t),visible:e.visible,box:e.box,rotation:e.rotation}:null}).filter(e=>!!e)]})}catch(e){W(eK(e,"导出合成图片失败"))}finally{em(!1)}}async function e8(){et(!0),W(null);try{let e=[{asset:eJ,name:"00-底图-".concat(eJ.name)},...M.layers.map((e,t)=>({asset:E.get(e.assetId),name:"".concat(String(t+1).padStart(2,"0"),"-").concat(e.name)}))].filter(e=>!!e.asset);await ej(e.map(e=>({name:function(e,t){let a=t.includes(".")?t.slice(t.lastIndexOf(".")):".png",n=e.replace(/[\\/:*?"<>|]/g,"-").slice(0,120);return n.toLocaleLowerCase().endsWith(a.toLocaleLowerCase())?n:"".concat(n).concat(a)}(e.name,e.asset.name),url:F(e.asset)})),"seedream-layer-project-".concat(p,".zip"))}catch(e){W(eK(e,"打包下载失败"))}finally{et(!1)}}async function e4(e){let t=Array.from(e.target.files||[]);if(e.target.value="",t.length){if(t.some(e=>!e.type.startsWith("image/")))return void W("新增图层只支持图片文件。");Z(!0),W(null);try{let e=new FormData;t.forEach(t=>e.append("files",t));let a=await fetch("/api/assets/upload",{method:"POST",body:e}),n=await eq(a);if(!a.ok)throw Error(eL(n,"上传图层失败"));let i=Array.isArray(n.assets)?n.assets:[];if(!i.length)throw Error("上传成功,但没有返回可用图片素材");P(e=>eT([...e.values(),...i]));let l=await Promise.all(i.map(e=>eE(e,"upload",A)));eQ(e=>({...e,layers:[...e.layers,...l]})),T(l[l.length-1].id),G(!1),$("已新增 ".concat(l.length," 个图层。"))}catch(e){W(eK(e,"上传图层失败"))}finally{Z(!1)}}}async function e7(e){W(null);let t=await eE(e,"library",A);eQ(e=>({...e,layers:[...e.layers,t]})),T(t.id),G(!1),$("已把“".concat(e.name,"”加入图层工程。"))}async function e9(){var e,t;if(!eh)return;let a=ey.current.layers.find(e=>e.id===eh.layerId),n=a?E.get(a.assetId):void 0,i=eh.prompt.trim();if(!a||!n)return void ep(e=>e?{...e,error:"当前图层素材不存在"}:e);if(!i)return void ep(e=>e?{...e,error:"请先填写编辑指令"}:e);let l=new AbortController;null==(e=eb.current)||e.abort(),eb.current=l,ep(e=>e?{...e,phase:"submitting",error:void 0,result:void 0,job:void 0}:e);try{let e=await fetch("/api/generations/image",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({capability:"image.generate",engine:"seedream",prompt:"请编辑 @图片1:".concat(i),materials:[{id:n.id,url:n.url,name:n.name,label:"@图片1",type:"image"}],settings:{size:"1.5K",outputFormat:"png",optimizeMode:"standard",imageCount:1,creationMode:"interactive"}}),signal:l.signal}),a=await eq(e);if(!e.ok)throw Error(eL(a,"提交图层编辑失败"));let r=a.job;if(!(null==r?void 0:r.id))throw Error("图层编辑任务返回数据不完整");ep(e=>e?{...e,phase:"polling",job:r}:e);let s=await eB(r.id,l.signal);if("succeeded"!==s.status)throw Error((null==(t=s.error)?void 0:t.message)||"图层编辑失败");ep(e=>e?{...e,phase:"polling",job:s}:e),await tt(s,l.signal)}catch(e){if(l.signal.aborted)return;ep(t=>t?{...t,phase:"idle",error:eK(e,"图层编辑失败")}:t)}}async function te(){var e;let t=null==eh?void 0:eh.job;if(!(null==t?void 0:t.id)||"succeeded"!==t.status)return;let a=new AbortController;null==(e=eb.current)||e.abort(),eb.current=a,ep(e=>e?{...e,phase:"polling",error:void 0}:e);try{await tt(t,a.signal)}catch(e){if(a.signal.aborted)return;ep(t=>t?{...t,phase:"idle",error:eK(e,"同步编辑结果失败")}:t)}}async function tt(e,t){let a=await eu(e,t),n=a[0];if(!n)throw Error("编辑任务已完成,但结果素材同步超时;请点击“重新同步结果”,不会重复计费");P(e=>eT([...e.values(),...a])),ep(t=>t?{...t,phase:"ready",job:e,result:n,error:void 0}:t)}function ta(e){if(!(null==eh?void 0:eh.result)||!eh.job)return;let t=ey.current.layers.find(e=>e.id===eh.layerId);if(t){if("replace"===e)eH(t.id,e=>({...e,assetId:eh.result.id,source:"seedream-edit",editJobId:eh.job.id,originalAssetId:e.originalAssetId||e.assetId})),$("已用即梦编辑结果替换“".concat(t.name,"”。"));else{let e={...t,id:eR(),assetId:eh.result.id,name:"".concat(t.name," 编辑版"),source:"seedream-edit",editJobId:eh.job.id,originalAssetId:t.assetId};eQ(a=>{let n=a.layers.findIndex(e=>e.id===t.id),i=[...a.layers];return i.splice(n+1,0,e),{...a,layers:i}}),T(e.id),$("已把即梦编辑结果作为新图层加入工程。")}ep(null)}}(0,i.useEffect)(()=>{P(e=>eT([...e.values(),...j,...y.map(e=>e.asset)]))},[C,S]),(0,i.useEffect)(()=>{var e;let t=!0;return ev.current=!1,K("loading"),_(null),W(null),$(null),q(null),G(!1),ep(null),null==(e=eb.current)||e.abort(),async function(){var e,a,n;try{let[a,i]=await Promise.all([fetch("/api/layer-compositions/".concat(encodeURIComponent(p)),{cache:"no-store"}),fetch("/api/assets",{cache:"no-store"})]),l=await eq(a);if(!a.ok)throw Error(eL(l,"读取图层工程失败"));let r=i.ok?await eq(i):{};if(!t)return;let s=Array.isArray(r.assets)?r.assets:[];P(e=>eT([...e.values(),...s,...y.map(e=>e.asset)]));let o=eF(l.composition)?l.composition:null;if(!o){let e=await eO(p,0,z);409===e.status&&(e=await fetch("/api/layer-compositions/".concat(encodeURIComponent(p)),{cache:"no-store"}));let t=await eq(e);if(!e.ok)throw Error(eL(t,"初始化图层工程失败"));if(!eF(t.composition))throw Error("初始化图层工程返回数据不完整");o=t.composition}let c=o?{baseAssetId:(n=o).baseAssetId,baseVisible:n.baseVisible,layers:n.layers.map(e=>({...e,box:[...e.box]}))}:z;ew.current=(null==o?void 0:o.version)||0,ey.current=c,eN.current=eD(c),I(c),T((null==(e=c.layers[0])?void 0:e.id)||ek),K("saved")}catch(e){if(!t)return;ey.current=z,eN.current="",ew.current=0,I(z),T((null==(a=z.layers[0])?void 0:a.id)||ek),K("error"),_(eK(e,"读取图层工程失败;当前仍可临时编辑"))}finally{t&&(ev.current=!0)}}(),()=>{var e;t=!1,null==(e=eb.current)||e.abort()}},[p,S]),(0,i.useEffect)(()=>{if(ey.current=M,!ev.current||eY===eN.current)return;K(e=>"saving"===e?e:"dirty");let e=window.setTimeout(()=>void eX(),650);return()=>window.clearTimeout(e)},[eY,p]),(0,i.useEffect)(()=>()=>{if(!ev.current||eD(ey.current)===eN.current)return;if(eS.current){ez.current=!0;return}let e=ey.current;fetch("/api/layer-compositions/".concat(encodeURIComponent(p)),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({version:ew.current,...e}),keepalive:!0}).catch(()=>void 0)},[p]);let tn=e_?E.get(e_.assetId):void 0,ti=(null==eh?void 0:eh.phase)==="submitting"||(null==eh?void 0:eh.phase)==="polling",tl=(null==eh?void 0:eh.phase)!=="ready"&&(null==eh||null==(t=eh.job)?void 0:t.status)==="succeeded"&&!eh.result;return(0,n.jsxs)("div",{className:"seedream-layer-project",children:[(0,n.jsxs)("div",{className:"seedream-layer-project-status","aria-live":"polite",children:[(0,n.jsxs)("span",{className:(0,k.A)("seedream-layer-save-state","is-".concat(L)),children:["loading"===L||"saving"===L?(0,n.jsx)(s.A,{className:"spin",size:12}):"saved"===L?(0,n.jsx)(u.A,{size:12}):null,"loading"===(h=L)?"读取工程":"saving"===h?"正在保存":"dirty"===h?"等待保存":"error"===h?"保存失败":"已自动保存"]}),"error"===L?(0,n.jsx)("button",{type:"button",onClick:()=>void eX(),children:"重试保存"}):null,(0,n.jsx)("small",{children:"图层位置、层级、显隐和旋转会保存到数据库"})]}),(0,n.jsxs)("div",{className:"seedream-layer-viewer",children:[(0,n.jsxs)("div",{className:"seedream-layer-preview-column",children:[(0,n.jsxs)("div",{className:"seedream-layer-editor-toolbar",children:[(0,n.jsxs)("span",{children:[(0,n.jsx)(en.A,{size:13}),"拖动、缩放或旋转选中图层;方向键可微调"]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("button",{className:"button mini-button",type:"button",disabled:!e_,onClick:()=>e_&&e1(e_.id,.9),children:"缩小"}),(0,n.jsx)("button",{className:"button mini-button",type:"button",disabled:!e_,onClick:()=>e_&&e1(e_.id,1.1),children:"放大"}),(0,n.jsx)("button",{className:"button mini-button icon-only",title:"向左旋转 90\xb0","aria-label":"向左旋转 90\xb0",type:"button",disabled:!e_,onClick:()=>e_&&e2(e_.id,-90),children:(0,n.jsx)(ei.A,{size:13})}),(0,n.jsx)("button",{className:"button mini-button icon-only",title:"向右旋转 90\xb0","aria-label":"向右旋转 90\xb0",type:"button",disabled:!e_,onClick:()=>e_&&e2(e_.id,90),children:(0,n.jsx)(el.A,{size:13})}),(0,n.jsxs)("button",{className:"button mini-button",type:"button",onClick:function(){let e=new Map(N.map((e,t)=>[e.asset.id,eC(e,A,t)]));eQ(t=>({...t,baseVisible:!0,layers:t.layers.map(t=>({...t,visible:!0,rotation:0,box:e.get(t.assetId)||eM()}))})),q(null),W(null),$("已重置当前图层布局,新增图层仍会保留。")},children:[(0,n.jsx)(ei.A,{size:13}),"重置布局"]})]})]}),(0,n.jsxs)("div",{ref:eg,className:(0,k.A)("seedream-layer-preview",O&&"is-editing"),style:{aspectRatio:"".concat(A[0]," / ").concat(A[1]),width:"min(100%, ".concat(e$,"px)")},onPointerMove:function(e){if(!O||O.pointerId!==e.pointerId||!eg.current)return;e.preventDefault();let t=eg.current.getBoundingClientRect();if(!t.width||!t.height)return;if("rotate"===O.mode){let a=t.left+(O.startBox[0]+O.startBox[2])/2e3*t.width,n=t.top+(O.startBox[1]+O.startBox[3])/2e3*t.height,i=(Math.atan2(e.clientY-n,e.clientX-a)-(O.startPointerAngle||0))*180/Math.PI;eH(O.id,e=>({...e,rotation:eP(O.startRotation+i)}));return}let a=(e.clientX-O.startX)/t.width*1e3,n=(e.clientY-O.startY)/t.height*1e3,i="move"===O.mode?eI(O.startBox,a,n):function(e,t,a){let n=e[2]-e[0],i=e[3]-e[1],l=eU(Math.max((n+t)/n,(i+a)/i),Math.max(20/n,20/i),Math.min((1e3-e[0])/n,(1e3-e[1])/i));return[e[0],e[1],e[0]+n*l,e[1]+i*l]}(O.startBox,a,n);eH(O.id,e=>({...e,box:i}))},onPointerUp:e6,onPointerCancel:e6,onClick:()=>T(ek),children:[M.baseVisible?(0,n.jsx)("img",{className:"seedream-layer-base",src:D(eJ),alt:w.name,draggable:!1}):null,eW.map((e,t)=>{let a=E.get(e.assetId);return a&&e.visible?(0,n.jsxs)("button",{type:"button",className:(0,k.A)("seedream-layer-overlay",U===e.id&&"selected"),"aria-label":"移动".concat(e.name,"图层"),style:{left:"".concat(e.box[0]/10,"%"),top:"".concat(e.box[1]/10,"%"),width:"".concat((e.box[2]-e.box[0])/10,"%"),height:"".concat((e.box[3]-e.box[1])/10,"%"),zIndex:t+1,transform:"rotate(".concat(e.rotation,"deg)")},onPointerDown:t=>e3(t,e,"move"),onKeyDown:t=>(function(e,t){let a="ArrowLeft"===e.key?[-1,0]:"ArrowRight"===e.key?[1,0]:"ArrowUp"===e.key?[0,-1]:"ArrowDown"===e.key?[0,1]:null;if(!a)return;e.preventDefault();let n=e.shiftKey?50:10;eH(t,e=>({...e,box:eI(e.box,a[0]*n,a[1]*n)}))})(t,e.id),onClick:t=>{t.stopPropagation(),T(e.id)},children:[(0,n.jsx)("img",{src:D(a),alt:"",draggable:!1}),(0,n.jsx)("span",{className:"seedream-layer-rotation-stem","aria-hidden":"true"}),(0,n.jsx)("span",{className:"seedream-layer-rotation-handle",title:"拖动旋转","aria-hidden":"true",onPointerDown:t=>e3(t,e,"rotate"),children:(0,n.jsx)(el.A,{size:10})}),(0,n.jsx)("span",{className:"seedream-layer-resize-handle","aria-hidden":"true",onPointerDown:t=>e3(t,e,"resize")})]},e.id):null})]}),e_?(0,n.jsxs)("div",{className:"seedream-layer-inspector","aria-live":"polite",children:[(0,n.jsx)("strong",{children:e_.name}),(0,n.jsxs)("span",{children:["X ",Math.round(e_.box[0]/10),"%"]}),(0,n.jsxs)("span",{children:["Y ",Math.round(e_.box[1]/10),"%"]}),(0,n.jsxs)("span",{children:["宽 ",Math.round((e_.box[2]-e_.box[0])/10),"%"]}),(0,n.jsxs)("span",{children:["高 ",Math.round((e_.box[3]-e_.box[1])/10),"%"]}),(0,n.jsxs)("label",{children:["旋转",(0,n.jsx)("input",{type:"number",min:-180,max:180,step:1,value:Math.round(e_.rotation),onChange:e=>eH(e_.id,t=>({...t,rotation:eP(Number(e.target.value)||0)}))}),"\xb0"]})]}):(0,n.jsxs)("div",{className:"seedream-layer-inspector",children:[(0,n.jsx)("strong",{children:"底图"}),(0,n.jsx)("span",{children:"固定在画布底部"})]}),(0,n.jsxs)("div",{className:"seedream-layer-preview-actions",children:[(0,n.jsx)("span",{children:"合成导出采用当前显隐、位置、尺寸、旋转和层级"}),(0,n.jsxs)("div",{children:[(0,n.jsxs)("button",{className:"button mini-button",type:"button",disabled:ea,onClick:()=>void e5(),children:[ea?(0,n.jsx)(s.A,{className:"spin",size:14}):(0,n.jsx)(b.A,{size:14}),"导出合成 PNG"]}),(0,n.jsxs)("button",{className:"button mini-button",type:"button",disabled:ee,onClick:()=>void e8(),children:[ee?(0,n.jsx)(s.A,{className:"spin",size:14}):(0,n.jsx)(b.A,{size:14}),"工程素材 ZIP"]})]})]}),B?(0,n.jsx)("div",{className:"seedream-layer-download-error",role:"alert",children:B}):null,J?(0,n.jsx)("div",{className:"seedream-layer-download-error",role:"alert",children:J}):null,V?(0,n.jsx)("div",{className:"seedream-layer-action-notice",role:"status",children:V}):null]}),(0,n.jsxs)("div",{className:"seedream-layer-list-column",children:[(0,n.jsxs)("div",{className:"seedream-layer-list-head",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{children:"图层"}),(0,n.jsx)("small",{children:"上方图层优先显示"})]}),(0,n.jsxs)("button",{className:"button mini-button",type:"button",onClick:()=>G(e=>!e),children:[(0,n.jsx)(c.A,{size:13}),"添加图层"]})]}),Y?(0,n.jsxs)("div",{className:"seedream-layer-library",children:[(0,n.jsxs)("div",{className:"seedream-layer-library-actions",children:[(0,n.jsxs)("button",{className:"button mini-button primary",type:"button",disabled:H,onClick:()=>{var e;return null==(e=ex.current)?void 0:e.click()},children:[H?(0,n.jsx)(s.A,{className:"spin",size:13}):(0,n.jsx)(g.A,{size:13}),"上传新图片"]}),(0,n.jsxs)("label",{children:[(0,n.jsx)(er.A,{size:13}),(0,n.jsx)("input",{value:X,onChange:e=>Q(e.target.value),placeholder:"搜索素材库"})]}),(0,n.jsx)("button",{className:"icon-button",type:"button",title:"关闭素材库","aria-label":"关闭素材库",onClick:()=>G(!1),children:(0,n.jsx)(x.A,{size:14})})]}),(0,n.jsx)("input",{ref:ex,type:"file",accept:"image/*",multiple:!0,hidden:!0,onChange:e=>void e4(e)}),(0,n.jsxs)("div",{className:"seedream-layer-library-grid",children:[eG.map(e=>(0,n.jsxs)("button",{type:"button",onClick:()=>void e7(e),children:[(0,n.jsx)("img",{src:D(e),alt:""}),(0,n.jsx)("span",{title:e.name,children:e.name}),(0,n.jsxs)("small",{children:[(0,n.jsx)(l.A,{size:11}),"加入"]})]},e.id)),eG.length?null:(0,n.jsx)("div",{className:"seedream-layer-library-empty",children:"暂无匹配图片,可直接上传新图片。"})]})]}):null,(0,n.jsxs)("div",{className:"seedream-layer-list","aria-label":"拆分图层列表",children:[eV.map(e=>{var t;let a=E.get(e.assetId),i=M.layers.findIndex(t=>t.id===e.id);return(0,n.jsxs)("article",{className:(0,k.A)(U===e.id&&"active"),tabIndex:0,"aria-current":U===e.id?"true":void 0,onClick:()=>T(e.id),onKeyDown:t=>{("Enter"===t.key||" "===t.key)&&(t.preventDefault(),T(e.id))},children:[(0,n.jsx)("button",{className:"seedream-layer-visibility",type:"button",title:e.visible?"隐藏图层":"显示图层","aria-label":e.visible?"隐藏".concat(e.name):"显示".concat(e.name),onClick:t=>{t.stopPropagation(),eZ(e.id)},children:e.visible?(0,n.jsx)(es.A,{size:15}):(0,n.jsx)(eo.A,{size:15})}),(0,n.jsx)("span",{className:"seedream-layer-thumb",children:a?(0,n.jsx)("img",{src:D(a),alt:""}):(0,n.jsx)(l.A,{size:15})}),(0,n.jsxs)("span",{className:"seedream-layer-copy",children:[(0,n.jsx)("strong",{children:e.name}),(0,n.jsxs)("small",{children:["upload"===(t=e.source)?"上传图层":"library"===t?"素材库":"seedream-edit"===t?"即梦编辑":"原始拆分"," \xb7 ",Math.round(e.rotation),"\xb0"]})]}),(0,n.jsxs)("span",{className:"seedream-layer-order-actions",children:[(0,n.jsx)("button",{type:"button",title:"上移一层","aria-label":"上移".concat(e.name),disabled:i===M.layers.length-1,onClick:t=>{t.stopPropagation(),e0(e.id,1)},children:(0,n.jsx)(ec.A,{size:13})}),(0,n.jsx)("button",{type:"button",title:"下移一层","aria-label":"下移".concat(e.name),disabled:0===i,onClick:t=>{t.stopPropagation(),e0(e.id,-1)},children:(0,n.jsx)(ed.A,{size:13})})]}),(0,n.jsxs)("span",{className:"seedream-layer-row-actions",children:[(0,n.jsx)("button",{type:"button",title:"用即梦编辑此图层","aria-label":"用即梦编辑".concat(e.name),onClick:t=>{t.stopPropagation(),W(null),ep({layerId:e.id,prompt:"",phase:"idle"})},children:(0,n.jsx)(d.A,{size:13})}),(0,n.jsx)("button",{type:"button",title:"从工程移除","aria-label":"移除".concat(e.name),onClick:t=>{t.stopPropagation();var a=e.id;let n=M.layers.find(e=>e.id===a);n&&(eQ(e=>({...e,layers:e.layers.filter(e=>e.id!==a)})),T(ek),$("已从工程移除“".concat(n.name,"”,原素材仍保留在素材库。")))},children:(0,n.jsx)(R.A,{size:13})}),a?(0,n.jsx)("a",{href:F(a),title:"下载 ".concat(e.name),"aria-label":"下载 ".concat(e.name),onClick:e=>e.stopPropagation(),children:(0,n.jsx)(b.A,{size:13})}):null]})]},e.id)}),(0,n.jsxs)("article",{className:(0,k.A)(U===ek&&"active"),tabIndex:0,onClick:()=>T(ek),children:[(0,n.jsx)("button",{className:"seedream-layer-visibility",type:"button",title:M.baseVisible?"隐藏底图":"显示底图","aria-label":M.baseVisible?"隐藏底图":"显示底图",onClick:e=>{e.stopPropagation(),eZ(ek)},children:M.baseVisible?(0,n.jsx)(es.A,{size:15}):(0,n.jsx)(eo.A,{size:15})}),(0,n.jsx)("span",{className:"seedream-layer-thumb",children:(0,n.jsx)("img",{src:D(eJ),alt:""})}),(0,n.jsxs)("span",{className:"seedream-layer-copy",children:[(0,n.jsx)("strong",{children:"底图"}),(0,n.jsx)("small",{children:"固定画布"})]}),(0,n.jsx)("span",{className:"seedream-layer-fixed",children:"固定"}),(0,n.jsx)("span",{className:"seedream-layer-row-actions",children:(0,n.jsx)("a",{href:F(eJ),title:"下载底图","aria-label":"下载底图",onClick:e=>e.stopPropagation(),children:(0,n.jsx)(b.A,{size:13})})})]})]})]})]}),eh?(0,n.jsx)("div",{className:"seedream-layer-edit-backdrop",role:"presentation",children:(0,n.jsxs)("div",{className:"seedream-layer-edit-dialog",role:"dialog","aria-modal":"true","aria-labelledby":"seedream-layer-edit-title",children:[(0,n.jsxs)("header",{children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{children:"Seedream 5.0 Pro"}),(0,n.jsxs)("h3",{id:"seedream-layer-edit-title",children:["编辑图层:",null==(a=M.layers.find(e=>e.id===eh.layerId))?void 0:a.name]})]}),(0,n.jsx)("button",{className:"icon-button",type:"button",disabled:ti,"aria-label":"关闭图层编辑",title:ti?"任务提交中":"关闭",onClick:()=>ep(null),children:(0,n.jsx)(x.A,{size:16})})]}),(0,n.jsxs)("div",{className:"seedream-layer-edit-body",children:[(0,n.jsxs)("div",{className:"seedream-layer-edit-preview",children:[eh.result?(0,n.jsx)("img",{src:D(eh.result),alt:"即梦编辑结果"}):tn?(0,n.jsx)("img",{src:D(tn),alt:"待编辑图层"}):(0,n.jsx)(l.A,{size:20}),(0,n.jsx)("span",{children:eh.result?"编辑结果":"当前图层"})]}),(0,n.jsxs)("label",{children:["编辑指令",(0,n.jsx)("textarea",{value:eh.prompt,disabled:ti||"ready"===eh.phase,onChange:e=>ep(t=>t?{...t,prompt:e.target.value,error:void 0}:t),placeholder:"例如:把杯子的颜色改成蓝色,保持透明背景和主体位置"})]}),(0,n.jsx)("p",{children:tl?"编辑任务已经完成,重新同步只读取现有结果,不会再次提交任务或计费。":"会新建一个 Seedream 交互编辑任务,并按当前 Seedream 5.0 Pro 费率计费。模型可能改变透明边缘,请在替换前预览结果。"}),"polling"===eh.phase?(0,n.jsxs)("div",{className:"seedream-layer-edit-progress",children:[(0,n.jsx)(s.A,{className:"spin",size:14}),(null==(r=eh.job)?void 0:r.status)==="succeeded"?"任务已完成,正在同步结果素材":"结果生成中",",任务 ",null==(o=eh.job)?void 0:o.id]}):null,eh.error?(0,n.jsx)("div",{className:"seedream-layer-download-error",role:"alert",children:eh.error}):null]}),(0,n.jsx)("footer",{children:"ready"===eh.phase?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("button",{className:"button",type:"button",onClick:()=>ta("add"),children:[(0,n.jsx)(c.A,{size:14}),"作为新图层"]}),(0,n.jsxs)("button",{className:"button primary",type:"button",onClick:()=>ta("replace"),children:[(0,n.jsx)(u.A,{size:14}),"替换当前图层"]})]}):(0,n.jsxs)("button",{className:"button primary",type:"button",disabled:ti||!tl&&!eh.prompt.trim(),onClick:()=>void(tl?te():e9()),children:[ti?(0,n.jsx)(s.A,{className:"spin",size:14}):tl?(0,n.jsx)(v.A,{size:14}):(0,n.jsx)(d.A,{size:14}),"polling"===eh.phase?(null==(m=eh.job)?void 0:m.status)==="succeeded"?"同步结果":"等待结果":tl?"重新同步结果":"开始编辑"]})})]})}):null]})}function eC(e,t,a){var n,i;let l=null==(n=e.boundingBox)?void 0:n.normalized;if(l)return ez(l);let r=null==(i=e.boundingBox)?void 0:i.absolute;if(r&&t[0]>1&&t[1]>1)return ez([r[0]/t[0]*1e3,r[1]/t[1]*1e3,r[2]/t[0]*1e3,r[3]/t[1]*1e3]);if(e.size&&t[0]>1&&t[1]>1){let n=Math.min(900,Math.max(80,e.size[0]/t[0]*1e3)),i=Math.min(900,Math.max(80,e.size[1]/t[1]*1e3)),l=Math.min(22*a,120);return ez([(1e3-n)/2+l,(1e3-i)/2+l,(1e3+n)/2+l,(1e3+i)/2+l])}return eM(a)}function ez(e){let t=1>=Math.max(...e.map(e=>Math.abs(e)))?1e3:1,a=eU(e[0]*t,0,980),n=eU(e[1]*t,0,980),i=eU(e[2]*t,a+20,1e3),l=eU(e[3]*t,n+20,1e3);return[a,n,i,l]}function eM(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=Math.min(20*e,100);return[150+t,150+t,850,850]}function eI(e,t,a){let n=e[2]-e[0],i=e[3]-e[1],l=eU(e[0]+t,0,1e3-n),r=eU(e[1]+a,0,1e3-i);return[l,r,l+n,r+i]}async function eE(e,t,a){var n;let i=await (n=e,new Promise((e,t)=>{let a=new Image;a.onload=()=>e([a.naturalWidth,a.naturalHeight]),a.onerror=()=>t(Error("读取图片尺寸失败")),a.src=D(n)})).catch(()=>void 0);return{id:eR(),assetId:e.id,name:e.name||"新增图层",visible:!0,box:i?function(e,t){if(e[0]<=0||e[1]<=0||t[0]<=0||t[1]<=0)return eM();let a=e[0]/e[1]/(t[0]/t[1]),n=a>=1?720:Math.max(100,720*a),i=a>=1?Math.max(100,720/a):720;return[(1e3-n)/2,(1e3-i)/2,(1e3+n)/2,(1e3+i)/2]}(i,a):eM(),rotation:0,source:t}}function eP(e){let t=e%360;return t>180&&(t-=360),t<=-180&&(t+=360),Math.round(1e3*t)/1e3}function eU(e,t,a){return Math.min(a,Math.max(t,e))}function eT(e){return new Map(e.map(e=>[e.id,e]))}function eR(){let e="undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"".concat(Date.now(),"-").concat(Math.random().toString(16).slice(2));return"layer-".concat(e)}function eD(e){return JSON.stringify(e)}function eF(e){return!!e&&"object"==typeof e&&"string"==typeof e.jobId&&"string"==typeof e.baseAssetId&&"boolean"==typeof e.baseVisible&&"number"==typeof e.version&&Array.isArray(e.layers)}function eO(e,t,a){return fetch("/api/layer-compositions/".concat(encodeURIComponent(e)),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({version:t,...a})})}async function eq(e){return e.json().catch(()=>({}))}function eL(e,t){return"string"==typeof e.error&&e.error.trim()?e.error:t}function eK(e,t){return e instanceof Error&&e.message?e.message:t}async function eB(e,t){let a=Date.now()+6e5;for(;Date.now()<a;){await function(e,t){return new Promise((e,a)=>{if(t.aborted)return void a(new DOMException("Aborted","AbortError"));let n=window.setTimeout(e,1800);t.addEventListener("abort",()=>{window.clearTimeout(n),a(new DOMException("Aborted","AbortError"))},{once:!0})})}(1800,t);let a=await fetch("/api/generations/image/".concat(encodeURIComponent(e)),{cache:"no-store",signal:t}),n=await eq(a);if(!a.ok)throw Error(eL(n,"读取图层编辑任务失败"));let i=n.job;if(!i)throw Error("图层编辑任务返回数据不完整");if(["succeeded","failed","expired","cancelled"].includes(i.status))return i}throw Error("图层编辑等待超时,任务仍可在任务模块中查看")}var e_=a(7612);Array.from({length:12},(e,t)=>4+t);let eJ=["9:16","16:9","1:1","4:3","3:4","21:9","adaptive"],eW=["720p","1080p","480p"],eV="doubao-seedance-2-0-260128",e$="doubao-seedance-2-5-260628",eY=[{id:eV,label:"Seedance 2.0"},{id:e$,label:"Seedance 2.5"}];function eG(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:5,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=Number(e);if(!Number.isFinite(n))return t;let i=Math.round(n);return!1!==a.allowAuto&&-1===i?-1:Math.min(eX(a.model),Math.max(4,i))}function eX(e){return String(e||"").trim()===e$?30:15}function eQ(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:eV,a=String(e||"").trim();return!function(e){let t=String(e||"").trim();return eY.some(e=>e.id===t)}(a)?t:a}let eH=/@(参考视频|图片|图|视频|音频)(\d+)/g;function eZ(e){let t=[],a=new Set;for(let r of e.matchAll(eH)){var n,i,l;let e=r[1],s=Number(r[2]);if(!Number.isInteger(s)||s<1)continue;let o="视频"===(n=e)||"参考视频"===n?"video":"音频"===n?"audio":"image",c=(i=o,l=s,"video"===i?"@视频".concat(l):"audio"===i?"@音频".concat(l):"@图片".concat(l));a.has(c)||(a.add(c),t.push({token:c,type:o,index:s}))}return t}let e0=/[\s,。;:、((【\[]$/,e1=/^[\s,。;:、))】\]]/;function e2(e,t,a){let n=a-1;return n<0||"@"!==t[n]||t.length!==e.length+1||"".concat(t.slice(0,n)).concat(t.slice(a))!==e?null:{text:e,index:n}}function e3(e,t){let a=eZ(t).filter(t=>t.type===e).reduce((e,t)=>Math.max(e,t.index),0)+1;return e6(e,a)}function e6(e,t){return"video"===e?"@视频".concat(t):"audio"===e?"@音频".concat(t):"@图片".concat(t)}function e5(e){return"视频"===e||"参考视频"===e?"video":"音频"===e?"audio":"image"}var e8=a(4166);let e4="#2563eb";async function e7(e,t,a){let n=t.filter(e=>"stroke"===e.kind&&e.points&&e.points.length>1);if(!n.length)return null;let i=await fetch(e.id?F({id:e.id}):e.url,{credentials:"same-origin"});if(!i.ok)throw Error("读取图".concat(a,"失败,无法合成蓝色标记"));let l=await createImageBitmap(await i.blob());try{var r,s;let e=document.createElement("canvas");e.width=l.width,e.height=l.height;let t=e.getContext("2d");if(!t)throw Error("当前浏览器无法创建标记画布");for(let e of(t.drawImage(l,0,0),t.strokeStyle=e4,t.fillStyle=e4,t.lineCap="round",t.lineJoin="round",t.lineWidth=Math.max(5,Math.round(.012*Math.min(l.width,l.height))),n)){let a=e.points||[];if(a.length){for(let e of(t.beginPath(),t.moveTo(a[0].x/1e3*l.width,a[0].y/1e3*l.height),a.slice(1)))t.lineTo(e.x/1e3*l.width,e.y/1e3*l.height);t.stroke()}}let i=await (r=e,s="image/png",new Promise((e,t)=>{r.toBlob(a=>{a?e(a):t(Error("生成标记图片失败"))},s)}));return new File([i],"seedream-marked-image-".concat(a,".png"),{type:"image/png"})}finally{l.close()}}let e9=[{id:"creative",label:"创意 35",scale:35},{id:"balanced",label:"均衡 50",scale:50},{id:"precise",label:"贴合 70",scale:70},{id:"strict",label:"严格 85",scale:85}],te=[{id:"low",label:"快速",quality:"low"},{id:"medium",label:"标准",quality:"medium"},{id:"high",label:"精细",quality:"high"}],tt=["1K","1.5K","2K"],ta=["auto","1K","1.5K","2K"],tn=[{id:"png",label:"PNG"},{id:"jpeg",label:"JPEG"}],ti=[{id:"standard",label:"标准优化"},{id:"fast",label:"快速优化"}],tl=[{label:"1:1",width:2048,height:2048},{label:"4:3",width:2304,height:1728},{label:"16:9",width:2560,height:1440},{label:"9:16",width:1440,height:2560}],tr={name:"",prompt:"",previewImageUrl:"",engine:"jimeng",jimengInfluence:e9[1].id,evolinkQuality:te[1].id,seedreamSize:"1.5K",seedreamOutputFormat:"png",seedreamOptimizeMode:"standard",size:tl[0].label,sortOrder:"0"};function ts(e){var t,a,w,N,A;let{initialMode:S="image"}=e,[M,I]=(0,i.useState)(S),[E,P]=(0,i.useState)({image:"",video:""}),[U,T]=(0,i.useState)([]),[R,O]=(0,i.useState)([]),[_,$]=(0,i.useState)([]),[Y,G]=(0,i.useState)([]),[X,Q]=(0,i.useState)(!1),[H,Z]=(0,i.useState)(!1),[ee,et]=(0,i.useState)(!1),[ea,en]=(0,i.useState)(!1),[ei,el]=(0,i.useState)(null),[er,es]=(0,i.useState)(null),[eo,ec]=(0,i.useState)(null),[ed,eu]=(0,i.useState)(!1),[em,eh]=(0,i.useState)(null),[ep,eg]=(0,i.useState)(null),[ex,ef]=(0,i.useState)(null),[eb,ev]=(0,i.useState)(()=>Date.now()),[ej,ey]=(0,i.useState)(tr),[ew,eN]=(0,i.useState)(null),[ek,eA]=(0,i.useState)(!1),[eS,eC]=(0,i.useState)(null),[ez,eM]=(0,i.useState)(!1),[eI,eE]=(0,i.useState)(null),[eP,eU]=(0,i.useState)(!1),[eT,eR]=(0,i.useState)(null),[eD,eF]=(0,i.useState)(null),[eO,eq]=(0,i.useState)(tl[0]),[eL,eK]=(0,i.useState)("jimeng"),[eB,e$]=(0,i.useState)(e9[1].id),[eH,e8]=(0,i.useState)(te[1].id),[e4,ts]=(0,i.useState)("1.5K"),[tu,tm]=(0,i.useState)("auto"),[tg,tx]=(0,i.useState)("png"),[tf,tb]=(0,i.useState)("standard"),[tv,tA]=(0,i.useState)("basic"),[tS,tJ]=(0,i.useState)(null),[tW,tV]=(0,i.useState)([]),[t$,tY]=(0,i.useState)([]),[tG,tX]=(0,i.useState)([]),[tQ,tH]=(0,i.useState)("bailian"),[tZ,t0]=(0,i.useState)(eV),[t1,t2]=(0,i.useState)("9:16"),[t3,t6]=(0,i.useState)(5),[t5,t8]=(0,i.useState)("720p"),[t4,t7]=(0,i.useState)(null),[t9,ae]=(0,i.useState)(null),[at,aa]=(0,i.useState)(null),[an,ai]=(0,i.useState)(0),[al,ar]=(0,i.useState)(0),[as,ao]=(0,i.useState)(1),ac=(0,i.useRef)(null),ad=(0,i.useRef)(null),au=(0,i.useRef)(null),am=(0,i.useRef)(null),ah=(0,i.useRef)(null),ap=(0,i.useRef)(null),ag=(0,i.useRef)(null),ax="video"===M?"video":"image",af=E[ax],ab=e9.find(e=>e.id===eB)||e9[1],av=te.find(e=>e.id===eH)||te[1],aj=e9.find(e=>e.id===ej.jimengInfluence)||e9[1],ay=te.find(e=>e.id===ej.evolinkQuality)||te[1],aw=ti.find(e=>e.id===ej.seedreamOptimizeMode)||ti[0],aN=!!(ej.name.trim()&&ej.prompt.trim()&&ej.previewImageUrl.trim()),ak=(0,i.useMemo)(()=>eZ(ej.prompt),[ej.prompt]),aA=(0,i.useMemo)(()=>eZ(af),[af]),aS=(0,i.useMemo)(()=>new Set(aA.map(e=>e.token)),[aA]),aC=(0,i.useMemo)(()=>U.filter(e=>"image"===e.type),[U]),az=(0,i.useMemo)(()=>{let e=new Map(aC.map(e=>[tc(e),e]));return tW.map(t=>e.get(t)).filter(e=>!!e)},[aC,tW]),aM=(0,i.useMemo)(()=>"interactive"===tv?az.find(e=>tc(e)===tS)||az[0]:aC.find(e=>tc(e)===tS)||(1===aC.length?aC[0]:void 0),[tv,aC,tS,az]),aI=(0,i.useMemo)(()=>"interactive"===tv?az:aM?[aM]:[],[tv,az,aM]),aE=aM?tc(aM):null,aP="layers"===tv?tG:t$,aU="layers"===tv?tu:e4,aT=(0,i.useMemo)(()=>new Set(aI.map(tc)),[aI]),aR=(0,i.useMemo)(()=>aP.filter(e=>!e.sourceKey||aT.has(e.sourceKey)),[aP,aT]),aD="image"===ax&&"basic"!==tv,aF=(0,i.useMemo)(()=>aD?aA.filter(e=>"image"!==e.type||"layers"===tv&&e.index>1||"interactive"===tv&&e.index>10):[],[tv,aA,aD]),aO=(0,i.useMemo)(()=>{let e=new Set(U.map(e=>tF(e.label)).filter(e=>!!e));return aA.filter(t=>(!aD||"image"===t.type)&&(aD&&"image"===t.type?("layers"===tv?1===t.index:t.index<=10)&&aI.length<t.index:!e.has(t.token)))},[tv,aA,U,aI.length,aD]),aq=(0,i.useMemo)(()=>"image"===ax&&"basic"!==tv?function(e,t){let a=new Set(t.map(e=>L(e.index,e.kind))),n=new Set;for(let t of e.matchAll(/@(标注|标记)(\d+)/g)){let e="@".concat(t[1]).concat(t[2]);a.has(e)||n.add(e)}return[...n].sort((e,t)=>W(e)-W(t))}(af,aR):[],[ax,tv,af,aR]),aL=aD&&0===aI.length,aK="image"===ax&&"interactive"===tv&&0===aR.length,aB=("image"===ax&&"layers"===tv||!!af.trim())&&!aL&&!aK&&0===aF.length&&0===aO.length&&0===aq.length,a_=aF.length?"交互编辑和图层拆分不支持 ".concat(aF.map(e=>e.token).join("、")):aO.length?"请先上传 ".concat(aO.map(e=>e.token).join("、")):aq.length?"请删除或重新创建 ".concat(aq.join("、")):aL?"请先选择一张底图":aK?"请先框选或点选编辑位置":to(ax,tv),aJ=function(e,t,a){let n=z(t,e.length,6);return e.slice((n-1)*6,n*a)}(U,as,6),aW=(z(as,U.length,6)-1)*6,aV=(0,i.useMemo)(()=>t4?U.filter(e=>tL(e,t4.query)).slice(0,8):[],[U,t4]),a$=(0,i.useMemo)(()=>t9?function(e){let t="prompt"===e.target?(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",a=t.replace(/^@+/,"").trim().toLowerCase();return[...e].sort((e,t)=>e.index-t.index).map(e=>({token:L(e.index,e.kind),label:"box"===e.kind?"框选区域 ".concat(e.index):"point"===e.kind?"点选位置 ".concat(e.index):"蓝色标记 ".concat(e.index),caption:"画布标注"})).filter(e=>!a||[e.token,e.token.slice(1),e.label,e.caption].some(e=>e.toLowerCase().includes(a)))})(e.annotations,e.query).map(e=>({...e,type:"annotation"})):[];if("prompt"===e.target)for(let a of e.materials){let n=tF(a.label);if(n&&tL(a,e.query)&&(t.push({token:n,label:a.name||n,caption:t_(a.type),type:a.type}),t.length>=5))break}for(let a of["image","video","audio"]){let n={token:e3(a,e.prompt),label:"".concat(t_(a),"占位"),caption:"template"===e.target?"模板素材":"待上传素材",type:a};(function(e,t){var a;let n=tK(t);return!n||[e.token,e.token.replace(/^@/,""),e.label,e.caption,"annotation"===(a=e.type)?"标注":t_(a),e.type].some(e=>tK(e).includes(n))})(n,e.query)&&t.push(n)}return(function(e){let t=new Set;return e.filter(e=>!t.has(e.token)&&(t.add(e.token),!0))})(t).slice(0,8)}({target:t9.target,query:t9.query,prompt:"template"===t9.target?ej.prompt:af,materials:U,annotations:"prompt"===t9.target&&aD?aR:[]}):[],[t9,U,af,aR,aD,ej.prompt]),aY=(0,i.useMemo)(()=>{let e=new Map;for(let t of _)e.set(t.id,t);return e},[_]),aG=(0,i.useMemo)(()=>Y.find(e=>e.id===ex)||null,[Y,ex]),aX=q(null==ep?void 0:ep.previewImageUrl,_),aQ=(0,i.useMemo)(()=>Y.some(e=>!tk(e.status)),[Y]);async function aH(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>!0;Q(!0),el(null);try{let t=await fetch("/api/image-templates",{cache:"no-store"}),a=await t.json();if(!t.ok)throw Error(a.error||"读取模板失败");let n=(a.templates||[]).sort(tP);e()&&O(n)}catch(t){e()&&el(t instanceof Error?t.message:String(t))}finally{e()&&Q(!1)}}async function aZ(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>!0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t.silent||Z(!0),es(null);try{let[t,a,n]=await Promise.all([fetch("/api/assets",{cache:"no-store"}),fetch("/api/generations/image",{cache:"no-store"}),fetch("/api/generations/video",{cache:"no-store"})]),[i,l,r]=await Promise.all([t.json(),a.json(),n.json()]);if(!t.ok)throw Error(i.error||"读取资产失败");if(!a.ok)throw Error(l.error||"读取图片任务失败");if(!n.ok)throw Error(r.error||"读取视频任务失败");let s=new Map;for(let e of[...l.jobs||[],...r.jobs||[]])s.set(e.id,e);let o=[...s.values()].sort((e,t)=>t.createdAt.localeCompare(e.createdAt));e()&&($(i.assets||[]),G(o))}catch(t){e()&&es(t instanceof Error?t.message:String(t))}finally{e()&&!t.silent&&Z(!1)}}function a0(e){P(t=>({...t,[ax]:e}))}function a1(e){if(tA(e),t7(null),ae(null),eR(null),eF(null),"basic"!==e)if(eK("seedream"),"interactive"===e){let e=new Set(aC.map(tc)),t=tW.filter(t=>e.has(t)),a=tS&&e.has(tS)?tS:aC[0]?tc(aC[0]):null,n=t.length?t:a?[a]:[];tV(n),tS&&n.includes(tS)||tJ(n[0]||null)}else tS&&aC.some(e=>tc(e)===tS)||tJ(aC[0]?tc(aC[0]):null)}function a2(e,t){let a=e2(af,e,t);if(a){a0(a.text),ni("prompt",a.index);return}a0(e),t7(tq(e,t))}(0,i.useEffect)(()=>{aa(null)},[null==t4?void 0:t4.query,aV.length]),(0,i.useEffect)(()=>{t9&&window.requestAnimationFrame(()=>{var e;return null==(e=ag.current)?void 0:e.focus()})},[null==t9?void 0:t9.target,null==t9?void 0:t9.index]),(0,i.useEffect)(()=>{ao(e=>z(e,U.length,6))},[U.length]),(0,i.useEffect)(()=>{let e=new Set(aC.map(tc));tV(t=>t.filter(t=>e.has(t))),tY(t=>t.filter(t=>!t.sourceKey||e.has(t.sourceKey))),tX(t=>t.filter(t=>!t.sourceKey||e.has(t.sourceKey)))},[aC]),(0,i.useEffect)(()=>{if("interactive"===tv){if(tS&&tW.includes(tS))return;tJ(tW[0]||null);return}tS&&aC.some(e=>tc(e)===tS)||tJ(1===aC.length?tc(aC[0]):null)},[tv,aC,tW,tS]),(0,i.useEffect)(()=>(0,e_.It)(ac,e=>(0,e_.xr)(e)),[]),(0,i.useEffect)(()=>{(0,e_.c8)(ad.current)},[M,tv]),(0,i.useEffect)(()=>{(0,e_.Js)(au.current)},[eT,eD]),(0,i.useEffect)(()=>{am.current&&(0,e_.xr)(am.current,".material-card")},[U.length,as]),(0,i.useEffect)(()=>{let e=!0;return fetch("/api/health").then(e=>e.ok?e.json():null).then(t=>{var a,n;let i=null==t||null==(a=t.capabilities)?void 0:a.find(e=>"image.generate"===e.id),l=null==t||null==(n=t.capabilities)?void 0:n.find(e=>"video.generate"===e.id);if(e&&((null==i?void 0:i.engine)==="evolink"||(null==i?void 0:i.engine)==="jimeng"||(null==i?void 0:i.engine)==="bailian"||(null==i?void 0:i.engine)==="seedream")&&eK(i.engine),e&&((null==l?void 0:l.engine)==="seedance"||(null==l?void 0:l.engine)==="bailian")&&(tH(l.engine),"seedance"===l.engine)){let e=eQ(l.reqKey);t0(e),t6(t=>eG(t,5,{allowAuto:!1,model:e}))}}).catch(()=>void 0),()=>{e=!1}},[]),(0,i.useEffect)(()=>{let e=!0;return aH(()=>e),()=>{e=!1}},[]),(0,i.useEffect)(()=>{let e=!0;aZ(()=>e);let t=window.setInterval(()=>{"visible"===document.visibilityState&&aZ(()=>e,{silent:!0})},15e3);return()=>{e=!1,window.clearInterval(t)}},[]),(0,i.useEffect)(()=>{if(!aQ)return;ev(Date.now());let e=window.setInterval(()=>{ev(Date.now())},1e3);return()=>window.clearInterval(e)},[aQ]),(0,i.useEffect)(()=>{if(aG)return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e);function e(e){"Escape"===e.key&&ef(null)}},[null==aG?void 0:aG.id]),(0,i.useEffect)(()=>{let e=!0,t=window.setTimeout(async()=>{if(!aB){e&&eC(null),e&&eE(null),e&&eM(!1);return}eM(!0),eE(null);try{let t=await fetch("/api/billing/quote",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...nd(),kind:ax})}),a=await t.json().catch(()=>({}));e&&(t.ok&&a.quote?(eC(a.quote),eE(null)):(eC(null),eE("string"==typeof a.error?a.error:"计费估算暂不可用,请检查服务配置")))}catch(t){e&&(eC(null),eE("计费估算暂不可用,请检查后端服务配置"))}finally{e&&eM(!1)}},320);return()=>{e=!1,window.clearTimeout(t)}},[ax,tv,eL,eO.height,eO.width,tW,aR,tu,tf,tg,e4,tS,av.quality,ab.scale,t3,tQ,tZ,t1,t5,U,aB,af]);async function a3(e){let t=new FormData;for(let a of e)t.append("files",a);let a=await fetch("/api/assets/upload",{method:"POST",body:t}),n=await a.json();if(!a.ok)throw Error(n.error||"上传失败");return n.assets}async function a6(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=Array.from(e||[]),n=Math.max(0,10-tW.length),i="single"===t.seedreamSourceMode?a.slice(0,1):"append"===t.seedreamSourceMode?a.slice(0,n):a,l=t.expectedType;if(!i.length){a.length&&"append"===t.seedreamSourceMode&&eR("Seedream 5.0 Pro 交互编辑最多支持 10 张输入图片。");return}if(l&&i.some(e=>!tR(e,l)))return void eR("请上传".concat(t_(l),"素材。"));if("single"===t.seedreamSourceMode&&i.some(e=>!function(e){let t=e.type.toLowerCase();return"image/png"===t||"image/jpeg"===t||/\.(png|jpe?g)$/i.test(e.name)}(e)))return void eR("Seedream 5.0 Pro 图层拆分只支持 PNG 或 JPEG 输入图片。");eU(!0),eR(null),eF(null);try{let e=await a3(i);if(l&&e.some(e=>tT(e)!==l))throw Error("请上传".concat(t_(l),"素材。"));if(T(a=>{let n=[...a];return e.forEach((e,a)=>{let i=0===a?tF(t.targetLabel):void 0,l=a8(e,n,i),r=i?n.findIndex(e=>tF(e.label)===i):-1;if(r>=0){n[r]=l;return}n.push(l)}),n}),"single"===t.seedreamSourceMode&&e[0]&&(tJ(e[0].id||e[0].url),tX([])),"append"===t.seedreamSourceMode&&e.length){let t=e.map(e=>e.id||e.url);tV(e=>[...new Set([...e,...t])].slice(0,10)),tJ(t[0]),a.length>i.length&&eF("已添加 ".concat(i.length," 张图片,交互编辑最多支持 10 张输入图。"))}}catch(e){eR(e instanceof Error?e.message:String(e))}finally{eU(!1)}}async function a5(e){let t=null==e?void 0:e[0];if(t){if(!tR(t,"image"))return void el("模板预览图只能上传图片。");en(!0),el(null);try{let[e]=await a3([t]);ey(t=>({...t,previewImageUrl:D(e),name:t.name||e.name.replace(/\.[^.]+$/,"")}))}catch(e){el(e instanceof Error?e.message:String(e))}finally{en(!1)}}}function a8(e,t,a){let n=tT(e),i=tF(a);return{id:e.id,url:e.url,type:n,role:"upload",label:i&&function(e){let t=tF(e);if(t)return t.startsWith("@视频")?"video":t.startsWith("@音频")?"audio":"image"}(i)===n?i:function(e,t){let a=new Set(t.map(e=>tF(e.label)).filter(e=>!!e)),n=1;for(;a.has(tD(e,n));)n+=1;return tD(e,n)}(n,t),name:e.name}}function a4(e){var t,a;let n=ah.current;if(!n){let t=af.endsWith("\n")||!af.trim()?"":"\n";a0("".concat(af).concat(t).concat(e));return}let i=null!=(t=n.selectionStart)?t:af.length,l=null!=(a=n.selectionEnd)?a:af.length,r=af.slice(0,i),s=af.slice(l),o=r.length>0&&!/[\s,。;:、((【\[]$/.test(r),c=s.length>0&&!/^[\s,。;:、))】\]]/.test(s),d="".concat(o?" ":"").concat(e).concat(c?" ":""),u="".concat(r).concat(d).concat(s),m=r.length+d.length;a0(u),window.requestAnimationFrame(()=>{n.focus(),n.setSelectionRange(m,m)})}function a7(e){if(eo===e.id)return void(ec(null),eN(null),ae(null),t7(null),ai(0),eR(null),ew?(P(ew.promptByMode),eq(ew.imageSize),eK(ew.imageEngine),e$(ew.jimengInfluence),e8(ew.evolinkQuality),ts(ew.seedreamSize),tx(ew.seedreamOutputFormat),tb(ew.seedreamOptimizeMode)):(P(e=>({...e,[ax]:""})),eq(tl[0]),eK("basic"===tv?"jimeng":"seedream"),e$(e9[1].id),e8(te[1].id),ts("1.5K"),tx("png"),tb("standard")),eF("已取消模板选择"));ew||eN({promptByMode:{...E},imageSize:eO,imageEngine:eL,jimengInfluence:eB,evolinkQuality:eH,seedreamSize:e4,seedreamOutputFormat:tg,seedreamOptimizeMode:tf}),a9(e,"已应用模板:".concat(e.name))}function a9(e,t){if(P(t=>({...t,[ax]:e.prompt})),ec(e.id),ae(null),"image"===ax){let t=tE(e.settings.engine);t&&eK("basic"===tv?t:"seedream");let a=tl.find(t=>t.width===e.settings.width&&t.height===e.settings.height);a&&eq(a);let n=e9.find(t=>t.scale===e.settings.scale);n&&e$(n.id);let i=te.find(t=>t.quality===e.settings.quality);i&&e8(i.id),tt.includes(e.settings.size)&&ts(e.settings.size),("png"===e.settings.outputFormat||"jpeg"===e.settings.outputFormat)&&tx(e.settings.outputFormat),("standard"===e.settings.optimizeMode||"fast"===e.settings.optimizeMode)&&tb(e.settings.optimizeMode)}t7(null),ai(0),eF(t),eR(null)}function ne(e){ey({...tI(e),previewImageUrl:q(e.previewImageUrl,_)}),eh(e.id),el(null),ae(null),ar(0),eu(!0)}function nt(){eu(!1),eh(null),el(null),ae(null),ar(0)}async function na(){let e=!!em,t=em?"/api/image-templates/".concat(encodeURIComponent(em)):"/api/image-templates";et(!0),el(null);try{let a=await fetch(t,{method:e?"PATCH":"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(function(e){let t=tl.find(t=>t.label===e.size)||tl[0],a=e9.find(t=>t.id===e.jimengInfluence)||e9[1],n=te.find(t=>t.id===e.evolinkQuality)||te[1];return{name:e.name,prompt:e.prompt,previewImageUrl:e.previewImageUrl,settings:{engine:e.engine,forceSingle:!0,..."seedream"===e.engine?{size:e.seedreamSize,outputFormat:e.seedreamOutputFormat,optimizeMode:e.seedreamOptimizeMode}:{width:t.width,height:t.height},..."evolink"===e.engine?{quality:n.quality}:"jimeng"===e.engine?{scale:a.scale}:{}},sortOrder:Number(e.sortOrder||0)}}(ej))}),n=await a.json();if(!a.ok)throw Error(n.error||"保存模板失败");let i=n.template;O(e=>[...e.filter(e=>e.id!==i.id),i].sort(tP)),ey(tI(i)),eh(null),eu(!1),a9(i,e?"模板已更新并应用。":"模板已保存并应用。")}catch(e){el(e instanceof Error?e.message:String(e))}finally{et(!1)}}function nn(e){var t,a;let n=eZ(ej.prompt).filter(t=>t.type===e).reduce((e,t)=>Math.max(e,t.index),0)+1,i=tD(e,n),l=ap.current,r=ej.prompt;if(!l){let e=r.endsWith("\n")||!r.trim()?"":" ";ey(t=>({...t,prompt:"".concat(r).concat(e).concat(i," ")}));return}let s=null!=(t=l.selectionStart)?t:r.length,o=null!=(a=l.selectionEnd)?a:r.length,c=r.slice(0,s),d=r.slice(o),u=c.length>0&&!/[\s,。;:、((【\[]$/.test(c),m="".concat(u?" ":"").concat(i," "),h="".concat(c).concat(m).concat(d),p=c.length+m.length;ey(e=>({...e,prompt:h})),window.requestAnimationFrame(()=>{l.focus(),l.setSelectionRange(p,p)})}function ni(e,t){t7(null),ae({target:e,index:t,query:"",activeIndex:null})}function nl(e){ae(t=>t?{...t,query:e.replace(/^@+/,""),activeIndex:null}:t)}function nr(e){if(!t9)return;let t="template"===t9.target?ej.prompt:af,a=(null==e?void 0:e.token)||function(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"image",n=e.replace(/^@+/,"").trim().replace(/\s+/g,"");if(!n)return e3(a,t);let i=n.match(/^(参考视频|图片|图|视频|音频)(\d+)$/);if(i){let e=e5(i[1]),t=Number(i[2]);return Number.isInteger(t)&&t>0?e6(e,t):null}let l=n.match(/^(参考视频|图片|图|视频|音频)$/);return l?e3(e5(l[1]),t):null}(t9.query,t);if(!a)return;let n=function(e,t,a){let n=Math.max(0,Math.min(t,e.length)),i=e.slice(0,n),l=e.slice(n),r=i.length>0&&!e0.test(i),s=0===l.length||!e1.test(l),o="".concat(r?" ":"").concat(a).concat(s?" ":"");return{text:"".concat(i).concat(o).concat(l),cursor:i.length+o.length}}(t,t9.index,a),i=t9.target;if(ae(null),t7(null),"template"===i){ey(e=>({...e,prompt:n.text})),window.requestAnimationFrame(()=>{var e,t;null==(e=ap.current)||e.focus(),null==(t=ap.current)||t.setSelectionRange(n.cursor,n.cursor)});return}a0(n.text),window.requestAnimationFrame(()=>{var e,t;null==(e=ah.current)||e.focus(),null==(t=ah.current)||t.setSelectionRange(n.cursor,n.cursor)})}function ns(e){if(t9){if("Escape"===e.key){e.preventDefault();let t=t9.target;ae(null),window.requestAnimationFrame(()=>{var e;null==(e="template"===t?ap.current:ah.current)||e.focus()});return}if("ArrowDown"===e.key&&a$.length){e.preventDefault(),ae(e=>e?{...e,activeIndex:null===e.activeIndex?0:(e.activeIndex+1)%a$.length}:e);return}if("ArrowUp"===e.key&&a$.length){e.preventDefault(),ae(e=>e?{...e,activeIndex:null===e.activeIndex?a$.length-1:(e.activeIndex-1+a$.length)%a$.length}:e);return}if("Enter"===e.key||"Tab"===e.key){var t;e.preventDefault(),nr(a$[null!=(t=t9.activeIndex)?t:0])}}}function no(e,t){let a=e2(ej.prompt,e,t);if(a){ey(e=>({...e,prompt:a.text})),ni("template",a.index);return}ey(t=>({...t,prompt:e}))}function nc(e){var t,a;if(!e.label)return;let n=ah.current,i=null!=(t=null==n?void 0:n.selectionStart)?t:af.length,l=null!=(a=null==t4?void 0:t4.start)?a:i,r=af.slice(0,l),s=af.slice(i),o=s.length>0&&!/^[\s,。;:、))】\]]/.test(s),c="".concat(e.label).concat(o?" ":""),d="".concat(r).concat(c).concat(s),u=r.length+c.length;a0(d),t7(null),window.requestAnimationFrame(()=>{null==n||n.focus(),null==n||n.setSelectionRange(u,u)})}function nd(e){if("image"===ax){if("seedream"===eL||"basic"!==tv){let t="basic"===tv?U.filter(e=>"image"===e.type):e||aI.map((e,t)=>({...e,label:"@图片".concat(t+1)}));return{capability:"image.generate",engine:"seedream",prompt:"interactive"===tv?function(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],n=new Map(t.map(e=>[e.index,e])),i=new Map(a.map((e,t)=>[e,t+1])),l=new Set,r=B(e).replace(/@(标注|标记)(\d+)/g,(e,t,a)=>{let r=Number(a),s=n.get(r);return s&&L(r,s.kind)===e?(l.add(r),K(s,J(s,i))):e}).trim(),s=t.filter(e=>!l.has(e.index)).map(e=>"".concat("stroke"===e.kind?"标记":"标注").concat(e.index," ").concat(K(e,J(e,i)))).filter(e=>!e.endsWith(" "));return s.length?"".concat(r,"\n编辑位置:").concat(s.join(";"),"。").trim():r}(af,aR,aI.map(tc)):"layers"===tv?function(e,t){let a=new Map(t.map(e=>[e.index,e])),n=new Set,i=B(e,!0).replace(/@(标注|标记)(\d+)/g,(e,t,i)=>{let l=Number(i),r=a.get(l);return r&&L(l,r.kind)===e?(n.add(l),K(r)):e}).trim(),l=t.filter(e=>!n.has(e.index)).map(e=>K(e)).filter(Boolean);if(!l.length)return i;let r="需拆分区域:".concat(l.join(";"),"。");return i?"".concat(i,"\n").concat(r):r}(af,aR):af,materials:t,settings:{size:aU,outputFormat:tg,optimizeMode:tf,imageCount:1,creationMode:tv,..."layers"===tv?{layerDecomposition:!0}:{}}}}return{capability:"image.generate",engine:eL,prompt:af,materials:U.filter(e=>"image"===e.type),width:eO.width,height:eO.height,..."evolink"===eL?{quality:av.quality}:{scale:ab.scale},force_single:!0}}return{kind:"video",capability:"video.generate",engine:tQ,..."seedance"===tQ?{model:tZ}:{},prompt:af,materials:U,settings:{..."seedance"===tQ?{ratio:t1}:{},duration:t3,resolution:"bailian"===tQ?t5.toUpperCase():t5}}}async function nu(){let e=aI.map((e,t)=>({...e,label:"@图片".concat(t+1)})),t=(await Promise.all(aI.map(async(e,t)=>{let a=tc(e),n=aR.filter(e=>"stroke"===e.kind&&(e.sourceKey?e.sourceKey===a:0===t)),i=await e7(e,n,t+1);return i?{index:t,file:i}:null}))).filter(e=>!!e);if(!t.length)return e;let a=await a3(t.map(e=>e.file));if(a.length!==t.length)throw Error("标记图片上传不完整,请重试");return t.forEach((t,n)=>{e[t.index]=a8(a[n],[],"@图片".concat(t.index+1))}),e}async function nm(){if(aF.length)return void eR("".concat("layers"===tv?"图层拆分仅支持 1 张输入图片":"交互编辑仅支持最多 10 张输入图片,且不接受视频或音频",",请删除 ").concat(aF.map(e=>e.token).join("、"),"。"));if(aO.length)return void eR("请先上传 ".concat(aO.map(e=>e.token).join("、"),"。"));eA(!0),eR(null),eF(null);try{let e="image"===ax?"/api/generations/image":"/api/generations/video";if("image"===ax&&"seedream"===eL&&"basic"===tv&&U.filter(e=>"image"===e.type).length>10)throw Error("Seedream 5.0 Pro 最多支持 10 张参考图。");if("image"===ax&&"basic"!==tv&&!aI.length)throw Error("请先选择至少一张图片作为输入图。");if("image"===ax&&"interactive"===tv&&!aR.length)throw Error("请先框选、点选或涂鸦至少一个编辑位置。");if("image"===ax&&"interactive"===tv&&aI.length>10)throw Error("Seedream 5.0 Pro 交互编辑最多支持 10 张输入图片。");if("video"===ax&&"bailian"===tQ){let e=U.filter(e=>"image"===e.type).length;if(e<1||e>2||U.some(e=>"image"!==e.type))throw Error("百炼图生视频请上传 1 张首帧图,或按顺序上传 2 张首尾帧图。")}let t="image"===ax&&"basic"!==tv?await nu():void 0,a=nd(t),n=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}),i=await n.json();if(!n.ok)throw Error(i.error||"提交生成失败");let l=i.job;(null==l?void 0:l.id)&&G(e=>[l,...e.filter(e=>e.id!==l.id)].sort((e,t)=>t.createdAt.localeCompare(e.createdAt))),aZ(()=>!0,{silent:!0}),eF("".concat(to(ax,tv),"已提交。任务已进入任务模块,生成完成后结果可在任务详情中查看和下载。")),aD||(a0(""),ec(null),T([]),ao(1),t7(null),ai(0))}catch(e){eR(e instanceof Error?e.message:String(e))}finally{eA(!1)}}return(0,n.jsx)("div",{className:"create-studio",ref:ac,children:(0,n.jsxs)("div",{className:"create-workbench-layout with-template-column",ref:e=>{ad.current=e},"data-animate":!0,children:[(0,n.jsxs)("aside",{className:"panel image-template-column","aria-label":"模板选择",children:[(0,n.jsxs)("div",{className:"image-template-rail-head",children:[(0,n.jsx)("h2",{children:"模板选择"}),X?(0,n.jsx)(s.A,{className:"spin",size:16}):null]}),(0,n.jsxs)("button",{className:"button template-add-button",type:"button",onClick:function(){var e;ey((e=eL,{...tr,engine:e,jimengInfluence:e9[1].id,evolinkQuality:te[1].id,seedreamSize:"1.5K",seedreamOutputFormat:"png",seedreamOptimizeMode:"standard"})),eh(null),el(null),ae(null),ar(0),eu(!0)},disabled:ee,children:[(0,n.jsx)(c.A,{size:16}),"添加模板"]}),ei&&!ed?(0,n.jsx)("div",{className:"callout compact-callout",role:"alert",children:ei}):null,(0,n.jsx)("div",{className:"image-template-rail-list",children:R.length?R.map(e=>(0,n.jsxs)("article",{className:(0,k.A)("image-template-rail-card",eo===e.id&&"active"),title:e.name,children:[(0,n.jsx)("button",{className:"image-template-preview-button",type:"button",title:"放大预览","aria-label":"放大预览 ".concat(e.name),onClick:()=>eg(e),children:function(e,t){let a=q(e.previewImageUrl,t);return(0,n.jsx)("span",{className:"image-template-preview","aria-hidden":"true",children:a?(0,n.jsx)("img",{src:a,alt:""}):(0,n.jsx)(l.A,{size:22})})}(e,_)}),(0,n.jsxs)("div",{className:"image-template-card-footer",children:[(0,n.jsx)("div",{className:"image-template-card-copy",children:(0,n.jsx)("strong",{children:e.name})}),(0,n.jsx)("button",{className:"image-template-edit-button",type:"button",title:"编辑模板","aria-label":"编辑模板 ".concat(e.name),onClick:()=>ne(e),children:(0,n.jsx)(d.A,{size:14})}),(0,n.jsxs)("button",{className:"image-template-select-button",type:"button",onClick:()=>a7(e),title:"选择模板 ".concat(e.name),"aria-pressed":eo===e.id,children:[eo===e.id?(0,n.jsx)(u.A,{size:14}):(0,n.jsx)(c.A,{size:14}),eo===e.id?"取消选择":"选择模板"]})]})]},e.id)):X||ei?null:(0,n.jsx)("div",{className:"template-empty compact",children:"暂无模板"})})]}),(0,n.jsxs)("section",{className:"panel create-workbench-panel create-center-panel",children:[(0,n.jsxs)("div",{className:"create-center-head",children:[(0,n.jsx)("h2",{children:"制作中心"}),(0,n.jsxs)("div",{className:"create-mode-bar",children:[(0,n.jsxs)("div",{className:"segmented mode-switch","aria-label":"创作类型",children:[(0,n.jsxs)("button",{type:"button",className:(0,k.A)("image"===M&&"active"),"aria-pressed":"image"===M,onClick:()=>I("image"),children:[(0,n.jsx)(l.A,{size:17}),"图片"]}),(0,n.jsxs)("button",{type:"button",className:(0,k.A)("video"===M&&"active"),"aria-pressed":"video"===M,onClick:()=>I("video"),children:[(0,n.jsx)(r.A,{size:17}),"视频"]})]}),(0,n.jsx)("div",{className:"toolbar create-actions",children:(0,n.jsxs)("button",{className:"button primary create-submit-button",type:"button",disabled:ek||!aB,onClick:nm,"aria-label":to(ax,tv),title:a_,children:[ek?(0,n.jsx)(s.A,{className:"spin",size:18}):(0,n.jsx)(o.A,{size:18}),(0,n.jsx)("span",{className:"create-submit-label",children:to(ax,tv)})]})})]})]}),(0,n.jsxs)("div",{className:"create-workbench-grid",children:[(0,n.jsxs)("div",{className:"create-main-column",children:[eT||eD?(0,n.jsxs)("div",{className:"studio-messages top-studio-messages",ref:au,children:[eT?(0,n.jsx)("div",{className:"callout",role:"alert",children:eT}):null,eD?(0,n.jsx)("div",{className:"callout success-callout",role:"status","aria-live":"polite",children:eD}):null]}):null,"image"===ax?(0,n.jsxs)("div",{className:"seedream-creation-mode-bar","aria-label":"图片创作方式",children:[(0,n.jsxs)("button",{type:"button",className:(0,k.A)("basic"===tv&&"active"),"aria-pressed":"basic"===tv,onClick:()=>a1("basic"),children:[(0,n.jsx)(m.A,{size:15}),(0,n.jsx)("span",{children:"基础生图"})]}),(0,n.jsxs)("button",{type:"button",className:(0,k.A)("interactive"===tv&&"active"),"aria-pressed":"interactive"===tv,onClick:()=>a1("interactive"),children:[(0,n.jsx)(h.A,{size:15}),(0,n.jsx)("span",{children:"交互编辑"})]}),(0,n.jsxs)("button",{type:"button",className:(0,k.A)("layers"===tv&&"active"),"aria-pressed":"layers"===tv,onClick:()=>a1("layers"),children:[(0,n.jsx)(p.A,{size:15}),(0,n.jsx)("span",{children:"图层拆分"})]})]}):null,aD?(0,n.jsx)(V,{mode:tv,sources:aC,selectedSources:aI,source:aM,uploading:eP,annotations:aR,onAnnotationsChange:e=>{"layers"===tv?tX(e):tY(e)},onSelectSource:function(e){let t=tc(e);if("interactive"===tv){tW.includes(t)&&tJ(t);return}t!==aE&&tX([]),tJ(t)},onToggleSource:function(e){let t=tc(e);if(tW.includes(t)){let e=tW.filter(e=>e!==t);tV(e),tY(e=>e.filter(e=>e.sourceKey!==t)),tS===t&&tJ(e[0]||null);return}if(tW.length>=10)return void eR("Seedream 5.0 Pro 交互编辑最多支持 10 张输入图片。");tV(e=>[...e,t]),tJ(t),eR(null)},onUpload:e=>void a6(e,{expectedType:"image",seedreamSourceMode:"interactive"===tv?"append":"single"}),onInsertAnnotation:a4}):null,(0,n.jsxs)("div",{className:(0,k.A)("field prompt-field",aD&&"specialized-prompt-field"),children:[(0,n.jsxs)("div",{className:"prompt-label-row",children:[(0,n.jsx)("label",{htmlFor:"createPrompt",children:(t=ax,a=tv,"video"===t?"视频提示词":"interactive"===a?"编辑指令":"layers"===a?"拆分要求(可选)":"图片提示词")}),(0,n.jsxs)("label",{className:"icon-button prompt-upload-button",title:"上传素材","aria-label":"上传素材",children:[eP?(0,n.jsx)(s.A,{className:"spin",size:18}):(0,n.jsx)(g.A,{size:18}),(0,n.jsx)("input",{type:"file",multiple:!aD||"interactive"===tv,accept:aD?"layers"===tv?"image/png,image/jpeg":"image/*":"image/*,video/*,audio/*",onChange:e=>{a6(e.target.files,aD?{expectedType:"image",seedreamSourceMode:"interactive"===tv?"append":"single"}:{}),e.currentTarget.value=""}})]})]}),(0,n.jsxs)("div",{className:"prompt-editor-wrap",children:[(0,n.jsx)("div",{className:"prompt-token-layer","aria-hidden":"true",children:(0,n.jsx)("div",{style:{transform:"translateY(-".concat(an,"px)")},children:tB(af,U,"image"===ax?aR:[])})}),(0,n.jsx)("textarea",{id:"createPrompt",ref:ah,value:af,onChange:e=>{a2(e.target.value,e.target.selectionStart)},onInput:e=>a2(e.currentTarget.value,e.currentTarget.selectionStart),onClick:e=>{t7(tq(e.currentTarget.value,e.currentTarget.selectionStart))},onKeyDown:function(e){if(t4){if("Escape"===e.key)return void t7(null);aV.length&&("ArrowDown"===e.key&&(e.preventDefault(),aa(e=>null===e?0:(e+1)%aV.length)),"ArrowUp"===e.key&&(e.preventDefault(),aa(e=>null===e?aV.length-1:(e-1+aV.length)%aV.length)),("Enter"===e.key||"Tab"===e.key)&&(e.preventDefault(),nc(aV[null!=at?at:0]||aV[0])))}},onKeyUp:e=>{t7(tq(e.currentTarget.value,e.currentTarget.selectionStart))},onScroll:e=>ai(e.currentTarget.scrollTop),placeholder:(w=ax,N=tv,"video"===w?"输入视频内容提示词,键入 @ 选择已上传素材":"interactive"===N?"例如:把 @标注1 内的衣服改成蓝色;或将 @标注1 的主体放到 @标注2 位置":"layers"===N?"留空自动全拆;也可以框选后输入:拆出 @标注1 内的标题文字":"输入营销内容提示词,键入 @ 选择已上传素材")}),(null==t9?void 0:t9.target)==="prompt"?tU(t9,a$,ag,nl,ns,nr):null,!t9&&t4&&aV.length?(0,n.jsx)("div",{className:"mention-popover",children:aV.map((e,t)=>(0,n.jsxs)("button",{className:(0,k.A)("mention-option",t===at&&"active"),type:"button",onMouseDown:t=>{t.preventDefault(),nc(e)},children:[tM(e,"tiny"),(0,n.jsx)("span",{className:"chip-token",children:e.label}),(0,n.jsx)("span",{className:"chip-name",children:e.name||e.url}),(0,n.jsx)("span",{className:"mention-kind",children:t_(e.type)})]},"".concat(e.label,"-").concat(e.url)))}):null]}),aF.length?(0,n.jsxs)("div",{className:"specialized-prompt-warning",role:"alert",children:["layers"===tv?"图层拆分仅接受 1 张输入图片":"交互编辑仅接受最多 10 张输入图片,不接受视频或音频",",请从提示词中删除"," ",aF.map(e=>e.token).join("、"),"。"]}):null,aO.length?(0,n.jsx)("div",{className:"material-placeholder-board","aria-label":"待上传模板素材",children:aO.map(e=>{var t;return(0,n.jsxs)("label",{className:(0,k.A)("material-placeholder-card",e.type,eP&&"uploading"),title:"上传".concat(e.token),children:[(0,n.jsx)("span",{className:"material-placeholder-icon","aria-hidden":"true",children:eP?(0,n.jsx)(s.A,{className:"spin",size:18}):(0,n.jsx)(g.A,{size:18})}),(0,n.jsxs)("span",{className:"material-placeholder-copy",children:[(0,n.jsx)("span",{className:"chip-token",children:e.token}),(0,n.jsxs)("span",{className:"material-placeholder-state",children:["待上传",t_(e.type)]})]}),(0,n.jsx)("input",{type:"file",accept:aD&&"layers"===tv?"image/png,image/jpeg":"video"===(t=e.type)?"video/*":"audio"===t?"audio/*":"image/*",disabled:eP,onChange:t=>{a6(t.target.files,{targetLabel:e.token,expectedType:e.type,...aD?{seedreamSourceMode:"interactive"===tv?"append":"single"}:{}}),t.currentTarget.value=""}})]},e.token)})}):null,U.length&&!aD?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"material-board prompt-material-board","aria-label":"已上传素材",ref:am,children:aJ.map((e,t)=>(0,n.jsxs)("article",{className:(0,k.A)("material-card",e.type,tO(e,aS)?"referenced":"missing"),children:[(0,n.jsxs)("button",{className:"material-card-main",type:"button",title:"".concat(e.label||""," ").concat(e.name||e.url),onClick:()=>{var t;(t=e.label)&&a4(t)},children:[tM(e,"large"),(0,n.jsxs)("span",{className:"material-card-copy",children:[(0,n.jsxs)("span",{className:"material-card-head",children:[(0,n.jsx)("span",{className:"chip-token",children:e.label}),(0,n.jsx)("span",{className:"material-state",children:tO(e,aS)?"已引用":"未引用"})]}),(0,n.jsx)("span",{className:"chip-name",children:e.name||e.url})]})]}),(0,n.jsx)("button",{className:"material-remove",type:"button",title:"移除素材",onClick:e=>{var a;e.stopPropagation(),a=aW+t,T(e=>e.filter((e,t)=>t!==a))},children:(0,n.jsx)(x.A,{size:14,"aria-hidden":"true"})})]},"".concat(e.url,"-").concat(aW+t)))}),(0,n.jsx)(C,{page:as,pageSize:6,total:U.length,label:"素材分页",onPageChange:ao})]}):null]}),(0,n.jsxs)("div",{className:"generation-settings-row",children:[(0,n.jsx)("div",{className:"inline-settings",children:"image"===ax?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"field inline-field",children:[(0,n.jsx)("label",{htmlFor:"imageEngine",children:"生图引擎"}),(0,n.jsxs)("select",{id:"imageEngine",value:aD?"seedream":eL,disabled:aD,onChange:e=>eK(tE(e.target.value)||"jimeng"),children:[(0,n.jsx)("option",{value:"jimeng",children:"即梦"}),(0,n.jsx)("option",{value:"seedream",children:"Seedream 5.0 Pro"}),(0,n.jsx)("option",{value:"evolink",children:"Image2"}),(0,n.jsx)("option",{value:"bailian",children:"阿里云百炼"})]})]}),(0,n.jsxs)("div",{className:"field inline-field",children:[(0,n.jsx)("label",{htmlFor:"imageSize",children:"seedream"===eL?"分辨率":"画幅"}),"seedream"===eL?(0,n.jsx)("select",{id:"imageSize",value:aU,onChange:e=>{"layers"===tv?tm(e.target.value):ts(e.target.value)},children:("layers"===tv?ta:tt).map(e=>(0,n.jsx)("option",{value:e,children:"auto"===e?"自动(跟随输入图)":e},e))}):(0,n.jsx)("select",{id:"imageSize",value:eO.label,onChange:e=>eq(tl.find(t=>t.label===e.target.value)||tl[0]),children:tl.map(e=>(0,n.jsx)("option",{children:e.label},e.label))})]}),(0,n.jsxs)("div",{className:"field inline-field",children:[(0,n.jsx)("label",{htmlFor:"imageEngineTuning",children:"evolink"===eL?"生成质量":"bailian"===eL?"生成模式":"seedream"===eL?"提示词优化":"文本影响"}),"evolink"===eL?(0,n.jsx)("select",{id:"imageEngineTuning",value:eH,onChange:e=>e8(e.target.value),children:te.map(e=>(0,n.jsx)("option",{value:e.id,children:e.label},e.id))}):"bailian"===eL?(0,n.jsx)("select",{id:"imageEngineTuning",value:"thinking",disabled:!0,children:(0,n.jsx)("option",{value:"thinking",children:"智能推理"})}):"seedream"===eL?(0,n.jsx)("select",{id:"imageEngineTuning",value:tf,onChange:e=>tb(e.target.value),children:ti.map(e=>(0,n.jsx)("option",{value:e.id,children:e.label},e.id))}):(0,n.jsx)("select",{id:"imageEngineTuning",value:eB,onChange:e=>e$(e.target.value),children:e9.map(e=>(0,n.jsx)("option",{value:e.id,children:e.label},e.id))})]}),"seedream"===eL?(0,n.jsxs)("div",{className:"field inline-field",children:[(0,n.jsx)("label",{htmlFor:"seedreamOutputFormat",children:"输出格式"}),(0,n.jsx)("select",{id:"seedreamOutputFormat",value:tg,onChange:e=>tx(e.target.value),children:tn.map(e=>(0,n.jsx)("option",{value:e.id,children:e.label},e.id))})]}):null]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"field inline-field",children:[(0,n.jsx)("label",{htmlFor:"videoEngine",children:"视频引擎"}),(0,n.jsxs)("select",{id:"videoEngine",value:tQ,onChange:e=>{let t="bailian"===e.target.value?"bailian":"seedance";tH(t),t6(e=>"bailian"===t?Math.min(15,Math.max(2,e)):eG(e,5,{allowAuto:!1,model:tZ}))},children:[(0,n.jsx)("option",{value:"seedance",children:"Seedance"}),(0,n.jsx)("option",{value:"bailian",children:"阿里云百炼"})]})]}),"seedance"===tQ?(0,n.jsxs)("div",{className:"field inline-field",children:[(0,n.jsx)("label",{htmlFor:"videoModel",children:"Seedance 模型"}),(0,n.jsx)("select",{id:"videoModel",value:tZ,onChange:e=>{let t=eQ(e.target.value);t0(t),t6(e=>eG(e,5,{allowAuto:!1,model:t}))},children:eY.map(e=>(0,n.jsx)("option",{value:e.id,children:e.label},e.id))})]}):null,"seedance"===tQ?(0,n.jsxs)("div",{className:"field inline-field",children:[(0,n.jsx)("label",{htmlFor:"videoRatio",children:"比例"}),(0,n.jsx)("select",{id:"videoRatio",value:t1,onChange:e=>t2(e.target.value),children:eJ.map(e=>(0,n.jsx)("option",{value:e,children:"adaptive"===e?"自适应":e},e))})]}):null,(0,n.jsxs)("div",{className:"field inline-field",children:[(0,n.jsx)("label",{htmlFor:"videoDuration",children:"时长"}),(0,n.jsx)("select",{id:"videoDuration",value:t3,onChange:e=>t6(eG(e.target.value,t3,{allowAuto:!1,model:tZ})),children:("bailian"===tQ?Array.from({length:14},(e,t)=>t+2):Array.from({length:eX(tZ)-4+1},(e,t)=>4+t)).map(e=>(0,n.jsxs)("option",{value:e,children:[e," 秒"]},e))})]}),(0,n.jsxs)("div",{className:"field inline-field",children:[(0,n.jsx)("label",{htmlFor:"videoResolution",children:"清晰度"}),(0,n.jsx)("select",{id:"videoResolution",value:t5,onChange:e=>t8(e.target.value),children:("bailian"===tQ?["720p","1080p"]:eW).map(e=>(0,n.jsx)("option",{value:e,children:e},e))})]})]})}),(0,n.jsx)(tp,{quote:eS,loading:ez,error:eI,reserved:"image"===ax&&"layers"===tv})]})]}),ed?(0,n.jsx)("div",{className:"template-editor-backdrop",role:"dialog","aria-modal":"true","aria-label":em?"编辑模板":"添加模板",children:(0,n.jsxs)("div",{className:"template-editor-dialog",children:[(0,n.jsxs)("div",{className:"template-editor-head",children:[(0,n.jsxs)("div",{className:"template-editor-title",children:[(0,n.jsx)("span",{className:"template-editor-mark","aria-hidden":"true",children:(0,n.jsx)(l.A,{size:18})}),(0,n.jsx)("h2",{children:em?"编辑模板":"添加模板"})]}),(0,n.jsx)("button",{className:"icon-button",type:"button",title:"关闭","aria-label":"关闭",onClick:nt,disabled:ee,children:(0,n.jsx)(x.A,{size:16})})]}),ei?(0,n.jsx)("div",{className:"callout compact-callout",role:"alert",children:ei}):null,(0,n.jsxs)("div",{className:"template-editor-body",children:[(0,n.jsxs)("aside",{className:"template-editor-preview-pane",children:[(0,n.jsxs)("div",{className:"template-preview-pane-head",children:[(0,n.jsx)("span",{children:"效果预览图"}),(0,n.jsx)("span",{className:(0,k.A)("template-required-pill",ej.previewImageUrl&&"complete"),children:ej.previewImageUrl?"已上传":"必填"})]}),(0,n.jsxs)("label",{className:(0,k.A)("template-preview-uploader",ej.previewImageUrl&&"has-image",ea&&"uploading"),children:[(0,n.jsx)("span",{className:"template-preview-uploader-media","aria-hidden":"true",children:ea?(0,n.jsx)(s.A,{className:"spin",size:22}):ej.previewImageUrl?(0,n.jsx)("img",{src:ej.previewImageUrl,alt:""}):(0,n.jsx)(g.A,{size:22})}),(0,n.jsx)("span",{children:ej.previewImageUrl?"重新上传":"点击上传"}),(0,n.jsx)("input",{type:"file",accept:"image/*",disabled:ea,onChange:e=>{a5(e.target.files),e.currentTarget.value=""}})]}),(0,n.jsxs)("div",{className:"template-preview-meta","aria-label":"模板参数预览",children:[(0,n.jsx)("span",{children:"evolink"===(A=ej.engine)?"Image2":"bailian"===A?"百炼":"seedream"===A?"Seedream 5.0":"即梦"}),(0,n.jsx)("span",{children:"evolink"===ej.engine?ay.label:"bailian"===ej.engine?"智能推理":"seedream"===ej.engine?aw.label:aj.label}),(0,n.jsx)("span",{children:"seedream"===ej.engine?ej.seedreamSize:ej.size})]})]}),(0,n.jsxs)("div",{className:"template-inline-form template-editor-form",children:[(0,n.jsxs)("label",{className:"field",children:[(0,n.jsx)("span",{children:"模板名称"}),(0,n.jsx)("input",{value:ej.name,onChange:e=>ey(t=>({...t,name:e.target.value}))})]}),(0,n.jsxs)("div",{className:"field template-engine-field",children:[(0,n.jsx)("span",{children:"生图引擎"}),(0,n.jsxs)("div",{className:"segmented template-engine-choice","aria-label":"生图引擎",children:[(0,n.jsx)("button",{type:"button",className:(0,k.A)("jimeng"===ej.engine&&"active"),"aria-pressed":"jimeng"===ej.engine,onClick:()=>ey(e=>({...e,engine:"jimeng"})),children:"即梦"}),(0,n.jsx)("button",{type:"button",className:(0,k.A)("evolink"===ej.engine&&"active"),"aria-pressed":"evolink"===ej.engine,onClick:()=>ey(e=>({...e,engine:"evolink"})),children:"Image2"}),(0,n.jsx)("button",{type:"button",className:(0,k.A)("seedream"===ej.engine&&"active"),"aria-pressed":"seedream"===ej.engine,onClick:()=>ey(e=>({...e,engine:"seedream"})),children:"Seedream 5.0"}),(0,n.jsx)("button",{type:"button",className:(0,k.A)("bailian"===ej.engine&&"active"),"aria-pressed":"bailian"===ej.engine,onClick:()=>ey(e=>({...e,engine:"bailian"})),children:"阿里云百炼"})]})]}),(0,n.jsxs)("label",{className:"field",children:[(0,n.jsx)("span",{children:"evolink"===ej.engine?"生成质量":"bailian"===ej.engine?"生成模式":"seedream"===ej.engine?"提示词优化":"文本影响"}),"evolink"===ej.engine?(0,n.jsx)("select",{value:ej.evolinkQuality,onChange:e=>ey(t=>({...t,evolinkQuality:e.target.value})),children:te.map(e=>(0,n.jsx)("option",{value:e.id,children:e.label},e.id))}):"bailian"===ej.engine?(0,n.jsx)("select",{value:"thinking",disabled:!0,children:(0,n.jsx)("option",{value:"thinking",children:"智能推理"})}):"seedream"===ej.engine?(0,n.jsx)("select",{value:ej.seedreamOptimizeMode,onChange:e=>ey(t=>({...t,seedreamOptimizeMode:e.target.value})),children:ti.map(e=>(0,n.jsx)("option",{value:e.id,children:e.label},e.id))}):(0,n.jsx)("select",{value:ej.jimengInfluence,onChange:e=>ey(t=>({...t,jimengInfluence:e.target.value})),children:e9.map(e=>(0,n.jsx)("option",{value:e.id,children:e.label},e.id))})]}),(0,n.jsxs)("label",{className:"field",children:[(0,n.jsx)("span",{children:"seedream"===ej.engine?"分辨率":"画幅"}),"seedream"===ej.engine?(0,n.jsx)("select",{value:ej.seedreamSize,onChange:e=>ey(t=>({...t,seedreamSize:e.target.value})),children:tt.map(e=>(0,n.jsx)("option",{value:e,children:e},e))}):(0,n.jsx)("select",{value:ej.size,onChange:e=>ey(t=>({...t,size:e.target.value})),children:tl.map(e=>(0,n.jsx)("option",{value:e.label,children:e.label},e.label))})]}),"seedream"===ej.engine?(0,n.jsxs)("label",{className:"field",children:[(0,n.jsx)("span",{children:"输出格式"}),(0,n.jsx)("select",{value:ej.seedreamOutputFormat,onChange:e=>ey(t=>({...t,seedreamOutputFormat:e.target.value})),children:tn.map(e=>(0,n.jsx)("option",{value:e.id,children:e.label},e.id))})]}):null,(0,n.jsxs)("label",{className:"field",children:[(0,n.jsx)("span",{children:"排序"}),(0,n.jsx)("input",{type:"number",value:ej.sortOrder,onChange:e=>ey(t=>({...t,sortOrder:e.target.value}))})]}),(0,n.jsxs)("label",{className:"field template-prompt-field",children:[(0,n.jsx)("span",{children:"预设提示词"}),(0,n.jsxs)("div",{className:"template-placeholder-tools","aria-label":"插入占位符",children:[(0,n.jsxs)("button",{type:"button",onClick:()=>nn("image"),children:[(0,n.jsx)(c.A,{size:13}),"图片"]}),(0,n.jsxs)("button",{type:"button",onClick:()=>nn("video"),children:[(0,n.jsx)(c.A,{size:13}),"视频"]}),(0,n.jsxs)("button",{type:"button",onClick:()=>nn("audio"),children:[(0,n.jsx)(c.A,{size:13}),"音频"]})]}),(0,n.jsxs)("div",{className:"prompt-editor-wrap template-prompt-editor-wrap",children:[(0,n.jsx)("div",{className:"prompt-token-layer","aria-hidden":"true",children:(0,n.jsx)("div",{style:{transform:"translateY(-".concat(al,"px)")},children:tB(ej.prompt,[])})}),(0,n.jsx)("textarea",{ref:ap,value:ej.prompt,onChange:e=>no(e.target.value,e.target.selectionStart),onInput:e=>no(e.currentTarget.value,e.currentTarget.selectionStart),onScroll:e=>ar(e.currentTarget.scrollTop),rows:7,placeholder:"例如:以 @图片1 为主体,生成干净高级的商品主视觉"}),(null==t9?void 0:t9.target)==="template"?tU(t9,a$,ag,nl,ns,nr):null]})]}),ak.length?(0,n.jsx)("div",{className:"template-placeholder-strip","aria-label":"模板占位符",children:ak.map(e=>(0,n.jsx)("span",{className:"template-placeholder-chip",children:e.token},e.token))}):null]})]}),(0,n.jsxs)("div",{className:"template-editor-actions",children:[(0,n.jsx)("button",{className:"button",type:"button",onClick:nt,disabled:ee,children:"取消"}),(0,n.jsxs)("button",{className:"button primary",type:"button",onClick:()=>void na(),disabled:ee||ea||!aN,children:[ee?(0,n.jsx)(s.A,{className:"spin",size:18}):(0,n.jsx)(f.A,{size:18}),em?"保存修改":"保存模板"]})]})]})}):null,ep?(0,n.jsx)("div",{className:"template-preview-backdrop",role:"dialog","aria-modal":"true","aria-label":"模板预览",children:(0,n.jsxs)("div",{className:"template-preview-dialog",children:[(0,n.jsxs)("div",{className:"template-preview-dialog-head",children:[(0,n.jsx)("h2",{children:ep.name}),(0,n.jsx)("button",{className:"icon-button",type:"button",title:"关闭","aria-label":"关闭",onClick:()=>eg(null),children:(0,n.jsx)(x.A,{size:16})})]}),(0,n.jsx)("div",{className:"template-preview-dialog-media",children:aX?(0,n.jsx)("img",{src:aX,alt:""}):(0,n.jsx)(l.A,{size:40})}),(0,n.jsxs)("div",{className:"template-preview-dialog-actions",children:[aX?(0,n.jsxs)("a",{className:"button",href:aX,download:!0,children:[(0,n.jsx)(b.A,{size:16}),"下载图片"]}):null,(0,n.jsxs)("button",{className:"button",type:"button",onClick:()=>{eg(null),ne(ep)},children:[(0,n.jsx)(d.A,{size:16}),"编辑模板"]}),(0,n.jsx)("button",{className:"button primary",type:"button",onClick:()=>{a7(ep),eg(null)},children:"选择模板"})]})]})}):null]})]}),(0,n.jsxs)("aside",{className:"panel create-task-column","aria-label":"任务模块",children:[(0,n.jsxs)("div",{className:"create-task-head",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h2",{children:"任务模块"}),(0,n.jsx)("span",{children:Y.length?"".concat(Y.length," 个任务"):"任务列表"})]}),(0,n.jsx)("button",{className:"icon-button",type:"button",title:"刷新任务","aria-label":"刷新任务",onClick:()=>void aZ(),disabled:H,children:H?(0,n.jsx)(s.A,{className:"spin",size:16}):(0,n.jsx)(v.A,{size:16})})]}),er?(0,n.jsx)("div",{className:"callout compact-callout",role:"alert",children:er}):null,(0,n.jsxs)("div",{className:"create-task-list",children:[Y.map(e=>(0,n.jsxs)("article",{className:"create-task-card",role:"button",tabIndex:0,"aria-label":"查看任务详情:".concat(ty(e)),onClick:t=>{t.target.closest("a,button")||ef(e.id)},onKeyDown:t=>{("Enter"===t.key||" "===t.key)&&(t.preventDefault(),ef(e.id))},children:[function(e,t){let a=e.outputAssetIds.map(e=>t.get(e)).find(e=>!!e);if(!a){let t="succeeded"===e.status;return(0,n.jsxs)("div",{className:(0,k.A)("create-task-thumb create-task-thumb-placeholder",(tj(e)||t)&&"generating"),"aria-hidden":"true",children:[tj(e)?(0,n.jsx)(s.A,{className:"spin",size:18}):(0,n.jsx)(y.A,{size:18}),(0,n.jsx)("span",{children:tj(e)?"生成中":t?"结果同步中":"无结果"})]})}let i="video"===a.kind||"video"===tT(a)?(0,n.jsx)("video",{src:D(a),muted:!0,playsInline:!0,preload:"metadata"}):(0,n.jsx)("img",{src:D(a),alt:""});return(0,n.jsx)("div",{className:"create-task-thumb","aria-hidden":"true",children:i})}(e,aY),(0,n.jsxs)("div",{className:"create-task-body",children:[(0,n.jsx)("h3",{title:ty(e),children:ty(e)}),(0,n.jsxs)("div",{className:"create-task-meta",children:[(0,n.jsx)("span",{className:"status ".concat(tw(e,aY)),children:tN(e.status,!!th(e,aY))}),(0,n.jsx)("span",{children:tz(e,eb)}),(0,n.jsx)("span",{className:"billing-task-cost",children:tC(e)})]})]}),(0,n.jsxs)("div",{className:"create-task-actions",children:[th(e,aY)?(0,n.jsx)("a",{className:"icon-button",href:F(th(e,aY)),title:"下载结果","aria-label":"下载 ".concat(ty(e)," 的结果"),onClick:e=>e.stopPropagation(),children:(0,n.jsx)(b.A,{size:16})}):null,(0,n.jsxs)("button",{className:"button mini-button create-task-link",type:"button",onClick:t=>{t.stopPropagation(),ef(e.id)},children:[(0,n.jsx)(j.A,{size:14}),"详情"]})]})]},e.id)),Y.length||H||er?null:(0,n.jsx)("div",{className:"template-empty compact",children:"暂无任务"})]})]}),aG?(0,n.jsx)(td,{job:aG,assets:aY,now:eb,onClose:()=>ef(null)}):null]})})}function to(e,t){return"video"===e?"生成视频":"interactive"===t?"生成编辑结果":"layers"===t?"开始拆分":"生成图片"}function tc(e){return e.id||e.url}function td(e){var t,a,i;let{job:l,assets:r,now:o,onClose:c}=e,d=l.outputAssetIds.map(e=>r.get(e)).filter(e=>!!e),u=function(e,t){let a=tf(e.requestPayload.input),n=tf(e.requestPayload.assembled),i=Array.isArray(n.materials)?n.materials:Array.isArray(a.materials)?a.materials:[];return i.length?i.map((e,a)=>{var n;let i=tf(e),l=tb(i.id),r=l?t.get(l):void 0,s=("image"===(n=i.type)||"video"===n||"audio"===n?n:void 0)||(r?tT(r):"image");return{id:l,url:tb(i.url)||(null==r?void 0:r.url),label:tb(i.label)||"@".concat(t_(s)).concat(a+1),name:tb(i.name)||(null==r?void 0:r.name),type:s,asset:r}}).filter(e=>e.url||e.asset):e.inputAssetIds.map((e,a)=>{let n=t.get(e);return{id:e,url:null==n?void 0:n.url,label:"@".concat(t_(n?tT(n):"image")).concat(a+1),name:null==n?void 0:n.name,type:n?tT(n):"image",asset:n}}).filter(e=>e.asset||e.url)}(l,r),m=function(e){var t,a;let n=tf(e.requestPayload.input),i=tf(n.settings),l=tf(e.requestPayload.settings),r={...n,...i,...l},s=[],o=tb(r.engine);if(o&&s.push({label:"引擎",value:"jimeng"===(t=o)?"即梦":"seedream"===t?"Seedream 5.0 Pro":"evolink"===t?"Image2":"bailian"===t?"阿里云百炼":"seedance"===t?"Seedance":"mock"===t?"历史任务":t}),"image.generate"===e.capability){let t=tx(e);t&&s.push({label:"创作方式",value:"interactive"===t?"交互编辑":"layers"===t?"图层拆分":"基础生图"});let n=tv(r.width),i=tv(r.height);n&&i&&s.push({label:"画幅",value:"".concat(n," \xd7 ").concat(i)});let l=tv(r.scale);l&&s.push({label:"文本影响",value:l});let o=tb(r.quality);o&&s.push({label:"生成质量",value:"low"===(a=o)?"快速":"medium"===a?"标准":"high"===a?"精细":a});let c=tb(r.size);c&&s.push({label:"分辨率",value:c.toUpperCase()});let d=tb(r.optimizeMode);d&&s.push({label:"提示词优化",value:"fast"===d?"快速优化":"标准优化"});let u=tb(r.outputFormat);u&&s.push({label:"输出格式",value:u.toUpperCase()}),void 0!==r.force_single&&s.push({label:"输出模式",value:!0===r.force_single?"单图":"多图"})}else{let e=tb(r.ratio);e&&s.push({label:"比例",value:"adaptive"===e?"自适应":e});let t=tv(r.duration);t&&s.push({label:"时长",value:"".concat(t," 秒")});let a=tb(r.resolution);a&&s.push({label:"清晰度",value:a})}return s}(l),h=l.inputAssetIds.length||l.inputUrls.length,p=function(e,t){let a=tf(e.responsePayload),n=tf(a.raw),i=(Array.isArray(n.data)?n.data:[]).map(tf);return!function(e,t){if(!Number.isInteger(t)||t<2||e.length!==t)return!1;let a=e.map(e=>{if(!e||"object"!=typeof e||Array.isArray(e))return;let t=e.z_index,a="number"==typeof t?t:"string"==typeof t&&t.trim()?Number(t):NaN;return Number.isInteger(a)&&a>=0?a:void 0});return!a.some(e=>void 0===e)&&a.includes(0)&&new Set(a).size===a.length}(i,t.length)?[]:t.map((e,t)=>{var a;let n=i[t]||{},l=tf(n.bounding_box),r=tu(l.normalized),s=tu(l.absolute);return{asset:e,zIndex:null!=(a=tm(n.z_index))?a:t,name:tb(n.name)||(0===t?"底图":"图层 ".concat(t)),description:tb(n.description),size:function(e){let t=null==e?void 0:e.match(/(\d+)\s*[x×*]\s*(\d+)/i);if(!t)return;let a=Number(t[1]),n=Number(t[2]);return a>0&&n>0?[a,n]:void 0}(tb(n.size)),boundingBox:r||s?{normalized:r,absolute:s}:void 0}})}(l,d);return(0,n.jsx)("div",{className:"task-detail-backdrop",role:"presentation",onMouseDown:e=>{e.target===e.currentTarget&&c()},children:(0,n.jsxs)("div",{className:"task-detail-dialog",role:"dialog","aria-modal":"true","aria-labelledby":"task-detail-title",onMouseDown:e=>e.stopPropagation(),children:[(0,n.jsxs)("header",{className:"task-detail-head",children:[(0,n.jsxs)("div",{className:"task-detail-title-wrap",children:[(0,n.jsx)("span",{className:"task-detail-kicker",children:"任务详情"}),(0,n.jsx)("h2",{id:"task-detail-title",title:ty(l),children:ty(l)}),(0,n.jsxs)("div",{className:"task-detail-subline",children:[(0,n.jsx)("span",{className:"status ".concat(tw(l,r)),children:tN(l.status,d.length>0)}),(0,n.jsx)("span",{children:tA(l.capability)}),(0,n.jsx)("span",{children:tz(l,o)})]})]}),(0,n.jsx)("button",{className:"icon-button",type:"button",title:"关闭详情","aria-label":"关闭详情",onClick:c,children:(0,n.jsx)(x.A,{size:18})})]}),(0,n.jsxs)("div",{className:"task-detail-scroll",children:[(0,n.jsxs)("section",{className:"task-detail-section task-detail-output-section",children:[(0,n.jsx)("div",{className:"task-detail-section-head",children:(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{children:"生成结果"}),(0,n.jsx)("span",{children:p.length?"1 张底图 \xb7 ".concat(Math.max(0,p.length-1)," 个图层"):d.length?"".concat(d.length," 个结果"):tj(l)?"结果生成中":"暂无结果"})]})}),p.length?(0,n.jsx)(eS,{jobId:l.id,outputs:p,assetLibrary:[...r.values()]}):d.length?(0,n.jsx)("div",{className:"task-detail-output-grid",children:d.map(e=>(0,n.jsxs)("article",{className:"task-detail-output-card",children:[(0,n.jsx)("div",{className:"task-detail-output-media",children:tg(e)}),(0,n.jsxs)("div",{className:"task-detail-output-footer",children:[(0,n.jsx)("span",{title:e.name,children:e.name}),(0,n.jsxs)("a",{className:"button mini-button",href:F(e),title:"下载 ".concat(e.name),children:[(0,n.jsx)(b.A,{size:14}),"下载"]})]})]},e.id))}):(0,n.jsxs)("div",{className:(0,k.A)("task-detail-empty",tj(l)&&"pending"),children:[tj(l)?(0,n.jsx)(s.A,{className:"spin",size:18}):(0,n.jsx)(y.A,{size:18}),(0,n.jsx)("span",{children:tj(l)?"任务完成后,结果会显示在这里":(null==(t=l.error)?void 0:t.message)||"该任务没有可下载的结果"})]})]}),(0,n.jsxs)("section",{className:"task-detail-section",children:[(0,n.jsx)("div",{className:"task-detail-section-head",children:(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{children:"提示词"}),(0,n.jsx)("span",{children:"本次任务实际提交的内容"})]})}),(0,n.jsx)("p",{className:"task-detail-prompt",children:(null==(a=l.prompt)?void 0:a.trim())||"未记录提示词"})]}),(0,n.jsxs)("section",{className:"task-detail-section",children:[(0,n.jsx)("div",{className:"task-detail-section-head",children:(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{children:"输入要素"}),(0,n.jsx)("span",{children:u.length?"".concat(u.length," 个要素"):h?"".concat(h," 个引用"):"未使用上传要素"})]})}),u.length?(0,n.jsx)("div",{className:"task-detail-material-grid",children:u.map((e,t)=>{var a,i;return(0,n.jsxs)("article",{className:"task-detail-material-card",children:[(0,n.jsx)("div",{className:"task-detail-material-media",children:e.asset?tg(e.asset,"thumb"):e.url?(a=e.url,"video"===(i=e.type)?(0,n.jsx)("video",{className:"task-detail-media thumb",src:a,muted:!0,playsInline:!0,preload:"metadata"}):"audio"===i?(0,n.jsx)(N.A,{size:18}):(0,n.jsx)("img",{className:"task-detail-media thumb",src:a,alt:""})):(0,n.jsx)(y.A,{size:18})}),(0,n.jsxs)("div",{className:"task-detail-material-copy",children:[(0,n.jsx)("strong",{children:e.label||"".concat(t_(e.type)).concat(t+1)}),(0,n.jsx)("span",{title:e.name||e.url,children:e.name||e.url||"未命名要素"})]})]},"".concat(e.id||e.url||"material","-").concat(t))})}):(0,n.jsx)("div",{className:"task-detail-empty",children:"该任务未绑定图片、视频或音频要素。"})]}),(0,n.jsxs)("div",{className:"task-detail-columns",children:[(0,n.jsxs)("section",{className:"task-detail-section",children:[(0,n.jsx)("div",{className:"task-detail-section-head",children:(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{children:"生成参数"}),(0,n.jsx)("span",{children:"提交时使用的参数"})]})}),m.length?(0,n.jsx)("dl",{className:"task-detail-value-grid",children:m.map(e=>(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:e.label}),(0,n.jsx)("dd",{children:e.value})]},e.label))}):(0,n.jsx)("div",{className:"task-detail-empty",children:"暂无额外参数。"})]}),(0,n.jsxs)("section",{className:"task-detail-section",children:[(0,n.jsx)("div",{className:"task-detail-section-head",children:(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{children:"任务信息"}),(0,n.jsx)("span",{children:"状态与处理记录"})]})}),(0,n.jsxs)("dl",{className:"task-detail-value-grid",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:"服务"}),(0,n.jsx)("dd",{children:"volcengine-visual"===(i=l.provider)?"火山视觉":"evolink"===i?"EvoLink":"seedance"===i?"Seedance":"seedream"===i?"Seedream 5.0 Pro":"bailian"===i?"阿里云百炼":"系统生成"})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:"Req Key"}),(0,n.jsx)("dd",{children:l.reqKey||"--"})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:"任务 ID"}),(0,n.jsx)("dd",{children:l.providerTaskId||l.id})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:"输入 / 输出"}),(0,n.jsxs)("dd",{children:[h," / ",l.outputAssetIds.length]})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:"提交时间"}),(0,n.jsx)("dd",{children:tS(l.createdAt)})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:"更新时间"}),(0,n.jsx)("dd",{children:tS(l.updatedAt)})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("dt",{children:"计费"}),(0,n.jsx)("dd",{children:tC(l)})]})]})]})]}),l.error?(0,n.jsxs)("section",{className:"task-detail-error",role:"alert",children:[(0,n.jsx)("strong",{children:"任务信息"}),(0,n.jsx)("span",{children:l.error.message})]}):null]})]})})}function tu(e){if(!Array.isArray(e)||4!==e.length)return;let t=e.map(tm);if(!t.some(e=>void 0===e))return t}function tm(e){let t="number"==typeof e?e:"string"==typeof e&&e.trim()?Number(e):NaN;return Number.isFinite(t)?t:void 0}function th(e,t){return e.outputAssetIds.map(e=>t.get(e)).find(e=>!!e)}function tp(e){let{quote:t,loading:a,error:i,reserved:l=!1}=e;return(0,n.jsxs)("aside",{className:(0,k.A)("billing-estimate",a&&"is-loading",i&&"has-error"),"aria-live":"polite","aria-label":(null==t?void 0:t.quotaExempt)?"本次预计费用(超级管理员不计额度)":"本次预计消耗额度",children:[(0,n.jsxs)("div",{className:"billing-estimate-head",children:[(0,n.jsx)("span",{className:"billing-estimate-icon","aria-hidden":"true",children:(0,n.jsx)(w.A,{size:16})}),(0,n.jsx)("span",{children:(null==t?void 0:t.quotaExempt)?"本次预计费用(不计额度)":l?"本次最多预扣额度":"本次预计消耗额度"})]}),(0,n.jsx)("strong",{className:"billing-estimate-amount",children:a?"…":i?"暂不可用":t?(0,e8.JO)(t.amountFen):"—"}),l&&t&&!i?(0,n.jsx)("span",{className:"billing-estimate-note",children:"完成后按实际图层数量与像素结算,多扣部分自动退回"}):null,i?(0,n.jsx)("span",{className:"billing-estimate-error",children:i}):null]})}function tg(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"large",a=tT(e);return"video"===a?(0,n.jsx)("video",{className:"task-detail-media ".concat(t),src:D(e),controls:"large"===t,muted:"thumb"===t,playsInline:!0,preload:"metadata"}):"audio"===a?(0,n.jsx)("audio",{className:"task-detail-audio",src:D(e),controls:!0}):(0,n.jsx)("img",{className:"task-detail-media ".concat(t),src:D(e),alt:e.name})}function tx(e){let t=tf(e.requestPayload.settings),a=tb(t.creationMode);return"interactive"===a||"layers"===a||"basic"===a?a:!0===t.layerDecomposition?"layers":void 0}function tf(e){return"object"!=typeof e||null===e||Array.isArray(e)?{}:e}function tb(e){return"string"==typeof e&&e.trim()?e.trim():"number"==typeof e||"boolean"==typeof e?String(e):void 0}function tv(e){return"number"==typeof e||"string"==typeof e?String(e):void 0}function tj(e){return"queued"===e.status||"running"===e.status}function ty(e){var t;let a=null==(t=e.prompt)?void 0:t.trim();return"layers"===tx(e)?a?"图层拆分:".concat(a):"自动图层拆分":a||tA(e.capability)}function tw(e,t){return"succeeded"!==e.status||th(e,t)?e.status:"syncing"}function tN(e){let t=!(arguments.length>1)||void 0===arguments[1]||arguments[1];return"queued"===e?"排队中":"running"===e?"生成中":"succeeded"===e?t?"已完成":"结果同步中":"failed"===e?"失败":"expired"===e?"已过期":"cancelled"===e?"已取消":e}function tk(e){return"succeeded"===e||"failed"===e||"expired"===e||"cancelled"===e}function tA(e){return"image.generate"===e?"图片生成":"video.generate"===e?"视频生成":"生成任务"}function tS(e){return new Intl.DateTimeFormat("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(new Date(e))}function tC(e){return e.billing?e.billing.quotaExempt?"超管费用 ".concat((0,e8.JO)(e.billing.amountFen),"(不计额度)"):"refunded"===e.billing.status?"已退款 ".concat((0,e8.JO)(e.billing.amountFen)):"pending"===e.billing.status?"预计 ".concat((0,e8.JO)(e.billing.amountFen)):"not_charged"===e.billing.status?"未扣费":"扣费 ".concat((0,e8.JO)(e.billing.amountFen)):"mock"===e.provider?"历史任务(未计费)":"未计费"}function tz(e,t){let a=tk(e.status);return"".concat(a?"耗时":"已耗时"," ").concat(function(e,t){let a=new Date(e.createdAt).getTime(),n=tk(e.status)?new Date(e.updatedAt).getTime():t;return Number.isFinite(a)&&Number.isFinite(n)&&!(n<a)?function(e){let t=Math.max(0,Math.round(e/1e3)),a=Math.floor(t/3600),n=Math.floor(t%3600/60),i=t%60;return a?"".concat(a,"小时").concat(n,"分"):n?"".concat(n,"分").concat(i,"秒"):"".concat(i,"秒")}(n-a):"--"}(e,t))}function tM(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"normal",a=O(e);return(0,n.jsxs)("span",{className:(0,k.A)("material-preview",t,e.type),"aria-hidden":"true",children:["image"===e.type?(0,n.jsx)("img",{src:a,alt:""}):null,"video"===e.type?(0,n.jsx)("video",{src:a,muted:!0,playsInline:!0,preload:"metadata"}):null,"audio"===e.type?(0,n.jsx)(N.A,{size:"tiny"===t?13:"large"===t?20:15}):null]})}function tI(e){var t,a,n,i,l,r;let s=tE(e.settings.engine)||"jimeng",o=(null==(t=e9.find(t=>t.scale===e.settings.scale))?void 0:t.id)||e9[1].id,c=(null==(a=te.find(t=>t.quality===e.settings.quality))?void 0:a.id)||te[1].id;return{name:e.name,prompt:e.prompt,previewImageUrl:e.previewImageUrl||"",engine:s,jimengInfluence:o,evolinkQuality:c,seedreamSize:tt.includes(e.settings.size)?e.settings.size:"1.5K",seedreamOutputFormat:"jpeg"===e.settings.outputFormat?"jpeg":"png",seedreamOptimizeMode:"fast"===e.settings.optimizeMode?"fast":"standard",size:(i=e.settings.width,l=e.settings.height,(null==(r=tl.find(e=>e.width===i&&e.height===l))?void 0:r.label)||tl[0].label),sortOrder:String(null!=(n=e.sortOrder)?n:0)}}function tE(e){if("jimeng"===e||"evolink"===e||"bailian"===e||"seedream"===e)return e}function tP(e,t){let a=(e.sortOrder||0)-(t.sortOrder||0);return 0!==a?a:(t.updatedAt||"").localeCompare(e.updatedAt||"")}function tU(e,t,a,i,l,r){return(0,n.jsxs)("div",{className:"material-draft-panel",role:"group","aria-label":"素材占位输入",children:[(0,n.jsxs)("div",{className:"material-draft-entry",children:[(0,n.jsx)("span",{className:"material-draft-prefix","aria-hidden":"true",children:"@"}),(0,n.jsx)("input",{ref:a,value:e.query,onChange:e=>i(e.target.value),onKeyDown:l,placeholder:"图片1 / 标注1 / 标记1","aria-label":"提示词引用名称"}),(0,n.jsx)("button",{className:"material-draft-confirm",type:"button",onMouseDown:e=>e.preventDefault(),onClick:()=>{var a;return r(t[null!=(a=e.activeIndex)?a:0])},children:"确定"})]}),t.length?(0,n.jsx)("div",{className:"material-draft-options","aria-label":"素材占位候选",children:t.map((t,a)=>{var i;return(0,n.jsxs)("button",{className:(0,k.A)("material-draft-option",a===(null!=(i=e.activeIndex)?i:0)&&"active"),type:"button",onMouseDown:e=>e.preventDefault(),onClick:()=>r(t),children:[(0,n.jsx)("span",{className:"chip-token",children:t.token}),(0,n.jsx)("span",{children:t.label}),(0,n.jsx)("span",{children:t.caption})]},"".concat(t.token,"-").concat(t.caption))})}):null]})}function tT(e){let t="string"==typeof e.metadata.contentType?e.metadata.contentType.toLowerCase():"",a=e.url.toLowerCase();return"video"===e.kind||t.startsWith("video/")||/\.(mp4|mov|webm)(\?|$)/.test(a)?"video":t.startsWith("audio/")||/\.(mp3|wav|m4a|aac|flac)(\?|$)/.test(a)?"audio":"image"}function tR(e,t){let a=e.type.toLowerCase(),n=e.name.toLowerCase();return"image"===t?a.startsWith("image/")||/\.(png|jpe?g|webp|gif|avif)(\?|$)/.test(n):"video"===t?a.startsWith("video/")||/\.(mp4|mov|webm)(\?|$)/.test(n):a.startsWith("audio/")||/\.(mp3|wav|m4a|aac|flac)(\?|$)/.test(n)}function tD(e,t){return"video"===e?"@视频".concat(t):"audio"===e?"@音频".concat(t):"@图片".concat(t)}function tF(e){let t=null==e?void 0:e.trim().match(/^@(图片|图|视频|音频)(\d+)$/);if(t)return tD("视频"===t[1]?"video":"音频"===t[1]?"audio":"image",Number(t[2]))}function tO(e,t){let a=tF(e.label);return!!(a&&t.has(a))}function tq(e,t){let a=e.slice(0,t),n=a.lastIndexOf("@");if(-1===n)return null;let i=a.slice(n+1);return i.length>16||/[\s\n\r,。;:、,.!?!?()[\]{}<>《》"'“”]/.test(i)||/^(图片|图|视频|音频|标注|标记)\d*$/.test(i)?null:{start:n,query:i}}function tL(e,t){var a;let n=tK(t);return!n||[e.label,null==(a=e.label)?void 0:a.replace(/^@/,""),e.name,t_(e.type),e.type].filter(Boolean).some(e=>tK(String(e)).includes(n))}function tK(e){return e.replace(/^@/,"").trim().toLowerCase()}function tB(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],i=new Map(t.map(e=>[tF(e.label)||e.label,e])),l=new Set(a.map(e=>L(e.index,e.kind))),r=[],s=0;for(let t of e.matchAll(/@(图片|图|视频|音频|标注|标记)(\d+)/g)){var o;let a=null!=(o=t.index)?o:0;a>s&&r.push(e.slice(s,a));let c="标注"===t[1]||"标记"===t[1],d="图"===t[1]?"@图片".concat(t[2]):t[0],u=c?l.has(d):!!i.get(d);r.push((0,n.jsx)("span",{className:(0,k.A)("prompt-token-card",c&&"annotation",u?"linked":"unbound"),children:d},"".concat(d,"-").concat(a))),s=a+t[0].length}return s<e.length&&r.push(e.slice(s)),r.length?r:e}function t_(e){return"video"===e?"视频":"audio"===e?"音频":"图片"}var tJ=a(4577);function tW(){let[e,t]=(0,i.useState)(null);return(0,i.useEffect)(()=>{t("video"===new URLSearchParams(window.location.search).get("mode")?"video":"image")},[]),(0,n.jsx)(tJ.BrowserAuthGuard,{children:e?(0,n.jsx)(ts,{initialMode:e}):(0,n.jsx)("section",{className:"panel",children:(0,n.jsx)("p",{className:"muted",children:"正在加载创作台…"})})})}},665:(e,t,a)=>{Promise.resolve().then(a.bind(a,652))},4166:(e,t,a)=>{"use strict";a.d(t,{JO:()=>i,_M:()=>l});let n=[{value:"request",label:"按次"},{value:"image",label:"按张"},{value:"video_second",label:"按秒"}];function i(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"CNY",a=Math.max(0,Number(e||0))/100;return new Intl.NumberFormat("zh-CN",{style:"currency",currency:t,minimumFractionDigits:2,maximumFractionDigits:2}).format(a)}function l(e){var t;return(null==(t=n.find(t=>t.value===e))?void 0:t.label)||e}},4577:(e,t,a)=>{"use strict";a.d(t,{BrowserAuthGuard:()=>d,BrowserAuthProvider:()=>o,ClientRedirect:()=>u,a:()=>c});var n=a(5155),i=a(2115),l=a(63),r=a(6660);let s=(0,i.createContext)(null);function o(e){let{children:t}=e,[a,l]=(0,i.useState)(null),[o,c]=(0,i.useState)("loading"),[d,u]=(0,i.useState)(null),m=(0,i.useCallback)(async e=>{try{let t=await (0,r.uK)(e);l(t),c("ready"),u(null)}catch(e){if(e instanceof DOMException&&"AbortError"===e.name)return;c("error"),u(e instanceof Error?e.message:"无法读取认证状态")}},[]);(0,i.useEffect)(()=>{let e=new AbortController;return m(e.signal),()=>e.abort()},[m]);let h=(0,i.useMemo)(()=>{var e,t;let n=(null==a?void 0:a.user)||null,i=null==(e=null==a?void 0:a.authRequired)||e,l=!i||(null==n?void 0:n.role)==="super_admin",r=l||(null==n?void 0:n.role)==="organization_admin";return{status:o,user:n,authMode:(null==a?void 0:a.authMode)||null,authRequired:i,authConfigured:null!=(t=null==a?void 0:a.authConfigured)&&t,isAdmin:r,isSuperAdmin:l,error:d,refresh:()=>m()}},[d,m,a,o]);return(0,n.jsx)(s.Provider,{value:h,children:t})}function c(){let e=(0,i.useContext)(s);if(!e)throw Error("useBrowserAuth must be used inside BrowserAuthProvider");return e}function d(e){let{children:t,role:a="user"}=e,s=c(),o=(0,l.usePathname)(),d=(0,l.useRouter)(),u="ready"===s.status&&s.authRequired&&!s.user;return((0,i.useEffect)(()=>{if(u){let e=(0,r.M6)(window.location,o||"/create");d.replace("/auth/login?next=".concat(encodeURIComponent(e)))}},[u,o,d]),"loading"===s.status||u)?(0,n.jsx)(m,{message:"正在确认登录状态…"}):"error"===s.status?(0,n.jsx)(m,{message:s.error||"无法读取认证状态",actionLabel:"重试",onAction:()=>void s.refresh()}):("admin"!==a||s.isAdmin)&&("super"!==a||s.isSuperAdmin)?(0,n.jsx)(n.Fragment,{children:t}):(0,n.jsx)(m,{message:"当前账号无权访问此页面。"})}function u(e){let{to:t,forwardNext:a=!1}=e;return(0,i.useEffect)(()=>{let e=a?new URLSearchParams(window.location.search).get("next"):null,n=e?"".concat(t,"?next=").concat(encodeURIComponent(e)):t;window.location.replace(n)},[a,t]),(0,n.jsx)(m,{message:"正在跳转…"})}function m(e){let{message:t,actionLabel:a,onAction:i}=e;return(0,n.jsxs)("section",{className:"panel",children:[(0,n.jsx)("p",{className:"muted",children:t}),a&&i?(0,n.jsx)("button",{className:"button",type:"button",onClick:i,children:a}):null]})}},6660:(e,t,a)=>{"use strict";async function n(e){let t=await fetch("/api/auth/me",{method:"GET",cache:"no-store",credentials:"same-origin",headers:{Accept:"application/json"},signal:e});if(!t.ok)throw Error("认证状态请求失败(".concat(t.status,")"));var a,n=await t.json();if(!r(n)||"boolean"!=typeof n.authenticated||"boolean"!=typeof n.authRequired||"boolean"!=typeof n.authConfigured)throw Error("认证状态响应格式无效");if(!n.authenticated){if(null!==n.authMode||null!==n.user)throw Error("认证状态响应格式无效");return{authenticated:!1,authRequired:n.authRequired,authConfigured:n.authConfigured,authMode:null,user:null}}if(!n.authConfigured||"user"!==n.authMode&&"admin"!==n.authMode||!(r(a=n.user)&&"string"==typeof a.id&&a.id.length>0&&"string"==typeof a.subject&&a.subject===a.id&&"string"==typeof a.displayName&&"string"==typeof a.clientId&&("user"===a.role||"organization_admin"===a.role||"super_admin"===a.role)&&"active"===a.status&&("super_admin"===a.role||"string"==typeof a.organizationId&&a.organizationId.length>0)&&Array.isArray(a.authorities)&&a.authorities.every(e=>"string"==typeof e)&&Array.isArray(a.scope)&&a.scope.every(e=>"string"==typeof e)))throw Error("认证用户响应格式无效");let i="user"===n.user.role?"user":"admin";if(n.authMode!==i)throw Error("认证用户响应格式无效");return{authenticated:!0,authRequired:n.authRequired,authConfigured:n.authConfigured,authMode:n.authMode,user:n.user}}function i(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/create";if(!e||!e.startsWith("/")||e.startsWith("//")||e.includes("\\"))return t;try{let a="http://zhinian.local",n=new URL(e,a);if(n.origin!==a)return t;let i="".concat(n.pathname).concat(n.search).concat(n.hash);if(n.pathname.startsWith("/api/auth")||n.pathname.startsWith("/auth/login")||n.pathname.startsWith("/auth/admin-login"))return t;return i}catch(e){return t}}function l(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"/create";return i("".concat(e.pathname).concat(e.search).concat(e.hash),t)}function r(e){return"object"==typeof e&&null!==e}a.d(t,{M6:()=>l,uK:()=>n,z3:()=>i})},7612:(e,t,a)=>{"use strict";a.d(t,{It:()=>r,Js:()=>c,c8:()=>o,xr:()=>s});var n=a(7605);let i="power2.out";function l(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}function r(e,t){let a=e.current;if(!a||l())return;let i=n.os.context(()=>t(a),a);return()=>i.revert()}function s(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"[data-animate]";if(l())return;let a=n.os.utils.toArray(t,e);a.length&&n.os.fromTo(a,{autoAlpha:0,y:14},{autoAlpha:1,y:0,duration:.28,ease:i,stagger:.045,clearProps:"transform,opacity,visibility"})}function o(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:10;!e||l()||n.os.fromTo(e,{autoAlpha:0,y:t},{autoAlpha:1,y:0,duration:.28,ease:i,clearProps:"transform,opacity,visibility"})}function c(e){!e||l()||n.os.fromTo(e,{scale:.985},{scale:1,duration:.22,ease:i,clearProps:"transform"})}}},e=>{e.O(0,[592,274,249,441,255,358],()=>e(e.s=665)),_N_E=e.O()}]);