27 lines
63 KiB
JavaScript
27 lines
63 KiB
JavaScript
import{j as e,r as L,R as J}from"./router-zNjPR4CY.js";import{B as Pe}from"./badge-CDs67obV.js";import{u as De,ad as Ve,L as g,g as Me,a7 as ve,a8 as Ne,a9 as ye,aa as _e,I as q,C as ne,b as ie,d as ce,f as xe,ao as Ce,B as C,e as be,A as W,m as U,n as X,o as Y,q as Z,r as ee,s as se,t as te,v as re}from"./index-CuOHsLf7.js";import{S as V,a as M,b as H,c as z,d as A}from"./select-DGqIoF9r.js";import{T as G}from"./textarea-8PIujbf-.js";import{b2 as ue,W as He,w as E,a as ze,C as Re,v as I,ad as Ee,a0 as $e}from"./icons-DTcdLw9j.js";import{S as Ie}from"./separator-B_DSOSdz.js";import{K as Be}from"./key-value-editor-D1uUqXIn.js";import{S as Oe}from"./slider-mDhSC-zv.js";import{S as D}from"./switch-Kc2EZ0Ga.js";import{P as pe,a as he,b as je}from"./popover-DSuRLFDH.js";class Ge{hooks=new Map;register(s,r,n="replace"){this.hooks.set(s,{component:r,type:n})}get(s){return this.hooks.get(s)}has(s){return this.hooks.has(s)}unregister(s){this.hooks.delete(s)}clear(){this.hooks.clear()}getAllPaths(){return Array.from(this.hooks.keys())}}const Je=new Ge,we=({schema:t,value:s,onChange:r})=>{const{i18n:n}=De(),m=Ve(t,n.language),u=t.type==="integer"||t.type==="number",f=(c,w=0)=>{if(typeof c=="number"&&Number.isFinite(c))return c;if(typeof c=="string"){const y=parseFloat(c);if(Number.isFinite(y))return t.type==="integer"?Math.trunc(y):y}return w!==c?f(w,0):0},_=()=>{const c=t.items?.type??"string",w=Array.isArray(s)?s:Array.isArray(t.default)?t.default:[],y=w.map(T=>String(T??"")).join(`
|
||
`);return e.jsx(G,{value:y,onChange:T=>{const S=T.target.value.split(`
|
||
`).map(P=>P.trim()).filter(P=>P.length>0).map(P=>c==="integer"?parseInt(P,10)||0:c==="number"?parseFloat(P)||0:c==="boolean"?P==="true":P);r(S)},rows:Math.max(4,w.length||4)})},j=()=>{const c=s&&typeof s=="object"&&!Array.isArray(s)?s:{};return e.jsx(Be,{value:c,onChange:r})},N=()=>{if(!t["x-icon"])return null;const c=ue[t["x-icon"]];return c?e.jsx(c,{className:"h-4 w-4"}):null},h=t["x-option-descriptions"]??{},x=Object.keys(h).length>0,l=t["x-description-display"]??"label-hover",a=t.description,i=l==="inline"&&!x?a:"",d=(c,w="top")=>a?e.jsx(ve,{delayDuration:150,children:e.jsxs(Ne,{children:[e.jsx(ye,{asChild:!0,children:c}),e.jsx(_e,{side:w,align:"start",className:"max-w-80 whitespace-pre-line bg-background text-foreground border shadow-lg",children:a})]})}):c,p=()=>e.jsxs("div",{className:"flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1",children:[(()=>{const c=e.jsxs(g,{className:Me("inline-flex min-w-0 items-center gap-1.5 text-[15px] leading-6",l==="label-hover"&&a&&"cursor-help",t.advanced?"text-sky-700 dark:text-sky-300":"text-foreground"),children:[N(),e.jsx("span",{className:"break-words",children:m}),t.required&&e.jsx("span",{className:"text-destructive",children:"*"})]});return l==="label-hover"?d(c):c})(),l==="icon"&&a&&d(e.jsx("button",{type:"button","aria-label":`${m} 说明`,className:"inline-flex h-5 w-5 shrink-0 items-center justify-center rounded-full text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:e.jsx(He,{className:"h-4 w-4"})}),"right"),i&&e.jsx("span",{className:"text-[13px] leading-6 text-muted-foreground whitespace-pre-line",children:i})]}),$=()=>{const c=t["x-widget"],w=t.type,y=u&&(c==="input"||c==="number"||!c)?"number":c;if(y)switch(y){case"slider":return B();case"input":return v();case"number":return O();case"password":return v("password");case"switch":return R();case"textarea":return k();case"select":return o();case"custom":return w==="array"&&t.items&&t.items.type!=="object"?_():w==="object"?j():e.jsx("div",{className:"rounded-md border border-dashed border-muted-foreground/25 bg-muted/10 p-4 text-center text-sm text-muted-foreground",children:"Custom field requires Hook"})}switch(w){case"boolean":return R();case"number":case"integer":return O();case"string":return v();case"select":return o();case"array":return!t.items||t.items.type==="object"?e.jsx("div",{className:"rounded-md border border-dashed border-muted-foreground/25 bg-muted/10 p-4 text-center text-sm text-muted-foreground",children:"Complex array requires Hook"}):_();case"object":return j();case"textarea":return k();default:return e.jsxs("div",{className:"rounded-md border border-dashed border-muted-foreground/25 bg-muted/10 p-4 text-center text-sm text-muted-foreground",children:["Unknown field type: ",w]})}},R=()=>{const c=!!s;return e.jsxs("div",{className:"flex min-w-0 items-center justify-between gap-4 py-2",children:[e.jsx("div",{className:"min-w-0 pr-4",children:p()}),e.jsx(D,{checked:c,onCheckedChange:w=>r(w)})]})},B=()=>{const c=f(s,t.default),w=t.minValue??0,y=t.maxValue??100,T=t.step??1;return e.jsxs("div",{className:"min-w-0 space-y-2",children:[e.jsx(Oe,{value:[c],onValueChange:S=>r(S[0]),min:w,max:y,step:T}),e.jsxs("div",{className:"flex justify-between text-xs text-muted-foreground",children:[e.jsx("span",{children:w}),e.jsx("span",{className:"font-medium text-foreground",children:c}),e.jsx("span",{children:y})]})]})},O=()=>{const c=f(s,t.default),w=t.minValue,y=t.maxValue,T=t.step??(t.type==="integer"?1:.1);return e.jsx(q,{type:"number",value:c,onChange:S=>{const P=t.type==="integer"?parseInt(S.target.value,10):parseFloat(S.target.value);r(Number.isFinite(P)?P:0)},min:w,max:y,step:T})},v=(c="text")=>{const w=typeof s=="string"?s:s==null?String(t.default??""):String(s);return e.jsx(q,{type:c,value:w,onChange:y=>r(y.target.value)})},k=()=>{const c=typeof s=="string"?s:t.default??"",w=typeof t["x-textarea-min-height"]=="number"?t["x-textarea-min-height"]:void 0,y=typeof t["x-textarea-rows"]=="number"?t["x-textarea-rows"]:4;return e.jsx(G,{value:c,onChange:T=>r(T.target.value),rows:y,minHeight:w})},o=()=>{const c=typeof s=="string"?s:t.default??"",w=t.options??[];return w.length===0?e.jsx("div",{className:"rounded-md border border-dashed border-muted-foreground/25 bg-muted/10 p-4 text-center text-sm text-muted-foreground",children:"No options available for select"}):e.jsxs(V,{value:c,onValueChange:y=>r(y),children:[e.jsx(M,{children:e.jsx(H,{placeholder:`Select ${m}`})}),e.jsx(z,{children:x?e.jsx(ve,{delayDuration:150,children:w.map(y=>{const T=h[y];return T?e.jsxs(Ne,{children:[e.jsx(ye,{asChild:!0,children:e.jsx(A,{value:y,title:T,children:y})}),e.jsx(_e,{side:"right",align:"center",className:"max-w-72 bg-background text-foreground border shadow-lg",children:T})]},y):e.jsx(A,{value:y,children:y},y)})}):w.map(y=>e.jsx(A,{value:y,children:y},y))})]})},b=t["x-widget"]==="switch"||!t["x-widget"]&&t.type==="boolean",F=t["x-layout"]==="inline-right"&&["input","number","password","select",void 0].includes(t["x-widget"])&&["string","number","integer","select"].includes(t.type);return b?$():F?e.jsxs("div",{className:"flex flex-col gap-2 py-2 sm:flex-row sm:items-center",style:{"--field-input-width":t["x-input-width"]??"12rem"},children:[e.jsx("div",{className:"min-w-0 sm:shrink-0",children:p()}),e.jsx("div",{className:"min-w-20 flex-1 sm:ml-auto sm:max-w-[var(--field-input-width)]",children:$()})]}):e.jsxs("div",{className:"min-w-0 space-y-2",children:[p(),$()]})};function ae(t,s){return t?`${t}.${s}`:s}function Qe(t){return t.uiLabel||t.classDoc||t.className}function Se({iconName:t}){if(!t)return null;const s=ue[t];return s?e.jsx(s,{className:"h-5 w-5 text-muted-foreground"}):null}function Ke({advancedVisible:t,basePath:s,hooks:r,level:n,nestedSchema:m,onChange:u,sectionKey:f,sectionTitle:_,values:j}){return e.jsxs(ne,{className:"min-w-0",children:[e.jsx(ie,{className:"border-b border-border/50 pb-4",children:e.jsx("div",{className:"flex items-start justify-between gap-4",children:e.jsx("div",{className:"space-y-1",children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Se,{iconName:m.uiIcon}),e.jsx(ce,{className:"text-lg text-primary",children:_})]})})})}),e.jsx(xe,{className:"pt-4",children:e.jsx(K,{schema:m,values:j,onChange:(N,h)=>u(`${f}.${N}`,h),basePath:s,hooks:r,level:n,advancedVisible:t,sectionColumns:1})})]})}const K=({schema:t,values:s,onChange:r,basePath:n="",hooks:m=Je,level:u=0,advancedVisible:f,sectionColumns:_=1})=>{const j=f??!1,N=L.useMemo(()=>new Map(t.fields.map(v=>[v.name,v])),[t.fields]),h=v=>{const k=ae(n,v.name),o=t.nested?.[v.name];if(m.has(k)){const b=m.get(k);if(!b||b.type==="hidden")return null;const F=b.component;return b.type==="replace"?e.jsx(F,{fieldPath:k,value:s[v.name],onChange:c=>r(v.name,c),onParentChange:r,schema:v,nestedSchema:o,parentValues:s}):e.jsx(F,{fieldPath:k,value:s[v.name],onChange:c=>r(v.name,c),onParentChange:r,schema:v,nestedSchema:o,parentValues:s,children:e.jsx(we,{schema:v,value:s[v.name],onChange:c=>r(v.name,c),fieldPath:k})})}return e.jsx(we,{schema:v,value:s[v.name],onChange:b=>r(v.name,b),fieldPath:k})},x=v=>{const k=ae(n,v.name);return m.get(k)?.type==="hidden"?!1:t.nested?.[v.name]?m.get(k)?.type==="replace":!0},l=L.useCallback((v,k)=>{const o=v.fields??[];return o.some(F=>{const c=ae(k,F.name),w=m.get(c);return w?.type==="hidden"||v.nested?.[F.name]&&w?.type!=="replace"?!1:j||!F.advanced})?!0:Object.entries(v.nested??{}).some(([F,c])=>{const w=o.find(S=>S.name===F),y=ae(k,F),T=m.get(y);return T?.type==="hidden"||w?.advanced&&!j?!1:T?.type==="replace"?!0:l(c,y)})},[m,j]),a=t.fields.filter(x),i=new Set(a.filter(v=>!!t.nested?.[v.name]).map(v=>v.name)),d=a.filter(v=>!v.advanced),p=a.filter(v=>v.advanced),$=j?[...d,...p]:d,R=v=>{const k=[];let o=[],b;for(const F of v){const c=F["x-row"];if(c&&c===b){o.push(F);continue}o.length>0&&k.push(o),o=[F],b=c}return o.length>0&&k.push(o),k},B=v=>e.jsx(e.Fragment,{children:v.map(k=>k.length>1?e.jsx("div",{className:"grid min-w-0 gap-4 py-1 md:grid-cols-[repeat(var(--field-row-count),minmax(0,1fr))]",style:{"--field-row-count":k.length},children:k.map(o=>e.jsx("div",{className:"min-w-0",children:h(o)},o.name))},k.map(o=>o.name).join("|")):e.jsx("div",{className:"min-w-0 py-1",children:h(k[0])},k[0].name))}),O=v=>e.jsx(e.Fragment,{children:R(v).map((k,o)=>e.jsxs(L.Fragment,{children:[o>0&&e.jsx(Ie,{className:"my-2 bg-border/50"}),B([k])]},k.map(b=>b.name).join("|")))});return e.jsxs("div",{className:"min-w-0 space-y-6",children:[$.length>0&&e.jsx("div",{children:O($)}),t.nested&&(()=>{const k=Object.entries(t.nested).filter(([o])=>!i.has(o)).map(([o,b])=>{const F=N.get(o),c=ae(n,o);if(m.has(c)){const y=m.get(c);if(!y||y.type==="hidden"||F?.advanced&&!j||y.type!=="replace"&&b&&!l(b,c))return null;const T=y.component;return y.type==="replace"?e.jsx("div",{className:"min-w-0",children:e.jsx(T,{fieldPath:c,value:s[o],onChange:S=>r(o,S),onParentChange:r,schema:F??b,nestedSchema:b,parentValues:s})},o):e.jsx("div",{className:"min-w-0",children:e.jsx(T,{fieldPath:c,value:s[o],onChange:S=>r(o,S),onParentChange:r,schema:F??b,nestedSchema:b,parentValues:s,children:e.jsx(K,{schema:b,values:s[o]||{},onChange:(S,P)=>r(`${o}.${S}`,P),basePath:c,hooks:m,level:u+1,advancedVisible:j,sectionColumns:1})})},o)}const w=Qe(b);return l(b,c)?u===0?e.jsx(Ke,{advancedVisible:j,nestedSchema:b,values:s[o]||{},onChange:r,basePath:c,hooks:m,level:u+1,sectionKey:o,sectionTitle:w},o):e.jsxs(ne,{className:"min-w-0 border-border/70 bg-muted/20 shadow-none",children:[e.jsx(ie,{className:"border-b border-border/50 px-4 py-3",children:e.jsx("div",{className:"flex items-start justify-between gap-4",children:e.jsx("div",{className:"space-y-1",children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Se,{iconName:b.uiIcon}),e.jsx(ce,{className:"text-sm text-primary",children:w})]})})})}),e.jsx(xe,{className:"px-4 pb-4 pt-4",children:e.jsx(K,{schema:b,values:s[o]||{},onChange:(y,T)=>r(`${o}.${y}`,T),basePath:c,hooks:m,level:u+1,advancedVisible:j,sectionColumns:1})})]},o):null}).filter(o=>!!o);return u===0&&_===2&&k.length>1?e.jsx("div",{className:"grid min-w-0 gap-4 md:grid-cols-2",children:k}):k})()]})};function We(t,s){return t?"label"in t&&t.label?Ce(t.label,void 0,s?.split(".").at(-1)||"JSON 配置"):"uiLabel"in t&&t.uiLabel?t.uiLabel:"classDoc"in t&&t.classDoc?t.classDoc:"className"in t&&t.className?t.className:s?.split(".").at(-1)||"JSON 配置":s?.split(".").at(-1)||"JSON 配置"}function Ue(t){return t?"description"in t?t.description||"":"classDoc"in t&&t.classDoc||"":""}function Fe(t){return({fieldPath:r,onChange:n,schema:m,value:u})=>{const f=L.useMemo(()=>u===void 0?t.emptyValue:u,[u]),[_,j]=L.useState(()=>JSON.stringify(f,null,2)),[N,h]=L.useState("");L.useEffect(()=>{j(JSON.stringify(f,null,2)),h("")},[f]);const x=We(m,r),l=Ue(m);return e.jsxs("div",{className:"space-y-3 rounded-lg border bg-card p-4 sm:p-6",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("h3",{className:"text-base font-semibold",children:x}),l&&e.jsx("p",{className:"text-sm text-muted-foreground whitespace-pre-line",children:l}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t.helperText})]}),e.jsx(G,{className:"min-h-[220px] font-mono text-sm",placeholder:t.placeholder,value:_,onChange:a=>{const i=a.target.value;j(i);try{const d=JSON.parse(i);h(""),n?.(d)}catch(d){h(d instanceof Error?d.message:"JSON 格式错误")}}}),N?e.jsxs("p",{className:"text-sm text-destructive",children:["JSON 解析失败:",N]}):e.jsx("p",{className:"text-sm text-muted-foreground",children:"JSON 有效,修改会立即写回配置草稿。"})]})}}function Xe(t,s){return t?"label"in t&&t.label?Ce(t.label,void 0,s?.split(".").at(-1)??"列表配置"):"uiLabel"in t&&t.uiLabel?t.uiLabel:"classDoc"in t&&t.classDoc?t.classDoc:"className"in t&&t.className?t.className:s?.split(".").at(-1)??"列表配置":s?.split(".").at(-1)??"列表配置"}function Ye(t){return t?"description"in t&&t.description?t.description:"classDoc"in t&&t.classDoc?t.classDoc:"":""}function Ze(t,s,r){if(t)return t;if(s&&"x-icon"in s&&s["x-icon"])return s["x-icon"];if(r?.uiIcon)return r.uiIcon}function es(t,s){if(!t)return null;const r=ue[t];return r?e.jsx(r,{className:s}):null}function ss(t){if(!t?.fields)return{};const s={};for(const r of t.fields){if("default"in r&&r.default!==void 0){Array.isArray(r.default)?s[r.name]=[...r.default]:r.default!==null&&typeof r.default=="object"?s[r.name]={...r.default}:s[r.name]=r.default;continue}switch(r.type){case"boolean":s[r.name]=!1;break;case"integer":case"number":s[r.name]=0;break;case"array":s[r.name]=[];break;case"object":s[r.name]={};break;case"select":s[r.name]=r.options?.[0]??"";break;default:s[r.name]=""}}return s}function ts(t,s,r){const n=s.split(".");if(n.length===1){t[n[0]]=r;return}let m=t;for(let u=0;u<n.length-1;u++){const f=n[u],_=m[f];_&&typeof _=="object"&&!Array.isArray(_)?m[f]={..._}:m[f]={},m=m[f]}m[n[n.length-1]]=r}function le(t={}){return({fieldPath:r,onChange:n,schema:m,nestedSchema:u,parentValues:f,value:_})=>{const j=L.useMemo(()=>Array.isArray(_)?_.map(o=>o&&typeof o=="object"&&!Array.isArray(o)?o:{}):[],[_]),N=L.useCallback(()=>{const o=[...j,ss(u)];n?.(o)},[j,u,n]),h=L.useCallback(o=>{const b=j.filter((F,c)=>c!==o);n?.(b)},[j,n]),x=L.useCallback((o,b,F)=>{const c=j.map((w,y)=>{if(y!==o)return w;const T={...w};return ts(T,b,F),T});n?.(c)},[j,n]),l=(o,b)=>{if(!u)return null;if(!t.fieldRows?.length)return e.jsx(K,{schema:u,values:o,onChange:(S,P)=>x(b,S,P),basePath:"",level:1});const F=S=>({...S,...t.fieldSchemaOverrides?.[S.name]??{}}),c=new Map(u.fields.map(S=>[S.name,F(S)])),w=new Set(t.fieldRows.flat()),y=u.fields.filter(S=>!w.has(S.name)).map(F),T=S=>({...u,fields:S,nested:void 0});return e.jsxs("div",{className:"space-y-3",children:[t.fieldRows.map((S,P)=>{const me=S.map(Q=>c.get(Q)).filter(Q=>!!Q);return me.length===0?null:e.jsx("div",{className:"grid gap-3 md:grid-cols-[repeat(var(--field-count),minmax(0,1fr))]",style:{"--field-count":me.length},children:me.map(Q=>e.jsx(K,{schema:T([Q]),values:o,onChange:(qe,Le)=>x(b,qe,Le),basePath:"",level:1},Q.name))},P)}),y.length>0&&e.jsx(K,{schema:T(y),values:o,onChange:(S,P)=>x(b,S,P),basePath:"",level:1})]})},a=Xe(m,r),i=Ye(m),d=Ze(t.iconName,m,u),p=t.addButtonPlacement??"bottom",$=t.collapseWhen?.({parentValues:f})??!1,[R,B]=L.useState(!1),O=$&&!R,v=O?t.expandLabel??"灞曞紑":t.collapseLabel??"鎶樺彔";L.useEffect(()=>{$||B(!1)},[$]);const k=e.jsxs(C,{type:"button",variant:"outline",size:"sm",onClick:N,className:"w-full",children:[e.jsx(E,{className:"mr-1 h-4 w-4"}),t.addLabel??"添加一项"]});return u?e.jsxs(ne,{children:[e.jsxs(ie,{className:"space-y-2 pb-4",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[es(d,"h-5 w-5 flex-shrink-0 text-muted-foreground"),e.jsx(ce,{className:"truncate text-base",children:a})]}),$&&t.collapseButtonDisplay==="icon"&&e.jsx(C,{type:"button",variant:"outline",size:"icon",onClick:()=>B(o=>!o),"aria-label":v,title:v,className:"inline-flex items-center justify-center",children:O?e.jsx(ze,{className:"h-4 w-4"}):e.jsx(Re,{className:"h-4 w-4"})}),$&&t.collapseButtonDisplay!=="icon"&&e.jsx(C,{type:"button",variant:"outline",size:"sm",onClick:()=>B(o=>!o),"aria-label":v,title:v,children:O?t.expandLabel??"展开":t.collapseLabel??"折叠"})]}),i&&e.jsx(be,{className:"whitespace-pre-line",children:i}),t.helperText&&e.jsx("p",{className:"text-xs text-muted-foreground",children:t.helperText})]}),e.jsx(xe,{className:"space-y-3",children:O?e.jsx("div",{className:"rounded-md border border-dashed border-muted-foreground/25 bg-muted/10 p-4 text-sm text-muted-foreground",children:t.collapsedText??"当前配置已折叠,可手动展开查看或编辑。"}):e.jsxs(e.Fragment,{children:[p==="top"&&k,j.length===0?e.jsx("div",{className:"rounded-md border border-dashed border-muted-foreground/25 bg-muted/10 p-6 text-center text-sm text-muted-foreground",children:t.emptyText??"尚未添加任何条目,点击下方按钮新增。"}):j.map((o,b)=>{const F=t.itemTitle?.(o,b)??`条目 ${b+1}`;return e.jsxs("div",{className:"space-y-3 rounded-lg border bg-card/40 p-4",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm font-semibold",children:[e.jsx("span",{className:"inline-flex h-6 min-w-6 items-center justify-center rounded-full bg-muted px-2 text-xs font-medium text-muted-foreground",children:b+1}),e.jsx("span",{className:"truncate",children:F})]}),e.jsxs(C,{type:"button",variant:"ghost",size:"sm",className:"text-destructive hover:text-destructive",onClick:()=>h(b),children:[e.jsx(I,{className:"mr-1 h-4 w-4"}),"删除"]})]}),l(o,b)]},b)}),p==="bottom"&&k]})})]}):e.jsx(ne,{children:e.jsxs(ie,{children:[e.jsx(ce,{className:"text-base",children:a}),e.jsx(be,{children:"未获取到子配置 schema,无法渲染富编辑器。"})]})})}}const oe=t=>t==="private"?"私聊":t==="group"?"群聊":t?String(t):"未指定",fe=t=>{const s=typeof t.platform=="string"?t.platform.trim():"",r=typeof t.item_id=="string"?t.item_id.trim():"";return!s&&!r?"全局":s?r?`${s}:${r}`:s:r},ge=(t,s=32)=>t.length<=s?t:`${t.slice(0,s)}…`,de=t=>Array.isArray(t)?t.map(s=>typeof s=="string"?s.trim():"").filter(s=>s.length>0):[],Te=t=>t==="private"?"private":"group",rs=t=>{const s=t&&typeof t=="object"?t:{};return{platform:typeof s.platform=="string"?s.platform.trim():"qq",item_id:typeof s.item_id=="string"?s.item_id.trim():"",rule_type:Te(s.rule_type)}},as=t=>Array.isArray(t)?t.map(s=>{const r=s&&typeof s=="object"?s:{};return{expression_groups:Array.isArray(r.expression_groups)?r.expression_groups.map(rs):[]}}):[],ls=()=>({platform:"qq",item_id:"",rule_type:"group"}),ns=t=>{const s=t.platform.trim(),r=t.item_id.trim(),n=oe(t.rule_type);return!s&&!r?`全局 · ${n}`:r?`${s}:${r} · ${n}`:`${s} · ${n}`},is=t=>Array.isArray(t)?t.map(s=>String(s??"")):[],cs=t=>{const s=t.indexOf(":");return s<0?{platform:"",account:t}:{platform:t.slice(0,s),account:t.slice(s+1)}},ds=t=>{const s=t.platform.trim(),r=t.account.trim();return s?r?`${s}:${r}`:`${s}:`:r};function Ae(t){return({onChange:s,value:r})=>{const n=Array.isArray(r)?r.map(N=>String(N??"")):[],m=N=>{s?.(N)},u=()=>{m([...n,""])},f=N=>{m(n.filter((h,x)=>x!==N))},_=(N,h)=>{m(n.map((x,l)=>l===N?h:x))},j=t.multiline?G:q;return e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[e.jsx(g,{className:"text-[15px] leading-6",children:t.label}),e.jsxs(C,{type:"button",size:"sm",variant:"outline",onClick:u,children:[e.jsx(E,{className:"mr-2 h-4 w-4"}),t.addLabel]})]}),n.length===0?e.jsx("div",{className:"rounded-md border border-dashed bg-muted/30 px-4 py-5 text-center text-sm text-muted-foreground",children:t.emptyText}):e.jsx("div",{className:"space-y-2",children:n.map((N,h)=>e.jsxs("div",{className:"grid gap-2 rounded-md border bg-muted/20 p-3 sm:grid-cols-[minmax(0,1fr)_2.5rem]",children:[e.jsx(j,{value:N,placeholder:t.placeholder,onChange:x=>_(h,x.target.value),...t.multiline?{rows:2}:{}}),e.jsx("div",{className:"flex items-start justify-end",children:e.jsx(C,{type:"button",size:"icon",variant:"ghost","aria-label":`删除${t.label} ${h+1}`,onClick:()=>f(h),children:e.jsx(I,{className:"h-4 w-4"})})})]},h))})]})}}const bs=Ae({addLabel:"添加别名",emptyText:"暂无别名。",label:"别名",placeholder:"小麦"}),ws=Ae({addLabel:"添加表达风格",emptyText:"暂无备用表达风格。",label:"备用表达风格",multiline:!0,placeholder:"输入一种备用表达风格"}),ks=le({addLabel:"添加发言频率规则",addButtonPlacement:"top",collapseWhen:({parentValues:t})=>t?.enable_talk_value_rules===!1,collapsedText:"动态发言频率规则未启用,规则列表已折叠。展开后仍可查看或编辑已有规则。",expandLabel:"展开规则",collapseLabel:"折叠规则",helperText:"可按平台/聊天流/时段分别配置发言频率,留空表示全局。",emptyText:"尚未配置任何规则,将使用全局默认频率。",collapseButtonDisplay:"icon",fieldRows:[["platform","item_id","rule_type"],["time","value"]],itemTitle:t=>{const s=typeof t.time=="string"&&t.time.trim()?t.time.trim():"全天",r=typeof t.value=="number"?t.value.toFixed(2):"—";return`${fe(t)} · ${oe(t.rule_type)} · ${s} · 频率 ${r}`}}),Cs=le({addLabel:"添加额外 Prompt",helperText:"为指定平台和聊天流添加额外提示。platform、item_id 和 prompt 同时留空时表示空条目;填写任意一项后这三项都需要填写。",emptyText:"尚未配置任何聊天额外 Prompt。",addButtonPlacement:"top",fieldRows:[["platform","item_id","rule_type"]],fieldSchemaOverrides:{item_id:{"x-input-width":"8rem","x-layout":"inline-right"},platform:{"x-input-width":"8rem","x-layout":"inline-right"},prompt:{"x-textarea-min-height":38,"x-textarea-rows":1},rule_type:{"x-input-width":"8rem","x-layout":"inline-right"}},iconName:"file-text",itemTitle:t=>{const s=typeof t.prompt=="string"?t.prompt.trim():"";return`${fe(t)} · ${oe(t.rule_type)} · ${s?ge(s):"未填写 Prompt"}`}}),$s=le({addLabel:"添加表达学习规则",helperText:"为不同聊天流单独配置是否启用表达/jargon 学习。",emptyText:"尚未配置任何学习规则。",fieldRows:[["platform","item_id","rule_type"],["use_expression","enable_learning","enable_jargon_learning"]],itemTitle:t=>{const s=[];t.use_expression&&s.push("表达"),t.enable_learning&&s.push("优化学习"),t.enable_jargon_learning&&s.push("jargon");const r=s.length?s.join(" / "):"全部关闭";return`${fe(t)} · ${oe(t.rule_type)} · ${r}`}}),Ss=()=>null,Fs=({onChange:t,onParentChange:s,parentValues:r,value:n})=>{const m=typeof n=="string"?n:"",u=r?.qq_account,f=typeof u=="string"||typeof u=="number"?String(u):"",j=is(r?.platforms).map(cs),N=a=>{s?.("platforms",a.map(ds))},h=()=>{N([...j,{platform:"",account:""}])},x=a=>{N(j.filter((i,d)=>d!==a))},l=(a,i)=>{N(j.map((d,p)=>p===a?{...d,...i}:d))};return e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[e.jsx("div",{className:"space-y-1",children:e.jsx(g,{className:"text-[15px] font-semibold leading-6",children:"平台账号"})}),e.jsxs(C,{type:"button",size:"sm",variant:"outline",onClick:h,children:[e.jsx(E,{className:"mr-2 h-4 w-4"}),"添加平台"]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"grid gap-2 rounded-md border bg-muted/20 p-3 sm:grid-cols-[minmax(7rem,0.6fr)_minmax(10rem,1fr)_2.5rem]",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(g,{className:"text-xs",children:"平台"}),e.jsx(q,{value:m,placeholder:"qq",onChange:a=>t?.(a.target.value)})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(g,{className:"text-xs",children:"账号"}),e.jsx(q,{className:"font-mono",value:f,placeholder:"2814567326",onChange:a=>s?.("qq_account",a.target.value)})]}),e.jsx("div",{className:"flex items-end justify-end",children:e.jsx("span",{className:"rounded-md bg-primary/10 px-2 py-1 text-xs font-medium text-primary",children:"主"})})]}),j.map((a,i)=>e.jsxs("div",{className:"grid gap-2 rounded-md border bg-muted/20 p-3 sm:grid-cols-[minmax(7rem,0.6fr)_minmax(10rem,1fr)_2.5rem]",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(g,{className:"text-xs",children:"平台"}),e.jsx(q,{value:a.platform,placeholder:"wx",onChange:d=>l(i,{platform:d.target.value})})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(g,{className:"text-xs",children:"账号"}),e.jsx(q,{className:"font-mono",value:a.account,placeholder:"114514",onChange:d=>l(i,{account:d.target.value})})]}),e.jsx("div",{className:"flex items-end justify-end",children:e.jsx(C,{type:"button",size:"icon",variant:"ghost","aria-label":`删除其他平台 ${i+1}`,onClick:()=>x(i),children:e.jsx(I,{className:"h-4 w-4"})})})]},i))]})]})},Ts=le({addLabel:"添加关键词规则",helperText:"匹配命中后会用 reaction 内容作为额外上下文。keywords 至少填一条,或使用正则模式。",emptyText:"尚未添加任何关键词规则。",itemTitle:t=>{const s=de(t.keywords),r=de(t.regex),n=typeof t.reaction=="string"?t.reaction.trim():"",m=s.length?`关键词 ${s.length} 条`:r.length?`正则 ${r.length} 条`:"未配置匹配项",u=n?`→ ${ge(n)}`:"→ 未填写反应";return`${m} ${u}`}}),As=le({addLabel:"添加正则规则",helperText:"正则模式按 Python 语法编写,命中时把 reaction 作为提示注入。",emptyText:"尚未添加任何正则规则。",itemTitle:t=>{const s=de(t.regex),r=de(t.keywords),n=typeof t.reaction=="string"?t.reaction.trim():"",m=s.length?`正则 ${s.length} 条`:r.length?`关键词 ${r.length} 条`:"未配置匹配项",u=n?`→ ${ge(n)}`:"→ 未填写反应";return`${m} ${u}`}}),qs=({onChange:t,value:s})=>{const r=as(s),n=N=>{t?.(N)},m=()=>{n([...r,{expression_groups:[]}])},u=N=>{n(r.filter((h,x)=>x!==N))},f=N=>{n(r.map((h,x)=>x===N?{expression_groups:[...h.expression_groups,ls()]}:h))},_=(N,h)=>{n(r.map((x,l)=>l===N?{expression_groups:x.expression_groups.filter((a,i)=>i!==h)}:x))},j=(N,h,x)=>{n(r.map((l,a)=>a===N?{expression_groups:l.expression_groups.map((i,d)=>d===h?{...i,...x}:i)}:l))};return e.jsxs("div",{className:"space-y-3 rounded-lg border bg-card p-4 sm:p-5",children:[e.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("h3",{className:"text-base font-semibold",children:"表达互通组"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"每个互通组内的聊天流会共享已学习的表达方式。成员会保存为 expression_groups 数组结构。"})]}),e.jsxs(C,{type:"button",size:"sm",variant:"outline",onClick:m,children:[e.jsx(E,{className:"mr-2 h-4 w-4"}),"添加互通组"]})]}),r.length===0?e.jsx("div",{className:"rounded-md border border-dashed bg-muted/30 px-4 py-8 text-center text-sm text-muted-foreground",children:"暂无互通组,点击“添加互通组”开始配置。"}):e.jsx("div",{className:"space-y-2",children:r.map((N,h)=>e.jsxs("div",{className:"space-y-2 rounded-md border bg-muted/20 p-2.5 sm:p-3",children:[e.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs("span",{className:"text-sm font-medium",children:["互通组 ",h+1]}),e.jsxs(Pe,{variant:"secondary",children:[N.expression_groups.length," 个成员"]})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(C,{type:"button",size:"sm",variant:"outline",onClick:()=>f(h),children:[e.jsx(E,{className:"mr-2 h-4 w-4"}),"添加成员"]}),e.jsx(C,{type:"button",size:"icon",variant:"ghost","aria-label":`删除互通组 ${h+1}`,onClick:()=>u(h),children:e.jsx(I,{className:"h-4 w-4"})})]})]}),N.expression_groups.length===0?e.jsx("div",{className:"rounded-md bg-background/70 px-3 py-4 text-sm text-muted-foreground",children:"这个互通组还没有成员。"}):e.jsx("div",{className:"space-y-1.5",children:N.expression_groups.map((x,l)=>e.jsxs("div",{className:"grid items-end gap-2 rounded-md bg-background/80 px-2.5 py-2 md:grid-cols-[minmax(6rem,0.65fr)_minmax(9rem,1fr)_minmax(7rem,0.75fr)_2.25rem]",children:[e.jsxs("div",{className:"space-y-0.5",children:[e.jsx(g,{className:"text-[11px] leading-none text-muted-foreground",children:"平台"}),e.jsx(q,{className:"h-8",value:x.platform,placeholder:"qq",onChange:a=>j(h,l,{platform:a.target.value})})]}),e.jsxs("div",{className:"space-y-0.5",children:[e.jsx(g,{className:"text-[11px] leading-none text-muted-foreground",children:"账号 / 群号"}),e.jsx(q,{className:"h-8 font-mono",value:x.item_id,placeholder:"123456",onChange:a=>j(h,l,{item_id:a.target.value})})]}),e.jsxs("div",{className:"space-y-0.5",children:[e.jsx(g,{className:"text-[11px] leading-none text-muted-foreground",children:"类型"}),e.jsxs(V,{value:x.rule_type,onValueChange:a=>j(h,l,{rule_type:Te(a)}),children:[e.jsx(M,{className:"h-8",children:e.jsx(H,{})}),e.jsxs(z,{children:[e.jsx(A,{value:"group",children:"群聊"}),e.jsx(A,{value:"private",children:"私聊"})]})]})]}),e.jsxs("div",{className:"flex items-end justify-between gap-2 md:justify-end",children:[e.jsx("span",{className:"min-w-0 truncate text-xs text-muted-foreground md:hidden",children:ns(x)}),e.jsx(C,{type:"button",size:"icon",variant:"ghost",className:"h-8 w-8","aria-label":`删除互通组 ${h+1} 的成员 ${l+1}`,onClick:()=>_(h,l),children:e.jsx(I,{className:"h-4 w-4"})})]})]},`${h}-${l}`))})]},h))})]})},Ls=Fe({emptyValue:[],helperText:"MCP Roots 条目为对象数组,使用 JSON 编辑。",placeholder:`[
|
||
{
|
||
"enabled": true,
|
||
"uri": "file:///Users/example/project",
|
||
"name": "project-root"
|
||
}
|
||
]`}),Ps=Fe({emptyValue:[],helperText:"MCP 服务器配置结构较复杂,使用 JSON 编辑。",placeholder:`[
|
||
{
|
||
"name": "example-server",
|
||
"enabled": true,
|
||
"transport": "stdio",
|
||
"command": "uvx",
|
||
"args": ["example-server"],
|
||
"env": {},
|
||
"url": "",
|
||
"headers": {},
|
||
"http_timeout_seconds": 30.0,
|
||
"read_timeout_seconds": 300.0,
|
||
"authorization": {
|
||
"mode": "none",
|
||
"bearer_token": ""
|
||
}
|
||
}
|
||
]`});J.memo(function({value:s,onChange:r}){const n=L.useMemo(()=>{const a=s.split("-");if(a.length===2){const[i,d]=a,[p,$]=i.split(":"),[R,B]=d.split(":");return{startHour:p?p.padStart(2,"0"):"00",startMinute:$?$.padStart(2,"0"):"00",endHour:R?R.padStart(2,"0"):"23",endMinute:B?B.padStart(2,"0"):"59"}}return{startHour:"00",startMinute:"00",endHour:"23",endMinute:"59"}},[s]),[m,u]=L.useState(n.startHour),[f,_]=L.useState(n.startMinute),[j,N]=L.useState(n.endHour),[h,x]=L.useState(n.endMinute);L.useEffect(()=>{u(n.startHour),_(n.startMinute),N(n.endHour),x(n.endMinute)},[n]);const l=(a,i,d,p)=>{const $=`${a}:${i}-${d}:${p}`;r($)};return e.jsxs(pe,{children:[e.jsx(he,{asChild:!0,children:e.jsxs(C,{variant:"outline",className:"w-full justify-start font-mono text-sm",children:[e.jsx(Ee,{className:"h-4 w-4 mr-2"}),s||"选择时间段"]})}),e.jsx(je,{className:"w-72 sm:w-80",children:e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h4",{className:"font-medium text-sm mb-3",children:"开始时间"}),e.jsxs("div",{className:"grid grid-cols-2 gap-2 sm:gap-3",children:[e.jsxs("div",{children:[e.jsx(g,{className:"text-xs",children:"小时"}),e.jsxs(V,{value:m,onValueChange:a=>{u(a),l(a,f,j,h)},children:[e.jsx(M,{children:e.jsx(H,{})}),e.jsx(z,{children:Array.from({length:24},(a,i)=>i).map(a=>e.jsx(A,{value:a.toString().padStart(2,"0"),children:a.toString().padStart(2,"0")},a))})]})]}),e.jsxs("div",{children:[e.jsx(g,{className:"text-xs",children:"分钟"}),e.jsxs(V,{value:f,onValueChange:a=>{_(a),l(m,a,j,h)},children:[e.jsx(M,{children:e.jsx(H,{})}),e.jsx(z,{children:Array.from({length:60},(a,i)=>i).map(a=>e.jsx(A,{value:a.toString().padStart(2,"0"),children:a.toString().padStart(2,"0")},a))})]})]})]})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-medium text-sm mb-3",children:"结束时间"}),e.jsxs("div",{className:"grid grid-cols-2 gap-2 sm:gap-3",children:[e.jsxs("div",{children:[e.jsx(g,{className:"text-xs",children:"小时"}),e.jsxs(V,{value:j,onValueChange:a=>{N(a),l(m,f,a,h)},children:[e.jsx(M,{children:e.jsx(H,{})}),e.jsx(z,{children:Array.from({length:24},(a,i)=>i).map(a=>e.jsx(A,{value:a.toString().padStart(2,"0"),children:a.toString().padStart(2,"0")},a))})]})]}),e.jsxs("div",{children:[e.jsx(g,{className:"text-xs",children:"分钟"}),e.jsxs(V,{value:h,onValueChange:a=>{x(a),l(m,f,j,a)},children:[e.jsx(M,{children:e.jsx(H,{})}),e.jsx(z,{children:Array.from({length:60},(a,i)=>i).map(a=>e.jsx(A,{value:a.toString().padStart(2,"0"),children:a.toString().padStart(2,"0")},a))})]})]})]})]})]})})]})});J.memo(function({rule:s}){const r=`{ target = "${s.target}", time = "${s.time}", value = ${s.value.toFixed(1)} }`;return e.jsxs(pe,{children:[e.jsx(he,{asChild:!0,children:e.jsxs(C,{variant:"outline",size:"sm",children:[e.jsx($e,{className:"h-4 w-4 mr-1"}),"预览"]})}),e.jsx(je,{className:"w-80 sm:w-96",children:e.jsxs("div",{className:"space-y-2",children:[e.jsx("h4",{className:"font-medium text-sm",children:"配置预览"}),e.jsx("div",{className:"rounded-md bg-muted p-3 font-mono text-xs break-all",children:r}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"这是保存到 bot_config.toml 文件中的格式"})]})})]})});J.memo(function({config:s,onChange:r}){const n=()=>{r({...s,states:[...s.states,""]})},m=f=>{r({...s,states:s.states.filter((_,j)=>j!==f)})},u=(f,_)=>{const j=[...s.states];j[f]=_,r({...s,states:j})};return e.jsx("div",{className:"rounded-lg border bg-card p-4 sm:p-6 space-y-6",children:e.jsxs("div",{children:[e.jsx("h3",{className:"text-lg font-semibold mb-4",children:"人格设置"}),e.jsxs("div",{className:"grid gap-4",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(g,{htmlFor:"personality",children:"人格特质"}),e.jsx(G,{id:"personality",value:s.personality,onChange:f=>r({...s,personality:f.target.value}),placeholder:"描述人格特质和身份特征(建议120字以内)",rows:3}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"建议120字以内,描述人格特质和身份特征"})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(g,{children:"多重人格"}),e.jsxs(C,{onClick:n,size:"sm",variant:"outline",children:[e.jsx(E,{className:"h-4 w-4 mr-1"}),"添加人格"]})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"可以定义多个不同的人格状态,麦麦会随机切换"}),e.jsx("div",{className:"space-y-2",children:s.states.map((f,_)=>e.jsxs("div",{className:"flex gap-2",children:[e.jsx(G,{value:f,onChange:j=>u(_,j.target.value),placeholder:"描述一个人格状态",rows:2}),e.jsxs(W,{children:[e.jsx(U,{asChild:!0,children:e.jsx(C,{size:"icon",variant:"outline",children:e.jsx(I,{className:"h-4 w-4"})})}),e.jsxs(X,{children:[e.jsxs(Y,{children:[e.jsx(Z,{children:"确认删除"}),e.jsx(ee,{children:"确定要删除这个人格状态吗?此操作无法撤销。"})]}),e.jsxs(se,{children:[e.jsx(te,{children:"取消"}),e.jsx(re,{onClick:()=>m(_),children:"删除"})]})]})]})]},_))})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(g,{htmlFor:"state_probability",children:"替换为多重人格概率"}),e.jsx(q,{id:"state_probability",type:"number",step:"0.1",min:"0",max:"1",value:s.state_probability,onChange:f=>r({...s,state_probability:parseFloat(f.target.value)})}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"每次构建人格时,用多重人格替换主人格的概率(0.0-1.0)"})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(g,{htmlFor:"reply_style",children:"表达风格"}),e.jsx(G,{id:"reply_style",value:s.reply_style,onChange:f=>r({...s,reply_style:f.target.value}),placeholder:"描述说话的表达风格和习惯",rows:3})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(g,{htmlFor:"plan_style",children:"说话规则与行为风格"}),e.jsx(G,{id:"plan_style",value:s.plan_style,onChange:f=>r({...s,plan_style:f.target.value}),placeholder:"麦麦的说话规则和行为风格",rows:5})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(g,{htmlFor:"visual_style",children:"识图规则"}),e.jsx(G,{id:"visual_style",value:s.visual_style,onChange:f=>r({...s,visual_style:f.target.value}),placeholder:"识图时的处理规则",rows:3})]})]})]})})});J.memo(function({config:s,onChange:r}){return e.jsxs("div",{className:"rounded-lg border bg-card p-4 sm:p-6 space-y-4",children:[e.jsx("h3",{className:"text-lg font-semibold",children:"调试配置"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"space-y-0.5",children:[e.jsx(g,{children:"显示 Prompt"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"是否在日志中显示提示词"})]}),e.jsx(D,{checked:s.show_prompt,onCheckedChange:n=>r({...s,show_prompt:n})})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"space-y-0.5",children:[e.jsx(g,{children:"显示回复器 Prompt"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"是否显示回复器的提示词"})]}),e.jsx(D,{checked:s.show_replyer_prompt,onCheckedChange:n=>r({...s,show_replyer_prompt:n})})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"space-y-0.5",children:[e.jsx(g,{children:"显示回复器推理"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"是否显示回复器的推理过程"})]}),e.jsx(D,{checked:s.show_replyer_reasoning,onCheckedChange:n=>r({...s,show_replyer_reasoning:n})})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"space-y-0.5",children:[e.jsx(g,{children:"显示 Jargon Prompt"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"是否显示术语相关的提示词"})]}),e.jsx(D,{checked:s.show_jargon_prompt,onCheckedChange:n=>r({...s,show_jargon_prompt:n})})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"space-y-0.5",children:[e.jsx(g,{children:"显示记忆检索 Prompt"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"是否显示记忆检索相关的提示词"})]}),e.jsx(D,{checked:s.show_memory_prompt,onCheckedChange:n=>r({...s,show_memory_prompt:n})})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"space-y-0.5",children:[e.jsx(g,{children:"显示 Planner Prompt"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"是否显示 Planner 的提示词和原始返回结果"})]}),e.jsx(D,{checked:s.show_planner_prompt,onCheckedChange:n=>r({...s,show_planner_prompt:n})})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"space-y-0.5",children:[e.jsx(g,{children:"显示 LPMM 相关文段"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"是否显示 LPMM 知识库找到的相关文段日志"})]}),e.jsx(D,{checked:s.show_lpmm_paragraph,onCheckedChange:n=>r({...s,show_lpmm_paragraph:n})})]})]})]})});const os=t=>!t.platform&&!t.item_id?"":`${t.platform}:${t.item_id}:${t.rule_type}`,ke=t=>{const s=t.split(":");return{platform:s[0]||"qq",item_id:s[1]||"",rule_type:s[2]==="private"?"private":"group"}},ms=J.memo(function({member:s,groupIndex:r,memberIndex:n,availableChatIds:m,onUpdate:u,onRemove:f}){const _=os(s),j=m.includes(_)||_==="*",[N,h]=L.useState(!j);return e.jsxs("div",{className:"flex gap-2",children:[e.jsx("div",{className:"flex-1 flex gap-2",children:N?e.jsxs(e.Fragment,{children:[e.jsx(q,{value:_,onChange:x=>u(r,n,ke(x.target.value)),placeholder:'输入 "qq:123456:group"',className:"flex-1"}),m.length>0&&e.jsx(C,{size:"sm",variant:"outline",onClick:()=>h(!1),title:"切换到下拉选择",children:"下拉"})]}):e.jsxs(e.Fragment,{children:[e.jsxs(V,{value:_,onValueChange:x=>u(r,n,ke(x)),children:[e.jsx(M,{className:"flex-1",children:e.jsx(H,{placeholder:"选择聊天流"})}),e.jsx(z,{children:m.map((x,l)=>e.jsx(A,{value:x,children:x},l))})]}),e.jsx(C,{size:"sm",variant:"outline",onClick:()=>h(!0),title:"切换到手动输入",children:"输入"})]})}),e.jsxs(W,{children:[e.jsx(U,{asChild:!0,children:e.jsx(C,{size:"icon",variant:"outline",children:e.jsx(I,{className:"h-4 w-4"})})}),e.jsxs(X,{children:[e.jsxs(Y,{children:[e.jsx(Z,{children:"确认删除"}),e.jsxs(ee,{children:['确定要删除组成员 "',_||"(空)",'" 吗?此操作无法撤销。']})]}),e.jsxs(se,{children:[e.jsx(te,{children:"取消"}),e.jsx(re,{onClick:()=>f(r,n),children:"删除"})]})]})]})]})});J.memo(function({config:s,onChange:r}){const n=()=>{const l={platform:"",item_id:"",rule_type:"group",use_expression:!0,enable_learning:!0,enable_jargon_learning:!0};r({...s,learning_list:[...s.learning_list,l]})},m=l=>{r({...s,learning_list:s.learning_list.filter((a,i)=>i!==l)})},u=(l,a,i)=>{const d=s.learning_list.map((p,$)=>$===l?{...p,[a]:i}:p);r({...s,learning_list:d})},f=({rule:l})=>{const a=JSON.stringify(l,null,2);return e.jsxs(pe,{children:[e.jsx(he,{asChild:!0,children:e.jsxs(C,{variant:"outline",size:"sm",children:[e.jsx($e,{className:"h-4 w-4 mr-1"}),"预览"]})}),e.jsx(je,{className:"w-80 sm:w-96",children:e.jsxs("div",{className:"space-y-2",children:[e.jsx("h4",{className:"font-medium text-sm",children:"配置预览"}),e.jsx("div",{className:"rounded-md bg-muted p-3 font-mono text-xs break-all",children:a}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"这是保存到 bot_config.toml 文件中的格式"})]})})]})},_=()=>{const l={expression_groups:[]};r({...s,expression_groups:[...s.expression_groups,l]})},j=l=>{r({...s,expression_groups:s.expression_groups.filter((a,i)=>i!==l)})},N=l=>{const a=s.expression_groups.map((i,d)=>d===l?{...i,expression_groups:[...i.expression_groups,{platform:"qq",item_id:"",rule_type:"group"}]}:i);r({...s,expression_groups:a})},h=(l,a)=>{const i=s.expression_groups.map((d,p)=>p===l?{...d,expression_groups:d.expression_groups.filter(($,R)=>R!==a)}:d);r({...s,expression_groups:i})},x=(l,a,i)=>{const d=s.expression_groups.map((p,$)=>$===l?{...p,expression_groups:p.expression_groups.map((R,B)=>B===a?i:R)}:p);r({...s,expression_groups:d})};return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"rounded-lg border bg-card p-4 sm:p-6 space-y-4",children:[e.jsx("h3",{className:"text-lg font-semibold mb-4",children:"黑话设置"}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(D,{id:"all_global_jargon",checked:s.all_global_jargon??!1,onCheckedChange:l=>r({...s,all_global_jargon:l})}),e.jsx(g,{htmlFor:"all_global_jargon",className:"cursor-pointer",children:"全局黑话模式"})]}),e.jsx("p",{className:"text-xs text-muted-foreground mt-2",children:"开启后,新增的黑话将默认设为全局(所有聊天流共享)。关闭后,已记录的全局黑话不会改变,需要手动删除。"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(D,{id:"enable_jargon_explanation",checked:s.enable_jargon_explanation??!0,onCheckedChange:l=>r({...s,enable_jargon_explanation:l})}),e.jsx(g,{htmlFor:"enable_jargon_explanation",className:"cursor-pointer",children:"启用黑话解释"})]}),e.jsx("p",{className:"text-xs text-muted-foreground mt-2",children:"在回复前尝试对上下文中的黑话进行解释。关闭可减少一次LLM调用,仅影响回复前的黑话匹配与解释,不影响黑话学习。"})]}),e.jsxs("div",{children:[e.jsx(g,{htmlFor:"jargon_mode",children:"黑话解释来源模式"}),e.jsxs(V,{value:s.jargon_mode??"context",onValueChange:l=>r({...s,jargon_mode:l}),children:[e.jsx(M,{id:"jargon_mode",className:"mt-2",children:e.jsx(H,{placeholder:"选择黑话解释来源"})}),e.jsxs(z,{children:[e.jsx(A,{value:"context",children:"上下文模式(自动匹配黑话)"}),e.jsx(A,{value:"planner",children:"Planner模式(使用unknown_words列表)"})]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground mt-2",children:["上下文模式:使用上下文自动匹配黑话并解释",e.jsx("br",{}),"Planner模式:仅使用Planner在reply动作中给出的unknown_words列表进行黑话检索"]})]})]}),e.jsx("div",{className:"rounded-lg border bg-card p-4 sm:p-6 space-y-6",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-lg font-semibold",children:"表达学习配置"}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:"配置麦麦如何学习和使用表达方式"})]}),e.jsxs(C,{onClick:n,size:"sm",variant:"outline",children:[e.jsx(E,{className:"h-4 w-4 mr-1"}),"添加规则"]})]}),e.jsxs("div",{className:"space-y-4",children:[s.learning_list.map((l,a)=>{const i=l.platform===""&&l.item_id==="",d=s.learning_list.some((p,$)=>$!==a&&p.platform===""&&p.item_id==="");return e.jsxs("div",{className:"rounded-lg border p-4 space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("span",{className:"text-sm font-medium",children:["规则 ",a+1," ",i&&"(全局配置)"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(f,{rule:l}),e.jsxs(W,{children:[e.jsx(U,{asChild:!0,children:e.jsxs(C,{size:"icon",variant:"ghost","aria-label":`删除学习规则 ${a+1}`,children:[e.jsx(I,{className:"h-4 w-4"}),e.jsx("span",{className:"sr-only",children:"删除"})]})}),e.jsxs(X,{children:[e.jsxs(Y,{children:[e.jsx(Z,{children:"确认删除"}),e.jsxs(ee,{children:["确定要删除学习规则 ",a+1," 吗?此操作无法撤销。"]})]}),e.jsxs(se,{children:[e.jsx(te,{children:"取消"}),e.jsx(re,{onClick:()=>m(a),children:"删除"})]})]})]})]})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(g,{className:"text-xs font-medium",children:"配置类型"}),e.jsxs(V,{value:i?"global":"specific",onValueChange:p=>{p==="global"?(u(a,"platform",""),u(a,"item_id","")):u(a,"platform","qq")},disabled:d&&!i,children:[e.jsx(M,{children:e.jsx(H,{})}),e.jsxs(z,{children:[e.jsx(A,{value:"global",children:"全局配置"}),e.jsx(A,{value:"specific",disabled:d&&!i,children:"详细配置"})]})]}),d&&!i&&e.jsx("p",{className:"text-xs text-amber-600",children:"已存在全局配置,无法创建新的全局配置"})]}),!i&&e.jsxs("div",{className:"grid gap-4 p-3 sm:p-4 rounded-lg bg-muted/50",children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(g,{className:"text-xs font-medium",children:"平台"}),e.jsxs(V,{value:l.platform||"qq",onValueChange:p=>{u(a,"platform",p)},children:[e.jsx(M,{children:e.jsx(H,{})}),e.jsxs(z,{children:[e.jsx(A,{value:"qq",children:"QQ"}),e.jsx(A,{value:"wx",children:"微信"})]})]})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(g,{className:"text-xs font-medium",children:"群 ID"}),e.jsx(q,{value:l.item_id,onChange:p=>{u(a,"item_id",p.target.value)},placeholder:"输入群 ID",className:"font-mono text-sm"})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(g,{className:"text-xs font-medium",children:"类型"}),e.jsxs(V,{value:l.rule_type,onValueChange:p=>{u(a,"rule_type",p)},children:[e.jsx(M,{children:e.jsx(H,{})}),e.jsxs(z,{children:[e.jsx(A,{value:"group",children:"群组(group)"}),e.jsx(A,{value:"private",children:"私聊(private)"})]})]})]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:["当前聊天流 ID:",l.platform&&l.item_id?`${l.platform}:${l.item_id}:${l.rule_type}`:"(未设置)"]})]}),e.jsx("div",{className:"grid gap-2",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx(g,{className:"text-xs font-medium",children:"使用学到的表达"}),e.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"允许麦麦使用从聊天中学到的表达方式"})]}),e.jsx(D,{checked:l.use_expression,onCheckedChange:p=>u(a,"use_expression",p)})]})}),e.jsx("div",{className:"grid gap-2",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx(g,{className:"text-xs font-medium",children:"学习表达"}),e.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"允许麦麦从聊天中学习新的表达方式"})]}),e.jsx(D,{checked:l.enable_learning,onCheckedChange:p=>u(a,"enable_learning",p)})]})}),e.jsx("div",{className:"grid gap-2",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx(g,{className:"text-xs font-medium",children:"启用黑话学习"}),e.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"允许麦麦在此聊天流中学习和记录黑话"})]}),e.jsx(D,{checked:l.enable_jargon_learning,onCheckedChange:p=>u(a,"enable_jargon_learning",p)})]})})]})]},a)}),s.learning_list.length===0&&e.jsx("div",{className:"text-center py-8 text-muted-foreground",children:'暂无学习规则,点击"添加规则"开始配置'})]})]})}),e.jsx("div",{className:"rounded-lg border bg-card p-4 sm:p-6 space-y-6",children:e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-lg font-semibold",children:"表达优化配置"}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:"配置麦麦如何优化和改进表达方式"})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(g,{htmlFor:"expression_self_reflect",className:"cursor-pointer font-medium",children:"自动表达优化"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"启用后,麦麦会自动检查并优化表达方式,无需管理员手动干预"})]}),e.jsx(D,{id:"expression_self_reflect",checked:s.expression_self_reflect??!1,onCheckedChange:l=>r({...s,expression_self_reflect:l})})]}),s.expression_self_reflect&&e.jsxs("div",{className:"space-y-4 pl-4 border-l-2 border-primary/20",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(g,{htmlFor:"expression_auto_check_interval",children:"自动检查间隔(秒)"}),e.jsx(q,{id:"expression_auto_check_interval",type:"number",min:"60",value:s.expression_auto_check_interval??900,onChange:l=>r({...s,expression_auto_check_interval:parseInt(l.target.value)||900})}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"表达方式自动检查的间隔时间(单位:秒),默认值:900秒(15分钟)"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(g,{htmlFor:"expression_auto_check_count",children:"每次检查数量"}),e.jsx(q,{id:"expression_auto_check_count",type:"number",min:"1",max:"100",value:s.expression_auto_check_count??5,onChange:l=>r({...s,expression_auto_check_count:parseInt(l.target.value)||5})}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"每次自动检查时随机选取的表达方式数量,默认值:5条"})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(g,{children:"自定义评估标准"}),e.jsxs(C,{onClick:()=>{r({...s,expression_auto_check_custom_criteria:[...s.expression_auto_check_custom_criteria||[],""]})},size:"sm",variant:"outline",children:[e.jsx(E,{className:"h-4 w-4 mr-1"}),"添加标准"]})]}),e.jsxs("div",{className:"space-y-2",children:[(s.expression_auto_check_custom_criteria||[]).map((l,a)=>e.jsxs("div",{className:"flex gap-2",children:[e.jsx(q,{value:l,onChange:i=>{const d=[...s.expression_auto_check_custom_criteria||[]];d[a]=i.target.value,r({...s,expression_auto_check_custom_criteria:d})},placeholder:"输入评估标准,例如:是否符合角色人设",className:"flex-1"}),e.jsx(C,{onClick:()=>{r({...s,expression_auto_check_custom_criteria:(s.expression_auto_check_custom_criteria||[]).filter((i,d)=>d!==a)})},size:"icon",variant:"ghost",children:e.jsx(I,{className:"h-4 w-4"})})]},a)),(!s.expression_auto_check_custom_criteria||s.expression_auto_check_custom_criteria.length===0)&&e.jsx("div",{className:"text-center py-4 text-muted-foreground text-sm",children:'暂无自定义标准,点击"添加标准"开始配置'})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"这些标准会被添加到评估提示词中,作为额外的评估要求"})]})]})]}),e.jsx("div",{className:"space-y-4",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(g,{htmlFor:"expression_checked_only",className:"cursor-pointer font-medium",children:"仅使用已审核通过的表达方式"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"开启后,只有通过审核(已检查)的项目会被使用;关闭时,未审核的项目也会被使用。无论开关状态,被拒绝的项目永远不会被使用。"})]}),e.jsx(D,{id:"expression_checked_only",checked:s.expression_checked_only??!1,onCheckedChange:l=>r({...s,expression_checked_only:l})})]})}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(g,{htmlFor:"expression_manual_reflect",className:"cursor-pointer font-medium",children:"手动表达优化"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"启用后,麦麦会主动向管理员询问表达方式是否合适"})]}),e.jsx(D,{id:"expression_manual_reflect",checked:s.expression_manual_reflect??!1,onCheckedChange:l=>r({...s,expression_manual_reflect:l})})]}),s.expression_manual_reflect&&e.jsxs("div",{className:"space-y-4 pl-4 border-l-2 border-primary/20",children:[e.jsxs("div",{className:"rounded-lg border p-4 space-y-4",children:[e.jsx("div",{className:"flex items-center justify-between",children:e.jsx("span",{className:"text-sm font-medium",children:"反思操作员"})}),e.jsx("div",{className:"space-y-4",children:(()=>{const l=s.manual_reflect_operator_id,a=l?.platform||"qq",i=l?.item_id||"",d=l?.rule_type||"private";return e.jsxs("div",{className:"grid gap-4 p-3 sm:p-4 rounded-lg bg-muted/50",children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(g,{className:"text-xs font-medium",children:"平台"}),e.jsxs(V,{value:a,onValueChange:p=>{r({...s,manual_reflect_operator_id:{platform:p,item_id:i,rule_type:d}})},children:[e.jsx(M,{children:e.jsx(H,{})}),e.jsxs(z,{children:[e.jsx(A,{value:"qq",children:"QQ"}),e.jsx(A,{value:"wx",children:"微信"})]})]})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(g,{className:"text-xs font-medium",children:"用户/群 ID"}),e.jsx(q,{value:i,onChange:p=>{r({...s,manual_reflect_operator_id:{platform:a,item_id:p.target.value,rule_type:d}})},placeholder:"输入 ID",className:"font-mono text-sm"})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(g,{className:"text-xs font-medium",children:"类型"}),e.jsxs(V,{value:d,onValueChange:p=>{r({...s,manual_reflect_operator_id:{platform:a,item_id:i,rule_type:p}})},children:[e.jsx(M,{children:e.jsx(H,{})}),e.jsxs(z,{children:[e.jsx(A,{value:"private",children:"私聊(private)"}),e.jsx(A,{value:"group",children:"群组(group)"})]})]})]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:["当前操作员:",l?`${l.platform}:${l.item_id}:${l.rule_type}`:"(未设置)"]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:'手动表达优化操作员ID,格式:platform:id:type (例如 "qq:123456:private" 或 "qq:654321:group")'})]})})()})]}),e.jsxs("div",{className:"rounded-lg border p-4 space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("span",{className:"text-sm font-medium",children:"允许进行表达反思的聊天流"}),e.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"只有在此列表中的聊天流才会提出问题并跟踪。如果列表为空,则所有聊天流都可以进行表达反思(前提是启用了手动表达优化)"})]}),e.jsxs(C,{onClick:()=>{const l={platform:"qq",item_id:"",rule_type:"group"};r({...s,allow_reflect:[...s.allow_reflect||[],l]})},size:"sm",variant:"outline",children:[e.jsx(E,{className:"h-4 w-4 mr-1"}),"添加聊天流"]})]}),e.jsxs("div",{className:"space-y-2",children:[(s.allow_reflect||[]).map((l,a)=>e.jsxs("div",{className:"flex items-center gap-2 p-3 rounded-lg bg-muted/50",children:[e.jsxs(V,{value:l.platform||"qq",onValueChange:i=>{const d=s.allow_reflect.map((p,$)=>$===a?{...p,platform:i}:p);r({...s,allow_reflect:d})},children:[e.jsx(M,{className:"w-24",children:e.jsx(H,{})}),e.jsxs(z,{children:[e.jsx(A,{value:"qq",children:"QQ"}),e.jsx(A,{value:"wx",children:"微信"})]})]}),e.jsx(q,{value:l.item_id,onChange:i=>{const d=s.allow_reflect.map((p,$)=>$===a?{...p,item_id:i.target.value}:p);r({...s,allow_reflect:d})},placeholder:"ID",className:"flex-1 font-mono text-sm"}),e.jsxs(V,{value:l.rule_type,onValueChange:i=>{const d=s.allow_reflect.map((p,$)=>$===a?{...p,rule_type:i}:p);r({...s,allow_reflect:d})},children:[e.jsx(M,{className:"w-32",children:e.jsx(H,{})}),e.jsxs(z,{children:[e.jsx(A,{value:"group",children:"群组"}),e.jsx(A,{value:"private",children:"私聊"})]})]}),e.jsx(C,{onClick:()=>{r({...s,allow_reflect:s.allow_reflect.filter((i,d)=>d!==a)})},size:"sm",variant:"ghost",children:e.jsx(I,{className:"h-4 w-4"})})]},a)),(!s.allow_reflect||s.allow_reflect.length===0)&&e.jsx("div",{className:"text-center py-4 text-muted-foreground text-sm",children:"列表为空,所有聊天流都可以进行表达反思"})]})]})]})]})]})}),e.jsx("div",{className:"rounded-lg border bg-card p-4 sm:p-6 space-y-6",children:e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-lg font-semibold",children:"表达共享组配置"}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:"配置不同聊天流之间如何共享学到的表达方式"})]}),e.jsxs(C,{onClick:_,size:"sm",variant:"outline",children:[e.jsx(E,{className:"h-4 w-4 mr-1"}),"添加共享组"]})]}),e.jsxs("div",{className:"space-y-4",children:[s.expression_groups.map((l,a)=>{const i=s.learning_list.filter(d=>d.platform!==""||d.item_id!=="").map(d=>`${d.platform}:${d.item_id}:${d.rule_type}`);return e.jsxs("div",{className:"rounded-lg border p-4 space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("span",{className:"text-sm font-medium",children:["共享组 ",a+1]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(C,{onClick:()=>N(a),size:"sm",variant:"outline",children:e.jsx(E,{className:"h-4 w-4"})}),e.jsxs(W,{children:[e.jsx(U,{asChild:!0,children:e.jsx(C,{size:"sm",variant:"ghost",children:e.jsx(I,{className:"h-4 w-4"})})}),e.jsxs(X,{children:[e.jsxs(Y,{children:[e.jsx(Z,{children:"确认删除"}),e.jsxs(ee,{children:["确定要删除共享组 ",a+1," 吗?此操作无法撤销。"]})]}),e.jsxs(se,{children:[e.jsx(te,{children:"取消"}),e.jsx(re,{onClick:()=>j(a),children:"删除"})]})]})]})]})]}),e.jsx("div",{className:"space-y-2",children:l.expression_groups.map((d,p)=>e.jsx(ms,{member:d,groupIndex:a,memberIndex:p,availableChatIds:i,onUpdate:x,onRemove:h},`${a}-${p}`))}),e.jsx("p",{className:"text-xs text-muted-foreground",children:'提示:可以从下拉框选择已配置的聊天流,或手动输入。输入 "*" 启用全局共享'})]},a)}),s.expression_groups.length===0&&e.jsx("div",{className:"text-center py-8 text-muted-foreground",children:'暂无共享组,点击"添加共享组"开始配置'})]})]})})]})});J.memo(function({config:s,onChange:r}){const n=s.platforms||[],m=s.alias_names||[],u=()=>{r({...s,platforms:[...n,""]})},f=x=>{r({...s,platforms:n.filter((l,a)=>a!==x)})},_=(x,l)=>{const a=[...n];a[x]=l,r({...s,platforms:a})},j=()=>{r({...s,alias_names:[...m,""]})},N=x=>{r({...s,alias_names:m.filter((l,a)=>a!==x)})},h=(x,l)=>{const a=[...m];a[x]=l,r({...s,alias_names:a})};return e.jsx("div",{className:"rounded-lg border bg-card p-4 sm:p-6 space-y-6",children:e.jsxs("div",{children:[e.jsx("h3",{className:"text-lg font-semibold mb-4",children:"基础"}),e.jsxs("div",{className:"grid gap-4",children:[e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(g,{htmlFor:"platform",children:"平台"}),e.jsx(q,{id:"platform",value:s.platform,onChange:x=>r({...s,platform:x.target.value}),placeholder:"qq"})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(g,{htmlFor:"qq_account",children:"QQ账号"}),e.jsx(q,{id:"qq_account",value:s.qq_account,onChange:x=>r({...s,qq_account:x.target.value}),placeholder:"123456789"})]})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(g,{htmlFor:"nickname",children:"昵称"}),e.jsx(q,{id:"nickname",value:s.nickname,onChange:x=>r({...s,nickname:x.target.value}),placeholder:"麦麦"})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(g,{children:"别名"}),e.jsxs(C,{onClick:j,size:"sm",variant:"outline",children:[e.jsx(E,{className:"h-4 w-4 mr-1"}),"添加"]})]}),e.jsxs("div",{className:"space-y-2",children:[m.map((x,l)=>e.jsxs("div",{className:"flex gap-2",children:[e.jsx(q,{value:x,onChange:a=>h(l,a.target.value),placeholder:"小麦"}),e.jsxs(W,{children:[e.jsx(U,{asChild:!0,children:e.jsx(C,{size:"icon",variant:"outline",children:e.jsx(I,{className:"h-4 w-4"})})}),e.jsxs(X,{children:[e.jsxs(Y,{children:[e.jsx(Z,{children:"确认删除"}),e.jsxs(ee,{children:['确定要删除别名 "',x||"(空)",'" 吗?此操作无法撤销。']})]}),e.jsxs(se,{children:[e.jsx(te,{children:"取消"}),e.jsx(re,{onClick:()=>N(l),children:"删除"})]})]})]})]},l)),m.length===0&&e.jsx("p",{className:"text-sm text-muted-foreground",children:"暂无别名"})]})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(g,{children:"其他平台账号"}),e.jsxs(C,{onClick:u,size:"sm",variant:"outline",children:[e.jsx(E,{className:"h-4 w-4 mr-1"}),"添加"]})]}),e.jsxs("div",{className:"space-y-2",children:[n.map((x,l)=>e.jsxs("div",{className:"flex gap-2",children:[e.jsx(q,{value:x,onChange:a=>_(l,a.target.value),placeholder:"wx:114514"}),e.jsxs(W,{children:[e.jsx(U,{asChild:!0,children:e.jsx(C,{size:"icon",variant:"outline",children:e.jsx(I,{className:"h-4 w-4"})})}),e.jsxs(X,{children:[e.jsxs(Y,{children:[e.jsx(Z,{children:"确认删除"}),e.jsxs(ee,{children:['确定要删除平台账号 "',x||"(空)",'" 吗?此操作无法撤销。']})]}),e.jsxs(se,{children:[e.jsx(te,{children:"取消"}),e.jsx(re,{onClick:()=>f(l),children:"删除"})]})]})]})]},l)),n.length===0&&e.jsx("p",{className:"text-sm text-muted-foreground",children:"暂无其他平台账号"})]})]})]})]})})});export{bs as A,Fs as B,Cs as C,K as D,qs as E,Ss as H,Ts as K,ws as M,As as R,ks as a,$s as b,Ls as c,Ps as d,Je as f};
|