koishi-plugin-media-luna 0.0.12 → 0.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -126,7 +126,7 @@
126
126
 
127
127
  <script setup lang="ts">
128
128
  import { ref, onMounted } from 'vue'
129
- import { message } from '@koishijs/client'
129
+ import { message, send } from '@koishijs/client'
130
130
  import { pluginApi, PluginInfo } from '../../api'
131
131
  import ConfigRenderer from '../ConfigRenderer.vue'
132
132
 
@@ -197,8 +197,6 @@ const saveConfig = async () => {
197
197
  // 执行操作
198
198
  const executeAction = async (action: { apiEvent: string; label: string }) => {
199
199
  try {
200
- // 操作使用通用的 API 格式
201
- const { send } = await import('@koishijs/client')
202
200
  const result = await send(action.apiEvent as any) as any
203
201
  if (result?.success === false) {
204
202
  throw new Error(result.error || '操作失败')
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{defineComponent as ie,computed as re,ref as h,resolveComponent as E,createElementBlock as l,openBlock as t,createElementVNode as e,createCommentVNode as s,Fragment as D,renderList as X,normalizeClass as ee,toDisplayString as p,createVNode as a,withKeys as Ne,withCtx as C,createStaticVNode as Se,createBlock as ae,watch as ge,withDirectives as ke,vShow as be,withModifiers as ve,createTextVNode as R,onMounted as pe,onUnmounted as Ve,Teleport as qe,Transition as Ae,createSlots as Be,onBeforeUnmount as He,h as De,resolveDynamicComponent as Oe,KeepAlive as Ge}from"vue";import{send as Je,message as G,receive as We}from"@koishijs/client";async function L(o,I){const g=await Je(o,I);if(!g.success)throw new Error(g.error||"请求失败");return g.data}const he={list:()=>L("media-luna/channels/list"),get:o=>L("media-luna/channels/get",{id:o}),create:o=>L("media-luna/channels/create",o),update:(o,I)=>L("media-luna/channels/update",{id:o,data:I}),delete:o=>L("media-luna/channels/delete",{id:o}),toggle:(o,I)=>L("media-luna/channels/toggle",{id:o,enabled:I}),tags:()=>L("media-luna/channels/tags"),getByTags:(o,I)=>L("media-luna/channels/by-tags",{tags:o,matchAll:I})},_e={list:o=>L("media-luna/presets/list",{enabledOnly:o}),get:o=>L("media-luna/presets/get",{id:o}),create:o=>L("media-luna/presets/create",o),update:(o,I)=>L("media-luna/presets/update",{id:o,data:I}),delete:o=>L("media-luna/presets/delete",{id:o}),toggle:(o,I)=>L("media-luna/presets/toggle",{id:o,enabled:I}),copy:o=>L("media-luna/presets/copy",{id:o}),matching:o=>L("media-luna/presets/matching",{channelId:o}),tags:()=>L("media-luna/presets/tags"),getByTags:(o,I)=>L("media-luna/presets/by-tags",{tags:o,matchAll:I})},ye={list:o=>L("media-luna/tasks/list",o),get:o=>L("media-luna/tasks/get",{id:o}),delete:o=>L("media-luna/tasks/delete",{id:o}),stats:o=>L("media-luna/tasks/stats",{channelId:o}),cleanup:o=>L("media-luna/tasks/cleanup",{days:o}),recent:(o,I)=>L("media-luna/tasks/recent",{userId:o,limit:I}),my:o=>L("media-luna/tasks/my",o)},je={me:()=>L("media-luna/auth/me")},we={list:()=>L("media-luna/middlewares/list"),get:o=>L("media-luna/middlewares/get",{name:o}),update:(o,I)=>L("media-luna/middlewares/update",{name:o,data:I}),reset:o=>L("media-luna/middlewares/reset",{name:o}),executionOrder:()=>L("media-luna/middlewares/execution-order"),cardFields:()=>L("media-luna/middlewares/card-fields")},$e={list:()=>L("media-luna/connectors/list"),get:o=>L("media-luna/connectors/get",{id:o}),fields:o=>L("media-luna/connectors/fields",{id:o}),schema:()=>L("media-luna/connectors/schema")},Ke={generate:o=>L("media-luna/generate",o),preview:o=>L("media-luna/generate/preview",o)},Qe={upload:(o,I,g)=>L("media-luna/cache/upload",{data:o,mime:I,filename:g}),cacheUrl:o=>L("media-luna/cache/cache-url",{url:o}),get:o=>L("media-luna/cache/get",{id:o}),read:o=>L("media-luna/cache/read",{id:o}),delete:o=>L("media-luna/cache/delete",{id:o}),stats:()=>L("media-luna/cache/stats"),clear:()=>L("media-luna/cache/clear")},ze={panels:()=>L("media-luna/settings/panels"),get:o=>L("media-luna/settings/get",{id:o}),update:(o,I)=>L("media-luna/settings/update",{id:o,config:I}),syncRemotePresets:()=>L("media-luna/presets/sync")},fe={status:()=>L("media-luna/setup/status"),getStorageFields:()=>L("media-luna/setup/storage/fields"),getStorageConfig:()=>L("media-luna/setup/storage/get"),updateStorageConfig:o=>L("media-luna/setup/storage/update",o),generateVerifyCode:o=>L("media-luna/setup/verify-code/generate",{uid:o}),verifyCode:(o,I)=>L("media-luna/setup/verify-code/verify",{code:o,uid:I}),bindUid:o=>L("media-luna/setup/bind-uid",{uid:o}),getUsers:()=>L("media-luna/setup/users"),complete:()=>L("media-luna/setup/complete")},Ie={list:()=>L("media-luna/plugins/list"),get:o=>L("media-luna/plugins/get",{id:o}),updateConfig:(o,I)=>L("media-luna/plugins/update-config",{pluginId:o,config:I}),enable:o=>L("media-luna/plugins/enable",{id:o}),disable:o=>L("media-luna/plugins/disable",{id:o}),externalList:()=>L("media-luna/plugins/external/list"),externalAdd:o=>L("media-luna/plugins/external/add",{moduleName:o}),externalRemove:o=>L("media-luna/plugins/external/remove",{moduleName:o})},Xe={class:"tag-filter"},Ye={class:"filter-tags"},Ze=["onClick"],et={key:0,class:"filter-input-wrapper"},tt=ie({__name:"TagFilter",props:{modelValue:{default:()=>[]},allTags:{},presetTags:{default:()=>[]},showInput:{type:Boolean,default:true},maxDynamicTags:{default:20}},emits:["update:modelValue","change"],setup(o,{emit:I}){const g=o,w=I,r=re({get:()=>g.modelValue,set:m=>{w("update:modelValue",m),w("change",m)}}),y=h(""),S=re(()=>{const m=g.allTags.filter(k=>!g.presetTags.includes(k)).slice(0,g.maxDynamicTags);return[...g.presetTags,...m]}),O=m=>{const k=[...r.value],z=k.indexOf(m);z>=0?k.splice(z,1):k.push(m),r.value=k},b=()=>{const m=y.value.trim();m&&!r.value.includes(m)&&(r.value=[...r.value,m]),y.value=""};return(m,k)=>{const z=E("k-icon"),$=E("el-input");return t(),l("div",Xe,[e("div",Ye,[(t(true),l(D,null,X(S.value,c=>(t(),l("span",{key:c,class:ee(["filter-tag",{active:r.value.includes(c)}]),onClick:f=>O(c)},p(c),11,Ze))),128))]),o.showInput?(t(),l("div",et,[a($,{modelValue:y.value,"onUpdate:modelValue":k[0]||(k[0]=c=>y.value=c),placeholder:"输入标签筛选...",size:"small",clearable:"",onKeyup:Ne(b,["enter"]),class:"filter-input"},{prefix:C(()=>[a(z,{name:"search"})]),_:1},8,["modelValue"])])):s("v-if",true)])}}}),de=(o,I)=>{const g=o.__vccOpts||o;for(const[w,r]of I)g[w]=r;return g},Ue=de(tt,[["__scopeId","data-v-61b504c8"]]),lt={class:"view-mode-switch"},st=ie({__name:"ViewModeSwitch",props:{modelValue:{}},emits:["update:modelValue"],setup(o){return(I,g)=>(t(),l("div",lt,[e("button",{class:ee(["mode-btn",{active:o.modelValue==="card"}]),onClick:g[0]||(g[0]=w=>I.$emit("update:modelValue","card")),title:"卡片视图"},[...g[2]||(g[2]=[Se('<svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" data-v-ae3ef498><rect x="3" y="3" width="8" height="8" rx="1" data-v-ae3ef498></rect><rect x="13" y="3" width="8" height="8" rx="1" data-v-ae3ef498></rect><rect x="3" y="13" width="8" height="8" rx="1" data-v-ae3ef498></rect><rect x="13" y="13" width="8" height="8" rx="1" data-v-ae3ef498></rect></svg>',1)])],2),e("button",{class:ee(["mode-btn",{active:o.modelValue==="list"}]),onClick:g[1]||(g[1]=w=>I.$emit("update:modelValue","list")),title:"列表视图"},[...g[3]||(g[3]=[e("svg",{viewBox:"0 0 24 24",width:"16",height:"16",fill:"currentColor"},[e("rect",{x:"3",y:"4",width:"18",height:"3",rx:"1"}),e("rect",{x:"3",y:"10.5",width:"18",height:"3",rx:"1"}),e("rect",{x:"3",y:"17",width:"18",height:"3",rx:"1"})],-1)])],2)]))}}),Ee=de(st,[["__scopeId","data-v-ae3ef498"]]),at={class:"tag-input"},nt=ie({__name:"TagInput",props:{modelValue:{},suggestions:{},placeholder:{}},emits:["update:modelValue"],setup(o,{emit:I}){const g=o,w=I,r=re({get:()=>g.modelValue,set:y=>w("update:modelValue",y)});return(y,S)=>{const O=E("el-option"),b=E("el-select");return t(),l("div",at,[a(b,{modelValue:r.value,"onUpdate:modelValue":S[0]||(S[0]=m=>r.value=m),multiple:"",filterable:"","allow-create":"","default-first-option":"",placeholder:o.placeholder,class:"tag-select","tag-type":"primary"},{default:C(()=>[(t(true),l(D,null,X(o.suggestions,m=>(t(),ae(O,{key:m,label:m,value:m},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"])])}}}),Me=de(nt,[["__scopeId","data-v-68388640"]]),ot={class:"config-renderer"},it={key:0,class:"form-row"},dt={class:"field-container"},rt={key:6,class:"field-desc"},ct=ie({__name:"ConfigRenderer",props:{fields:{},modelValue:{},clearable:{type:Boolean,default:false}},emits:["update:modelValue"],setup(o,{emit:I}){const g=o,w=I,r=O=>g.modelValue[O],y=(O,b)=>{const m={...g.modelValue,[O]:b};w("update:modelValue",m)},S=O=>{if(!O.showWhen)return true;const{field:b,value:m}=O.showWhen;return g.modelValue[b]===m};return(O,b)=>{const m=E("el-switch"),k=E("el-option"),z=E("el-select"),$=E("el-input-number"),c=E("el-input");return t(),l("div",ot,[(t(true),l(D,null,X(o.fields,f=>(t(),l(D,{key:f.key},[S(f)?(t(),l("div",it,[e("div",{class:ee(["form-label",{required:f.required}])},p(f.label),3),e("div",dt,[s(" Boolean 类型 "),f.type==="boolean"?(t(),ae(m,{key:0,"model-value":r(f.key),"onUpdate:modelValue":v=>y(f.key,v)},null,8,["model-value","onUpdate:modelValue"])):f.type==="select"?(t(),l(D,{key:1},[s(" Select 类型 "),a(z,{"model-value":r(f.key),"onUpdate:modelValue":v=>y(f.key,v),placeholder:f.placeholder||"请选择",clearable:o.clearable,style:{width:"100%"}},{default:C(()=>[(t(true),l(D,null,X(f.options,v=>(t(),ae(k,{key:String(v.value),label:v.label,value:v.value},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onUpdate:modelValue","placeholder","clearable"])],64)):f.type==="number"?(t(),l(D,{key:2},[s(" Number 类型 "),a($,{"model-value":r(f.key),"onUpdate:modelValue":v=>y(f.key,v),placeholder:f.placeholder,controls:true},null,8,["model-value","onUpdate:modelValue","placeholder"])],64)):f.type==="textarea"?(t(),l(D,{key:3},[s(" Textarea 类型 "),a(c,{"model-value":r(f.key),"onUpdate:modelValue":v=>y(f.key,v),type:"textarea",rows:4,placeholder:f.placeholder},null,8,["model-value","onUpdate:modelValue","placeholder"])],64)):f.type==="password"?(t(),l(D,{key:4},[s(" Password 类型 "),a(c,{"model-value":r(f.key),"onUpdate:modelValue":v=>y(f.key,v),type:"password","show-password":"",placeholder:f.placeholder},null,8,["model-value","onUpdate:modelValue","placeholder"])],64)):(t(),l(D,{key:5},[s(" Text/String 类型 (默认) "),a(c,{"model-value":r(f.key),"onUpdate:modelValue":v=>y(f.key,v),placeholder:f.placeholder,clearable:o.clearable},null,8,["model-value","onUpdate:modelValue","placeholder","clearable"])],64)),s(" 字段描述 "),f.description?(t(),l("div",rt,p(f.description),1)):s("v-if",true)])])):s("v-if",true)],64))),128))])}}}),Ce=de(ct,[["__scopeId","data-v-d82952a0"]]),ut={class:"dialog-layout"},vt={class:"tab-nav"},mt=["onClick"],pt={key:0,class:"tab-badge"},gt={class:"tab-content"},ft={class:"content-section"},_t={class:"form-group"},ht={class:"form-row"},yt={class:"form-group flex-1"},kt={class:"form-group"},bt={class:"switch-wrapper"},$t={class:"switch-label"},wt={class:"form-group"},Vt={class:"section-divider"},Ct={class:"content-section"},xt={class:"override-hint-bar"},It={class:"pipeline-flow"},St={class:"phase-icon"},Ut={class:"phase-info"},Tt={class:"phase-name"},Dt={class:"phase-desc"},Ot={class:"phase-badge"},zt={key:0,class:"phase-middlewares"},Pt={class:"mw-card"},Ft={class:"mw-content"},Lt={class:"mw-name"},At={class:"mw-desc"},Et={key:2,class:"phase-connector"},Mt={class:"connector-arrow"},Rt={class:"content-section"},Nt={class:"override-hint-bar"},qt={key:0,class:"plugins-override-list"},Bt=["onClick"],Ht={class:"plugin-info"},Gt={class:"plugin-name"},Jt={key:0,class:"override-badge"},Wt={class:"plugin-actions"},jt={class:"plugin-config-fields"},Kt={key:0,class:"override-field-row"},Qt={class:"field-label"},Xt={class:"field-input"},Yt={key:0,class:"field-hint"},Zt={key:1,class:"empty-hint"},el={class:"dialog-footer"},tl=ie({__name:"ChannelConfigDialog",props:{modelValue:{type:Boolean},channel:{default:null}},emits:["update:modelValue","saved"],setup(o,{emit:I}){const g=o,w=I,r=re({get:()=>g.modelValue,set:d=>w("update:modelValue",d)}),y=re(()=>{var d;return!!((d=g.channel)!=null&&d.id)}),S=h("basic"),O=h(false),b=h(new Set),m=h([]),k=h({}),z=h([]),$=h([]),c=h({name:"",enabled:true,connectorId:"",connectorConfig:{},pluginOverrides:{},tags:[]}),f=[{id:"basic",label:"基本信息",icon:"file-text"},{id:"middlewares",label:"中间件流程",icon:"git-branch"},{id:"plugins",label:"插件配置",icon:"puzzle"}],v=[{id:"lifecycle-prepare",label:"准备",description:"验证、权限检查",icon:"clipboard-check",colorClass:"phase-prepare"},{id:"lifecycle-pre-request",label:"预处理",description:"预设应用、参数处理",icon:"settings",colorClass:"phase-pre"},{id:"lifecycle-request",label:"执行",description:"调用连接器生成",icon:"play",colorClass:"phase-request"},{id:"lifecycle-post-request",label:"后处理",description:"结果缓存、格式转换",icon:"package",colorClass:"phase-post"},{id:"lifecycle-finalize",label:"完成",description:"计费结算、记录保存",icon:"check-circle",colorClass:"phase-finalize"}],U={billing:"计费模块",transform:"转换处理",validation:"验证检查",preset:"预设系统",cache:"缓存管理",recording:"任务记录",request:"请求执行",custom:"自定义"},j=re(()=>c.value.connectorId?k.value[c.value.connectorId]||[]:[]),Q=re(()=>{const d=m.value.find(u=>u.id===c.value.connectorId);return(d==null?void 0:d.name)||"连接器"}),P=re(()=>f.map(d=>{let u="";return d.id==="middlewares"&&(u=String(z.value.length)),d.id==="plugins"&&V.value.length>0&&(u=String(V.value.length)),{...d,badge:u}})),V=re(()=>$.value.filter(d=>d.configFields&&d.configFields.length>0)),_=d=>z.value.filter(u=>u.phase===d),K=(d,u)=>{var M,le,Y;return(Y=(le=(M=c.value.pluginOverrides)==null?void 0:M[d])==null?void 0:le.middlewares)==null?void 0:Y[u]},ce=(d,u,M)=>{c.value.pluginOverrides||(c.value.pluginOverrides={}),c.value.pluginOverrides[d]||(c.value.pluginOverrides[d]={}),c.value.pluginOverrides[d].middlewares||(c.value.pluginOverrides[d].middlewares={}),M==null?(delete c.value.pluginOverrides[d].middlewares[u],Object.keys(c.value.pluginOverrides[d].middlewares).length===0&&delete c.value.pluginOverrides[d].middlewares,Object.keys(c.value.pluginOverrides[d]).length===0&&delete c.value.pluginOverrides[d]):c.value.pluginOverrides[d].middlewares[u]=M},me=d=>{const u=K(d.configGroup||d.name,d.name);return u!==void 0?u?"active override":"override":d.enabled?"active":""},T=(d,u)=>{var M,le;return(le=(M=c.value.pluginOverrides)==null?void 0:M[d])==null?void 0:le[u]},x=(d,u,M)=>{c.value.pluginOverrides||(c.value.pluginOverrides={}),c.value.pluginOverrides[d]||(c.value.pluginOverrides[d]={}),M==null||M===""?(delete c.value.pluginOverrides[d][u],Object.keys(c.value.pluginOverrides[d]).length===0&&delete c.value.pluginOverrides[d]):c.value.pluginOverrides[d][u]=M},H=d=>{var M;const u=(M=c.value.pluginOverrides)==null?void 0:M[d];return u&&Object.keys(u).length>0},W=d=>{c.value.pluginOverrides&&delete c.value.pluginOverrides[d]},q=d=>{b.value.has(d)?b.value.delete(d):b.value.add(d)},n=(d,u)=>{var F,J;if(!u.showWhen)return true;const{field:M,value:le}=u.showWhen,Y=(J=(F=c.value.pluginOverrides)==null?void 0:F[d.id])==null?void 0:J[M],ne=d.config[M];return(Y!==void 0?Y:ne)===le},i=async d=>{if(c.value.connectorConfig={},d&&!k.value[d])try{const u=await $e.fields(d);k.value[d]=u}catch(u){console.error("Failed to load connector fields:",u)}},A=async()=>{var d;if(!c.value.name){G.error("请输入渠道名称");return}if(!c.value.connectorId){G.error("请选择连接器");return}O.value=true;try{y.value&&((d=g.channel)!=null&&d.id)?(await he.update(g.channel.id,c.value),G.success("保存成功")):(await he.create(c.value),G.success("创建成功")),w("saved"),r.value=false}catch(u){G.error(u instanceof Error?u.message:"操作失败")}finally{O.value=false}},Z=()=>{S.value="basic",b.value.clear()},B=async()=>{try{const[d,u,M]=await Promise.all([$e.list(),we.list(),Ie.list()]);m.value=d,z.value=u,$.value=M.filter(le=>le.configFields&&le.configFields.length>0||le.middlewares&&le.middlewares.length>0)}catch(d){console.error("Failed to load data:",d)}};return ge(()=>g.modelValue,async d=>{if(d)if(await B(),g.channel){if(c.value=JSON.parse(JSON.stringify(g.channel)),c.value.pluginOverrides||(c.value.pluginOverrides={}),c.value.connectorConfig||(c.value.connectorConfig={}),c.value.connectorId&&!k.value[c.value.connectorId])try{const u=await $e.fields(c.value.connectorId);k.value[c.value.connectorId]=u}catch(u){console.error("Failed to load connector fields:",u)}for(const u of Object.keys(c.value.pluginOverrides))b.value.add(u)}else c.value={name:"",enabled:true,connectorId:"",connectorConfig:{},pluginOverrides:{},tags:[]}}),(d,u)=>{const M=E("k-icon"),le=E("el-input"),Y=E("el-option"),ne=E("el-select"),ue=E("el-switch"),F=E("k-button"),J=E("el-input-number"),oe=E("el-dialog");return t(),ae(oe,{modelValue:r.value,"onUpdate:modelValue":u[6]||(u[6]=N=>r.value=N),title:y.value?"编辑渠道":"创建渠道",width:"800px","close-on-click-modal":false,class:"channel-config-dialog",onClosed:Z},{footer:C(()=>[e("div",el,[a(F,{onClick:u[5]||(u[5]=N=>r.value=false)},{default:C(()=>[...u[24]||(u[24]=[R("取消",-1)])]),_:1}),a(F,{type:"primary",onClick:A,loading:O.value},{default:C(()=>[R(p(y.value?"保存":"创建"),1)]),_:1},8,["loading"])])]),default:C(()=>[e("div",ut,[s(" 左侧 Tab 导航 "),e("div",vt,[(t(true),l(D,null,X(P.value,N=>(t(),l("div",{key:N.id,class:ee(["tab-item",{active:S.value===N.id}]),onClick:te=>S.value=N.id},[a(M,{name:N.icon},null,8,["name"]),e("span",null,p(N.label),1),N.badge?(t(),l("span",pt,p(N.badge),1)):s("v-if",true)],10,mt))),128))]),s(" 右侧内容区 "),e("div",gt,[s(" 基本信息 "),ke(e("div",ft,[u[13]||(u[13]=e("div",{class:"section-header"},[e("h4",null,"基本信息"),e("p",null,"设置渠道的名称、连接器和标签")],-1)),e("div",_t,[u[7]||(u[7]=e("label",{class:"form-label required"},"渠道名称",-1)),a(le,{modelValue:c.value.name,"onUpdate:modelValue":u[0]||(u[0]=N=>c.value.name=N),placeholder:"如 OpenAI DALL-E"},null,8,["modelValue"]),u[8]||(u[8]=e("div",{class:"form-hint"},"用户可见的渠道名称,冲突时会自动添加后缀",-1))]),e("div",ht,[e("div",yt,[u[9]||(u[9]=e("label",{class:"form-label required"},"连接器",-1)),a(ne,{modelValue:c.value.connectorId,"onUpdate:modelValue":u[1]||(u[1]=N=>c.value.connectorId=N),placeholder:"选择连接器",onChange:i,style:{width:"100%"}},{default:C(()=>[(t(true),l(D,null,X(m.value,N=>(t(),ae(Y,{key:N.id,label:N.name,value:N.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),e("div",kt,[u[10]||(u[10]=e("label",{class:"form-label"},"启用状态",-1)),e("div",bt,[a(ue,{modelValue:c.value.enabled,"onUpdate:modelValue":u[2]||(u[2]=N=>c.value.enabled=N)},null,8,["modelValue"]),e("span",$t,p(c.value.enabled?"启用":"禁用"),1)])])]),e("div",wt,[u[11]||(u[11]=e("label",{class:"form-label"},"标签",-1)),a(Me,{modelValue:c.value.tags,"onUpdate:modelValue":u[3]||(u[3]=N=>c.value.tags=N),placeholder:"输入标签后按回车..."},null,8,["modelValue"]),u[12]||(u[12]=e("div",{class:"form-hint"},"用于分类和筛选渠道",-1))]),s(" 连接器配置(内嵌) "),j.value.length>0?(t(),l(D,{key:0},[e("div",Vt,[e("span",null,p(Q.value)+" 配置",1)]),a(Ce,{fields:j.value,modelValue:c.value.connectorConfig,"onUpdate:modelValue":u[4]||(u[4]=N=>c.value.connectorConfig=N)},null,8,["fields","modelValue"])],64)):s("v-if",true)],512),[[be,S.value==="basic"]]),s(" 中间件流程 "),ke(e("div",Ct,[u[18]||(u[18]=e("div",{class:"section-header"},[e("h4",null,"中间件流程"),e("p",null,"控制此渠道的中间件启用状态")],-1)),e("div",xt,[a(M,{name:"info-circle"}),u[14]||(u[14]=e("span",null,"留空表示跟随全局配置",-1))]),e("div",It,[(t(),l(D,null,X(v,(N,te)=>e("div",{key:N.id,class:"phase-section"},[s(" 阶段标题 "),e("div",{class:ee(["phase-header",N.colorClass])},[e("div",St,[a(M,{name:N.icon},null,8,["name"])]),e("div",Ut,[e("span",Tt,p(N.label),1),e("span",Dt,p(N.description),1)]),e("span",Ot,p(_(N.id).length),1)],2),s(" 中间件列表 "),_(N.id).length>0?(t(),l("div",zt,[(t(true),l(D,null,X(_(N.id),se=>(t(),l("div",{key:se.name,class:ee(["mw-item",{"has-override":K(se.configGroup||se.name,se.name)!==void 0}])},[e("div",Pt,[e("div",{class:ee(["mw-status",me(se)])},null,2),e("div",Ft,[e("span",Lt,p(se.displayName),1),e("span",At,p(se.description||U[se.category]||se.category),1)]),a(ne,{"model-value":K(se.configGroup||se.name,se.name),"onUpdate:modelValue":Re=>ce(se.configGroup||se.name,se.name,Re),placeholder:se.enabled?"全局: 启用":"全局: 禁用",clearable:"",size:"small",class:"mw-switch"},{default:C(()=>[a(Y,{label:"启用",value:true}),a(Y,{label:"禁用",value:false})]),_:1},8,["model-value","onUpdate:modelValue","placeholder"])])],2))),128))])):(t(),l(D,{key:1},[s(" 空状态 "),u[15]||(u[15]=e("div",{class:"empty-phase"},[e("span",null,"无中间件")],-1))],2112)),s(" 阶段间连接箭头 "),te<v.length-1?(t(),l("div",Et,[u[16]||(u[16]=e("div",{class:"connector-line"},null,-1)),e("div",Mt,[a(M,{name:"chevron-down"})]),u[17]||(u[17]=e("div",{class:"connector-line"},null,-1))])):s("v-if",true)])),64))]),s(" 底部说明 "),u[19]||(u[19]=e("div",{class:"pipeline-footer"},[e("div",{class:"footer-item"},[e("span",{class:"dot active"}),e("span",null,"启用 - 中间件将在请求中执行")]),e("div",{class:"footer-item"},[e("span",{class:"dot"}),e("span",null,"禁用 - 中间件将被跳过")]),e("div",{class:"footer-item"},[e("span",{class:"dot override"}),e("span",null,"已覆盖 - 与全局配置不同")])],-1))],512),[[be,S.value==="middlewares"]]),s(" 插件配置 "),ke(e("div",Rt,[u[23]||(u[23]=e("div",{class:"section-header"},[e("h4",null,"插件配置覆盖"),e("p",null,"为此渠道单独配置插件参数")],-1)),e("div",Nt,[a(M,{name:"info-circle"}),u[20]||(u[20]=e("span",null,"留空使用全局配置,填写后将覆盖全局设置",-1))]),V.value.length>0?(t(),l("div",qt,[(t(true),l(D,null,X(V.value,N=>(t(),l("div",{key:N.id,class:ee(["plugin-override-card",{expanded:b.value.has(N.id)}])},[e("div",{class:"plugin-header",onClick:te=>q(N.id)},[e("div",Ht,[e("span",Gt,p(N.name),1),H(N.id)?(t(),l("span",Jt,"已覆盖")):s("v-if",true)]),e("div",Wt,[H(N.id)?(t(),ae(F,{key:0,size:"mini",onClick:ve(te=>W(N.id),["stop"])},{default:C(()=>[...u[21]||(u[21]=[R(" 清除 ",-1)])]),_:1},8,["onClick"])):s("v-if",true),a(M,{name:b.value.has(N.id)?"chevron-up":"chevron-down"},null,8,["name"])])],8,Bt),ke(e("div",jt,[(t(true),l(D,null,X(N.configFields,te=>(t(),l(D,{key:te.key},[n(N,te)?(t(),l("div",Kt,[e("label",Qt,p(te.label),1),e("div",Xt,[s(" Boolean 类型 "),te.type==="boolean"?(t(),ae(ne,{key:0,"model-value":T(N.id,te.key),"onUpdate:modelValue":se=>x(N.id,te.key,se),placeholder:"使用全局配置",clearable:""},{default:C(()=>[a(Y,{label:"是",value:true}),a(Y,{label:"否",value:false})]),_:1},8,["model-value","onUpdate:modelValue"])):te.type==="select"?(t(),l(D,{key:1},[s(" Select 类型 "),a(ne,{"model-value":T(N.id,te.key),"onUpdate:modelValue":se=>x(N.id,te.key,se),placeholder:`全局: ${N.config[te.key]??"未设置"}`,clearable:""},{default:C(()=>[(t(true),l(D,null,X(te.options,se=>(t(),ae(Y,{key:String(se.value),label:se.label,value:se.value},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onUpdate:modelValue","placeholder"])],64)):te.type==="number"?(t(),l(D,{key:2},[s(" Number 类型 "),a(J,{"model-value":T(N.id,te.key),"onUpdate:modelValue":se=>x(N.id,te.key,se),placeholder:`全局: ${N.config[te.key]??""}`},null,8,["model-value","onUpdate:modelValue","placeholder"])],64)):(t(),l(D,{key:3},[s(" Text/String 类型 (默认) "),a(le,{"model-value":T(N.id,te.key),"onUpdate:modelValue":se=>x(N.id,te.key,se),placeholder:`全局: ${N.config[te.key]??"未设置"}`,clearable:""},null,8,["model-value","onUpdate:modelValue","placeholder"])],64))]),te.description?(t(),l("div",Yt,p(te.description),1)):s("v-if",true)])):s("v-if",true)],64))),128))],512),[[be,b.value.has(N.id)]])],2))),128))])):(t(),l("div",Zt,[a(M,{name:"apps"}),u[22]||(u[22]=e("span",null,"暂无可配置的插件",-1))]))],512),[[be,S.value==="plugins"]])])])]),_:1},8,["modelValue","title"])}}}),ll=de(tl,[["__scopeId","data-v-74bfe0c7"]]),sl={key:0},al=ie({__name:"LoadingState",props:{text:{default:"加载中..."},icon:{default:"sync"},size:{default:"default"}},setup(o){const I=o,g=re(()=>`size-${I.size}`);return(w,r)=>{const y=E("k-icon");return t(),l("div",{class:ee(["loading-state",g.value])},[a(y,{name:o.icon,class:"loading-icon"},null,8,["name"]),o.text?(t(),l("span",sl,p(o.text),1)):s("v-if",true)],2)}}}),nl=de(al,[["__scopeId","data-v-99cf565d"]]),ol={class:"ml-view-container"},il={class:"ml-view-header"},dl={class:"ml-header-left"},rl={class:"ml-header-right"},cl={class:"ml-view-content"},ul={class:"ml-grid"},vl=["onClick"],ml={class:"card-header"},pl={class:"header-main"},gl={class:"channel-name"},fl={class:"header-meta"},_l={class:"connector-badge"},hl={key:0,class:"cost-badge"},yl={class:"card-body"},kl={key:0,class:"field-list"},bl={class:"field-label"},$l={class:"field-value"},wl={key:1,class:"tags-list"},Vl={class:"ml-table-container"},Cl={class:"ml-table"},xl=["onClick"],Il={class:"col-name"},Sl={class:"name-text"},Ul={class:"col-connector"},Tl={class:"connector-badge"},Dl={class:"col-tags"},Ol={class:"tags-wrapper"},zl={key:0,class:"mini-tag more"},Pl={class:"col-cost"},Fl={key:0,class:"cost-value"},Ll={class:"action-btns"},Al=ie({__name:"ChannelsView",setup(o){const I=["text2img","img2img","NSFW"],g=h(false),w=h("card"),r=h([]),y=h([]),S=h([]),O=h({}),b=h(false),m=h(null),k=h([]),z=re(()=>{const T=new Set;return r.value.forEach(x=>{(x.tags||[]).forEach(H=>T.add(H))}),Array.from(T).sort()}),$=re(()=>k.value.length===0?r.value:r.value.filter(T=>k.value.every(x=>(T.tags||[]).includes(x)))),c=T=>{const x=y.value.find(H=>H.id===T);return x?x.name:T},f=T=>{var H;const x=y.value.find(W=>W.id===T.connectorId);return(H=x==null?void 0:x.cardFields)!=null&&H.length?x.cardFields.map(W=>{const q=x.fields.find(n=>n.key===W.key);return{key:W.key,label:W.label||(q==null?void 0:q.label)||W.key,format:W.format||"text"}}):[]},v=(T,x)=>{var W,q,n,i,A;const H=x.configGroup;switch(x.source){case"channel":if(H){const Z=(q=(W=T.pluginOverrides)==null?void 0:W[H])==null?void 0:q[x.key];if(Z!==void 0)return Z}return T[x.key];case"connectorConfig":return(n=T.connectorConfig)==null?void 0:n[x.key];case"pluginOverride":return H?(A=(i=T.pluginOverrides)==null?void 0:i[H])==null?void 0:A[x.key]:void 0;default:return}},U=(T,x)=>{var n,i,A;const H=x.configGroup;if(!H)return x.suffix||"";const W=(i=(n=T.pluginOverrides)==null?void 0:n[H])==null?void 0:i.currencyLabel;if(W)return` ${W}${x.suffix||""}`;const q=(A=O.value[H])==null?void 0:A.currencyLabel;return q?` ${q}${x.suffix||""}`:` 积分${x.suffix||""}`},j=(T,x,H)=>{if(T==null||T==="")return"-";let W;switch(x){case"password-mask":W="••••••";break;case"boolean":W=T?"是":"否";break;case"number":W=String(T);break;case"size":W=String(T);break;case"currency":W=T===0?"免费":String(T);break;default:W=String(T)}return H?`${W} ${H}`:W},Q=async()=>{g.value=true;try{const[T,x,H]=await Promise.all([he.list(),$e.list(),we.cardFields()]);r.value=T,y.value=x,S.value=H.fields,O.value=H.globalConfigs}catch{G.error("加载数据失败")}finally{g.value=false}},P=()=>{m.value=null,b.value=true},V=T=>{m.value=T,b.value=true},_=()=>{Q()},K=async T=>{if(confirm(`确定要删除渠道 "${T.name}" 吗?`))try{await he.delete(T.id),G.success("删除成功"),Q()}catch{G.error("删除失败")}},ce=async T=>{try{await he.toggle(T.id,T.enabled)}catch{T.enabled=!T.enabled,G.error("操作失败")}},me=T=>{const x=JSON.parse(JSON.stringify(T));delete x.id,x.name=`${T.name} (副本)`,m.value=x,b.value=true};return pe(()=>{Q()}),(T,x)=>{const H=E("k-icon"),W=E("k-button"),q=E("el-switch");return t(),l("div",ol,[e("div",il,[e("div",dl,[a(W,{solid:"",type:"primary",onClick:P},{icon:C(()=>[a(H,{name:"add"})]),default:C(()=>[x[7]||(x[7]=R(" 新建渠道 ",-1))]),_:1}),a(Ue,{modelValue:k.value,"onUpdate:modelValue":x[0]||(x[0]=n=>k.value=n),"all-tags":z.value,"preset-tags":I},null,8,["modelValue","all-tags"])]),e("div",rl,[a(Ee,{modelValue:w.value,"onUpdate:modelValue":x[1]||(x[1]=n=>w.value=n)},null,8,["modelValue"])])]),e("div",cl,[g.value?(t(),ae(nl,{key:0})):w.value==="card"?(t(),l(D,{key:1},[s(" 卡片视图 "),e("div",ul,[(t(true),l(D,null,X($.value,n=>(t(),l("div",{key:n.id},[e("div",{class:"ml-card ml-card--clickable",onClick:i=>V(n)},[e("div",ml,[e("div",pl,[e("div",gl,p(n.name),1),a(q,{modelValue:n.enabled,"onUpdate:modelValue":i=>n.enabled=i,size:"small",onChange:i=>ce(n),onClick:x[2]||(x[2]=ve(()=>{},["stop"]))},null,8,["modelValue","onUpdate:modelValue","onChange"])]),e("div",fl,[e("span",_l,[a(H,{name:"link"}),R(" "+p(c(n.connectorId)),1)]),s(" 中间件字段(如费用)显示在标题旁 "),(t(true),l(D,null,X(S.value,i=>(t(),l(D,{key:`mw-${i.key}`},[i.key==="cost"?(t(),l("span",hl,p(j(v(n,i),i.format,U(n,i))),1)):s("v-if",true)],64))),128))])]),e("div",yl,[s(" 配置字段列表 "),f(n).length?(t(),l("div",kl,[(t(true),l(D,null,X(f(n),i=>(t(),l("div",{key:i.key,class:"field-item"},[e("span",bl,p(i.label),1),e("span",$l,p(j(n.connectorConfig[i.key],i.format)),1)]))),128))])):s("v-if",true),s(" 标签 "),n.tags&&n.tags.length?(t(),l("div",wl,[(t(true),l(D,null,X(n.tags,i=>(t(),l("span",{key:i,class:"tag-pill"},p(i),1))),128))])):s("v-if",true)]),e("div",{class:"card-footer",onClick:x[3]||(x[3]=ve(()=>{},["stop"]))},[a(W,{size:"mini",class:"ml-btn-outline-primary",onClick:i=>me(n)},{icon:C(()=>[a(H,{name:"copy"})]),default:C(()=>[x[8]||(x[8]=R(" 复制 ",-1))]),_:1},8,["onClick"]),x[10]||(x[10]=e("div",{class:"spacer"},null,-1)),a(W,{size:"mini",class:"ml-btn-outline-danger",onClick:i=>K(n)},{icon:C(()=>[a(H,{name:"delete"})]),default:C(()=>[x[9]||(x[9]=R(" 删除 ",-1))]),_:1},8,["onClick"])])],8,vl)]))),128))])],2112)):(t(),l(D,{key:2},[s(" 列表视图 "),e("div",Vl,[e("table",Cl,[x[13]||(x[13]=e("thead",null,[e("tr",null,[e("th",{class:"col-name"},"名称"),e("th",{class:"col-connector"},"连接器"),e("th",{class:"col-tags"},"标签"),e("th",{class:"col-cost"},"费用"),e("th",{class:"col-status"},"状态"),e("th",{class:"col-actions"},"操作")])],-1)),e("tbody",null,[(t(true),l(D,null,X($.value,n=>(t(),l("tr",{key:n.id,onClick:i=>V(n)},[e("td",Il,[e("span",Sl,p(n.name),1)]),e("td",Ul,[e("span",Tl,p(c(n.connectorId)),1)]),e("td",Dl,[e("div",Ol,[(t(true),l(D,null,X((n.tags||[]).slice(0,2),i=>(t(),l("span",{key:i,class:"mini-tag"},p(i),1))),128)),n.tags&&n.tags.length>2?(t(),l("span",zl,"+"+p(n.tags.length-2),1)):s("v-if",true)])]),e("td",Pl,[(t(true),l(D,null,X(S.value,i=>(t(),l(D,{key:`mw-${i.key}`},[i.key==="cost"?(t(),l("span",Fl,p(j(v(n,i),i.format,U(n,i))),1)):s("v-if",true)],64))),128))]),e("td",{class:"col-status",onClick:x[4]||(x[4]=ve(()=>{},["stop"]))},[a(q,{modelValue:n.enabled,"onUpdate:modelValue":i=>n.enabled=i,size:"small",onChange:i=>ce(n)},null,8,["modelValue","onUpdate:modelValue","onChange"])]),e("td",{class:"col-actions",onClick:x[5]||(x[5]=ve(()=>{},["stop"]))},[e("div",Ll,[a(W,{size:"mini",class:"ml-btn-outline-primary",onClick:i=>me(n)},{icon:C(()=>[a(H,{name:"copy"})]),default:C(()=>[x[11]||(x[11]=R(" 复制 ",-1))]),_:1},8,["onClick"]),a(W,{size:"mini",class:"ml-btn-outline-danger",onClick:i=>K(n)},{icon:C(()=>[a(H,{name:"delete"})]),default:C(()=>[x[12]||(x[12]=R(" 删除 ",-1))]),_:1},8,["onClick"])])])],8,xl))),128))])])])],2112))]),s(" 编辑/创建对话框 "),a(ll,{modelValue:b.value,"onUpdate:modelValue":x[6]||(x[6]=n=>b.value=n),channel:m.value,onSaved:_},null,8,["modelValue","channel"])])}}}),El=de(Al,[["__scopeId","data-v-67a4b49d"]]),Ml={class:"json-editor"},Rl={key:0,class:"error-msg"},Nl=ie({__name:"JsonEditor",props:{modelValue:{},rows:{}},emits:["update:modelValue"],setup(o,{emit:I}){const g=o,w=I,r=h(""),y=h("");ge(()=>g.modelValue,O=>{try{r.value=JSON.stringify(O,null,2)}catch{r.value=""}},{immediate:true});const S=()=>{try{const O=JSON.parse(r.value);y.value="",w("update:modelValue",O)}catch{y.value="Invalid JSON format"}};return(O,b)=>{const m=E("el-input");return t(),l("div",Ml,[a(m,{modelValue:r.value,"onUpdate:modelValue":b[0]||(b[0]=k=>r.value=k),type:"textarea",rows:o.rows,class:"code-input",onBlur:S},null,8,["modelValue","rows"]),y.value?(t(),l("div",Rl,p(y.value),1)):s("v-if",true)])}}}),ql=de(Nl,[["__scopeId","data-v-4d47b7db"]]),Bl={class:"image-upload"},Hl={key:0,class:"image-list"},Gl={class:"image-preview"},Jl=["src","alt"],Wl={class:"image-overlay"},jl={class:"image-name"},Kl={class:"upload-content"},Ql={key:1,class:"upload-loading"},Xl=ie({__name:"ImageUpload",props:{modelValue:{},maxCount:{}},emits:["update:modelValue"],setup(o,{emit:I}){const g=o,w=I,r=h(),y=h(false),S=h([]),O=async()=>{var v;const f=[];for(const U of g.modelValue)U&&f.push({url:U,filename:((v=U.split("/").pop())==null?void 0:v.split("?")[0])||"image",mime:"image/png",previewUrl:U});S.value=f};ge(()=>g.modelValue,()=>{O()},{immediate:true});const b=()=>{var f;(f=r.value)==null||f.click()},m=async f=>{const v=f.target;!v.files||v.files.length===0||(await z(Array.from(v.files)),v.value="")},k=async f=>{var U;const v=(U=f.dataTransfer)==null?void 0:U.files;!v||v.length===0||await z(Array.from(v).filter(j=>j.type.startsWith("image/")))},z=async f=>{if(f.length===0)return;const v=g.maxCount||10;S.value.length+f.length>v&&(G.warning(`最多上传 ${v} 张图片`),f=f.slice(0,v-S.value.length)),y.value=true;try{for(const U of f){const j=await $(U),Q=await Qe.upload(j,U.type,U.name);if(!Q.url){G.error("缓存服务未配置 selfUrl,无法获取图片 URL");continue}S.value.push({url:Q.url,filename:Q.filename,mime:Q.mime,previewUrl:Q.url})}w("update:modelValue",S.value.map(U=>U.url))}catch(U){G.error("上传失败"),console.error(U)}finally{y.value=false}},$=f=>new Promise((v,U)=>{const j=new FileReader;j.onload=()=>{const P=j.result.split(",")[1];v(P)},j.onerror=U,j.readAsDataURL(f)}),c=f=>{S.value.splice(f,1),w("update:modelValue",S.value.map(v=>v.url))};return pe(()=>{O()}),(f,v)=>{const U=E("k-icon"),j=E("k-button");return t(),l("div",Bl,[s(" 已上传的图片列表 "),S.value.length>0?(t(),l("div",Hl,[(t(true),l(D,null,X(S.value,(Q,P)=>(t(),l("div",{key:Q.url||P,class:"image-item"},[e("div",Gl,[e("img",{src:Q.previewUrl,alt:Q.filename},null,8,Jl),e("div",Wl,[a(j,{size:"mini",class:"remove-btn",onClick:V=>c(P)},{icon:C(()=>[a(U,{name:"delete"})]),_:1},8,["onClick"])])]),e("div",jl,p(Q.filename),1)]))),128))])):s("v-if",true),s(" 上传按钮 "),e("div",{class:"upload-area",onClick:b,onDragover:v[0]||(v[0]=ve(()=>{},["prevent"])),onDrop:ve(k,["prevent"])},[e("input",{ref_key:"fileInput",ref:r,type:"file",accept:"image/*",multiple:"",style:{display:"none"},onChange:m},null,544),e("div",Kl,[a(U,{name:"add",class:"upload-icon"}),v[1]||(v[1]=e("span",{class:"upload-text"},"点击或拖拽上传图片",-1))])],32),s(" 加载状态 "),y.value?(t(),l("div",Ql,[a(U,{name:"sync",class:"loading-icon"}),v[2]||(v[2]=R(" 上传中... ",-1))])):s("v-if",true)])}}}),Pe=de(Xl,[["__scopeId","data-v-47f2485e"]]),Yl={class:"ml-view-container"},Zl={class:"ml-view-header"},es={class:"ml-header-left"},ts={class:"ml-header-right"},ls={class:"ml-view-content"},ss={key:0,class:"loading-state"},as={class:"ml-masonry"},ns=["onClick"],os={key:0,class:"card-thumbnail"},is=["src","alt"],ds={class:"thumbnail-overlay"},rs={key:0,class:"ref-count"},cs={key:1,class:"card-thumbnail placeholder"},us={class:"card-content"},vs={class:"card-title"},ms={key:0,class:"card-tags"},ps={key:0,class:"mini-tag more"},gs={class:"ml-table-container"},fs={class:"ml-table"},_s=["onClick"],hs={class:"col-thumb"},ys={class:"thumb-wrapper"},ks=["src","alt"],bs={key:1,class:"thumb-placeholder"},$s={class:"col-name"},ws={class:"name-text"},Vs={class:"col-template"},Cs={class:"template-preview"},xs={class:"col-refs"},Is={key:0,class:"ref-badge"},Ss={key:1,class:"no-data"},Us={class:"col-source"},Ts={class:"action-btns"},Ds={class:"dialog-footer"},Os=ie({__name:"PresetsView",setup(o){const I=["本地","远程","text2img","img2img","NSFW"],g=h(false),w=h([]),r=h(false),y=h(false),S=h([]),O=h("card"),b=re(()=>{const V=new Set;return w.value.forEach(_=>{(_.tags||[]).forEach(K=>V.add(K))}),Array.from(V).sort()}),m=h({name:"",promptTemplate:"",referenceImages:[],tags:[],parameterOverrides:{},enabled:true,source:"user"}),k=h([]);ge(()=>m.value.thumbnail,V=>{k.value=V?[V]:[]},{immediate:true}),ge(k,V=>{m.value.thumbnail=V.length>0?V[0]:""});const z=re(()=>S.value.length===0?w.value:w.value.filter(V=>S.value.every(_=>_==="本地"?V.source==="user":_==="远程"?V.source==="api":(V.tags||[]).includes(_)))),$=async()=>{g.value=true;try{w.value=await _e.list()}catch{G.error("加载数据失败")}finally{g.value=false}},c=()=>{y.value=false,m.value={name:"",promptTemplate:"",referenceImages:[],tags:[],parameterOverrides:{},enabled:true,source:"user"},r.value=true},f=V=>{y.value=true,m.value=JSON.parse(JSON.stringify(V)),r.value=true},v=V=>{y.value=false;const _=JSON.parse(JSON.stringify(V));delete _.id,_.name=`${V.name} (副本)`,_.source="user",m.value=_,r.value=true},U=async V=>{try{await _e.toggle(V.id,V.enabled)}catch{V.enabled=!V.enabled,G.error("操作失败")}},j=(V,_=50)=>{if(!V)return"-";const K=V.replace(/\s+/g," ").trim();return K.length<=_?K:K.slice(0,_)+"..."},Q=async()=>{if(!m.value.name||!m.value.promptTemplate){G.warning("请填写必要信息");return}try{y.value&&m.value.id?(await _e.update(m.value.id,m.value),G.success("更新成功")):(await _e.create(m.value),G.success("创建成功")),r.value=false,$()}catch{G.error("操作失败")}},P=async V=>{if(confirm(`确定要删除预设 "${V.name}" 吗?`))try{await _e.delete(V.id),G.success("删除成功"),$()}catch{G.error("删除失败")}};return pe(()=>{$()}),(V,_)=>{const K=E("k-icon"),ce=E("k-button"),me=E("el-switch"),T=E("el-input"),x=E("el-form-item"),H=E("el-divider"),W=E("el-form"),q=E("el-dialog");return t(),l("div",Yl,[e("div",Zl,[e("div",es,[a(ce,{solid:"",type:"primary",onClick:c},{icon:C(()=>[a(K,{name:"add"})]),default:C(()=>[_[14]||(_[14]=R(" 新建预设 ",-1))]),_:1}),a(Ue,{modelValue:S.value,"onUpdate:modelValue":_[0]||(_[0]=n=>S.value=n),"all-tags":b.value,"preset-tags":I},null,8,["modelValue","all-tags"])]),e("div",ts,[a(Ee,{modelValue:O.value,"onUpdate:modelValue":_[1]||(_[1]=n=>O.value=n)},null,8,["modelValue"])])]),e("div",ls,[g.value?(t(),l("div",ss,[a(K,{name:"sync",class:"ml-spin"}),_[15]||(_[15]=R(" 加载中... ",-1))])):O.value==="card"?(t(),l(D,{key:1},[s(" 卡片视图 (瀑布流) "),e("div",as,[(t(true),l(D,null,X(z.value,n=>{var i,A;return t(),l("div",{key:n.id,class:"ml-masonry-item"},[e("div",{class:"preset-card",onClick:Z=>f(n)},[s(" 缩略图 "),n.thumbnail?(t(),l("div",os,[e("img",{src:n.thumbnail,alt:n.name,loading:"lazy"},null,8,is),e("div",ds,[(i=n.referenceImages)!=null&&i.length?(t(),l("span",rs,[a(K,{name:"image"}),R(" "+p(n.referenceImages.length),1)])):s("v-if",true)])])):(t(),l("div",cs,[a(K,{name:"image",class:"placeholder-icon"})])),s(" 内容 "),e("div",us,[e("div",vs,p(n.name),1),(A=n.tags)!=null&&A.length?(t(),l("div",ms,[(t(true),l(D,null,X(n.tags.slice(0,4),Z=>(t(),l("span",{key:Z,class:"mini-tag"},p(Z),1))),128)),n.tags.length>4?(t(),l("span",ps,"+"+p(n.tags.length-4),1)):s("v-if",true)])):s("v-if",true)]),s(" 操作按钮 "),e("div",{class:"card-actions",onClick:_[2]||(_[2]=ve(()=>{},["stop"]))},[a(me,{modelValue:n.enabled,"onUpdate:modelValue":Z=>n.enabled=Z,size:"small",onChange:Z=>U(n)},null,8,["modelValue","onUpdate:modelValue","onChange"]),a(ce,{size:"mini",class:"ml-btn-outline-primary",onClick:Z=>v(n)},{icon:C(()=>[a(K,{name:"copy"})]),default:C(()=>[_[16]||(_[16]=R(" 复制 ",-1))]),_:1},8,["onClick"]),n.source==="user"?(t(),ae(ce,{key:0,size:"mini",class:"ml-btn-outline-danger",onClick:Z=>P(n)},{icon:C(()=>[a(K,{name:"delete"})]),default:C(()=>[_[17]||(_[17]=R(" 删除 ",-1))]),_:1},8,["onClick"])):s("v-if",true)]),s(" 来源标记 "),e("div",{class:ee(["source-indicator",n.source])},p(n.source==="api"?"远程":"本地"),3)],8,ns)])}),128))])],2112)):(t(),l(D,{key:2},[s(" 列表视图 "),e("div",gs,[e("table",fs,[_[20]||(_[20]=e("thead",null,[e("tr",null,[e("th",{class:"col-thumb"},"缩略图"),e("th",{class:"col-name"},"名称"),e("th",{class:"col-template"},"Prompt 模板"),e("th",{class:"col-refs"},"参考图"),e("th",{class:"col-source"},"来源"),e("th",{class:"col-status"},"状态"),e("th",{class:"col-actions"},"操作")])],-1)),e("tbody",null,[(t(true),l(D,null,X(z.value,n=>{var i;return t(),l("tr",{key:n.id,onClick:A=>f(n)},[e("td",hs,[e("div",ys,[n.thumbnail?(t(),l("img",{key:0,src:n.thumbnail,alt:n.name},null,8,ks)):(t(),l("div",bs,[a(K,{name:"image"})]))])]),e("td",$s,[e("span",ws,p(n.name),1)]),e("td",Vs,[e("span",Cs,p(j(n.promptTemplate)),1)]),e("td",xs,[(i=n.referenceImages)!=null&&i.length?(t(),l("span",Is,[a(K,{name:"image"}),R(" "+p(n.referenceImages.length),1)])):(t(),l("span",Ss,"-"))]),e("td",Us,[e("span",{class:ee(["source-badge",n.source])},p(n.source==="api"?"远程":"本地"),3)]),e("td",{class:"col-status",onClick:_[3]||(_[3]=ve(()=>{},["stop"]))},[a(me,{modelValue:n.enabled,"onUpdate:modelValue":A=>n.enabled=A,size:"small",onChange:A=>U(n)},null,8,["modelValue","onUpdate:modelValue","onChange"])]),e("td",{class:"col-actions",onClick:_[4]||(_[4]=ve(()=>{},["stop"]))},[e("div",Ts,[a(ce,{size:"mini",class:"ml-btn-outline-primary",onClick:A=>v(n)},{icon:C(()=>[a(K,{name:"copy"})]),default:C(()=>[_[18]||(_[18]=R(" 复制 ",-1))]),_:1},8,["onClick"]),n.source==="user"?(t(),ae(ce,{key:0,size:"mini",class:"ml-btn-outline-danger",onClick:A=>P(n)},{icon:C(()=>[a(K,{name:"delete"})]),default:C(()=>[_[19]||(_[19]=R(" 删除 ",-1))]),_:1},8,["onClick"])):s("v-if",true)])])],8,_s)}),128))])])])],2112))]),s(" 编辑/创建对话框 "),a(q,{modelValue:r.value,"onUpdate:modelValue":_[13]||(_[13]=n=>r.value=n),title:y.value?"编辑预设":"创建预设",width:"600px","close-on-click-modal":false},{footer:C(()=>[e("span",Ds,[a(ce,{onClick:_[12]||(_[12]=n=>r.value=false)},{default:C(()=>[..._[27]||(_[27]=[R("取消",-1)])]),_:1}),a(ce,{type:"primary",onClick:Q},{default:C(()=>[..._[28]||(_[28]=[R("保存",-1)])]),_:1})])]),default:C(()=>[r.value?(t(),ae(W,{key:0,ref:"formRef",model:m.value,"label-width":"100px"},{default:C(()=>[a(x,{label:"名称",required:""},{default:C(()=>[a(T,{modelValue:m.value.name,"onUpdate:modelValue":_[5]||(_[5]=n=>m.value.name=n),disabled:y.value&&m.value.source==="api",placeholder:"如 二次元少女"},null,8,["modelValue","disabled"]),_[21]||(_[21]=e("div",{class:"form-tip"},"用于指令调用和展示,冲突时会自动添加后缀",-1))]),_:1}),a(x,{label:"Prompt 模板",required:""},{default:C(()=>[a(T,{modelValue:m.value.promptTemplate,"onUpdate:modelValue":_[6]||(_[6]=n=>m.value.promptTemplate=n),type:"textarea",rows:4,placeholder:"输入提示词模板,支持变量如 {prompt}"},null,8,["modelValue"]),_[22]||(_[22]=e("div",{class:"form-tip"},"默认将用户输入附加在最后,也可使用 {prompt} 指定位置",-1))]),_:1}),m.value.source==="user"?(t(),ae(x,{key:0,label:"缩略图"},{default:C(()=>[a(Pe,{modelValue:k.value,"onUpdate:modelValue":_[7]||(_[7]=n=>k.value=n),"max-count":1},null,8,["modelValue"]),_[23]||(_[23]=e("div",{class:"form-tip"},"用于在卡片视图中展示预设的预览图",-1))]),_:1})):s("v-if",true),a(x,{label:"参考图"},{default:C(()=>[a(Pe,{modelValue:m.value.referenceImages,"onUpdate:modelValue":_[8]||(_[8]=n=>m.value.referenceImages=n),"max-count":5},null,8,["modelValue"]),_[24]||(_[24]=e("div",{class:"form-tip"},"生成时会自动附加这些参考图片",-1))]),_:1}),a(H,{"content-position":"left"},{default:C(()=>[..._[25]||(_[25]=[R("高级设置",-1)])]),_:1}),a(x,{label:"标签"},{default:C(()=>[a(Me,{modelValue:m.value.tags,"onUpdate:modelValue":_[9]||(_[9]=n=>m.value.tags=n),placeholder:"输入标签..."},null,8,["modelValue"]),_[26]||(_[26]=e("div",{class:"form-tip"},"与渠道标签匹配时会自动关联",-1))]),_:1}),a(x,{label:"参数覆盖"},{default:C(()=>[a(ql,{modelValue:m.value.parameterOverrides,"onUpdate:modelValue":_[10]||(_[10]=n=>m.value.parameterOverrides=n),rows:3},null,8,["modelValue"])]),_:1}),a(x,{label:"启用状态"},{default:C(()=>[a(me,{modelValue:m.value.enabled,"onUpdate:modelValue":_[11]||(_[11]=n=>m.value.enabled=n)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])):s("v-if",true)]),_:1},8,["modelValue","title"])])}}}),zs=de(Os,[["__scopeId","data-v-8eaa50b4"]]),Ps=ie({__name:"StatusBadge",props:{status:{}},setup(o){const I=o,g=re(()=>{switch(I.status){case"pending":return"等待中";case"processing":return"处理中";case"success":return"成功";case"failed":return"失败";default:return I.status}});return(w,r)=>(t(),l("span",{class:ee(["status-badge",o.status])},p(g.value),3))}}),Fe=de(Ps,[["__scopeId","data-v-0bc21896"]]),Fs={class:"lightbox-container"},Ls={class:"lightbox-content"},As=["src"],Es={key:2,class:"image-counter"},Ms={key:0,class:"lightbox-sidebar"},Rs={class:"sidebar-header"},Ns={class:"sidebar-body"},qs={class:"info-block"},Bs={class:"block-header"},Hs={key:0,class:"info-block"},Gs={class:"info-value"},Js={key:1,class:"info-block"},Ws={class:"info-value"},js={class:"sidebar-footer"},Ks=ie({__name:"ImageLightbox",props:{visible:{type:Boolean},images:{},initialIndex:{default:0},prompt:{},createdAt:{},duration:{},showSidebar:{type:Boolean,default:true}},emits:["update:visible","close"],setup(o,{emit:I}){const g=o,w=I,r=h(g.initialIndex),y=re(()=>g.images[r.value]||"");ge(()=>g.visible,v=>{v?(r.value=g.initialIndex,document.body.style.overflow="hidden"):document.body.style.overflow=""}),ge(()=>g.initialIndex,v=>{r.value=v});const S=()=>{w("update:visible",false),w("close")},O=()=>{r.value=(r.value-1+g.images.length)%g.images.length},b=()=>{r.value=(r.value+1)%g.images.length},m=()=>{g.prompt&&(navigator.clipboard.writeText(g.prompt),G.success("已复制提示词"))},k=()=>{window.open(y.value,"_blank")},z=()=>{const v=document.createElement("a");v.href=y.value,v.download=`image-${Date.now()}.png`,v.click()},$=v=>(typeof v=="string"?new Date(v):v).toLocaleString(),c=v=>v<1e3?`${v}ms`:`${(v/1e3).toFixed(1)}s`,f=v=>{g.visible&&(v.key==="Escape"?S():v.key==="ArrowLeft"?O():v.key==="ArrowRight"&&b())};return pe(()=>{window.addEventListener("keydown",f)}),Ve(()=>{window.removeEventListener("keydown",f),document.body.style.overflow=""}),(v,U)=>{const j=E("k-icon");return t(),ae(qe,{to:"body"},[a(Ae,{name:"lightbox-fade"},{default:C(()=>[o.visible?(t(),l("div",{key:0,class:"lightbox-overlay",onClick:ve(S,["self"])},[e("div",Fs,[e("div",Ls,[s(" 左侧图片区域 "),e("div",{class:"lightbox-image-area",onClick:ve(S,["self"])},[s(" 关闭按钮 "),e("button",{class:"close-btn",onClick:S,title:"关闭 (Esc)"},[a(j,{name:"times"})]),s(" 多图时的导航 "),o.images.length>1?(t(),l("button",{key:0,class:"nav-btn prev",onClick:ve(O,["stop"]),title:"上一张"},[a(j,{name:"chevron-left"})])):s("v-if",true),e("img",{src:y.value,class:"lightbox-image",alt:"Preview"},null,8,As),o.images.length>1?(t(),l("button",{key:1,class:"nav-btn next",onClick:ve(b,["stop"]),title:"下一张"},[a(j,{name:"chevron-right"})])):s("v-if",true),s(" 图片计数器 "),o.images.length>1?(t(),l("div",Es,p(r.value+1)+" / "+p(o.images.length),1)):s("v-if",true)]),s(" 右侧信息栏 "),o.showSidebar?(t(),l("div",Ms,[e("div",Rs,[U[0]||(U[0]=e("div",{class:"info-title"},"图片详情",-1)),e("button",{class:"header-close-btn",onClick:S,title:"关闭"},[a(j,{name:"times"})])]),e("div",Ns,[s(" 提示词 "),e("div",qs,[e("div",Bs,[U[1]||(U[1]=e("span",null,"提示词",-1)),o.prompt?(t(),l("button",{key:0,class:"copy-btn",onClick:m}," 复制 ")):s("v-if",true)]),e("div",{class:ee(["prompt-content",{empty:!o.prompt}])},p(o.prompt||"无提示词"),3)]),s(" 创建时间 "),o.createdAt?(t(),l("div",Hs,[U[2]||(U[2]=e("div",{class:"block-header"},[e("span",null,"创建时间")],-1)),e("div",Gs,p($(o.createdAt)),1)])):s("v-if",true),s(" 生成耗时 "),o.duration?(t(),l("div",Js,[U[3]||(U[3]=e("div",{class:"block-header"},[e("span",null,"生成耗时")],-1)),e("div",Ws,p(c(o.duration)),1)])):s("v-if",true)]),e("div",js,[e("button",{class:"action-btn primary",onClick:k},[a(j,{name:"external-link"}),U[4]||(U[4]=R(" 查看原图 ",-1))]),e("button",{class:"action-btn secondary",onClick:z},[a(j,{name:"download"}),U[5]||(U[5]=R(" 下载 ",-1))])])])):s("v-if",true)])])])):s("v-if",true)]),_:1})])}}}),Te=de(Ks,[["__scopeId","data-v-bd68872f"]]),Qs={class:"ml-view-container"},Xs={class:"ml-view-header"},Ys={class:"ml-header-left"},Zs={class:"view-mode-switch"},ea={class:"ml-header-right"},ta={key:0,class:"stats-grid"},la={class:"stat-card"},sa={class:"stat-icon total"},aa={class:"stat-content"},na={class:"stat-value"},oa={class:"stat-card"},ia={class:"stat-icon success"},da={class:"stat-content"},ra={class:"stat-value success"},ca={class:"stat-card"},ua={class:"stat-icon failed"},va={class:"stat-content"},ma={class:"stat-value failed"},pa={class:"stat-card"},ga={class:"stat-icon processing"},fa={class:"stat-content"},_a={class:"stat-value pending"},ha={class:"stat-card"},ya={class:"stat-icon rate"},ka={class:"stat-content"},ba={class:"stat-value"},$a={class:"filter-bar"},wa={class:"filter-group"},Va={key:0,class:"pagination-info"},Ca={class:"ml-view-content"},xa={class:"mono-text"},Ia=["title"],Sa={key:0},Ua={key:1,class:"text-muted"},Ta={key:0},Da={key:1},Oa={class:"time-text"},za={key:0,class:"empty-gallery"},Pa={key:1,class:"ml-masonry"},Fa=["onClick"],La={class:"gallery-image-wrapper"},Aa=["src"],Ea=["src"],Ma={class:"gallery-overlay"},Ra={class:"gallery-info"},Na=["title"],qa={class:"gallery-meta"},Ba={class:"gallery-time"},Ha={class:"pagination"},Ga={key:0,class:"task-detail"},Ja={class:"detail-section"},Wa={class:"detail-grid"},ja={class:"detail-item"},Ka={class:"detail-item"},Qa={class:"detail-item"},Xa={class:"detail-item"},Ya={class:"detail-item"},Za={class:"detail-item"},en={class:"detail-section"},tn={class:"code-block"},ln={key:0,class:"detail-section"},sn={class:"output-gallery"},an=["src"],nn=["src"],on=["src"],dn={key:3,class:"text-asset"},rn=["href"],cn={key:1,class:"detail-section"},un={class:"code-block error"},vn={class:"cleanup-form"},mn={class:"dialog-footer"},pn=ie({__name:"TasksView",setup(o){const I=h("list"),g=h(false),w=h([]),r=h(null),y=h(0),S=h(1),O=h(20),b=h({status:"",userId:void 0,channelId:void 0}),m=h(false),k=h(null);h(false);const z=h(null),$=h(false),c=h([]),f=h(0),v=h(""),U=h(),j=h(),Q=h(false),P=h(30),V=n=>{var i,A,Z;return((A=(i=n.middlewareLogs)==null?void 0:i.preset)==null?void 0:A.transformedPrompt)||((Z=n.requestSnapshot)==null?void 0:Z.prompt)||""},_=re(()=>{var i,A,Z;const n=[];for(const B of w.value){if(B.status!=="success"||!B.responseSnapshot)continue;const d=((A=(i=B.middlewareLogs)==null?void 0:i.preset)==null?void 0:A.transformedPrompt)||((Z=B.requestSnapshot)==null?void 0:Z.prompt)||"";B.responseSnapshot.forEach((u,M)=>{(u.kind==="image"||u.kind==="video")&&u.url&&n.push({id:B.id,assetIndex:M,kind:u.kind,url:u.url,prompt:d,channelId:B.channelId,createdAt:B.startTime})})}return n}),K=async()=>{g.value=true;try{const n={limit:O.value,offset:(S.value-1)*O.value};b.value.status&&(n.status=b.value.status),b.value.userId&&(n.userId=Number(b.value.userId)),b.value.channelId&&(n.channelId=Number(b.value.channelId));const[i,A]=await Promise.all([ye.list(n),ye.stats()]);w.value=i.items,y.value=i.total,r.value=A}catch(n){console.error("Failed to fetch tasks:",n),G.error("加载数据失败")}finally{g.value=false}},ce=n=>{k.value=n,m.value=true},me=n=>{c.value=[n.url],f.value=0,v.value=n.prompt,U.value=n.createdAt,j.value=void 0,$.value=true,z.value=n},T=()=>{Q.value=true},x=async()=>{try{const n=await ye.cleanup(P.value);G.success(`成功清理 ${n.deleted} 条任务`),Q.value=false,K()}catch{G.error("清理失败")}},H=n=>new Date(n).toLocaleString(),W=n=>n<1e3?`${n}ms`:`${(n/1e3).toFixed(2)}s`,q=n=>{const i=n.target;i.style.display="none"};return pe(()=>{K()}),(n,i)=>{const A=E("k-icon"),Z=E("k-button"),B=E("el-option"),d=E("el-select"),u=E("el-input"),M=E("el-table-column"),le=E("el-table"),Y=E("el-pagination"),ne=E("el-dialog"),ue=E("el-input-number");return t(),l("div",Qs,[s(" 固定头部区域 "),e("div",Xs,[e("div",Ys,[s(" 视图切换 "),e("div",Zs,[e("button",{class:ee(["mode-btn",{active:I.value==="list"}]),onClick:i[0]||(i[0]=F=>I.value="list"),title:"列表视图"},[...i[14]||(i[14]=[e("svg",{viewBox:"0 0 24 24",width:"16",height:"16",fill:"currentColor"},[e("rect",{x:"3",y:"4",width:"18",height:"3",rx:"1"}),e("rect",{x:"3",y:"10.5",width:"18",height:"3",rx:"1"}),e("rect",{x:"3",y:"17",width:"18",height:"3",rx:"1"})],-1)])],2),e("button",{class:ee(["mode-btn",{active:I.value==="gallery"}]),onClick:i[1]||(i[1]=F=>I.value="gallery"),title:"画廊视图"},[...i[15]||(i[15]=[Se('<svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" data-v-898a70bb><rect x="3" y="3" width="8" height="8" rx="1" data-v-898a70bb></rect><rect x="13" y="3" width="8" height="8" rx="1" data-v-898a70bb></rect><rect x="3" y="13" width="8" height="8" rx="1" data-v-898a70bb></rect><rect x="13" y="13" width="8" height="8" rx="1" data-v-898a70bb></rect></svg>',1)])],2)])]),e("div",ea,[a(Z,{onClick:T},{icon:C(()=>[a(A,{name:"delete"})]),default:C(()=>[i[16]||(i[16]=R(" 清理记录 ",-1))]),_:1}),a(Z,{onClick:K},{icon:C(()=>[a(A,{name:"refresh"})]),default:C(()=>[i[17]||(i[17]=R(" 刷新 ",-1))]),_:1})])]),s(" 统计信息 (固定) "),r.value?(t(),l("div",ta,[e("div",la,[e("div",sa,[a(A,{name:"clipboard-list"})]),e("div",aa,[e("div",na,p(r.value.total),1),i[18]||(i[18]=e("div",{class:"stat-label"},"总任务数",-1))])]),e("div",oa,[e("div",ia,[a(A,{name:"check-circle"})]),e("div",da,[e("div",ra,p(r.value.byStatus.success),1),i[19]||(i[19]=e("div",{class:"stat-label"},"成功",-1))])]),e("div",ca,[e("div",ua,[a(A,{name:"exclamation-triangle"})]),e("div",va,[e("div",ma,p(r.value.byStatus.failed),1),i[20]||(i[20]=e("div",{class:"stat-label"},"失败",-1))])]),e("div",pa,[e("div",ga,[a(A,{name:"clock"})]),e("div",fa,[e("div",_a,p(r.value.byStatus.pending+r.value.byStatus.processing),1),i[21]||(i[21]=e("div",{class:"stat-label"},"进行中",-1))])]),e("div",ha,[e("div",ya,[a(A,{name:"chart-pie"})]),e("div",ka,[e("div",ba,p(r.value.successRate),1),i[22]||(i[22]=e("div",{class:"stat-label"},"成功率",-1))])])])):s("v-if",true),s(" 筛选栏 (固定) "),e("div",$a,[e("div",wa,[a(d,{modelValue:b.value.status,"onUpdate:modelValue":i[2]||(i[2]=F=>b.value.status=F),placeholder:"所有状态",clearable:"",onChange:K,style:{width:"140px"}},{default:C(()=>[a(B,{label:"等待中",value:"pending"}),a(B,{label:"处理中",value:"processing"}),a(B,{label:"成功",value:"success"}),a(B,{label:"失败",value:"failed"})]),_:1},8,["modelValue"]),a(u,{modelValue:b.value.channelId,"onUpdate:modelValue":i[3]||(i[3]=F=>b.value.channelId=F),placeholder:"渠道 ID",clearable:"",onChange:K,style:{width:"140px"}},null,8,["modelValue"]),a(u,{modelValue:b.value.userId,"onUpdate:modelValue":i[4]||(i[4]=F=>b.value.userId=F),placeholder:"用户 ID",clearable:"",onChange:K,style:{width:"140px"}},null,8,["modelValue"])]),y.value>0?(t(),l("div",Va," 共 "+p(y.value)+" 条记录 ",1)):s("v-if",true)]),s(" 可滚动的内容区域 "),e("div",Ca,[s(" 列表视图 "),I.value==="list"?(t(),ae(le,{key:0,data:w.value,style:{width:"100%"},class:"task-table",onRowClick:ce},{default:C(()=>[a(M,{prop:"id",label:"ID",width:"80",align:"center"},{default:C(({row:F})=>[e("span",xa,"#"+p(F.id),1)]),_:1}),a(M,{label:"状态",width:"100",align:"center"},{default:C(({row:F})=>[a(Fe,{status:F.status},null,8,["status"])]),_:1}),a(M,{prop:"channelId",label:"渠道",width:"100",align:"center"}),a(M,{label:"提示词","min-width":"300"},{default:C(({row:F})=>[e("div",{class:"prompt-cell",title:V(F)},p(V(F)),9,Ia)]),_:1}),a(M,{label:"输出",width:"120",align:"center"},{default:C(({row:F})=>[F.responseSnapshot&&F.responseSnapshot.length?(t(),l("span",Sa,p(F.responseSnapshot.length)+" 个资产 ",1)):(t(),l("span",Ua,"-"))]),_:1}),a(M,{label:"耗时",width:"100",align:"right"},{default:C(({row:F})=>[F.duration?(t(),l("span",Ta,p(W(F.duration)),1)):(t(),l("span",Da,"-"))]),_:1}),a(M,{label:"时间",width:"180",align:"right"},{default:C(({row:F})=>[e("span",Oa,p(H(F.startTime)),1)]),_:1})]),_:1},8,["data"])):I.value==="gallery"?(t(),l(D,{key:1},[s(" 画廊视图 (瀑布流) "),_.value.length===0?(t(),l("div",za,[a(A,{name:"image",class:"empty-icon"}),i[23]||(i[23]=e("p",null,"暂无成功生成的图片",-1))])):(t(),l("div",Pa,[(t(true),l(D,null,X(_.value,F=>(t(),l("div",{key:F.id+"-"+F.assetIndex,class:"ml-masonry-item"},[e("div",{class:"gallery-item",onClick:J=>me(F)},[e("div",La,[F.kind==="image"?(t(),l("img",{key:0,src:F.url,class:"gallery-image",loading:"lazy",onError:q},null,40,Aa)):F.kind==="video"?(t(),l("video",{key:1,src:F.url,class:"gallery-video",muted:"",loop:"",onMouseenter:i[5]||(i[5]=J=>J.target.play()),onMouseleave:i[6]||(i[6]=J=>J.target.pause())},null,40,Ea)):s("v-if",true),e("div",Ma,[a(A,{name:"zoom-in",class:"zoom-icon"})])]),e("div",Ra,[e("div",{class:"gallery-prompt",title:F.prompt},p(F.prompt),9,Na),e("div",qa,[e("span",Ba,p(H(F.createdAt)),1)])])],8,Fa)]))),128))]))],64)):s("v-if",true)]),s(" 分页 (固定在底部) "),e("div",Ha,[a(Y,{"current-page":S.value,"onUpdate:currentPage":i[7]||(i[7]=F=>S.value=F),"page-size":O.value,"onUpdate:pageSize":i[8]||(i[8]=F=>O.value=F),total:y.value,"page-sizes":[20,50,100],layout:"total, sizes, prev, pager, next",onCurrentChange:K,onSizeChange:K},null,8,["current-page","page-size","total"])]),s(" 任务详情对话框 "),a(ne,{modelValue:m.value,"onUpdate:modelValue":i[9]||(i[9]=F=>m.value=F),title:"任务详情",width:"800px"},{default:C(()=>{var F,J;return[k.value?(t(),l("div",Ga,[e("div",Ja,[i[31]||(i[31]=e("h3",null,"基本信息",-1)),e("div",Wa,[e("div",ja,[i[24]||(i[24]=e("span",{class:"label"},"ID:",-1)),R(" "+p(k.value.id),1)]),e("div",Ka,[i[25]||(i[25]=e("span",{class:"label"},"状态:",-1)),i[26]||(i[26]=R()),a(Fe,{status:k.value.status},null,8,["status"])]),e("div",Qa,[i[27]||(i[27]=e("span",{class:"label"},"渠道 ID:",-1)),R(" "+p(k.value.channelId),1)]),e("div",Xa,[i[28]||(i[28]=e("span",{class:"label"},"用户 ID:",-1)),R(" "+p(k.value.userId||"N/A"),1)]),e("div",Ya,[i[29]||(i[29]=e("span",{class:"label"},"创建时间:",-1)),R(" "+p(H(k.value.startTime)),1)]),e("div",Za,[i[30]||(i[30]=e("span",{class:"label"},"耗时:",-1)),R(" "+p(W(k.value.duration||0)),1)])])]),e("div",en,[i[32]||(i[32]=e("h3",null,"Prompt",-1)),e("div",tn,p(V(k.value)),1)]),k.value.responseSnapshot&&k.value.responseSnapshot.length>0?(t(),l("div",ln,[e("h3",null,"生成结果 ("+p(k.value.responseSnapshot.length)+" 个资产)",1),e("div",sn,[(t(true),l(D,null,X(k.value.responseSnapshot,(oe,N)=>{var te;return t(),l("div",{key:N,class:"output-item"},[oe.kind==="image"&&oe.url?(t(),l("img",{key:0,src:oe.url,class:"output-image"},null,8,an)):oe.kind==="video"&&oe.url?(t(),l("video",{key:1,src:oe.url,class:"output-image",controls:""},null,8,nn)):oe.kind==="audio"&&oe.url?(t(),l("audio",{key:2,src:oe.url,controls:"",style:{width:"100%"}},null,8,on)):oe.kind==="text"&&oe.content?(t(),l("div",dn,p(oe.content),1)):oe.url?(t(),l("a",{key:4,href:oe.url,target:"_blank",class:"file-link"},[a(A,{name:"file"}),R(" "+p(((te=oe.meta)==null?void 0:te.filename)||oe.url),1)],8,rn)):s("v-if",true)])}),128))])])):s("v-if",true),(J=(F=k.value.middlewareLogs)==null?void 0:F.request)!=null&&J.error?(t(),l("div",cn,[i[33]||(i[33]=e("h3",null,"错误信息",-1)),e("div",un,p(k.value.middlewareLogs.request.error),1)])):s("v-if",true)])):s("v-if",true)]}),_:1},8,["modelValue"]),s(" 图片预览弹窗 "),a(Te,{visible:$.value,"onUpdate:visible":i[10]||(i[10]=F=>$.value=F),images:c.value,"initial-index":f.value,prompt:v.value,"created-at":U.value,duration:j.value},null,8,["visible","images","initial-index","prompt","created-at","duration"]),s(" 清理对话框 "),a(ne,{modelValue:Q.value,"onUpdate:modelValue":i[13]||(i[13]=F=>Q.value=F),title:"清理旧任务",width:"400px"},{footer:C(()=>[e("span",mn,[a(Z,{onClick:i[12]||(i[12]=F=>Q.value=false)},{default:C(()=>[...i[35]||(i[35]=[R("取消",-1)])]),_:1}),a(Z,{type:"error",onClick:x},{default:C(()=>[...i[36]||(i[36]=[R("确认清理",-1)])]),_:1})])]),default:C(()=>[e("div",vn,[i[34]||(i[34]=e("p",null,"清理多少天前的任务?",-1)),a(ue,{modelValue:P.value,"onUpdate:modelValue":i[11]||(i[11]=F=>P.value=F),min:1,max:365},null,8,["modelValue"])])]),_:1},8,["modelValue"])])}}}),gn=de(pn,[["__scopeId","data-v-898a70bb"]]),fn={class:"gallery-content"},_n={class:"gallery-header"},hn={class:"header-left"},yn={key:0,class:"gallery-count"},kn={class:"header-actions"},bn={key:0,class:"gallery-empty"},$n={class:"gallery-empty"},wn=["onClick"],Vn={key:0,class:"task-image-wrapper"},Cn=["src"],xn={key:0,class:"more-images"},In={class:"task-processing"},Sn={class:"processing-text"},Un={class:"task-failed"},Tn={class:"task-info"},Dn=["title"],On={class:"task-meta"},zn={class:"task-time"},Pn={key:0,class:"task-duration"},Fn={key:0,class:"loading-more"},xe=10,Ln=ie({__name:"HistoryGallery",emits:["select"],setup(o,{expose:I,emit:g}){const w=g,r=h(false),y=h(false),S=h(false),O=h([]),b=h(0),m=h(false),k=h(0),z=h();let $=null;const c=h(false),f=h([]),v=h(0),U=h(""),j=h(),Q=h(),P=async()=>{try{const q=await je.me();return S.value=q.loggedIn,q.loggedIn}catch{return S.value=false,false}},V=q=>{var A,Z,B;const n=[];if(q.responseSnapshot)for(const d of q.responseSnapshot)d.kind==="image"&&d.url&&n.push(d.url);const i=((Z=(A=q.middlewareLogs)==null?void 0:A.preset)==null?void 0:Z.transformedPrompt)||((B=q.requestSnapshot)==null?void 0:B.prompt)||"";return{id:q.id,status:q.status,prompt:i,images:n,createdAt:new Date(q.startTime),duration:q.duration||void 0}},_=async(q=false)=>{if(S.value){y.value=true;try{const n=await ye.my({limit:xe,offset:q?k.value:0}),i=n.items.map(V);q?O.value=[...O.value,...i]:(O.value=i,k.value=0),b.value=n.total,m.value=n.items.length>=xe,k.value+=xe}catch(n){console.error("Failed to load tasks:",n)}finally{y.value=false}}},K=()=>{!y.value&&m.value&&_(true)},ce=q=>{const n=q.target,{scrollTop:i,scrollHeight:A,clientHeight:Z}=n;A-i-Z<100&&K()},me=async()=>{await P(),await _()},T=q=>{q.status==="success"&&q.images.length>0&&(f.value=q.images,v.value=0,U.value=q.prompt,j.value=q.createdAt,Q.value=q.duration,c.value=true,w("select",q))},x=q=>{const i=new Date().getTime()-q.getTime();return i<6e4?"刚刚":i<36e5?`${Math.floor(i/6e4)}分钟前`:i<864e5?`${Math.floor(i/36e5)}小时前`:i<6048e5?`${Math.floor(i/864e5)}天前`:q.toLocaleDateString()},H=q=>q<1e3?`${q}ms`:`${(q/1e3).toFixed(1)}s`,W=()=>{$=setInterval(()=>{O.value.some(n=>n.status==="pending"||n.status==="processing")&&_()},3e3)};return I({refresh:me}),pe(async()=>{await P()&&(await _(),W())}),Ve(()=>{$&&clearInterval($)}),(q,n)=>{const i=E("k-icon");return t(),l("div",{class:ee(["history-gallery",{collapsed:r.value}])},[s(" 折叠状态的侧边条 "),r.value?(t(),l("div",{key:0,class:"collapsed-bar",onClick:n[0]||(n[0]=A=>r.value=false)},[a(i,{name:"history"}),n[3]||(n[3]=e("span",{class:"collapsed-text"},"历史",-1))])):(t(),l(D,{key:1},[s(" 展开的内容 "),e("div",fn,[e("div",_n,[e("div",hn,[n[4]||(n[4]=e("span",{class:"gallery-title"},"历史记录",-1)),b.value>0?(t(),l("span",yn,p(b.value),1)):s("v-if",true)]),e("div",kn,[a(i,{name:"refresh",class:ee(["action-icon",{spinning:y.value}]),onClick:me,title:"刷新"},null,8,["class"]),a(i,{name:"chevron-right",class:"action-icon",onClick:n[1]||(n[1]=A=>r.value=true),title:"收起"})])]),s(" 未登录提示 "),S.value?y.value&&O.value.length===0?(t(),l(D,{key:1},[s(" 加载中 "),n[6]||(n[6]=e("div",{class:"gallery-loading"},[e("div",{class:"loader-small"})],-1))],2112)):O.value.length===0?(t(),l(D,{key:2},[s(" 空状态 "),e("div",$n,[a(i,{name:"image",class:"empty-icon"}),n[7]||(n[7]=e("p",null,"暂无记录",-1))])],2112)):(t(),l(D,{key:3},[s(" 任务列表 (瀑布流) "),e("div",{class:"gallery-list",ref_key:"listRef",ref:z,onScroll:ce},[(t(true),l(D,null,X(O.value,A=>(t(),l("div",{key:A.id,class:ee(["task-card",{clickable:A.status==="success"}]),onClick:Z=>T(A)},[s(" 图片区域 - 只显示第一张 "),A.images&&A.images.length>0?(t(),l("div",Vn,[e("img",{src:A.images[0],class:"task-image",loading:"lazy"},null,8,Cn),A.images.length>1?(t(),l("div",xn," +"+p(A.images.length-1),1)):s("v-if",true)])):A.status==="processing"||A.status==="pending"?(t(),l(D,{key:1},[s(" 处理中动画 "),e("div",In,[n[8]||(n[8]=e("div",{class:"processing-animation"},[e("div",{class:"dot"}),e("div",{class:"dot"}),e("div",{class:"dot"})],-1)),e("span",Sn,p(A.status==="pending"?"等待中":"生成中"),1)])],2112)):A.status==="failed"?(t(),l(D,{key:2},[s(" 失败状态 "),e("div",Un,[a(i,{name:"exclamation-triangle",class:"failed-icon"}),n[9]||(n[9]=e("span",null,"失败",-1))])],2112)):s("v-if",true),s(" 任务信息 "),e("div",Tn,[e("div",{class:"task-prompt",title:A.prompt},p(A.prompt||"(无提示词)"),9,Dn),e("div",On,[e("span",zn,p(x(A.createdAt)),1),A.duration?(t(),l("span",Pn,p(H(A.duration)),1)):s("v-if",true)])])],10,wn))),128)),s(" 加载更多 "),y.value&&O.value.length>0?(t(),l("div",Fn,[...n[10]||(n[10]=[e("div",{class:"loader-small"},null,-1)])])):s("v-if",true)],544)],2112)):(t(),l("div",bn,[a(i,{name:"user",class:"empty-icon"}),n[5]||(n[5]=e("p",null,"请登录查看历史",-1))]))])],2112)),s(" 图片预览弹窗 "),a(Te,{visible:c.value,"onUpdate:visible":n[2]||(n[2]=A=>c.value=A),images:f.value,"initial-index":v.value,prompt:U.value,"created-at":j.value,duration:Q.value},null,8,["visible","images","initial-index","prompt","created-at","duration"])],2)}}}),An=de(Ln,[["__scopeId","data-v-6cba50e5"]]),En={class:"preset-picker"},Mn={key:0,class:"preset-info"},Rn=["src"],Nn={key:1,class:"preset-thumb placeholder"},qn={class:"preset-details"},Bn={class:"preset-name"},Hn={key:1,class:"placeholder-text"},Gn={class:"picker-header"},Jn={class:"preset-count"},Wn={class:"picker-content"},jn={class:"ml-masonry"},Kn=["onClick"],Qn={key:0,class:"card-thumbnail"},Xn=["src","alt"],Yn={class:"thumbnail-overlay"},Zn={key:0,class:"ref-count"},eo={key:1,class:"card-thumbnail placeholder"},to={class:"card-content"},lo={class:"card-title"},so={key:0,class:"card-tags"},ao={key:0,class:"mini-tag more"},no={key:2,class:"selected-mark"},oo={key:0,class:"empty-state"},io={class:"dialog-footer"},ro={key:0,class:"preset-detail"},co={key:0,class:"detail-thumbnail"},uo=["src","alt"],vo={class:"detail-section"},mo={class:"detail-row"},po={key:0,class:"detail-row"},go={class:"detail-tags"},fo={class:"detail-section"},_o={class:"prompt-preview"},ho={key:1,class:"detail-section"},yo={class:"detail-label"},ko={class:"reference-images"},bo=["src"],$o={key:2,class:"detail-section"},wo={class:"param-preview"},Vo={class:"dialog-footer"},Co=ie({__name:"PresetPicker",props:{modelValue:{},presets:{}},emits:["update:modelValue"],setup(o,{emit:I}){const g=o,w=I,r=["本地","远程","text2img","img2img","NSFW"],y=h(false),S=h(false),O=h([]),b=h(g.modelValue),m=h(null),k=re(()=>{const P=new Set;return g.presets.forEach(V=>{(V.tags||[]).forEach(_=>P.add(_))}),Array.from(P).sort()}),z=re(()=>g.modelValue?g.presets.find(P=>P.id===g.modelValue):null),$=re(()=>{let P=g.presets;return O.value.length===0?P:P.filter(V=>O.value.every(_=>_==="本地"?V.source==="user":_==="远程"?V.source==="api":(V.tags||[]).includes(_)))}),c=()=>{b.value=g.modelValue,O.value=[],y.value=true},f=P=>{b.value=P.id},v=()=>{w("update:modelValue",b.value),y.value=false},U=()=>{w("update:modelValue",void 0)},j=P=>{m.value=P,S.value=true},Q=()=>{m.value&&(w("update:modelValue",m.value.id),S.value=false,y.value=false)};return ge(()=>g.modelValue,P=>{b.value=P}),(P,V)=>{var me;const _=E("k-icon"),K=E("k-button"),ce=E("el-dialog");return t(),l("div",En,[s(" 当前选中的预设显示 "),e("div",{class:"selected-preset",onClick:c},[z.value?(t(),l("div",Mn,[z.value.thumbnail?(t(),l("img",{key:0,src:z.value.thumbnail,class:"preset-thumb"},null,8,Rn)):(t(),l("div",Nn,[a(_,{name:"image"})])),e("div",qn,[e("span",Bn,p(z.value.name),1),e("span",{class:ee(["preset-source",z.value.source])},p(z.value.source==="api"?"远程":"本地"),3)]),a(_,{name:"times",class:"clear-btn",onClick:ve(U,["stop"]),title:"清除选择"})])):(t(),l("div",Hn,[a(_,{name:"layer-group"}),V[6]||(V[6]=e("span",null,"选择预设模板 (可选)",-1))])),a(_,{name:"chevron-down",class:"dropdown-icon"})]),s(" 预设选择弹窗 - 复用 PresetsView 的布局 "),a(ce,{modelValue:y.value,"onUpdate:modelValue":V[3]||(V[3]=T=>y.value=T),title:"选择预设",width:"80vw",top:"5vh","close-on-click-modal":true,class:"preset-picker-dialog"},{footer:C(()=>[e("div",io,[a(K,{onClick:V[2]||(V[2]=T=>y.value=false)},{default:C(()=>[...V[9]||(V[9]=[R("取消",-1)])]),_:1}),a(K,{type:"primary",onClick:v,disabled:!b.value},{default:C(()=>[...V[10]||(V[10]=[R(" 确认选择 ",-1)])]),_:1},8,["disabled"])])]),default:C(()=>[e("div",Gn,[a(Ue,{modelValue:O.value,"onUpdate:modelValue":V[0]||(V[0]=T=>O.value=T),"all-tags":k.value,"preset-tags":r},null,8,["modelValue","all-tags"]),e("span",Jn,"共 "+p($.value.length)+" 个预设",1)]),e("div",Wn,[e("div",jn,[(t(true),l(D,null,X($.value,T=>{var x,H;return t(),l("div",{key:T.id,class:"ml-masonry-item"},[e("div",{class:ee(["preset-card",{selected:b.value===T.id}]),onClick:W=>f(T)},[s(" 缩略图 "),T.thumbnail?(t(),l("div",Qn,[e("img",{src:T.thumbnail,alt:T.name,loading:"lazy"},null,8,Xn),e("div",Yn,[(x=T.referenceImages)!=null&&x.length?(t(),l("span",Zn,[a(_,{name:"image"}),R(" "+p(T.referenceImages.length),1)])):s("v-if",true)])])):(t(),l("div",eo,[a(_,{name:"image",class:"placeholder-icon"})])),s(" 内容 "),e("div",to,[e("div",lo,p(T.name),1),(H=T.tags)!=null&&H.length?(t(),l("div",so,[(t(true),l(D,null,X(T.tags.slice(0,4),W=>(t(),l("span",{key:W,class:"mini-tag"},p(W),1))),128)),T.tags.length>4?(t(),l("span",ao,"+"+p(T.tags.length-4),1)):s("v-if",true)])):s("v-if",true)]),s(" 操作按钮区 "),e("div",{class:"card-actions",onClick:V[1]||(V[1]=ve(()=>{},["stop"]))},[a(K,{size:"mini",onClick:W=>j(T)},{icon:C(()=>[a(_,{name:"eye"})]),default:C(()=>[V[7]||(V[7]=R(" 详情 ",-1))]),_:1},8,["onClick"])]),s(" 来源标记 "),e("div",{class:ee(["source-indicator",T.source])},p(T.source==="api"?"远程":"本地"),3),s(" 选中标记 "),b.value===T.id?(t(),l("div",no,[a(_,{name:"check"})])):s("v-if",true)],10,Kn)])}),128))]),s(" 空状态 "),$.value.length===0?(t(),l("div",oo,[a(_,{name:"search",class:"empty-icon"}),V[8]||(V[8]=e("p",null,"没有找到匹配的预设",-1))])):s("v-if",true)])]),_:1},8,["modelValue"]),s(" 预设详情弹窗 "),a(ce,{modelValue:S.value,"onUpdate:modelValue":V[5]||(V[5]=T=>S.value=T),title:((me=m.value)==null?void 0:me.name)||"预设详情",width:"600px","close-on-click-modal":true,class:"preset-detail-dialog"},{footer:C(()=>[e("div",Vo,[a(K,{onClick:V[4]||(V[4]=T=>S.value=false)},{default:C(()=>[...V[15]||(V[15]=[R("关闭",-1)])]),_:1}),a(K,{type:"primary",onClick:Q},{icon:C(()=>[a(_,{name:"check"})]),default:C(()=>[V[16]||(V[16]=R(" 选择此预设 ",-1))]),_:1})])]),default:C(()=>{var T,x;return[m.value?(t(),l("div",ro,[s(" 缩略图 "),m.value.thumbnail?(t(),l("div",co,[e("img",{src:m.value.thumbnail,alt:m.value.name},null,8,uo)])):s("v-if",true),s(" 基本信息 "),e("div",vo,[e("div",mo,[V[11]||(V[11]=e("span",{class:"detail-label"},"来源:",-1)),e("span",{class:ee(["source-badge",m.value.source])},p(m.value.source==="api"?"远程":"本地"),3)]),(T=m.value.tags)!=null&&T.length?(t(),l("div",po,[V[12]||(V[12]=e("span",{class:"detail-label"},"标签:",-1)),e("div",go,[(t(true),l(D,null,X(m.value.tags,H=>(t(),l("span",{key:H,class:"mini-tag"},p(H),1))),128))])])):s("v-if",true)]),s(" Prompt 模板 "),e("div",fo,[V[13]||(V[13]=e("div",{class:"detail-label"},"Prompt 模板:",-1)),e("div",_o,p(m.value.promptTemplate),1)]),s(" 参考图 "),(x=m.value.referenceImages)!=null&&x.length?(t(),l("div",ho,[e("div",yo,"参考图片 ("+p(m.value.referenceImages.length)+"):",1),e("div",ko,[(t(true),l(D,null,X(m.value.referenceImages,(H,W)=>(t(),l("img",{key:W,src:H,class:"ref-image"},null,8,bo))),128))])])):s("v-if",true),s(" 参数覆盖 "),m.value.parameterOverrides&&Object.keys(m.value.parameterOverrides).length?(t(),l("div",$o,[V[14]||(V[14]=e("div",{class:"detail-label"},"参数覆盖:",-1)),e("div",wo,p(JSON.stringify(m.value.parameterOverrides,null,2)),1)])):s("v-if",true)])):s("v-if",true)]}),_:1},8,["modelValue","title"])])}}}),xo=de(Co,[["__scopeId","data-v-59115136"]]),Io={class:"view-container"},So={class:"view-content"},Uo={class:"generate-layout"},To={class:"config-panel"},Do={class:"form-section"},Oo={class:"section-title"},zo={class:"form-item"},Po={class:"form-item"},Fo={class:"form-section flex-grow"},Lo={class:"section-title"},Ao={class:"form-section"},Eo={class:"section-title"},Mo={class:"upload-area"},Ro={key:0,class:"upload-list"},No=["src"],qo=["onClick"],Bo={class:"form-actions"},Ho={class:"preview-panel"},Go={key:0,class:"generating-state"},Jo={class:"generating-content"},Wo={class:"generating-info"},jo={class:"generating-timer"},Ko={key:0,class:"generating-hint"},Qo={class:"result-container"},Xo={key:0,class:"success-result"},Yo={class:"output-grid"},Zo=["src","onClick"],ei={class:"output-actions"},ti=["href"],li=["src"],si=["src"],ai=["href"],ni={class:"text-output"},oi=["href"],ii={class:"result-meta"},di={class:"meta-item success-badge"},ri={key:0,class:"meta-item"},ci={key:1,class:"meta-item"},ui={class:"error-result"},vi={class:"error-content"},mi={class:"error-info"},pi={class:"error-msg"},gi={key:0,class:"error-meta"},fi={key:1,class:"error-meta"},_i={class:"empty-state"},hi=ie({__name:"GenerateView",setup(o){const I=h([]),g=h([]),w=h(false),r=h(null),y=h([]),S=h([]),O=h(),b=h();let m=0;const k=h(0),z=h(null);let $=null,c=0;const f=h({channel:void 0,prompt:"",parameters:{}}),v=h(void 0),U=h(false),j=h([]),Q=h(0),P=h(""),V=B=>{if(B<1e3)return`${B}ms`;const d=B/1e3;if(d<60)return`${d.toFixed(1)}s`;const u=Math.floor(d/60),M=(d%60).toFixed(0);return`${u}m ${M}s`},_=()=>{c=Date.now(),k.value=0,$=setInterval(()=>{k.value=Date.now()-c},100)},K=()=>{$&&(clearInterval($),$=null)},ce=B=>{var d;(d=r.value)!=null&&d.output&&(j.value=r.value.output.filter(u=>u.kind==="image"&&u.url).map(u=>u.url),Q.value=B,U.value=true)},me=async()=>{try{const[B,d]=await Promise.all([he.list(),_e.list()]);I.value=B,g.value=d}catch(B){console.error(B)}},T=B=>new Promise((d,u)=>{const M=new FileReader;M.onload=()=>{const Y=M.result.split(",")[1];d(Y)},M.onerror=u,M.readAsDataURL(B)}),x=()=>{var B;(B=O.value)==null||B.click()},H=async B=>{const d=B.target;!d.files||d.files.length===0||(await q(Array.from(d.files)),d.value="")},W=async B=>{var u;const d=(u=B.dataTransfer)==null?void 0:u.files;!d||d.length===0||await q(Array.from(d).filter(M=>M.type.startsWith("image/")))},q=async B=>{const d=4-y.value.length;if(d<=0){G.warning("最多上传 4 张图片");return}const u=B.slice(0,d);for(const M of u){const le=URL.createObjectURL(M);y.value.push({uid:++m,url:le,raw:M});try{const Y=await T(M);S.value.push({type:"image",base64:Y,mimeType:M.type,filename:M.name})}catch(Y){console.error("Failed to read file:",M.name,Y)}}},n=B=>{const d=y.value[B];d&&(URL.revokeObjectURL(d.url),y.value.splice(B,1),S.value.splice(B,1))},i=async B=>{var d,u,M,le;try{const Y=await ye.get(B);if(P.value=((u=(d=Y.middlewareLogs)==null?void 0:d.preset)==null?void 0:u.transformedPrompt)||((M=Y.requestSnapshot)==null?void 0:M.prompt)||"",Y.status==="success"&&Y.responseSnapshot&&Y.responseSnapshot.length>0)return{success:true,output:Y.responseSnapshot,taskId:Y.id,duration:Y.duration||void 0};if(Y.status==="failed"){const ne=(le=Y.middlewareLogs)==null?void 0:le._error;return{success:false,error:(ne==null?void 0:ne.message)||"生成失败",taskId:Y.id,duration:Y.duration||void 0}}return null}catch{return null}},A=async()=>{var B,d,u,M,le,Y;if(!f.value.channel){G.warning("请选择渠道");return}w.value=true,r.value=null,z.value=null,_();try{const ne={channelId:f.value.channel,prompt:f.value.prompt||"",parameters:{...f.value.parameters}};if(S.value.length>0&&(ne.files=S.value),v.value){const F=g.value.find(J=>J.id===v.value);F&&(ne.parameters.preset=F.name)}const ue=await Ke.generate(ne);if(ue.taskId&&(z.value=ue.taskId),ue.success)if(r.value=ue,(B=b.value)==null||B.refresh(),ue.taskId)try{const F=await ye.get(ue.taskId);P.value=((u=(d=F.middlewareLogs)==null?void 0:d.preset)==null?void 0:u.transformedPrompt)||((M=F.requestSnapshot)==null?void 0:M.prompt)||""}catch{P.value=f.value.prompt}else P.value=f.value.prompt;else if(ue.taskId){await new Promise(J=>setTimeout(J,500));const F=await i(ue.taskId);F&&F.success?(r.value=F,(le=b.value)==null||le.refresh()):r.value=ue}else r.value=ue}catch(ne){if(z.value){await new Promise(F=>setTimeout(F,500));const ue=await i(z.value);ue?(r.value=ue,ue.success&&((Y=b.value)==null||Y.refresh())):r.value={success:false,error:ne.message||"请求失败"}}else r.value={success:false,error:ne.message||"请求失败"}}finally{K(),w.value=false}},Z=B=>{B.prompt&&(f.value.prompt=B.prompt)};return pe(()=>{me()}),Ve(()=>{K()}),(B,d)=>{var F;const u=E("k-icon"),M=E("el-option"),le=E("el-select"),Y=E("el-input"),ne=E("k-button"),ue=E("k-card");return t(),l("div",Io,[e("div",So,[e("div",Uo,[s(" 左侧配置区 "),e("div",To,[a(ue,{class:"config-card"},{default:C(()=>[e("div",Do,[e("div",Oo,[a(u,{name:"settings"}),d[5]||(d[5]=R(" 基础配置 ",-1))]),e("div",zo,[d[6]||(d[6]=e("div",{class:"label"},"生成渠道",-1)),a(le,{modelValue:f.value.channel,"onUpdate:modelValue":d[0]||(d[0]=J=>f.value.channel=J),placeholder:"选择生成渠道",style:{width:"100%"}},{default:C(()=>[(t(true),l(D,null,X(I.value,J=>(t(),ae(M,{key:J.id,label:J.name,value:J.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),e("div",Po,[d[7]||(d[7]=e("div",{class:"label"},"预设模板",-1)),a(xo,{modelValue:v.value,"onUpdate:modelValue":d[1]||(d[1]=J=>v.value=J),presets:g.value},null,8,["modelValue","presets"])])]),e("div",Fo,[e("div",Lo,[a(u,{name:"edit"}),d[8]||(d[8]=R(" 提示词 ",-1))]),a(Y,{modelValue:f.value.prompt,"onUpdate:modelValue":d[2]||(d[2]=J=>f.value.prompt=J),type:"textarea",rows:8,placeholder:"输入提示词,支持自然语言描述...",resize:"none",class:"prompt-input"},null,8,["modelValue"])]),s(" 文件上传区域 "),e("div",Ao,[e("div",Eo,[a(u,{name:"image"}),d[9]||(d[9]=R(" 参考图片 ",-1))]),e("div",Mo,[s(" 已上传的图片列表 "),y.value.length>0?(t(),l("div",Ro,[(t(true),l(D,null,X(y.value,(J,oe)=>(t(),l("div",{key:J.uid,class:"upload-item"},[e("img",{src:J.url,class:"upload-thumb"},null,8,No),e("div",{class:"upload-overlay",onClick:N=>n(oe)},[a(u,{name:"delete"})],8,qo)]))),128))])):s("v-if",true),s(" 上传按钮 "),y.value.length<4?(t(),l("div",{key:1,class:"upload-trigger",onClick:x,onDragover:d[3]||(d[3]=ve(()=>{},["prevent"])),onDrop:ve(W,["prevent"])},[e("input",{ref_key:"fileInput",ref:O,type:"file",accept:"image/*",multiple:"",style:{display:"none"},onChange:H},null,544),a(u,{name:"add",class:"upload-icon"})],32)):s("v-if",true),d[10]||(d[10]=e("div",{class:"upload-tip"},"点击或拖拽上传,最多 4 张",-1))])]),e("div",Bo,[a(ne,{solid:"",type:"primary",loading:w.value,onClick:A,class:"generate-btn"},{icon:C(()=>[a(u,{name:"magic"})]),default:C(()=>[d[11]||(d[11]=R(" 生成图片 ",-1))]),_:1},8,["loading"])])]),_:1})]),s(" 右侧预览区 "),e("div",Ho,[s(" 生成中状态 "),w.value?(t(),l("div",Go,[e("div",Jo,[d[13]||(d[13]=e("div",{class:"loader"},null,-1)),e("div",Wo,[d[12]||(d[12]=e("p",{class:"generating-title"},"正在生成中...",-1)),e("p",jo,[a(u,{name:"stopwatch"}),R(" 已用时间: "+p(V(k.value)),1)]),z.value?(t(),l("p",Ko,"任务 ID: "+p(z.value),1)):s("v-if",true)])])])):r.value?(t(),l(D,{key:1},[s(" 有结果 "),e("div",Qo,[s(" 成功状态 "),r.value.success&&r.value.output&&r.value.output.length?(t(),l("div",Xo,[e("div",Yo,[(t(true),l(D,null,X(r.value.output,(J,oe)=>{var N;return t(),l("div",{key:oe,class:"output-wrapper"},[s(" 图片 "),J.kind==="image"?(t(),l(D,{key:0},[e("img",{src:J.url,onClick:te=>ce(oe),class:"clickable-image"},null,8,Zo),e("div",ei,[e("a",{href:J.url,target:"_blank",class:"action-btn",download:""},[a(u,{name:"download"})],8,ti)])],64)):J.kind==="video"?(t(),l(D,{key:1},[s(" 视频 "),e("video",{src:J.url,controls:"",class:"output-video"},null,8,li)],64)):J.kind==="audio"?(t(),l(D,{key:2},[s(" 音频 "),e("audio",{src:J.url,controls:"",class:"output-audio"},null,8,si)],64)):J.kind==="file"?(t(),l(D,{key:3},[s(" 其他文件 "),e("a",{href:J.url,target:"_blank",class:"file-link"},[a(u,{name:"file"}),R(" "+p(((N=J.meta)==null?void 0:N.filename)||"下载文件"),1)],8,ai)],64)):J.kind==="text"?(t(),l(D,{key:4},[s(" 文本 "),e("div",ni,p(J.content),1)],64)):J.url?(t(),l(D,{key:5},[s(" 兜底:有 url 则显示链接 "),e("a",{href:J.url,target:"_blank"},p(J.url),9,oi)],64)):s("v-if",true)])}),128))]),e("div",ii,[e("span",di,[a(u,{name:"check-circle"}),d[14]||(d[14]=R(" 生成成功 ",-1))]),r.value.duration?(t(),l("span",ri,[a(u,{name:"stopwatch"}),R(" 耗时: "+p(V(r.value.duration)),1)])):s("v-if",true),r.value.taskId?(t(),l("span",ci,[a(u,{name:"list-alt"}),R(" 任务 ID: "+p(r.value.taskId),1)])):s("v-if",true)])])):(t(),l(D,{key:1},[s(" 失败状态 "),e("div",ui,[e("div",vi,[a(u,{name:"exclamation-triangle",class:"error-icon"}),e("div",mi,[d[15]||(d[15]=e("p",{class:"error-title"},"生成失败",-1)),e("p",pi,p(r.value.error||"未知错误"),1),r.value.taskId?(t(),l("p",gi,"任务 ID: "+p(r.value.taskId),1)):s("v-if",true),r.value.duration?(t(),l("p",fi,"耗时: "+p(V(r.value.duration)),1)):s("v-if",true)])]),a(ne,{class:"retry-btn",onClick:A},{icon:C(()=>[a(u,{name:"refresh"})]),default:C(()=>[d[16]||(d[16]=R(" 重新生成 ",-1))]),_:1})])],2112))])],2112)):(t(),l(D,{key:2},[s(" 空状态 "),e("div",_i,[a(u,{name:"image",class:"empty-icon"}),d[17]||(d[17]=e("p",null,"在左侧配置并点击生成",-1))])],2112))]),s(" 右侧历史画廊 "),a(An,{ref_key:"historyGalleryRef",ref:b,onSelect:Z},null,512)])]),s(" 图片预览弹窗 "),a(Te,{visible:U.value,"onUpdate:visible":d[4]||(d[4]=J=>U.value=J),images:j.value,"initial-index":Q.value,prompt:P.value,duration:(F=r.value)==null?void 0:F.duration},null,8,["visible","images","initial-index","prompt","duration"])])}}}),Le=de(hi,[["__scopeId","data-v-a3441aa4"]]),yi={class:"pipeline-panel"},ki={class:"pipeline-flow"},bi={class:"phase-icon"},$i={class:"phase-info"},wi={class:"phase-name"},Vi={class:"phase-desc"},Ci={class:"phase-badge"},xi={key:0,class:"phase-middlewares"},Ii={class:"mw-card"},Si={class:"mw-content"},Ui={class:"mw-name"},Ti={class:"mw-desc"},Di=["title"],Oi=["checked","onChange"],zi={key:2,class:"phase-connector"},Pi={class:"connector-arrow"},Fi=ie({__name:"MiddlewaresPanel",setup(o){const I=h([]),g=[{id:"lifecycle-prepare",label:"准备",description:"验证、权限检查、任务创建",icon:"clipboard-check",colorClass:"phase-prepare"},{id:"lifecycle-pre-request",label:"预处理",description:"预设应用、参数处理",icon:"settings",colorClass:"phase-pre"},{id:"lifecycle-request",label:"执行",description:"调用连接器生成",icon:"play",colorClass:"phase-request"},{id:"lifecycle-post-request",label:"后处理",description:"结果缓存、格式转换",icon:"package",colorClass:"phase-post"},{id:"lifecycle-finalize",label:"完成",description:"计费结算、记录保存",icon:"check-circle",colorClass:"phase-finalize"}],w={billing:"计费模块",transform:"转换处理",validation:"验证检查",preset:"预设系统",cache:"缓存管理",recording:"任务记录",request:"请求执行",custom:"自定义"},r=O=>I.value.filter(b=>b.phase===O),y=async()=>{try{I.value=await we.list()}catch{G.error("加载中间件列表失败")}},S=async O=>{const b=!O.enabled;try{await we.update(O.name,{enabled:b}),O.enabled=b,G.success(b?"已启用":"已禁用")}catch{G.error("操作失败")}};return pe(y),(O,b)=>{const m=E("k-icon");return t(),l("div",yi,[s(" 标题区 "),b[5]||(b[5]=e("div",{class:"panel-header"},[e("div",{class:"header-title"},[e("h3",null,"请求执行流程"),e("span",{class:"subtitle"},"每个生成请求按以下阶段依次处理")])],-1)),s(" 流程图 "),e("div",ki,[(t(),l(D,null,X(g,(k,z)=>e("div",{key:k.id,class:"phase-section"},[s(" 阶段标题 "),e("div",{class:ee(["phase-header",k.colorClass])},[e("div",bi,[a(m,{name:k.icon},null,8,["name"])]),e("div",$i,[e("span",wi,p(k.label),1),e("span",Vi,p(k.description),1)]),e("span",Ci,p(r(k.id).length),1)],2),s(" 中间件列表 "),r(k.id).length>0?(t(),l("div",xi,[(t(true),l(D,null,X(r(k.id),($,c)=>(t(),l("div",{key:$.name,class:ee(["mw-item",{disabled:!$.enabled}])},[e("div",Ii,[e("div",{class:ee(["mw-status",{active:$.enabled}])},null,2),e("div",Si,[e("span",Ui,p($.displayName),1),e("span",Ti,p($.description||w[$.category]||$.category),1)]),e("label",{class:"toggle-switch",onClick:b[0]||(b[0]=ve(()=>{},["stop"])),title:$.enabled?"点击禁用":"点击启用"},[e("input",{type:"checkbox",checked:$.enabled,onChange:f=>S($)},null,40,Oi),b[1]||(b[1]=e("span",{class:"slider"},null,-1))],8,Di)])],2))),128))])):(t(),l(D,{key:1},[s(" 空状态 "),b[2]||(b[2]=e("div",{class:"empty-phase"},[e("span",null,"无中间件")],-1))],2112)),s(" 阶段间连接箭头 "),z<g.length-1?(t(),l("div",zi,[b[3]||(b[3]=e("div",{class:"connector-line"},null,-1)),e("div",Pi,[a(m,{name:"chevron-down"})]),b[4]||(b[4]=e("div",{class:"connector-line"},null,-1))])):s("v-if",true)])),64))]),s(" 底部说明 "),b[6]||(b[6]=Se('<div class="pipeline-footer" data-v-b4b0cf47><div class="footer-item" data-v-b4b0cf47><span class="dot active" data-v-b4b0cf47></span><span data-v-b4b0cf47>启用 - 中间件将在请求中执行</span></div><div class="footer-item" data-v-b4b0cf47><span class="dot" data-v-b4b0cf47></span><span data-v-b4b0cf47>禁用 - 中间件将被跳过</span></div><p class="footer-hint" data-v-b4b0cf47>同一阶段内的中间件可能并行执行。详细配置请前往「扩展插件」面板。</p></div>',1))])}}}),Li=de(Fi,[["__scopeId","data-v-b4b0cf47"]]),Ai={class:"plugins-panel"},Ei={key:0,class:"loading-state"},Mi={class:"empty-state"},Ri={class:"plugins-list"},Ni=["onClick"],qi={class:"plugin-info"},Bi={class:"plugin-header"},Hi={class:"plugin-name"},Gi={key:0,class:"plugin-version"},Ji={class:"plugin-description"},Wi={class:"plugin-status"},ji={key:0,class:"plugin-badge connector"},Ki={key:1,class:"plugin-badge middleware"},Qi={key:0,class:"plugin-detail"},Xi={class:"detail-header"},Yi={class:"header-left"},Zi={key:0,class:"version"},ed={class:"header-actions"},td={key:0,class:"connector-info"},ld={class:"connector-meta"},sd={class:"connector-id"},ad={class:"connector-types"},nd={key:1,class:"middlewares-list"},od={class:"middleware-tags"},id={class:"phase-badge"},dd={key:2,class:"config-section"},rd={class:"config-actions"},cd={class:"no-config"},ud={class:"no-selection"},vd=ie({__name:"PluginsPanel",setup(o){const I=h(true),g=h([]),w=h(null),r=h({}),y=h(false),S={"lifecycle-prepare":"准备","lifecycle-pre-request":"前置","lifecycle-request":"请求","lifecycle-post-request":"后置","lifecycle-finalize":"完成"},O=$=>S[$]||$,b=async()=>{try{I.value=true,g.value=await Ie.list()}catch($){console.error("Failed to load plugins:",$),g.value=[]}finally{I.value=false}},m=$=>{w.value=$,r.value={...$.config};for(const c of $.configFields||[])r.value[c.key]===void 0&&c.default!==void 0&&(r.value[c.key]=c.default)},k=async()=>{if(w.value){y.value=true;try{await Ie.updateConfig(w.value.id,r.value),G.success("保存成功"),await b();const $=g.value.find(c=>{var f;return c.id===((f=w.value)==null?void 0:f.id)});$&&(w.value=$,r.value={...$.config})}catch{G.error("保存失败")}finally{y.value=false}}},z=async $=>{var c;try{const{send:f}=await import("@koishijs/client"),v=await f($.apiEvent);if((v==null?void 0:v.success)===false)throw new Error(v.error||"操作失败");if($.apiEvent==="media-luna/presets/sync"&&(v!=null&&v.data)){const{added:U,updated:j,removed:Q,notModified:P}=v.data;P?G.info("数据未变化,无需更新"):G.success(`同步完成:新增 ${U},更新 ${j},删除 ${Q}`)}else(c=v==null?void 0:v.data)!=null&&c.message?G.success(v.data.message):G.success(`${$.label} 完成`);await b()}catch(f){G.error(`${$.label} 失败: ${f instanceof Error?f.message:"未知错误"}`)}};return pe(b),($,c)=>{var U,j,Q;const f=E("k-icon"),v=E("k-button");return t(),l("div",Ai,[s(" 加载状态 "),I.value?(t(),l("div",Ei,[a(f,{name:"sync",class:"spin"}),c[1]||(c[1]=e("span",null,"加载中...",-1))])):g.value.length===0?(t(),l(D,{key:1},[s(" 空状态 "),e("div",Mi,[a(f,{name:"apps"}),c[2]||(c[2]=e("p",null,"暂无扩展插件",-1)),c[3]||(c[3]=e("p",{class:"hint"},[R("第三方扩展插件将在这里显示"),e("br"),R('内置功能请在"功能模块"中配置')],-1))])],2112)):(t(),l(D,{key:2},[s(" 插件列表 "),e("div",Ri,[(t(true),l(D,null,X(g.value,P=>{var V,_;return t(),l("div",{key:P.id,class:ee(["plugin-card",{active:((V=w.value)==null?void 0:V.id)===P.id,disabled:!P.enabled}]),onClick:K=>m(P)},[e("div",qi,[e("div",Bi,[e("span",Hi,p(P.name),1),P.version?(t(),l("span",Gi,"v"+p(P.version),1)):s("v-if",true)]),e("p",Ji,p(P.description||"暂无描述"),1)]),e("div",Wi,[P.connector?(t(),l("span",ji,"连接器")):s("v-if",true),(_=P.middlewares)!=null&&_.length?(t(),l("span",Ki,p(P.middlewares.length)+" 个中间件 ",1)):s("v-if",true),a(f,{name:P.enabled?"check-circle":"close-circle",class:ee(P.enabled?"enabled":"disabled")},null,8,["name","class"])])],10,Ni)}),128))]),s(" 插件详情 "),w.value?(t(),l("div",Qi,[e("header",Xi,[e("div",Yi,[e("h3",null,p(w.value.name),1),w.value.version?(t(),l("span",Zi,"v"+p(w.value.version),1)):s("v-if",true)]),e("div",ed,[(t(true),l(D,null,X(w.value.actions,P=>(t(),ae(v,{key:P.name,type:P.type||"default",size:"small",onClick:V=>z(P)},Be({default:C(()=>[R(" "+p(P.label),1)]),_:2},[P.icon?{name:"icon",fn:C(()=>[a(f,{name:P.icon},null,8,["name"])]),key:"0"}:void 0]),1032,["type","onClick"]))),128))])]),s(" 连接器信息 "),w.value.connector?(t(),l("div",td,[c[4]||(c[4]=e("h4",null,"连接器",-1)),e("div",ld,[e("span",sd,p(w.value.connector.id),1),e("span",ad," 支持: "+p(((U=w.value.connector.supportedTypes)==null?void 0:U.join(", "))||"无"),1)])])):s("v-if",true),s(" 中间件列表 "),(j=w.value.middlewares)!=null&&j.length?(t(),l("div",nd,[c[5]||(c[5]=e("h4",null,"中间件",-1)),e("div",od,[(t(true),l(D,null,X(w.value.middlewares,P=>(t(),l("span",{key:P.name,class:ee(["middleware-tag",{enabled:P.enabled}])},[R(p(P.displayName||P.name)+" ",1),e("span",id,p(O(P.phase)),1)],2))),128))])])):s("v-if",true),s(" 配置表单 "),(Q=w.value.configFields)!=null&&Q.length?(t(),l("div",dd,[c[7]||(c[7]=e("h4",null,"配置",-1)),a(Ce,{fields:w.value.configFields,modelValue:r.value,"onUpdate:modelValue":c[0]||(c[0]=P=>r.value=P)},null,8,["fields","modelValue"]),e("div",rd,[a(v,{type:"primary",onClick:k,loading:y.value},{icon:C(()=>[a(f,{name:"save"})]),default:C(()=>[c[6]||(c[6]=R(" 保存配置 ",-1))]),_:1},8,["loading"])])])):(t(),l(D,{key:3},[s(" 无配置提示 "),e("div",cd,[a(f,{name:"info-circle"}),c[8]||(c[8]=e("span",null,"该插件暂无可配置项",-1))])],2112))])):(t(),l(D,{key:1},[s(" 无选中提示 "),e("div",ud,[a(f,{name:"apps"}),c[9]||(c[9]=e("p",null,"请从左侧选择一个插件查看详情",-1))])],2112))],64))])}}}),md=de(vd,[["__scopeId","data-v-bfb4a81f"]]),pd={class:"settings-view"},gd={class:"sidebar"},fd={class:"nav-list"},_d=["onClick"],hd={class:"main-content"},yd={key:0,class:"loading"},kd={class:"panel-header"},bd={key:0},$d={class:"custom-panel"},wd={class:"actions"},Vd=ie({__name:"SettingsView",setup(o){const I=h(true),g=h([]),w=h(""),r=h({}),y=re(()=>g.value.find(m=>m.id===w.value)),S=async()=>{try{g.value=await ze.panels(),g.value.length&&!w.value&&(w.value=g.value[0].id)}catch{G.error("加载设置面板失败")}},O=()=>{var m;if(((m=y.value)==null?void 0:m.type)==="custom"){r.value={...y.value.config||{}};for(const k of y.value.configFields||[])r.value[k.key]===void 0&&k.default!==void 0&&(r.value[k.key]=k.default)}},b=async()=>{if(y.value)try{await ze.update(y.value.id,r.value),G.success("保存成功"),await S()}catch{G.error("保存失败")}};return ge(w,()=>{var m;((m=y.value)==null?void 0:m.type)==="custom"&&O()}),pe(async()=>{await S(),I.value=false}),(m,k)=>{const z=E("k-icon"),$=E("k-button");return t(),l("div",pd,[s(" 侧边栏导航 "),e("aside",gd,[e("nav",fd,[(t(true),l(D,null,X(g.value,c=>(t(),l("div",{key:c.id,class:ee(["nav-item",{active:w.value===c.id}]),onClick:f=>w.value=c.id},[a(z,{name:c.icon},null,8,["name"]),e("span",null,p(c.name),1)],10,_d))),128))])]),s(" 主内容区 "),e("main",hd,[I.value?(t(),l("div",yd,[a(z,{name:"sync",class:"spin"}),k[1]||(k[1]=R(" 加载中... ",-1))])):y.value?(t(),l(D,{key:1},[s(" 面板标题 "),e("header",kd,[e("h2",null,p(y.value.name),1),y.value.description?(t(),l("p",bd,p(y.value.description),1)):s("v-if",true)]),s(" 功能模块面板 "),y.value.component==="middlewares"?(t(),ae(Li,{key:0})):y.value.component==="plugins"?(t(),l(D,{key:1},[s(" 扩展插件面板 "),a(md)],64)):y.value.type==="custom"&&y.value.configFields?(t(),l(D,{key:2},[s(" 自定义面板 "),e("div",$d,[a(Ce,{fields:y.value.configFields,modelValue:r.value,"onUpdate:modelValue":k[0]||(k[0]=c=>r.value=c)},null,8,["fields","modelValue"]),e("div",wd,[a($,{type:"primary",onClick:b},{icon:C(()=>[a(z,{name:"save"})]),default:C(()=>[k[2]||(k[2]=R(" 保存 ",-1))]),_:1})])])],64)):s("v-if",true)],64)):s("v-if",true)])])}}}),Cd=de(Vd,[["__scopeId","data-v-5fa778a6"]]),xd={class:"setup-storage"},Id={key:0,class:"loading-state"},Sd={key:0,class:"warning-box"},Ud={class:"step-actions"},Td=ie({__name:"SetupStorage",props:{modelValue:{},saving:{type:Boolean}},emits:["update:modelValue","next"],setup(o,{emit:I}){const g=o,w=I,r=h(true),y=h([]),S=h({});ge(S,m=>{w("update:modelValue",{...m})},{deep:true});const O=async()=>{try{r.value=true;const[m,k]=await Promise.all([fe.getStorageFields(),fe.getStorageConfig()]);y.value=m;const z={...g.modelValue};for(const $ of m)k[$.key]!==void 0?z[$.key]=k[$.key]:z[$.key]===void 0&&$.default!==void 0&&(z[$.key]=$.default);S.value=z}catch(m){console.error("Failed to load storage config:",m)}finally{r.value=false}},b=()=>{w("next")};return pe(O),(m,k)=>{const z=E("k-icon"),$=E("k-button");return t(),l("div",xd,[k[4]||(k[4]=e("h3",null,"存储配置",-1)),k[5]||(k[5]=e("p",{class:"step-desc"},"选择生成图片的存储方式。推荐使用本地存储或 S3 兼容存储。",-1)),r.value?(t(),l("div",Id,[a(z,{name:"sync",class:"spin"}),k[1]||(k[1]=e("span",null,"加载配置中...",-1))])):(t(),l(D,{key:1},[s(" 使用 ConfigRenderer 渲染配置字段 "),a(Ce,{fields:y.value,modelValue:S.value,"onUpdate:modelValue":k[0]||(k[0]=c=>S.value=c)},null,8,["fields","modelValue"]),s(" 警告提示(当选择不使用时) "),S.value.backend==="none"?(t(),l("div",Sd,[a(z,{name:"warning"}),k[2]||(k[2]=e("div",null,[e("strong",null,"注意"),e("p",null,'选择"不使用"将保留生成服务返回的原始 URL,这些 URL 可能会过期或无法访问。建议配置存储后端以确保图片长期可用。')],-1))])):s("v-if",true)],64)),s(" 操作按钮 "),e("div",Ud,[a($,{type:"primary",loading:o.saving,disabled:r.value,onClick:b},{default:C(()=>[...k[3]||(k[3]=[R(" 下一步 ",-1)])]),_:1},8,["loading","disabled"])])])}}}),Dd=de(Td,[["__scopeId","data-v-9aeaae19"]]),Od={class:"setup-auth"},zd={class:"config-panel"},Pd={class:"form-row"},Fd={class:"field-container"},Ld={class:"verify-section"},Ad={class:"verify-card"},Ed={class:"code-display"},Md={class:"code-value"},Rd={class:"code-meta"},Nd={class:"step-actions"},qd=ie({__name:"SetupAuth",props:{saving:{type:Boolean}},emits:["complete","skip"],setup(o,{emit:I}){const g=I,w=h(null),r=h(false),y=h(""),S=h(0),O=h(null);let b=null,m=null;const k=async()=>{try{const v=await fe.status();v.boundUid&&(w.value=v.boundUid,O.value=v.boundUid)}catch(v){console.error("Failed to load status:",v)}},z=async()=>{if($&&clearTimeout($),!!w.value)try{r.value=true;const v=await fe.generateVerifyCode(w.value);y.value=v.code,S.value=v.expiresIn,G.success("验证码已生成,请在聊天平台完成验证")}catch(v){G.error("生成验证码失败: "+(v instanceof Error?v.message:"未知错误"))}finally{r.value=false}};let $=null;const c=()=>{$&&clearTimeout($),y.value="",w.value&&($=window.setTimeout(z,1e3))},f=async()=>{if(!w.value){G.warning("请输入用户 ID");return}try{await fe.bindUid(w.value),G.success("配置已保存"),g("complete")}catch(v){G.error("保存失败: "+(v instanceof Error?v.message:"未知错误"))}};return pe(()=>{k(),b=We("media-luna/webui-auth/bind-request",v=>{v.uid&&(w.value=v.uid,v.code&&(y.value=v.code,S.value=v.expiresIn,G.info("收到绑定请求,请在聊天平台完成验证")))}),m=window.setInterval(async()=>{try{const v=await fe.status();if(v.boundUid){if(w.value&&v.boundUid!==w.value)return;v.boundUid!==O.value&&(w.value=v.boundUid,G.success("检测到绑定成功!"),g("complete"),m&&clearInterval(m))}}catch{}},3e3)}),Ve(()=>{b&&b(),m&&clearInterval(m)}),(v,U)=>{const j=E("el-input-number"),Q=E("k-button");return t(),l("div",Od,[U[8]||(U[8]=e("h3",null,"用户绑定",-1)),U[9]||(U[9]=e("p",{class:"step-desc"}," 将 WebUI 与 Koishi 用户绑定。你可以直接配置用户 ID,也可以通过验证码进行验证绑定。 ",-1)),e("div",zd,[s(" UID 输入 "),e("div",Pd,[U[3]||(U[3]=e("div",{class:"form-label"},"用户 ID (UID)",-1)),e("div",Fd,[a(j,{modelValue:w.value,"onUpdate:modelValue":U[0]||(U[0]=P=>w.value=P),min:1,controls:false,placeholder:"Koishi 用户 ID",class:"uid-input full-width",onInput:c},null,8,["modelValue"]),U[2]||(U[2]=e("div",{class:"field-desc"},[R(" 输入你的 Koishi "),e("code",null,"uid"),R(",不是原神的。 ")],-1))])]),s(" 验证码显示区域 "),e("div",Ld,[e("div",Ad,[e("div",Ed,[U[4]||(U[4]=e("div",{class:"code-label"},"验证码",-1)),e("div",Md,p(y.value),1),e("div",Rd,"有效期 "+p(S.value)+" 秒",1)]),U[5]||(U[5]=e("div",{class:"verify-guide"},[e("p",null,"请在聊天平台向机器人发送以下指令完成绑定:"),e("div",{class:"command-box"},[e("code",null,"bindui")]),e("p",{class:"small-hint"},"发送指令后,请根据提示输入左侧的验证码。")],-1))])])]),e("div",Nd,[a(Q,{onClick:U[1]||(U[1]=P=>v.$emit("skip"))},{default:C(()=>[...U[6]||(U[6]=[R("跳过",-1)])]),_:1}),a(Q,{type:"primary",loading:o.saving,onClick:f},{default:C(()=>[...U[7]||(U[7]=[R(" 保存 / 完成 ",-1)])]),_:1},8,["loading"])])])}}}),Bd=de(qd,[["__scopeId","data-v-59078dbb"]]),Hd={class:"setup-wizard"},Gd={class:"wizard-container"},Jd={class:"steps-indicator"},Wd={class:"step-number"},jd={key:1},Kd={class:"step-label"},Qd={class:"wizard-content"},Xd={key:"complete",class:"step-complete"},Yd={class:"complete-icon"},Zd=ie({__name:"SetupWizard",emits:["complete"],setup(o,{emit:I}){const g=I,w=[{id:"storage",label:"存储配置"},{id:"auth",label:"用户绑定"},{id:"complete",label:"完成"}],r=h(0),y=h(false),S=h({}),O=async()=>{y.value=true;try{await fe.updateStorageConfig(S.value),G.success("存储配置已保存"),r.value=1}catch(z){G.error("保存失败: "+(z instanceof Error?z.message:"未知错误"))}finally{y.value=false}},b=()=>{r.value=2},m=()=>{r.value=2},k=async()=>{try{await fe.complete(),g("complete")}catch{g("complete")}};return(z,$)=>{const c=E("k-icon"),f=E("k-button");return t(),l("div",Hd,[e("div",Gd,[s(" 头部 "),$[4]||($[4]=e("div",{class:"wizard-header"},[e("h1",null,"欢迎使用 Media Luna"),e("p",null,"在开始使用前,请完成以下基础配置")],-1)),s(" 步骤指示器 "),e("div",Jd,[(t(),l(D,null,X(w,(v,U)=>e("div",{key:v.id,class:ee(["step-item",{active:r.value===U,completed:r.value>U}])},[e("div",Wd,[r.value>U?(t(),ae(c,{key:0,name:"check"})):(t(),l("span",jd,p(U+1),1))]),e("span",Kd,p(v.label),1)],2)),64))]),s(" 步骤内容 "),e("div",Qd,[a(Ae,{name:"fade",mode:"out-in"},{default:C(()=>[r.value===0?(t(),ae(Dd,{key:"storage",modelValue:S.value,"onUpdate:modelValue":$[0]||($[0]=v=>S.value=v),saving:y.value,onNext:O},null,8,["modelValue","saving"])):r.value===1?(t(),ae(Bd,{key:"auth",saving:y.value,onComplete:b,onSkip:m},null,8,["saving"])):r.value===2?(t(),l("div",Xd,[e("div",Yd,[a(c,{name:"check-circle"})]),$[2]||($[2]=e("h2",null,"配置完成",-1)),$[3]||($[3]=e("p",null,"您已完成 Media Luna 的初始设置,现在可以开始使用了。",-1)),a(f,{type:"primary",size:"large",onClick:k},{default:C(()=>[...$[1]||($[1]=[R(" 开始使用 ",-1)])]),_:1})])):s("v-if",true)]),_:1})])])])}}}),er=de(Zd,[["__scopeId","data-v-3931ca56"]]),tr={class:"top-nav"},lr={class:"nav-container"},sr={class:"nav-tabs",role:"tablist"},ar=["onClick","aria-selected"],nr={class:"main-content"},or=ie({__name:"index",setup(o){const I=h("generate"),g=h(false),w=async()=>{try{const z=await fe.status();g.value=z.needsSetup}catch(z){console.error("Failed to check setup status:",z),g.value=false}},r=()=>{g.value=false},y=re(()=>{switch(I.value){case"generate":return Le;case"channels":return El;case"presets":return zs;case"tasks":return gn;case"settings":return Cd;default:return Le}}),S=z=>()=>De("svg",{viewBox:"0 0 24 24",fill:"currentColor"},[De("path",{d:z})]),O=[{id:"generate",label:"生成",icon:S("M7.5 5.6L10 7 8.6 4.5 10 2 7.5 3.4 5 2 6.4 4.5 5 7zM19 2l-2.5 1.4L14 2l1.4 2.5L14 7l2.5-1.4L19 7l-1.4-2.5zm-5.6 5.4L9 12l4.4 4.6L17.8 12zM2 13l2.5 1.4L6 17l1.4-2.5L10 13 7.5 11.6 6 9l-1.4 2.5z")},{id:"channels",label:"渠道",icon:S("M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z")},{id:"presets",label:"预设",icon:S("M17 3H7c-1.1 0-2 .9-2 2v16l7-3 7 3V5c0-1.1-.9-2-2-2z")},{id:"tasks",label:"任务",icon:S("M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm2 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z")},{id:"settings",label:"设置",icon:S("M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58a.49.49 0 0 0 .12-.61l-1.92-3.32a.488.488 0 0 0-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54a.484.484 0 0 0-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58a.49.49 0 0 0-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.58 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z")}];let b="";function m(){const z=document.querySelector(".layout-header");z&&(b=z.style.display,z.style.display="none")}function k(){const z=document.querySelector(".layout-header");z&&(z.style.display=b||"")}return pe(()=>{m(),w()}),He(k),(z,$)=>{const c=E("k-layout");return t(),ae(c,{class:"app-layout media-luna-app"},{default:C(()=>[s(" 设置向导 "),g.value?(t(),ae(er,{key:0,onComplete:r})):(t(),l(D,{key:1},[s(" 主界面 "),e("div",tr,[e("div",lr,[$[0]||($[0]=e("div",{class:"logo-area"},[e("span",{class:"logo-text"},"MEDIA LUNA")],-1)),e("div",sr,[(t(),l(D,null,X(O,f=>e("div",{key:f.id,class:ee(["nav-tab",{active:I.value===f.id}]),onClick:v=>I.value=f.id,role:"tab","aria-selected":I.value===f.id},[(t(),ae(Oe(f.icon),{class:"tab-icon"})),e("span",null,p(f.label),1)],10,ar)),64))])])]),e("div",nr,[(t(),ae(Ge,null,[(t(),ae(Oe(y.value)))],1024))])],64))]),_:1})}}}),ir=de(or,[["__scopeId","data-v-c4fa9f13"]]),cr=o=>{o.page({name:"Media Luna",path:"/media-luna",component:ir,order:500})};export{cr as default};
1
+ import{defineComponent as ie,computed as re,ref as h,resolveComponent as E,createElementBlock as l,openBlock as t,createElementVNode as e,createCommentVNode as s,Fragment as D,renderList as X,normalizeClass as ee,toDisplayString as g,createVNode as a,withKeys as qe,withCtx as C,createStaticVNode as Se,createBlock as ae,watch as ge,withDirectives as ke,vShow as be,withModifiers as ve,createTextVNode as R,onMounted as pe,onUnmounted as Ve,Teleport as Be,Transition as Ae,createSlots as He,onBeforeUnmount as Ge,h as De,resolveDynamicComponent as Oe,KeepAlive as Je}from"vue";import{send as Ee,message as G,receive as We}from"@koishijs/client";async function L(o,I){const f=await Ee(o,I);if(!f.success)throw new Error(f.error||"请求失败");return f.data}const he={list:()=>L("media-luna/channels/list"),get:o=>L("media-luna/channels/get",{id:o}),create:o=>L("media-luna/channels/create",o),update:(o,I)=>L("media-luna/channels/update",{id:o,data:I}),delete:o=>L("media-luna/channels/delete",{id:o}),toggle:(o,I)=>L("media-luna/channels/toggle",{id:o,enabled:I}),tags:()=>L("media-luna/channels/tags"),getByTags:(o,I)=>L("media-luna/channels/by-tags",{tags:o,matchAll:I})},_e={list:o=>L("media-luna/presets/list",{enabledOnly:o}),get:o=>L("media-luna/presets/get",{id:o}),create:o=>L("media-luna/presets/create",o),update:(o,I)=>L("media-luna/presets/update",{id:o,data:I}),delete:o=>L("media-luna/presets/delete",{id:o}),toggle:(o,I)=>L("media-luna/presets/toggle",{id:o,enabled:I}),copy:o=>L("media-luna/presets/copy",{id:o}),matching:o=>L("media-luna/presets/matching",{channelId:o}),tags:()=>L("media-luna/presets/tags"),getByTags:(o,I)=>L("media-luna/presets/by-tags",{tags:o,matchAll:I})},ye={list:o=>L("media-luna/tasks/list",o),get:o=>L("media-luna/tasks/get",{id:o}),delete:o=>L("media-luna/tasks/delete",{id:o}),stats:o=>L("media-luna/tasks/stats",{channelId:o}),cleanup:o=>L("media-luna/tasks/cleanup",{days:o}),recent:(o,I)=>L("media-luna/tasks/recent",{userId:o,limit:I}),my:o=>L("media-luna/tasks/my",o)},je={me:()=>L("media-luna/auth/me")},we={list:()=>L("media-luna/middlewares/list"),get:o=>L("media-luna/middlewares/get",{name:o}),update:(o,I)=>L("media-luna/middlewares/update",{name:o,data:I}),reset:o=>L("media-luna/middlewares/reset",{name:o}),executionOrder:()=>L("media-luna/middlewares/execution-order"),cardFields:()=>L("media-luna/middlewares/card-fields")},$e={list:()=>L("media-luna/connectors/list"),get:o=>L("media-luna/connectors/get",{id:o}),fields:o=>L("media-luna/connectors/fields",{id:o}),schema:()=>L("media-luna/connectors/schema")},Ke={generate:o=>L("media-luna/generate",o),preview:o=>L("media-luna/generate/preview",o)},Qe={upload:(o,I,f)=>L("media-luna/cache/upload",{data:o,mime:I,filename:f}),cacheUrl:o=>L("media-luna/cache/cache-url",{url:o}),get:o=>L("media-luna/cache/get",{id:o}),read:o=>L("media-luna/cache/read",{id:o}),delete:o=>L("media-luna/cache/delete",{id:o}),stats:()=>L("media-luna/cache/stats"),clear:()=>L("media-luna/cache/clear")},ze={panels:()=>L("media-luna/settings/panels"),get:o=>L("media-luna/settings/get",{id:o}),update:(o,I)=>L("media-luna/settings/update",{id:o,config:I}),syncRemotePresets:()=>L("media-luna/presets/sync")},fe={status:()=>L("media-luna/setup/status"),getStorageFields:()=>L("media-luna/setup/storage/fields"),getStorageConfig:()=>L("media-luna/setup/storage/get"),updateStorageConfig:o=>L("media-luna/setup/storage/update",o),generateVerifyCode:o=>L("media-luna/setup/verify-code/generate",{uid:o}),verifyCode:(o,I)=>L("media-luna/setup/verify-code/verify",{code:o,uid:I}),bindUid:o=>L("media-luna/setup/bind-uid",{uid:o}),getUsers:()=>L("media-luna/setup/users"),complete:()=>L("media-luna/setup/complete")},Ie={list:()=>L("media-luna/plugins/list"),get:o=>L("media-luna/plugins/get",{id:o}),updateConfig:(o,I)=>L("media-luna/plugins/update-config",{pluginId:o,config:I}),enable:o=>L("media-luna/plugins/enable",{id:o}),disable:o=>L("media-luna/plugins/disable",{id:o}),externalList:()=>L("media-luna/plugins/external/list"),externalAdd:o=>L("media-luna/plugins/external/add",{moduleName:o}),externalRemove:o=>L("media-luna/plugins/external/remove",{moduleName:o})},Xe={class:"tag-filter"},Ye={class:"filter-tags"},Ze=["onClick"],et={key:0,class:"filter-input-wrapper"},tt=ie({__name:"TagFilter",props:{modelValue:{default:()=>[]},allTags:{},presetTags:{default:()=>[]},showInput:{type:Boolean,default:true},maxDynamicTags:{default:20}},emits:["update:modelValue","change"],setup(o,{emit:I}){const f=o,w=I,r=re({get:()=>f.modelValue,set:v=>{w("update:modelValue",v),w("change",v)}}),y=h(""),S=re(()=>{const v=f.allTags.filter(k=>!f.presetTags.includes(k)).slice(0,f.maxDynamicTags);return[...f.presetTags,...v]}),O=v=>{const k=[...r.value],z=k.indexOf(v);z>=0?k.splice(z,1):k.push(v),r.value=k},b=()=>{const v=y.value.trim();v&&!r.value.includes(v)&&(r.value=[...r.value,v]),y.value=""};return(v,k)=>{const z=E("k-icon"),$=E("el-input");return t(),l("div",Xe,[e("div",Ye,[(t(true),l(D,null,X(S.value,c=>(t(),l("span",{key:c,class:ee(["filter-tag",{active:r.value.includes(c)}]),onClick:p=>O(c)},g(c),11,Ze))),128))]),o.showInput?(t(),l("div",et,[a($,{modelValue:y.value,"onUpdate:modelValue":k[0]||(k[0]=c=>y.value=c),placeholder:"输入标签筛选...",size:"small",clearable:"",onKeyup:qe(b,["enter"]),class:"filter-input"},{prefix:C(()=>[a(z,{name:"search"})]),_:1},8,["modelValue"])])):s("v-if",true)])}}}),de=(o,I)=>{const f=o.__vccOpts||o;for(const[w,r]of I)f[w]=r;return f},Ue=de(tt,[["__scopeId","data-v-61b504c8"]]),lt={class:"view-mode-switch"},st=ie({__name:"ViewModeSwitch",props:{modelValue:{}},emits:["update:modelValue"],setup(o){return(I,f)=>(t(),l("div",lt,[e("button",{class:ee(["mode-btn",{active:o.modelValue==="card"}]),onClick:f[0]||(f[0]=w=>I.$emit("update:modelValue","card")),title:"卡片视图"},[...f[2]||(f[2]=[Se('<svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" data-v-ae3ef498><rect x="3" y="3" width="8" height="8" rx="1" data-v-ae3ef498></rect><rect x="13" y="3" width="8" height="8" rx="1" data-v-ae3ef498></rect><rect x="3" y="13" width="8" height="8" rx="1" data-v-ae3ef498></rect><rect x="13" y="13" width="8" height="8" rx="1" data-v-ae3ef498></rect></svg>',1)])],2),e("button",{class:ee(["mode-btn",{active:o.modelValue==="list"}]),onClick:f[1]||(f[1]=w=>I.$emit("update:modelValue","list")),title:"列表视图"},[...f[3]||(f[3]=[e("svg",{viewBox:"0 0 24 24",width:"16",height:"16",fill:"currentColor"},[e("rect",{x:"3",y:"4",width:"18",height:"3",rx:"1"}),e("rect",{x:"3",y:"10.5",width:"18",height:"3",rx:"1"}),e("rect",{x:"3",y:"17",width:"18",height:"3",rx:"1"})],-1)])],2)]))}}),Me=de(st,[["__scopeId","data-v-ae3ef498"]]),at={class:"tag-input"},nt=ie({__name:"TagInput",props:{modelValue:{},suggestions:{},placeholder:{}},emits:["update:modelValue"],setup(o,{emit:I}){const f=o,w=I,r=re({get:()=>f.modelValue,set:y=>w("update:modelValue",y)});return(y,S)=>{const O=E("el-option"),b=E("el-select");return t(),l("div",at,[a(b,{modelValue:r.value,"onUpdate:modelValue":S[0]||(S[0]=v=>r.value=v),multiple:"",filterable:"","allow-create":"","default-first-option":"",placeholder:o.placeholder,class:"tag-select","tag-type":"primary"},{default:C(()=>[(t(true),l(D,null,X(o.suggestions,v=>(t(),ae(O,{key:v,label:v,value:v},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"])])}}}),Re=de(nt,[["__scopeId","data-v-68388640"]]),ot={class:"config-renderer"},it={key:0,class:"form-row"},dt={class:"field-container"},rt={key:6,class:"field-desc"},ct=ie({__name:"ConfigRenderer",props:{fields:{},modelValue:{},clearable:{type:Boolean,default:false}},emits:["update:modelValue"],setup(o,{emit:I}){const f=o,w=I,r=O=>f.modelValue[O],y=(O,b)=>{const v={...f.modelValue,[O]:b};w("update:modelValue",v)},S=O=>{if(!O.showWhen)return true;const{field:b,value:v}=O.showWhen;return f.modelValue[b]===v};return(O,b)=>{const v=E("el-switch"),k=E("el-option"),z=E("el-select"),$=E("el-input-number"),c=E("el-input");return t(),l("div",ot,[(t(true),l(D,null,X(o.fields,p=>(t(),l(D,{key:p.key},[S(p)?(t(),l("div",it,[e("div",{class:ee(["form-label",{required:p.required}])},g(p.label),3),e("div",dt,[s(" Boolean 类型 "),p.type==="boolean"?(t(),ae(v,{key:0,"model-value":r(p.key),"onUpdate:modelValue":m=>y(p.key,m)},null,8,["model-value","onUpdate:modelValue"])):p.type==="select"?(t(),l(D,{key:1},[s(" Select 类型 "),a(z,{"model-value":r(p.key),"onUpdate:modelValue":m=>y(p.key,m),placeholder:p.placeholder||"请选择",clearable:o.clearable,style:{width:"100%"}},{default:C(()=>[(t(true),l(D,null,X(p.options,m=>(t(),ae(k,{key:String(m.value),label:m.label,value:m.value},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onUpdate:modelValue","placeholder","clearable"])],64)):p.type==="number"?(t(),l(D,{key:2},[s(" Number 类型 "),a($,{"model-value":r(p.key),"onUpdate:modelValue":m=>y(p.key,m),placeholder:p.placeholder,controls:true},null,8,["model-value","onUpdate:modelValue","placeholder"])],64)):p.type==="textarea"?(t(),l(D,{key:3},[s(" Textarea 类型 "),a(c,{"model-value":r(p.key),"onUpdate:modelValue":m=>y(p.key,m),type:"textarea",rows:4,placeholder:p.placeholder},null,8,["model-value","onUpdate:modelValue","placeholder"])],64)):p.type==="password"?(t(),l(D,{key:4},[s(" Password 类型 "),a(c,{"model-value":r(p.key),"onUpdate:modelValue":m=>y(p.key,m),type:"password","show-password":"",placeholder:p.placeholder},null,8,["model-value","onUpdate:modelValue","placeholder"])],64)):(t(),l(D,{key:5},[s(" Text/String 类型 (默认) "),a(c,{"model-value":r(p.key),"onUpdate:modelValue":m=>y(p.key,m),placeholder:p.placeholder,clearable:o.clearable},null,8,["model-value","onUpdate:modelValue","placeholder","clearable"])],64)),s(" 字段描述 "),p.description?(t(),l("div",rt,g(p.description),1)):s("v-if",true)])])):s("v-if",true)],64))),128))])}}}),Ce=de(ct,[["__scopeId","data-v-d82952a0"]]),ut={class:"dialog-layout"},vt={class:"tab-nav"},mt=["onClick"],pt={key:0,class:"tab-badge"},gt={class:"tab-content"},ft={class:"content-section"},_t={class:"form-group"},ht={class:"form-row"},yt={class:"form-group flex-1"},kt={class:"form-group"},bt={class:"switch-wrapper"},$t={class:"switch-label"},wt={class:"form-group"},Vt={class:"section-divider"},Ct={class:"content-section"},xt={class:"override-hint-bar"},It={class:"pipeline-flow"},St={class:"phase-icon"},Ut={class:"phase-info"},Tt={class:"phase-name"},Dt={class:"phase-desc"},Ot={class:"phase-badge"},zt={key:0,class:"phase-middlewares"},Pt={class:"mw-card"},Ft={class:"mw-content"},Lt={class:"mw-name"},At={class:"mw-desc"},Et={key:2,class:"phase-connector"},Mt={class:"connector-arrow"},Rt={class:"content-section"},Nt={class:"override-hint-bar"},qt={key:0,class:"plugins-override-list"},Bt=["onClick"],Ht={class:"plugin-info"},Gt={class:"plugin-name"},Jt={key:0,class:"override-badge"},Wt={class:"plugin-actions"},jt={class:"plugin-config-fields"},Kt={key:0,class:"override-field-row"},Qt={class:"field-label"},Xt={class:"field-input"},Yt={key:0,class:"field-hint"},Zt={key:1,class:"empty-hint"},el={class:"dialog-footer"},tl=ie({__name:"ChannelConfigDialog",props:{modelValue:{type:Boolean},channel:{default:null}},emits:["update:modelValue","saved"],setup(o,{emit:I}){const f=o,w=I,r=re({get:()=>f.modelValue,set:d=>w("update:modelValue",d)}),y=re(()=>{var d;return!!((d=f.channel)!=null&&d.id)}),S=h("basic"),O=h(false),b=h(new Set),v=h([]),k=h({}),z=h([]),$=h([]),c=h({name:"",enabled:true,connectorId:"",connectorConfig:{},pluginOverrides:{},tags:[]}),p=[{id:"basic",label:"基本信息",icon:"file-text"},{id:"middlewares",label:"中间件流程",icon:"git-branch"},{id:"plugins",label:"插件配置",icon:"puzzle"}],m=[{id:"lifecycle-prepare",label:"准备",description:"验证、权限检查",icon:"clipboard-check",colorClass:"phase-prepare"},{id:"lifecycle-pre-request",label:"预处理",description:"预设应用、参数处理",icon:"settings",colorClass:"phase-pre"},{id:"lifecycle-request",label:"执行",description:"调用连接器生成",icon:"play",colorClass:"phase-request"},{id:"lifecycle-post-request",label:"后处理",description:"结果缓存、格式转换",icon:"package",colorClass:"phase-post"},{id:"lifecycle-finalize",label:"完成",description:"计费结算、记录保存",icon:"check-circle",colorClass:"phase-finalize"}],U={billing:"计费模块",transform:"转换处理",validation:"验证检查",preset:"预设系统",cache:"缓存管理",recording:"任务记录",request:"请求执行",custom:"自定义"},j=re(()=>c.value.connectorId?k.value[c.value.connectorId]||[]:[]),Q=re(()=>{const d=v.value.find(u=>u.id===c.value.connectorId);return(d==null?void 0:d.name)||"连接器"}),F=re(()=>p.map(d=>{let u="";return d.id==="middlewares"&&(u=String(z.value.length)),d.id==="plugins"&&V.value.length>0&&(u=String(V.value.length)),{...d,badge:u}})),V=re(()=>$.value.filter(d=>d.configFields&&d.configFields.length>0)),_=d=>z.value.filter(u=>u.phase===d),K=(d,u)=>{var M,le,Y;return(Y=(le=(M=c.value.pluginOverrides)==null?void 0:M[d])==null?void 0:le.middlewares)==null?void 0:Y[u]},ce=(d,u,M)=>{c.value.pluginOverrides||(c.value.pluginOverrides={}),c.value.pluginOverrides[d]||(c.value.pluginOverrides[d]={}),c.value.pluginOverrides[d].middlewares||(c.value.pluginOverrides[d].middlewares={}),M==null?(delete c.value.pluginOverrides[d].middlewares[u],Object.keys(c.value.pluginOverrides[d].middlewares).length===0&&delete c.value.pluginOverrides[d].middlewares,Object.keys(c.value.pluginOverrides[d]).length===0&&delete c.value.pluginOverrides[d]):c.value.pluginOverrides[d].middlewares[u]=M},me=d=>{const u=K(d.configGroup||d.name,d.name);return u!==void 0?u?"active override":"override":d.enabled?"active":""},T=(d,u)=>{var M,le;return(le=(M=c.value.pluginOverrides)==null?void 0:M[d])==null?void 0:le[u]},x=(d,u,M)=>{c.value.pluginOverrides||(c.value.pluginOverrides={}),c.value.pluginOverrides[d]||(c.value.pluginOverrides[d]={}),M==null||M===""?(delete c.value.pluginOverrides[d][u],Object.keys(c.value.pluginOverrides[d]).length===0&&delete c.value.pluginOverrides[d]):c.value.pluginOverrides[d][u]=M},H=d=>{var M;const u=(M=c.value.pluginOverrides)==null?void 0:M[d];return u&&Object.keys(u).length>0},W=d=>{c.value.pluginOverrides&&delete c.value.pluginOverrides[d]},q=d=>{b.value.has(d)?b.value.delete(d):b.value.add(d)},n=(d,u)=>{var P,J;if(!u.showWhen)return true;const{field:M,value:le}=u.showWhen,Y=(J=(P=c.value.pluginOverrides)==null?void 0:P[d.id])==null?void 0:J[M],ne=d.config[M];return(Y!==void 0?Y:ne)===le},i=async d=>{if(c.value.connectorConfig={},d&&!k.value[d])try{const u=await $e.fields(d);k.value[d]=u}catch(u){console.error("Failed to load connector fields:",u)}},A=async()=>{var d;if(!c.value.name){G.error("请输入渠道名称");return}if(!c.value.connectorId){G.error("请选择连接器");return}O.value=true;try{y.value&&((d=f.channel)!=null&&d.id)?(await he.update(f.channel.id,c.value),G.success("保存成功")):(await he.create(c.value),G.success("创建成功")),w("saved"),r.value=false}catch(u){G.error(u instanceof Error?u.message:"操作失败")}finally{O.value=false}},Z=()=>{S.value="basic",b.value.clear()},B=async()=>{try{const[d,u,M]=await Promise.all([$e.list(),we.list(),Ie.list()]);v.value=d,z.value=u,$.value=M.filter(le=>le.configFields&&le.configFields.length>0||le.middlewares&&le.middlewares.length>0)}catch(d){console.error("Failed to load data:",d)}};return ge(()=>f.modelValue,async d=>{if(d)if(await B(),f.channel){if(c.value=JSON.parse(JSON.stringify(f.channel)),c.value.pluginOverrides||(c.value.pluginOverrides={}),c.value.connectorConfig||(c.value.connectorConfig={}),c.value.connectorId&&!k.value[c.value.connectorId])try{const u=await $e.fields(c.value.connectorId);k.value[c.value.connectorId]=u}catch(u){console.error("Failed to load connector fields:",u)}for(const u of Object.keys(c.value.pluginOverrides))b.value.add(u)}else c.value={name:"",enabled:true,connectorId:"",connectorConfig:{},pluginOverrides:{},tags:[]}}),(d,u)=>{const M=E("k-icon"),le=E("el-input"),Y=E("el-option"),ne=E("el-select"),ue=E("el-switch"),P=E("k-button"),J=E("el-input-number"),oe=E("el-dialog");return t(),ae(oe,{modelValue:r.value,"onUpdate:modelValue":u[6]||(u[6]=N=>r.value=N),title:y.value?"编辑渠道":"创建渠道",width:"800px","close-on-click-modal":false,class:"channel-config-dialog",onClosed:Z},{footer:C(()=>[e("div",el,[a(P,{onClick:u[5]||(u[5]=N=>r.value=false)},{default:C(()=>[...u[24]||(u[24]=[R("取消",-1)])]),_:1}),a(P,{type:"primary",onClick:A,loading:O.value},{default:C(()=>[R(g(y.value?"保存":"创建"),1)]),_:1},8,["loading"])])]),default:C(()=>[e("div",ut,[s(" 左侧 Tab 导航 "),e("div",vt,[(t(true),l(D,null,X(F.value,N=>(t(),l("div",{key:N.id,class:ee(["tab-item",{active:S.value===N.id}]),onClick:te=>S.value=N.id},[a(M,{name:N.icon},null,8,["name"]),e("span",null,g(N.label),1),N.badge?(t(),l("span",pt,g(N.badge),1)):s("v-if",true)],10,mt))),128))]),s(" 右侧内容区 "),e("div",gt,[s(" 基本信息 "),ke(e("div",ft,[u[13]||(u[13]=e("div",{class:"section-header"},[e("h4",null,"基本信息"),e("p",null,"设置渠道的名称、连接器和标签")],-1)),e("div",_t,[u[7]||(u[7]=e("label",{class:"form-label required"},"渠道名称",-1)),a(le,{modelValue:c.value.name,"onUpdate:modelValue":u[0]||(u[0]=N=>c.value.name=N),placeholder:"如 OpenAI DALL-E"},null,8,["modelValue"]),u[8]||(u[8]=e("div",{class:"form-hint"},"用户可见的渠道名称,冲突时会自动添加后缀",-1))]),e("div",ht,[e("div",yt,[u[9]||(u[9]=e("label",{class:"form-label required"},"连接器",-1)),a(ne,{modelValue:c.value.connectorId,"onUpdate:modelValue":u[1]||(u[1]=N=>c.value.connectorId=N),placeholder:"选择连接器",onChange:i,style:{width:"100%"}},{default:C(()=>[(t(true),l(D,null,X(v.value,N=>(t(),ae(Y,{key:N.id,label:N.name,value:N.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),e("div",kt,[u[10]||(u[10]=e("label",{class:"form-label"},"启用状态",-1)),e("div",bt,[a(ue,{modelValue:c.value.enabled,"onUpdate:modelValue":u[2]||(u[2]=N=>c.value.enabled=N)},null,8,["modelValue"]),e("span",$t,g(c.value.enabled?"启用":"禁用"),1)])])]),e("div",wt,[u[11]||(u[11]=e("label",{class:"form-label"},"标签",-1)),a(Re,{modelValue:c.value.tags,"onUpdate:modelValue":u[3]||(u[3]=N=>c.value.tags=N),placeholder:"输入标签后按回车..."},null,8,["modelValue"]),u[12]||(u[12]=e("div",{class:"form-hint"},"用于分类和筛选渠道",-1))]),s(" 连接器配置(内嵌) "),j.value.length>0?(t(),l(D,{key:0},[e("div",Vt,[e("span",null,g(Q.value)+" 配置",1)]),a(Ce,{fields:j.value,modelValue:c.value.connectorConfig,"onUpdate:modelValue":u[4]||(u[4]=N=>c.value.connectorConfig=N)},null,8,["fields","modelValue"])],64)):s("v-if",true)],512),[[be,S.value==="basic"]]),s(" 中间件流程 "),ke(e("div",Ct,[u[18]||(u[18]=e("div",{class:"section-header"},[e("h4",null,"中间件流程"),e("p",null,"控制此渠道的中间件启用状态")],-1)),e("div",xt,[a(M,{name:"info-circle"}),u[14]||(u[14]=e("span",null,"留空表示跟随全局配置",-1))]),e("div",It,[(t(),l(D,null,X(m,(N,te)=>e("div",{key:N.id,class:"phase-section"},[s(" 阶段标题 "),e("div",{class:ee(["phase-header",N.colorClass])},[e("div",St,[a(M,{name:N.icon},null,8,["name"])]),e("div",Ut,[e("span",Tt,g(N.label),1),e("span",Dt,g(N.description),1)]),e("span",Ot,g(_(N.id).length),1)],2),s(" 中间件列表 "),_(N.id).length>0?(t(),l("div",zt,[(t(true),l(D,null,X(_(N.id),se=>(t(),l("div",{key:se.name,class:ee(["mw-item",{"has-override":K(se.configGroup||se.name,se.name)!==void 0}])},[e("div",Pt,[e("div",{class:ee(["mw-status",me(se)])},null,2),e("div",Ft,[e("span",Lt,g(se.displayName),1),e("span",At,g(se.description||U[se.category]||se.category),1)]),a(ne,{"model-value":K(se.configGroup||se.name,se.name),"onUpdate:modelValue":Ne=>ce(se.configGroup||se.name,se.name,Ne),placeholder:se.enabled?"全局: 启用":"全局: 禁用",clearable:"",size:"small",class:"mw-switch"},{default:C(()=>[a(Y,{label:"启用",value:true}),a(Y,{label:"禁用",value:false})]),_:1},8,["model-value","onUpdate:modelValue","placeholder"])])],2))),128))])):(t(),l(D,{key:1},[s(" 空状态 "),u[15]||(u[15]=e("div",{class:"empty-phase"},[e("span",null,"无中间件")],-1))],2112)),s(" 阶段间连接箭头 "),te<m.length-1?(t(),l("div",Et,[u[16]||(u[16]=e("div",{class:"connector-line"},null,-1)),e("div",Mt,[a(M,{name:"chevron-down"})]),u[17]||(u[17]=e("div",{class:"connector-line"},null,-1))])):s("v-if",true)])),64))]),s(" 底部说明 "),u[19]||(u[19]=e("div",{class:"pipeline-footer"},[e("div",{class:"footer-item"},[e("span",{class:"dot active"}),e("span",null,"启用 - 中间件将在请求中执行")]),e("div",{class:"footer-item"},[e("span",{class:"dot"}),e("span",null,"禁用 - 中间件将被跳过")]),e("div",{class:"footer-item"},[e("span",{class:"dot override"}),e("span",null,"已覆盖 - 与全局配置不同")])],-1))],512),[[be,S.value==="middlewares"]]),s(" 插件配置 "),ke(e("div",Rt,[u[23]||(u[23]=e("div",{class:"section-header"},[e("h4",null,"插件配置覆盖"),e("p",null,"为此渠道单独配置插件参数")],-1)),e("div",Nt,[a(M,{name:"info-circle"}),u[20]||(u[20]=e("span",null,"留空使用全局配置,填写后将覆盖全局设置",-1))]),V.value.length>0?(t(),l("div",qt,[(t(true),l(D,null,X(V.value,N=>(t(),l("div",{key:N.id,class:ee(["plugin-override-card",{expanded:b.value.has(N.id)}])},[e("div",{class:"plugin-header",onClick:te=>q(N.id)},[e("div",Ht,[e("span",Gt,g(N.name),1),H(N.id)?(t(),l("span",Jt,"已覆盖")):s("v-if",true)]),e("div",Wt,[H(N.id)?(t(),ae(P,{key:0,size:"mini",onClick:ve(te=>W(N.id),["stop"])},{default:C(()=>[...u[21]||(u[21]=[R(" 清除 ",-1)])]),_:1},8,["onClick"])):s("v-if",true),a(M,{name:b.value.has(N.id)?"chevron-up":"chevron-down"},null,8,["name"])])],8,Bt),ke(e("div",jt,[(t(true),l(D,null,X(N.configFields,te=>(t(),l(D,{key:te.key},[n(N,te)?(t(),l("div",Kt,[e("label",Qt,g(te.label),1),e("div",Xt,[s(" Boolean 类型 "),te.type==="boolean"?(t(),ae(ne,{key:0,"model-value":T(N.id,te.key),"onUpdate:modelValue":se=>x(N.id,te.key,se),placeholder:"使用全局配置",clearable:""},{default:C(()=>[a(Y,{label:"是",value:true}),a(Y,{label:"否",value:false})]),_:1},8,["model-value","onUpdate:modelValue"])):te.type==="select"?(t(),l(D,{key:1},[s(" Select 类型 "),a(ne,{"model-value":T(N.id,te.key),"onUpdate:modelValue":se=>x(N.id,te.key,se),placeholder:`全局: ${N.config[te.key]??"未设置"}`,clearable:""},{default:C(()=>[(t(true),l(D,null,X(te.options,se=>(t(),ae(Y,{key:String(se.value),label:se.label,value:se.value},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onUpdate:modelValue","placeholder"])],64)):te.type==="number"?(t(),l(D,{key:2},[s(" Number 类型 "),a(J,{"model-value":T(N.id,te.key),"onUpdate:modelValue":se=>x(N.id,te.key,se),placeholder:`全局: ${N.config[te.key]??""}`},null,8,["model-value","onUpdate:modelValue","placeholder"])],64)):(t(),l(D,{key:3},[s(" Text/String 类型 (默认) "),a(le,{"model-value":T(N.id,te.key),"onUpdate:modelValue":se=>x(N.id,te.key,se),placeholder:`全局: ${N.config[te.key]??"未设置"}`,clearable:""},null,8,["model-value","onUpdate:modelValue","placeholder"])],64))]),te.description?(t(),l("div",Yt,g(te.description),1)):s("v-if",true)])):s("v-if",true)],64))),128))],512),[[be,b.value.has(N.id)]])],2))),128))])):(t(),l("div",Zt,[a(M,{name:"apps"}),u[22]||(u[22]=e("span",null,"暂无可配置的插件",-1))]))],512),[[be,S.value==="plugins"]])])])]),_:1},8,["modelValue","title"])}}}),ll=de(tl,[["__scopeId","data-v-74bfe0c7"]]),sl={key:0},al=ie({__name:"LoadingState",props:{text:{default:"加载中..."},icon:{default:"sync"},size:{default:"default"}},setup(o){const I=o,f=re(()=>`size-${I.size}`);return(w,r)=>{const y=E("k-icon");return t(),l("div",{class:ee(["loading-state",f.value])},[a(y,{name:o.icon,class:"loading-icon"},null,8,["name"]),o.text?(t(),l("span",sl,g(o.text),1)):s("v-if",true)],2)}}}),nl=de(al,[["__scopeId","data-v-99cf565d"]]),ol={class:"ml-view-container"},il={class:"ml-view-header"},dl={class:"ml-header-left"},rl={class:"ml-header-right"},cl={class:"ml-view-content"},ul={class:"ml-grid"},vl=["onClick"],ml={class:"card-header"},pl={class:"header-main"},gl={class:"channel-name"},fl={class:"header-meta"},_l={class:"connector-badge"},hl={key:0,class:"cost-badge"},yl={class:"card-body"},kl={key:0,class:"field-list"},bl={class:"field-label"},$l={class:"field-value"},wl={key:1,class:"tags-list"},Vl={class:"ml-table-container"},Cl={class:"ml-table"},xl=["onClick"],Il={class:"col-name"},Sl={class:"name-text"},Ul={class:"col-connector"},Tl={class:"connector-badge"},Dl={class:"col-tags"},Ol={class:"tags-wrapper"},zl={key:0,class:"mini-tag more"},Pl={class:"col-cost"},Fl={key:0,class:"cost-value"},Ll={class:"action-btns"},Al=ie({__name:"ChannelsView",setup(o){const I=["text2img","img2img","NSFW"],f=h(false),w=h("card"),r=h([]),y=h([]),S=h([]),O=h({}),b=h(false),v=h(null),k=h([]),z=re(()=>{const T=new Set;return r.value.forEach(x=>{(x.tags||[]).forEach(H=>T.add(H))}),Array.from(T).sort()}),$=re(()=>k.value.length===0?r.value:r.value.filter(T=>k.value.every(x=>(T.tags||[]).includes(x)))),c=T=>{const x=y.value.find(H=>H.id===T);return x?x.name:T},p=T=>{var H;const x=y.value.find(W=>W.id===T.connectorId);return(H=x==null?void 0:x.cardFields)!=null&&H.length?x.cardFields.map(W=>{const q=x.fields.find(n=>n.key===W.key);return{key:W.key,label:W.label||(q==null?void 0:q.label)||W.key,format:W.format||"text"}}):[]},m=(T,x)=>{var W,q,n,i,A;const H=x.configGroup;switch(x.source){case"channel":if(H){const Z=(q=(W=T.pluginOverrides)==null?void 0:W[H])==null?void 0:q[x.key];if(Z!==void 0)return Z}return T[x.key];case"connectorConfig":return(n=T.connectorConfig)==null?void 0:n[x.key];case"pluginOverride":return H?(A=(i=T.pluginOverrides)==null?void 0:i[H])==null?void 0:A[x.key]:void 0;default:return}},U=(T,x)=>{var n,i,A;const H=x.configGroup;if(!H)return x.suffix||"";const W=(i=(n=T.pluginOverrides)==null?void 0:n[H])==null?void 0:i.currencyLabel;if(W)return` ${W}${x.suffix||""}`;const q=(A=O.value[H])==null?void 0:A.currencyLabel;return q?` ${q}${x.suffix||""}`:` 积分${x.suffix||""}`},j=(T,x,H)=>{if(T==null||T==="")return"-";let W;switch(x){case"password-mask":W="••••••";break;case"boolean":W=T?"是":"否";break;case"number":W=String(T);break;case"size":W=String(T);break;case"currency":W=T===0?"免费":String(T);break;default:W=String(T)}return H?`${W} ${H}`:W},Q=async()=>{f.value=true;try{const[T,x,H]=await Promise.all([he.list(),$e.list(),we.cardFields()]);r.value=T,y.value=x,S.value=H.fields,O.value=H.globalConfigs}catch{G.error("加载数据失败")}finally{f.value=false}},F=()=>{v.value=null,b.value=true},V=T=>{v.value=T,b.value=true},_=()=>{Q()},K=async T=>{if(confirm(`确定要删除渠道 "${T.name}" 吗?`))try{await he.delete(T.id),G.success("删除成功"),Q()}catch{G.error("删除失败")}},ce=async T=>{try{await he.toggle(T.id,T.enabled)}catch{T.enabled=!T.enabled,G.error("操作失败")}},me=T=>{const x=JSON.parse(JSON.stringify(T));delete x.id,x.name=`${T.name} (副本)`,v.value=x,b.value=true};return pe(()=>{Q()}),(T,x)=>{const H=E("k-icon"),W=E("k-button"),q=E("el-switch");return t(),l("div",ol,[e("div",il,[e("div",dl,[a(W,{solid:"",type:"primary",onClick:F},{icon:C(()=>[a(H,{name:"add"})]),default:C(()=>[x[7]||(x[7]=R(" 新建渠道 ",-1))]),_:1}),a(Ue,{modelValue:k.value,"onUpdate:modelValue":x[0]||(x[0]=n=>k.value=n),"all-tags":z.value,"preset-tags":I},null,8,["modelValue","all-tags"])]),e("div",rl,[a(Me,{modelValue:w.value,"onUpdate:modelValue":x[1]||(x[1]=n=>w.value=n)},null,8,["modelValue"])])]),e("div",cl,[f.value?(t(),ae(nl,{key:0})):w.value==="card"?(t(),l(D,{key:1},[s(" 卡片视图 "),e("div",ul,[(t(true),l(D,null,X($.value,n=>(t(),l("div",{key:n.id},[e("div",{class:"ml-card ml-card--clickable",onClick:i=>V(n)},[e("div",ml,[e("div",pl,[e("div",gl,g(n.name),1),a(q,{modelValue:n.enabled,"onUpdate:modelValue":i=>n.enabled=i,size:"small",onChange:i=>ce(n),onClick:x[2]||(x[2]=ve(()=>{},["stop"]))},null,8,["modelValue","onUpdate:modelValue","onChange"])]),e("div",fl,[e("span",_l,[a(H,{name:"link"}),R(" "+g(c(n.connectorId)),1)]),s(" 中间件字段(如费用)显示在标题旁 "),(t(true),l(D,null,X(S.value,i=>(t(),l(D,{key:`mw-${i.key}`},[i.key==="cost"?(t(),l("span",hl,g(j(m(n,i),i.format,U(n,i))),1)):s("v-if",true)],64))),128))])]),e("div",yl,[s(" 配置字段列表 "),p(n).length?(t(),l("div",kl,[(t(true),l(D,null,X(p(n),i=>(t(),l("div",{key:i.key,class:"field-item"},[e("span",bl,g(i.label),1),e("span",$l,g(j(n.connectorConfig[i.key],i.format)),1)]))),128))])):s("v-if",true),s(" 标签 "),n.tags&&n.tags.length?(t(),l("div",wl,[(t(true),l(D,null,X(n.tags,i=>(t(),l("span",{key:i,class:"tag-pill"},g(i),1))),128))])):s("v-if",true)]),e("div",{class:"card-footer",onClick:x[3]||(x[3]=ve(()=>{},["stop"]))},[a(W,{size:"mini",class:"ml-btn-outline-primary",onClick:i=>me(n)},{icon:C(()=>[a(H,{name:"copy"})]),default:C(()=>[x[8]||(x[8]=R(" 复制 ",-1))]),_:1},8,["onClick"]),x[10]||(x[10]=e("div",{class:"spacer"},null,-1)),a(W,{size:"mini",class:"ml-btn-outline-danger",onClick:i=>K(n)},{icon:C(()=>[a(H,{name:"delete"})]),default:C(()=>[x[9]||(x[9]=R(" 删除 ",-1))]),_:1},8,["onClick"])])],8,vl)]))),128))])],2112)):(t(),l(D,{key:2},[s(" 列表视图 "),e("div",Vl,[e("table",Cl,[x[13]||(x[13]=e("thead",null,[e("tr",null,[e("th",{class:"col-name"},"名称"),e("th",{class:"col-connector"},"连接器"),e("th",{class:"col-tags"},"标签"),e("th",{class:"col-cost"},"费用"),e("th",{class:"col-status"},"状态"),e("th",{class:"col-actions"},"操作")])],-1)),e("tbody",null,[(t(true),l(D,null,X($.value,n=>(t(),l("tr",{key:n.id,onClick:i=>V(n)},[e("td",Il,[e("span",Sl,g(n.name),1)]),e("td",Ul,[e("span",Tl,g(c(n.connectorId)),1)]),e("td",Dl,[e("div",Ol,[(t(true),l(D,null,X((n.tags||[]).slice(0,2),i=>(t(),l("span",{key:i,class:"mini-tag"},g(i),1))),128)),n.tags&&n.tags.length>2?(t(),l("span",zl,"+"+g(n.tags.length-2),1)):s("v-if",true)])]),e("td",Pl,[(t(true),l(D,null,X(S.value,i=>(t(),l(D,{key:`mw-${i.key}`},[i.key==="cost"?(t(),l("span",Fl,g(j(m(n,i),i.format,U(n,i))),1)):s("v-if",true)],64))),128))]),e("td",{class:"col-status",onClick:x[4]||(x[4]=ve(()=>{},["stop"]))},[a(q,{modelValue:n.enabled,"onUpdate:modelValue":i=>n.enabled=i,size:"small",onChange:i=>ce(n)},null,8,["modelValue","onUpdate:modelValue","onChange"])]),e("td",{class:"col-actions",onClick:x[5]||(x[5]=ve(()=>{},["stop"]))},[e("div",Ll,[a(W,{size:"mini",class:"ml-btn-outline-primary",onClick:i=>me(n)},{icon:C(()=>[a(H,{name:"copy"})]),default:C(()=>[x[11]||(x[11]=R(" 复制 ",-1))]),_:1},8,["onClick"]),a(W,{size:"mini",class:"ml-btn-outline-danger",onClick:i=>K(n)},{icon:C(()=>[a(H,{name:"delete"})]),default:C(()=>[x[12]||(x[12]=R(" 删除 ",-1))]),_:1},8,["onClick"])])])],8,xl))),128))])])])],2112))]),s(" 编辑/创建对话框 "),a(ll,{modelValue:b.value,"onUpdate:modelValue":x[6]||(x[6]=n=>b.value=n),channel:v.value,onSaved:_},null,8,["modelValue","channel"])])}}}),El=de(Al,[["__scopeId","data-v-67a4b49d"]]),Ml={class:"json-editor"},Rl={key:0,class:"error-msg"},Nl=ie({__name:"JsonEditor",props:{modelValue:{},rows:{}},emits:["update:modelValue"],setup(o,{emit:I}){const f=o,w=I,r=h(""),y=h("");ge(()=>f.modelValue,O=>{try{r.value=JSON.stringify(O,null,2)}catch{r.value=""}},{immediate:true});const S=()=>{try{const O=JSON.parse(r.value);y.value="",w("update:modelValue",O)}catch{y.value="Invalid JSON format"}};return(O,b)=>{const v=E("el-input");return t(),l("div",Ml,[a(v,{modelValue:r.value,"onUpdate:modelValue":b[0]||(b[0]=k=>r.value=k),type:"textarea",rows:o.rows,class:"code-input",onBlur:S},null,8,["modelValue","rows"]),y.value?(t(),l("div",Rl,g(y.value),1)):s("v-if",true)])}}}),ql=de(Nl,[["__scopeId","data-v-4d47b7db"]]),Bl={class:"image-upload"},Hl={key:0,class:"image-list"},Gl={class:"image-preview"},Jl=["src","alt"],Wl={class:"image-overlay"},jl={class:"image-name"},Kl={class:"upload-content"},Ql={key:1,class:"upload-loading"},Xl=ie({__name:"ImageUpload",props:{modelValue:{},maxCount:{}},emits:["update:modelValue"],setup(o,{emit:I}){const f=o,w=I,r=h(),y=h(false),S=h([]),O=async()=>{var m;const p=[];for(const U of f.modelValue)U&&p.push({url:U,filename:((m=U.split("/").pop())==null?void 0:m.split("?")[0])||"image",mime:"image/png",previewUrl:U});S.value=p};ge(()=>f.modelValue,()=>{O()},{immediate:true});const b=()=>{var p;(p=r.value)==null||p.click()},v=async p=>{const m=p.target;!m.files||m.files.length===0||(await z(Array.from(m.files)),m.value="")},k=async p=>{var U;const m=(U=p.dataTransfer)==null?void 0:U.files;!m||m.length===0||await z(Array.from(m).filter(j=>j.type.startsWith("image/")))},z=async p=>{if(p.length===0)return;const m=f.maxCount||10;S.value.length+p.length>m&&(G.warning(`最多上传 ${m} 张图片`),p=p.slice(0,m-S.value.length)),y.value=true;try{for(const U of p){const j=await $(U),Q=await Qe.upload(j,U.type,U.name);if(!Q.url){G.error("缓存服务未配置 selfUrl,无法获取图片 URL");continue}S.value.push({url:Q.url,filename:Q.filename,mime:Q.mime,previewUrl:Q.url})}w("update:modelValue",S.value.map(U=>U.url))}catch(U){G.error("上传失败"),console.error(U)}finally{y.value=false}},$=p=>new Promise((m,U)=>{const j=new FileReader;j.onload=()=>{const F=j.result.split(",")[1];m(F)},j.onerror=U,j.readAsDataURL(p)}),c=p=>{S.value.splice(p,1),w("update:modelValue",S.value.map(m=>m.url))};return pe(()=>{O()}),(p,m)=>{const U=E("k-icon"),j=E("k-button");return t(),l("div",Bl,[s(" 已上传的图片列表 "),S.value.length>0?(t(),l("div",Hl,[(t(true),l(D,null,X(S.value,(Q,F)=>(t(),l("div",{key:Q.url||F,class:"image-item"},[e("div",Gl,[e("img",{src:Q.previewUrl,alt:Q.filename},null,8,Jl),e("div",Wl,[a(j,{size:"mini",class:"remove-btn",onClick:V=>c(F)},{icon:C(()=>[a(U,{name:"delete"})]),_:1},8,["onClick"])])]),e("div",jl,g(Q.filename),1)]))),128))])):s("v-if",true),s(" 上传按钮 "),e("div",{class:"upload-area",onClick:b,onDragover:m[0]||(m[0]=ve(()=>{},["prevent"])),onDrop:ve(k,["prevent"])},[e("input",{ref_key:"fileInput",ref:r,type:"file",accept:"image/*",multiple:"",style:{display:"none"},onChange:v},null,544),e("div",Kl,[a(U,{name:"add",class:"upload-icon"}),m[1]||(m[1]=e("span",{class:"upload-text"},"点击或拖拽上传图片",-1))])],32),s(" 加载状态 "),y.value?(t(),l("div",Ql,[a(U,{name:"sync",class:"loading-icon"}),m[2]||(m[2]=R(" 上传中... ",-1))])):s("v-if",true)])}}}),Pe=de(Xl,[["__scopeId","data-v-47f2485e"]]),Yl={class:"ml-view-container"},Zl={class:"ml-view-header"},es={class:"ml-header-left"},ts={class:"ml-header-right"},ls={class:"ml-view-content"},ss={key:0,class:"loading-state"},as={class:"ml-masonry"},ns=["onClick"],os={key:0,class:"card-thumbnail"},is=["src","alt"],ds={class:"thumbnail-overlay"},rs={key:0,class:"ref-count"},cs={key:1,class:"card-thumbnail placeholder"},us={class:"card-content"},vs={class:"card-title"},ms={key:0,class:"card-tags"},ps={key:0,class:"mini-tag more"},gs={class:"ml-table-container"},fs={class:"ml-table"},_s=["onClick"],hs={class:"col-thumb"},ys={class:"thumb-wrapper"},ks=["src","alt"],bs={key:1,class:"thumb-placeholder"},$s={class:"col-name"},ws={class:"name-text"},Vs={class:"col-template"},Cs={class:"template-preview"},xs={class:"col-refs"},Is={key:0,class:"ref-badge"},Ss={key:1,class:"no-data"},Us={class:"col-source"},Ts={class:"action-btns"},Ds={class:"dialog-footer"},Os=ie({__name:"PresetsView",setup(o){const I=["本地","远程","text2img","img2img","NSFW"],f=h(false),w=h([]),r=h(false),y=h(false),S=h([]),O=h("card"),b=re(()=>{const V=new Set;return w.value.forEach(_=>{(_.tags||[]).forEach(K=>V.add(K))}),Array.from(V).sort()}),v=h({name:"",promptTemplate:"",referenceImages:[],tags:[],parameterOverrides:{},enabled:true,source:"user"}),k=h([]);ge(()=>v.value.thumbnail,V=>{k.value=V?[V]:[]},{immediate:true}),ge(k,V=>{v.value.thumbnail=V.length>0?V[0]:""});const z=re(()=>S.value.length===0?w.value:w.value.filter(V=>S.value.every(_=>_==="本地"?V.source==="user":_==="远程"?V.source==="api":(V.tags||[]).includes(_)))),$=async()=>{f.value=true;try{w.value=await _e.list()}catch{G.error("加载数据失败")}finally{f.value=false}},c=()=>{y.value=false,v.value={name:"",promptTemplate:"",referenceImages:[],tags:[],parameterOverrides:{},enabled:true,source:"user"},r.value=true},p=V=>{y.value=true,v.value=JSON.parse(JSON.stringify(V)),r.value=true},m=V=>{y.value=false;const _=JSON.parse(JSON.stringify(V));delete _.id,_.name=`${V.name} (副本)`,_.source="user",v.value=_,r.value=true},U=async V=>{try{await _e.toggle(V.id,V.enabled)}catch{V.enabled=!V.enabled,G.error("操作失败")}},j=(V,_=50)=>{if(!V)return"-";const K=V.replace(/\s+/g," ").trim();return K.length<=_?K:K.slice(0,_)+"..."},Q=async()=>{if(!v.value.name||!v.value.promptTemplate){G.warning("请填写必要信息");return}try{y.value&&v.value.id?(await _e.update(v.value.id,v.value),G.success("更新成功")):(await _e.create(v.value),G.success("创建成功")),r.value=false,$()}catch{G.error("操作失败")}},F=async V=>{if(confirm(`确定要删除预设 "${V.name}" 吗?`))try{await _e.delete(V.id),G.success("删除成功"),$()}catch{G.error("删除失败")}};return pe(()=>{$()}),(V,_)=>{const K=E("k-icon"),ce=E("k-button"),me=E("el-switch"),T=E("el-input"),x=E("el-form-item"),H=E("el-divider"),W=E("el-form"),q=E("el-dialog");return t(),l("div",Yl,[e("div",Zl,[e("div",es,[a(ce,{solid:"",type:"primary",onClick:c},{icon:C(()=>[a(K,{name:"add"})]),default:C(()=>[_[14]||(_[14]=R(" 新建预设 ",-1))]),_:1}),a(Ue,{modelValue:S.value,"onUpdate:modelValue":_[0]||(_[0]=n=>S.value=n),"all-tags":b.value,"preset-tags":I},null,8,["modelValue","all-tags"])]),e("div",ts,[a(Me,{modelValue:O.value,"onUpdate:modelValue":_[1]||(_[1]=n=>O.value=n)},null,8,["modelValue"])])]),e("div",ls,[f.value?(t(),l("div",ss,[a(K,{name:"sync",class:"ml-spin"}),_[15]||(_[15]=R(" 加载中... ",-1))])):O.value==="card"?(t(),l(D,{key:1},[s(" 卡片视图 (瀑布流) "),e("div",as,[(t(true),l(D,null,X(z.value,n=>{var i,A;return t(),l("div",{key:n.id,class:"ml-masonry-item"},[e("div",{class:"preset-card",onClick:Z=>p(n)},[s(" 缩略图 "),n.thumbnail?(t(),l("div",os,[e("img",{src:n.thumbnail,alt:n.name,loading:"lazy"},null,8,is),e("div",ds,[(i=n.referenceImages)!=null&&i.length?(t(),l("span",rs,[a(K,{name:"image"}),R(" "+g(n.referenceImages.length),1)])):s("v-if",true)])])):(t(),l("div",cs,[a(K,{name:"image",class:"placeholder-icon"})])),s(" 内容 "),e("div",us,[e("div",vs,g(n.name),1),(A=n.tags)!=null&&A.length?(t(),l("div",ms,[(t(true),l(D,null,X(n.tags.slice(0,4),Z=>(t(),l("span",{key:Z,class:"mini-tag"},g(Z),1))),128)),n.tags.length>4?(t(),l("span",ps,"+"+g(n.tags.length-4),1)):s("v-if",true)])):s("v-if",true)]),s(" 操作按钮 "),e("div",{class:"card-actions",onClick:_[2]||(_[2]=ve(()=>{},["stop"]))},[a(me,{modelValue:n.enabled,"onUpdate:modelValue":Z=>n.enabled=Z,size:"small",onChange:Z=>U(n)},null,8,["modelValue","onUpdate:modelValue","onChange"]),a(ce,{size:"mini",class:"ml-btn-outline-primary",onClick:Z=>m(n)},{icon:C(()=>[a(K,{name:"copy"})]),default:C(()=>[_[16]||(_[16]=R(" 复制 ",-1))]),_:1},8,["onClick"]),n.source==="user"?(t(),ae(ce,{key:0,size:"mini",class:"ml-btn-outline-danger",onClick:Z=>F(n)},{icon:C(()=>[a(K,{name:"delete"})]),default:C(()=>[_[17]||(_[17]=R(" 删除 ",-1))]),_:1},8,["onClick"])):s("v-if",true)]),s(" 来源标记 "),e("div",{class:ee(["source-indicator",n.source])},g(n.source==="api"?"远程":"本地"),3)],8,ns)])}),128))])],2112)):(t(),l(D,{key:2},[s(" 列表视图 "),e("div",gs,[e("table",fs,[_[20]||(_[20]=e("thead",null,[e("tr",null,[e("th",{class:"col-thumb"},"缩略图"),e("th",{class:"col-name"},"名称"),e("th",{class:"col-template"},"Prompt 模板"),e("th",{class:"col-refs"},"参考图"),e("th",{class:"col-source"},"来源"),e("th",{class:"col-status"},"状态"),e("th",{class:"col-actions"},"操作")])],-1)),e("tbody",null,[(t(true),l(D,null,X(z.value,n=>{var i;return t(),l("tr",{key:n.id,onClick:A=>p(n)},[e("td",hs,[e("div",ys,[n.thumbnail?(t(),l("img",{key:0,src:n.thumbnail,alt:n.name},null,8,ks)):(t(),l("div",bs,[a(K,{name:"image"})]))])]),e("td",$s,[e("span",ws,g(n.name),1)]),e("td",Vs,[e("span",Cs,g(j(n.promptTemplate)),1)]),e("td",xs,[(i=n.referenceImages)!=null&&i.length?(t(),l("span",Is,[a(K,{name:"image"}),R(" "+g(n.referenceImages.length),1)])):(t(),l("span",Ss,"-"))]),e("td",Us,[e("span",{class:ee(["source-badge",n.source])},g(n.source==="api"?"远程":"本地"),3)]),e("td",{class:"col-status",onClick:_[3]||(_[3]=ve(()=>{},["stop"]))},[a(me,{modelValue:n.enabled,"onUpdate:modelValue":A=>n.enabled=A,size:"small",onChange:A=>U(n)},null,8,["modelValue","onUpdate:modelValue","onChange"])]),e("td",{class:"col-actions",onClick:_[4]||(_[4]=ve(()=>{},["stop"]))},[e("div",Ts,[a(ce,{size:"mini",class:"ml-btn-outline-primary",onClick:A=>m(n)},{icon:C(()=>[a(K,{name:"copy"})]),default:C(()=>[_[18]||(_[18]=R(" 复制 ",-1))]),_:1},8,["onClick"]),n.source==="user"?(t(),ae(ce,{key:0,size:"mini",class:"ml-btn-outline-danger",onClick:A=>F(n)},{icon:C(()=>[a(K,{name:"delete"})]),default:C(()=>[_[19]||(_[19]=R(" 删除 ",-1))]),_:1},8,["onClick"])):s("v-if",true)])])],8,_s)}),128))])])])],2112))]),s(" 编辑/创建对话框 "),a(q,{modelValue:r.value,"onUpdate:modelValue":_[13]||(_[13]=n=>r.value=n),title:y.value?"编辑预设":"创建预设",width:"600px","close-on-click-modal":false},{footer:C(()=>[e("span",Ds,[a(ce,{onClick:_[12]||(_[12]=n=>r.value=false)},{default:C(()=>[..._[27]||(_[27]=[R("取消",-1)])]),_:1}),a(ce,{type:"primary",onClick:Q},{default:C(()=>[..._[28]||(_[28]=[R("保存",-1)])]),_:1})])]),default:C(()=>[r.value?(t(),ae(W,{key:0,ref:"formRef",model:v.value,"label-width":"100px"},{default:C(()=>[a(x,{label:"名称",required:""},{default:C(()=>[a(T,{modelValue:v.value.name,"onUpdate:modelValue":_[5]||(_[5]=n=>v.value.name=n),disabled:y.value&&v.value.source==="api",placeholder:"如 二次元少女"},null,8,["modelValue","disabled"]),_[21]||(_[21]=e("div",{class:"form-tip"},"用于指令调用和展示,冲突时会自动添加后缀",-1))]),_:1}),a(x,{label:"Prompt 模板",required:""},{default:C(()=>[a(T,{modelValue:v.value.promptTemplate,"onUpdate:modelValue":_[6]||(_[6]=n=>v.value.promptTemplate=n),type:"textarea",rows:4,placeholder:"输入提示词模板,支持变量如 {prompt}"},null,8,["modelValue"]),_[22]||(_[22]=e("div",{class:"form-tip"},"默认将用户输入附加在最后,也可使用 {prompt} 指定位置",-1))]),_:1}),v.value.source==="user"?(t(),ae(x,{key:0,label:"缩略图"},{default:C(()=>[a(Pe,{modelValue:k.value,"onUpdate:modelValue":_[7]||(_[7]=n=>k.value=n),"max-count":1},null,8,["modelValue"]),_[23]||(_[23]=e("div",{class:"form-tip"},"用于在卡片视图中展示预设的预览图",-1))]),_:1})):s("v-if",true),a(x,{label:"参考图"},{default:C(()=>[a(Pe,{modelValue:v.value.referenceImages,"onUpdate:modelValue":_[8]||(_[8]=n=>v.value.referenceImages=n),"max-count":5},null,8,["modelValue"]),_[24]||(_[24]=e("div",{class:"form-tip"},"生成时会自动附加这些参考图片",-1))]),_:1}),a(H,{"content-position":"left"},{default:C(()=>[..._[25]||(_[25]=[R("高级设置",-1)])]),_:1}),a(x,{label:"标签"},{default:C(()=>[a(Re,{modelValue:v.value.tags,"onUpdate:modelValue":_[9]||(_[9]=n=>v.value.tags=n),placeholder:"输入标签..."},null,8,["modelValue"]),_[26]||(_[26]=e("div",{class:"form-tip"},"与渠道标签匹配时会自动关联",-1))]),_:1}),a(x,{label:"参数覆盖"},{default:C(()=>[a(ql,{modelValue:v.value.parameterOverrides,"onUpdate:modelValue":_[10]||(_[10]=n=>v.value.parameterOverrides=n),rows:3},null,8,["modelValue"])]),_:1}),a(x,{label:"启用状态"},{default:C(()=>[a(me,{modelValue:v.value.enabled,"onUpdate:modelValue":_[11]||(_[11]=n=>v.value.enabled=n)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])):s("v-if",true)]),_:1},8,["modelValue","title"])])}}}),zs=de(Os,[["__scopeId","data-v-8eaa50b4"]]),Ps=ie({__name:"StatusBadge",props:{status:{}},setup(o){const I=o,f=re(()=>{switch(I.status){case"pending":return"等待中";case"processing":return"处理中";case"success":return"成功";case"failed":return"失败";default:return I.status}});return(w,r)=>(t(),l("span",{class:ee(["status-badge",o.status])},g(f.value),3))}}),Fe=de(Ps,[["__scopeId","data-v-0bc21896"]]),Fs={class:"lightbox-container"},Ls={class:"lightbox-content"},As=["src"],Es={key:2,class:"image-counter"},Ms={key:0,class:"lightbox-sidebar"},Rs={class:"sidebar-header"},Ns={class:"sidebar-body"},qs={class:"info-block"},Bs={class:"block-header"},Hs={key:0,class:"info-block"},Gs={class:"info-value"},Js={key:1,class:"info-block"},Ws={class:"info-value"},js={class:"sidebar-footer"},Ks=ie({__name:"ImageLightbox",props:{visible:{type:Boolean},images:{},initialIndex:{default:0},prompt:{},createdAt:{},duration:{},showSidebar:{type:Boolean,default:true}},emits:["update:visible","close"],setup(o,{emit:I}){const f=o,w=I,r=h(f.initialIndex),y=re(()=>f.images[r.value]||"");ge(()=>f.visible,m=>{m?(r.value=f.initialIndex,document.body.style.overflow="hidden"):document.body.style.overflow=""}),ge(()=>f.initialIndex,m=>{r.value=m});const S=()=>{w("update:visible",false),w("close")},O=()=>{r.value=(r.value-1+f.images.length)%f.images.length},b=()=>{r.value=(r.value+1)%f.images.length},v=()=>{f.prompt&&(navigator.clipboard.writeText(f.prompt),G.success("已复制提示词"))},k=()=>{window.open(y.value,"_blank")},z=()=>{const m=document.createElement("a");m.href=y.value,m.download=`image-${Date.now()}.png`,m.click()},$=m=>(typeof m=="string"?new Date(m):m).toLocaleString(),c=m=>m<1e3?`${m}ms`:`${(m/1e3).toFixed(1)}s`,p=m=>{f.visible&&(m.key==="Escape"?S():m.key==="ArrowLeft"?O():m.key==="ArrowRight"&&b())};return pe(()=>{window.addEventListener("keydown",p)}),Ve(()=>{window.removeEventListener("keydown",p),document.body.style.overflow=""}),(m,U)=>{const j=E("k-icon");return t(),ae(Be,{to:"body"},[a(Ae,{name:"lightbox-fade"},{default:C(()=>[o.visible?(t(),l("div",{key:0,class:"lightbox-overlay",onClick:ve(S,["self"])},[e("div",Fs,[e("div",Ls,[s(" 左侧图片区域 "),e("div",{class:"lightbox-image-area",onClick:ve(S,["self"])},[s(" 关闭按钮 "),e("button",{class:"close-btn",onClick:S,title:"关闭 (Esc)"},[a(j,{name:"times"})]),s(" 多图时的导航 "),o.images.length>1?(t(),l("button",{key:0,class:"nav-btn prev",onClick:ve(O,["stop"]),title:"上一张"},[a(j,{name:"chevron-left"})])):s("v-if",true),e("img",{src:y.value,class:"lightbox-image",alt:"Preview"},null,8,As),o.images.length>1?(t(),l("button",{key:1,class:"nav-btn next",onClick:ve(b,["stop"]),title:"下一张"},[a(j,{name:"chevron-right"})])):s("v-if",true),s(" 图片计数器 "),o.images.length>1?(t(),l("div",Es,g(r.value+1)+" / "+g(o.images.length),1)):s("v-if",true)]),s(" 右侧信息栏 "),o.showSidebar?(t(),l("div",Ms,[e("div",Rs,[U[0]||(U[0]=e("div",{class:"info-title"},"图片详情",-1)),e("button",{class:"header-close-btn",onClick:S,title:"关闭"},[a(j,{name:"times"})])]),e("div",Ns,[s(" 提示词 "),e("div",qs,[e("div",Bs,[U[1]||(U[1]=e("span",null,"提示词",-1)),o.prompt?(t(),l("button",{key:0,class:"copy-btn",onClick:v}," 复制 ")):s("v-if",true)]),e("div",{class:ee(["prompt-content",{empty:!o.prompt}])},g(o.prompt||"无提示词"),3)]),s(" 创建时间 "),o.createdAt?(t(),l("div",Hs,[U[2]||(U[2]=e("div",{class:"block-header"},[e("span",null,"创建时间")],-1)),e("div",Gs,g($(o.createdAt)),1)])):s("v-if",true),s(" 生成耗时 "),o.duration?(t(),l("div",Js,[U[3]||(U[3]=e("div",{class:"block-header"},[e("span",null,"生成耗时")],-1)),e("div",Ws,g(c(o.duration)),1)])):s("v-if",true)]),e("div",js,[e("button",{class:"action-btn primary",onClick:k},[a(j,{name:"external-link"}),U[4]||(U[4]=R(" 查看原图 ",-1))]),e("button",{class:"action-btn secondary",onClick:z},[a(j,{name:"download"}),U[5]||(U[5]=R(" 下载 ",-1))])])])):s("v-if",true)])])])):s("v-if",true)]),_:1})])}}}),Te=de(Ks,[["__scopeId","data-v-bd68872f"]]),Qs={class:"ml-view-container"},Xs={class:"ml-view-header"},Ys={class:"ml-header-left"},Zs={class:"view-mode-switch"},ea={class:"ml-header-right"},ta={key:0,class:"stats-grid"},la={class:"stat-card"},sa={class:"stat-icon total"},aa={class:"stat-content"},na={class:"stat-value"},oa={class:"stat-card"},ia={class:"stat-icon success"},da={class:"stat-content"},ra={class:"stat-value success"},ca={class:"stat-card"},ua={class:"stat-icon failed"},va={class:"stat-content"},ma={class:"stat-value failed"},pa={class:"stat-card"},ga={class:"stat-icon processing"},fa={class:"stat-content"},_a={class:"stat-value pending"},ha={class:"stat-card"},ya={class:"stat-icon rate"},ka={class:"stat-content"},ba={class:"stat-value"},$a={class:"filter-bar"},wa={class:"filter-group"},Va={key:0,class:"pagination-info"},Ca={class:"ml-view-content"},xa={class:"mono-text"},Ia=["title"],Sa={key:0},Ua={key:1,class:"text-muted"},Ta={key:0},Da={key:1},Oa={class:"time-text"},za={key:0,class:"empty-gallery"},Pa={key:1,class:"ml-masonry"},Fa=["onClick"],La={class:"gallery-image-wrapper"},Aa=["src"],Ea=["src"],Ma={class:"gallery-overlay"},Ra={class:"gallery-info"},Na=["title"],qa={class:"gallery-meta"},Ba={class:"gallery-time"},Ha={class:"pagination"},Ga={key:0,class:"task-detail"},Ja={class:"detail-section"},Wa={class:"detail-grid"},ja={class:"detail-item"},Ka={class:"detail-item"},Qa={class:"detail-item"},Xa={class:"detail-item"},Ya={class:"detail-item"},Za={class:"detail-item"},en={class:"detail-section"},tn={class:"code-block"},ln={key:0,class:"detail-section"},sn={class:"output-gallery"},an=["src"],nn=["src"],on=["src"],dn={key:3,class:"text-asset"},rn=["href"],cn={key:1,class:"detail-section"},un={class:"code-block error"},vn={class:"cleanup-form"},mn={class:"dialog-footer"},pn=ie({__name:"TasksView",setup(o){const I=h("list"),f=h(false),w=h([]),r=h(null),y=h(0),S=h(1),O=h(20),b=h({status:"",userId:void 0,channelId:void 0}),v=h(false),k=h(null);h(false);const z=h(null),$=h(false),c=h([]),p=h(0),m=h(""),U=h(),j=h(),Q=h(false),F=h(30),V=n=>{var i,A,Z;return((A=(i=n.middlewareLogs)==null?void 0:i.preset)==null?void 0:A.transformedPrompt)||((Z=n.requestSnapshot)==null?void 0:Z.prompt)||""},_=re(()=>{var i,A,Z;const n=[];for(const B of w.value){if(B.status!=="success"||!B.responseSnapshot)continue;const d=((A=(i=B.middlewareLogs)==null?void 0:i.preset)==null?void 0:A.transformedPrompt)||((Z=B.requestSnapshot)==null?void 0:Z.prompt)||"";B.responseSnapshot.forEach((u,M)=>{(u.kind==="image"||u.kind==="video")&&u.url&&n.push({id:B.id,assetIndex:M,kind:u.kind,url:u.url,prompt:d,channelId:B.channelId,createdAt:B.startTime})})}return n}),K=async()=>{f.value=true;try{const n={limit:O.value,offset:(S.value-1)*O.value};b.value.status&&(n.status=b.value.status),b.value.userId&&(n.userId=Number(b.value.userId)),b.value.channelId&&(n.channelId=Number(b.value.channelId));const[i,A]=await Promise.all([ye.list(n),ye.stats()]);w.value=i.items,y.value=i.total,r.value=A}catch(n){console.error("Failed to fetch tasks:",n),G.error("加载数据失败")}finally{f.value=false}},ce=n=>{k.value=n,v.value=true},me=n=>{c.value=[n.url],p.value=0,m.value=n.prompt,U.value=n.createdAt,j.value=void 0,$.value=true,z.value=n},T=()=>{Q.value=true},x=async()=>{try{const n=await ye.cleanup(F.value);G.success(`成功清理 ${n.deleted} 条任务`),Q.value=false,K()}catch{G.error("清理失败")}},H=n=>new Date(n).toLocaleString(),W=n=>n<1e3?`${n}ms`:`${(n/1e3).toFixed(2)}s`,q=n=>{const i=n.target;i.style.display="none"};return pe(()=>{K()}),(n,i)=>{const A=E("k-icon"),Z=E("k-button"),B=E("el-option"),d=E("el-select"),u=E("el-input"),M=E("el-table-column"),le=E("el-table"),Y=E("el-pagination"),ne=E("el-dialog"),ue=E("el-input-number");return t(),l("div",Qs,[s(" 固定头部区域 "),e("div",Xs,[e("div",Ys,[s(" 视图切换 "),e("div",Zs,[e("button",{class:ee(["mode-btn",{active:I.value==="list"}]),onClick:i[0]||(i[0]=P=>I.value="list"),title:"列表视图"},[...i[14]||(i[14]=[e("svg",{viewBox:"0 0 24 24",width:"16",height:"16",fill:"currentColor"},[e("rect",{x:"3",y:"4",width:"18",height:"3",rx:"1"}),e("rect",{x:"3",y:"10.5",width:"18",height:"3",rx:"1"}),e("rect",{x:"3",y:"17",width:"18",height:"3",rx:"1"})],-1)])],2),e("button",{class:ee(["mode-btn",{active:I.value==="gallery"}]),onClick:i[1]||(i[1]=P=>I.value="gallery"),title:"画廊视图"},[...i[15]||(i[15]=[Se('<svg viewBox="0 0 24 24" width="16" height="16" fill="currentColor" data-v-898a70bb><rect x="3" y="3" width="8" height="8" rx="1" data-v-898a70bb></rect><rect x="13" y="3" width="8" height="8" rx="1" data-v-898a70bb></rect><rect x="3" y="13" width="8" height="8" rx="1" data-v-898a70bb></rect><rect x="13" y="13" width="8" height="8" rx="1" data-v-898a70bb></rect></svg>',1)])],2)])]),e("div",ea,[a(Z,{onClick:T},{icon:C(()=>[a(A,{name:"delete"})]),default:C(()=>[i[16]||(i[16]=R(" 清理记录 ",-1))]),_:1}),a(Z,{onClick:K},{icon:C(()=>[a(A,{name:"refresh"})]),default:C(()=>[i[17]||(i[17]=R(" 刷新 ",-1))]),_:1})])]),s(" 统计信息 (固定) "),r.value?(t(),l("div",ta,[e("div",la,[e("div",sa,[a(A,{name:"clipboard-list"})]),e("div",aa,[e("div",na,g(r.value.total),1),i[18]||(i[18]=e("div",{class:"stat-label"},"总任务数",-1))])]),e("div",oa,[e("div",ia,[a(A,{name:"check-circle"})]),e("div",da,[e("div",ra,g(r.value.byStatus.success),1),i[19]||(i[19]=e("div",{class:"stat-label"},"成功",-1))])]),e("div",ca,[e("div",ua,[a(A,{name:"exclamation-triangle"})]),e("div",va,[e("div",ma,g(r.value.byStatus.failed),1),i[20]||(i[20]=e("div",{class:"stat-label"},"失败",-1))])]),e("div",pa,[e("div",ga,[a(A,{name:"clock"})]),e("div",fa,[e("div",_a,g(r.value.byStatus.pending+r.value.byStatus.processing),1),i[21]||(i[21]=e("div",{class:"stat-label"},"进行中",-1))])]),e("div",ha,[e("div",ya,[a(A,{name:"chart-pie"})]),e("div",ka,[e("div",ba,g(r.value.successRate),1),i[22]||(i[22]=e("div",{class:"stat-label"},"成功率",-1))])])])):s("v-if",true),s(" 筛选栏 (固定) "),e("div",$a,[e("div",wa,[a(d,{modelValue:b.value.status,"onUpdate:modelValue":i[2]||(i[2]=P=>b.value.status=P),placeholder:"所有状态",clearable:"",onChange:K,style:{width:"140px"}},{default:C(()=>[a(B,{label:"等待中",value:"pending"}),a(B,{label:"处理中",value:"processing"}),a(B,{label:"成功",value:"success"}),a(B,{label:"失败",value:"failed"})]),_:1},8,["modelValue"]),a(u,{modelValue:b.value.channelId,"onUpdate:modelValue":i[3]||(i[3]=P=>b.value.channelId=P),placeholder:"渠道 ID",clearable:"",onChange:K,style:{width:"140px"}},null,8,["modelValue"]),a(u,{modelValue:b.value.userId,"onUpdate:modelValue":i[4]||(i[4]=P=>b.value.userId=P),placeholder:"用户 ID",clearable:"",onChange:K,style:{width:"140px"}},null,8,["modelValue"])]),y.value>0?(t(),l("div",Va," 共 "+g(y.value)+" 条记录 ",1)):s("v-if",true)]),s(" 可滚动的内容区域 "),e("div",Ca,[s(" 列表视图 "),I.value==="list"?(t(),ae(le,{key:0,data:w.value,style:{width:"100%"},class:"task-table",onRowClick:ce},{default:C(()=>[a(M,{prop:"id",label:"ID",width:"80",align:"center"},{default:C(({row:P})=>[e("span",xa,"#"+g(P.id),1)]),_:1}),a(M,{label:"状态",width:"100",align:"center"},{default:C(({row:P})=>[a(Fe,{status:P.status},null,8,["status"])]),_:1}),a(M,{prop:"channelId",label:"渠道",width:"100",align:"center"}),a(M,{label:"提示词","min-width":"300"},{default:C(({row:P})=>[e("div",{class:"prompt-cell",title:V(P)},g(V(P)),9,Ia)]),_:1}),a(M,{label:"输出",width:"120",align:"center"},{default:C(({row:P})=>[P.responseSnapshot&&P.responseSnapshot.length?(t(),l("span",Sa,g(P.responseSnapshot.length)+" 个资产 ",1)):(t(),l("span",Ua,"-"))]),_:1}),a(M,{label:"耗时",width:"100",align:"right"},{default:C(({row:P})=>[P.duration?(t(),l("span",Ta,g(W(P.duration)),1)):(t(),l("span",Da,"-"))]),_:1}),a(M,{label:"时间",width:"180",align:"right"},{default:C(({row:P})=>[e("span",Oa,g(H(P.startTime)),1)]),_:1})]),_:1},8,["data"])):I.value==="gallery"?(t(),l(D,{key:1},[s(" 画廊视图 (瀑布流) "),_.value.length===0?(t(),l("div",za,[a(A,{name:"image",class:"empty-icon"}),i[23]||(i[23]=e("p",null,"暂无成功生成的图片",-1))])):(t(),l("div",Pa,[(t(true),l(D,null,X(_.value,P=>(t(),l("div",{key:P.id+"-"+P.assetIndex,class:"ml-masonry-item"},[e("div",{class:"gallery-item",onClick:J=>me(P)},[e("div",La,[P.kind==="image"?(t(),l("img",{key:0,src:P.url,class:"gallery-image",loading:"lazy",onError:q},null,40,Aa)):P.kind==="video"?(t(),l("video",{key:1,src:P.url,class:"gallery-video",muted:"",loop:"",onMouseenter:i[5]||(i[5]=J=>J.target.play()),onMouseleave:i[6]||(i[6]=J=>J.target.pause())},null,40,Ea)):s("v-if",true),e("div",Ma,[a(A,{name:"zoom-in",class:"zoom-icon"})])]),e("div",Ra,[e("div",{class:"gallery-prompt",title:P.prompt},g(P.prompt),9,Na),e("div",qa,[e("span",Ba,g(H(P.createdAt)),1)])])],8,Fa)]))),128))]))],64)):s("v-if",true)]),s(" 分页 (固定在底部) "),e("div",Ha,[a(Y,{"current-page":S.value,"onUpdate:currentPage":i[7]||(i[7]=P=>S.value=P),"page-size":O.value,"onUpdate:pageSize":i[8]||(i[8]=P=>O.value=P),total:y.value,"page-sizes":[20,50,100],layout:"total, sizes, prev, pager, next",onCurrentChange:K,onSizeChange:K},null,8,["current-page","page-size","total"])]),s(" 任务详情对话框 "),a(ne,{modelValue:v.value,"onUpdate:modelValue":i[9]||(i[9]=P=>v.value=P),title:"任务详情",width:"800px"},{default:C(()=>{var P,J;return[k.value?(t(),l("div",Ga,[e("div",Ja,[i[31]||(i[31]=e("h3",null,"基本信息",-1)),e("div",Wa,[e("div",ja,[i[24]||(i[24]=e("span",{class:"label"},"ID:",-1)),R(" "+g(k.value.id),1)]),e("div",Ka,[i[25]||(i[25]=e("span",{class:"label"},"状态:",-1)),i[26]||(i[26]=R()),a(Fe,{status:k.value.status},null,8,["status"])]),e("div",Qa,[i[27]||(i[27]=e("span",{class:"label"},"渠道 ID:",-1)),R(" "+g(k.value.channelId),1)]),e("div",Xa,[i[28]||(i[28]=e("span",{class:"label"},"用户 ID:",-1)),R(" "+g(k.value.userId||"N/A"),1)]),e("div",Ya,[i[29]||(i[29]=e("span",{class:"label"},"创建时间:",-1)),R(" "+g(H(k.value.startTime)),1)]),e("div",Za,[i[30]||(i[30]=e("span",{class:"label"},"耗时:",-1)),R(" "+g(W(k.value.duration||0)),1)])])]),e("div",en,[i[32]||(i[32]=e("h3",null,"Prompt",-1)),e("div",tn,g(V(k.value)),1)]),k.value.responseSnapshot&&k.value.responseSnapshot.length>0?(t(),l("div",ln,[e("h3",null,"生成结果 ("+g(k.value.responseSnapshot.length)+" 个资产)",1),e("div",sn,[(t(true),l(D,null,X(k.value.responseSnapshot,(oe,N)=>{var te;return t(),l("div",{key:N,class:"output-item"},[oe.kind==="image"&&oe.url?(t(),l("img",{key:0,src:oe.url,class:"output-image"},null,8,an)):oe.kind==="video"&&oe.url?(t(),l("video",{key:1,src:oe.url,class:"output-image",controls:""},null,8,nn)):oe.kind==="audio"&&oe.url?(t(),l("audio",{key:2,src:oe.url,controls:"",style:{width:"100%"}},null,8,on)):oe.kind==="text"&&oe.content?(t(),l("div",dn,g(oe.content),1)):oe.url?(t(),l("a",{key:4,href:oe.url,target:"_blank",class:"file-link"},[a(A,{name:"file"}),R(" "+g(((te=oe.meta)==null?void 0:te.filename)||oe.url),1)],8,rn)):s("v-if",true)])}),128))])])):s("v-if",true),(J=(P=k.value.middlewareLogs)==null?void 0:P.request)!=null&&J.error?(t(),l("div",cn,[i[33]||(i[33]=e("h3",null,"错误信息",-1)),e("div",un,g(k.value.middlewareLogs.request.error),1)])):s("v-if",true)])):s("v-if",true)]}),_:1},8,["modelValue"]),s(" 图片预览弹窗 "),a(Te,{visible:$.value,"onUpdate:visible":i[10]||(i[10]=P=>$.value=P),images:c.value,"initial-index":p.value,prompt:m.value,"created-at":U.value,duration:j.value},null,8,["visible","images","initial-index","prompt","created-at","duration"]),s(" 清理对话框 "),a(ne,{modelValue:Q.value,"onUpdate:modelValue":i[13]||(i[13]=P=>Q.value=P),title:"清理旧任务",width:"400px"},{footer:C(()=>[e("span",mn,[a(Z,{onClick:i[12]||(i[12]=P=>Q.value=false)},{default:C(()=>[...i[35]||(i[35]=[R("取消",-1)])]),_:1}),a(Z,{type:"error",onClick:x},{default:C(()=>[...i[36]||(i[36]=[R("确认清理",-1)])]),_:1})])]),default:C(()=>[e("div",vn,[i[34]||(i[34]=e("p",null,"清理多少天前的任务?",-1)),a(ue,{modelValue:F.value,"onUpdate:modelValue":i[11]||(i[11]=P=>F.value=P),min:1,max:365},null,8,["modelValue"])])]),_:1},8,["modelValue"])])}}}),gn=de(pn,[["__scopeId","data-v-898a70bb"]]),fn={class:"gallery-content"},_n={class:"gallery-header"},hn={class:"header-left"},yn={key:0,class:"gallery-count"},kn={class:"header-actions"},bn={key:0,class:"gallery-empty"},$n={class:"gallery-empty"},wn=["onClick"],Vn={key:0,class:"task-image-wrapper"},Cn=["src"],xn={key:0,class:"more-images"},In={class:"task-processing"},Sn={class:"processing-text"},Un={class:"task-failed"},Tn={class:"task-info"},Dn=["title"],On={class:"task-meta"},zn={class:"task-time"},Pn={key:0,class:"task-duration"},Fn={key:0,class:"loading-more"},xe=10,Ln=ie({__name:"HistoryGallery",emits:["select"],setup(o,{expose:I,emit:f}){const w=f,r=h(false),y=h(false),S=h(false),O=h([]),b=h(0),v=h(false),k=h(0),z=h();let $=null;const c=h(false),p=h([]),m=h(0),U=h(""),j=h(),Q=h(),F=async()=>{try{const q=await je.me();return S.value=q.loggedIn,q.loggedIn}catch{return S.value=false,false}},V=q=>{var A,Z,B;const n=[];if(q.responseSnapshot)for(const d of q.responseSnapshot)d.kind==="image"&&d.url&&n.push(d.url);const i=((Z=(A=q.middlewareLogs)==null?void 0:A.preset)==null?void 0:Z.transformedPrompt)||((B=q.requestSnapshot)==null?void 0:B.prompt)||"";return{id:q.id,status:q.status,prompt:i,images:n,createdAt:new Date(q.startTime),duration:q.duration||void 0}},_=async(q=false)=>{if(S.value){y.value=true;try{const n=await ye.my({limit:xe,offset:q?k.value:0}),i=n.items.map(V);q?O.value=[...O.value,...i]:(O.value=i,k.value=0),b.value=n.total,v.value=n.items.length>=xe,k.value+=xe}catch(n){console.error("Failed to load tasks:",n)}finally{y.value=false}}},K=()=>{!y.value&&v.value&&_(true)},ce=q=>{const n=q.target,{scrollTop:i,scrollHeight:A,clientHeight:Z}=n;A-i-Z<100&&K()},me=async()=>{await F(),await _()},T=q=>{q.status==="success"&&q.images.length>0&&(p.value=q.images,m.value=0,U.value=q.prompt,j.value=q.createdAt,Q.value=q.duration,c.value=true,w("select",q))},x=q=>{const i=new Date().getTime()-q.getTime();return i<6e4?"刚刚":i<36e5?`${Math.floor(i/6e4)}分钟前`:i<864e5?`${Math.floor(i/36e5)}小时前`:i<6048e5?`${Math.floor(i/864e5)}天前`:q.toLocaleDateString()},H=q=>q<1e3?`${q}ms`:`${(q/1e3).toFixed(1)}s`,W=()=>{$=setInterval(()=>{O.value.some(n=>n.status==="pending"||n.status==="processing")&&_()},3e3)};return I({refresh:me}),pe(async()=>{await F()&&(await _(),W())}),Ve(()=>{$&&clearInterval($)}),(q,n)=>{const i=E("k-icon");return t(),l("div",{class:ee(["history-gallery",{collapsed:r.value}])},[s(" 折叠状态的侧边条 "),r.value?(t(),l("div",{key:0,class:"collapsed-bar",onClick:n[0]||(n[0]=A=>r.value=false)},[a(i,{name:"history"}),n[3]||(n[3]=e("span",{class:"collapsed-text"},"历史",-1))])):(t(),l(D,{key:1},[s(" 展开的内容 "),e("div",fn,[e("div",_n,[e("div",hn,[n[4]||(n[4]=e("span",{class:"gallery-title"},"历史记录",-1)),b.value>0?(t(),l("span",yn,g(b.value),1)):s("v-if",true)]),e("div",kn,[a(i,{name:"refresh",class:ee(["action-icon",{spinning:y.value}]),onClick:me,title:"刷新"},null,8,["class"]),a(i,{name:"chevron-right",class:"action-icon",onClick:n[1]||(n[1]=A=>r.value=true),title:"收起"})])]),s(" 未登录提示 "),S.value?y.value&&O.value.length===0?(t(),l(D,{key:1},[s(" 加载中 "),n[6]||(n[6]=e("div",{class:"gallery-loading"},[e("div",{class:"loader-small"})],-1))],2112)):O.value.length===0?(t(),l(D,{key:2},[s(" 空状态 "),e("div",$n,[a(i,{name:"image",class:"empty-icon"}),n[7]||(n[7]=e("p",null,"暂无记录",-1))])],2112)):(t(),l(D,{key:3},[s(" 任务列表 (瀑布流) "),e("div",{class:"gallery-list",ref_key:"listRef",ref:z,onScroll:ce},[(t(true),l(D,null,X(O.value,A=>(t(),l("div",{key:A.id,class:ee(["task-card",{clickable:A.status==="success"}]),onClick:Z=>T(A)},[s(" 图片区域 - 只显示第一张 "),A.images&&A.images.length>0?(t(),l("div",Vn,[e("img",{src:A.images[0],class:"task-image",loading:"lazy"},null,8,Cn),A.images.length>1?(t(),l("div",xn," +"+g(A.images.length-1),1)):s("v-if",true)])):A.status==="processing"||A.status==="pending"?(t(),l(D,{key:1},[s(" 处理中动画 "),e("div",In,[n[8]||(n[8]=e("div",{class:"processing-animation"},[e("div",{class:"dot"}),e("div",{class:"dot"}),e("div",{class:"dot"})],-1)),e("span",Sn,g(A.status==="pending"?"等待中":"生成中"),1)])],2112)):A.status==="failed"?(t(),l(D,{key:2},[s(" 失败状态 "),e("div",Un,[a(i,{name:"exclamation-triangle",class:"failed-icon"}),n[9]||(n[9]=e("span",null,"失败",-1))])],2112)):s("v-if",true),s(" 任务信息 "),e("div",Tn,[e("div",{class:"task-prompt",title:A.prompt},g(A.prompt||"(无提示词)"),9,Dn),e("div",On,[e("span",zn,g(x(A.createdAt)),1),A.duration?(t(),l("span",Pn,g(H(A.duration)),1)):s("v-if",true)])])],10,wn))),128)),s(" 加载更多 "),y.value&&O.value.length>0?(t(),l("div",Fn,[...n[10]||(n[10]=[e("div",{class:"loader-small"},null,-1)])])):s("v-if",true)],544)],2112)):(t(),l("div",bn,[a(i,{name:"user",class:"empty-icon"}),n[5]||(n[5]=e("p",null,"请登录查看历史",-1))]))])],2112)),s(" 图片预览弹窗 "),a(Te,{visible:c.value,"onUpdate:visible":n[2]||(n[2]=A=>c.value=A),images:p.value,"initial-index":m.value,prompt:U.value,"created-at":j.value,duration:Q.value},null,8,["visible","images","initial-index","prompt","created-at","duration"])],2)}}}),An=de(Ln,[["__scopeId","data-v-6cba50e5"]]),En={class:"preset-picker"},Mn={key:0,class:"preset-info"},Rn=["src"],Nn={key:1,class:"preset-thumb placeholder"},qn={class:"preset-details"},Bn={class:"preset-name"},Hn={key:1,class:"placeholder-text"},Gn={class:"picker-header"},Jn={class:"preset-count"},Wn={class:"picker-content"},jn={class:"ml-masonry"},Kn=["onClick"],Qn={key:0,class:"card-thumbnail"},Xn=["src","alt"],Yn={class:"thumbnail-overlay"},Zn={key:0,class:"ref-count"},eo={key:1,class:"card-thumbnail placeholder"},to={class:"card-content"},lo={class:"card-title"},so={key:0,class:"card-tags"},ao={key:0,class:"mini-tag more"},no={key:2,class:"selected-mark"},oo={key:0,class:"empty-state"},io={class:"dialog-footer"},ro={key:0,class:"preset-detail"},co={key:0,class:"detail-thumbnail"},uo=["src","alt"],vo={class:"detail-section"},mo={class:"detail-row"},po={key:0,class:"detail-row"},go={class:"detail-tags"},fo={class:"detail-section"},_o={class:"prompt-preview"},ho={key:1,class:"detail-section"},yo={class:"detail-label"},ko={class:"reference-images"},bo=["src"],$o={key:2,class:"detail-section"},wo={class:"param-preview"},Vo={class:"dialog-footer"},Co=ie({__name:"PresetPicker",props:{modelValue:{},presets:{}},emits:["update:modelValue"],setup(o,{emit:I}){const f=o,w=I,r=["本地","远程","text2img","img2img","NSFW"],y=h(false),S=h(false),O=h([]),b=h(f.modelValue),v=h(null),k=re(()=>{const F=new Set;return f.presets.forEach(V=>{(V.tags||[]).forEach(_=>F.add(_))}),Array.from(F).sort()}),z=re(()=>f.modelValue?f.presets.find(F=>F.id===f.modelValue):null),$=re(()=>{let F=f.presets;return O.value.length===0?F:F.filter(V=>O.value.every(_=>_==="本地"?V.source==="user":_==="远程"?V.source==="api":(V.tags||[]).includes(_)))}),c=()=>{b.value=f.modelValue,O.value=[],y.value=true},p=F=>{b.value=F.id},m=()=>{w("update:modelValue",b.value),y.value=false},U=()=>{w("update:modelValue",void 0)},j=F=>{v.value=F,S.value=true},Q=()=>{v.value&&(w("update:modelValue",v.value.id),S.value=false,y.value=false)};return ge(()=>f.modelValue,F=>{b.value=F}),(F,V)=>{var me;const _=E("k-icon"),K=E("k-button"),ce=E("el-dialog");return t(),l("div",En,[s(" 当前选中的预设显示 "),e("div",{class:"selected-preset",onClick:c},[z.value?(t(),l("div",Mn,[z.value.thumbnail?(t(),l("img",{key:0,src:z.value.thumbnail,class:"preset-thumb"},null,8,Rn)):(t(),l("div",Nn,[a(_,{name:"image"})])),e("div",qn,[e("span",Bn,g(z.value.name),1),e("span",{class:ee(["preset-source",z.value.source])},g(z.value.source==="api"?"远程":"本地"),3)]),a(_,{name:"times",class:"clear-btn",onClick:ve(U,["stop"]),title:"清除选择"})])):(t(),l("div",Hn,[a(_,{name:"layer-group"}),V[6]||(V[6]=e("span",null,"选择预设模板 (可选)",-1))])),a(_,{name:"chevron-down",class:"dropdown-icon"})]),s(" 预设选择弹窗 - 复用 PresetsView 的布局 "),a(ce,{modelValue:y.value,"onUpdate:modelValue":V[3]||(V[3]=T=>y.value=T),title:"选择预设",width:"80vw",top:"5vh","close-on-click-modal":true,class:"preset-picker-dialog"},{footer:C(()=>[e("div",io,[a(K,{onClick:V[2]||(V[2]=T=>y.value=false)},{default:C(()=>[...V[9]||(V[9]=[R("取消",-1)])]),_:1}),a(K,{type:"primary",onClick:m,disabled:!b.value},{default:C(()=>[...V[10]||(V[10]=[R(" 确认选择 ",-1)])]),_:1},8,["disabled"])])]),default:C(()=>[e("div",Gn,[a(Ue,{modelValue:O.value,"onUpdate:modelValue":V[0]||(V[0]=T=>O.value=T),"all-tags":k.value,"preset-tags":r},null,8,["modelValue","all-tags"]),e("span",Jn,"共 "+g($.value.length)+" 个预设",1)]),e("div",Wn,[e("div",jn,[(t(true),l(D,null,X($.value,T=>{var x,H;return t(),l("div",{key:T.id,class:"ml-masonry-item"},[e("div",{class:ee(["preset-card",{selected:b.value===T.id}]),onClick:W=>p(T)},[s(" 缩略图 "),T.thumbnail?(t(),l("div",Qn,[e("img",{src:T.thumbnail,alt:T.name,loading:"lazy"},null,8,Xn),e("div",Yn,[(x=T.referenceImages)!=null&&x.length?(t(),l("span",Zn,[a(_,{name:"image"}),R(" "+g(T.referenceImages.length),1)])):s("v-if",true)])])):(t(),l("div",eo,[a(_,{name:"image",class:"placeholder-icon"})])),s(" 内容 "),e("div",to,[e("div",lo,g(T.name),1),(H=T.tags)!=null&&H.length?(t(),l("div",so,[(t(true),l(D,null,X(T.tags.slice(0,4),W=>(t(),l("span",{key:W,class:"mini-tag"},g(W),1))),128)),T.tags.length>4?(t(),l("span",ao,"+"+g(T.tags.length-4),1)):s("v-if",true)])):s("v-if",true)]),s(" 操作按钮区 "),e("div",{class:"card-actions",onClick:V[1]||(V[1]=ve(()=>{},["stop"]))},[a(K,{size:"mini",onClick:W=>j(T)},{icon:C(()=>[a(_,{name:"eye"})]),default:C(()=>[V[7]||(V[7]=R(" 详情 ",-1))]),_:1},8,["onClick"])]),s(" 来源标记 "),e("div",{class:ee(["source-indicator",T.source])},g(T.source==="api"?"远程":"本地"),3),s(" 选中标记 "),b.value===T.id?(t(),l("div",no,[a(_,{name:"check"})])):s("v-if",true)],10,Kn)])}),128))]),s(" 空状态 "),$.value.length===0?(t(),l("div",oo,[a(_,{name:"search",class:"empty-icon"}),V[8]||(V[8]=e("p",null,"没有找到匹配的预设",-1))])):s("v-if",true)])]),_:1},8,["modelValue"]),s(" 预设详情弹窗 "),a(ce,{modelValue:S.value,"onUpdate:modelValue":V[5]||(V[5]=T=>S.value=T),title:((me=v.value)==null?void 0:me.name)||"预设详情",width:"600px","close-on-click-modal":true,class:"preset-detail-dialog"},{footer:C(()=>[e("div",Vo,[a(K,{onClick:V[4]||(V[4]=T=>S.value=false)},{default:C(()=>[...V[15]||(V[15]=[R("关闭",-1)])]),_:1}),a(K,{type:"primary",onClick:Q},{icon:C(()=>[a(_,{name:"check"})]),default:C(()=>[V[16]||(V[16]=R(" 选择此预设 ",-1))]),_:1})])]),default:C(()=>{var T,x;return[v.value?(t(),l("div",ro,[s(" 缩略图 "),v.value.thumbnail?(t(),l("div",co,[e("img",{src:v.value.thumbnail,alt:v.value.name},null,8,uo)])):s("v-if",true),s(" 基本信息 "),e("div",vo,[e("div",mo,[V[11]||(V[11]=e("span",{class:"detail-label"},"来源:",-1)),e("span",{class:ee(["source-badge",v.value.source])},g(v.value.source==="api"?"远程":"本地"),3)]),(T=v.value.tags)!=null&&T.length?(t(),l("div",po,[V[12]||(V[12]=e("span",{class:"detail-label"},"标签:",-1)),e("div",go,[(t(true),l(D,null,X(v.value.tags,H=>(t(),l("span",{key:H,class:"mini-tag"},g(H),1))),128))])])):s("v-if",true)]),s(" Prompt 模板 "),e("div",fo,[V[13]||(V[13]=e("div",{class:"detail-label"},"Prompt 模板:",-1)),e("div",_o,g(v.value.promptTemplate),1)]),s(" 参考图 "),(x=v.value.referenceImages)!=null&&x.length?(t(),l("div",ho,[e("div",yo,"参考图片 ("+g(v.value.referenceImages.length)+"):",1),e("div",ko,[(t(true),l(D,null,X(v.value.referenceImages,(H,W)=>(t(),l("img",{key:W,src:H,class:"ref-image"},null,8,bo))),128))])])):s("v-if",true),s(" 参数覆盖 "),v.value.parameterOverrides&&Object.keys(v.value.parameterOverrides).length?(t(),l("div",$o,[V[14]||(V[14]=e("div",{class:"detail-label"},"参数覆盖:",-1)),e("div",wo,g(JSON.stringify(v.value.parameterOverrides,null,2)),1)])):s("v-if",true)])):s("v-if",true)]}),_:1},8,["modelValue","title"])])}}}),xo=de(Co,[["__scopeId","data-v-59115136"]]),Io={class:"view-container"},So={class:"view-content"},Uo={class:"generate-layout"},To={class:"config-panel"},Do={class:"form-section"},Oo={class:"section-title"},zo={class:"form-item"},Po={class:"form-item"},Fo={class:"form-section flex-grow"},Lo={class:"section-title"},Ao={class:"form-section"},Eo={class:"section-title"},Mo={class:"upload-area"},Ro={key:0,class:"upload-list"},No=["src"],qo=["onClick"],Bo={class:"form-actions"},Ho={class:"preview-panel"},Go={key:0,class:"generating-state"},Jo={class:"generating-content"},Wo={class:"generating-info"},jo={class:"generating-timer"},Ko={key:0,class:"generating-hint"},Qo={class:"result-container"},Xo={key:0,class:"success-result"},Yo={class:"output-grid"},Zo=["src","onClick"],ei={class:"output-actions"},ti=["href"],li=["src"],si=["src"],ai=["href"],ni={class:"text-output"},oi=["href"],ii={class:"result-meta"},di={class:"meta-item success-badge"},ri={key:0,class:"meta-item"},ci={key:1,class:"meta-item"},ui={class:"error-result"},vi={class:"error-content"},mi={class:"error-info"},pi={class:"error-msg"},gi={key:0,class:"error-meta"},fi={key:1,class:"error-meta"},_i={class:"empty-state"},hi=ie({__name:"GenerateView",setup(o){const I=h([]),f=h([]),w=h(false),r=h(null),y=h([]),S=h([]),O=h(),b=h();let v=0;const k=h(0),z=h(null);let $=null,c=0;const p=h({channel:void 0,prompt:"",parameters:{}}),m=h(void 0),U=h(false),j=h([]),Q=h(0),F=h(""),V=B=>{if(B<1e3)return`${B}ms`;const d=B/1e3;if(d<60)return`${d.toFixed(1)}s`;const u=Math.floor(d/60),M=(d%60).toFixed(0);return`${u}m ${M}s`},_=()=>{c=Date.now(),k.value=0,$=setInterval(()=>{k.value=Date.now()-c},100)},K=()=>{$&&(clearInterval($),$=null)},ce=B=>{var d;(d=r.value)!=null&&d.output&&(j.value=r.value.output.filter(u=>u.kind==="image"&&u.url).map(u=>u.url),Q.value=B,U.value=true)},me=async()=>{try{const[B,d]=await Promise.all([he.list(),_e.list()]);I.value=B,f.value=d}catch(B){console.error(B)}},T=B=>new Promise((d,u)=>{const M=new FileReader;M.onload=()=>{const Y=M.result.split(",")[1];d(Y)},M.onerror=u,M.readAsDataURL(B)}),x=()=>{var B;(B=O.value)==null||B.click()},H=async B=>{const d=B.target;!d.files||d.files.length===0||(await q(Array.from(d.files)),d.value="")},W=async B=>{var u;const d=(u=B.dataTransfer)==null?void 0:u.files;!d||d.length===0||await q(Array.from(d).filter(M=>M.type.startsWith("image/")))},q=async B=>{const d=4-y.value.length;if(d<=0){G.warning("最多上传 4 张图片");return}const u=B.slice(0,d);for(const M of u){const le=URL.createObjectURL(M);y.value.push({uid:++v,url:le,raw:M});try{const Y=await T(M);S.value.push({type:"image",base64:Y,mimeType:M.type,filename:M.name})}catch(Y){console.error("Failed to read file:",M.name,Y)}}},n=B=>{const d=y.value[B];d&&(URL.revokeObjectURL(d.url),y.value.splice(B,1),S.value.splice(B,1))},i=async B=>{var d,u,M,le;try{const Y=await ye.get(B);if(F.value=((u=(d=Y.middlewareLogs)==null?void 0:d.preset)==null?void 0:u.transformedPrompt)||((M=Y.requestSnapshot)==null?void 0:M.prompt)||"",Y.status==="success"&&Y.responseSnapshot&&Y.responseSnapshot.length>0)return{success:true,output:Y.responseSnapshot,taskId:Y.id,duration:Y.duration||void 0};if(Y.status==="failed"){const ne=(le=Y.middlewareLogs)==null?void 0:le._error;return{success:false,error:(ne==null?void 0:ne.message)||"生成失败",taskId:Y.id,duration:Y.duration||void 0}}return null}catch{return null}},A=async()=>{var B,d,u,M,le,Y;if(!p.value.channel){G.warning("请选择渠道");return}w.value=true,r.value=null,z.value=null,_();try{const ne={channelId:p.value.channel,prompt:p.value.prompt||"",parameters:{...p.value.parameters}};if(S.value.length>0&&(ne.files=S.value),m.value){const P=f.value.find(J=>J.id===m.value);P&&(ne.parameters.preset=P.name)}const ue=await Ke.generate(ne);if(ue.taskId&&(z.value=ue.taskId),ue.success)if(r.value=ue,(B=b.value)==null||B.refresh(),ue.taskId)try{const P=await ye.get(ue.taskId);F.value=((u=(d=P.middlewareLogs)==null?void 0:d.preset)==null?void 0:u.transformedPrompt)||((M=P.requestSnapshot)==null?void 0:M.prompt)||""}catch{F.value=p.value.prompt}else F.value=p.value.prompt;else if(ue.taskId){await new Promise(J=>setTimeout(J,500));const P=await i(ue.taskId);P&&P.success?(r.value=P,(le=b.value)==null||le.refresh()):r.value=ue}else r.value=ue}catch(ne){if(z.value){await new Promise(P=>setTimeout(P,500));const ue=await i(z.value);ue?(r.value=ue,ue.success&&((Y=b.value)==null||Y.refresh())):r.value={success:false,error:ne.message||"请求失败"}}else r.value={success:false,error:ne.message||"请求失败"}}finally{K(),w.value=false}},Z=B=>{B.prompt&&(p.value.prompt=B.prompt)};return pe(()=>{me()}),Ve(()=>{K()}),(B,d)=>{var P;const u=E("k-icon"),M=E("el-option"),le=E("el-select"),Y=E("el-input"),ne=E("k-button"),ue=E("k-card");return t(),l("div",Io,[e("div",So,[e("div",Uo,[s(" 左侧配置区 "),e("div",To,[a(ue,{class:"config-card"},{default:C(()=>[e("div",Do,[e("div",Oo,[a(u,{name:"settings"}),d[5]||(d[5]=R(" 基础配置 ",-1))]),e("div",zo,[d[6]||(d[6]=e("div",{class:"label"},"生成渠道",-1)),a(le,{modelValue:p.value.channel,"onUpdate:modelValue":d[0]||(d[0]=J=>p.value.channel=J),placeholder:"选择生成渠道",style:{width:"100%"}},{default:C(()=>[(t(true),l(D,null,X(I.value,J=>(t(),ae(M,{key:J.id,label:J.name,value:J.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),e("div",Po,[d[7]||(d[7]=e("div",{class:"label"},"预设模板",-1)),a(xo,{modelValue:m.value,"onUpdate:modelValue":d[1]||(d[1]=J=>m.value=J),presets:f.value},null,8,["modelValue","presets"])])]),e("div",Fo,[e("div",Lo,[a(u,{name:"edit"}),d[8]||(d[8]=R(" 提示词 ",-1))]),a(Y,{modelValue:p.value.prompt,"onUpdate:modelValue":d[2]||(d[2]=J=>p.value.prompt=J),type:"textarea",rows:8,placeholder:"输入提示词,支持自然语言描述...",resize:"none",class:"prompt-input"},null,8,["modelValue"])]),s(" 文件上传区域 "),e("div",Ao,[e("div",Eo,[a(u,{name:"image"}),d[9]||(d[9]=R(" 参考图片 ",-1))]),e("div",Mo,[s(" 已上传的图片列表 "),y.value.length>0?(t(),l("div",Ro,[(t(true),l(D,null,X(y.value,(J,oe)=>(t(),l("div",{key:J.uid,class:"upload-item"},[e("img",{src:J.url,class:"upload-thumb"},null,8,No),e("div",{class:"upload-overlay",onClick:N=>n(oe)},[a(u,{name:"delete"})],8,qo)]))),128))])):s("v-if",true),s(" 上传按钮 "),y.value.length<4?(t(),l("div",{key:1,class:"upload-trigger",onClick:x,onDragover:d[3]||(d[3]=ve(()=>{},["prevent"])),onDrop:ve(W,["prevent"])},[e("input",{ref_key:"fileInput",ref:O,type:"file",accept:"image/*",multiple:"",style:{display:"none"},onChange:H},null,544),a(u,{name:"add",class:"upload-icon"})],32)):s("v-if",true),d[10]||(d[10]=e("div",{class:"upload-tip"},"点击或拖拽上传,最多 4 张",-1))])]),e("div",Bo,[a(ne,{solid:"",type:"primary",loading:w.value,onClick:A,class:"generate-btn"},{icon:C(()=>[a(u,{name:"magic"})]),default:C(()=>[d[11]||(d[11]=R(" 生成图片 ",-1))]),_:1},8,["loading"])])]),_:1})]),s(" 右侧预览区 "),e("div",Ho,[s(" 生成中状态 "),w.value?(t(),l("div",Go,[e("div",Jo,[d[13]||(d[13]=e("div",{class:"loader"},null,-1)),e("div",Wo,[d[12]||(d[12]=e("p",{class:"generating-title"},"正在生成中...",-1)),e("p",jo,[a(u,{name:"stopwatch"}),R(" 已用时间: "+g(V(k.value)),1)]),z.value?(t(),l("p",Ko,"任务 ID: "+g(z.value),1)):s("v-if",true)])])])):r.value?(t(),l(D,{key:1},[s(" 有结果 "),e("div",Qo,[s(" 成功状态 "),r.value.success&&r.value.output&&r.value.output.length?(t(),l("div",Xo,[e("div",Yo,[(t(true),l(D,null,X(r.value.output,(J,oe)=>{var N;return t(),l("div",{key:oe,class:"output-wrapper"},[s(" 图片 "),J.kind==="image"?(t(),l(D,{key:0},[e("img",{src:J.url,onClick:te=>ce(oe),class:"clickable-image"},null,8,Zo),e("div",ei,[e("a",{href:J.url,target:"_blank",class:"action-btn",download:""},[a(u,{name:"download"})],8,ti)])],64)):J.kind==="video"?(t(),l(D,{key:1},[s(" 视频 "),e("video",{src:J.url,controls:"",class:"output-video"},null,8,li)],64)):J.kind==="audio"?(t(),l(D,{key:2},[s(" 音频 "),e("audio",{src:J.url,controls:"",class:"output-audio"},null,8,si)],64)):J.kind==="file"?(t(),l(D,{key:3},[s(" 其他文件 "),e("a",{href:J.url,target:"_blank",class:"file-link"},[a(u,{name:"file"}),R(" "+g(((N=J.meta)==null?void 0:N.filename)||"下载文件"),1)],8,ai)],64)):J.kind==="text"?(t(),l(D,{key:4},[s(" 文本 "),e("div",ni,g(J.content),1)],64)):J.url?(t(),l(D,{key:5},[s(" 兜底:有 url 则显示链接 "),e("a",{href:J.url,target:"_blank"},g(J.url),9,oi)],64)):s("v-if",true)])}),128))]),e("div",ii,[e("span",di,[a(u,{name:"check-circle"}),d[14]||(d[14]=R(" 生成成功 ",-1))]),r.value.duration?(t(),l("span",ri,[a(u,{name:"stopwatch"}),R(" 耗时: "+g(V(r.value.duration)),1)])):s("v-if",true),r.value.taskId?(t(),l("span",ci,[a(u,{name:"list-alt"}),R(" 任务 ID: "+g(r.value.taskId),1)])):s("v-if",true)])])):(t(),l(D,{key:1},[s(" 失败状态 "),e("div",ui,[e("div",vi,[a(u,{name:"exclamation-triangle",class:"error-icon"}),e("div",mi,[d[15]||(d[15]=e("p",{class:"error-title"},"生成失败",-1)),e("p",pi,g(r.value.error||"未知错误"),1),r.value.taskId?(t(),l("p",gi,"任务 ID: "+g(r.value.taskId),1)):s("v-if",true),r.value.duration?(t(),l("p",fi,"耗时: "+g(V(r.value.duration)),1)):s("v-if",true)])]),a(ne,{class:"retry-btn",onClick:A},{icon:C(()=>[a(u,{name:"refresh"})]),default:C(()=>[d[16]||(d[16]=R(" 重新生成 ",-1))]),_:1})])],2112))])],2112)):(t(),l(D,{key:2},[s(" 空状态 "),e("div",_i,[a(u,{name:"image",class:"empty-icon"}),d[17]||(d[17]=e("p",null,"在左侧配置并点击生成",-1))])],2112))]),s(" 右侧历史画廊 "),a(An,{ref_key:"historyGalleryRef",ref:b,onSelect:Z},null,512)])]),s(" 图片预览弹窗 "),a(Te,{visible:U.value,"onUpdate:visible":d[4]||(d[4]=J=>U.value=J),images:j.value,"initial-index":Q.value,prompt:F.value,duration:(P=r.value)==null?void 0:P.duration},null,8,["visible","images","initial-index","prompt","duration"])])}}}),Le=de(hi,[["__scopeId","data-v-a3441aa4"]]),yi={class:"pipeline-panel"},ki={class:"pipeline-flow"},bi={class:"phase-icon"},$i={class:"phase-info"},wi={class:"phase-name"},Vi={class:"phase-desc"},Ci={class:"phase-badge"},xi={key:0,class:"phase-middlewares"},Ii={class:"mw-card"},Si={class:"mw-content"},Ui={class:"mw-name"},Ti={class:"mw-desc"},Di=["title"],Oi=["checked","onChange"],zi={key:2,class:"phase-connector"},Pi={class:"connector-arrow"},Fi=ie({__name:"MiddlewaresPanel",setup(o){const I=h([]),f=[{id:"lifecycle-prepare",label:"准备",description:"验证、权限检查、任务创建",icon:"clipboard-check",colorClass:"phase-prepare"},{id:"lifecycle-pre-request",label:"预处理",description:"预设应用、参数处理",icon:"settings",colorClass:"phase-pre"},{id:"lifecycle-request",label:"执行",description:"调用连接器生成",icon:"play",colorClass:"phase-request"},{id:"lifecycle-post-request",label:"后处理",description:"结果缓存、格式转换",icon:"package",colorClass:"phase-post"},{id:"lifecycle-finalize",label:"完成",description:"计费结算、记录保存",icon:"check-circle",colorClass:"phase-finalize"}],w={billing:"计费模块",transform:"转换处理",validation:"验证检查",preset:"预设系统",cache:"缓存管理",recording:"任务记录",request:"请求执行",custom:"自定义"},r=O=>I.value.filter(b=>b.phase===O),y=async()=>{try{I.value=await we.list()}catch{G.error("加载中间件列表失败")}},S=async O=>{const b=!O.enabled;try{await we.update(O.name,{enabled:b}),O.enabled=b,G.success(b?"已启用":"已禁用")}catch{G.error("操作失败")}};return pe(y),(O,b)=>{const v=E("k-icon");return t(),l("div",yi,[s(" 标题区 "),b[5]||(b[5]=e("div",{class:"panel-header"},[e("div",{class:"header-title"},[e("h3",null,"请求执行流程"),e("span",{class:"subtitle"},"每个生成请求按以下阶段依次处理")])],-1)),s(" 流程图 "),e("div",ki,[(t(),l(D,null,X(f,(k,z)=>e("div",{key:k.id,class:"phase-section"},[s(" 阶段标题 "),e("div",{class:ee(["phase-header",k.colorClass])},[e("div",bi,[a(v,{name:k.icon},null,8,["name"])]),e("div",$i,[e("span",wi,g(k.label),1),e("span",Vi,g(k.description),1)]),e("span",Ci,g(r(k.id).length),1)],2),s(" 中间件列表 "),r(k.id).length>0?(t(),l("div",xi,[(t(true),l(D,null,X(r(k.id),($,c)=>(t(),l("div",{key:$.name,class:ee(["mw-item",{disabled:!$.enabled}])},[e("div",Ii,[e("div",{class:ee(["mw-status",{active:$.enabled}])},null,2),e("div",Si,[e("span",Ui,g($.displayName),1),e("span",Ti,g($.description||w[$.category]||$.category),1)]),e("label",{class:"toggle-switch",onClick:b[0]||(b[0]=ve(()=>{},["stop"])),title:$.enabled?"点击禁用":"点击启用"},[e("input",{type:"checkbox",checked:$.enabled,onChange:p=>S($)},null,40,Oi),b[1]||(b[1]=e("span",{class:"slider"},null,-1))],8,Di)])],2))),128))])):(t(),l(D,{key:1},[s(" 空状态 "),b[2]||(b[2]=e("div",{class:"empty-phase"},[e("span",null,"无中间件")],-1))],2112)),s(" 阶段间连接箭头 "),z<f.length-1?(t(),l("div",zi,[b[3]||(b[3]=e("div",{class:"connector-line"},null,-1)),e("div",Pi,[a(v,{name:"chevron-down"})]),b[4]||(b[4]=e("div",{class:"connector-line"},null,-1))])):s("v-if",true)])),64))]),s(" 底部说明 "),b[6]||(b[6]=Se('<div class="pipeline-footer" data-v-b4b0cf47><div class="footer-item" data-v-b4b0cf47><span class="dot active" data-v-b4b0cf47></span><span data-v-b4b0cf47>启用 - 中间件将在请求中执行</span></div><div class="footer-item" data-v-b4b0cf47><span class="dot" data-v-b4b0cf47></span><span data-v-b4b0cf47>禁用 - 中间件将被跳过</span></div><p class="footer-hint" data-v-b4b0cf47>同一阶段内的中间件可能并行执行。详细配置请前往「扩展插件」面板。</p></div>',1))])}}}),Li=de(Fi,[["__scopeId","data-v-b4b0cf47"]]),Ai={class:"plugins-panel"},Ei={key:0,class:"loading-state"},Mi={class:"empty-state"},Ri={class:"plugins-list"},Ni=["onClick"],qi={class:"plugin-info"},Bi={class:"plugin-header"},Hi={class:"plugin-name"},Gi={key:0,class:"plugin-version"},Ji={class:"plugin-description"},Wi={class:"plugin-status"},ji={key:0,class:"plugin-badge connector"},Ki={key:1,class:"plugin-badge middleware"},Qi={key:0,class:"plugin-detail"},Xi={class:"detail-header"},Yi={class:"header-left"},Zi={key:0,class:"version"},ed={class:"header-actions"},td={key:0,class:"connector-info"},ld={class:"connector-meta"},sd={class:"connector-id"},ad={class:"connector-types"},nd={key:1,class:"middlewares-list"},od={class:"middleware-tags"},id={class:"phase-badge"},dd={key:2,class:"config-section"},rd={class:"config-actions"},cd={class:"no-config"},ud={class:"no-selection"},vd=ie({__name:"PluginsPanel",setup(o){const I=h(true),f=h([]),w=h(null),r=h({}),y=h(false),S={"lifecycle-prepare":"准备","lifecycle-pre-request":"前置","lifecycle-request":"请求","lifecycle-post-request":"后置","lifecycle-finalize":"完成"},O=$=>S[$]||$,b=async()=>{try{I.value=true,f.value=await Ie.list()}catch($){console.error("Failed to load plugins:",$),f.value=[]}finally{I.value=false}},v=$=>{w.value=$,r.value={...$.config};for(const c of $.configFields||[])r.value[c.key]===void 0&&c.default!==void 0&&(r.value[c.key]=c.default)},k=async()=>{if(w.value){y.value=true;try{await Ie.updateConfig(w.value.id,r.value),G.success("保存成功"),await b();const $=f.value.find(c=>{var p;return c.id===((p=w.value)==null?void 0:p.id)});$&&(w.value=$,r.value={...$.config})}catch{G.error("保存失败")}finally{y.value=false}}},z=async $=>{var c;try{const p=await Ee($.apiEvent);if((p==null?void 0:p.success)===false)throw new Error(p.error||"操作失败");if($.apiEvent==="media-luna/presets/sync"&&(p!=null&&p.data)){const{added:m,updated:U,removed:j,notModified:Q}=p.data;Q?G.info("数据未变化,无需更新"):G.success(`同步完成:新增 ${m},更新 ${U},删除 ${j}`)}else(c=p==null?void 0:p.data)!=null&&c.message?G.success(p.data.message):G.success(`${$.label} 完成`);await b()}catch(p){G.error(`${$.label} 失败: ${p instanceof Error?p.message:"未知错误"}`)}};return pe(b),($,c)=>{var U,j,Q;const p=E("k-icon"),m=E("k-button");return t(),l("div",Ai,[s(" 加载状态 "),I.value?(t(),l("div",Ei,[a(p,{name:"sync",class:"spin"}),c[1]||(c[1]=e("span",null,"加载中...",-1))])):f.value.length===0?(t(),l(D,{key:1},[s(" 空状态 "),e("div",Mi,[a(p,{name:"apps"}),c[2]||(c[2]=e("p",null,"暂无扩展插件",-1)),c[3]||(c[3]=e("p",{class:"hint"},[R("第三方扩展插件将在这里显示"),e("br"),R('内置功能请在"功能模块"中配置')],-1))])],2112)):(t(),l(D,{key:2},[s(" 插件列表 "),e("div",Ri,[(t(true),l(D,null,X(f.value,F=>{var V,_;return t(),l("div",{key:F.id,class:ee(["plugin-card",{active:((V=w.value)==null?void 0:V.id)===F.id,disabled:!F.enabled}]),onClick:K=>v(F)},[e("div",qi,[e("div",Bi,[e("span",Hi,g(F.name),1),F.version?(t(),l("span",Gi,"v"+g(F.version),1)):s("v-if",true)]),e("p",Ji,g(F.description||"暂无描述"),1)]),e("div",Wi,[F.connector?(t(),l("span",ji,"连接器")):s("v-if",true),(_=F.middlewares)!=null&&_.length?(t(),l("span",Ki,g(F.middlewares.length)+" 个中间件 ",1)):s("v-if",true),a(p,{name:F.enabled?"check-circle":"close-circle",class:ee(F.enabled?"enabled":"disabled")},null,8,["name","class"])])],10,Ni)}),128))]),s(" 插件详情 "),w.value?(t(),l("div",Qi,[e("header",Xi,[e("div",Yi,[e("h3",null,g(w.value.name),1),w.value.version?(t(),l("span",Zi,"v"+g(w.value.version),1)):s("v-if",true)]),e("div",ed,[(t(true),l(D,null,X(w.value.actions,F=>(t(),ae(m,{key:F.name,type:F.type||"default",size:"small",onClick:V=>z(F)},He({default:C(()=>[R(" "+g(F.label),1)]),_:2},[F.icon?{name:"icon",fn:C(()=>[a(p,{name:F.icon},null,8,["name"])]),key:"0"}:void 0]),1032,["type","onClick"]))),128))])]),s(" 连接器信息 "),w.value.connector?(t(),l("div",td,[c[4]||(c[4]=e("h4",null,"连接器",-1)),e("div",ld,[e("span",sd,g(w.value.connector.id),1),e("span",ad," 支持: "+g(((U=w.value.connector.supportedTypes)==null?void 0:U.join(", "))||"无"),1)])])):s("v-if",true),s(" 中间件列表 "),(j=w.value.middlewares)!=null&&j.length?(t(),l("div",nd,[c[5]||(c[5]=e("h4",null,"中间件",-1)),e("div",od,[(t(true),l(D,null,X(w.value.middlewares,F=>(t(),l("span",{key:F.name,class:ee(["middleware-tag",{enabled:F.enabled}])},[R(g(F.displayName||F.name)+" ",1),e("span",id,g(O(F.phase)),1)],2))),128))])])):s("v-if",true),s(" 配置表单 "),(Q=w.value.configFields)!=null&&Q.length?(t(),l("div",dd,[c[7]||(c[7]=e("h4",null,"配置",-1)),a(Ce,{fields:w.value.configFields,modelValue:r.value,"onUpdate:modelValue":c[0]||(c[0]=F=>r.value=F)},null,8,["fields","modelValue"]),e("div",rd,[a(m,{type:"primary",onClick:k,loading:y.value},{icon:C(()=>[a(p,{name:"save"})]),default:C(()=>[c[6]||(c[6]=R(" 保存配置 ",-1))]),_:1},8,["loading"])])])):(t(),l(D,{key:3},[s(" 无配置提示 "),e("div",cd,[a(p,{name:"info-circle"}),c[8]||(c[8]=e("span",null,"该插件暂无可配置项",-1))])],2112))])):(t(),l(D,{key:1},[s(" 无选中提示 "),e("div",ud,[a(p,{name:"apps"}),c[9]||(c[9]=e("p",null,"请从左侧选择一个插件查看详情",-1))])],2112))],64))])}}}),md=de(vd,[["__scopeId","data-v-b8e1ebe1"]]),pd={class:"settings-view"},gd={class:"sidebar"},fd={class:"nav-list"},_d=["onClick"],hd={class:"main-content"},yd={key:0,class:"loading"},kd={class:"panel-header"},bd={key:0},$d={class:"custom-panel"},wd={class:"actions"},Vd=ie({__name:"SettingsView",setup(o){const I=h(true),f=h([]),w=h(""),r=h({}),y=re(()=>f.value.find(v=>v.id===w.value)),S=async()=>{try{f.value=await ze.panels(),f.value.length&&!w.value&&(w.value=f.value[0].id)}catch{G.error("加载设置面板失败")}},O=()=>{var v;if(((v=y.value)==null?void 0:v.type)==="custom"){r.value={...y.value.config||{}};for(const k of y.value.configFields||[])r.value[k.key]===void 0&&k.default!==void 0&&(r.value[k.key]=k.default)}},b=async()=>{if(y.value)try{await ze.update(y.value.id,r.value),G.success("保存成功"),await S()}catch{G.error("保存失败")}};return ge(w,()=>{var v;((v=y.value)==null?void 0:v.type)==="custom"&&O()}),pe(async()=>{await S(),I.value=false}),(v,k)=>{const z=E("k-icon"),$=E("k-button");return t(),l("div",pd,[s(" 侧边栏导航 "),e("aside",gd,[e("nav",fd,[(t(true),l(D,null,X(f.value,c=>(t(),l("div",{key:c.id,class:ee(["nav-item",{active:w.value===c.id}]),onClick:p=>w.value=c.id},[a(z,{name:c.icon},null,8,["name"]),e("span",null,g(c.name),1)],10,_d))),128))])]),s(" 主内容区 "),e("main",hd,[I.value?(t(),l("div",yd,[a(z,{name:"sync",class:"spin"}),k[1]||(k[1]=R(" 加载中... ",-1))])):y.value?(t(),l(D,{key:1},[s(" 面板标题 "),e("header",kd,[e("h2",null,g(y.value.name),1),y.value.description?(t(),l("p",bd,g(y.value.description),1)):s("v-if",true)]),s(" 功能模块面板 "),y.value.component==="middlewares"?(t(),ae(Li,{key:0})):y.value.component==="plugins"?(t(),l(D,{key:1},[s(" 扩展插件面板 "),a(md)],64)):y.value.type==="custom"&&y.value.configFields?(t(),l(D,{key:2},[s(" 自定义面板 "),e("div",$d,[a(Ce,{fields:y.value.configFields,modelValue:r.value,"onUpdate:modelValue":k[0]||(k[0]=c=>r.value=c)},null,8,["fields","modelValue"]),e("div",wd,[a($,{type:"primary",onClick:b},{icon:C(()=>[a(z,{name:"save"})]),default:C(()=>[k[2]||(k[2]=R(" 保存 ",-1))]),_:1})])])],64)):s("v-if",true)],64)):s("v-if",true)])])}}}),Cd=de(Vd,[["__scopeId","data-v-5fa778a6"]]),xd={class:"setup-storage"},Id={key:0,class:"loading-state"},Sd={key:0,class:"warning-box"},Ud={class:"step-actions"},Td=ie({__name:"SetupStorage",props:{modelValue:{},saving:{type:Boolean}},emits:["update:modelValue","next"],setup(o,{emit:I}){const f=o,w=I,r=h(true),y=h([]),S=h({});ge(S,v=>{w("update:modelValue",{...v})},{deep:true});const O=async()=>{try{r.value=true;const[v,k]=await Promise.all([fe.getStorageFields(),fe.getStorageConfig()]);y.value=v;const z={...f.modelValue};for(const $ of v)k[$.key]!==void 0?z[$.key]=k[$.key]:z[$.key]===void 0&&$.default!==void 0&&(z[$.key]=$.default);S.value=z}catch(v){console.error("Failed to load storage config:",v)}finally{r.value=false}},b=()=>{w("next")};return pe(O),(v,k)=>{const z=E("k-icon"),$=E("k-button");return t(),l("div",xd,[k[4]||(k[4]=e("h3",null,"存储配置",-1)),k[5]||(k[5]=e("p",{class:"step-desc"},"选择生成图片的存储方式。推荐使用本地存储或 S3 兼容存储。",-1)),r.value?(t(),l("div",Id,[a(z,{name:"sync",class:"spin"}),k[1]||(k[1]=e("span",null,"加载配置中...",-1))])):(t(),l(D,{key:1},[s(" 使用 ConfigRenderer 渲染配置字段 "),a(Ce,{fields:y.value,modelValue:S.value,"onUpdate:modelValue":k[0]||(k[0]=c=>S.value=c)},null,8,["fields","modelValue"]),s(" 警告提示(当选择不使用时) "),S.value.backend==="none"?(t(),l("div",Sd,[a(z,{name:"warning"}),k[2]||(k[2]=e("div",null,[e("strong",null,"注意"),e("p",null,'选择"不使用"将保留生成服务返回的原始 URL,这些 URL 可能会过期或无法访问。建议配置存储后端以确保图片长期可用。')],-1))])):s("v-if",true)],64)),s(" 操作按钮 "),e("div",Ud,[a($,{type:"primary",loading:o.saving,disabled:r.value,onClick:b},{default:C(()=>[...k[3]||(k[3]=[R(" 下一步 ",-1)])]),_:1},8,["loading","disabled"])])])}}}),Dd=de(Td,[["__scopeId","data-v-9aeaae19"]]),Od={class:"setup-auth"},zd={class:"config-panel"},Pd={class:"form-row"},Fd={class:"field-container"},Ld={class:"verify-section"},Ad={class:"verify-card"},Ed={class:"code-display"},Md={class:"code-value"},Rd={class:"code-meta"},Nd={class:"step-actions"},qd=ie({__name:"SetupAuth",props:{saving:{type:Boolean}},emits:["complete","skip"],setup(o,{emit:I}){const f=I,w=h(null),r=h(false),y=h(""),S=h(0),O=h(null);let b=null,v=null;const k=async()=>{try{const m=await fe.status();m.boundUid&&(w.value=m.boundUid,O.value=m.boundUid)}catch(m){console.error("Failed to load status:",m)}},z=async()=>{if($&&clearTimeout($),!!w.value)try{r.value=true;const m=await fe.generateVerifyCode(w.value);y.value=m.code,S.value=m.expiresIn,G.success("验证码已生成,请在聊天平台完成验证")}catch(m){G.error("生成验证码失败: "+(m instanceof Error?m.message:"未知错误"))}finally{r.value=false}};let $=null;const c=()=>{$&&clearTimeout($),y.value="",w.value&&($=window.setTimeout(z,1e3))},p=async()=>{if(!w.value){G.warning("请输入用户 ID");return}try{await fe.bindUid(w.value),G.success("配置已保存"),f("complete")}catch(m){G.error("保存失败: "+(m instanceof Error?m.message:"未知错误"))}};return pe(()=>{k(),b=We("media-luna/webui-auth/bind-request",m=>{m.uid&&(w.value=m.uid,m.code&&(y.value=m.code,S.value=m.expiresIn,G.info("收到绑定请求,请在聊天平台完成验证")))}),v=window.setInterval(async()=>{try{const m=await fe.status();if(m.boundUid){if(w.value&&m.boundUid!==w.value)return;m.boundUid!==O.value&&(w.value=m.boundUid,G.success("检测到绑定成功!"),f("complete"),v&&clearInterval(v))}}catch{}},3e3)}),Ve(()=>{b&&b(),v&&clearInterval(v)}),(m,U)=>{const j=E("el-input-number"),Q=E("k-button");return t(),l("div",Od,[U[8]||(U[8]=e("h3",null,"用户绑定",-1)),U[9]||(U[9]=e("p",{class:"step-desc"}," 将 WebUI 与 Koishi 用户绑定。你可以直接配置用户 ID,也可以通过验证码进行验证绑定。 ",-1)),e("div",zd,[s(" UID 输入 "),e("div",Pd,[U[3]||(U[3]=e("div",{class:"form-label"},"用户 ID (UID)",-1)),e("div",Fd,[a(j,{modelValue:w.value,"onUpdate:modelValue":U[0]||(U[0]=F=>w.value=F),min:1,controls:false,placeholder:"Koishi 用户 ID",class:"uid-input full-width",onInput:c},null,8,["modelValue"]),U[2]||(U[2]=e("div",{class:"field-desc"},[R(" 输入你的 Koishi "),e("code",null,"uid"),R(",不是原神的。 ")],-1))])]),s(" 验证码显示区域 "),e("div",Ld,[e("div",Ad,[e("div",Ed,[U[4]||(U[4]=e("div",{class:"code-label"},"验证码",-1)),e("div",Md,g(y.value),1),e("div",Rd,"有效期 "+g(S.value)+" 秒",1)]),U[5]||(U[5]=e("div",{class:"verify-guide"},[e("p",null,"请在聊天平台向机器人发送以下指令完成绑定:"),e("div",{class:"command-box"},[e("code",null,"bindui")]),e("p",{class:"small-hint"},"发送指令后,请根据提示输入左侧的验证码。")],-1))])])]),e("div",Nd,[a(Q,{onClick:U[1]||(U[1]=F=>m.$emit("skip"))},{default:C(()=>[...U[6]||(U[6]=[R("跳过",-1)])]),_:1}),a(Q,{type:"primary",loading:o.saving,onClick:p},{default:C(()=>[...U[7]||(U[7]=[R(" 保存 / 完成 ",-1)])]),_:1},8,["loading"])])])}}}),Bd=de(qd,[["__scopeId","data-v-59078dbb"]]),Hd={class:"setup-wizard"},Gd={class:"wizard-container"},Jd={class:"steps-indicator"},Wd={class:"step-number"},jd={key:1},Kd={class:"step-label"},Qd={class:"wizard-content"},Xd={key:"complete",class:"step-complete"},Yd={class:"complete-icon"},Zd=ie({__name:"SetupWizard",emits:["complete"],setup(o,{emit:I}){const f=I,w=[{id:"storage",label:"存储配置"},{id:"auth",label:"用户绑定"},{id:"complete",label:"完成"}],r=h(0),y=h(false),S=h({}),O=async()=>{y.value=true;try{await fe.updateStorageConfig(S.value),G.success("存储配置已保存"),r.value=1}catch(z){G.error("保存失败: "+(z instanceof Error?z.message:"未知错误"))}finally{y.value=false}},b=()=>{r.value=2},v=()=>{r.value=2},k=async()=>{try{await fe.complete(),f("complete")}catch{f("complete")}};return(z,$)=>{const c=E("k-icon"),p=E("k-button");return t(),l("div",Hd,[e("div",Gd,[s(" 头部 "),$[4]||($[4]=e("div",{class:"wizard-header"},[e("h1",null,"欢迎使用 Media Luna"),e("p",null,"在开始使用前,请完成以下基础配置")],-1)),s(" 步骤指示器 "),e("div",Jd,[(t(),l(D,null,X(w,(m,U)=>e("div",{key:m.id,class:ee(["step-item",{active:r.value===U,completed:r.value>U}])},[e("div",Wd,[r.value>U?(t(),ae(c,{key:0,name:"check"})):(t(),l("span",jd,g(U+1),1))]),e("span",Kd,g(m.label),1)],2)),64))]),s(" 步骤内容 "),e("div",Qd,[a(Ae,{name:"fade",mode:"out-in"},{default:C(()=>[r.value===0?(t(),ae(Dd,{key:"storage",modelValue:S.value,"onUpdate:modelValue":$[0]||($[0]=m=>S.value=m),saving:y.value,onNext:O},null,8,["modelValue","saving"])):r.value===1?(t(),ae(Bd,{key:"auth",saving:y.value,onComplete:b,onSkip:v},null,8,["saving"])):r.value===2?(t(),l("div",Xd,[e("div",Yd,[a(c,{name:"check-circle"})]),$[2]||($[2]=e("h2",null,"配置完成",-1)),$[3]||($[3]=e("p",null,"您已完成 Media Luna 的初始设置,现在可以开始使用了。",-1)),a(p,{type:"primary",size:"large",onClick:k},{default:C(()=>[...$[1]||($[1]=[R(" 开始使用 ",-1)])]),_:1})])):s("v-if",true)]),_:1})])])])}}}),er=de(Zd,[["__scopeId","data-v-3931ca56"]]),tr={class:"top-nav"},lr={class:"nav-container"},sr={class:"nav-tabs",role:"tablist"},ar=["onClick","aria-selected"],nr={class:"main-content"},or=ie({__name:"index",setup(o){const I=h("generate"),f=h(false),w=async()=>{try{const z=await fe.status();f.value=z.needsSetup}catch(z){console.error("Failed to check setup status:",z),f.value=false}},r=()=>{f.value=false},y=re(()=>{switch(I.value){case"generate":return Le;case"channels":return El;case"presets":return zs;case"tasks":return gn;case"settings":return Cd;default:return Le}}),S=z=>()=>De("svg",{viewBox:"0 0 24 24",fill:"currentColor"},[De("path",{d:z})]),O=[{id:"generate",label:"生成",icon:S("M7.5 5.6L10 7 8.6 4.5 10 2 7.5 3.4 5 2 6.4 4.5 5 7zM19 2l-2.5 1.4L14 2l1.4 2.5L14 7l2.5-1.4L19 7l-1.4-2.5zm-5.6 5.4L9 12l4.4 4.6L17.8 12zM2 13l2.5 1.4L6 17l1.4-2.5L10 13 7.5 11.6 6 9l-1.4 2.5z")},{id:"channels",label:"渠道",icon:S("M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z")},{id:"presets",label:"预设",icon:S("M17 3H7c-1.1 0-2 .9-2 2v16l7-3 7 3V5c0-1.1-.9-2-2-2z")},{id:"tasks",label:"任务",icon:S("M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm2 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z")},{id:"settings",label:"设置",icon:S("M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58a.49.49 0 0 0 .12-.61l-1.92-3.32a.488.488 0 0 0-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54a.484.484 0 0 0-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58a.49.49 0 0 0-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.58 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z")}];let b="";function v(){const z=document.querySelector(".layout-header");z&&(b=z.style.display,z.style.display="none")}function k(){const z=document.querySelector(".layout-header");z&&(z.style.display=b||"")}return pe(()=>{v(),w()}),Ge(k),(z,$)=>{const c=E("k-layout");return t(),ae(c,{class:"app-layout media-luna-app"},{default:C(()=>[s(" 设置向导 "),f.value?(t(),ae(er,{key:0,onComplete:r})):(t(),l(D,{key:1},[s(" 主界面 "),e("div",tr,[e("div",lr,[$[0]||($[0]=e("div",{class:"logo-area"},[e("span",{class:"logo-text"},"MEDIA LUNA")],-1)),e("div",sr,[(t(),l(D,null,X(O,p=>e("div",{key:p.id,class:ee(["nav-tab",{active:I.value===p.id}]),onClick:m=>I.value=p.id,role:"tab","aria-selected":I.value===p.id},[(t(),ae(Oe(p.icon),{class:"tab-icon"})),e("span",null,g(p.label),1)],10,ar)),64))])])]),e("div",nr,[(t(),ae(Je,null,[(t(),ae(Oe(y.value)))],1024))])],64))]),_:1})}}}),ir=de(or,[["__scopeId","data-v-c4fa9f13"]]),cr=o=>{o.page({name:"Media Luna",path:"/media-luna",component:ir,order:500})};export{cr as default};
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- .tag-filter[data-v-61b504c8]{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem}.filter-tags[data-v-61b504c8]{display:flex;flex-wrap:wrap;gap:.5rem}.filter-tag[data-v-61b504c8]{padding:4px 12px;font-size:.85rem;border-radius:16px;border:1px solid var(--k-color-border);background-color:transparent;color:var(--k-color-text-description);cursor:pointer;transition:all .2s ease;-webkit-user-select:none;user-select:none}.filter-tag[data-v-61b504c8]:hover{border-color:var(--k-color-active);color:var(--k-color-active)}.filter-tag.active[data-v-61b504c8]{background-color:var(--k-color-active);border-color:var(--k-color-active);color:#fff}.filter-input-wrapper[data-v-61b504c8]{flex-shrink:0}.filter-input[data-v-61b504c8]{width:180px}.view-mode-switch[data-v-ae3ef498]{display:flex;gap:2px;background-color:var(--k-color-bg-2);border:1px solid var(--k-color-border);border-radius:6px;padding:2px}.mode-btn[data-v-ae3ef498]{display:flex;align-items:center;justify-content:center;width:32px;height:28px;border:none;background:transparent;color:var(--k-color-text-description);cursor:pointer;border-radius:4px;transition:all .2s ease;font-size:16px}.mode-btn[data-v-ae3ef498]:hover{color:var(--k-color-text);background-color:var(--k-color-bg-1)}.mode-btn.active[data-v-ae3ef498]{color:var(--k-color-active);background-color:var(--k-card-bg);box-shadow:0 1px 3px #0000001a}.tag-input[data-v-68388640],.tag-select[data-v-68388640]{width:100%}.tag-select[data-v-68388640] .el-tag{background-color:var(--k-color-bg-3);color:var(--k-color-text);border-color:transparent;border-radius:4px}.tag-select[data-v-68388640] .el-tag .el-tag__close{color:var(--k-color-text-description)}.tag-select[data-v-68388640] .el-tag .el-tag__close:hover{background-color:var(--k-color-text);color:var(--k-color-bg-1)}.config-renderer[data-v-d82952a0]{display:flex;flex-direction:column;gap:.25rem}.form-row[data-v-d82952a0]{display:flex;align-items:flex-start;margin-bottom:1.25rem}.form-label[data-v-d82952a0]{width:120px;flex-shrink:0;color:var(--k-color-text-description);padding-top:6px;font-size:.9rem}.form-label.required[data-v-d82952a0]:after{content:"*";color:var(--k-color-error, #f56c6c);margin-left:4px}.field-container[data-v-d82952a0]{flex:1;display:flex;flex-direction:column;gap:.25rem}.field-desc[data-v-d82952a0]{font-size:.8rem;color:var(--k-color-text-description);margin-top:.25rem}.channel-config-dialog[data-v-74bfe0c7] .el-dialog__body{padding:0}.dialog-layout[data-v-74bfe0c7]{display:flex;height:560px}.tab-nav[data-v-74bfe0c7]{width:180px;flex-shrink:0;background:var(--k-color-bg-2);border-right:1px solid var(--k-color-border);padding:1rem 0}.tab-item[data-v-74bfe0c7]{display:flex;align-items:center;gap:10px;padding:12px 20px;cursor:pointer;color:var(--k-color-text-description);transition:all .2s;border-left:3px solid transparent}.tab-item[data-v-74bfe0c7]:hover{background:var(--k-color-bg-1);color:var(--k-color-text)}.tab-item.active[data-v-74bfe0c7]{background:var(--k-card-bg);color:var(--k-color-active);border-left-color:var(--k-color-active)}.tab-item .k-icon[data-v-74bfe0c7]{font-size:16px}.tab-badge[data-v-74bfe0c7]{margin-left:auto;min-width:20px;height:20px;padding:0 6px;background:var(--k-color-bg-1);border-radius:10px;font-size:11px;display:flex;align-items:center;justify-content:center}.tab-item.active .tab-badge[data-v-74bfe0c7]{background:var(--k-color-active);color:#fff}.tab-content[data-v-74bfe0c7]{flex:1;overflow-y:auto;padding:1.5rem;background:var(--k-card-bg)}.content-section[data-v-74bfe0c7]{max-width:560px}.section-header[data-v-74bfe0c7]{margin-bottom:1.5rem}.section-header h4[data-v-74bfe0c7]{margin:0 0 4px;font-size:16px;font-weight:600;color:var(--k-color-text)}.section-header p[data-v-74bfe0c7]{margin:0;font-size:13px;color:var(--k-color-text-description)}.form-group[data-v-74bfe0c7]{margin-bottom:1.25rem}.form-row[data-v-74bfe0c7]{display:flex;gap:1.5rem}.flex-1[data-v-74bfe0c7]{flex:1}.form-label[data-v-74bfe0c7]{display:block;margin-bottom:6px;font-size:13px;color:var(--k-color-text);font-weight:500}.form-label.required[data-v-74bfe0c7]:after{content:"*";color:var(--k-color-error, #f56c6c);margin-left:4px}.form-hint[data-v-74bfe0c7]{margin-top:6px;font-size:12px;color:var(--k-color-text-description)}.switch-wrapper[data-v-74bfe0c7]{display:flex;align-items:center;gap:8px;height:32px}.switch-label[data-v-74bfe0c7]{font-size:13px;color:var(--k-color-text-description)}.section-divider[data-v-74bfe0c7]{display:flex;align-items:center;margin:1.5rem 0 1rem;font-size:13px;font-weight:500;color:var(--k-color-text)}.section-divider[data-v-74bfe0c7]:before,.section-divider[data-v-74bfe0c7]:after{content:"";flex:1;height:1px;background:var(--k-color-border)}.section-divider[data-v-74bfe0c7]:before{margin-right:12px}.section-divider[data-v-74bfe0c7]:after{margin-left:12px}.empty-hint[data-v-74bfe0c7]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:3rem;color:var(--k-color-text-description)}.empty-hint .k-icon[data-v-74bfe0c7]{font-size:2rem;opacity:.5}.override-hint-bar[data-v-74bfe0c7]{display:flex;align-items:center;gap:8px;padding:10px 14px;background:var(--k-color-bg-2);border-radius:8px;font-size:13px;color:var(--k-color-text-description);margin-bottom:1.5rem}.override-hint-bar .k-icon[data-v-74bfe0c7]{color:var(--k-color-active)}.pipeline-flow[data-v-74bfe0c7],.phase-section[data-v-74bfe0c7]{display:flex;flex-direction:column}.phase-header[data-v-74bfe0c7]{display:flex;align-items:center;gap:12px;padding:12px 16px;background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:10px;transition:all .2s}.phase-icon[data-v-74bfe0c7]{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:8px;font-size:16px}.phase-prepare .phase-icon[data-v-74bfe0c7]{background:#3b82f626;color:#3b82f6}.phase-pre .phase-icon[data-v-74bfe0c7]{background:#8b5cf626;color:#8b5cf6}.phase-request .phase-icon[data-v-74bfe0c7]{background:#22c55e26;color:#22c55e}.phase-post .phase-icon[data-v-74bfe0c7]{background:#f9731626;color:#f97316}.phase-finalize .phase-icon[data-v-74bfe0c7]{background:#6366f126;color:#6366f1}.phase-info[data-v-74bfe0c7]{flex:1;display:flex;flex-direction:column;gap:2px}.phase-name[data-v-74bfe0c7]{font-size:14px;font-weight:600;color:var(--k-color-text)}.phase-desc[data-v-74bfe0c7]{font-size:11px;color:var(--k-color-text-description)}.phase-badge[data-v-74bfe0c7]{min-width:24px;height:24px;padding:0 8px;background:var(--k-color-bg-2);border-radius:12px;font-size:12px;font-weight:500;color:var(--k-color-text-description);display:flex;align-items:center;justify-content:center}.phase-middlewares[data-v-74bfe0c7]{display:flex;flex-direction:column;margin-left:24px;padding-left:24px;border-left:2px solid var(--k-color-border)}.mw-item[data-v-74bfe0c7]{position:relative}.mw-item[data-v-74bfe0c7]:before{content:"";position:absolute;left:-25px;top:50%;width:12px;height:2px;background:var(--k-color-border)}.mw-item.has-override[data-v-74bfe0c7]:before{background:var(--k-color-active)}.mw-card[data-v-74bfe0c7]{display:flex;align-items:center;gap:12px;padding:10px 14px;margin:6px 0;background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:8px;transition:all .2s}.mw-item.has-override .mw-card[data-v-74bfe0c7]{border-color:var(--k-color-active);background:var(--k-color-active-bg)}.mw-status[data-v-74bfe0c7]{width:8px;height:8px;border-radius:50%;background:var(--k-color-text-description);flex-shrink:0}.mw-status.active[data-v-74bfe0c7]{background:#22c55e;box-shadow:0 0 8px #22c55e66}.mw-status.override[data-v-74bfe0c7]{background:var(--k-color-active);box-shadow:0 0 8px var(--k-color-active)}.mw-content[data-v-74bfe0c7]{flex:1;display:flex;flex-direction:column;gap:2px;min-width:0}.mw-name[data-v-74bfe0c7]{font-size:13px;font-weight:500;color:var(--k-color-text)}.mw-desc[data-v-74bfe0c7]{font-size:11px;color:var(--k-color-text-description);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mw-switch[data-v-74bfe0c7]{width:120px;flex-shrink:0}.empty-phase[data-v-74bfe0c7]{margin-left:24px;padding:12px 24px;border-left:2px dashed var(--k-color-border);color:var(--k-color-text-description);font-size:12px;font-style:italic}.phase-connector[data-v-74bfe0c7]{display:flex;flex-direction:column;align-items:center;padding:4px 0}.connector-line[data-v-74bfe0c7]{width:2px;height:8px;background:var(--k-color-border)}.connector-arrow[data-v-74bfe0c7]{display:flex;align-items:center;justify-content:center;width:20px;height:20px;color:var(--k-color-text-description);font-size:12px}.pipeline-footer[data-v-74bfe0c7]{display:flex;flex-wrap:wrap;gap:16px;margin-top:1.5rem;padding:12px 16px;background:var(--k-color-bg-2);border-radius:10px}.footer-item[data-v-74bfe0c7]{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--k-color-text-description)}.dot[data-v-74bfe0c7]{width:8px;height:8px;border-radius:50%;background:var(--k-color-text-description)}.dot.active[data-v-74bfe0c7]{background:#22c55e}.dot.override[data-v-74bfe0c7]{background:var(--k-color-active)}.plugins-override-list[data-v-74bfe0c7]{display:flex;flex-direction:column;gap:12px}.plugin-override-card[data-v-74bfe0c7]{border:1px solid var(--k-color-border);border-radius:10px;overflow:hidden;transition:all .2s}.plugin-override-card.expanded[data-v-74bfe0c7]{border-color:var(--k-color-active)}.plugin-header[data-v-74bfe0c7]{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background:var(--k-color-bg-2);cursor:pointer;transition:background .2s}.plugin-header[data-v-74bfe0c7]:hover{background:var(--k-color-bg-1)}.plugin-info[data-v-74bfe0c7]{display:flex;align-items:center;gap:10px}.plugin-name[data-v-74bfe0c7]{font-weight:500;color:var(--k-color-text)}.override-badge[data-v-74bfe0c7]{font-size:11px;padding:2px 8px;background:var(--k-color-active);color:#fff;border-radius:10px}.plugin-actions[data-v-74bfe0c7]{display:flex;align-items:center;gap:8px}.plugin-config-fields[data-v-74bfe0c7]{padding:16px;background:var(--k-card-bg);border-top:1px solid var(--k-color-border)}.override-field-row[data-v-74bfe0c7]{margin-bottom:1rem}.override-field-row[data-v-74bfe0c7]:last-child{margin-bottom:0}.field-label[data-v-74bfe0c7]{display:block;margin-bottom:6px;font-size:13px;color:var(--k-color-text);font-weight:500}.field-input[data-v-74bfe0c7],.field-input .el-select[data-v-74bfe0c7],.field-input .el-input[data-v-74bfe0c7]{width:100%}.field-hint[data-v-74bfe0c7]{margin-top:4px;font-size:12px;color:var(--k-color-text-description)}.dialog-footer[data-v-74bfe0c7]{display:flex;justify-content:flex-end;gap:12px}.loading-state[data-v-99cf565d]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;color:var(--k-color-text-description)}.loading-state.size-small[data-v-99cf565d]{padding:1.5rem;gap:8px}.loading-state.size-small .loading-icon[data-v-99cf565d]{font-size:1.25rem}.loading-state.size-default[data-v-99cf565d]{padding:3rem}.loading-state.size-default .loading-icon[data-v-99cf565d]{font-size:1.5rem}.loading-state.size-large[data-v-99cf565d]{padding:4rem}.loading-state.size-large .loading-icon[data-v-99cf565d]{font-size:2rem}.loading-icon[data-v-99cf565d]{animation:spin-99cf565d 1s linear infinite;opacity:.6}@keyframes spin-99cf565d{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ml-view-container[data-v-67a4b49d]{height:100%;display:flex;flex-direction:column;min-height:0}.ml-view-header[data-v-67a4b49d]{flex-shrink:0;display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.ml-header-left[data-v-67a4b49d]{display:flex;align-items:center;gap:1.5rem;flex-wrap:wrap}.ml-header-right[data-v-67a4b49d]{display:flex;align-items:center;gap:1rem}.ml-view-content[data-v-67a4b49d]{flex:1 1 0;min-height:0;overflow-y:auto;overflow-x:hidden;padding:.5rem 0}.ml-card[data-v-67a4b49d]{background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:8px;overflow:hidden;transition:all .2s ease}.ml-card--clickable[data-v-67a4b49d]{cursor:pointer}.ml-card--clickable[data-v-67a4b49d]:hover{border-color:var(--k-color-active);box-shadow:0 4px 12px #00000014;transform:translateY(-2px)}.ml-card--active[data-v-67a4b49d]{border-color:var(--k-color-active);background:var(--k-color-active-bg)}.ml-card--disabled[data-v-67a4b49d]{opacity:.6}.ml-table-container[data-v-67a4b49d]{background-color:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:8px;overflow:hidden}.ml-table[data-v-67a4b49d]{width:100%;border-collapse:collapse;table-layout:fixed}.ml-table thead[data-v-67a4b49d]{background-color:var(--k-color-bg-2)}.ml-table th[data-v-67a4b49d]{padding:.875rem 1rem;font-size:.8rem;font-weight:600;color:var(--k-color-text-description);text-align:left;border-bottom:1px solid var(--k-color-border);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ml-table tbody tr[data-v-67a4b49d]{cursor:pointer;transition:background-color .15s ease}.ml-table tbody tr[data-v-67a4b49d]:hover{background-color:var(--k-color-bg-1)}.ml-table td[data-v-67a4b49d]{padding:.75rem 1rem;border-bottom:1px solid var(--k-color-border);vertical-align:middle;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ml-table tbody tr:last-child td[data-v-67a4b49d]{border-bottom:none}.ml-masonry[data-v-67a4b49d]{columns:5;column-gap:1rem}.ml-masonry-item[data-v-67a4b49d]{break-inside:avoid;margin-bottom:1rem}@media (max-width: 1400px){.ml-masonry[data-v-67a4b49d]{columns:4}}@media (max-width: 1100px){.ml-masonry[data-v-67a4b49d]{columns:3}}@media (max-width: 800px){.ml-masonry[data-v-67a4b49d]{columns:2}}@media (max-width: 500px){.ml-masonry[data-v-67a4b49d]{columns:1}}.ml-grid[data-v-67a4b49d]{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1.5rem;padding:.5rem}.ml-btn-outline-primary[data-v-67a4b49d]{color:var(--k-color-active)!important;border-color:var(--k-color-active)!important}.ml-btn-outline-primary[data-v-67a4b49d]:hover{background-color:var(--k-color-active)!important;color:#fff!important}.ml-btn-outline-danger[data-v-67a4b49d]{color:var(--k-color-error, #f56c6c)!important;border-color:var(--k-color-error, #f56c6c)!important}.ml-btn-outline-danger[data-v-67a4b49d]:hover{background-color:var(--k-color-error, #f56c6c)!important;color:#fff!important}.ml-badge[data-v-67a4b49d]{display:inline-flex;align-items:center;gap:.35rem;padding:2px 8px;background-color:var(--k-color-bg-2);border-radius:4px;font-size:.8rem;color:var(--k-color-text-description)}.ml-badge--success[data-v-67a4b49d]{background-color:var(--k-color-success-light, rgba(103, 194, 58, .1));color:var(--k-color-success, #67c23a)}.ml-badge--primary[data-v-67a4b49d]{background-color:var(--k-color-active-bg);color:var(--k-color-active)}.ml-badge--warning[data-v-67a4b49d]{background-color:var(--k-color-warning-light, rgba(230, 162, 60, .1));color:var(--k-color-warning, #e6a23c)}.ml-badge--danger[data-v-67a4b49d]{background-color:var(--k-color-error-light, rgba(245, 108, 108, .1));color:var(--k-color-error, #f56c6c)}.ml-tag[data-v-67a4b49d]{font-size:.75rem;padding:1px 6px;color:var(--k-color-text-description);border:1px solid var(--k-color-border);border-radius:12px;background-color:transparent}.ml-tag--filled[data-v-67a4b49d]{background-color:var(--k-color-bg-2);border-color:transparent}.ml-form-hint[data-v-67a4b49d]{font-size:.8rem;color:var(--k-color-text-description);margin-top:4px}.ml-divider[data-v-67a4b49d]{height:1px;background-color:var(--k-color-border);margin:1rem 0}@keyframes ml-spin-67a4b49d{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ml-spin[data-v-67a4b49d]{animation:ml-spin-67a4b49d 1s linear infinite}@keyframes ml-fade-in-67a4b49d{0%{opacity:0}to{opacity:1}}.ml-fade-in[data-v-67a4b49d]{animation:ml-fade-in-67a4b49d .3s ease}.ml-scrollbar[data-v-67a4b49d],.ml-view-content[data-v-67a4b49d]{scrollbar-width:thin;scrollbar-color:transparent transparent}.ml-scrollbar[data-v-67a4b49d]:hover,.ml-view-content[data-v-67a4b49d]:hover{scrollbar-color:var(--k-color-border) transparent}.ml-scrollbar[data-v-67a4b49d]::-webkit-scrollbar,.ml-view-content[data-v-67a4b49d]::-webkit-scrollbar{width:6px;height:6px}.ml-scrollbar[data-v-67a4b49d]::-webkit-scrollbar-track,.ml-view-content[data-v-67a4b49d]::-webkit-scrollbar-track{background:transparent}.ml-scrollbar[data-v-67a4b49d]::-webkit-scrollbar-thumb,.ml-view-content[data-v-67a4b49d]::-webkit-scrollbar-thumb{background-color:transparent;border-radius:3px;transition:background-color .2s}.ml-scrollbar[data-v-67a4b49d]:hover::-webkit-scrollbar-thumb,.ml-view-content[data-v-67a4b49d]:hover::-webkit-scrollbar-thumb{background-color:var(--k-color-border)}.ml-scrollbar[data-v-67a4b49d]::-webkit-scrollbar-thumb:hover,.ml-view-content[data-v-67a4b49d]::-webkit-scrollbar-thumb:hover{background-color:var(--k-color-text-description)}.card-header[data-v-67a4b49d]{padding:1rem 1.25rem .75rem;display:flex;flex-direction:column;gap:.5rem}.header-main[data-v-67a4b49d]{display:flex;justify-content:space-between;align-items:center}.header-meta[data-v-67a4b49d]{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.channel-name[data-v-67a4b49d]{font-size:1.1rem;font-weight:600;color:var(--k-color-text);display:flex;align-items:center;gap:.5rem}.connector-badge[data-v-67a4b49d]{display:inline-flex;align-items:center;gap:.35rem;padding:2px 8px;background-color:var(--k-color-bg-2);border-radius:4px;font-size:.8rem;color:var(--k-color-text-description)}.cost-badge[data-v-67a4b49d]{display:inline-flex;align-items:center;padding:2px 8px;background-color:var(--k-color-success-light, rgba(103, 194, 58, .1));color:var(--k-color-success, #67c23a);border-radius:4px;font-size:.8rem;font-weight:500}.card-body[data-v-67a4b49d]{flex-grow:1;padding:0 1.25rem 1rem;min-height:40px}.field-list[data-v-67a4b49d]{display:flex;flex-direction:column;gap:.25rem;margin-bottom:.75rem}.field-item[data-v-67a4b49d]{display:flex;justify-content:space-between;align-items:center;font-size:.85rem;padding:.25rem 0;border-bottom:1px dashed var(--k-color-border)}.field-item[data-v-67a4b49d]:last-child{border-bottom:none}.field-label[data-v-67a4b49d]{color:var(--k-color-text-description)}.field-value[data-v-67a4b49d]{font-weight:500;color:var(--k-color-text)}.tags-list[data-v-67a4b49d]{display:flex;flex-wrap:wrap;gap:6px}.tag-pill[data-v-67a4b49d]{font-size:.75rem;padding:1px 6px;color:var(--k-color-text-description);border:1px solid var(--k-color-border);border-radius:12px;background-color:transparent}.card-footer[data-v-67a4b49d]{padding:.75rem 1.25rem;border-top:1px solid var(--k-color-border);display:flex;align-items:center;gap:.5rem;background-color:#00000005}.spacer[data-v-67a4b49d]{flex-grow:1}.col-name[data-v-67a4b49d]{width:20%}.col-connector[data-v-67a4b49d]{width:15%}.col-tags[data-v-67a4b49d]{width:auto}.col-cost[data-v-67a4b49d]{width:12%}.col-status[data-v-67a4b49d]{width:8%}.col-actions[data-v-67a4b49d]{width:15%}.name-text[data-v-67a4b49d]{font-weight:600;color:var(--k-color-text);display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tags-wrapper[data-v-67a4b49d]{display:flex;flex-wrap:wrap;gap:4px}.mini-tag[data-v-67a4b49d]{font-size:.7rem;padding:1px 6px;color:var(--k-color-text-description);border:1px solid var(--k-color-border);border-radius:10px;background-color:transparent}.mini-tag.more[data-v-67a4b49d]{background-color:var(--k-color-bg-2)}.cost-value[data-v-67a4b49d]{font-size:.85rem;color:var(--k-color-success, #67c23a);font-weight:500}.action-btns[data-v-67a4b49d]{display:flex;gap:.5rem}.json-editor[data-v-4d47b7db]{width:100%}.code-input[data-v-4d47b7db] textarea{font-family:monospace;font-size:.85rem;background-color:var(--k-color-bg-2);line-height:1.5;border-radius:4px}.error-msg[data-v-4d47b7db]{color:var(--k-color-error);font-size:.75rem;margin-top:4px;display:flex;align-items:center;gap:4px}.error-msg[data-v-4d47b7db]:before{content:"⚠"}.image-upload[data-v-47f2485e]{display:flex;flex-direction:column;gap:.75rem}.image-list[data-v-47f2485e]{display:flex;flex-wrap:wrap;gap:.75rem}.image-item[data-v-47f2485e]{width:80px}.image-preview[data-v-47f2485e]{width:80px;height:80px;border-radius:6px;overflow:hidden;position:relative;border:1px solid var(--k-color-border);background-color:var(--k-color-bg-2)}.image-preview img[data-v-47f2485e]{width:100%;height:100%;object-fit:cover}.image-overlay[data-v-47f2485e]{position:absolute;top:0;right:0;bottom:0;left:0;background-color:#00000080;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .2s ease}.image-preview:hover .image-overlay[data-v-47f2485e]{opacity:1}.remove-btn[data-v-47f2485e]{background-color:var(--k-color-error, #f56c6c)!important;color:#fff!important;border:none!important}.image-name[data-v-47f2485e]{font-size:.7rem;color:var(--k-color-text-description);margin-top:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center}.upload-area[data-v-47f2485e]{border:2px dashed var(--k-color-border);border-radius:8px;padding:1.5rem;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;background-color:var(--k-color-bg-2)}.upload-area[data-v-47f2485e]:hover{border-color:var(--k-color-active);background-color:var(--k-color-bg-1)}.upload-content[data-v-47f2485e]{display:flex;flex-direction:column;align-items:center;gap:.5rem;color:var(--k-color-text-description)}.upload-icon[data-v-47f2485e]{font-size:1.5rem;color:var(--k-color-active)}.upload-text[data-v-47f2485e]{font-size:.85rem}.upload-loading[data-v-47f2485e]{display:flex;align-items:center;gap:.5rem;color:var(--k-color-text-description);font-size:.85rem}.loading-icon[data-v-47f2485e]{animation:spin-47f2485e 1s linear infinite}@keyframes spin-47f2485e{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ml-view-container[data-v-8eaa50b4]{height:100%;display:flex;flex-direction:column;min-height:0}.ml-view-header[data-v-8eaa50b4]{flex-shrink:0;display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.ml-header-left[data-v-8eaa50b4]{display:flex;align-items:center;gap:1.5rem;flex-wrap:wrap}.ml-header-right[data-v-8eaa50b4]{display:flex;align-items:center;gap:1rem}.ml-view-content[data-v-8eaa50b4]{flex:1 1 0;min-height:0;overflow-y:auto;overflow-x:hidden;padding:.5rem 0}.ml-card[data-v-8eaa50b4]{background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:8px;overflow:hidden;transition:all .2s ease}.ml-card--clickable[data-v-8eaa50b4]{cursor:pointer}.ml-card--clickable[data-v-8eaa50b4]:hover{border-color:var(--k-color-active);box-shadow:0 4px 12px #00000014;transform:translateY(-2px)}.ml-card--active[data-v-8eaa50b4]{border-color:var(--k-color-active);background:var(--k-color-active-bg)}.ml-card--disabled[data-v-8eaa50b4]{opacity:.6}.ml-table-container[data-v-8eaa50b4]{background-color:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:8px;overflow:hidden}.ml-table[data-v-8eaa50b4]{width:100%;border-collapse:collapse;table-layout:fixed}.ml-table thead[data-v-8eaa50b4]{background-color:var(--k-color-bg-2)}.ml-table th[data-v-8eaa50b4]{padding:.875rem 1rem;font-size:.8rem;font-weight:600;color:var(--k-color-text-description);text-align:left;border-bottom:1px solid var(--k-color-border);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ml-table tbody tr[data-v-8eaa50b4]{cursor:pointer;transition:background-color .15s ease}.ml-table tbody tr[data-v-8eaa50b4]:hover{background-color:var(--k-color-bg-1)}.ml-table td[data-v-8eaa50b4]{padding:.75rem 1rem;border-bottom:1px solid var(--k-color-border);vertical-align:middle;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ml-table tbody tr:last-child td[data-v-8eaa50b4]{border-bottom:none}.ml-masonry[data-v-8eaa50b4]{columns:5;column-gap:1rem}.ml-masonry-item[data-v-8eaa50b4]{break-inside:avoid;margin-bottom:1rem}@media (max-width: 1400px){.ml-masonry[data-v-8eaa50b4]{columns:4}}@media (max-width: 1100px){.ml-masonry[data-v-8eaa50b4]{columns:3}}@media (max-width: 800px){.ml-masonry[data-v-8eaa50b4]{columns:2}}@media (max-width: 500px){.ml-masonry[data-v-8eaa50b4]{columns:1}}.ml-grid[data-v-8eaa50b4]{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1.5rem;padding:.5rem}.ml-btn-outline-primary[data-v-8eaa50b4]{color:var(--k-color-active)!important;border-color:var(--k-color-active)!important}.ml-btn-outline-primary[data-v-8eaa50b4]:hover{background-color:var(--k-color-active)!important;color:#fff!important}.ml-btn-outline-danger[data-v-8eaa50b4]{color:var(--k-color-error, #f56c6c)!important;border-color:var(--k-color-error, #f56c6c)!important}.ml-btn-outline-danger[data-v-8eaa50b4]:hover{background-color:var(--k-color-error, #f56c6c)!important;color:#fff!important}.ml-badge[data-v-8eaa50b4]{display:inline-flex;align-items:center;gap:.35rem;padding:2px 8px;background-color:var(--k-color-bg-2);border-radius:4px;font-size:.8rem;color:var(--k-color-text-description)}.ml-badge--success[data-v-8eaa50b4]{background-color:var(--k-color-success-light, rgba(103, 194, 58, .1));color:var(--k-color-success, #67c23a)}.ml-badge--primary[data-v-8eaa50b4]{background-color:var(--k-color-active-bg);color:var(--k-color-active)}.ml-badge--warning[data-v-8eaa50b4]{background-color:var(--k-color-warning-light, rgba(230, 162, 60, .1));color:var(--k-color-warning, #e6a23c)}.ml-badge--danger[data-v-8eaa50b4]{background-color:var(--k-color-error-light, rgba(245, 108, 108, .1));color:var(--k-color-error, #f56c6c)}.ml-tag[data-v-8eaa50b4]{font-size:.75rem;padding:1px 6px;color:var(--k-color-text-description);border:1px solid var(--k-color-border);border-radius:12px;background-color:transparent}.ml-tag--filled[data-v-8eaa50b4]{background-color:var(--k-color-bg-2);border-color:transparent}.ml-form-hint[data-v-8eaa50b4]{font-size:.8rem;color:var(--k-color-text-description);margin-top:4px}.ml-divider[data-v-8eaa50b4]{height:1px;background-color:var(--k-color-border);margin:1rem 0}@keyframes ml-spin-8eaa50b4{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ml-spin[data-v-8eaa50b4]{animation:ml-spin-8eaa50b4 1s linear infinite}@keyframes ml-fade-in-8eaa50b4{0%{opacity:0}to{opacity:1}}.ml-fade-in[data-v-8eaa50b4]{animation:ml-fade-in-8eaa50b4 .3s ease}.ml-scrollbar[data-v-8eaa50b4],.ml-view-content[data-v-8eaa50b4]{scrollbar-width:thin;scrollbar-color:transparent transparent}.ml-scrollbar[data-v-8eaa50b4]:hover,.ml-view-content[data-v-8eaa50b4]:hover{scrollbar-color:var(--k-color-border) transparent}.ml-scrollbar[data-v-8eaa50b4]::-webkit-scrollbar,.ml-view-content[data-v-8eaa50b4]::-webkit-scrollbar{width:6px;height:6px}.ml-scrollbar[data-v-8eaa50b4]::-webkit-scrollbar-track,.ml-view-content[data-v-8eaa50b4]::-webkit-scrollbar-track{background:transparent}.ml-scrollbar[data-v-8eaa50b4]::-webkit-scrollbar-thumb,.ml-view-content[data-v-8eaa50b4]::-webkit-scrollbar-thumb{background-color:transparent;border-radius:3px;transition:background-color .2s}.ml-scrollbar[data-v-8eaa50b4]:hover::-webkit-scrollbar-thumb,.ml-view-content[data-v-8eaa50b4]:hover::-webkit-scrollbar-thumb{background-color:var(--k-color-border)}.ml-scrollbar[data-v-8eaa50b4]::-webkit-scrollbar-thumb:hover,.ml-view-content[data-v-8eaa50b4]::-webkit-scrollbar-thumb:hover{background-color:var(--k-color-text-description)}.preset-card[data-v-8eaa50b4]{background-color:var(--k-color-bg-1);border:1px solid var(--k-color-border);border-radius:8px;overflow:hidden;cursor:pointer;transition:all .2s ease;position:relative}.preset-card[data-v-8eaa50b4]:hover{border-color:var(--k-color-active);box-shadow:0 4px 12px #0000001a}.card-thumbnail[data-v-8eaa50b4]{width:100%;aspect-ratio:auto;position:relative;overflow:hidden;background-color:var(--k-color-bg-2)}.card-thumbnail img[data-v-8eaa50b4]{width:100%;height:auto;display:block;object-fit:cover}.card-thumbnail.placeholder[data-v-8eaa50b4]{aspect-ratio:4/3;display:flex;align-items:center;justify-content:center}.placeholder-icon[data-v-8eaa50b4]{font-size:2rem;color:var(--k-color-text-description);opacity:.5}.thumbnail-overlay[data-v-8eaa50b4]{position:absolute;bottom:0;left:0;right:0;padding:.5rem;background:linear-gradient(transparent,#0009);display:flex;justify-content:flex-end}.ref-count[data-v-8eaa50b4]{display:flex;align-items:center;gap:4px;font-size:.75rem;color:#fff;background-color:#00000080;padding:2px 6px;border-radius:4px}.card-content[data-v-8eaa50b4]{padding:.75rem}.card-title[data-v-8eaa50b4]{font-size:.9rem;font-weight:600;color:var(--k-color-text);margin-bottom:.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-tags[data-v-8eaa50b4]{display:flex;flex-wrap:wrap;gap:4px}.mini-tag[data-v-8eaa50b4]{font-size:.7rem;padding:2px 6px;background-color:var(--k-color-bg-2);color:var(--k-color-text-description);border-radius:4px}.mini-tag.more[data-v-8eaa50b4]{background-color:var(--k-color-active);color:#fff}.card-actions[data-v-8eaa50b4]{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;border-top:1px solid var(--k-color-border);background-color:var(--k-color-bg-2)}.source-indicator[data-v-8eaa50b4]{position:absolute;top:.5rem;left:.5rem;font-size:.65rem;padding:2px 6px;border-radius:4px;font-weight:600}.source-indicator.api[data-v-8eaa50b4]{background-color:var(--k-color-active);color:#fff}.source-indicator.user[data-v-8eaa50b4]{background-color:var(--k-color-warning, #e6a23c);color:#fff}.col-thumb[data-v-8eaa50b4]{width:60px}.col-name[data-v-8eaa50b4]{width:15%}.col-template[data-v-8eaa50b4]{width:auto}.col-refs[data-v-8eaa50b4]{width:10%;text-align:center!important}.col-source[data-v-8eaa50b4]{width:10%}.col-status[data-v-8eaa50b4]{width:8%}.col-actions[data-v-8eaa50b4]{width:15%}th.col-refs[data-v-8eaa50b4]{text-align:center!important}.thumb-wrapper[data-v-8eaa50b4]{width:40px;height:40px;border-radius:6px;overflow:hidden;background-color:var(--k-color-bg-2)}.thumb-wrapper img[data-v-8eaa50b4]{width:100%;height:100%;object-fit:cover}.name-text[data-v-8eaa50b4]{font-weight:600;color:var(--k-color-text);display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.template-preview[data-v-8eaa50b4]{font-size:.85rem;color:var(--k-color-text-description);display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:300px}.action-btns[data-v-8eaa50b4]{display:flex;gap:.5rem}.loading-state[data-v-8eaa50b4]{display:flex;align-items:center;justify-content:center;padding:4rem;color:var(--k-color-text-description);gap:.5rem}.form-tip[data-v-8eaa50b4]{font-size:.8rem;color:var(--k-color-text-description);margin-top:.25rem}.thumb-placeholder[data-v-8eaa50b4]{width:44px;height:44px;display:flex;align-items:center;justify-content:center;background-color:var(--k-color-bg-2);border-radius:4px;color:var(--k-color-text-description)}.source-badge[data-v-8eaa50b4]{display:inline-block;font-size:.75rem;padding:2px 8px;border-radius:4px}.source-badge.api[data-v-8eaa50b4]{background-color:var(--k-color-active);color:#fff}.source-badge.user[data-v-8eaa50b4]{background-color:var(--k-color-warning, #e6a23c);color:#fff}.no-data[data-v-8eaa50b4]{color:var(--k-color-text-description);opacity:.5}.ref-badge[data-v-8eaa50b4]{display:inline-flex;align-items:center;gap:4px;font-size:.8rem;color:var(--k-color-text-description);background-color:var(--k-color-bg-2);padding:2px 8px;border-radius:4px}.status-badge[data-v-0bc21896]{display:inline-flex;align-items:center;padding:2px 8px;border-radius:4px;font-size:.75rem;font-weight:500;line-height:1.2}.status-badge.pending[data-v-0bc21896]{background-color:var(--k-color-bg-2);color:var(--k-color-text-description)}.status-badge.processing[data-v-0bc21896]{background-color:var(--k-color-primary-bg);color:var(--k-color-primary)}.status-badge.success[data-v-0bc21896]{background-color:var(--k-color-success-bg);color:var(--k-color-success)}.status-badge.failed[data-v-0bc21896]{background-color:var(--k-color-error-bg);color:var(--k-color-error)}.lightbox-overlay[data-v-bd68872f]{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000e6;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:9999;display:flex;align-items:center;justify-content:center;padding:24px}.lightbox-container[data-v-bd68872f]{width:100%;max-width:1100px;height:90vh;max-height:850px;background:var(--k-card-bg);border-radius:12px;overflow:hidden;position:relative;box-shadow:0 25px 60px #00000080}.lightbox-content[data-v-bd68872f]{display:flex;height:100%}.lightbox-image-area[data-v-bd68872f]{flex:1;background:#0a0a0a;display:flex;align-items:center;justify-content:center;position:relative;cursor:zoom-out;min-width:0}.lightbox-image[data-v-bd68872f]{max-width:100%;max-height:100%;object-fit:contain;display:block}.close-btn[data-v-bd68872f]{position:absolute;top:16px;left:16px;z-index:10;background:#ffffff26;border:none;color:#fff;width:40px;height:40px;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s;font-size:1.1rem}.close-btn[data-v-bd68872f]:hover{background:#ffffff40;transform:scale(1.05)}.nav-btn[data-v-bd68872f]{position:absolute;top:50%;transform:translateY(-50%);background:#ffffff26;border:none;color:#fff;width:48px;height:48px;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s;font-size:1.5rem}.nav-btn[data-v-bd68872f]:hover{background:#ffffff40;transform:translateY(-50%) scale(1.08)}.nav-btn.prev[data-v-bd68872f]{left:16px}.nav-btn.next[data-v-bd68872f]{right:16px}.image-counter[data-v-bd68872f]{position:absolute;bottom:16px;left:50%;transform:translate(-50%);background:#0009;color:#fff;padding:6px 14px;border-radius:20px;font-size:.85rem;font-weight:500}.lightbox-sidebar[data-v-bd68872f]{width:280px;background:var(--k-card-bg);display:flex;flex-direction:column;border-left:1px solid var(--k-color-border);flex-shrink:0}.sidebar-header[data-v-bd68872f]{padding:14px 16px;border-bottom:1px solid var(--k-color-border);display:flex;align-items:center;justify-content:space-between}.info-title[data-v-bd68872f]{font-weight:600;font-size:.95rem;color:var(--k-color-text)}.header-close-btn[data-v-bd68872f]{background:transparent;border:none;color:var(--k-color-text-description);width:28px;height:28px;border-radius:6px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s;font-size:.9rem}.header-close-btn[data-v-bd68872f]:hover{background:var(--k-color-bg-2);color:var(--k-color-text)}.sidebar-body[data-v-bd68872f]{flex:1;overflow-y:auto;padding:16px}.info-block[data-v-bd68872f]{margin-bottom:16px}.info-block[data-v-bd68872f]:last-child{margin-bottom:0}.block-header[data-v-bd68872f]{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px;font-size:.7rem;font-weight:600;color:var(--k-color-text-description);text-transform:uppercase;letter-spacing:.5px}.copy-btn[data-v-bd68872f]{background:transparent;border:none;color:var(--k-color-active);cursor:pointer;font-size:.7rem;padding:2px 8px;border-radius:4px;transition:background .2s;font-weight:500}.copy-btn[data-v-bd68872f]:hover{background:var(--k-color-bg-2)}.prompt-content[data-v-bd68872f]{font-size:.82rem;line-height:1.5;color:var(--k-color-text);background:var(--k-color-bg-2);padding:10px 12px;border-radius:6px;white-space:pre-wrap;word-break:break-word;max-height:300px;overflow-y:auto}.prompt-content.empty[data-v-bd68872f]{color:var(--k-color-text-description);font-style:italic}.info-value[data-v-bd68872f]{font-size:.85rem;color:var(--k-color-text)}.sidebar-footer[data-v-bd68872f]{padding:12px 16px;border-top:1px solid var(--k-color-border);display:flex;gap:8px}.action-btn[data-v-bd68872f]{flex:1;padding:10px 12px;border-radius:8px;border:none;cursor:pointer;font-size:.8rem;font-weight:500;display:flex;align-items:center;justify-content:center;gap:6px;transition:all .2s}.action-btn.primary[data-v-bd68872f]{background:var(--k-color-active);color:#fff}.action-btn.primary[data-v-bd68872f]:hover{filter:brightness(1.1);transform:translateY(-1px)}.action-btn.secondary[data-v-bd68872f]{background:var(--k-color-bg-2);color:var(--k-color-text);border:1px solid var(--k-color-border)}.action-btn.secondary[data-v-bd68872f]:hover{background:var(--k-color-bg-1);border-color:var(--k-color-active);color:var(--k-color-active)}.lightbox-fade-enter-active[data-v-bd68872f],.lightbox-fade-leave-active[data-v-bd68872f]{transition:opacity .25s ease}.lightbox-fade-enter-from[data-v-bd68872f],.lightbox-fade-leave-to[data-v-bd68872f]{opacity:0}@media (max-width: 768px){.lightbox-overlay[data-v-bd68872f]{padding:0}.lightbox-container[data-v-bd68872f]{height:100%;max-height:none;border-radius:0}.lightbox-content[data-v-bd68872f]{flex-direction:column}.lightbox-image-area[data-v-bd68872f]{min-height:50vh}.lightbox-sidebar[data-v-bd68872f]{width:100%;border-left:none;border-top:1px solid var(--k-color-border)}.close-btn[data-v-bd68872f]{top:12px;left:12px}}.ml-view-container[data-v-898a70bb]{height:100%;display:flex;flex-direction:column;min-height:0}.ml-view-header[data-v-898a70bb]{flex-shrink:0;display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.ml-header-left[data-v-898a70bb]{display:flex;align-items:center;gap:1.5rem;flex-wrap:wrap}.ml-header-right[data-v-898a70bb]{display:flex;align-items:center;gap:1rem}.ml-view-content[data-v-898a70bb]{flex:1 1 0;min-height:0;overflow-y:auto;overflow-x:hidden;padding:.5rem 0}.ml-card[data-v-898a70bb]{background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:8px;overflow:hidden;transition:all .2s ease}.ml-card--clickable[data-v-898a70bb]{cursor:pointer}.ml-card--clickable[data-v-898a70bb]:hover{border-color:var(--k-color-active);box-shadow:0 4px 12px #00000014;transform:translateY(-2px)}.ml-card--active[data-v-898a70bb]{border-color:var(--k-color-active);background:var(--k-color-active-bg)}.ml-card--disabled[data-v-898a70bb]{opacity:.6}.ml-table-container[data-v-898a70bb]{background-color:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:8px;overflow:hidden}.ml-table[data-v-898a70bb]{width:100%;border-collapse:collapse;table-layout:fixed}.ml-table thead[data-v-898a70bb]{background-color:var(--k-color-bg-2)}.ml-table th[data-v-898a70bb]{padding:.875rem 1rem;font-size:.8rem;font-weight:600;color:var(--k-color-text-description);text-align:left;border-bottom:1px solid var(--k-color-border);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ml-table tbody tr[data-v-898a70bb]{cursor:pointer;transition:background-color .15s ease}.ml-table tbody tr[data-v-898a70bb]:hover{background-color:var(--k-color-bg-1)}.ml-table td[data-v-898a70bb]{padding:.75rem 1rem;border-bottom:1px solid var(--k-color-border);vertical-align:middle;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ml-table tbody tr:last-child td[data-v-898a70bb]{border-bottom:none}.ml-masonry[data-v-898a70bb]{columns:5;column-gap:1rem}.ml-masonry-item[data-v-898a70bb]{break-inside:avoid;margin-bottom:1rem}@media (max-width: 1400px){.ml-masonry[data-v-898a70bb]{columns:4}}@media (max-width: 1100px){.ml-masonry[data-v-898a70bb]{columns:3}}@media (max-width: 800px){.ml-masonry[data-v-898a70bb]{columns:2}}@media (max-width: 500px){.ml-masonry[data-v-898a70bb]{columns:1}}.ml-grid[data-v-898a70bb]{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1.5rem;padding:.5rem}.ml-btn-outline-primary[data-v-898a70bb]{color:var(--k-color-active)!important;border-color:var(--k-color-active)!important}.ml-btn-outline-primary[data-v-898a70bb]:hover{background-color:var(--k-color-active)!important;color:#fff!important}.ml-btn-outline-danger[data-v-898a70bb]{color:var(--k-color-error, #f56c6c)!important;border-color:var(--k-color-error, #f56c6c)!important}.ml-btn-outline-danger[data-v-898a70bb]:hover{background-color:var(--k-color-error, #f56c6c)!important;color:#fff!important}.ml-badge[data-v-898a70bb]{display:inline-flex;align-items:center;gap:.35rem;padding:2px 8px;background-color:var(--k-color-bg-2);border-radius:4px;font-size:.8rem;color:var(--k-color-text-description)}.ml-badge--success[data-v-898a70bb]{background-color:var(--k-color-success-light, rgba(103, 194, 58, .1));color:var(--k-color-success, #67c23a)}.ml-badge--primary[data-v-898a70bb]{background-color:var(--k-color-active-bg);color:var(--k-color-active)}.ml-badge--warning[data-v-898a70bb]{background-color:var(--k-color-warning-light, rgba(230, 162, 60, .1));color:var(--k-color-warning, #e6a23c)}.ml-badge--danger[data-v-898a70bb]{background-color:var(--k-color-error-light, rgba(245, 108, 108, .1));color:var(--k-color-error, #f56c6c)}.ml-tag[data-v-898a70bb]{font-size:.75rem;padding:1px 6px;color:var(--k-color-text-description);border:1px solid var(--k-color-border);border-radius:12px;background-color:transparent}.ml-tag--filled[data-v-898a70bb]{background-color:var(--k-color-bg-2);border-color:transparent}.ml-form-hint[data-v-898a70bb]{font-size:.8rem;color:var(--k-color-text-description);margin-top:4px}.ml-divider[data-v-898a70bb]{height:1px;background-color:var(--k-color-border);margin:1rem 0}@keyframes ml-spin-898a70bb{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ml-spin[data-v-898a70bb]{animation:ml-spin-898a70bb 1s linear infinite}@keyframes ml-fade-in-898a70bb{0%{opacity:0}to{opacity:1}}.ml-fade-in[data-v-898a70bb]{animation:ml-fade-in-898a70bb .3s ease}.ml-scrollbar[data-v-898a70bb],.ml-view-content[data-v-898a70bb]{scrollbar-width:thin;scrollbar-color:transparent transparent}.ml-scrollbar[data-v-898a70bb]:hover,.ml-view-content[data-v-898a70bb]:hover{scrollbar-color:var(--k-color-border) transparent}.ml-scrollbar[data-v-898a70bb]::-webkit-scrollbar,.ml-view-content[data-v-898a70bb]::-webkit-scrollbar{width:6px;height:6px}.ml-scrollbar[data-v-898a70bb]::-webkit-scrollbar-track,.ml-view-content[data-v-898a70bb]::-webkit-scrollbar-track{background:transparent}.ml-scrollbar[data-v-898a70bb]::-webkit-scrollbar-thumb,.ml-view-content[data-v-898a70bb]::-webkit-scrollbar-thumb{background-color:transparent;border-radius:3px;transition:background-color .2s}.ml-scrollbar[data-v-898a70bb]:hover::-webkit-scrollbar-thumb,.ml-view-content[data-v-898a70bb]:hover::-webkit-scrollbar-thumb{background-color:var(--k-color-border)}.ml-scrollbar[data-v-898a70bb]::-webkit-scrollbar-thumb:hover,.ml-view-content[data-v-898a70bb]::-webkit-scrollbar-thumb:hover{background-color:var(--k-color-text-description)}.view-mode-switch[data-v-898a70bb]{display:flex;gap:2px;background-color:var(--k-color-bg-2);border:1px solid var(--k-color-border);border-radius:6px;padding:2px}.mode-btn[data-v-898a70bb]{display:flex;align-items:center;justify-content:center;width:32px;height:28px;border:none;background:transparent;color:var(--k-color-text-description);cursor:pointer;border-radius:4px;transition:all .2s ease;font-size:16px}.mode-btn[data-v-898a70bb]:hover{color:var(--k-color-text);background-color:var(--k-color-bg-1)}.mode-btn.active[data-v-898a70bb]{color:var(--k-color-active);background-color:var(--k-card-bg);box-shadow:0 1px 3px #0000001a}.stats-grid[data-v-898a70bb]{flex-shrink:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:1rem;margin-bottom:2rem}.stat-card[data-v-898a70bb]{background:var(--k-card-bg);border:1px solid transparent;border-radius:16px;padding:1.5rem;display:flex;flex-direction:row;align-items:center;justify-content:space-between;transition:all .3s cubic-bezier(.25,.8,.25,1);position:relative;overflow:hidden;box-shadow:0 2px 8px #0000000a}.stat-card[data-v-898a70bb]:hover{transform:translateY(-4px);box-shadow:0 8px 24px #00000014}.stat-icon[data-v-898a70bb]{width:48px;height:48px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:1.5rem;flex-shrink:0;background-color:var(--k-color-bg-2);color:var(--k-color-text-description);transition:all .3s ease}.stat-card:hover .stat-icon[data-v-898a70bb]{transform:scale(1.1)}.stat-icon.total[data-v-898a70bb]{background-color:rgba(var(--k-color-primary-rgb),.1);color:var(--k-color-primary)}.stat-icon.success[data-v-898a70bb]{background-color:rgba(var(--k-color-success-rgb),.1);color:var(--k-color-success)}.stat-icon.failed[data-v-898a70bb]{background-color:rgba(var(--k-color-error-rgb),.1);color:var(--k-color-error)}.stat-icon.processing[data-v-898a70bb]{background-color:rgba(var(--k-color-warning-rgb),.1);color:var(--k-color-warning)}.stat-icon.rate[data-v-898a70bb]{background-color:rgba(var(--k-color-info-rgb),.1);color:var(--k-color-info)}.stat-content[data-v-898a70bb]{display:flex;flex-direction:column-reverse;align-items:flex-end;flex-grow:1;margin-left:1rem}.stat-label[data-v-898a70bb]{font-size:.85rem;color:var(--k-color-text-description);margin-top:.5rem;font-weight:500;text-transform:uppercase;letter-spacing:.05em}.stat-value[data-v-898a70bb]{font-size:2rem;font-weight:700;color:var(--k-color-text);line-height:1;letter-spacing:-.03em}.stat-value.success[data-v-898a70bb]{color:var(--k-color-success)}.stat-value.failed[data-v-898a70bb]{color:var(--k-color-error)}.stat-value.pending[data-v-898a70bb]{color:var(--k-color-warning)}.filter-bar[data-v-898a70bb]{flex-shrink:0;display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem;background-color:var(--k-card-bg);padding:1rem;border-radius:12px;border:1px solid var(--k-color-border)}.filter-group[data-v-898a70bb]{display:flex;gap:1rem;flex-wrap:wrap}.pagination-info[data-v-898a70bb]{color:var(--k-color-text-description);font-size:.9rem}.task-table[data-v-898a70bb]{border:1px solid var(--k-color-border);border-radius:12px;cursor:pointer;overflow:hidden;--el-table-header-bg-color: var(--k-color-bg-1);--el-table-row-hover-bg-color: var(--k-color-bg-2);--el-table-border-color: var(--k-color-border)}.task-table[data-v-898a70bb] .el-table__row{transition:background-color .15s ease}.task-table[data-v-898a70bb] th.el-table__cell{font-weight:600;color:var(--k-color-text-description);text-transform:uppercase;font-size:.75rem;letter-spacing:.05em}.mono-text[data-v-898a70bb]{font-family:monospace;color:var(--k-color-text-description)}.prompt-cell[data-v-898a70bb]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--k-color-text)}.time-text[data-v-898a70bb]{font-size:.85rem;color:var(--k-color-text-description)}.text-muted[data-v-898a70bb]{color:var(--k-color-text-description)}.gallery-item[data-v-898a70bb]{background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:8px;overflow:hidden;cursor:pointer;transition:all .2s ease}.gallery-item[data-v-898a70bb]:hover{border-color:var(--k-color-active);box-shadow:0 4px 12px #0000001a}.gallery-image-wrapper[data-v-898a70bb]{position:relative;width:100%;overflow:hidden;background:var(--k-color-bg-2)}.gallery-image[data-v-898a70bb],.gallery-video[data-v-898a70bb]{width:100%;display:block;transition:transform .3s}.gallery-item:hover .gallery-image[data-v-898a70bb],.gallery-item:hover .gallery-video[data-v-898a70bb]{transform:scale(1.03)}.gallery-overlay[data-v-898a70bb]{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(to top,#000c,#0000 50%);display:flex;flex-direction:column;justify-content:flex-end;padding:1.5rem;opacity:0;transition:opacity .3s}.gallery-item:hover .gallery-overlay[data-v-898a70bb]{opacity:1}.zoom-icon[data-v-898a70bb]{font-size:2rem;color:#fff;margin-bottom:auto;align-self:center;opacity:0;transform:scale(.8);transition:all .3s}.gallery-item:hover .zoom-icon[data-v-898a70bb]{opacity:1;transform:scale(1)}.gallery-info[data-v-898a70bb]{padding:.75rem}.gallery-prompt[data-v-898a70bb]{font-size:.85rem;color:var(--k-color-text);display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;line-height:1.4}.gallery-meta[data-v-898a70bb]{margin-top:.5rem;font-size:.75rem;color:var(--k-color-text-description)}.empty-gallery[data-v-898a70bb]{text-align:center;padding:4rem 2rem;color:var(--k-color-text-description)}.empty-icon[data-v-898a70bb]{font-size:3rem;margin-bottom:1rem;opacity:.5}.pagination[data-v-898a70bb]{flex-shrink:0;margin-top:1rem;padding-top:1rem;display:flex;justify-content:center;border-top:1px solid var(--k-color-border)}.task-detail[data-v-898a70bb]{display:flex;flex-direction:column;gap:1.5rem}.detail-section h3[data-v-898a70bb]{font-size:1.1rem;margin-bottom:1rem;padding-bottom:.5rem;border-bottom:1px solid var(--k-color-border);color:var(--k-color-text)}.detail-grid[data-v-898a70bb]{display:grid;grid-template-columns:repeat(2,1fr);gap:1rem;background-color:var(--k-color-bg-2);padding:1rem;border-radius:8px}.detail-item[data-v-898a70bb]{display:flex;align-items:center;gap:.5rem}.label[data-v-898a70bb]{font-weight:600;color:var(--k-color-text-description);flex-shrink:0}.code-block[data-v-898a70bb]{background-color:var(--k-color-bg-2);padding:1rem;border-radius:6px;font-family:Fira Code,monospace;font-size:.9rem;white-space:pre-wrap;word-break:break-all;max-height:300px;overflow-y:auto;border:1px solid var(--k-color-border)}.code-block.error[data-v-898a70bb]{background-color:var(--k-color-error-bg);color:var(--k-color-error);border-color:var(--k-color-error)}.output-gallery[data-v-898a70bb]{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:1rem}.output-item[data-v-898a70bb]{border:1px solid var(--k-color-border);border-radius:8px;overflow:hidden;background-color:var(--k-color-bg-2);transition:transform .2s}.output-item[data-v-898a70bb]:hover{transform:scale(1.02);box-shadow:0 4px 12px #0000001a}.output-image[data-v-898a70bb]{width:100%;height:150px;object-fit:cover;display:block}.text-asset[data-v-898a70bb]{padding:.75rem;font-size:.85rem;white-space:pre-wrap;word-break:break-word;max-height:150px;overflow-y:auto}.file-link[data-v-898a70bb]{display:flex;align-items:center;gap:.5rem;padding:1rem;color:var(--k-color-active);text-decoration:none;font-size:.85rem;word-break:break-all}.gallery-detail-dialog[data-v-898a70bb] .el-dialog__header{display:none}.gallery-detail-dialog[data-v-898a70bb] .el-dialog__body{padding:0}.gallery-detail[data-v-898a70bb]{display:flex;height:80vh;background:var(--k-card-bg);border-radius:12px;overflow:hidden}.gallery-detail-media[data-v-898a70bb]{flex:1;background:#000;display:flex;align-items:center;justify-content:center;overflow:hidden}.gallery-detail-media img[data-v-898a70bb],.gallery-detail-media video[data-v-898a70bb]{max-width:100%;max-height:100%;object-fit:contain}.gallery-detail-sidebar[data-v-898a70bb]{width:320px;display:flex;flex-direction:column;border-left:1px solid var(--k-color-border);background:var(--k-card-bg)}.sidebar-header[data-v-898a70bb]{padding:1rem;border-bottom:1px solid var(--k-color-border);display:flex;justify-content:space-between;align-items:center}.sidebar-header h3[data-v-898a70bb]{margin:0;font-size:1.1rem;color:var(--k-color-text)}.sidebar-content[data-v-898a70bb]{flex:1;padding:1rem;overflow-y:auto}.info-block[data-v-898a70bb]{margin-bottom:1.5rem}.info-label[data-v-898a70bb]{font-size:.75rem;font-weight:600;color:var(--k-color-text-description);text-transform:uppercase;letter-spacing:.05em;margin-bottom:.5rem}.info-value[data-v-898a70bb]{color:var(--k-color-text);font-size:.9rem}.info-value.prompt[data-v-898a70bb]{background:var(--k-color-bg-2);padding:.75rem;border-radius:6px;font-family:monospace;font-size:.85rem;line-height:1.5;white-space:pre-wrap;word-break:break-word;margin-bottom:.5rem;max-height:200px;overflow-y:auto}.sidebar-footer[data-v-898a70bb]{padding:1rem;border-top:1px solid var(--k-color-border);display:flex;gap:.5rem}.download-btn[data-v-898a70bb]{text-decoration:none}.cleanup-form[data-v-898a70bb]{text-align:center}.cleanup-form p[data-v-898a70bb]{margin-bottom:1rem;color:var(--k-color-text)}.dialog-footer[data-v-898a70bb]{display:flex;gap:10px;justify-content:flex-end}.history-gallery[data-v-6cba50e5]{width:240px;flex-shrink:0;min-height:0;display:flex;flex-direction:column;background-color:var(--k-card-bg);border-radius:12px;border:1px solid var(--k-color-border);overflow:hidden;transition:border-color .2s,box-shadow .2s}.history-gallery[data-v-6cba50e5]:not(.collapsed):hover{border-color:var(--k-color-active);box-shadow:0 4px 16px #00000014}.history-gallery.collapsed[data-v-6cba50e5]{width:40px}.collapsed-bar[data-v-6cba50e5]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;cursor:pointer;color:var(--k-color-text-description);transition:all .2s;gap:.5rem;padding:1rem 0}.collapsed-bar[data-v-6cba50e5]:hover{color:var(--k-color-active);background-color:var(--k-color-bg-2)}.collapsed-bar .k-icon[data-v-6cba50e5]{font-size:1.1rem}.collapsed-text[data-v-6cba50e5]{writing-mode:vertical-rl;font-size:.75rem;font-weight:500}.gallery-content[data-v-6cba50e5]{display:flex;flex-direction:column;flex:1 1 0;min-height:0;overflow:hidden}.gallery-header[data-v-6cba50e5]{padding:.75rem;border-bottom:1px solid var(--k-color-border);display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.header-left[data-v-6cba50e5]{display:flex;align-items:center;gap:.5rem}.gallery-title[data-v-6cba50e5]{font-size:.85rem;font-weight:600;color:var(--k-color-text)}.gallery-count[data-v-6cba50e5]{font-size:.7rem;background-color:var(--k-color-active);color:#fff;padding:.1rem .4rem;border-radius:10px;font-weight:500}.header-actions[data-v-6cba50e5]{display:flex;align-items:center;gap:.25rem}.action-icon[data-v-6cba50e5]{padding:.3rem;border-radius:4px;cursor:pointer;color:var(--k-color-text-description);transition:all .2s;font-size:.85rem}.action-icon[data-v-6cba50e5]:hover{color:var(--k-color-active);background-color:var(--k-color-bg-2)}.action-icon.spinning[data-v-6cba50e5]{animation:spin-6cba50e5 1s linear infinite}.gallery-list[data-v-6cba50e5]{flex:1 1 0;min-height:0;overflow-y:auto;padding:.5rem;display:flex;flex-direction:column;gap:.5rem;scrollbar-width:thin;scrollbar-color:transparent transparent}.gallery-list[data-v-6cba50e5]:hover{scrollbar-color:var(--k-color-border) transparent}.gallery-list[data-v-6cba50e5]::-webkit-scrollbar{width:4px}.gallery-list[data-v-6cba50e5]::-webkit-scrollbar-track{background:transparent}.gallery-list[data-v-6cba50e5]::-webkit-scrollbar-thumb{background-color:transparent;border-radius:2px;transition:background-color .2s}.gallery-list[data-v-6cba50e5]:hover::-webkit-scrollbar-thumb{background-color:var(--k-color-border)}.task-card[data-v-6cba50e5]{background-color:var(--k-color-bg-2);border-radius:8px;flex-shrink:0;overflow:hidden;transition:all .2s;position:relative;border:1px solid var(--k-color-border)}.task-card.clickable[data-v-6cba50e5]{cursor:pointer}.task-card.clickable[data-v-6cba50e5]:hover{background-color:var(--k-color-bg-1);box-shadow:0 2px 8px #0000001a;border-color:var(--k-color-active)}.task-card[data-v-6cba50e5]:has(.task-processing){border-color:var(--k-color-warning, #e6a23c);background-color:#e6a23c0d}.task-card[data-v-6cba50e5]:has(.task-failed){border-color:var(--k-color-error, #f56c6c);background-color:#f56c6c0d}.task-image-wrapper[data-v-6cba50e5]{position:relative;width:100%;background-color:var(--k-color-bg-1)}.task-image[data-v-6cba50e5]{width:100%;height:auto;display:block}.more-images[data-v-6cba50e5]{position:absolute;right:6px;top:6px;background:#000000b3;color:#fff;font-size:.7rem;padding:.15rem .4rem;border-radius:4px}.task-processing[data-v-6cba50e5]{padding:1.5rem 1rem;display:flex;flex-direction:column;align-items:center;gap:.5rem;background:linear-gradient(135deg,#e6a23c14,#e6a23c05)}.processing-animation[data-v-6cba50e5]{display:flex;gap:.3rem}.processing-animation .dot[data-v-6cba50e5]{width:8px;height:8px;background-color:var(--k-color-warning, #e6a23c);border-radius:50%;animation:bounce-6cba50e5 1.4s ease-in-out infinite both}.processing-animation .dot[data-v-6cba50e5]:nth-child(1){animation-delay:-.32s}.processing-animation .dot[data-v-6cba50e5]:nth-child(2){animation-delay:-.16s}@keyframes bounce-6cba50e5{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}.processing-text[data-v-6cba50e5]{font-size:.75rem;color:var(--k-color-warning, #e6a23c);font-weight:500}.task-failed[data-v-6cba50e5]{padding:1.5rem 1rem;display:flex;flex-direction:column;align-items:center;gap:.5rem;color:var(--k-color-error, #f56c6c);background:linear-gradient(135deg,#f56c6c14,#f56c6c05)}.failed-icon[data-v-6cba50e5]{font-size:1.5rem;opacity:.8}.task-failed span[data-v-6cba50e5]{font-size:.75rem;font-weight:500}.task-info[data-v-6cba50e5]{padding:.5rem}.task-prompt[data-v-6cba50e5]{font-size:.75rem;color:var(--k-color-text);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;line-height:1.4;word-break:break-all}.task-meta[data-v-6cba50e5]{display:flex;justify-content:space-between;align-items:center;margin-top:.35rem;font-size:.65rem;color:var(--k-color-text-description)}.gallery-empty[data-v-6cba50e5],.gallery-loading[data-v-6cba50e5]{flex-grow:1;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--k-color-text-description);padding:2rem 1rem;gap:.5rem}.empty-icon[data-v-6cba50e5]{font-size:2rem;opacity:.3}.gallery-empty p[data-v-6cba50e5]{font-size:.8rem;margin:0}.loading-more[data-v-6cba50e5]{display:flex;justify-content:center;padding:.5rem}.loader-small[data-v-6cba50e5]{border:2px solid var(--k-color-bg-1);border-top:2px solid var(--k-color-active);border-radius:50%;width:20px;height:20px;animation:spin-6cba50e5 1s linear infinite}@keyframes spin-6cba50e5{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ml-view-container[data-v-59115136]{height:100%;display:flex;flex-direction:column;min-height:0}.ml-view-header[data-v-59115136]{flex-shrink:0;display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.ml-header-left[data-v-59115136]{display:flex;align-items:center;gap:1.5rem;flex-wrap:wrap}.ml-header-right[data-v-59115136]{display:flex;align-items:center;gap:1rem}.ml-view-content[data-v-59115136]{flex:1 1 0;min-height:0;overflow-y:auto;overflow-x:hidden;padding:.5rem 0}.ml-card[data-v-59115136]{background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:8px;overflow:hidden;transition:all .2s ease}.ml-card--clickable[data-v-59115136]{cursor:pointer}.ml-card--clickable[data-v-59115136]:hover{border-color:var(--k-color-active);box-shadow:0 4px 12px #00000014;transform:translateY(-2px)}.ml-card--active[data-v-59115136]{border-color:var(--k-color-active);background:var(--k-color-active-bg)}.ml-card--disabled[data-v-59115136]{opacity:.6}.ml-table-container[data-v-59115136]{background-color:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:8px;overflow:hidden}.ml-table[data-v-59115136]{width:100%;border-collapse:collapse;table-layout:fixed}.ml-table thead[data-v-59115136]{background-color:var(--k-color-bg-2)}.ml-table th[data-v-59115136]{padding:.875rem 1rem;font-size:.8rem;font-weight:600;color:var(--k-color-text-description);text-align:left;border-bottom:1px solid var(--k-color-border);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ml-table tbody tr[data-v-59115136]{cursor:pointer;transition:background-color .15s ease}.ml-table tbody tr[data-v-59115136]:hover{background-color:var(--k-color-bg-1)}.ml-table td[data-v-59115136]{padding:.75rem 1rem;border-bottom:1px solid var(--k-color-border);vertical-align:middle;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ml-table tbody tr:last-child td[data-v-59115136]{border-bottom:none}.ml-masonry[data-v-59115136]{columns:5;column-gap:1rem}.ml-masonry-item[data-v-59115136]{break-inside:avoid;margin-bottom:1rem}@media (max-width: 1400px){.ml-masonry[data-v-59115136]{columns:4}}@media (max-width: 1100px){.ml-masonry[data-v-59115136]{columns:3}}@media (max-width: 800px){.ml-masonry[data-v-59115136]{columns:2}}@media (max-width: 500px){.ml-masonry[data-v-59115136]{columns:1}}.ml-grid[data-v-59115136]{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1.5rem;padding:.5rem}.ml-btn-outline-primary[data-v-59115136]{color:var(--k-color-active)!important;border-color:var(--k-color-active)!important}.ml-btn-outline-primary[data-v-59115136]:hover{background-color:var(--k-color-active)!important;color:#fff!important}.ml-btn-outline-danger[data-v-59115136]{color:var(--k-color-error, #f56c6c)!important;border-color:var(--k-color-error, #f56c6c)!important}.ml-btn-outline-danger[data-v-59115136]:hover{background-color:var(--k-color-error, #f56c6c)!important;color:#fff!important}.ml-badge[data-v-59115136]{display:inline-flex;align-items:center;gap:.35rem;padding:2px 8px;background-color:var(--k-color-bg-2);border-radius:4px;font-size:.8rem;color:var(--k-color-text-description)}.ml-badge--success[data-v-59115136]{background-color:var(--k-color-success-light, rgba(103, 194, 58, .1));color:var(--k-color-success, #67c23a)}.ml-badge--primary[data-v-59115136]{background-color:var(--k-color-active-bg);color:var(--k-color-active)}.ml-badge--warning[data-v-59115136]{background-color:var(--k-color-warning-light, rgba(230, 162, 60, .1));color:var(--k-color-warning, #e6a23c)}.ml-badge--danger[data-v-59115136]{background-color:var(--k-color-error-light, rgba(245, 108, 108, .1));color:var(--k-color-error, #f56c6c)}.ml-tag[data-v-59115136]{font-size:.75rem;padding:1px 6px;color:var(--k-color-text-description);border:1px solid var(--k-color-border);border-radius:12px;background-color:transparent}.ml-tag--filled[data-v-59115136]{background-color:var(--k-color-bg-2);border-color:transparent}.ml-form-hint[data-v-59115136]{font-size:.8rem;color:var(--k-color-text-description);margin-top:4px}.ml-divider[data-v-59115136]{height:1px;background-color:var(--k-color-border);margin:1rem 0}@keyframes ml-spin-59115136{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ml-spin[data-v-59115136]{animation:ml-spin-59115136 1s linear infinite}@keyframes ml-fade-in-59115136{0%{opacity:0}to{opacity:1}}.ml-fade-in[data-v-59115136]{animation:ml-fade-in-59115136 .3s ease}.ml-scrollbar[data-v-59115136],.ml-view-content[data-v-59115136]{scrollbar-width:thin;scrollbar-color:transparent transparent}.ml-scrollbar[data-v-59115136]:hover,.ml-view-content[data-v-59115136]:hover{scrollbar-color:var(--k-color-border) transparent}.ml-scrollbar[data-v-59115136]::-webkit-scrollbar,.ml-view-content[data-v-59115136]::-webkit-scrollbar{width:6px;height:6px}.ml-scrollbar[data-v-59115136]::-webkit-scrollbar-track,.ml-view-content[data-v-59115136]::-webkit-scrollbar-track{background:transparent}.ml-scrollbar[data-v-59115136]::-webkit-scrollbar-thumb,.ml-view-content[data-v-59115136]::-webkit-scrollbar-thumb{background-color:transparent;border-radius:3px;transition:background-color .2s}.ml-scrollbar[data-v-59115136]:hover::-webkit-scrollbar-thumb,.ml-view-content[data-v-59115136]:hover::-webkit-scrollbar-thumb{background-color:var(--k-color-border)}.ml-scrollbar[data-v-59115136]::-webkit-scrollbar-thumb:hover,.ml-view-content[data-v-59115136]::-webkit-scrollbar-thumb:hover{background-color:var(--k-color-text-description)}.preset-picker[data-v-59115136]{width:100%}.selected-preset[data-v-59115136]{display:flex;align-items:center;gap:.5rem;padding:.375rem .625rem;background-color:var(--k-color-bg-2);border:1px solid var(--k-color-border);border-radius:4px;cursor:pointer;transition:all .2s;min-height:36px}.selected-preset[data-v-59115136]:hover{border-color:var(--k-color-active);background-color:var(--k-color-bg-1)}.preset-info[data-v-59115136]{display:flex;align-items:center;gap:.5rem;flex:1;min-width:0}.preset-thumb[data-v-59115136]{width:28px;height:28px;border-radius:4px;object-fit:cover;flex-shrink:0}.preset-thumb.placeholder[data-v-59115136]{display:flex;align-items:center;justify-content:center;background-color:var(--k-color-bg-1);color:var(--k-color-text-description);font-size:.75rem}.preset-details[data-v-59115136]{display:flex;align-items:center;gap:.375rem;flex:1;min-width:0}.preset-name[data-v-59115136]{font-size:.85rem;font-weight:500;color:var(--k-color-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.preset-source[data-v-59115136]{font-size:.65rem;padding:1px 5px;border-radius:3px;flex-shrink:0}.preset-source.api[data-v-59115136]{background-color:var(--k-color-active);color:#fff}.preset-source.user[data-v-59115136]{background-color:var(--k-color-warning, #e6a23c);color:#fff}.clear-btn[data-v-59115136]{padding:3px;color:var(--k-color-text-description);cursor:pointer;transition:color .2s;flex-shrink:0;font-size:.85rem}.clear-btn[data-v-59115136]:hover{color:var(--k-color-error, #f56c6c)}.placeholder-text[data-v-59115136]{display:flex;align-items:center;gap:.4rem;color:var(--k-color-text-description);flex:1;font-size:.85rem}.dropdown-icon[data-v-59115136]{color:var(--k-color-text-description);flex-shrink:0;transition:transform .2s}.selected-preset:hover .dropdown-icon[data-v-59115136]{color:var(--k-color-active)}.picker-header[data-v-59115136]{display:flex;align-items:center;gap:1rem;margin-bottom:1rem}.preset-count[data-v-59115136]{font-size:.85rem;color:var(--k-color-text-description);flex-shrink:0}.picker-content[data-v-59115136]{max-height:65vh;overflow-y:auto;overflow-x:hidden;padding:.5rem;scrollbar-width:thin;scrollbar-color:transparent transparent}.picker-content[data-v-59115136]:hover{scrollbar-color:var(--k-color-border) transparent}.picker-content[data-v-59115136]::-webkit-scrollbar{width:6px}.picker-content[data-v-59115136]::-webkit-scrollbar-track{background:transparent}.picker-content[data-v-59115136]::-webkit-scrollbar-thumb{background-color:transparent;border-radius:3px;transition:background-color .2s}.picker-content[data-v-59115136]:hover::-webkit-scrollbar-thumb{background-color:var(--k-color-border)}.picker-content .ml-masonry[data-v-59115136]{columns:5;column-gap:1rem}.picker-content .ml-masonry-item[data-v-59115136]{break-inside:avoid;margin-bottom:1rem}@media (max-width: 1400px){.picker-content .ml-masonry[data-v-59115136]{columns:4}}@media (max-width: 1100px){.picker-content .ml-masonry[data-v-59115136]{columns:3}}@media (max-width: 800px){.picker-content .ml-masonry[data-v-59115136]{columns:2}}.preset-card[data-v-59115136]{background-color:var(--k-color-bg-1);border:2px solid var(--k-color-border);border-radius:8px;overflow:hidden;cursor:pointer;transition:all .2s ease;position:relative}.preset-card[data-v-59115136]:hover{border-color:var(--k-color-active);box-shadow:0 4px 12px #0000001a}.preset-card.selected[data-v-59115136]{border-color:var(--k-color-active);background-color:rgba(var(--k-color-primary-rgb),.05)}.card-thumbnail[data-v-59115136]{width:100%;aspect-ratio:auto;position:relative;overflow:hidden;background-color:var(--k-color-bg-2)}.card-thumbnail img[data-v-59115136]{width:100%;height:auto;display:block;object-fit:cover}.card-thumbnail.placeholder[data-v-59115136]{aspect-ratio:4/3;display:flex;align-items:center;justify-content:center}.placeholder-icon[data-v-59115136]{font-size:2rem;color:var(--k-color-text-description);opacity:.5}.thumbnail-overlay[data-v-59115136]{position:absolute;bottom:0;left:0;right:0;padding:.5rem;background:linear-gradient(transparent,#0009);display:flex;justify-content:flex-end}.ref-count[data-v-59115136]{display:flex;align-items:center;gap:4px;font-size:.75rem;color:#fff;background-color:#00000080;padding:2px 6px;border-radius:4px}.card-content[data-v-59115136]{padding:.75rem}.card-title[data-v-59115136]{font-size:.9rem;font-weight:600;color:var(--k-color-text);margin-bottom:.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-tags[data-v-59115136]{display:flex;flex-wrap:wrap;gap:4px}.mini-tag[data-v-59115136]{font-size:.7rem;padding:2px 6px;background-color:var(--k-color-bg-2);color:var(--k-color-text-description);border-radius:4px}.mini-tag.more[data-v-59115136]{background-color:var(--k-color-active);color:#fff}.card-actions[data-v-59115136]{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;border-top:1px solid var(--k-color-border);background-color:var(--k-color-bg-2)}.source-indicator[data-v-59115136]{position:absolute;top:.5rem;left:.5rem;font-size:.65rem;padding:2px 6px;border-radius:4px;font-weight:600}.source-indicator.api[data-v-59115136]{background-color:var(--k-color-active);color:#fff}.source-indicator.user[data-v-59115136]{background-color:var(--k-color-warning, #e6a23c);color:#fff}.selected-mark[data-v-59115136]{position:absolute;top:.5rem;right:.5rem;width:28px;height:28px;background-color:var(--k-color-active);border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:1rem;box-shadow:0 2px 6px #0003}.empty-state[data-v-59115136]{grid-column:1 / -1;text-align:center;padding:3rem;color:var(--k-color-text-description)}.empty-icon[data-v-59115136]{font-size:2.5rem;opacity:.3;margin-bottom:1rem}.preset-detail[data-v-59115136]{display:flex;flex-direction:column;gap:1rem}.detail-thumbnail[data-v-59115136]{width:100%;max-height:200px;overflow:hidden;border-radius:8px;background-color:var(--k-color-bg-2)}.detail-thumbnail img[data-v-59115136]{width:100%;height:auto;object-fit:contain}.detail-section[data-v-59115136]{display:flex;flex-direction:column;gap:.5rem}.detail-row[data-v-59115136]{display:flex;align-items:center;gap:.75rem}.detail-label[data-v-59115136]{font-size:.85rem;font-weight:600;color:var(--k-color-text-description)}.detail-tags[data-v-59115136]{display:flex;flex-wrap:wrap;gap:6px}.source-badge[data-v-59115136]{display:inline-block;font-size:.75rem;padding:2px 8px;border-radius:4px}.source-badge.api[data-v-59115136]{background-color:var(--k-color-active);color:#fff}.source-badge.user[data-v-59115136]{background-color:var(--k-color-warning, #e6a23c);color:#fff}.prompt-preview[data-v-59115136]{padding:.75rem;background-color:var(--k-color-bg-2);border-radius:6px;font-size:.85rem;color:var(--k-color-text);white-space:pre-wrap;word-break:break-word;max-height:150px;overflow-y:auto;font-family:monospace}.reference-images[data-v-59115136]{display:flex;gap:.5rem;flex-wrap:wrap}.ref-image[data-v-59115136]{width:80px;height:80px;object-fit:cover;border-radius:6px;border:1px solid var(--k-color-border)}.param-preview[data-v-59115136]{padding:.75rem;background-color:var(--k-color-bg-2);border-radius:6px;font-size:.8rem;font-family:monospace;white-space:pre-wrap;color:var(--k-color-text);max-height:100px;overflow-y:auto}.dialog-footer[data-v-59115136]{display:flex;gap:.75rem;justify-content:flex-end}.view-container[data-v-a3441aa4]{height:100%;display:flex;flex-direction:column;min-height:0;overflow:hidden}.view-content[data-v-a3441aa4]{flex:1 1 0;min-height:0;overflow:hidden;padding:.5rem}.generate-layout[data-v-a3441aa4]{display:flex;gap:1rem;height:100%;min-height:0}.config-panel[data-v-a3441aa4]{width:320px;flex-shrink:0;display:flex;flex-direction:column;min-height:0}.config-card[data-v-a3441aa4]{padding:1.25rem;flex:1 1 0;min-height:0;overflow-y:auto;display:flex;flex-direction:column;border-radius:12px;background-color:var(--k-card-bg);border:1px solid var(--k-color-border);box-shadow:0 2px 8px #0000000a;transition:border-color .2s,box-shadow .2s;scrollbar-width:thin;scrollbar-color:transparent transparent}.config-card[data-v-a3441aa4]:hover{border-color:var(--k-color-active);box-shadow:0 4px 16px #00000014;scrollbar-color:var(--k-color-border) transparent}.config-card[data-v-a3441aa4]::-webkit-scrollbar{width:6px}.config-card[data-v-a3441aa4]::-webkit-scrollbar-track{background:transparent}.config-card[data-v-a3441aa4]::-webkit-scrollbar-thumb{background-color:transparent;border-radius:3px;transition:background-color .2s}.config-card[data-v-a3441aa4]:hover::-webkit-scrollbar-thumb{background-color:var(--k-color-border)}.form-section[data-v-a3441aa4]{margin-bottom:1.25rem}.form-section[data-v-a3441aa4]:last-of-type{margin-bottom:0}.form-section.flex-grow[data-v-a3441aa4]{flex-grow:1;display:flex;flex-direction:column}.form-section.flex-grow[data-v-a3441aa4] .el-textarea{flex-grow:1}.form-section.flex-grow[data-v-a3441aa4] .el-textarea__inner{height:100%!important}.section-title[data-v-a3441aa4]{font-weight:600;margin-bottom:.5rem;color:var(--k-color-text);font-size:.9rem;display:flex;align-items:center;gap:.4rem}.section-title .k-icon[data-v-a3441aa4]{color:var(--k-color-active)}.form-item[data-v-a3441aa4]{margin-bottom:.75rem}.form-item[data-v-a3441aa4]:last-child{margin-bottom:0}.label[data-v-a3441aa4]{font-size:.8rem;color:var(--k-color-text-description);margin-bottom:.25rem}.form-actions[data-v-a3441aa4]{margin-top:1.25rem;padding-top:1rem;border-top:1px solid var(--k-color-border)}.generate-btn[data-v-a3441aa4]{width:100%;height:40px;font-size:.95rem;font-weight:600;transition:all .2s;background:linear-gradient(135deg,var(--k-color-primary) 0%,var(--k-color-primary-dark, var(--k-color-primary)) 100%);border:none}.generate-btn[data-v-a3441aa4]:not(:disabled):hover{transform:translateY(-2px);box-shadow:0 6px 16px rgba(var(--k-color-primary-rgb),.4);filter:brightness(1.1)}.preview-panel[data-v-a3441aa4]{flex:1 1 0;min-height:0;min-width:0;background-color:var(--k-card-bg);border-radius:12px;border:1px solid var(--k-color-border);display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem;position:relative;overflow-y:auto;transition:border-color .2s,box-shadow .2s;scrollbar-width:thin;scrollbar-color:transparent transparent}.preview-panel[data-v-a3441aa4]:hover{border-color:var(--k-color-active);box-shadow:0 4px 16px #00000014;scrollbar-color:var(--k-color-border) transparent}.preview-panel[data-v-a3441aa4]::-webkit-scrollbar{width:6px}.preview-panel[data-v-a3441aa4]::-webkit-scrollbar-track{background:transparent}.preview-panel[data-v-a3441aa4]::-webkit-scrollbar-thumb{background-color:transparent;border-radius:3px;transition:background-color .2s}.preview-panel[data-v-a3441aa4]:hover::-webkit-scrollbar-thumb{background-color:var(--k-color-border)}.empty-state[data-v-a3441aa4]{text-align:center;color:var(--k-color-text-description);display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}.empty-icon[data-v-a3441aa4]{font-size:5rem;margin-bottom:1.5rem;opacity:.2;color:var(--k-color-text)}.generating-state[data-v-a3441aa4]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;width:100%}.generating-content[data-v-a3441aa4]{display:flex;flex-direction:column;align-items:center;gap:1.5rem;padding:2rem;background:linear-gradient(135deg,rgba(var(--k-color-primary-rgb),.05),rgba(var(--k-color-primary-rgb),.02));border-radius:16px;border:1px solid rgba(var(--k-color-primary-rgb),.1)}.loader[data-v-a3441aa4]{border:4px solid var(--k-color-bg-2);border-top:4px solid var(--k-color-active);border-radius:50%;width:48px;height:48px;animation:spin-a3441aa4 1s linear infinite}@keyframes spin-a3441aa4{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.generating-info[data-v-a3441aa4]{text-align:center}.generating-title[data-v-a3441aa4]{font-size:1.1rem;font-weight:600;color:var(--k-color-text);margin:0 0 .75rem}.generating-timer[data-v-a3441aa4]{display:flex;align-items:center;justify-content:center;gap:.5rem;font-size:1.5rem;font-weight:700;color:var(--k-color-active);margin:0 0 .5rem;font-variant-numeric:tabular-nums}.generating-hint[data-v-a3441aa4]{font-size:.85rem;color:var(--k-color-text-description);margin:0}.result-container[data-v-a3441aa4]{width:100%;height:100%;display:flex;flex-direction:column}.success-result[data-v-a3441aa4]{flex-grow:1;display:flex;flex-direction:column}.output-grid[data-v-a3441aa4]{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:1.5rem;flex-grow:1;align-content:start}.output-wrapper[data-v-a3441aa4]{position:relative;border-radius:12px;overflow:hidden;border:1px solid var(--k-color-border);background-color:var(--k-card-bg);transition:all .3s cubic-bezier(.25,.8,.25,1);box-shadow:0 2px 8px #0000000a}.output-wrapper[data-v-a3441aa4]:hover{transform:translateY(-4px);box-shadow:0 8px 24px #0000001f;border-color:transparent}.output-wrapper img[data-v-a3441aa4]{width:100%;height:100%;object-fit:contain;display:block}.output-wrapper img.clickable-image[data-v-a3441aa4]{cursor:zoom-in}.output-wrapper video[data-v-a3441aa4],.output-wrapper audio[data-v-a3441aa4]{width:100%;display:block}.output-actions[data-v-a3441aa4]{position:absolute;bottom:0;left:0;right:0;padding:.5rem;background:#00000080;display:flex;justify-content:flex-end;opacity:0;transition:opacity .2s}.output-wrapper:hover .output-actions[data-v-a3441aa4]{opacity:1}.action-btn[data-v-a3441aa4]{color:#fff;padding:4px;cursor:pointer}.result-meta[data-v-a3441aa4]{margin-top:1.5rem;display:flex;gap:1.5rem;flex-wrap:wrap;color:var(--k-color-text-description);font-size:.9rem;border-top:1px solid var(--k-color-border);padding-top:1rem}.meta-item[data-v-a3441aa4]{display:flex;align-items:center;gap:.5rem}.success-badge[data-v-a3441aa4]{color:var(--k-color-success, #67c23a);font-weight:600}.error-result[data-v-a3441aa4]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:1.5rem}.error-content[data-v-a3441aa4]{display:flex;flex-direction:column;align-items:center;gap:1rem;padding:2rem;background:linear-gradient(135deg,#f56c6c14,#f56c6c05);border-radius:16px;border:1px solid rgba(245,108,108,.2)}.error-icon[data-v-a3441aa4]{font-size:3rem;color:var(--k-color-error, #f56c6c)}.error-info[data-v-a3441aa4]{text-align:center}.error-title[data-v-a3441aa4]{font-size:1.1rem;font-weight:600;color:var(--k-color-error, #f56c6c);margin:0 0 .5rem}.error-msg[data-v-a3441aa4]{color:var(--k-color-text);margin:0 0 .5rem;max-width:400px;word-break:break-word}.error-meta[data-v-a3441aa4]{font-size:.85rem;color:var(--k-color-text-description);margin:0}.retry-btn[data-v-a3441aa4]{margin-top:.5rem}.upload-area[data-v-a3441aa4]{margin-top:.25rem}.upload-list[data-v-a3441aa4]{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:.5rem}.upload-item[data-v-a3441aa4]{position:relative;width:56px;height:56px;border-radius:6px;overflow:hidden;border:1px solid var(--k-color-border);background-color:var(--k-color-bg-2)}.upload-thumb[data-v-a3441aa4]{width:100%;height:100%;object-fit:cover}.upload-overlay[data-v-a3441aa4]{position:absolute;top:0;right:0;bottom:0;left:0;background:#00000080;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .2s;cursor:pointer;color:#fff}.upload-item:hover .upload-overlay[data-v-a3441aa4]{opacity:1}.upload-trigger[data-v-a3441aa4]{width:56px;height:56px;border:2px dashed var(--k-color-border);border-radius:6px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s;background-color:var(--k-color-bg-2)}.upload-trigger[data-v-a3441aa4]:hover{border-color:var(--k-color-active);background-color:var(--k-color-bg-1)}.upload-icon[data-v-a3441aa4]{font-size:1.25rem;color:var(--k-color-text-description);transition:color .2s}.upload-trigger:hover .upload-icon[data-v-a3441aa4]{color:var(--k-color-active)}.upload-tip[data-v-a3441aa4]{font-size:.7rem;color:var(--k-color-text-description);margin-top:.35rem;opacity:.8}.text-output[data-v-a3441aa4]{padding:1rem;background-color:var(--k-color-bg-2);border-radius:6px;white-space:pre-wrap;word-break:break-word;font-family:inherit;line-height:1.6}.file-link[data-v-a3441aa4]{display:flex;align-items:center;gap:.5rem;padding:1rem;background-color:var(--k-color-bg-2);border-radius:6px;color:var(--k-color-active);text-decoration:none;transition:background-color .2s}.file-link[data-v-a3441aa4]:hover{background-color:var(--k-color-bg-3)}.pipeline-panel[data-v-b4b0cf47]{display:flex;flex-direction:column;gap:24px;max-width:560px;padding:8px}.panel-header[data-v-b4b0cf47]{display:flex;align-items:center;justify-content:space-between}.header-title h3[data-v-b4b0cf47]{margin:0;font-size:16px;font-weight:600;color:var(--k-color-text)}.header-title .subtitle[data-v-b4b0cf47]{display:block;margin-top:4px;font-size:12px;color:var(--k-color-text-description)}.pipeline-flow[data-v-b4b0cf47]{display:flex;flex-direction:column;gap:0}.phase-section[data-v-b4b0cf47]{display:flex;flex-direction:column;align-items:stretch}.phase-header[data-v-b4b0cf47]{display:flex;align-items:center;gap:12px;padding:12px 16px;background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:10px;transition:all .2s}.phase-header[data-v-b4b0cf47]:hover{border-color:var(--k-color-active)}.phase-icon[data-v-b4b0cf47]{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:8px;font-size:16px}.phase-prepare .phase-icon[data-v-b4b0cf47]{background:#3b82f626;color:#3b82f6}.phase-pre .phase-icon[data-v-b4b0cf47]{background:#8b5cf626;color:#8b5cf6}.phase-request .phase-icon[data-v-b4b0cf47]{background:#22c55e26;color:#22c55e}.phase-post .phase-icon[data-v-b4b0cf47]{background:#f9731626;color:#f97316}.phase-finalize .phase-icon[data-v-b4b0cf47]{background:#6366f126;color:#6366f1}.phase-info[data-v-b4b0cf47]{flex:1;display:flex;flex-direction:column;gap:2px}.phase-name[data-v-b4b0cf47]{font-size:14px;font-weight:600;color:var(--k-color-text)}.phase-desc[data-v-b4b0cf47]{font-size:11px;color:var(--k-color-text-description)}.phase-badge[data-v-b4b0cf47]{display:flex;align-items:center;justify-content:center;min-width:24px;height:24px;padding:0 8px;background:var(--k-color-bg-2);border-radius:12px;font-size:12px;font-weight:500;color:var(--k-color-text-description)}.phase-middlewares[data-v-b4b0cf47]{display:flex;flex-direction:column;gap:0;margin-left:24px;padding-left:24px;border-left:2px solid var(--k-color-border)}.mw-item[data-v-b4b0cf47]{position:relative}.mw-item[data-v-b4b0cf47]:before{content:"";position:absolute;left:-25px;top:50%;width:12px;height:2px;background:var(--k-color-border)}.mw-card[data-v-b4b0cf47]{display:flex;align-items:center;gap:12px;padding:10px 14px;margin:6px 0;background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:8px;transition:all .2s}.mw-card[data-v-b4b0cf47]:hover{border-color:var(--k-color-active);background:var(--k-color-bg-1)}.mw-item.disabled .mw-card[data-v-b4b0cf47]{opacity:.6;background:var(--k-color-bg-2)}.mw-status[data-v-b4b0cf47]{width:8px;height:8px;border-radius:50%;background:var(--k-color-text-description);flex-shrink:0}.mw-status.active[data-v-b4b0cf47]{background:#22c55e;box-shadow:0 0 8px #22c55e66}.mw-content[data-v-b4b0cf47]{flex:1;display:flex;flex-direction:column;gap:2px;min-width:0}.mw-name[data-v-b4b0cf47]{font-size:13px;font-weight:500;color:var(--k-color-text)}.mw-desc[data-v-b4b0cf47]{font-size:11px;color:var(--k-color-text-description);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.toggle-switch[data-v-b4b0cf47]{position:relative;display:inline-block;width:40px;height:22px;cursor:pointer;flex-shrink:0}.toggle-switch input[data-v-b4b0cf47]{opacity:0;width:0;height:0}.slider[data-v-b4b0cf47]{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:var(--k-color-bg-2);border:1px solid var(--k-color-border);border-radius:22px;transition:.2s}.slider[data-v-b4b0cf47]:before{position:absolute;content:"";height:16px;width:16px;left:2px;bottom:2px;background-color:var(--k-color-text-description);border-radius:50%;transition:.2s}.toggle-switch input:checked+.slider[data-v-b4b0cf47]{background-color:var(--k-color-active);border-color:var(--k-color-active)}.toggle-switch input:checked+.slider[data-v-b4b0cf47]:before{transform:translate(18px);background-color:#fff}.empty-phase[data-v-b4b0cf47]{margin-left:24px;padding:12px 24px;border-left:2px dashed var(--k-color-border);color:var(--k-color-text-description);font-size:12px;font-style:italic}.phase-connector[data-v-b4b0cf47]{display:flex;flex-direction:column;align-items:center;padding:4px 0}.connector-line[data-v-b4b0cf47]{width:2px;height:8px;background:var(--k-color-border)}.connector-arrow[data-v-b4b0cf47]{display:flex;align-items:center;justify-content:center;width:20px;height:20px;color:var(--k-color-text-description);font-size:12px}.pipeline-footer[data-v-b4b0cf47]{display:flex;flex-direction:column;gap:8px;padding:16px;background:var(--k-color-bg-2);border-radius:10px}.footer-item[data-v-b4b0cf47]{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--k-color-text-description)}.dot[data-v-b4b0cf47]{width:8px;height:8px;border-radius:50%;background:var(--k-color-text-description)}.dot.active[data-v-b4b0cf47]{background:#22c55e}.footer-hint[data-v-b4b0cf47]{margin:8px 0 0;padding-top:8px;border-top:1px solid var(--k-color-border);font-size:11px;color:var(--k-color-text-description);opacity:.8}.plugins-panel[data-v-bfb4a81f]{display:flex;gap:1.5rem;height:100%}.loading-state[data-v-bfb4a81f],.empty-state[data-v-bfb4a81f]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:3rem;color:var(--k-color-text-description);width:100%}.loading-state .k-icon[data-v-bfb4a81f],.empty-state .k-icon[data-v-bfb4a81f]{font-size:2rem;opacity:.5}.empty-state .hint[data-v-bfb4a81f]{font-size:12px;opacity:.7}.spin[data-v-bfb4a81f]{animation:spin-bfb4a81f 1s linear infinite}@keyframes spin-bfb4a81f{to{transform:rotate(360deg)}}.plugins-list[data-v-bfb4a81f]{width:280px;flex-shrink:0;display:flex;flex-direction:column;gap:8px;max-height:calc(100vh - 200px);overflow-y:auto}.plugin-card[data-v-bfb4a81f]{background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:10px;padding:12px 14px;cursor:pointer;transition:all .2s}.plugin-card[data-v-bfb4a81f]:hover{border-color:var(--k-color-active);box-shadow:0 2px 8px #00000014}.plugin-card.active[data-v-bfb4a81f]{border-color:var(--k-color-active);background:var(--k-color-active-bg)}.plugin-card.disabled[data-v-bfb4a81f]{opacity:.6}.plugin-info[data-v-bfb4a81f]{margin-bottom:8px}.plugin-header[data-v-bfb4a81f]{display:flex;align-items:center;gap:6px;margin-bottom:4px}.plugin-name[data-v-bfb4a81f]{font-weight:500;color:var(--k-color-text)}.plugin-version[data-v-bfb4a81f]{font-size:11px;color:var(--k-color-text-description);background:var(--k-color-bg-2);padding:1px 6px;border-radius:4px}.plugin-description[data-v-bfb4a81f]{font-size:12px;color:var(--k-color-text-description);margin:0;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.plugin-status[data-v-bfb4a81f]{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.plugin-badge[data-v-bfb4a81f]{font-size:10px;padding:2px 6px;border-radius:4px;background:var(--k-color-bg-2);color:var(--k-color-text-description)}.plugin-badge.connector[data-v-bfb4a81f]{background:rgba(var(--k-color-active-rgb),.15);color:var(--k-color-active)}.plugin-badge.middleware[data-v-bfb4a81f]{background:rgba(var(--k-color-success-rgb),.15);color:var(--k-color-success)}.plugin-status .k-icon[data-v-bfb4a81f]{margin-left:auto}.plugin-status .enabled[data-v-bfb4a81f]{color:var(--k-color-success)}.plugin-status .disabled[data-v-bfb4a81f]{color:var(--k-color-text-description)}.plugin-detail[data-v-bfb4a81f]{flex:1;min-width:0;background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:12px;padding:1.5rem;overflow-y:auto;max-height:calc(100vh - 200px)}.detail-header[data-v-bfb4a81f]{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:1.5rem;padding-bottom:1rem;border-bottom:1px solid var(--k-color-border)}.header-left[data-v-bfb4a81f]{display:flex;align-items:center;gap:8px}.header-left h3[data-v-bfb4a81f]{margin:0;font-size:1.1rem;font-weight:600}.header-left .version[data-v-bfb4a81f]{font-size:12px;color:var(--k-color-text-description)}.header-actions[data-v-bfb4a81f]{display:flex;gap:8px}.connector-info[data-v-bfb4a81f],.middlewares-list[data-v-bfb4a81f],.config-section[data-v-bfb4a81f]{margin-bottom:1.5rem}.connector-info h4[data-v-bfb4a81f],.middlewares-list h4[data-v-bfb4a81f],.config-section h4[data-v-bfb4a81f]{font-size:14px;font-weight:500;color:var(--k-color-text);margin:0 0 .75rem}.connector-meta[data-v-bfb4a81f]{display:flex;gap:12px;font-size:13px;color:var(--k-color-text-description)}.connector-id[data-v-bfb4a81f]{font-family:monospace;background:var(--k-color-bg-2);padding:2px 8px;border-radius:4px}.middleware-tags[data-v-bfb4a81f]{display:flex;flex-wrap:wrap;gap:8px}.middleware-tag[data-v-bfb4a81f]{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;background:var(--k-color-bg-2);border-radius:6px;font-size:12px;color:var(--k-color-text-description)}.middleware-tag.enabled[data-v-bfb4a81f]{color:var(--k-color-text)}.phase-badge[data-v-bfb4a81f]{font-size:10px;padding:1px 4px;background:var(--k-color-bg-1);border-radius:3px}.config-actions[data-v-bfb4a81f]{margin-top:1rem;padding-top:1rem;border-top:1px solid var(--k-color-border)}.no-config[data-v-bfb4a81f],.no-selection[data-v-bfb4a81f]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:3rem;color:var(--k-color-text-description)}.no-config .k-icon[data-v-bfb4a81f],.no-selection .k-icon[data-v-bfb4a81f]{font-size:2rem;opacity:.5}.no-selection[data-v-bfb4a81f]{flex:1;background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:12px}.settings-view[data-v-5fa778a6]{display:flex;gap:2rem;height:100%;min-height:0}.sidebar[data-v-5fa778a6]{width:180px;flex-shrink:0}.nav-list[data-v-5fa778a6]{display:flex;flex-direction:column;gap:4px;background:var(--k-color-bg-2);border-radius:12px;padding:8px}.nav-item[data-v-5fa778a6]{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:8px;cursor:pointer;color:var(--k-color-text-description);font-size:14px;transition:all .2s}.nav-item[data-v-5fa778a6]:hover{background:var(--k-color-bg-1);color:var(--k-color-text)}.nav-item.active[data-v-5fa778a6]{background:var(--k-card-bg);color:var(--k-color-active);box-shadow:0 1px 3px #00000014}.main-content[data-v-5fa778a6]{flex:1;min-width:0;min-height:0;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;scrollbar-color:transparent transparent}.main-content[data-v-5fa778a6]:hover{scrollbar-color:var(--k-color-border) transparent}.main-content[data-v-5fa778a6]::-webkit-scrollbar{width:6px}.main-content[data-v-5fa778a6]::-webkit-scrollbar-track{background:transparent}.main-content[data-v-5fa778a6]::-webkit-scrollbar-thumb{background-color:transparent;border-radius:3px;transition:background-color .2s}.main-content[data-v-5fa778a6]:hover::-webkit-scrollbar-thumb{background-color:var(--k-color-border)}.loading[data-v-5fa778a6]{display:flex;align-items:center;justify-content:center;gap:8px;padding:4rem;color:var(--k-color-text-description)}.spin[data-v-5fa778a6]{animation:spin-5fa778a6 1s linear infinite}@keyframes spin-5fa778a6{to{transform:rotate(360deg)}}.panel-header[data-v-5fa778a6]{margin-bottom:1.5rem}.panel-header h2[data-v-5fa778a6]{font-size:1.25rem;font-weight:600;color:var(--k-color-text);margin:0 0 .5rem}.panel-header p[data-v-5fa778a6]{color:var(--k-color-text-description);font-size:14px;margin:0}.custom-panel[data-v-5fa778a6]{background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:12px;padding:1.5rem}.actions[data-v-5fa778a6]{margin-top:1.5rem;padding-top:1rem;border-top:1px solid var(--k-color-border)}.setup-storage h3[data-v-9aeaae19]{font-size:1.25rem;font-weight:600;color:var(--k-color-text);margin:0 0 .5rem}.step-desc[data-v-9aeaae19]{color:var(--k-color-text-description);margin:0 0 1.5rem}.loading-state[data-v-9aeaae19]{display:flex;align-items:center;justify-content:center;gap:.5rem;padding:3rem;color:var(--k-color-text-description)}.spin[data-v-9aeaae19]{animation:spin-9aeaae19 1s linear infinite}@keyframes spin-9aeaae19{to{transform:rotate(360deg)}}.warning-box[data-v-9aeaae19]{display:flex;gap:1rem;padding:1rem;margin-top:1rem;background:color-mix(in srgb,var(--k-color-warning) 10%,transparent);border:1px solid var(--k-color-warning);border-radius:8px;color:var(--k-color-warning)}.warning-box strong[data-v-9aeaae19]{display:block;margin-bottom:.25rem}.warning-box p[data-v-9aeaae19]{margin:0;font-size:.9rem;color:var(--k-color-text)}.step-actions[data-v-9aeaae19]{margin-top:2rem;padding-top:1.5rem;border-top:1px solid var(--k-color-border);display:flex;justify-content:flex-end}.setup-auth h3[data-v-59078dbb]{font-size:1.25rem;font-weight:600;color:var(--k-color-text);margin:0 0 .5rem}.step-desc[data-v-59078dbb]{color:var(--k-color-text-description);margin:0 0 1.5rem}.config-panel[data-v-59078dbb]{background:var(--k-card-bg);padding:1.5rem;border-radius:12px;border:1px solid var(--k-color-border);margin-bottom:1.5rem;display:flex;flex-direction:column;gap:1.5rem}.form-row[data-v-59078dbb]{display:flex;align-items:flex-start}.form-label[data-v-59078dbb]{width:120px;flex-shrink:0;color:var(--k-color-text-description);padding-top:6px;font-size:.9rem}.field-container[data-v-59078dbb]{flex:1;display:flex;flex-direction:column;gap:.5rem}.uid-input[data-v-59078dbb]{width:100%}.field-desc[data-v-59078dbb]{font-size:.8rem;color:var(--k-color-text-description)}.field-desc code[data-v-59078dbb]{background:var(--k-color-bg-2);padding:.1em .4em;border-radius:4px;font-family:monospace}.verify-section[data-v-59078dbb]{border-top:1px solid var(--k-color-border);padding-top:1.5rem;margin-top:.5rem}.verify-card[data-v-59078dbb]{background:var(--k-color-bg-2);border-radius:8px;padding:1.5rem;display:flex;gap:2rem;align-items:center}.code-display[data-v-59078dbb]{display:flex;flex-direction:column;align-items:center;gap:.5rem;padding-right:2rem;border-right:1px dashed var(--k-color-border);min-width:150px}.code-label[data-v-59078dbb]{font-size:.85rem;color:var(--k-color-text-description)}.code-value[data-v-59078dbb]{font-size:2rem;font-family:monospace;font-weight:700;color:var(--k-color-active);letter-spacing:.1em}.code-meta[data-v-59078dbb]{font-size:.8rem;color:var(--k-color-text-description)}.verify-guide[data-v-59078dbb]{flex:1}.verify-guide p[data-v-59078dbb]{margin:0 0 .75rem;font-size:.9rem;color:var(--k-color-text)}.command-box[data-v-59078dbb]{background:var(--k-card-bg);padding:.75rem 1rem;border-radius:6px;border:1px solid var(--k-color-border);display:inline-block;margin-bottom:.75rem}.command-box code[data-v-59078dbb]{font-family:monospace;color:var(--k-color-active);font-weight:600}.small-hint[data-v-59078dbb]{font-size:.8rem!important;color:var(--k-color-text-description)!important;margin:0!important}.step-actions[data-v-59078dbb]{display:flex;justify-content:flex-end;gap:.75rem;padding-top:1.5rem;border-top:1px solid var(--k-color-border)}.setup-wizard[data-v-3931ca56]{position:fixed;top:0;left:0;right:0;bottom:0;background:var(--k-color-bg-1);z-index:9999;display:flex;align-items:center;justify-content:center;overflow:auto}.wizard-container[data-v-3931ca56]{width:100%;max-width:640px;padding:2rem}.wizard-header[data-v-3931ca56]{text-align:center;margin-bottom:2rem}.wizard-header h1[data-v-3931ca56]{font-size:1.75rem;font-weight:600;color:var(--k-color-text);margin:0 0 .5rem}.wizard-header p[data-v-3931ca56]{color:var(--k-color-text-description);margin:0}.steps-indicator[data-v-3931ca56]{display:flex;justify-content:center;gap:2rem;margin-bottom:2rem}.step-item[data-v-3931ca56]{display:flex;flex-direction:column;align-items:center;gap:.5rem;position:relative}.step-item[data-v-3931ca56]:not(:last-child):after{content:"";position:absolute;left:calc(50% + 20px);top:16px;width:calc(2rem + 20px);height:2px;background:var(--k-color-border)}.step-item.completed[data-v-3931ca56]:not(:last-child):after{background:var(--k-color-success)}.step-number[data-v-3931ca56]{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:.9rem;background:var(--k-color-bg-2);color:var(--k-color-text-description);border:2px solid var(--k-color-border);transition:all .2s}.step-item.active .step-number[data-v-3931ca56]{background:var(--k-color-active);color:#fff;border-color:var(--k-color-active)}.step-item.completed .step-number[data-v-3931ca56]{background:var(--k-color-success);color:#fff;border-color:var(--k-color-success)}.step-label[data-v-3931ca56]{font-size:.85rem;color:var(--k-color-text-description)}.step-item.active .step-label[data-v-3931ca56]{color:var(--k-color-text);font-weight:500}.step-item.completed .step-label[data-v-3931ca56]{color:var(--k-color-success)}.wizard-content[data-v-3931ca56]{background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:12px;padding:2rem;min-height:400px}.step-complete[data-v-3931ca56]{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:3rem 0}.complete-icon[data-v-3931ca56]{font-size:4rem;color:var(--k-color-success);margin-bottom:1.5rem}.step-complete h2[data-v-3931ca56]{font-size:1.5rem;font-weight:600;color:var(--k-color-text);margin:0 0 .75rem}.step-complete p[data-v-3931ca56]{color:var(--k-color-text-description);margin:0 0 2rem}.fade-enter-active[data-v-3931ca56],.fade-leave-active[data-v-3931ca56]{transition:opacity .2s ease}.fade-enter-from[data-v-3931ca56],.fade-leave-to[data-v-3931ca56]{opacity:0}.app-layout[data-v-c4fa9f13]{background:var(--k-color-bg-1);height:100vh;min-height:0}.top-nav[data-v-c4fa9f13]{position:sticky;top:0;z-index:10;background:var(--k-color-bg-2);border-bottom:1px solid var(--k-color-border);height:50px}.nav-container[data-v-c4fa9f13]{max-width:1200px;margin:0 auto;padding:0 20px;height:50px;display:flex;flex-direction:row;align-items:center;gap:16px}.nav-tabs[data-v-c4fa9f13]{display:flex;flex-direction:row;gap:8px;margin-left:auto}.nav-tab[data-v-c4fa9f13]{display:inline-flex;flex-direction:row;align-items:center;gap:6px;padding:6px 12px;cursor:pointer;color:var(--k-color-text-description);border-bottom:2px solid transparent;transition:color .15s ease,border-color .15s ease;white-space:nowrap}.nav-tab[data-v-c4fa9f13]:hover{color:var(--k-color-text)}.nav-tab.active[data-v-c4fa9f13]{color:var(--k-color-active);border-bottom-color:var(--k-color-active);font-weight:600}.tab-icon[data-v-c4fa9f13]{display:inline-flex;font-size:14px;width:14px;height:14px;flex-shrink:0}.main-content[data-v-c4fa9f13]{max-width:1200px;margin:0 auto;padding:20px;height:calc(100vh - 50px);overflow:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;-ms-overflow-style:none}.main-content[data-v-c4fa9f13]::-webkit-scrollbar{width:0;height:0}.logo-area .logo-text[data-v-c4fa9f13]{font-weight:600;letter-spacing:.5px;color:var(--k-color-text);white-space:nowrap}.app-layout[data-v-c4fa9f13] .k-header,.app-layout[data-v-c4fa9f13] .k-view-header,.app-layout[data-v-c4fa9f13] .k-page-header,.app-layout[data-v-c4fa9f13] .k-toolbar{display:none!important;height:0!important;margin:0!important;padding:0!important}.el-dialog{background-color:var(--k-card-bg)!important;border-radius:12px!important;box-shadow:0 8px 32px #00000026!important;border:1px solid var(--k-color-border)!important;--el-dialog-bg-color: var(--k-card-bg) !important}.el-dialog__header{padding:1.25rem 1.5rem!important;border-bottom:1px solid var(--k-color-border)!important;margin-right:0!important}.el-dialog__title{font-weight:600!important;color:var(--k-color-text)!important;font-size:1.1rem!important}.el-dialog__headerbtn{top:1.25rem!important}.el-dialog__body{padding:1.5rem!important;color:var(--k-color-text)!important}.el-dialog__footer{padding:1.25rem 1.5rem!important;border-top:1px solid var(--k-color-border)!important;background-color:var(--k-color-bg-1)!important}.el-input__wrapper,.el-textarea__inner{background-color:var(--k-color-bg-2)!important;box-shadow:0 0 0 1px var(--k-color-border) inset!important}.el-input__wrapper:hover,.el-textarea__inner:hover{box-shadow:0 0 0 1px var(--k-color-active) inset!important}.el-input__wrapper.is-focus,.el-textarea__inner:focus{box-shadow:0 0 0 1px var(--k-color-active) inset!important;background-color:var(--k-color-bg-1)!important}.el-input__inner,.el-select-dropdown__item{color:var(--k-color-text)!important}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:var(--k-color-bg-2)!important}.el-popper.is-light{background:var(--k-card-bg)!important;border:1px solid var(--k-color-border)!important}
1
+ .tag-filter[data-v-61b504c8]{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem}.filter-tags[data-v-61b504c8]{display:flex;flex-wrap:wrap;gap:.5rem}.filter-tag[data-v-61b504c8]{padding:4px 12px;font-size:.85rem;border-radius:16px;border:1px solid var(--k-color-border);background-color:transparent;color:var(--k-color-text-description);cursor:pointer;transition:all .2s ease;-webkit-user-select:none;user-select:none}.filter-tag[data-v-61b504c8]:hover{border-color:var(--k-color-active);color:var(--k-color-active)}.filter-tag.active[data-v-61b504c8]{background-color:var(--k-color-active);border-color:var(--k-color-active);color:#fff}.filter-input-wrapper[data-v-61b504c8]{flex-shrink:0}.filter-input[data-v-61b504c8]{width:180px}.view-mode-switch[data-v-ae3ef498]{display:flex;gap:2px;background-color:var(--k-color-bg-2);border:1px solid var(--k-color-border);border-radius:6px;padding:2px}.mode-btn[data-v-ae3ef498]{display:flex;align-items:center;justify-content:center;width:32px;height:28px;border:none;background:transparent;color:var(--k-color-text-description);cursor:pointer;border-radius:4px;transition:all .2s ease;font-size:16px}.mode-btn[data-v-ae3ef498]:hover{color:var(--k-color-text);background-color:var(--k-color-bg-1)}.mode-btn.active[data-v-ae3ef498]{color:var(--k-color-active);background-color:var(--k-card-bg);box-shadow:0 1px 3px #0000001a}.tag-input[data-v-68388640],.tag-select[data-v-68388640]{width:100%}.tag-select[data-v-68388640] .el-tag{background-color:var(--k-color-bg-3);color:var(--k-color-text);border-color:transparent;border-radius:4px}.tag-select[data-v-68388640] .el-tag .el-tag__close{color:var(--k-color-text-description)}.tag-select[data-v-68388640] .el-tag .el-tag__close:hover{background-color:var(--k-color-text);color:var(--k-color-bg-1)}.config-renderer[data-v-d82952a0]{display:flex;flex-direction:column;gap:.25rem}.form-row[data-v-d82952a0]{display:flex;align-items:flex-start;margin-bottom:1.25rem}.form-label[data-v-d82952a0]{width:120px;flex-shrink:0;color:var(--k-color-text-description);padding-top:6px;font-size:.9rem}.form-label.required[data-v-d82952a0]:after{content:"*";color:var(--k-color-error, #f56c6c);margin-left:4px}.field-container[data-v-d82952a0]{flex:1;display:flex;flex-direction:column;gap:.25rem}.field-desc[data-v-d82952a0]{font-size:.8rem;color:var(--k-color-text-description);margin-top:.25rem}.channel-config-dialog[data-v-74bfe0c7] .el-dialog__body{padding:0}.dialog-layout[data-v-74bfe0c7]{display:flex;height:560px}.tab-nav[data-v-74bfe0c7]{width:180px;flex-shrink:0;background:var(--k-color-bg-2);border-right:1px solid var(--k-color-border);padding:1rem 0}.tab-item[data-v-74bfe0c7]{display:flex;align-items:center;gap:10px;padding:12px 20px;cursor:pointer;color:var(--k-color-text-description);transition:all .2s;border-left:3px solid transparent}.tab-item[data-v-74bfe0c7]:hover{background:var(--k-color-bg-1);color:var(--k-color-text)}.tab-item.active[data-v-74bfe0c7]{background:var(--k-card-bg);color:var(--k-color-active);border-left-color:var(--k-color-active)}.tab-item .k-icon[data-v-74bfe0c7]{font-size:16px}.tab-badge[data-v-74bfe0c7]{margin-left:auto;min-width:20px;height:20px;padding:0 6px;background:var(--k-color-bg-1);border-radius:10px;font-size:11px;display:flex;align-items:center;justify-content:center}.tab-item.active .tab-badge[data-v-74bfe0c7]{background:var(--k-color-active);color:#fff}.tab-content[data-v-74bfe0c7]{flex:1;overflow-y:auto;padding:1.5rem;background:var(--k-card-bg)}.content-section[data-v-74bfe0c7]{max-width:560px}.section-header[data-v-74bfe0c7]{margin-bottom:1.5rem}.section-header h4[data-v-74bfe0c7]{margin:0 0 4px;font-size:16px;font-weight:600;color:var(--k-color-text)}.section-header p[data-v-74bfe0c7]{margin:0;font-size:13px;color:var(--k-color-text-description)}.form-group[data-v-74bfe0c7]{margin-bottom:1.25rem}.form-row[data-v-74bfe0c7]{display:flex;gap:1.5rem}.flex-1[data-v-74bfe0c7]{flex:1}.form-label[data-v-74bfe0c7]{display:block;margin-bottom:6px;font-size:13px;color:var(--k-color-text);font-weight:500}.form-label.required[data-v-74bfe0c7]:after{content:"*";color:var(--k-color-error, #f56c6c);margin-left:4px}.form-hint[data-v-74bfe0c7]{margin-top:6px;font-size:12px;color:var(--k-color-text-description)}.switch-wrapper[data-v-74bfe0c7]{display:flex;align-items:center;gap:8px;height:32px}.switch-label[data-v-74bfe0c7]{font-size:13px;color:var(--k-color-text-description)}.section-divider[data-v-74bfe0c7]{display:flex;align-items:center;margin:1.5rem 0 1rem;font-size:13px;font-weight:500;color:var(--k-color-text)}.section-divider[data-v-74bfe0c7]:before,.section-divider[data-v-74bfe0c7]:after{content:"";flex:1;height:1px;background:var(--k-color-border)}.section-divider[data-v-74bfe0c7]:before{margin-right:12px}.section-divider[data-v-74bfe0c7]:after{margin-left:12px}.empty-hint[data-v-74bfe0c7]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:3rem;color:var(--k-color-text-description)}.empty-hint .k-icon[data-v-74bfe0c7]{font-size:2rem;opacity:.5}.override-hint-bar[data-v-74bfe0c7]{display:flex;align-items:center;gap:8px;padding:10px 14px;background:var(--k-color-bg-2);border-radius:8px;font-size:13px;color:var(--k-color-text-description);margin-bottom:1.5rem}.override-hint-bar .k-icon[data-v-74bfe0c7]{color:var(--k-color-active)}.pipeline-flow[data-v-74bfe0c7],.phase-section[data-v-74bfe0c7]{display:flex;flex-direction:column}.phase-header[data-v-74bfe0c7]{display:flex;align-items:center;gap:12px;padding:12px 16px;background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:10px;transition:all .2s}.phase-icon[data-v-74bfe0c7]{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:8px;font-size:16px}.phase-prepare .phase-icon[data-v-74bfe0c7]{background:#3b82f626;color:#3b82f6}.phase-pre .phase-icon[data-v-74bfe0c7]{background:#8b5cf626;color:#8b5cf6}.phase-request .phase-icon[data-v-74bfe0c7]{background:#22c55e26;color:#22c55e}.phase-post .phase-icon[data-v-74bfe0c7]{background:#f9731626;color:#f97316}.phase-finalize .phase-icon[data-v-74bfe0c7]{background:#6366f126;color:#6366f1}.phase-info[data-v-74bfe0c7]{flex:1;display:flex;flex-direction:column;gap:2px}.phase-name[data-v-74bfe0c7]{font-size:14px;font-weight:600;color:var(--k-color-text)}.phase-desc[data-v-74bfe0c7]{font-size:11px;color:var(--k-color-text-description)}.phase-badge[data-v-74bfe0c7]{min-width:24px;height:24px;padding:0 8px;background:var(--k-color-bg-2);border-radius:12px;font-size:12px;font-weight:500;color:var(--k-color-text-description);display:flex;align-items:center;justify-content:center}.phase-middlewares[data-v-74bfe0c7]{display:flex;flex-direction:column;margin-left:24px;padding-left:24px;border-left:2px solid var(--k-color-border)}.mw-item[data-v-74bfe0c7]{position:relative}.mw-item[data-v-74bfe0c7]:before{content:"";position:absolute;left:-25px;top:50%;width:12px;height:2px;background:var(--k-color-border)}.mw-item.has-override[data-v-74bfe0c7]:before{background:var(--k-color-active)}.mw-card[data-v-74bfe0c7]{display:flex;align-items:center;gap:12px;padding:10px 14px;margin:6px 0;background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:8px;transition:all .2s}.mw-item.has-override .mw-card[data-v-74bfe0c7]{border-color:var(--k-color-active);background:var(--k-color-active-bg)}.mw-status[data-v-74bfe0c7]{width:8px;height:8px;border-radius:50%;background:var(--k-color-text-description);flex-shrink:0}.mw-status.active[data-v-74bfe0c7]{background:#22c55e;box-shadow:0 0 8px #22c55e66}.mw-status.override[data-v-74bfe0c7]{background:var(--k-color-active);box-shadow:0 0 8px var(--k-color-active)}.mw-content[data-v-74bfe0c7]{flex:1;display:flex;flex-direction:column;gap:2px;min-width:0}.mw-name[data-v-74bfe0c7]{font-size:13px;font-weight:500;color:var(--k-color-text)}.mw-desc[data-v-74bfe0c7]{font-size:11px;color:var(--k-color-text-description);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mw-switch[data-v-74bfe0c7]{width:120px;flex-shrink:0}.empty-phase[data-v-74bfe0c7]{margin-left:24px;padding:12px 24px;border-left:2px dashed var(--k-color-border);color:var(--k-color-text-description);font-size:12px;font-style:italic}.phase-connector[data-v-74bfe0c7]{display:flex;flex-direction:column;align-items:center;padding:4px 0}.connector-line[data-v-74bfe0c7]{width:2px;height:8px;background:var(--k-color-border)}.connector-arrow[data-v-74bfe0c7]{display:flex;align-items:center;justify-content:center;width:20px;height:20px;color:var(--k-color-text-description);font-size:12px}.pipeline-footer[data-v-74bfe0c7]{display:flex;flex-wrap:wrap;gap:16px;margin-top:1.5rem;padding:12px 16px;background:var(--k-color-bg-2);border-radius:10px}.footer-item[data-v-74bfe0c7]{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--k-color-text-description)}.dot[data-v-74bfe0c7]{width:8px;height:8px;border-radius:50%;background:var(--k-color-text-description)}.dot.active[data-v-74bfe0c7]{background:#22c55e}.dot.override[data-v-74bfe0c7]{background:var(--k-color-active)}.plugins-override-list[data-v-74bfe0c7]{display:flex;flex-direction:column;gap:12px}.plugin-override-card[data-v-74bfe0c7]{border:1px solid var(--k-color-border);border-radius:10px;overflow:hidden;transition:all .2s}.plugin-override-card.expanded[data-v-74bfe0c7]{border-color:var(--k-color-active)}.plugin-header[data-v-74bfe0c7]{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background:var(--k-color-bg-2);cursor:pointer;transition:background .2s}.plugin-header[data-v-74bfe0c7]:hover{background:var(--k-color-bg-1)}.plugin-info[data-v-74bfe0c7]{display:flex;align-items:center;gap:10px}.plugin-name[data-v-74bfe0c7]{font-weight:500;color:var(--k-color-text)}.override-badge[data-v-74bfe0c7]{font-size:11px;padding:2px 8px;background:var(--k-color-active);color:#fff;border-radius:10px}.plugin-actions[data-v-74bfe0c7]{display:flex;align-items:center;gap:8px}.plugin-config-fields[data-v-74bfe0c7]{padding:16px;background:var(--k-card-bg);border-top:1px solid var(--k-color-border)}.override-field-row[data-v-74bfe0c7]{margin-bottom:1rem}.override-field-row[data-v-74bfe0c7]:last-child{margin-bottom:0}.field-label[data-v-74bfe0c7]{display:block;margin-bottom:6px;font-size:13px;color:var(--k-color-text);font-weight:500}.field-input[data-v-74bfe0c7],.field-input .el-select[data-v-74bfe0c7],.field-input .el-input[data-v-74bfe0c7]{width:100%}.field-hint[data-v-74bfe0c7]{margin-top:4px;font-size:12px;color:var(--k-color-text-description)}.dialog-footer[data-v-74bfe0c7]{display:flex;justify-content:flex-end;gap:12px}.loading-state[data-v-99cf565d]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;color:var(--k-color-text-description)}.loading-state.size-small[data-v-99cf565d]{padding:1.5rem;gap:8px}.loading-state.size-small .loading-icon[data-v-99cf565d]{font-size:1.25rem}.loading-state.size-default[data-v-99cf565d]{padding:3rem}.loading-state.size-default .loading-icon[data-v-99cf565d]{font-size:1.5rem}.loading-state.size-large[data-v-99cf565d]{padding:4rem}.loading-state.size-large .loading-icon[data-v-99cf565d]{font-size:2rem}.loading-icon[data-v-99cf565d]{animation:spin-99cf565d 1s linear infinite;opacity:.6}@keyframes spin-99cf565d{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ml-view-container[data-v-67a4b49d]{height:100%;display:flex;flex-direction:column;min-height:0}.ml-view-header[data-v-67a4b49d]{flex-shrink:0;display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.ml-header-left[data-v-67a4b49d]{display:flex;align-items:center;gap:1.5rem;flex-wrap:wrap}.ml-header-right[data-v-67a4b49d]{display:flex;align-items:center;gap:1rem}.ml-view-content[data-v-67a4b49d]{flex:1 1 0;min-height:0;overflow-y:auto;overflow-x:hidden;padding:.5rem 0}.ml-card[data-v-67a4b49d]{background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:8px;overflow:hidden;transition:all .2s ease}.ml-card--clickable[data-v-67a4b49d]{cursor:pointer}.ml-card--clickable[data-v-67a4b49d]:hover{border-color:var(--k-color-active);box-shadow:0 4px 12px #00000014;transform:translateY(-2px)}.ml-card--active[data-v-67a4b49d]{border-color:var(--k-color-active);background:var(--k-color-active-bg)}.ml-card--disabled[data-v-67a4b49d]{opacity:.6}.ml-table-container[data-v-67a4b49d]{background-color:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:8px;overflow:hidden}.ml-table[data-v-67a4b49d]{width:100%;border-collapse:collapse;table-layout:fixed}.ml-table thead[data-v-67a4b49d]{background-color:var(--k-color-bg-2)}.ml-table th[data-v-67a4b49d]{padding:.875rem 1rem;font-size:.8rem;font-weight:600;color:var(--k-color-text-description);text-align:left;border-bottom:1px solid var(--k-color-border);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ml-table tbody tr[data-v-67a4b49d]{cursor:pointer;transition:background-color .15s ease}.ml-table tbody tr[data-v-67a4b49d]:hover{background-color:var(--k-color-bg-1)}.ml-table td[data-v-67a4b49d]{padding:.75rem 1rem;border-bottom:1px solid var(--k-color-border);vertical-align:middle;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ml-table tbody tr:last-child td[data-v-67a4b49d]{border-bottom:none}.ml-masonry[data-v-67a4b49d]{columns:5;column-gap:1rem}.ml-masonry-item[data-v-67a4b49d]{break-inside:avoid;margin-bottom:1rem}@media (max-width: 1400px){.ml-masonry[data-v-67a4b49d]{columns:4}}@media (max-width: 1100px){.ml-masonry[data-v-67a4b49d]{columns:3}}@media (max-width: 800px){.ml-masonry[data-v-67a4b49d]{columns:2}}@media (max-width: 500px){.ml-masonry[data-v-67a4b49d]{columns:1}}.ml-grid[data-v-67a4b49d]{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1.5rem;padding:.5rem}.ml-btn-outline-primary[data-v-67a4b49d]{color:var(--k-color-active)!important;border-color:var(--k-color-active)!important}.ml-btn-outline-primary[data-v-67a4b49d]:hover{background-color:var(--k-color-active)!important;color:#fff!important}.ml-btn-outline-danger[data-v-67a4b49d]{color:var(--k-color-error, #f56c6c)!important;border-color:var(--k-color-error, #f56c6c)!important}.ml-btn-outline-danger[data-v-67a4b49d]:hover{background-color:var(--k-color-error, #f56c6c)!important;color:#fff!important}.ml-badge[data-v-67a4b49d]{display:inline-flex;align-items:center;gap:.35rem;padding:2px 8px;background-color:var(--k-color-bg-2);border-radius:4px;font-size:.8rem;color:var(--k-color-text-description)}.ml-badge--success[data-v-67a4b49d]{background-color:var(--k-color-success-light, rgba(103, 194, 58, .1));color:var(--k-color-success, #67c23a)}.ml-badge--primary[data-v-67a4b49d]{background-color:var(--k-color-active-bg);color:var(--k-color-active)}.ml-badge--warning[data-v-67a4b49d]{background-color:var(--k-color-warning-light, rgba(230, 162, 60, .1));color:var(--k-color-warning, #e6a23c)}.ml-badge--danger[data-v-67a4b49d]{background-color:var(--k-color-error-light, rgba(245, 108, 108, .1));color:var(--k-color-error, #f56c6c)}.ml-tag[data-v-67a4b49d]{font-size:.75rem;padding:1px 6px;color:var(--k-color-text-description);border:1px solid var(--k-color-border);border-radius:12px;background-color:transparent}.ml-tag--filled[data-v-67a4b49d]{background-color:var(--k-color-bg-2);border-color:transparent}.ml-form-hint[data-v-67a4b49d]{font-size:.8rem;color:var(--k-color-text-description);margin-top:4px}.ml-divider[data-v-67a4b49d]{height:1px;background-color:var(--k-color-border);margin:1rem 0}@keyframes ml-spin-67a4b49d{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ml-spin[data-v-67a4b49d]{animation:ml-spin-67a4b49d 1s linear infinite}@keyframes ml-fade-in-67a4b49d{0%{opacity:0}to{opacity:1}}.ml-fade-in[data-v-67a4b49d]{animation:ml-fade-in-67a4b49d .3s ease}.ml-scrollbar[data-v-67a4b49d],.ml-view-content[data-v-67a4b49d]{scrollbar-width:thin;scrollbar-color:transparent transparent}.ml-scrollbar[data-v-67a4b49d]:hover,.ml-view-content[data-v-67a4b49d]:hover{scrollbar-color:var(--k-color-border) transparent}.ml-scrollbar[data-v-67a4b49d]::-webkit-scrollbar,.ml-view-content[data-v-67a4b49d]::-webkit-scrollbar{width:6px;height:6px}.ml-scrollbar[data-v-67a4b49d]::-webkit-scrollbar-track,.ml-view-content[data-v-67a4b49d]::-webkit-scrollbar-track{background:transparent}.ml-scrollbar[data-v-67a4b49d]::-webkit-scrollbar-thumb,.ml-view-content[data-v-67a4b49d]::-webkit-scrollbar-thumb{background-color:transparent;border-radius:3px;transition:background-color .2s}.ml-scrollbar[data-v-67a4b49d]:hover::-webkit-scrollbar-thumb,.ml-view-content[data-v-67a4b49d]:hover::-webkit-scrollbar-thumb{background-color:var(--k-color-border)}.ml-scrollbar[data-v-67a4b49d]::-webkit-scrollbar-thumb:hover,.ml-view-content[data-v-67a4b49d]::-webkit-scrollbar-thumb:hover{background-color:var(--k-color-text-description)}.card-header[data-v-67a4b49d]{padding:1rem 1.25rem .75rem;display:flex;flex-direction:column;gap:.5rem}.header-main[data-v-67a4b49d]{display:flex;justify-content:space-between;align-items:center}.header-meta[data-v-67a4b49d]{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.channel-name[data-v-67a4b49d]{font-size:1.1rem;font-weight:600;color:var(--k-color-text);display:flex;align-items:center;gap:.5rem}.connector-badge[data-v-67a4b49d]{display:inline-flex;align-items:center;gap:.35rem;padding:2px 8px;background-color:var(--k-color-bg-2);border-radius:4px;font-size:.8rem;color:var(--k-color-text-description)}.cost-badge[data-v-67a4b49d]{display:inline-flex;align-items:center;padding:2px 8px;background-color:var(--k-color-success-light, rgba(103, 194, 58, .1));color:var(--k-color-success, #67c23a);border-radius:4px;font-size:.8rem;font-weight:500}.card-body[data-v-67a4b49d]{flex-grow:1;padding:0 1.25rem 1rem;min-height:40px}.field-list[data-v-67a4b49d]{display:flex;flex-direction:column;gap:.25rem;margin-bottom:.75rem}.field-item[data-v-67a4b49d]{display:flex;justify-content:space-between;align-items:center;font-size:.85rem;padding:.25rem 0;border-bottom:1px dashed var(--k-color-border)}.field-item[data-v-67a4b49d]:last-child{border-bottom:none}.field-label[data-v-67a4b49d]{color:var(--k-color-text-description)}.field-value[data-v-67a4b49d]{font-weight:500;color:var(--k-color-text)}.tags-list[data-v-67a4b49d]{display:flex;flex-wrap:wrap;gap:6px}.tag-pill[data-v-67a4b49d]{font-size:.75rem;padding:1px 6px;color:var(--k-color-text-description);border:1px solid var(--k-color-border);border-radius:12px;background-color:transparent}.card-footer[data-v-67a4b49d]{padding:.75rem 1.25rem;border-top:1px solid var(--k-color-border);display:flex;align-items:center;gap:.5rem;background-color:#00000005}.spacer[data-v-67a4b49d]{flex-grow:1}.col-name[data-v-67a4b49d]{width:20%}.col-connector[data-v-67a4b49d]{width:15%}.col-tags[data-v-67a4b49d]{width:auto}.col-cost[data-v-67a4b49d]{width:12%}.col-status[data-v-67a4b49d]{width:8%}.col-actions[data-v-67a4b49d]{width:15%}.name-text[data-v-67a4b49d]{font-weight:600;color:var(--k-color-text);display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tags-wrapper[data-v-67a4b49d]{display:flex;flex-wrap:wrap;gap:4px}.mini-tag[data-v-67a4b49d]{font-size:.7rem;padding:1px 6px;color:var(--k-color-text-description);border:1px solid var(--k-color-border);border-radius:10px;background-color:transparent}.mini-tag.more[data-v-67a4b49d]{background-color:var(--k-color-bg-2)}.cost-value[data-v-67a4b49d]{font-size:.85rem;color:var(--k-color-success, #67c23a);font-weight:500}.action-btns[data-v-67a4b49d]{display:flex;gap:.5rem}.json-editor[data-v-4d47b7db]{width:100%}.code-input[data-v-4d47b7db] textarea{font-family:monospace;font-size:.85rem;background-color:var(--k-color-bg-2);line-height:1.5;border-radius:4px}.error-msg[data-v-4d47b7db]{color:var(--k-color-error);font-size:.75rem;margin-top:4px;display:flex;align-items:center;gap:4px}.error-msg[data-v-4d47b7db]:before{content:"⚠"}.image-upload[data-v-47f2485e]{display:flex;flex-direction:column;gap:.75rem}.image-list[data-v-47f2485e]{display:flex;flex-wrap:wrap;gap:.75rem}.image-item[data-v-47f2485e]{width:80px}.image-preview[data-v-47f2485e]{width:80px;height:80px;border-radius:6px;overflow:hidden;position:relative;border:1px solid var(--k-color-border);background-color:var(--k-color-bg-2)}.image-preview img[data-v-47f2485e]{width:100%;height:100%;object-fit:cover}.image-overlay[data-v-47f2485e]{position:absolute;top:0;right:0;bottom:0;left:0;background-color:#00000080;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .2s ease}.image-preview:hover .image-overlay[data-v-47f2485e]{opacity:1}.remove-btn[data-v-47f2485e]{background-color:var(--k-color-error, #f56c6c)!important;color:#fff!important;border:none!important}.image-name[data-v-47f2485e]{font-size:.7rem;color:var(--k-color-text-description);margin-top:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center}.upload-area[data-v-47f2485e]{border:2px dashed var(--k-color-border);border-radius:8px;padding:1.5rem;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;background-color:var(--k-color-bg-2)}.upload-area[data-v-47f2485e]:hover{border-color:var(--k-color-active);background-color:var(--k-color-bg-1)}.upload-content[data-v-47f2485e]{display:flex;flex-direction:column;align-items:center;gap:.5rem;color:var(--k-color-text-description)}.upload-icon[data-v-47f2485e]{font-size:1.5rem;color:var(--k-color-active)}.upload-text[data-v-47f2485e]{font-size:.85rem}.upload-loading[data-v-47f2485e]{display:flex;align-items:center;gap:.5rem;color:var(--k-color-text-description);font-size:.85rem}.loading-icon[data-v-47f2485e]{animation:spin-47f2485e 1s linear infinite}@keyframes spin-47f2485e{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ml-view-container[data-v-8eaa50b4]{height:100%;display:flex;flex-direction:column;min-height:0}.ml-view-header[data-v-8eaa50b4]{flex-shrink:0;display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.ml-header-left[data-v-8eaa50b4]{display:flex;align-items:center;gap:1.5rem;flex-wrap:wrap}.ml-header-right[data-v-8eaa50b4]{display:flex;align-items:center;gap:1rem}.ml-view-content[data-v-8eaa50b4]{flex:1 1 0;min-height:0;overflow-y:auto;overflow-x:hidden;padding:.5rem 0}.ml-card[data-v-8eaa50b4]{background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:8px;overflow:hidden;transition:all .2s ease}.ml-card--clickable[data-v-8eaa50b4]{cursor:pointer}.ml-card--clickable[data-v-8eaa50b4]:hover{border-color:var(--k-color-active);box-shadow:0 4px 12px #00000014;transform:translateY(-2px)}.ml-card--active[data-v-8eaa50b4]{border-color:var(--k-color-active);background:var(--k-color-active-bg)}.ml-card--disabled[data-v-8eaa50b4]{opacity:.6}.ml-table-container[data-v-8eaa50b4]{background-color:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:8px;overflow:hidden}.ml-table[data-v-8eaa50b4]{width:100%;border-collapse:collapse;table-layout:fixed}.ml-table thead[data-v-8eaa50b4]{background-color:var(--k-color-bg-2)}.ml-table th[data-v-8eaa50b4]{padding:.875rem 1rem;font-size:.8rem;font-weight:600;color:var(--k-color-text-description);text-align:left;border-bottom:1px solid var(--k-color-border);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ml-table tbody tr[data-v-8eaa50b4]{cursor:pointer;transition:background-color .15s ease}.ml-table tbody tr[data-v-8eaa50b4]:hover{background-color:var(--k-color-bg-1)}.ml-table td[data-v-8eaa50b4]{padding:.75rem 1rem;border-bottom:1px solid var(--k-color-border);vertical-align:middle;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ml-table tbody tr:last-child td[data-v-8eaa50b4]{border-bottom:none}.ml-masonry[data-v-8eaa50b4]{columns:5;column-gap:1rem}.ml-masonry-item[data-v-8eaa50b4]{break-inside:avoid;margin-bottom:1rem}@media (max-width: 1400px){.ml-masonry[data-v-8eaa50b4]{columns:4}}@media (max-width: 1100px){.ml-masonry[data-v-8eaa50b4]{columns:3}}@media (max-width: 800px){.ml-masonry[data-v-8eaa50b4]{columns:2}}@media (max-width: 500px){.ml-masonry[data-v-8eaa50b4]{columns:1}}.ml-grid[data-v-8eaa50b4]{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1.5rem;padding:.5rem}.ml-btn-outline-primary[data-v-8eaa50b4]{color:var(--k-color-active)!important;border-color:var(--k-color-active)!important}.ml-btn-outline-primary[data-v-8eaa50b4]:hover{background-color:var(--k-color-active)!important;color:#fff!important}.ml-btn-outline-danger[data-v-8eaa50b4]{color:var(--k-color-error, #f56c6c)!important;border-color:var(--k-color-error, #f56c6c)!important}.ml-btn-outline-danger[data-v-8eaa50b4]:hover{background-color:var(--k-color-error, #f56c6c)!important;color:#fff!important}.ml-badge[data-v-8eaa50b4]{display:inline-flex;align-items:center;gap:.35rem;padding:2px 8px;background-color:var(--k-color-bg-2);border-radius:4px;font-size:.8rem;color:var(--k-color-text-description)}.ml-badge--success[data-v-8eaa50b4]{background-color:var(--k-color-success-light, rgba(103, 194, 58, .1));color:var(--k-color-success, #67c23a)}.ml-badge--primary[data-v-8eaa50b4]{background-color:var(--k-color-active-bg);color:var(--k-color-active)}.ml-badge--warning[data-v-8eaa50b4]{background-color:var(--k-color-warning-light, rgba(230, 162, 60, .1));color:var(--k-color-warning, #e6a23c)}.ml-badge--danger[data-v-8eaa50b4]{background-color:var(--k-color-error-light, rgba(245, 108, 108, .1));color:var(--k-color-error, #f56c6c)}.ml-tag[data-v-8eaa50b4]{font-size:.75rem;padding:1px 6px;color:var(--k-color-text-description);border:1px solid var(--k-color-border);border-radius:12px;background-color:transparent}.ml-tag--filled[data-v-8eaa50b4]{background-color:var(--k-color-bg-2);border-color:transparent}.ml-form-hint[data-v-8eaa50b4]{font-size:.8rem;color:var(--k-color-text-description);margin-top:4px}.ml-divider[data-v-8eaa50b4]{height:1px;background-color:var(--k-color-border);margin:1rem 0}@keyframes ml-spin-8eaa50b4{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ml-spin[data-v-8eaa50b4]{animation:ml-spin-8eaa50b4 1s linear infinite}@keyframes ml-fade-in-8eaa50b4{0%{opacity:0}to{opacity:1}}.ml-fade-in[data-v-8eaa50b4]{animation:ml-fade-in-8eaa50b4 .3s ease}.ml-scrollbar[data-v-8eaa50b4],.ml-view-content[data-v-8eaa50b4]{scrollbar-width:thin;scrollbar-color:transparent transparent}.ml-scrollbar[data-v-8eaa50b4]:hover,.ml-view-content[data-v-8eaa50b4]:hover{scrollbar-color:var(--k-color-border) transparent}.ml-scrollbar[data-v-8eaa50b4]::-webkit-scrollbar,.ml-view-content[data-v-8eaa50b4]::-webkit-scrollbar{width:6px;height:6px}.ml-scrollbar[data-v-8eaa50b4]::-webkit-scrollbar-track,.ml-view-content[data-v-8eaa50b4]::-webkit-scrollbar-track{background:transparent}.ml-scrollbar[data-v-8eaa50b4]::-webkit-scrollbar-thumb,.ml-view-content[data-v-8eaa50b4]::-webkit-scrollbar-thumb{background-color:transparent;border-radius:3px;transition:background-color .2s}.ml-scrollbar[data-v-8eaa50b4]:hover::-webkit-scrollbar-thumb,.ml-view-content[data-v-8eaa50b4]:hover::-webkit-scrollbar-thumb{background-color:var(--k-color-border)}.ml-scrollbar[data-v-8eaa50b4]::-webkit-scrollbar-thumb:hover,.ml-view-content[data-v-8eaa50b4]::-webkit-scrollbar-thumb:hover{background-color:var(--k-color-text-description)}.preset-card[data-v-8eaa50b4]{background-color:var(--k-color-bg-1);border:1px solid var(--k-color-border);border-radius:8px;overflow:hidden;cursor:pointer;transition:all .2s ease;position:relative}.preset-card[data-v-8eaa50b4]:hover{border-color:var(--k-color-active);box-shadow:0 4px 12px #0000001a}.card-thumbnail[data-v-8eaa50b4]{width:100%;aspect-ratio:auto;position:relative;overflow:hidden;background-color:var(--k-color-bg-2)}.card-thumbnail img[data-v-8eaa50b4]{width:100%;height:auto;display:block;object-fit:cover}.card-thumbnail.placeholder[data-v-8eaa50b4]{aspect-ratio:4/3;display:flex;align-items:center;justify-content:center}.placeholder-icon[data-v-8eaa50b4]{font-size:2rem;color:var(--k-color-text-description);opacity:.5}.thumbnail-overlay[data-v-8eaa50b4]{position:absolute;bottom:0;left:0;right:0;padding:.5rem;background:linear-gradient(transparent,#0009);display:flex;justify-content:flex-end}.ref-count[data-v-8eaa50b4]{display:flex;align-items:center;gap:4px;font-size:.75rem;color:#fff;background-color:#00000080;padding:2px 6px;border-radius:4px}.card-content[data-v-8eaa50b4]{padding:.75rem}.card-title[data-v-8eaa50b4]{font-size:.9rem;font-weight:600;color:var(--k-color-text);margin-bottom:.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-tags[data-v-8eaa50b4]{display:flex;flex-wrap:wrap;gap:4px}.mini-tag[data-v-8eaa50b4]{font-size:.7rem;padding:2px 6px;background-color:var(--k-color-bg-2);color:var(--k-color-text-description);border-radius:4px}.mini-tag.more[data-v-8eaa50b4]{background-color:var(--k-color-active);color:#fff}.card-actions[data-v-8eaa50b4]{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;border-top:1px solid var(--k-color-border);background-color:var(--k-color-bg-2)}.source-indicator[data-v-8eaa50b4]{position:absolute;top:.5rem;left:.5rem;font-size:.65rem;padding:2px 6px;border-radius:4px;font-weight:600}.source-indicator.api[data-v-8eaa50b4]{background-color:var(--k-color-active);color:#fff}.source-indicator.user[data-v-8eaa50b4]{background-color:var(--k-color-warning, #e6a23c);color:#fff}.col-thumb[data-v-8eaa50b4]{width:60px}.col-name[data-v-8eaa50b4]{width:15%}.col-template[data-v-8eaa50b4]{width:auto}.col-refs[data-v-8eaa50b4]{width:10%;text-align:center!important}.col-source[data-v-8eaa50b4]{width:10%}.col-status[data-v-8eaa50b4]{width:8%}.col-actions[data-v-8eaa50b4]{width:15%}th.col-refs[data-v-8eaa50b4]{text-align:center!important}.thumb-wrapper[data-v-8eaa50b4]{width:40px;height:40px;border-radius:6px;overflow:hidden;background-color:var(--k-color-bg-2)}.thumb-wrapper img[data-v-8eaa50b4]{width:100%;height:100%;object-fit:cover}.name-text[data-v-8eaa50b4]{font-weight:600;color:var(--k-color-text);display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.template-preview[data-v-8eaa50b4]{font-size:.85rem;color:var(--k-color-text-description);display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:300px}.action-btns[data-v-8eaa50b4]{display:flex;gap:.5rem}.loading-state[data-v-8eaa50b4]{display:flex;align-items:center;justify-content:center;padding:4rem;color:var(--k-color-text-description);gap:.5rem}.form-tip[data-v-8eaa50b4]{font-size:.8rem;color:var(--k-color-text-description);margin-top:.25rem}.thumb-placeholder[data-v-8eaa50b4]{width:44px;height:44px;display:flex;align-items:center;justify-content:center;background-color:var(--k-color-bg-2);border-radius:4px;color:var(--k-color-text-description)}.source-badge[data-v-8eaa50b4]{display:inline-block;font-size:.75rem;padding:2px 8px;border-radius:4px}.source-badge.api[data-v-8eaa50b4]{background-color:var(--k-color-active);color:#fff}.source-badge.user[data-v-8eaa50b4]{background-color:var(--k-color-warning, #e6a23c);color:#fff}.no-data[data-v-8eaa50b4]{color:var(--k-color-text-description);opacity:.5}.ref-badge[data-v-8eaa50b4]{display:inline-flex;align-items:center;gap:4px;font-size:.8rem;color:var(--k-color-text-description);background-color:var(--k-color-bg-2);padding:2px 8px;border-radius:4px}.status-badge[data-v-0bc21896]{display:inline-flex;align-items:center;padding:2px 8px;border-radius:4px;font-size:.75rem;font-weight:500;line-height:1.2}.status-badge.pending[data-v-0bc21896]{background-color:var(--k-color-bg-2);color:var(--k-color-text-description)}.status-badge.processing[data-v-0bc21896]{background-color:var(--k-color-primary-bg);color:var(--k-color-primary)}.status-badge.success[data-v-0bc21896]{background-color:var(--k-color-success-bg);color:var(--k-color-success)}.status-badge.failed[data-v-0bc21896]{background-color:var(--k-color-error-bg);color:var(--k-color-error)}.lightbox-overlay[data-v-bd68872f]{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000e6;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:9999;display:flex;align-items:center;justify-content:center;padding:24px}.lightbox-container[data-v-bd68872f]{width:100%;max-width:1100px;height:90vh;max-height:850px;background:var(--k-card-bg);border-radius:12px;overflow:hidden;position:relative;box-shadow:0 25px 60px #00000080}.lightbox-content[data-v-bd68872f]{display:flex;height:100%}.lightbox-image-area[data-v-bd68872f]{flex:1;background:#0a0a0a;display:flex;align-items:center;justify-content:center;position:relative;cursor:zoom-out;min-width:0}.lightbox-image[data-v-bd68872f]{max-width:100%;max-height:100%;object-fit:contain;display:block}.close-btn[data-v-bd68872f]{position:absolute;top:16px;left:16px;z-index:10;background:#ffffff26;border:none;color:#fff;width:40px;height:40px;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s;font-size:1.1rem}.close-btn[data-v-bd68872f]:hover{background:#ffffff40;transform:scale(1.05)}.nav-btn[data-v-bd68872f]{position:absolute;top:50%;transform:translateY(-50%);background:#ffffff26;border:none;color:#fff;width:48px;height:48px;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s;font-size:1.5rem}.nav-btn[data-v-bd68872f]:hover{background:#ffffff40;transform:translateY(-50%) scale(1.08)}.nav-btn.prev[data-v-bd68872f]{left:16px}.nav-btn.next[data-v-bd68872f]{right:16px}.image-counter[data-v-bd68872f]{position:absolute;bottom:16px;left:50%;transform:translate(-50%);background:#0009;color:#fff;padding:6px 14px;border-radius:20px;font-size:.85rem;font-weight:500}.lightbox-sidebar[data-v-bd68872f]{width:280px;background:var(--k-card-bg);display:flex;flex-direction:column;border-left:1px solid var(--k-color-border);flex-shrink:0}.sidebar-header[data-v-bd68872f]{padding:14px 16px;border-bottom:1px solid var(--k-color-border);display:flex;align-items:center;justify-content:space-between}.info-title[data-v-bd68872f]{font-weight:600;font-size:.95rem;color:var(--k-color-text)}.header-close-btn[data-v-bd68872f]{background:transparent;border:none;color:var(--k-color-text-description);width:28px;height:28px;border-radius:6px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s;font-size:.9rem}.header-close-btn[data-v-bd68872f]:hover{background:var(--k-color-bg-2);color:var(--k-color-text)}.sidebar-body[data-v-bd68872f]{flex:1;overflow-y:auto;padding:16px}.info-block[data-v-bd68872f]{margin-bottom:16px}.info-block[data-v-bd68872f]:last-child{margin-bottom:0}.block-header[data-v-bd68872f]{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px;font-size:.7rem;font-weight:600;color:var(--k-color-text-description);text-transform:uppercase;letter-spacing:.5px}.copy-btn[data-v-bd68872f]{background:transparent;border:none;color:var(--k-color-active);cursor:pointer;font-size:.7rem;padding:2px 8px;border-radius:4px;transition:background .2s;font-weight:500}.copy-btn[data-v-bd68872f]:hover{background:var(--k-color-bg-2)}.prompt-content[data-v-bd68872f]{font-size:.82rem;line-height:1.5;color:var(--k-color-text);background:var(--k-color-bg-2);padding:10px 12px;border-radius:6px;white-space:pre-wrap;word-break:break-word;max-height:300px;overflow-y:auto}.prompt-content.empty[data-v-bd68872f]{color:var(--k-color-text-description);font-style:italic}.info-value[data-v-bd68872f]{font-size:.85rem;color:var(--k-color-text)}.sidebar-footer[data-v-bd68872f]{padding:12px 16px;border-top:1px solid var(--k-color-border);display:flex;gap:8px}.action-btn[data-v-bd68872f]{flex:1;padding:10px 12px;border-radius:8px;border:none;cursor:pointer;font-size:.8rem;font-weight:500;display:flex;align-items:center;justify-content:center;gap:6px;transition:all .2s}.action-btn.primary[data-v-bd68872f]{background:var(--k-color-active);color:#fff}.action-btn.primary[data-v-bd68872f]:hover{filter:brightness(1.1);transform:translateY(-1px)}.action-btn.secondary[data-v-bd68872f]{background:var(--k-color-bg-2);color:var(--k-color-text);border:1px solid var(--k-color-border)}.action-btn.secondary[data-v-bd68872f]:hover{background:var(--k-color-bg-1);border-color:var(--k-color-active);color:var(--k-color-active)}.lightbox-fade-enter-active[data-v-bd68872f],.lightbox-fade-leave-active[data-v-bd68872f]{transition:opacity .25s ease}.lightbox-fade-enter-from[data-v-bd68872f],.lightbox-fade-leave-to[data-v-bd68872f]{opacity:0}@media (max-width: 768px){.lightbox-overlay[data-v-bd68872f]{padding:0}.lightbox-container[data-v-bd68872f]{height:100%;max-height:none;border-radius:0}.lightbox-content[data-v-bd68872f]{flex-direction:column}.lightbox-image-area[data-v-bd68872f]{min-height:50vh}.lightbox-sidebar[data-v-bd68872f]{width:100%;border-left:none;border-top:1px solid var(--k-color-border)}.close-btn[data-v-bd68872f]{top:12px;left:12px}}.ml-view-container[data-v-898a70bb]{height:100%;display:flex;flex-direction:column;min-height:0}.ml-view-header[data-v-898a70bb]{flex-shrink:0;display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.ml-header-left[data-v-898a70bb]{display:flex;align-items:center;gap:1.5rem;flex-wrap:wrap}.ml-header-right[data-v-898a70bb]{display:flex;align-items:center;gap:1rem}.ml-view-content[data-v-898a70bb]{flex:1 1 0;min-height:0;overflow-y:auto;overflow-x:hidden;padding:.5rem 0}.ml-card[data-v-898a70bb]{background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:8px;overflow:hidden;transition:all .2s ease}.ml-card--clickable[data-v-898a70bb]{cursor:pointer}.ml-card--clickable[data-v-898a70bb]:hover{border-color:var(--k-color-active);box-shadow:0 4px 12px #00000014;transform:translateY(-2px)}.ml-card--active[data-v-898a70bb]{border-color:var(--k-color-active);background:var(--k-color-active-bg)}.ml-card--disabled[data-v-898a70bb]{opacity:.6}.ml-table-container[data-v-898a70bb]{background-color:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:8px;overflow:hidden}.ml-table[data-v-898a70bb]{width:100%;border-collapse:collapse;table-layout:fixed}.ml-table thead[data-v-898a70bb]{background-color:var(--k-color-bg-2)}.ml-table th[data-v-898a70bb]{padding:.875rem 1rem;font-size:.8rem;font-weight:600;color:var(--k-color-text-description);text-align:left;border-bottom:1px solid var(--k-color-border);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ml-table tbody tr[data-v-898a70bb]{cursor:pointer;transition:background-color .15s ease}.ml-table tbody tr[data-v-898a70bb]:hover{background-color:var(--k-color-bg-1)}.ml-table td[data-v-898a70bb]{padding:.75rem 1rem;border-bottom:1px solid var(--k-color-border);vertical-align:middle;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ml-table tbody tr:last-child td[data-v-898a70bb]{border-bottom:none}.ml-masonry[data-v-898a70bb]{columns:5;column-gap:1rem}.ml-masonry-item[data-v-898a70bb]{break-inside:avoid;margin-bottom:1rem}@media (max-width: 1400px){.ml-masonry[data-v-898a70bb]{columns:4}}@media (max-width: 1100px){.ml-masonry[data-v-898a70bb]{columns:3}}@media (max-width: 800px){.ml-masonry[data-v-898a70bb]{columns:2}}@media (max-width: 500px){.ml-masonry[data-v-898a70bb]{columns:1}}.ml-grid[data-v-898a70bb]{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1.5rem;padding:.5rem}.ml-btn-outline-primary[data-v-898a70bb]{color:var(--k-color-active)!important;border-color:var(--k-color-active)!important}.ml-btn-outline-primary[data-v-898a70bb]:hover{background-color:var(--k-color-active)!important;color:#fff!important}.ml-btn-outline-danger[data-v-898a70bb]{color:var(--k-color-error, #f56c6c)!important;border-color:var(--k-color-error, #f56c6c)!important}.ml-btn-outline-danger[data-v-898a70bb]:hover{background-color:var(--k-color-error, #f56c6c)!important;color:#fff!important}.ml-badge[data-v-898a70bb]{display:inline-flex;align-items:center;gap:.35rem;padding:2px 8px;background-color:var(--k-color-bg-2);border-radius:4px;font-size:.8rem;color:var(--k-color-text-description)}.ml-badge--success[data-v-898a70bb]{background-color:var(--k-color-success-light, rgba(103, 194, 58, .1));color:var(--k-color-success, #67c23a)}.ml-badge--primary[data-v-898a70bb]{background-color:var(--k-color-active-bg);color:var(--k-color-active)}.ml-badge--warning[data-v-898a70bb]{background-color:var(--k-color-warning-light, rgba(230, 162, 60, .1));color:var(--k-color-warning, #e6a23c)}.ml-badge--danger[data-v-898a70bb]{background-color:var(--k-color-error-light, rgba(245, 108, 108, .1));color:var(--k-color-error, #f56c6c)}.ml-tag[data-v-898a70bb]{font-size:.75rem;padding:1px 6px;color:var(--k-color-text-description);border:1px solid var(--k-color-border);border-radius:12px;background-color:transparent}.ml-tag--filled[data-v-898a70bb]{background-color:var(--k-color-bg-2);border-color:transparent}.ml-form-hint[data-v-898a70bb]{font-size:.8rem;color:var(--k-color-text-description);margin-top:4px}.ml-divider[data-v-898a70bb]{height:1px;background-color:var(--k-color-border);margin:1rem 0}@keyframes ml-spin-898a70bb{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ml-spin[data-v-898a70bb]{animation:ml-spin-898a70bb 1s linear infinite}@keyframes ml-fade-in-898a70bb{0%{opacity:0}to{opacity:1}}.ml-fade-in[data-v-898a70bb]{animation:ml-fade-in-898a70bb .3s ease}.ml-scrollbar[data-v-898a70bb],.ml-view-content[data-v-898a70bb]{scrollbar-width:thin;scrollbar-color:transparent transparent}.ml-scrollbar[data-v-898a70bb]:hover,.ml-view-content[data-v-898a70bb]:hover{scrollbar-color:var(--k-color-border) transparent}.ml-scrollbar[data-v-898a70bb]::-webkit-scrollbar,.ml-view-content[data-v-898a70bb]::-webkit-scrollbar{width:6px;height:6px}.ml-scrollbar[data-v-898a70bb]::-webkit-scrollbar-track,.ml-view-content[data-v-898a70bb]::-webkit-scrollbar-track{background:transparent}.ml-scrollbar[data-v-898a70bb]::-webkit-scrollbar-thumb,.ml-view-content[data-v-898a70bb]::-webkit-scrollbar-thumb{background-color:transparent;border-radius:3px;transition:background-color .2s}.ml-scrollbar[data-v-898a70bb]:hover::-webkit-scrollbar-thumb,.ml-view-content[data-v-898a70bb]:hover::-webkit-scrollbar-thumb{background-color:var(--k-color-border)}.ml-scrollbar[data-v-898a70bb]::-webkit-scrollbar-thumb:hover,.ml-view-content[data-v-898a70bb]::-webkit-scrollbar-thumb:hover{background-color:var(--k-color-text-description)}.view-mode-switch[data-v-898a70bb]{display:flex;gap:2px;background-color:var(--k-color-bg-2);border:1px solid var(--k-color-border);border-radius:6px;padding:2px}.mode-btn[data-v-898a70bb]{display:flex;align-items:center;justify-content:center;width:32px;height:28px;border:none;background:transparent;color:var(--k-color-text-description);cursor:pointer;border-radius:4px;transition:all .2s ease;font-size:16px}.mode-btn[data-v-898a70bb]:hover{color:var(--k-color-text);background-color:var(--k-color-bg-1)}.mode-btn.active[data-v-898a70bb]{color:var(--k-color-active);background-color:var(--k-card-bg);box-shadow:0 1px 3px #0000001a}.stats-grid[data-v-898a70bb]{flex-shrink:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:1rem;margin-bottom:2rem}.stat-card[data-v-898a70bb]{background:var(--k-card-bg);border:1px solid transparent;border-radius:16px;padding:1.5rem;display:flex;flex-direction:row;align-items:center;justify-content:space-between;transition:all .3s cubic-bezier(.25,.8,.25,1);position:relative;overflow:hidden;box-shadow:0 2px 8px #0000000a}.stat-card[data-v-898a70bb]:hover{transform:translateY(-4px);box-shadow:0 8px 24px #00000014}.stat-icon[data-v-898a70bb]{width:48px;height:48px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:1.5rem;flex-shrink:0;background-color:var(--k-color-bg-2);color:var(--k-color-text-description);transition:all .3s ease}.stat-card:hover .stat-icon[data-v-898a70bb]{transform:scale(1.1)}.stat-icon.total[data-v-898a70bb]{background-color:rgba(var(--k-color-primary-rgb),.1);color:var(--k-color-primary)}.stat-icon.success[data-v-898a70bb]{background-color:rgba(var(--k-color-success-rgb),.1);color:var(--k-color-success)}.stat-icon.failed[data-v-898a70bb]{background-color:rgba(var(--k-color-error-rgb),.1);color:var(--k-color-error)}.stat-icon.processing[data-v-898a70bb]{background-color:rgba(var(--k-color-warning-rgb),.1);color:var(--k-color-warning)}.stat-icon.rate[data-v-898a70bb]{background-color:rgba(var(--k-color-info-rgb),.1);color:var(--k-color-info)}.stat-content[data-v-898a70bb]{display:flex;flex-direction:column-reverse;align-items:flex-end;flex-grow:1;margin-left:1rem}.stat-label[data-v-898a70bb]{font-size:.85rem;color:var(--k-color-text-description);margin-top:.5rem;font-weight:500;text-transform:uppercase;letter-spacing:.05em}.stat-value[data-v-898a70bb]{font-size:2rem;font-weight:700;color:var(--k-color-text);line-height:1;letter-spacing:-.03em}.stat-value.success[data-v-898a70bb]{color:var(--k-color-success)}.stat-value.failed[data-v-898a70bb]{color:var(--k-color-error)}.stat-value.pending[data-v-898a70bb]{color:var(--k-color-warning)}.filter-bar[data-v-898a70bb]{flex-shrink:0;display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem;background-color:var(--k-card-bg);padding:1rem;border-radius:12px;border:1px solid var(--k-color-border)}.filter-group[data-v-898a70bb]{display:flex;gap:1rem;flex-wrap:wrap}.pagination-info[data-v-898a70bb]{color:var(--k-color-text-description);font-size:.9rem}.task-table[data-v-898a70bb]{border:1px solid var(--k-color-border);border-radius:12px;cursor:pointer;overflow:hidden;--el-table-header-bg-color: var(--k-color-bg-1);--el-table-row-hover-bg-color: var(--k-color-bg-2);--el-table-border-color: var(--k-color-border)}.task-table[data-v-898a70bb] .el-table__row{transition:background-color .15s ease}.task-table[data-v-898a70bb] th.el-table__cell{font-weight:600;color:var(--k-color-text-description);text-transform:uppercase;font-size:.75rem;letter-spacing:.05em}.mono-text[data-v-898a70bb]{font-family:monospace;color:var(--k-color-text-description)}.prompt-cell[data-v-898a70bb]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--k-color-text)}.time-text[data-v-898a70bb]{font-size:.85rem;color:var(--k-color-text-description)}.text-muted[data-v-898a70bb]{color:var(--k-color-text-description)}.gallery-item[data-v-898a70bb]{background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:8px;overflow:hidden;cursor:pointer;transition:all .2s ease}.gallery-item[data-v-898a70bb]:hover{border-color:var(--k-color-active);box-shadow:0 4px 12px #0000001a}.gallery-image-wrapper[data-v-898a70bb]{position:relative;width:100%;overflow:hidden;background:var(--k-color-bg-2)}.gallery-image[data-v-898a70bb],.gallery-video[data-v-898a70bb]{width:100%;display:block;transition:transform .3s}.gallery-item:hover .gallery-image[data-v-898a70bb],.gallery-item:hover .gallery-video[data-v-898a70bb]{transform:scale(1.03)}.gallery-overlay[data-v-898a70bb]{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(to top,#000c,#0000 50%);display:flex;flex-direction:column;justify-content:flex-end;padding:1.5rem;opacity:0;transition:opacity .3s}.gallery-item:hover .gallery-overlay[data-v-898a70bb]{opacity:1}.zoom-icon[data-v-898a70bb]{font-size:2rem;color:#fff;margin-bottom:auto;align-self:center;opacity:0;transform:scale(.8);transition:all .3s}.gallery-item:hover .zoom-icon[data-v-898a70bb]{opacity:1;transform:scale(1)}.gallery-info[data-v-898a70bb]{padding:.75rem}.gallery-prompt[data-v-898a70bb]{font-size:.85rem;color:var(--k-color-text);display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;line-height:1.4}.gallery-meta[data-v-898a70bb]{margin-top:.5rem;font-size:.75rem;color:var(--k-color-text-description)}.empty-gallery[data-v-898a70bb]{text-align:center;padding:4rem 2rem;color:var(--k-color-text-description)}.empty-icon[data-v-898a70bb]{font-size:3rem;margin-bottom:1rem;opacity:.5}.pagination[data-v-898a70bb]{flex-shrink:0;margin-top:1rem;padding-top:1rem;display:flex;justify-content:center;border-top:1px solid var(--k-color-border)}.task-detail[data-v-898a70bb]{display:flex;flex-direction:column;gap:1.5rem}.detail-section h3[data-v-898a70bb]{font-size:1.1rem;margin-bottom:1rem;padding-bottom:.5rem;border-bottom:1px solid var(--k-color-border);color:var(--k-color-text)}.detail-grid[data-v-898a70bb]{display:grid;grid-template-columns:repeat(2,1fr);gap:1rem;background-color:var(--k-color-bg-2);padding:1rem;border-radius:8px}.detail-item[data-v-898a70bb]{display:flex;align-items:center;gap:.5rem}.label[data-v-898a70bb]{font-weight:600;color:var(--k-color-text-description);flex-shrink:0}.code-block[data-v-898a70bb]{background-color:var(--k-color-bg-2);padding:1rem;border-radius:6px;font-family:Fira Code,monospace;font-size:.9rem;white-space:pre-wrap;word-break:break-all;max-height:300px;overflow-y:auto;border:1px solid var(--k-color-border)}.code-block.error[data-v-898a70bb]{background-color:var(--k-color-error-bg);color:var(--k-color-error);border-color:var(--k-color-error)}.output-gallery[data-v-898a70bb]{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:1rem}.output-item[data-v-898a70bb]{border:1px solid var(--k-color-border);border-radius:8px;overflow:hidden;background-color:var(--k-color-bg-2);transition:transform .2s}.output-item[data-v-898a70bb]:hover{transform:scale(1.02);box-shadow:0 4px 12px #0000001a}.output-image[data-v-898a70bb]{width:100%;height:150px;object-fit:cover;display:block}.text-asset[data-v-898a70bb]{padding:.75rem;font-size:.85rem;white-space:pre-wrap;word-break:break-word;max-height:150px;overflow-y:auto}.file-link[data-v-898a70bb]{display:flex;align-items:center;gap:.5rem;padding:1rem;color:var(--k-color-active);text-decoration:none;font-size:.85rem;word-break:break-all}.gallery-detail-dialog[data-v-898a70bb] .el-dialog__header{display:none}.gallery-detail-dialog[data-v-898a70bb] .el-dialog__body{padding:0}.gallery-detail[data-v-898a70bb]{display:flex;height:80vh;background:var(--k-card-bg);border-radius:12px;overflow:hidden}.gallery-detail-media[data-v-898a70bb]{flex:1;background:#000;display:flex;align-items:center;justify-content:center;overflow:hidden}.gallery-detail-media img[data-v-898a70bb],.gallery-detail-media video[data-v-898a70bb]{max-width:100%;max-height:100%;object-fit:contain}.gallery-detail-sidebar[data-v-898a70bb]{width:320px;display:flex;flex-direction:column;border-left:1px solid var(--k-color-border);background:var(--k-card-bg)}.sidebar-header[data-v-898a70bb]{padding:1rem;border-bottom:1px solid var(--k-color-border);display:flex;justify-content:space-between;align-items:center}.sidebar-header h3[data-v-898a70bb]{margin:0;font-size:1.1rem;color:var(--k-color-text)}.sidebar-content[data-v-898a70bb]{flex:1;padding:1rem;overflow-y:auto}.info-block[data-v-898a70bb]{margin-bottom:1.5rem}.info-label[data-v-898a70bb]{font-size:.75rem;font-weight:600;color:var(--k-color-text-description);text-transform:uppercase;letter-spacing:.05em;margin-bottom:.5rem}.info-value[data-v-898a70bb]{color:var(--k-color-text);font-size:.9rem}.info-value.prompt[data-v-898a70bb]{background:var(--k-color-bg-2);padding:.75rem;border-radius:6px;font-family:monospace;font-size:.85rem;line-height:1.5;white-space:pre-wrap;word-break:break-word;margin-bottom:.5rem;max-height:200px;overflow-y:auto}.sidebar-footer[data-v-898a70bb]{padding:1rem;border-top:1px solid var(--k-color-border);display:flex;gap:.5rem}.download-btn[data-v-898a70bb]{text-decoration:none}.cleanup-form[data-v-898a70bb]{text-align:center}.cleanup-form p[data-v-898a70bb]{margin-bottom:1rem;color:var(--k-color-text)}.dialog-footer[data-v-898a70bb]{display:flex;gap:10px;justify-content:flex-end}.history-gallery[data-v-6cba50e5]{width:240px;flex-shrink:0;min-height:0;display:flex;flex-direction:column;background-color:var(--k-card-bg);border-radius:12px;border:1px solid var(--k-color-border);overflow:hidden;transition:border-color .2s,box-shadow .2s}.history-gallery[data-v-6cba50e5]:not(.collapsed):hover{border-color:var(--k-color-active);box-shadow:0 4px 16px #00000014}.history-gallery.collapsed[data-v-6cba50e5]{width:40px}.collapsed-bar[data-v-6cba50e5]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;cursor:pointer;color:var(--k-color-text-description);transition:all .2s;gap:.5rem;padding:1rem 0}.collapsed-bar[data-v-6cba50e5]:hover{color:var(--k-color-active);background-color:var(--k-color-bg-2)}.collapsed-bar .k-icon[data-v-6cba50e5]{font-size:1.1rem}.collapsed-text[data-v-6cba50e5]{writing-mode:vertical-rl;font-size:.75rem;font-weight:500}.gallery-content[data-v-6cba50e5]{display:flex;flex-direction:column;flex:1 1 0;min-height:0;overflow:hidden}.gallery-header[data-v-6cba50e5]{padding:.75rem;border-bottom:1px solid var(--k-color-border);display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.header-left[data-v-6cba50e5]{display:flex;align-items:center;gap:.5rem}.gallery-title[data-v-6cba50e5]{font-size:.85rem;font-weight:600;color:var(--k-color-text)}.gallery-count[data-v-6cba50e5]{font-size:.7rem;background-color:var(--k-color-active);color:#fff;padding:.1rem .4rem;border-radius:10px;font-weight:500}.header-actions[data-v-6cba50e5]{display:flex;align-items:center;gap:.25rem}.action-icon[data-v-6cba50e5]{padding:.3rem;border-radius:4px;cursor:pointer;color:var(--k-color-text-description);transition:all .2s;font-size:.85rem}.action-icon[data-v-6cba50e5]:hover{color:var(--k-color-active);background-color:var(--k-color-bg-2)}.action-icon.spinning[data-v-6cba50e5]{animation:spin-6cba50e5 1s linear infinite}.gallery-list[data-v-6cba50e5]{flex:1 1 0;min-height:0;overflow-y:auto;padding:.5rem;display:flex;flex-direction:column;gap:.5rem;scrollbar-width:thin;scrollbar-color:transparent transparent}.gallery-list[data-v-6cba50e5]:hover{scrollbar-color:var(--k-color-border) transparent}.gallery-list[data-v-6cba50e5]::-webkit-scrollbar{width:4px}.gallery-list[data-v-6cba50e5]::-webkit-scrollbar-track{background:transparent}.gallery-list[data-v-6cba50e5]::-webkit-scrollbar-thumb{background-color:transparent;border-radius:2px;transition:background-color .2s}.gallery-list[data-v-6cba50e5]:hover::-webkit-scrollbar-thumb{background-color:var(--k-color-border)}.task-card[data-v-6cba50e5]{background-color:var(--k-color-bg-2);border-radius:8px;flex-shrink:0;overflow:hidden;transition:all .2s;position:relative;border:1px solid var(--k-color-border)}.task-card.clickable[data-v-6cba50e5]{cursor:pointer}.task-card.clickable[data-v-6cba50e5]:hover{background-color:var(--k-color-bg-1);box-shadow:0 2px 8px #0000001a;border-color:var(--k-color-active)}.task-card[data-v-6cba50e5]:has(.task-processing){border-color:var(--k-color-warning, #e6a23c);background-color:#e6a23c0d}.task-card[data-v-6cba50e5]:has(.task-failed){border-color:var(--k-color-error, #f56c6c);background-color:#f56c6c0d}.task-image-wrapper[data-v-6cba50e5]{position:relative;width:100%;background-color:var(--k-color-bg-1)}.task-image[data-v-6cba50e5]{width:100%;height:auto;display:block}.more-images[data-v-6cba50e5]{position:absolute;right:6px;top:6px;background:#000000b3;color:#fff;font-size:.7rem;padding:.15rem .4rem;border-radius:4px}.task-processing[data-v-6cba50e5]{padding:1.5rem 1rem;display:flex;flex-direction:column;align-items:center;gap:.5rem;background:linear-gradient(135deg,#e6a23c14,#e6a23c05)}.processing-animation[data-v-6cba50e5]{display:flex;gap:.3rem}.processing-animation .dot[data-v-6cba50e5]{width:8px;height:8px;background-color:var(--k-color-warning, #e6a23c);border-radius:50%;animation:bounce-6cba50e5 1.4s ease-in-out infinite both}.processing-animation .dot[data-v-6cba50e5]:nth-child(1){animation-delay:-.32s}.processing-animation .dot[data-v-6cba50e5]:nth-child(2){animation-delay:-.16s}@keyframes bounce-6cba50e5{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}.processing-text[data-v-6cba50e5]{font-size:.75rem;color:var(--k-color-warning, #e6a23c);font-weight:500}.task-failed[data-v-6cba50e5]{padding:1.5rem 1rem;display:flex;flex-direction:column;align-items:center;gap:.5rem;color:var(--k-color-error, #f56c6c);background:linear-gradient(135deg,#f56c6c14,#f56c6c05)}.failed-icon[data-v-6cba50e5]{font-size:1.5rem;opacity:.8}.task-failed span[data-v-6cba50e5]{font-size:.75rem;font-weight:500}.task-info[data-v-6cba50e5]{padding:.5rem}.task-prompt[data-v-6cba50e5]{font-size:.75rem;color:var(--k-color-text);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;line-height:1.4;word-break:break-all}.task-meta[data-v-6cba50e5]{display:flex;justify-content:space-between;align-items:center;margin-top:.35rem;font-size:.65rem;color:var(--k-color-text-description)}.gallery-empty[data-v-6cba50e5],.gallery-loading[data-v-6cba50e5]{flex-grow:1;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--k-color-text-description);padding:2rem 1rem;gap:.5rem}.empty-icon[data-v-6cba50e5]{font-size:2rem;opacity:.3}.gallery-empty p[data-v-6cba50e5]{font-size:.8rem;margin:0}.loading-more[data-v-6cba50e5]{display:flex;justify-content:center;padding:.5rem}.loader-small[data-v-6cba50e5]{border:2px solid var(--k-color-bg-1);border-top:2px solid var(--k-color-active);border-radius:50%;width:20px;height:20px;animation:spin-6cba50e5 1s linear infinite}@keyframes spin-6cba50e5{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ml-view-container[data-v-59115136]{height:100%;display:flex;flex-direction:column;min-height:0}.ml-view-header[data-v-59115136]{flex-shrink:0;display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.ml-header-left[data-v-59115136]{display:flex;align-items:center;gap:1.5rem;flex-wrap:wrap}.ml-header-right[data-v-59115136]{display:flex;align-items:center;gap:1rem}.ml-view-content[data-v-59115136]{flex:1 1 0;min-height:0;overflow-y:auto;overflow-x:hidden;padding:.5rem 0}.ml-card[data-v-59115136]{background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:8px;overflow:hidden;transition:all .2s ease}.ml-card--clickable[data-v-59115136]{cursor:pointer}.ml-card--clickable[data-v-59115136]:hover{border-color:var(--k-color-active);box-shadow:0 4px 12px #00000014;transform:translateY(-2px)}.ml-card--active[data-v-59115136]{border-color:var(--k-color-active);background:var(--k-color-active-bg)}.ml-card--disabled[data-v-59115136]{opacity:.6}.ml-table-container[data-v-59115136]{background-color:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:8px;overflow:hidden}.ml-table[data-v-59115136]{width:100%;border-collapse:collapse;table-layout:fixed}.ml-table thead[data-v-59115136]{background-color:var(--k-color-bg-2)}.ml-table th[data-v-59115136]{padding:.875rem 1rem;font-size:.8rem;font-weight:600;color:var(--k-color-text-description);text-align:left;border-bottom:1px solid var(--k-color-border);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ml-table tbody tr[data-v-59115136]{cursor:pointer;transition:background-color .15s ease}.ml-table tbody tr[data-v-59115136]:hover{background-color:var(--k-color-bg-1)}.ml-table td[data-v-59115136]{padding:.75rem 1rem;border-bottom:1px solid var(--k-color-border);vertical-align:middle;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ml-table tbody tr:last-child td[data-v-59115136]{border-bottom:none}.ml-masonry[data-v-59115136]{columns:5;column-gap:1rem}.ml-masonry-item[data-v-59115136]{break-inside:avoid;margin-bottom:1rem}@media (max-width: 1400px){.ml-masonry[data-v-59115136]{columns:4}}@media (max-width: 1100px){.ml-masonry[data-v-59115136]{columns:3}}@media (max-width: 800px){.ml-masonry[data-v-59115136]{columns:2}}@media (max-width: 500px){.ml-masonry[data-v-59115136]{columns:1}}.ml-grid[data-v-59115136]{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1.5rem;padding:.5rem}.ml-btn-outline-primary[data-v-59115136]{color:var(--k-color-active)!important;border-color:var(--k-color-active)!important}.ml-btn-outline-primary[data-v-59115136]:hover{background-color:var(--k-color-active)!important;color:#fff!important}.ml-btn-outline-danger[data-v-59115136]{color:var(--k-color-error, #f56c6c)!important;border-color:var(--k-color-error, #f56c6c)!important}.ml-btn-outline-danger[data-v-59115136]:hover{background-color:var(--k-color-error, #f56c6c)!important;color:#fff!important}.ml-badge[data-v-59115136]{display:inline-flex;align-items:center;gap:.35rem;padding:2px 8px;background-color:var(--k-color-bg-2);border-radius:4px;font-size:.8rem;color:var(--k-color-text-description)}.ml-badge--success[data-v-59115136]{background-color:var(--k-color-success-light, rgba(103, 194, 58, .1));color:var(--k-color-success, #67c23a)}.ml-badge--primary[data-v-59115136]{background-color:var(--k-color-active-bg);color:var(--k-color-active)}.ml-badge--warning[data-v-59115136]{background-color:var(--k-color-warning-light, rgba(230, 162, 60, .1));color:var(--k-color-warning, #e6a23c)}.ml-badge--danger[data-v-59115136]{background-color:var(--k-color-error-light, rgba(245, 108, 108, .1));color:var(--k-color-error, #f56c6c)}.ml-tag[data-v-59115136]{font-size:.75rem;padding:1px 6px;color:var(--k-color-text-description);border:1px solid var(--k-color-border);border-radius:12px;background-color:transparent}.ml-tag--filled[data-v-59115136]{background-color:var(--k-color-bg-2);border-color:transparent}.ml-form-hint[data-v-59115136]{font-size:.8rem;color:var(--k-color-text-description);margin-top:4px}.ml-divider[data-v-59115136]{height:1px;background-color:var(--k-color-border);margin:1rem 0}@keyframes ml-spin-59115136{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ml-spin[data-v-59115136]{animation:ml-spin-59115136 1s linear infinite}@keyframes ml-fade-in-59115136{0%{opacity:0}to{opacity:1}}.ml-fade-in[data-v-59115136]{animation:ml-fade-in-59115136 .3s ease}.ml-scrollbar[data-v-59115136],.ml-view-content[data-v-59115136]{scrollbar-width:thin;scrollbar-color:transparent transparent}.ml-scrollbar[data-v-59115136]:hover,.ml-view-content[data-v-59115136]:hover{scrollbar-color:var(--k-color-border) transparent}.ml-scrollbar[data-v-59115136]::-webkit-scrollbar,.ml-view-content[data-v-59115136]::-webkit-scrollbar{width:6px;height:6px}.ml-scrollbar[data-v-59115136]::-webkit-scrollbar-track,.ml-view-content[data-v-59115136]::-webkit-scrollbar-track{background:transparent}.ml-scrollbar[data-v-59115136]::-webkit-scrollbar-thumb,.ml-view-content[data-v-59115136]::-webkit-scrollbar-thumb{background-color:transparent;border-radius:3px;transition:background-color .2s}.ml-scrollbar[data-v-59115136]:hover::-webkit-scrollbar-thumb,.ml-view-content[data-v-59115136]:hover::-webkit-scrollbar-thumb{background-color:var(--k-color-border)}.ml-scrollbar[data-v-59115136]::-webkit-scrollbar-thumb:hover,.ml-view-content[data-v-59115136]::-webkit-scrollbar-thumb:hover{background-color:var(--k-color-text-description)}.preset-picker[data-v-59115136]{width:100%}.selected-preset[data-v-59115136]{display:flex;align-items:center;gap:.5rem;padding:.375rem .625rem;background-color:var(--k-color-bg-2);border:1px solid var(--k-color-border);border-radius:4px;cursor:pointer;transition:all .2s;min-height:36px}.selected-preset[data-v-59115136]:hover{border-color:var(--k-color-active);background-color:var(--k-color-bg-1)}.preset-info[data-v-59115136]{display:flex;align-items:center;gap:.5rem;flex:1;min-width:0}.preset-thumb[data-v-59115136]{width:28px;height:28px;border-radius:4px;object-fit:cover;flex-shrink:0}.preset-thumb.placeholder[data-v-59115136]{display:flex;align-items:center;justify-content:center;background-color:var(--k-color-bg-1);color:var(--k-color-text-description);font-size:.75rem}.preset-details[data-v-59115136]{display:flex;align-items:center;gap:.375rem;flex:1;min-width:0}.preset-name[data-v-59115136]{font-size:.85rem;font-weight:500;color:var(--k-color-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.preset-source[data-v-59115136]{font-size:.65rem;padding:1px 5px;border-radius:3px;flex-shrink:0}.preset-source.api[data-v-59115136]{background-color:var(--k-color-active);color:#fff}.preset-source.user[data-v-59115136]{background-color:var(--k-color-warning, #e6a23c);color:#fff}.clear-btn[data-v-59115136]{padding:3px;color:var(--k-color-text-description);cursor:pointer;transition:color .2s;flex-shrink:0;font-size:.85rem}.clear-btn[data-v-59115136]:hover{color:var(--k-color-error, #f56c6c)}.placeholder-text[data-v-59115136]{display:flex;align-items:center;gap:.4rem;color:var(--k-color-text-description);flex:1;font-size:.85rem}.dropdown-icon[data-v-59115136]{color:var(--k-color-text-description);flex-shrink:0;transition:transform .2s}.selected-preset:hover .dropdown-icon[data-v-59115136]{color:var(--k-color-active)}.picker-header[data-v-59115136]{display:flex;align-items:center;gap:1rem;margin-bottom:1rem}.preset-count[data-v-59115136]{font-size:.85rem;color:var(--k-color-text-description);flex-shrink:0}.picker-content[data-v-59115136]{max-height:65vh;overflow-y:auto;overflow-x:hidden;padding:.5rem;scrollbar-width:thin;scrollbar-color:transparent transparent}.picker-content[data-v-59115136]:hover{scrollbar-color:var(--k-color-border) transparent}.picker-content[data-v-59115136]::-webkit-scrollbar{width:6px}.picker-content[data-v-59115136]::-webkit-scrollbar-track{background:transparent}.picker-content[data-v-59115136]::-webkit-scrollbar-thumb{background-color:transparent;border-radius:3px;transition:background-color .2s}.picker-content[data-v-59115136]:hover::-webkit-scrollbar-thumb{background-color:var(--k-color-border)}.picker-content .ml-masonry[data-v-59115136]{columns:5;column-gap:1rem}.picker-content .ml-masonry-item[data-v-59115136]{break-inside:avoid;margin-bottom:1rem}@media (max-width: 1400px){.picker-content .ml-masonry[data-v-59115136]{columns:4}}@media (max-width: 1100px){.picker-content .ml-masonry[data-v-59115136]{columns:3}}@media (max-width: 800px){.picker-content .ml-masonry[data-v-59115136]{columns:2}}.preset-card[data-v-59115136]{background-color:var(--k-color-bg-1);border:2px solid var(--k-color-border);border-radius:8px;overflow:hidden;cursor:pointer;transition:all .2s ease;position:relative}.preset-card[data-v-59115136]:hover{border-color:var(--k-color-active);box-shadow:0 4px 12px #0000001a}.preset-card.selected[data-v-59115136]{border-color:var(--k-color-active);background-color:rgba(var(--k-color-primary-rgb),.05)}.card-thumbnail[data-v-59115136]{width:100%;aspect-ratio:auto;position:relative;overflow:hidden;background-color:var(--k-color-bg-2)}.card-thumbnail img[data-v-59115136]{width:100%;height:auto;display:block;object-fit:cover}.card-thumbnail.placeholder[data-v-59115136]{aspect-ratio:4/3;display:flex;align-items:center;justify-content:center}.placeholder-icon[data-v-59115136]{font-size:2rem;color:var(--k-color-text-description);opacity:.5}.thumbnail-overlay[data-v-59115136]{position:absolute;bottom:0;left:0;right:0;padding:.5rem;background:linear-gradient(transparent,#0009);display:flex;justify-content:flex-end}.ref-count[data-v-59115136]{display:flex;align-items:center;gap:4px;font-size:.75rem;color:#fff;background-color:#00000080;padding:2px 6px;border-radius:4px}.card-content[data-v-59115136]{padding:.75rem}.card-title[data-v-59115136]{font-size:.9rem;font-weight:600;color:var(--k-color-text);margin-bottom:.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-tags[data-v-59115136]{display:flex;flex-wrap:wrap;gap:4px}.mini-tag[data-v-59115136]{font-size:.7rem;padding:2px 6px;background-color:var(--k-color-bg-2);color:var(--k-color-text-description);border-radius:4px}.mini-tag.more[data-v-59115136]{background-color:var(--k-color-active);color:#fff}.card-actions[data-v-59115136]{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;border-top:1px solid var(--k-color-border);background-color:var(--k-color-bg-2)}.source-indicator[data-v-59115136]{position:absolute;top:.5rem;left:.5rem;font-size:.65rem;padding:2px 6px;border-radius:4px;font-weight:600}.source-indicator.api[data-v-59115136]{background-color:var(--k-color-active);color:#fff}.source-indicator.user[data-v-59115136]{background-color:var(--k-color-warning, #e6a23c);color:#fff}.selected-mark[data-v-59115136]{position:absolute;top:.5rem;right:.5rem;width:28px;height:28px;background-color:var(--k-color-active);border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:1rem;box-shadow:0 2px 6px #0003}.empty-state[data-v-59115136]{grid-column:1 / -1;text-align:center;padding:3rem;color:var(--k-color-text-description)}.empty-icon[data-v-59115136]{font-size:2.5rem;opacity:.3;margin-bottom:1rem}.preset-detail[data-v-59115136]{display:flex;flex-direction:column;gap:1rem}.detail-thumbnail[data-v-59115136]{width:100%;max-height:200px;overflow:hidden;border-radius:8px;background-color:var(--k-color-bg-2)}.detail-thumbnail img[data-v-59115136]{width:100%;height:auto;object-fit:contain}.detail-section[data-v-59115136]{display:flex;flex-direction:column;gap:.5rem}.detail-row[data-v-59115136]{display:flex;align-items:center;gap:.75rem}.detail-label[data-v-59115136]{font-size:.85rem;font-weight:600;color:var(--k-color-text-description)}.detail-tags[data-v-59115136]{display:flex;flex-wrap:wrap;gap:6px}.source-badge[data-v-59115136]{display:inline-block;font-size:.75rem;padding:2px 8px;border-radius:4px}.source-badge.api[data-v-59115136]{background-color:var(--k-color-active);color:#fff}.source-badge.user[data-v-59115136]{background-color:var(--k-color-warning, #e6a23c);color:#fff}.prompt-preview[data-v-59115136]{padding:.75rem;background-color:var(--k-color-bg-2);border-radius:6px;font-size:.85rem;color:var(--k-color-text);white-space:pre-wrap;word-break:break-word;max-height:150px;overflow-y:auto;font-family:monospace}.reference-images[data-v-59115136]{display:flex;gap:.5rem;flex-wrap:wrap}.ref-image[data-v-59115136]{width:80px;height:80px;object-fit:cover;border-radius:6px;border:1px solid var(--k-color-border)}.param-preview[data-v-59115136]{padding:.75rem;background-color:var(--k-color-bg-2);border-radius:6px;font-size:.8rem;font-family:monospace;white-space:pre-wrap;color:var(--k-color-text);max-height:100px;overflow-y:auto}.dialog-footer[data-v-59115136]{display:flex;gap:.75rem;justify-content:flex-end}.view-container[data-v-a3441aa4]{height:100%;display:flex;flex-direction:column;min-height:0;overflow:hidden}.view-content[data-v-a3441aa4]{flex:1 1 0;min-height:0;overflow:hidden;padding:.5rem}.generate-layout[data-v-a3441aa4]{display:flex;gap:1rem;height:100%;min-height:0}.config-panel[data-v-a3441aa4]{width:320px;flex-shrink:0;display:flex;flex-direction:column;min-height:0}.config-card[data-v-a3441aa4]{padding:1.25rem;flex:1 1 0;min-height:0;overflow-y:auto;display:flex;flex-direction:column;border-radius:12px;background-color:var(--k-card-bg);border:1px solid var(--k-color-border);box-shadow:0 2px 8px #0000000a;transition:border-color .2s,box-shadow .2s;scrollbar-width:thin;scrollbar-color:transparent transparent}.config-card[data-v-a3441aa4]:hover{border-color:var(--k-color-active);box-shadow:0 4px 16px #00000014;scrollbar-color:var(--k-color-border) transparent}.config-card[data-v-a3441aa4]::-webkit-scrollbar{width:6px}.config-card[data-v-a3441aa4]::-webkit-scrollbar-track{background:transparent}.config-card[data-v-a3441aa4]::-webkit-scrollbar-thumb{background-color:transparent;border-radius:3px;transition:background-color .2s}.config-card[data-v-a3441aa4]:hover::-webkit-scrollbar-thumb{background-color:var(--k-color-border)}.form-section[data-v-a3441aa4]{margin-bottom:1.25rem}.form-section[data-v-a3441aa4]:last-of-type{margin-bottom:0}.form-section.flex-grow[data-v-a3441aa4]{flex-grow:1;display:flex;flex-direction:column}.form-section.flex-grow[data-v-a3441aa4] .el-textarea{flex-grow:1}.form-section.flex-grow[data-v-a3441aa4] .el-textarea__inner{height:100%!important}.section-title[data-v-a3441aa4]{font-weight:600;margin-bottom:.5rem;color:var(--k-color-text);font-size:.9rem;display:flex;align-items:center;gap:.4rem}.section-title .k-icon[data-v-a3441aa4]{color:var(--k-color-active)}.form-item[data-v-a3441aa4]{margin-bottom:.75rem}.form-item[data-v-a3441aa4]:last-child{margin-bottom:0}.label[data-v-a3441aa4]{font-size:.8rem;color:var(--k-color-text-description);margin-bottom:.25rem}.form-actions[data-v-a3441aa4]{margin-top:1.25rem;padding-top:1rem;border-top:1px solid var(--k-color-border)}.generate-btn[data-v-a3441aa4]{width:100%;height:40px;font-size:.95rem;font-weight:600;transition:all .2s;background:linear-gradient(135deg,var(--k-color-primary) 0%,var(--k-color-primary-dark, var(--k-color-primary)) 100%);border:none}.generate-btn[data-v-a3441aa4]:not(:disabled):hover{transform:translateY(-2px);box-shadow:0 6px 16px rgba(var(--k-color-primary-rgb),.4);filter:brightness(1.1)}.preview-panel[data-v-a3441aa4]{flex:1 1 0;min-height:0;min-width:0;background-color:var(--k-card-bg);border-radius:12px;border:1px solid var(--k-color-border);display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem;position:relative;overflow-y:auto;transition:border-color .2s,box-shadow .2s;scrollbar-width:thin;scrollbar-color:transparent transparent}.preview-panel[data-v-a3441aa4]:hover{border-color:var(--k-color-active);box-shadow:0 4px 16px #00000014;scrollbar-color:var(--k-color-border) transparent}.preview-panel[data-v-a3441aa4]::-webkit-scrollbar{width:6px}.preview-panel[data-v-a3441aa4]::-webkit-scrollbar-track{background:transparent}.preview-panel[data-v-a3441aa4]::-webkit-scrollbar-thumb{background-color:transparent;border-radius:3px;transition:background-color .2s}.preview-panel[data-v-a3441aa4]:hover::-webkit-scrollbar-thumb{background-color:var(--k-color-border)}.empty-state[data-v-a3441aa4]{text-align:center;color:var(--k-color-text-description);display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}.empty-icon[data-v-a3441aa4]{font-size:5rem;margin-bottom:1.5rem;opacity:.2;color:var(--k-color-text)}.generating-state[data-v-a3441aa4]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;width:100%}.generating-content[data-v-a3441aa4]{display:flex;flex-direction:column;align-items:center;gap:1.5rem;padding:2rem;background:linear-gradient(135deg,rgba(var(--k-color-primary-rgb),.05),rgba(var(--k-color-primary-rgb),.02));border-radius:16px;border:1px solid rgba(var(--k-color-primary-rgb),.1)}.loader[data-v-a3441aa4]{border:4px solid var(--k-color-bg-2);border-top:4px solid var(--k-color-active);border-radius:50%;width:48px;height:48px;animation:spin-a3441aa4 1s linear infinite}@keyframes spin-a3441aa4{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.generating-info[data-v-a3441aa4]{text-align:center}.generating-title[data-v-a3441aa4]{font-size:1.1rem;font-weight:600;color:var(--k-color-text);margin:0 0 .75rem}.generating-timer[data-v-a3441aa4]{display:flex;align-items:center;justify-content:center;gap:.5rem;font-size:1.5rem;font-weight:700;color:var(--k-color-active);margin:0 0 .5rem;font-variant-numeric:tabular-nums}.generating-hint[data-v-a3441aa4]{font-size:.85rem;color:var(--k-color-text-description);margin:0}.result-container[data-v-a3441aa4]{width:100%;height:100%;display:flex;flex-direction:column}.success-result[data-v-a3441aa4]{flex-grow:1;display:flex;flex-direction:column}.output-grid[data-v-a3441aa4]{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:1.5rem;flex-grow:1;align-content:start}.output-wrapper[data-v-a3441aa4]{position:relative;border-radius:12px;overflow:hidden;border:1px solid var(--k-color-border);background-color:var(--k-card-bg);transition:all .3s cubic-bezier(.25,.8,.25,1);box-shadow:0 2px 8px #0000000a}.output-wrapper[data-v-a3441aa4]:hover{transform:translateY(-4px);box-shadow:0 8px 24px #0000001f;border-color:transparent}.output-wrapper img[data-v-a3441aa4]{width:100%;height:100%;object-fit:contain;display:block}.output-wrapper img.clickable-image[data-v-a3441aa4]{cursor:zoom-in}.output-wrapper video[data-v-a3441aa4],.output-wrapper audio[data-v-a3441aa4]{width:100%;display:block}.output-actions[data-v-a3441aa4]{position:absolute;bottom:0;left:0;right:0;padding:.5rem;background:#00000080;display:flex;justify-content:flex-end;opacity:0;transition:opacity .2s}.output-wrapper:hover .output-actions[data-v-a3441aa4]{opacity:1}.action-btn[data-v-a3441aa4]{color:#fff;padding:4px;cursor:pointer}.result-meta[data-v-a3441aa4]{margin-top:1.5rem;display:flex;gap:1.5rem;flex-wrap:wrap;color:var(--k-color-text-description);font-size:.9rem;border-top:1px solid var(--k-color-border);padding-top:1rem}.meta-item[data-v-a3441aa4]{display:flex;align-items:center;gap:.5rem}.success-badge[data-v-a3441aa4]{color:var(--k-color-success, #67c23a);font-weight:600}.error-result[data-v-a3441aa4]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:1.5rem}.error-content[data-v-a3441aa4]{display:flex;flex-direction:column;align-items:center;gap:1rem;padding:2rem;background:linear-gradient(135deg,#f56c6c14,#f56c6c05);border-radius:16px;border:1px solid rgba(245,108,108,.2)}.error-icon[data-v-a3441aa4]{font-size:3rem;color:var(--k-color-error, #f56c6c)}.error-info[data-v-a3441aa4]{text-align:center}.error-title[data-v-a3441aa4]{font-size:1.1rem;font-weight:600;color:var(--k-color-error, #f56c6c);margin:0 0 .5rem}.error-msg[data-v-a3441aa4]{color:var(--k-color-text);margin:0 0 .5rem;max-width:400px;word-break:break-word}.error-meta[data-v-a3441aa4]{font-size:.85rem;color:var(--k-color-text-description);margin:0}.retry-btn[data-v-a3441aa4]{margin-top:.5rem}.upload-area[data-v-a3441aa4]{margin-top:.25rem}.upload-list[data-v-a3441aa4]{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:.5rem}.upload-item[data-v-a3441aa4]{position:relative;width:56px;height:56px;border-radius:6px;overflow:hidden;border:1px solid var(--k-color-border);background-color:var(--k-color-bg-2)}.upload-thumb[data-v-a3441aa4]{width:100%;height:100%;object-fit:cover}.upload-overlay[data-v-a3441aa4]{position:absolute;top:0;right:0;bottom:0;left:0;background:#00000080;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .2s;cursor:pointer;color:#fff}.upload-item:hover .upload-overlay[data-v-a3441aa4]{opacity:1}.upload-trigger[data-v-a3441aa4]{width:56px;height:56px;border:2px dashed var(--k-color-border);border-radius:6px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s;background-color:var(--k-color-bg-2)}.upload-trigger[data-v-a3441aa4]:hover{border-color:var(--k-color-active);background-color:var(--k-color-bg-1)}.upload-icon[data-v-a3441aa4]{font-size:1.25rem;color:var(--k-color-text-description);transition:color .2s}.upload-trigger:hover .upload-icon[data-v-a3441aa4]{color:var(--k-color-active)}.upload-tip[data-v-a3441aa4]{font-size:.7rem;color:var(--k-color-text-description);margin-top:.35rem;opacity:.8}.text-output[data-v-a3441aa4]{padding:1rem;background-color:var(--k-color-bg-2);border-radius:6px;white-space:pre-wrap;word-break:break-word;font-family:inherit;line-height:1.6}.file-link[data-v-a3441aa4]{display:flex;align-items:center;gap:.5rem;padding:1rem;background-color:var(--k-color-bg-2);border-radius:6px;color:var(--k-color-active);text-decoration:none;transition:background-color .2s}.file-link[data-v-a3441aa4]:hover{background-color:var(--k-color-bg-3)}.pipeline-panel[data-v-b4b0cf47]{display:flex;flex-direction:column;gap:24px;max-width:560px;padding:8px}.panel-header[data-v-b4b0cf47]{display:flex;align-items:center;justify-content:space-between}.header-title h3[data-v-b4b0cf47]{margin:0;font-size:16px;font-weight:600;color:var(--k-color-text)}.header-title .subtitle[data-v-b4b0cf47]{display:block;margin-top:4px;font-size:12px;color:var(--k-color-text-description)}.pipeline-flow[data-v-b4b0cf47]{display:flex;flex-direction:column;gap:0}.phase-section[data-v-b4b0cf47]{display:flex;flex-direction:column;align-items:stretch}.phase-header[data-v-b4b0cf47]{display:flex;align-items:center;gap:12px;padding:12px 16px;background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:10px;transition:all .2s}.phase-header[data-v-b4b0cf47]:hover{border-color:var(--k-color-active)}.phase-icon[data-v-b4b0cf47]{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:8px;font-size:16px}.phase-prepare .phase-icon[data-v-b4b0cf47]{background:#3b82f626;color:#3b82f6}.phase-pre .phase-icon[data-v-b4b0cf47]{background:#8b5cf626;color:#8b5cf6}.phase-request .phase-icon[data-v-b4b0cf47]{background:#22c55e26;color:#22c55e}.phase-post .phase-icon[data-v-b4b0cf47]{background:#f9731626;color:#f97316}.phase-finalize .phase-icon[data-v-b4b0cf47]{background:#6366f126;color:#6366f1}.phase-info[data-v-b4b0cf47]{flex:1;display:flex;flex-direction:column;gap:2px}.phase-name[data-v-b4b0cf47]{font-size:14px;font-weight:600;color:var(--k-color-text)}.phase-desc[data-v-b4b0cf47]{font-size:11px;color:var(--k-color-text-description)}.phase-badge[data-v-b4b0cf47]{display:flex;align-items:center;justify-content:center;min-width:24px;height:24px;padding:0 8px;background:var(--k-color-bg-2);border-radius:12px;font-size:12px;font-weight:500;color:var(--k-color-text-description)}.phase-middlewares[data-v-b4b0cf47]{display:flex;flex-direction:column;gap:0;margin-left:24px;padding-left:24px;border-left:2px solid var(--k-color-border)}.mw-item[data-v-b4b0cf47]{position:relative}.mw-item[data-v-b4b0cf47]:before{content:"";position:absolute;left:-25px;top:50%;width:12px;height:2px;background:var(--k-color-border)}.mw-card[data-v-b4b0cf47]{display:flex;align-items:center;gap:12px;padding:10px 14px;margin:6px 0;background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:8px;transition:all .2s}.mw-card[data-v-b4b0cf47]:hover{border-color:var(--k-color-active);background:var(--k-color-bg-1)}.mw-item.disabled .mw-card[data-v-b4b0cf47]{opacity:.6;background:var(--k-color-bg-2)}.mw-status[data-v-b4b0cf47]{width:8px;height:8px;border-radius:50%;background:var(--k-color-text-description);flex-shrink:0}.mw-status.active[data-v-b4b0cf47]{background:#22c55e;box-shadow:0 0 8px #22c55e66}.mw-content[data-v-b4b0cf47]{flex:1;display:flex;flex-direction:column;gap:2px;min-width:0}.mw-name[data-v-b4b0cf47]{font-size:13px;font-weight:500;color:var(--k-color-text)}.mw-desc[data-v-b4b0cf47]{font-size:11px;color:var(--k-color-text-description);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.toggle-switch[data-v-b4b0cf47]{position:relative;display:inline-block;width:40px;height:22px;cursor:pointer;flex-shrink:0}.toggle-switch input[data-v-b4b0cf47]{opacity:0;width:0;height:0}.slider[data-v-b4b0cf47]{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:var(--k-color-bg-2);border:1px solid var(--k-color-border);border-radius:22px;transition:.2s}.slider[data-v-b4b0cf47]:before{position:absolute;content:"";height:16px;width:16px;left:2px;bottom:2px;background-color:var(--k-color-text-description);border-radius:50%;transition:.2s}.toggle-switch input:checked+.slider[data-v-b4b0cf47]{background-color:var(--k-color-active);border-color:var(--k-color-active)}.toggle-switch input:checked+.slider[data-v-b4b0cf47]:before{transform:translate(18px);background-color:#fff}.empty-phase[data-v-b4b0cf47]{margin-left:24px;padding:12px 24px;border-left:2px dashed var(--k-color-border);color:var(--k-color-text-description);font-size:12px;font-style:italic}.phase-connector[data-v-b4b0cf47]{display:flex;flex-direction:column;align-items:center;padding:4px 0}.connector-line[data-v-b4b0cf47]{width:2px;height:8px;background:var(--k-color-border)}.connector-arrow[data-v-b4b0cf47]{display:flex;align-items:center;justify-content:center;width:20px;height:20px;color:var(--k-color-text-description);font-size:12px}.pipeline-footer[data-v-b4b0cf47]{display:flex;flex-direction:column;gap:8px;padding:16px;background:var(--k-color-bg-2);border-radius:10px}.footer-item[data-v-b4b0cf47]{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--k-color-text-description)}.dot[data-v-b4b0cf47]{width:8px;height:8px;border-radius:50%;background:var(--k-color-text-description)}.dot.active[data-v-b4b0cf47]{background:#22c55e}.footer-hint[data-v-b4b0cf47]{margin:8px 0 0;padding-top:8px;border-top:1px solid var(--k-color-border);font-size:11px;color:var(--k-color-text-description);opacity:.8}.plugins-panel[data-v-b8e1ebe1]{display:flex;gap:1.5rem;height:100%}.loading-state[data-v-b8e1ebe1],.empty-state[data-v-b8e1ebe1]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:3rem;color:var(--k-color-text-description);width:100%}.loading-state .k-icon[data-v-b8e1ebe1],.empty-state .k-icon[data-v-b8e1ebe1]{font-size:2rem;opacity:.5}.empty-state .hint[data-v-b8e1ebe1]{font-size:12px;opacity:.7}.spin[data-v-b8e1ebe1]{animation:spin-b8e1ebe1 1s linear infinite}@keyframes spin-b8e1ebe1{to{transform:rotate(360deg)}}.plugins-list[data-v-b8e1ebe1]{width:280px;flex-shrink:0;display:flex;flex-direction:column;gap:8px;max-height:calc(100vh - 200px);overflow-y:auto}.plugin-card[data-v-b8e1ebe1]{background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:10px;padding:12px 14px;cursor:pointer;transition:all .2s}.plugin-card[data-v-b8e1ebe1]:hover{border-color:var(--k-color-active);box-shadow:0 2px 8px #00000014}.plugin-card.active[data-v-b8e1ebe1]{border-color:var(--k-color-active);background:var(--k-color-active-bg)}.plugin-card.disabled[data-v-b8e1ebe1]{opacity:.6}.plugin-info[data-v-b8e1ebe1]{margin-bottom:8px}.plugin-header[data-v-b8e1ebe1]{display:flex;align-items:center;gap:6px;margin-bottom:4px}.plugin-name[data-v-b8e1ebe1]{font-weight:500;color:var(--k-color-text)}.plugin-version[data-v-b8e1ebe1]{font-size:11px;color:var(--k-color-text-description);background:var(--k-color-bg-2);padding:1px 6px;border-radius:4px}.plugin-description[data-v-b8e1ebe1]{font-size:12px;color:var(--k-color-text-description);margin:0;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.plugin-status[data-v-b8e1ebe1]{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.plugin-badge[data-v-b8e1ebe1]{font-size:10px;padding:2px 6px;border-radius:4px;background:var(--k-color-bg-2);color:var(--k-color-text-description)}.plugin-badge.connector[data-v-b8e1ebe1]{background:rgba(var(--k-color-active-rgb),.15);color:var(--k-color-active)}.plugin-badge.middleware[data-v-b8e1ebe1]{background:rgba(var(--k-color-success-rgb),.15);color:var(--k-color-success)}.plugin-status .k-icon[data-v-b8e1ebe1]{margin-left:auto}.plugin-status .enabled[data-v-b8e1ebe1]{color:var(--k-color-success)}.plugin-status .disabled[data-v-b8e1ebe1]{color:var(--k-color-text-description)}.plugin-detail[data-v-b8e1ebe1]{flex:1;min-width:0;background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:12px;padding:1.5rem;overflow-y:auto;max-height:calc(100vh - 200px)}.detail-header[data-v-b8e1ebe1]{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:1.5rem;padding-bottom:1rem;border-bottom:1px solid var(--k-color-border)}.header-left[data-v-b8e1ebe1]{display:flex;align-items:center;gap:8px}.header-left h3[data-v-b8e1ebe1]{margin:0;font-size:1.1rem;font-weight:600}.header-left .version[data-v-b8e1ebe1]{font-size:12px;color:var(--k-color-text-description)}.header-actions[data-v-b8e1ebe1]{display:flex;gap:8px}.connector-info[data-v-b8e1ebe1],.middlewares-list[data-v-b8e1ebe1],.config-section[data-v-b8e1ebe1]{margin-bottom:1.5rem}.connector-info h4[data-v-b8e1ebe1],.middlewares-list h4[data-v-b8e1ebe1],.config-section h4[data-v-b8e1ebe1]{font-size:14px;font-weight:500;color:var(--k-color-text);margin:0 0 .75rem}.connector-meta[data-v-b8e1ebe1]{display:flex;gap:12px;font-size:13px;color:var(--k-color-text-description)}.connector-id[data-v-b8e1ebe1]{font-family:monospace;background:var(--k-color-bg-2);padding:2px 8px;border-radius:4px}.middleware-tags[data-v-b8e1ebe1]{display:flex;flex-wrap:wrap;gap:8px}.middleware-tag[data-v-b8e1ebe1]{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;background:var(--k-color-bg-2);border-radius:6px;font-size:12px;color:var(--k-color-text-description)}.middleware-tag.enabled[data-v-b8e1ebe1]{color:var(--k-color-text)}.phase-badge[data-v-b8e1ebe1]{font-size:10px;padding:1px 4px;background:var(--k-color-bg-1);border-radius:3px}.config-actions[data-v-b8e1ebe1]{margin-top:1rem;padding-top:1rem;border-top:1px solid var(--k-color-border)}.no-config[data-v-b8e1ebe1],.no-selection[data-v-b8e1ebe1]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:3rem;color:var(--k-color-text-description)}.no-config .k-icon[data-v-b8e1ebe1],.no-selection .k-icon[data-v-b8e1ebe1]{font-size:2rem;opacity:.5}.no-selection[data-v-b8e1ebe1]{flex:1;background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:12px}.settings-view[data-v-5fa778a6]{display:flex;gap:2rem;height:100%;min-height:0}.sidebar[data-v-5fa778a6]{width:180px;flex-shrink:0}.nav-list[data-v-5fa778a6]{display:flex;flex-direction:column;gap:4px;background:var(--k-color-bg-2);border-radius:12px;padding:8px}.nav-item[data-v-5fa778a6]{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:8px;cursor:pointer;color:var(--k-color-text-description);font-size:14px;transition:all .2s}.nav-item[data-v-5fa778a6]:hover{background:var(--k-color-bg-1);color:var(--k-color-text)}.nav-item.active[data-v-5fa778a6]{background:var(--k-card-bg);color:var(--k-color-active);box-shadow:0 1px 3px #00000014}.main-content[data-v-5fa778a6]{flex:1;min-width:0;min-height:0;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;scrollbar-color:transparent transparent}.main-content[data-v-5fa778a6]:hover{scrollbar-color:var(--k-color-border) transparent}.main-content[data-v-5fa778a6]::-webkit-scrollbar{width:6px}.main-content[data-v-5fa778a6]::-webkit-scrollbar-track{background:transparent}.main-content[data-v-5fa778a6]::-webkit-scrollbar-thumb{background-color:transparent;border-radius:3px;transition:background-color .2s}.main-content[data-v-5fa778a6]:hover::-webkit-scrollbar-thumb{background-color:var(--k-color-border)}.loading[data-v-5fa778a6]{display:flex;align-items:center;justify-content:center;gap:8px;padding:4rem;color:var(--k-color-text-description)}.spin[data-v-5fa778a6]{animation:spin-5fa778a6 1s linear infinite}@keyframes spin-5fa778a6{to{transform:rotate(360deg)}}.panel-header[data-v-5fa778a6]{margin-bottom:1.5rem}.panel-header h2[data-v-5fa778a6]{font-size:1.25rem;font-weight:600;color:var(--k-color-text);margin:0 0 .5rem}.panel-header p[data-v-5fa778a6]{color:var(--k-color-text-description);font-size:14px;margin:0}.custom-panel[data-v-5fa778a6]{background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:12px;padding:1.5rem}.actions[data-v-5fa778a6]{margin-top:1.5rem;padding-top:1rem;border-top:1px solid var(--k-color-border)}.setup-storage h3[data-v-9aeaae19]{font-size:1.25rem;font-weight:600;color:var(--k-color-text);margin:0 0 .5rem}.step-desc[data-v-9aeaae19]{color:var(--k-color-text-description);margin:0 0 1.5rem}.loading-state[data-v-9aeaae19]{display:flex;align-items:center;justify-content:center;gap:.5rem;padding:3rem;color:var(--k-color-text-description)}.spin[data-v-9aeaae19]{animation:spin-9aeaae19 1s linear infinite}@keyframes spin-9aeaae19{to{transform:rotate(360deg)}}.warning-box[data-v-9aeaae19]{display:flex;gap:1rem;padding:1rem;margin-top:1rem;background:color-mix(in srgb,var(--k-color-warning) 10%,transparent);border:1px solid var(--k-color-warning);border-radius:8px;color:var(--k-color-warning)}.warning-box strong[data-v-9aeaae19]{display:block;margin-bottom:.25rem}.warning-box p[data-v-9aeaae19]{margin:0;font-size:.9rem;color:var(--k-color-text)}.step-actions[data-v-9aeaae19]{margin-top:2rem;padding-top:1.5rem;border-top:1px solid var(--k-color-border);display:flex;justify-content:flex-end}.setup-auth h3[data-v-59078dbb]{font-size:1.25rem;font-weight:600;color:var(--k-color-text);margin:0 0 .5rem}.step-desc[data-v-59078dbb]{color:var(--k-color-text-description);margin:0 0 1.5rem}.config-panel[data-v-59078dbb]{background:var(--k-card-bg);padding:1.5rem;border-radius:12px;border:1px solid var(--k-color-border);margin-bottom:1.5rem;display:flex;flex-direction:column;gap:1.5rem}.form-row[data-v-59078dbb]{display:flex;align-items:flex-start}.form-label[data-v-59078dbb]{width:120px;flex-shrink:0;color:var(--k-color-text-description);padding-top:6px;font-size:.9rem}.field-container[data-v-59078dbb]{flex:1;display:flex;flex-direction:column;gap:.5rem}.uid-input[data-v-59078dbb]{width:100%}.field-desc[data-v-59078dbb]{font-size:.8rem;color:var(--k-color-text-description)}.field-desc code[data-v-59078dbb]{background:var(--k-color-bg-2);padding:.1em .4em;border-radius:4px;font-family:monospace}.verify-section[data-v-59078dbb]{border-top:1px solid var(--k-color-border);padding-top:1.5rem;margin-top:.5rem}.verify-card[data-v-59078dbb]{background:var(--k-color-bg-2);border-radius:8px;padding:1.5rem;display:flex;gap:2rem;align-items:center}.code-display[data-v-59078dbb]{display:flex;flex-direction:column;align-items:center;gap:.5rem;padding-right:2rem;border-right:1px dashed var(--k-color-border);min-width:150px}.code-label[data-v-59078dbb]{font-size:.85rem;color:var(--k-color-text-description)}.code-value[data-v-59078dbb]{font-size:2rem;font-family:monospace;font-weight:700;color:var(--k-color-active);letter-spacing:.1em}.code-meta[data-v-59078dbb]{font-size:.8rem;color:var(--k-color-text-description)}.verify-guide[data-v-59078dbb]{flex:1}.verify-guide p[data-v-59078dbb]{margin:0 0 .75rem;font-size:.9rem;color:var(--k-color-text)}.command-box[data-v-59078dbb]{background:var(--k-card-bg);padding:.75rem 1rem;border-radius:6px;border:1px solid var(--k-color-border);display:inline-block;margin-bottom:.75rem}.command-box code[data-v-59078dbb]{font-family:monospace;color:var(--k-color-active);font-weight:600}.small-hint[data-v-59078dbb]{font-size:.8rem!important;color:var(--k-color-text-description)!important;margin:0!important}.step-actions[data-v-59078dbb]{display:flex;justify-content:flex-end;gap:.75rem;padding-top:1.5rem;border-top:1px solid var(--k-color-border)}.setup-wizard[data-v-3931ca56]{position:fixed;top:0;left:0;right:0;bottom:0;background:var(--k-color-bg-1);z-index:9999;display:flex;align-items:center;justify-content:center;overflow:auto}.wizard-container[data-v-3931ca56]{width:100%;max-width:640px;padding:2rem}.wizard-header[data-v-3931ca56]{text-align:center;margin-bottom:2rem}.wizard-header h1[data-v-3931ca56]{font-size:1.75rem;font-weight:600;color:var(--k-color-text);margin:0 0 .5rem}.wizard-header p[data-v-3931ca56]{color:var(--k-color-text-description);margin:0}.steps-indicator[data-v-3931ca56]{display:flex;justify-content:center;gap:2rem;margin-bottom:2rem}.step-item[data-v-3931ca56]{display:flex;flex-direction:column;align-items:center;gap:.5rem;position:relative}.step-item[data-v-3931ca56]:not(:last-child):after{content:"";position:absolute;left:calc(50% + 20px);top:16px;width:calc(2rem + 20px);height:2px;background:var(--k-color-border)}.step-item.completed[data-v-3931ca56]:not(:last-child):after{background:var(--k-color-success)}.step-number[data-v-3931ca56]{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:.9rem;background:var(--k-color-bg-2);color:var(--k-color-text-description);border:2px solid var(--k-color-border);transition:all .2s}.step-item.active .step-number[data-v-3931ca56]{background:var(--k-color-active);color:#fff;border-color:var(--k-color-active)}.step-item.completed .step-number[data-v-3931ca56]{background:var(--k-color-success);color:#fff;border-color:var(--k-color-success)}.step-label[data-v-3931ca56]{font-size:.85rem;color:var(--k-color-text-description)}.step-item.active .step-label[data-v-3931ca56]{color:var(--k-color-text);font-weight:500}.step-item.completed .step-label[data-v-3931ca56]{color:var(--k-color-success)}.wizard-content[data-v-3931ca56]{background:var(--k-card-bg);border:1px solid var(--k-color-border);border-radius:12px;padding:2rem;min-height:400px}.step-complete[data-v-3931ca56]{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:3rem 0}.complete-icon[data-v-3931ca56]{font-size:4rem;color:var(--k-color-success);margin-bottom:1.5rem}.step-complete h2[data-v-3931ca56]{font-size:1.5rem;font-weight:600;color:var(--k-color-text);margin:0 0 .75rem}.step-complete p[data-v-3931ca56]{color:var(--k-color-text-description);margin:0 0 2rem}.fade-enter-active[data-v-3931ca56],.fade-leave-active[data-v-3931ca56]{transition:opacity .2s ease}.fade-enter-from[data-v-3931ca56],.fade-leave-to[data-v-3931ca56]{opacity:0}.app-layout[data-v-c4fa9f13]{background:var(--k-color-bg-1);height:100vh;min-height:0}.top-nav[data-v-c4fa9f13]{position:sticky;top:0;z-index:10;background:var(--k-color-bg-2);border-bottom:1px solid var(--k-color-border);height:50px}.nav-container[data-v-c4fa9f13]{max-width:1200px;margin:0 auto;padding:0 20px;height:50px;display:flex;flex-direction:row;align-items:center;gap:16px}.nav-tabs[data-v-c4fa9f13]{display:flex;flex-direction:row;gap:8px;margin-left:auto}.nav-tab[data-v-c4fa9f13]{display:inline-flex;flex-direction:row;align-items:center;gap:6px;padding:6px 12px;cursor:pointer;color:var(--k-color-text-description);border-bottom:2px solid transparent;transition:color .15s ease,border-color .15s ease;white-space:nowrap}.nav-tab[data-v-c4fa9f13]:hover{color:var(--k-color-text)}.nav-tab.active[data-v-c4fa9f13]{color:var(--k-color-active);border-bottom-color:var(--k-color-active);font-weight:600}.tab-icon[data-v-c4fa9f13]{display:inline-flex;font-size:14px;width:14px;height:14px;flex-shrink:0}.main-content[data-v-c4fa9f13]{max-width:1200px;margin:0 auto;padding:20px;height:calc(100vh - 50px);overflow:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;-ms-overflow-style:none}.main-content[data-v-c4fa9f13]::-webkit-scrollbar{width:0;height:0}.logo-area .logo-text[data-v-c4fa9f13]{font-weight:600;letter-spacing:.5px;color:var(--k-color-text);white-space:nowrap}.app-layout[data-v-c4fa9f13] .k-header,.app-layout[data-v-c4fa9f13] .k-view-header,.app-layout[data-v-c4fa9f13] .k-page-header,.app-layout[data-v-c4fa9f13] .k-toolbar{display:none!important;height:0!important;margin:0!important;padding:0!important}.el-dialog{background-color:var(--k-card-bg)!important;border-radius:12px!important;box-shadow:0 8px 32px #00000026!important;border:1px solid var(--k-color-border)!important;--el-dialog-bg-color: var(--k-card-bg) !important}.el-dialog__header{padding:1.25rem 1.5rem!important;border-bottom:1px solid var(--k-color-border)!important;margin-right:0!important}.el-dialog__title{font-weight:600!important;color:var(--k-color-text)!important;font-size:1.1rem!important}.el-dialog__headerbtn{top:1.25rem!important}.el-dialog__body{padding:1.5rem!important;color:var(--k-color-text)!important}.el-dialog__footer{padding:1.25rem 1.5rem!important;border-top:1px solid var(--k-color-border)!important;background-color:var(--k-color-bg-1)!important}.el-input__wrapper,.el-textarea__inner{background-color:var(--k-color-bg-2)!important;box-shadow:0 0 0 1px var(--k-color-border) inset!important}.el-input__wrapper:hover,.el-textarea__inner:hover{box-shadow:0 0 0 1px var(--k-color-active) inset!important}.el-input__wrapper.is-focus,.el-textarea__inner:focus{box-shadow:0 0 0 1px var(--k-color-active) inset!important;background-color:var(--k-color-bg-1)!important}.el-input__inner,.el-select-dropdown__item{color:var(--k-color-text)!important}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:var(--k-color-bg-2)!important}.el-popper.is-light{background:var(--k-card-bg)!important;border:1px solid var(--k-color-border)!important}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "koishi-plugin-media-luna",
3
3
  "description": "test webui",
4
- "version": "0.0.12",
4
+ "version": "0.0.13",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "exports": {