Files
mai-bot/dashboard/dist/assets/BotInfoSection-D3nfOJyA.js

27 lines
63 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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};