aitu-app 0.6.13 → 0.6.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/assets/ChatMessagesArea-BDdoD5_A.js +250 -0
- package/assets/DialogTaskList-DPJ7HZyZ.js +1 -0
- package/assets/KnowledgeBaseContent-C72s05vt.js +143 -0
- package/assets/ToolboxDrawer-l4Ty3r9W.js +91 -0
- package/assets/__vite-browser-external-UePf-KSV.js +1 -0
- package/assets/{ai-analyze-CXbDwr-F.js → ai-analyze-xgKQgd4U.js} +1 -1
- package/assets/ai-image-generation-C5JAcp3b.js +1 -0
- package/assets/ai-video-generation-ac-33IgK.js +5 -0
- package/assets/{arc-Vb6QIvRI.js → arc-Dp9Tayy1.js} +1 -1
- package/assets/{arc-BVpYfX8u.js → arc-OJPD8-BT.js} +1 -1
- package/assets/batch-image-generation-C3x-OHz8.js +6 -0
- package/assets/{blockDiagram-38ab4fdb-CbUExfWH.js → blockDiagram-38ab4fdb-BmbbsYSN.js} +1 -1
- package/assets/{blockDiagram-38ab4fdb-CbbmIvT5.js → blockDiagram-38ab4fdb-Ct18ekcD.js} +1 -1
- package/assets/{c4Diagram-3d4e48cf-Db1GHdmL.js → c4Diagram-3d4e48cf-B5n9lAd_.js} +1 -1
- package/assets/{c4Diagram-3d4e48cf-Dw_8bcgE.js → c4Diagram-3d4e48cf-CeYsSK_V.js} +1 -1
- package/assets/channel-3D-64Gra.js +1 -0
- package/assets/channel-Cwws4QMc.js +1 -0
- package/assets/{classDiagram-70f12bd4-CXXAHxeU.js → classDiagram-70f12bd4-DHUkWA9l.js} +1 -1
- package/assets/{classDiagram-70f12bd4-_p3Dnvx6.js → classDiagram-70f12bd4-moiNcfve.js} +1 -1
- package/assets/{classDiagram-v2-f2320105-B-9myg44.js → classDiagram-v2-f2320105-DA5NC1Qw.js} +1 -1
- package/assets/{classDiagram-v2-f2320105-ChK1LfBX.js → classDiagram-v2-f2320105-GgtaFqwD.js} +1 -1
- package/assets/{clipper-CJLNPhZM.js → clipper-t_9jIAe9.js} +1 -1
- package/assets/clone-BMrzx1Td.js +1 -0
- package/assets/clone-BizrxztP.js +1 -0
- package/assets/createText-2e5e7dd3-CHzSuNe3.js +8 -0
- package/assets/{createText-2e5e7dd3-BGRSuPih.js → createText-2e5e7dd3-DOBPzTzY.js} +1 -1
- package/assets/{edges-e0da2a9e-BoQQRKl3.js → edges-e0da2a9e-Bq2ydCT4.js} +1 -1
- package/assets/{edges-e0da2a9e-1EAOsAGW.js → edges-e0da2a9e-CN99E-t-.js} +1 -1
- package/assets/{erDiagram-9861fffd-DIqIVsjO.js → erDiagram-9861fffd-Do4S3P96.js} +1 -1
- package/assets/{erDiagram-9861fffd-DrPXJadW.js → erDiagram-9861fffd-oiPiotaf.js} +1 -1
- package/assets/{flowDb-956e92f1-DKdojl1Z.js → flowDb-956e92f1-D51K1L9K.js} +1 -1
- package/assets/{flowDb-956e92f1-_yAXk9b2.js → flowDb-956e92f1-DFBqRgDU.js} +1 -1
- package/assets/{flowDiagram-66a62f08-BSNSE1vH.js → flowDiagram-66a62f08-DUEF_pO-.js} +1 -1
- package/assets/{flowDiagram-66a62f08-Cn3BWcxJ.js → flowDiagram-66a62f08-ohjO56wG.js} +1 -1
- package/assets/flowDiagram-v2-96b9c2cf-DqY72AjL.js +1 -0
- package/assets/flowDiagram-v2-96b9c2cf-drt1-w-A.js +1 -0
- package/assets/{flowchart-elk-definition-4a651766-CkhkUOMa.js → flowchart-elk-definition-4a651766-CZGupUae.js} +1 -1
- package/assets/{flowchart-elk-definition-4a651766-CtRYHypS.js → flowchart-elk-definition-4a651766-Ck49vbEO.js} +1 -1
- package/assets/{ganttDiagram-c361ad54-DWZxEumf.js → ganttDiagram-c361ad54-D-2TQXly.js} +1 -1
- package/assets/{ganttDiagram-c361ad54-C-olbHti.js → ganttDiagram-c361ad54-Di2O32lI.js} +1 -1
- package/assets/{gitGraphDiagram-72cf32ee-DFI0WJ7k.js → gitGraphDiagram-72cf32ee-BRac4-Im.js} +1 -1
- package/assets/{gitGraphDiagram-72cf32ee-Dz3X9B4S.js → gitGraphDiagram-72cf32ee-CTYbPhUT.js} +1 -1
- package/assets/{graph-BbAdRpyG.js → graph-2iyYFI0w.js} +1 -1
- package/assets/{graph-CG3zmXkL.js → graph-C1hWr4Pm.js} +1 -1
- package/assets/{grid-image-CahEQ7p7.js → grid-image-dUr2Jg39.js} +1 -1
- package/assets/{has-Cq7YuzG9.js → has-SF0all_b.js} +1 -1
- package/assets/{hasIn-4hPyOh4r.js → hasIn-DKQ-u2B0.js} +1 -1
- package/assets/{index-3862675e-D_PJ0qZE.js → index-3862675e-CZEjGwoo.js} +1 -1
- package/assets/{index-3862675e-Cy2LJr-t.js → index-3862675e-RDTDsnXn.js} +1 -1
- package/assets/index-8936AfEv.js +1 -0
- package/assets/{index-ICFaM7Tx.js → index-B7eekA6_.js} +1 -1
- package/assets/index-BDUNgKdd.js +4 -0
- package/assets/{index-XoOCAjmC.js → index-BHA-RYCc.js} +1 -1
- package/assets/{index-DHrV9sCt.js → index-BOD5NqEU.js} +1 -1
- package/assets/{index-Bad6y32x.js → index-Bari47nZ.js} +1 -1
- package/assets/index-Bk0_Zb0q.js +126 -0
- package/assets/index-Bl-lGyNS.js +1 -0
- package/assets/{index-DBCwQvu4.js → index-BmjGPRWs.js} +1 -1
- package/assets/{index-BOHFUhjZ.js → index-BwMZ5wpE.js} +1 -1
- package/assets/{index-BiCrE7Ci.js → index-CANiroWR.js} +1 -1
- package/assets/{index-BDnSt0a8.js → index-CF52PGdh.js} +1 -1
- package/assets/{index-WyqXHNHN.js → index-COU1uiqb.js} +10 -10
- package/assets/{index-Bfs6Q-lQ.js → index-CbWVcCEf.js} +1 -1
- package/assets/{index-BQS_8NU3.js → index-CgRCJ-LO.js} +1 -1
- package/assets/{index-Dqi7TZna.js → index-Cjr7NFhN.js} +1 -1
- package/assets/{index-CqEazMaK.js → index-CtCg-67U.js} +1 -1
- package/assets/{index-BU3nDlFy.js → index-CtQCAjVT.js} +1 -1
- package/assets/{index-DtNyBFxZ.js → index-Cxm1XljY.js} +1 -1
- package/assets/index-Cz1tSwF3.css +1 -0
- package/assets/{index-BE7n-LiY.js → index-Czr2RAjn.js} +1 -1
- package/assets/{index-Dv8yvI8G.js → index-D-84skI6.js} +1 -1
- package/assets/{index-pt9oZHeu.js → index-D263cNDG.js} +1 -1
- package/assets/{index-CciPE8zM.js → index-D2m550qt.js} +1 -1
- package/assets/{index-B9uNbnfa.js → index-D77Go9tu.js} +1 -1
- package/assets/{index-C1tgh8XV.js → index-DaGnZYqf.js} +10 -10
- package/assets/{index-BZIcMnMw.js → index-DhkzbRKo.js} +1 -1
- package/assets/{index-BkRTZMZM.js → index-Dpe0RMNz.js} +1 -1
- package/assets/index-DwHU5eOe.css +9 -0
- package/assets/{index-B4IEsL3l.js → index-Eh2ScCVM.js} +1 -1
- package/assets/index-IZLKDros.js +3675 -0
- package/assets/{index-Cx19IgV-.js → index-XL72XJSV.js} +5 -5
- package/assets/{index-jHCkpoWQ.js → index-eG2AQFN1.js} +1 -1
- package/assets/{index-DUgUd4bR.js → index-idzCX2RO.js} +1 -1
- package/assets/{index-Bco0OAak.js → index-kEyGqmtF.js} +1 -1
- package/assets/{infoDiagram-f8f76790-C0TYyx3w.js → infoDiagram-f8f76790-BxK-Egf6.js} +1 -1
- package/assets/{infoDiagram-f8f76790-D8T-erO4.js → infoDiagram-f8f76790-CUCAPcFk.js} +1 -1
- package/assets/{inspiration-board-CiL8hKbX.js → inspiration-board-D8Ua5Oe1.js} +1 -1
- package/assets/{isEmpty-BoFRUVaJ.js → isEmpty-t4Cy-KF3.js} +1 -1
- package/assets/{journeyDiagram-49397b02-BHw2LUDu.js → journeyDiagram-49397b02-CSy6umB2.js} +1 -1
- package/assets/{journeyDiagram-49397b02-CkmFUv6i.js → journeyDiagram-49397b02-hn1ZL1sk.js} +1 -1
- package/assets/{layers-CaY2-pH6.js → layers-D6FMrwlY.js} +1 -1
- package/assets/{layout-D_agYVJ_.js → layout-Bx4CUuIY.js} +1 -1
- package/assets/{layout-CSua1dGC.js → layout-Cx8G_aqy.js} +1 -1
- package/assets/{line-CN9rNlXr.js → line-BZ1F3Pjg.js} +1 -1
- package/assets/{line-CxGDlzoc.js → line-CWqmXnzs.js} +1 -1
- package/assets/{linear-DKP7SWoM.js → linear-0qmptMY3.js} +1 -1
- package/assets/{linear-CvStv2Ny.js → linear-BD9ezGBw.js} +1 -1
- package/assets/{mermaid.core-DawxQi4y.js → mermaid.core-CclEoiQB.js} +5 -5
- package/assets/{mindmap-definition-fc14e90a-BWrsnm3I.js → mindmap-definition-fc14e90a-C3--tXOB.js} +1 -1
- package/assets/{mindmap-definition-fc14e90a-Dmo2lz3K.js → mindmap-definition-fc14e90a-DF7zVwYN.js} +1 -1
- package/assets/{photo-wall-splitter-B_WR4Rl2.js → photo-wall-splitter-DRunCkYJ.js} +1 -1
- package/assets/{pick-C1hcXSqm.js → pick-fy_8WYZR.js} +1 -1
- package/assets/{pieDiagram-8a3498a8-DhrponMk.js → pieDiagram-8a3498a8-BUs_EbTX.js} +1 -1
- package/assets/{pieDiagram-8a3498a8-CmbWJAb7.js → pieDiagram-8a3498a8-K2pJYExm.js} +1 -1
- package/assets/{quadrantDiagram-120e2f19-CgIF-y-_.js → quadrantDiagram-120e2f19-B_NqGDOT.js} +1 -1
- package/assets/{quadrantDiagram-120e2f19-DOKwrvFF.js → quadrantDiagram-120e2f19-npHcJfpe.js} +1 -1
- package/assets/{requirementDiagram-deff3bca-CIXltTSE.js → requirementDiagram-deff3bca-MAAg8oy7.js} +1 -1
- package/assets/{requirementDiagram-deff3bca-BqbqHjdU.js → requirementDiagram-deff3bca-XXIszlff.js} +1 -1
- package/assets/{sankeyDiagram-04a897e0-DGiABLdx.js → sankeyDiagram-04a897e0-C5NJymdM.js} +1 -1
- package/assets/{sankeyDiagram-04a897e0-DcPermhl.js → sankeyDiagram-04a897e0-CSCR2bPx.js} +1 -1
- package/assets/{sequenceDiagram-704730f1-BUXJ6XVH.js → sequenceDiagram-704730f1-ChCKpyVM.js} +1 -1
- package/assets/{sequenceDiagram-704730f1-piXYTUjh.js → sequenceDiagram-704730f1-DJ4I-j-u.js} +1 -1
- package/assets/{settings-dialog-A3AH7O45.css → settings-dialog-Bf8ExAlc.css} +1 -1
- package/assets/settings-dialog-CXBVyqHP.js +11 -0
- package/assets/{shard-sync-service-BCo2qKEA.js → shard-sync-service-IbZF8xlU.js} +1 -1
- package/assets/{stateDiagram-587899a1-Dnd2X4K4.js → stateDiagram-587899a1-BA9z6NxG.js} +1 -1
- package/assets/{stateDiagram-587899a1-Cdfs3rRO.js → stateDiagram-587899a1-Bds5dxHr.js} +1 -1
- package/assets/{stateDiagram-v2-d93cdb3a-DtC5XSWV.js → stateDiagram-v2-d93cdb3a-wf_BKO33.js} +1 -1
- package/assets/{stateDiagram-v2-d93cdb3a-lOfkWHnS.js → stateDiagram-v2-d93cdb3a-zgIPW-Wq.js} +1 -1
- package/assets/{styles-6aaf32cf-BTv8Dnxa.js → styles-6aaf32cf-DKSbsikH.js} +1 -1
- package/assets/{styles-6aaf32cf-B_EWv7Bz.js → styles-6aaf32cf-k70vGvK6.js} +1 -1
- package/assets/{styles-9a916d00-BNkP2BU4.js → styles-9a916d00-DlsdUcZV.js} +1 -1
- package/assets/{styles-9a916d00-C4vTAlbK.js → styles-9a916d00-DmmQFwNe.js} +1 -1
- package/assets/{styles-c10674c1-Dp5J5JrP.js → styles-c10674c1-CxF05c2I.js} +1 -1
- package/assets/{styles-c10674c1-BcxLBYaC.js → styles-c10674c1-D8qHaY59.js} +1 -1
- package/assets/{svgDrawCommon-08f97a94-5_vuhhyn.js → svgDrawCommon-08f97a94-C47JFYdy.js} +1 -1
- package/assets/{svgDrawCommon-08f97a94-CalbTy9V.js → svgDrawCommon-08f97a94-DXUoCs1f.js} +1 -1
- package/assets/{timeline-definition-85554ec2-ByBsrbAq.js → timeline-definition-85554ec2-C2IdYpUG.js} +1 -1
- package/assets/{timeline-definition-85554ec2-DBiJ4h6g.js → timeline-definition-85554ec2-DKGZodMj.js} +1 -1
- package/assets/ttd-dialog-BARbesy9.js +95 -0
- package/assets/{upload-DP5n1PVz.js → upload-CjpWBLk1.js} +1 -1
- package/assets/{video-recovery-service-DY01FcHI.js → video-recovery-service-CfVXvCd9.js} +1 -1
- package/assets/{xychartDiagram-e933f94c-CJ1NxG0K.js → xychartDiagram-e933f94c-CjAQ2fLX.js} +1 -1
- package/assets/{xychartDiagram-e933f94c-CEXcS3Lw.js → xychartDiagram-e933f94c-qh0OFXZU.js} +1 -1
- package/changelog.json +58 -0
- package/package.json +1 -1
- package/precache-manifest.json +283 -283
- package/sw.js +4 -4
- package/version.json +7 -3
- package/assets/ChatMessagesArea-Btxhq7Z2.js +0 -229
- package/assets/DialogTaskList-0I91BD1p.js +0 -1
- package/assets/KnowledgeBaseContent-CSEr1paK.js +0 -153
- package/assets/ToolboxDrawer-CFAgOmIa.js +0 -91
- package/assets/__vite-browser-external-BIHI7g3E.js +0 -1
- package/assets/ai-image-generation-CvUX_vnh.js +0 -1
- package/assets/ai-video-generation-BgDcotXE.js +0 -5
- package/assets/batch-image-generation-rvn9zCP-.js +0 -6
- package/assets/channel-ChluHQU5.js +0 -1
- package/assets/channel-DQ0ggWsj.js +0 -1
- package/assets/clone-BscGHP5K.js +0 -1
- package/assets/clone-CTdvgy2F.js +0 -1
- package/assets/createText-2e5e7dd3-BCbwgqBS.js +0 -7
- package/assets/flowDiagram-v2-96b9c2cf-BmoA7Lrr.js +0 -1
- package/assets/flowDiagram-v2-96b9c2cf-Du5Aycbt.js +0 -1
- package/assets/index-7WzIC7_D.js +0 -3448
- package/assets/index-BOZ3fCzl.js +0 -3
- package/assets/index-CYf1zrx4.js +0 -1
- package/assets/index-C_Ed2LrM.js +0 -1
- package/assets/index-D9rMZcAy.js +0 -123
- package/assets/index-V8UiJyjb.css +0 -1
- package/assets/index-qP_w2VHW.css +0 -9
- package/assets/settings-dialog-D1OnKj0y.js +0 -11
- package/assets/ttd-dialog-C9noZsTQ.js +0 -95
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import{bT as ms,r as u,I as Hs,_ as Ys,aQ as e,bU as Qs,bV as Js,bW as _s,bX as us,bY as hs,bZ as vs,b_ as be,b$ as qs,c0 as Xs,c1 as ps,c2 as et,a$ as st,c3 as k,c4 as H,c5 as tt,c6 as we,c7 as ve,c8 as q,v as pe,x as X,C as ee,F as se,b8 as je,c9 as it,ca as ue,bd as L,cb as qe,cc as Xe,cd as es,aR as at,ce as Ne,cf as Ae,cg as xe,ch as F,ci as ae,aW as ne,cj as nt,ck as lt,cl as dt}from"./index-7WzIC7_D.js";import{cm as $t,cn as Bt}from"./index-7WzIC7_D.js";/**
|
|
2
|
-
* @license lucide-react v0.562.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const ot=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],rt=ms("loader-circle",ot);/**
|
|
7
|
-
* @license lucide-react v0.562.0 - ISC
|
|
8
|
-
*
|
|
9
|
-
* This source code is licensed under the ISC license.
|
|
10
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const ct=[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]],gt=ms("triangle-alert",ct);function ss(t,a){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var g=Object.getOwnPropertySymbols(t);a&&(g=g.filter(function(x){return Object.getOwnPropertyDescriptor(t,x).enumerable})),i.push.apply(i,g)}return i}function ts(t){for(var a=1;a<arguments.length;a++){var i=arguments[a]!=null?arguments[a]:{};a%2?ss(Object(i),!0).forEach(function(g){Ys(t,g,i[g])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):ss(Object(i)).forEach(function(g){Object.defineProperty(t,g,Object.getOwnPropertyDescriptor(i,g))})}return t}var mt={tag:"svg",attrs:{fill:"none",viewBox:"0 0 24 24",width:"1em",height:"1em"},children:[{tag:"path",attrs:{fill:"currentColor",d:"M12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12C3 16.9706 7.02944 21 12 21ZM23 12C23 18.0751 18.0751 23 12 23C5.92487 23 0.999999 18.0751 1 12C1 5.92487 5.92487 0.999999 12 1C18.0751 1 23 5.92487 23 12ZM11 17.5L11 10H13L13 17.5L11 17.5ZM13 8.5H10.9961L10.9961 6.49609H13L13 8.5Z"}}]},xs=u.forwardRef(function(t,a){return u.createElement(Hs,ts(ts({},t),{},{id:"info-circle",ref:a,icon:mt}))});xs.displayName="InfoCircleIcon";const is={all:"全部",image:"图片",video:"视频",text:"文本"},_t={image:"图片",video:"视频",text:"文本"},ut={image:"图",video:"视",text:"文"},as=["text","image","video"];function ht(t,a){const i=a.trim().toLowerCase();return i?[t.id,t.label,t.shortLabel,t.shortCode,t.description,t.sourceProfileName,be(t.vendor)].filter(Boolean).some(g=>g==null?void 0:g.toLowerCase().includes(i)):!0}function vt(t){return[...t].sort((a,i)=>{const g=(a.shortLabel||a.label||a.id).toLowerCase(),x=(i.shortLabel||i.label||i.id).toLowerCase();return g.localeCompare(x,"zh-Hans-CN")})}function ns(t,a){const i=new Map;for(const x of t){const O=i.get(x.vendor)||{vendor:x.vendor,models:[],counts:{image:0,video:0,text:0},selectedCount:0};O.models.push(x),O.counts[x.type]+=1,a.has(x.id)&&(O.selectedCount+=1),i.set(x.vendor,O)}const g=new Map(ps.map((x,O)=>[x,O]));return Array.from(i.values()).sort((x,O)=>{const R=g.get(x.vendor)??Number.MAX_SAFE_INTEGER,W=g.get(O.vendor)??Number.MAX_SAFE_INTEGER;return R!==W?R-W:O.models.length-x.models.length})}function pt(t){return["image","video","text"].filter(a=>t.counts[a]>0).map(a=>({type:a,models:vt(t.models.filter(i=>i.type===a))})).sort((a,i)=>i.models.length!==a.models.length?i.models.length-a.models.length:as.indexOf(a.type)-as.indexOf(i.type))}const xt=({open:t,container:a,models:i,selectedModelIds:g,onClose:x,onConfirm:O})=>{const[R,W]=u.useState(""),[V,Z]=u.useState("all"),[z,B]=u.useState(g),[S,K]=u.useState({});u.useEffect(()=>{var I,U;if(!t)return;W(""),Z("all"),B(g);const o=new Set(g),b=ns(i,o),j=((I=b.find($=>$.selectedCount>0))==null?void 0:I.vendor)||((U=b[0])==null?void 0:U.vendor)||null,P={};b.forEach($=>{P[$.vendor]=$.vendor===j}),K(P)},[i,t,g]);const E=u.useMemo(()=>({all:i.length,image:i.filter(o=>o.type==="image").length,video:i.filter(o=>o.type==="video").length,text:i.filter(o=>o.type==="text").length}),[i]),D=u.useMemo(()=>{const o=R.trim(),b=V==="all"?i:i.filter(j=>j.type===V);return o?b.filter(j=>ht(j,o)):b},[V,i,R]),A=u.useMemo(()=>new Set(z),[z]),T=u.useMemo(()=>ns(D,A),[A,D]),he=z.length,te=u.useMemo(()=>({image:i.filter(o=>o.type==="image"&&A.has(o.id)).length,video:i.filter(o=>o.type==="video"&&A.has(o.id)).length,text:i.filter(o=>o.type==="text"&&A.has(o.id)).length}),[i,A]),Y=D.length>0&&D.every(o=>A.has(o.id));u.useEffect(()=>{T.length===0||T.some(j=>S[j.vendor])||!Object.values(S).some(Boolean)||K(T.reduce((j,P,I)=>(j[P.vendor]=I===0,j),{}))},[S,T]);const le=o=>{B(b=>b.includes(o)?b.filter(j=>j!==o):[...b,o])},Q=()=>{const o=D.map(j=>j.id),b=o.every(j=>A.has(j));B(j=>b?j.filter(P=>!o.includes(P)):Array.from(new Set([...j,...o])))},de=o=>{K(b=>{const j=!b[o],P={};return T.forEach(I=>{P[I.vendor]=I.vendor===o?j:!1}),P})};return e.jsx(Qs,{open:t,onOpenChange:o=>!o&&x(),children:e.jsxs(Js,{className:"model-discovery-dialog",container:a,"data-testid":"model-discovery-dialog",children:[e.jsxs("div",{className:"model-discovery-dialog__header",children:[e.jsxs("div",{className:"model-discovery-dialog__headline",children:[e.jsx("h3",{className:"model-discovery-dialog__title",children:"获取模型"}),e.jsxs("div",{className:"model-discovery-dialog__header-stats",children:[e.jsxs("span",{className:"model-discovery-dialog__header-pill",children:["已发现 ",i.length]}),e.jsxs("span",{className:"model-discovery-dialog__header-pill",children:["品牌 ",T.length]}),e.jsxs("span",{className:"model-discovery-dialog__header-pill model-discovery-dialog__header-pill--accent",children:["已选 ",he]})]})]}),e.jsx("button",{type:"button",className:"model-discovery-dialog__close",onClick:x,"aria-label":"关闭",children:e.jsx(_s,{size:18})})]}),e.jsxs("div",{className:"model-discovery-dialog__toolbar",children:[e.jsxs("label",{className:"model-discovery-dialog__search",children:[e.jsx(us,{size:16}),e.jsx("input",{type:"text",value:R,onChange:o=>W(o.target.value),placeholder:"搜索模型名称、ID 或品牌"})]}),e.jsxs("div",{className:"model-discovery-dialog__toolbar-actions",children:[e.jsx("button",{type:"button",className:"model-discovery-dialog__ghost-button",onClick:Q,disabled:D.length===0,children:Y?"取消当前结果":"添加当前结果"}),e.jsx("button",{type:"button",className:"model-discovery-dialog__ghost-button model-discovery-dialog__ghost-button--muted",onClick:()=>B([]),disabled:z.length===0,children:"清空已选"})]})]}),e.jsx("div",{className:"model-discovery-dialog__type-tabs",children:Object.keys(is).map(o=>{const b=V===o;return e.jsxs("button",{type:"button",className:`model-discovery-dialog__type-tab ${b?"model-discovery-dialog__type-tab--active":""}`,onClick:()=>Z(o),children:[e.jsx("span",{children:is[o]}),e.jsx("span",{className:"model-discovery-dialog__type-tab-count",children:E[o]})]},o)})}),e.jsx("div",{className:"model-discovery-dialog__body",children:T.length===0?e.jsx("div",{className:"model-discovery-dialog__empty",children:R.trim()?"没有匹配的模型":"暂无模型"}):e.jsx("div",{className:"model-discovery-dialog__group-list",children:T.map(o=>{const b=hs(o.vendor),j=pt(o),P=!!S[o.vendor];return e.jsxs("section",{className:`model-discovery-dialog__vendor-group ${P?"model-discovery-dialog__vendor-group--expanded":""}`,style:{"--vendor-accent":b.accent,"--vendor-surface":b.surface,"--vendor-border":b.border},children:[e.jsxs("button",{type:"button",className:"model-discovery-dialog__vendor-header",onClick:()=>de(o.vendor),children:[e.jsxs("div",{className:"model-discovery-dialog__vendor-main",children:[e.jsx("span",{className:"model-discovery-dialog__vendor-logo-shell",children:e.jsx(vs,{vendor:o.vendor,size:22})}),e.jsxs("div",{className:"model-discovery-dialog__vendor-copy",children:[e.jsx("span",{className:"model-discovery-dialog__vendor-name",children:be(o.vendor)}),e.jsx("div",{className:"model-discovery-dialog__vendor-meta",children:j.map(({type:I,models:U})=>e.jsxs("span",{className:"model-discovery-dialog__vendor-meta-pill",children:[ut[I]," ",U.length]},`${o.vendor}-${I}`))})]})]}),e.jsx("span",{className:"model-discovery-dialog__vendor-spacer"}),e.jsxs("div",{className:"model-discovery-dialog__vendor-side",children:[o.selectedCount>0?e.jsxs("span",{className:"model-discovery-dialog__vendor-selected",children:["已选 ",o.selectedCount]}):null,e.jsx("span",{className:"model-discovery-dialog__vendor-count",children:o.models.length}),e.jsx("span",{className:`model-discovery-dialog__vendor-chevron ${P?"model-discovery-dialog__vendor-chevron--expanded":""}`,children:e.jsx(qs,{size:16})})]})]}),P?e.jsx("div",{className:"model-discovery-dialog__vendor-body",children:j.map(({type:I,models:U})=>e.jsxs("div",{className:"model-discovery-dialog__type-section",children:[e.jsxs("div",{className:"model-discovery-dialog__type-section-header",children:[e.jsx("span",{className:"model-discovery-dialog__type-section-title",children:_t[I]}),e.jsx("span",{className:"model-discovery-dialog__type-section-count",children:U.length})]}),e.jsx("div",{className:"model-discovery-dialog__model-stack",children:U.map($=>{const G=A.has($.id);return e.jsxs("label",{className:`model-discovery-dialog__item ${G?"model-discovery-dialog__item--checked":""}`,children:[e.jsx("input",{type:"checkbox",className:"model-discovery-dialog__checkbox",checked:G,onChange:()=>le($.id)}),e.jsx("span",{className:"model-discovery-dialog__checkmark",children:G?e.jsx(Xs,{size:12}):null}),e.jsx("div",{className:"model-discovery-dialog__item-body",children:e.jsx("div",{className:`model-discovery-dialog__item-id ${G?"model-discovery-dialog__item-id--checked":""}`,children:$.id})})]},$.id)})})]},`${o.vendor}-${I}`))}):null]},o.vendor)})})}),e.jsxs("div",{className:"model-discovery-dialog__footer",children:[e.jsxs("span",{className:"model-discovery-dialog__selection-count",children:["已选 ",he," 个 · 图 ",te.image," / 视"," ",te.video," / 文 ",te.text]}),e.jsxs("div",{className:"model-discovery-dialog__actions",children:[e.jsx("button",{type:"button",className:"model-discovery-dialog__button model-discovery-dialog__button--secondary",onClick:x,children:"取消"}),e.jsx("button",{type:"button",className:"model-discovery-dialog__button model-discovery-dialog__button--primary",onClick:()=>O(z),children:"添加模型"})]})]})]})})},jt=[{value:"providers",label:"供应商"},{value:"presets",label:"模型预设"},{value:"canvas",label:"画布显示"}],Nt=["openai-compatible","gemini-compatible","custom"],ft=["bearer","header","query","custom"],bt={image:"图片",video:"视频",text:"文本"},yt={image:"图片模型",video:"视频模型",text:"文本模型"},Mt=["text","image","video"],Oe={"openai-compatible":{label:"OpenAI 兼容"},"gemini-compatible":{label:"Gemini 兼容"},custom:{label:"自定义接入"}},St={bearer:{label:"Bearer Token"},header:{label:"自定义 Header"},query:{label:"Query 参数"},custom:{label:"手动拼装"}},ls=["amber","sky","mint","rose","violet"];function ds(t){return t.reduce((a,i)=>(a[i.type]+=1,a),{image:0,video:0,text:0})}function Ct(t,a){const i=a.trim().toLowerCase();return i?[t.id,t.label,t.shortLabel,t.shortCode,t.description,t.sourceProfileName,be(t.vendor)].filter(Boolean).some(g=>g==null?void 0:g.toLowerCase().includes(i)):!0}function os(t){return t?["image","video","text"].filter(a=>!!F(t[a])).length:0}function Et(t,a){const i=a.find(g=>g.id===t.id);return i?kt(i,t)?"saved":"dirty":"new"}function fe(t){return JSON.stringify(t)}function Pt(t){return typeof t.iconUrl!="string"?null:t.iconUrl.trim()||null}function It(t){var g;const a=t.trim();if(!a)return"供";const i=a.match(/[A-Za-z0-9]+/g);return i!=null&&i[0]?i[0][0].toUpperCase():((g=Array.from(a)[0])==null?void 0:g.toUpperCase())||"供"}function wt(t){const a=Array.from(`${t.id}-${t.providerType}-${t.name}`).reduce((i,g,x)=>i+g.charCodeAt(0)*(x+1),0);return ls[a%ls.length]}function ie(t){return JSON.parse(JSON.stringify(t))}function js(t){return`${t}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}function At(t){return{id:js("profile"),name:`供应商 ${t}`,iconUrl:"",providerType:"openai-compatible",baseUrl:"",apiKey:"",authType:De(),enabled:!0,capabilities:{supportsModelsEndpoint:!0,supportsText:!0,supportsImage:!0,supportsVideo:!0,supportsTools:!0}}}function De(t){return"bearer"}function rs(t){return t===k||t===lt}const cs=({profile:t,size:a="regular"})=>{const i=Pt(t),[g,x]=u.useState(i);u.useEffect(()=>{x(i)},[i]);const O=wt(t),R=It(t.name);return e.jsx("span",{className:`settings-dialog__provider-avatar settings-dialog__provider-avatar--${O} ${a==="large"?"settings-dialog__provider-avatar--large":""}`,"aria-hidden":"true",children:g?e.jsx("img",{src:g,alt:`${t.name} 图标`,className:"settings-dialog__provider-avatar-image",loading:"lazy",onError:()=>x(null)}):e.jsx("span",{className:"settings-dialog__provider-avatar-text",children:R})})};function Ot(t,a){return{id:js("preset"),name:"新预设",text:ae(ne(t,a.text||null)),image:ae(ne(t,a.image||null)),video:ae(ne(t,a.video||null))}}function Dt(t,a,i){const g=t[a],x=i.defaultModelRef!==void 0?i.defaultModelRef:ne(i.profileId!==void 0?i.profileId:xe(g),i.defaultModelId!==void 0?i.defaultModelId:F(g));return{...t,[a]:ae(x)}}function Rt(t,a){const i={...t};return["image","video","text"].forEach(g=>{xe(i[g])===a&&(i[g]=ae(null))}),i}function kt(t,a){return JSON.stringify(t)===JSON.stringify(a)}function gs(t,a){return JSON.stringify({profileId:t,modelId:a})}function Tt(t){if(!t)return null;try{const a=JSON.parse(t);return ne(a.profileId||null,a.modelId||null)}catch{return null}}const Vt=({container:t})=>{const{appState:a,setAppState:i}=et(),{isMobile:g,viewportWidth:x,viewportHeight:O}=st(),[R,W]=u.useState("providers"),[V,Z]=u.useState(k),[z,B]=u.useState(H),[S,K]=u.useState([]),[E,D]=u.useState([]),[A,T]=u.useState(H),[he,te]=u.useState([]),[Y,le]=u.useState(""),[Q,de]=u.useState(""),[o,b]=u.useState(""),[j,P]=u.useState(!0),[I,U]=u.useState(""),[$,G]=u.useState(!1),[Ns,ye]=u.useState(""),[Re,ke]=u.useState(!1),[fs,oe]=u.useState("catalog"),[bs,re]=u.useState("catalog"),_=S.find(s=>s.id===V)||S[0]||null,w=E.find(s=>s.id===z)||E[0]||null,C=tt((_==null?void 0:_.id)||k),ys=u.useDeferredValue(I),Te=we(k,"image"),Le=we(k,"video"),Ve=we(k,"text"),Ms=S.filter(s=>s.enabled),f=g||x<=980,Me=!!_&&!!_.apiKey.trim(),Ss=fe({profiles:S,presets:E,activePresetId:A,imageModelName:Y,videoModelName:Q,textModelName:o,showWorkZoneCard:j}),ze=a.openSettings&&Ss!==Ns,Cs=s=>{W(s),f&&(s==="providers"&&oe("catalog"),s==="presets"&&re("catalog"))},Es=s=>{Z(s),f&&oe("detail")},Ps=s=>{B(s),f&&re("detail")},Is=()=>{try{return localStorage.getItem(je.WORKZONE_CARD_VISIBLE)!=="false"}catch{return!0}},Se=()=>{const s=ie(ve.get()),n=ie(q.get()),r=q.getActivePresetId()||H,d=pe.get(),l=Is();te(s),ye(fe({profiles:s,presets:n,activePresetId:r,imageModelName:d.imageModelName||X(),videoModelName:d.videoModelName||ee(),textModelName:d.textModelName||se(),showWorkZoneCard:l}))};u.useEffect(()=>{if(!a.openSettings)return;const s=ie(ve.get()),n=ie(q.get()),r=q.getActivePresetId()||H,d=pe.get();let l=!0;K(s),D(n),te(s),T(r),Z(c=>{var h;return s.some(M=>M.id===c)?c:((h=s[0])==null?void 0:h.id)||k}),B(c=>{var h;return n.some(M=>M.id===c)?c:((h=n[0])==null?void 0:h.id)||H}),le(d.imageModelName||X()),de(d.videoModelName||ee()),b(d.textModelName||se());try{l=localStorage.getItem(je.WORKZONE_CARD_VISIBLE)!=="false"}catch{l=!0}P(l),W("providers"),oe("catalog"),re("catalog"),U(""),G(!1),ye(fe({profiles:s,presets:n,activePresetId:r,imageModelName:d.imageModelName||X(),videoModelName:d.videoModelName||ee(),textModelName:d.textModelName||se(),showWorkZoneCard:l}))},[a.openSettings]),u.useEffect(()=>{if(!V&&S[0]){Z(S[0].id);return}V&&S.length>0&&!S.some(s=>s.id===V)&&Z(S[0].id)},[S,V]),u.useEffect(()=>{if(!z&&E[0]){B(E[0].id);return}z&&E.length>0&&!E.some(s=>s.id===z)&&B(E[0].id)},[E,z]),u.useEffect(()=>{U("")},[V,R]);const ce=(s,n)=>{K(r=>r.map(d=>d.id===s?n(d):d))},ws=(s,n)=>{D(r=>r.map(d=>d.id===s?n(d):d))},Ue=async(s,n)=>{var r,d;try{const l=pe.get(),c=((r=s.find(p=>p.id===n))==null?void 0:r.id)||((d=s[0])==null?void 0:d.id)||H,h=s.find(p=>p.id===c)||s[0]||null,M=F(h==null?void 0:h.image)||l.imageModelName||X(),v=F(h==null?void 0:h.video)||l.videoModelName||ee(),N=F(h==null?void 0:h.text)||l.textModelName||l.chatModel||se();return await q.update(ie(s)),await q.setActivePresetId(c),await pe.update({imageModelName:M,videoModelName:v,textModelName:N,chatModel:N}),D(s),T(c),le(M),de(v),b(N),Se(),!0}catch(l){return console.error("Failed to persist preset configuration:",l),L.error("预设保存失败,请重试"),!1}},As=async(s,n)=>{if(K(r=>r.map(d=>d.id===s?{...d,enabled:n}:d)),!!he.some(r=>r.id===s))try{await ve.update(ie(ve.get()).map(r=>r.id===s?{...r,enabled:n}:r)),Se()}catch(r){console.error("Failed to persist provider enabled state:",r),K(d=>d.map(l=>l.id===s?{...l,enabled:!n}:l)),L.error("供应商状态保存失败,请重试")}},Os=async s=>{P(s);try{localStorage.setItem(je.WORKZONE_CARD_VISIBLE,String(s)),window.dispatchEvent(new CustomEvent("workzone-visibility-changed")),Se()}catch(n){console.error("Failed to persist canvas visibility state:",n),P(!s),L.error("画布显示配置保存失败,请重试")}},$e=()=>{const s=At(S.length+1);K(n=>[...n,s]),Z(s.id),W("providers"),f&&oe("detail")},Ds=s=>{var r;if(rs(s))return;const n=S.filter(d=>d.id!==s);K(n),D(d=>d.map(l=>Rt(l,s))),V===s&&Z(((r=n[0])==null?void 0:r.id)||k),f&&oe("catalog")},Be=()=>{var r;const s=((r=Ms[0])==null?void 0:r.id)||null,n=Ot(s,{image:Y||X(),video:Q||ee(),text:o||se()});D(d=>[...d,n]),B(n.id),W("presets"),f&&re("detail")},Rs=s=>{var r,d;if(E.length<=1)return;const n=E.filter(l=>l.id!==s);D(n),A===s&&T(((r=n[0])==null?void 0:r.id)||H),z===s&&B(((d=n[0])==null?void 0:d.id)||H),f&&re("catalog")},ks=(s,n)=>{if(!w)return;const r=Tt(n),d=E.map(l=>l.id===w.id?Dt(l,s,{defaultModelRef:r}):l);D(d),Ue(d,A)},Ts=async()=>{if(!_){L.warning("请先选择供应商配置");return}if(ze){const r=L.loading("正在保存当前配置...",0),d=await Fe(!1);if(L.close(r),!d)return}const s=_.apiKey.trim(),n=Ae(_.baseUrl.trim()||Ne);if(!s){L.warning("请先填写 API Key");return}try{await ue.discover(_.id,n,s),G(!0)}catch(r){const d=r instanceof Error?r.message:"模型同步失败";ue.setError(_.id,d),L.error({content:d,duration:3600})}},Ls=s=>{var r,d,l;if(!_)return;const n=ue.applySelection(_.id,s);if(_.id===k){const c=n.filter(m=>m.type==="image"),h=n.filter(m=>m.type==="video"),M=n.filter(m=>m.type==="text"),v=C.discoveredModels.filter(m=>m.type==="image").map(m=>m.id),N=C.discoveredModels.filter(m=>m.type==="video").map(m=>m.id),p=C.discoveredModels.filter(m=>m.type==="text").map(m=>m.id);!c.some(m=>m.id===Y)&&v.includes(Y)&&le(((r=c[0])==null?void 0:r.id)||X()),!h.some(m=>m.id===Q)&&N.includes(Q)&&de(((d=h[0])==null?void 0:d.id)||ee()),!M.some(m=>m.id===o)&&p.includes(o)&&b(((l=M[0])==null?void 0:l.id)||se())}L.success(n.length>0?`已为 ${_.name} 添加 ${n.length} 个模型`:`已清空 ${_.name} 的已添加模型`),G(!1)},Ke=()=>{i(s=>({...s,openSettings:!1}))},Fe=async(s=!1)=>{var n,r,d,l,c;if(Re)return!1;ke(!0);try{const h=S.map(y=>{var _e;const me=y.baseUrl.trim()?Ae(y.baseUrl):"";return{...y,name:y.name.trim()||"未命名供应商",iconUrl:((_e=y.iconUrl)==null?void 0:_e.trim())||void 0,baseUrl:me,apiKey:y.apiKey.trim()}}),M=new Set(h.map(y=>y.id)),v=E.map(y=>{const me={...y,name:y.name.trim()||"未命名预设",image:{...y.image},video:{...y.video},text:{...y.text}};return["image","video","text"].forEach(_e=>{const Qe=me[_e],Ie=xe(Qe),Je=F(Qe);if(Ie&&!M.has(Ie)){me[_e]=ae(ne(null,Je));return}me[_e]=ae(ne(Ie,Je))}),me}),N=((n=v.find(y=>y.id===A))==null?void 0:n.id)||((r=v[0])==null?void 0:r.id)||H,p=v.find(y=>y.id===N)||v[0]||null,m=h.find(y=>y.id===k)||h[0],J=Ae((m==null?void 0:m.baseUrl)||Ne),ge=Y.trim()||((d=Te[0])==null?void 0:d.id)||X(),Ee=Q.trim()||((l=Le[0])==null?void 0:l.id)||ee(),Pe=o.trim()||((c=Ve[0])==null?void 0:c.id)||se(),Ws=F(p==null?void 0:p.image)||ge,Zs=F(p==null?void 0:p.video)||Ee,Gs=F(p==null?void 0:p.text)||Pe;h.forEach(y=>{ue.invalidateIfConfigChanged(y.id,y.baseUrl||Ne,y.apiKey||"")}),await pe.update({apiKey:(m==null?void 0:m.apiKey)||"",baseUrl:J,imageModelName:Ws,videoModelName:Zs,textModelName:Gs}),await ve.update(h),await nt.update(ue.getCatalogs().filter(y=>M.has(y.profileId))),await q.update(v),await q.setActivePresetId(N);try{localStorage.setItem(je.WORKZONE_CARD_VISIBLE,String(j)),window.dispatchEvent(new CustomEvent("workzone-visibility-changed"))}catch{}return K(h),te(ie(h)),D(v),T(N),le(ge),de(Ee),b(Pe),ye(fe({profiles:h,presets:v,activePresetId:N,imageModelName:ge,videoModelName:Ee,textModelName:Pe,showWorkZoneCard:j})),s&&Ke(),!0}catch(h){return console.error("Failed to persist settings drafts:",h),L.error("设置保存失败,请稍后重试"),!1}finally{ke(!1)}},Vs=()=>{if(!ze){Ke();return}(async()=>{const s=L.loading("正在保存设置...",0),n=await Fe(!0);L.close(s),n||L.warning("设置尚未保存,请检查后重试")})()},zs=()=>{$||Re||Vs()},We=()=>e.jsxs("div",{className:"settings-dialog__sidebar-shell settings-dialog__sidebar-shell--catalog",children:[e.jsxs("div",{className:"settings-dialog__sidebar-summary",children:[e.jsxs("div",{className:"settings-dialog__sidebar-summary-row",children:[e.jsx("span",{className:"settings-dialog__sidebar-summary-title",children:"供应商目录"}),f?e.jsx("button",{type:"button",className:"settings-dialog__sidebar-summary-action",onClick:$e,children:"新增供应商"}):null]}),f?e.jsx("span",{className:"settings-dialog__sidebar-summary-text",children:"先从列表里选择供应商,再进入对应的配置页面。"}):null]}),e.jsx("div",{className:"settings-dialog__sidebar-list",children:S.map(s=>{const n=s.id===(_==null?void 0:_.id);return e.jsxs("div",{className:`settings-dialog__provider-row ${n?"settings-dialog__provider-row--active":""} ${s.enabled?"":"settings-dialog__provider-row--disabled"}`,children:[e.jsxs("button",{type:"button",className:"settings-dialog__provider-select",onClick:()=>Es(s.id),"aria-pressed":n,children:[e.jsxs("span",{className:"settings-dialog__provider-select-main",children:[e.jsx(cs,{profile:s}),e.jsxs("span",{className:"settings-dialog__provider-copy",children:[e.jsxs("span",{className:"settings-dialog__provider-name-row",children:[e.jsx("span",{className:"settings-dialog__provider-name",children:s.name}),s.id===k?e.jsx("span",{className:"settings-dialog__provider-tag",children:"默认"}):null]}),f?e.jsxs("span",{className:"settings-dialog__provider-meta",children:[e.jsx("span",{children:Oe[s.providerType].label}),e.jsx("span",{children:s.enabled?"启用":"停用"})]}):null]})]}),f?e.jsx(es,{size:16,className:"settings-dialog__provider-arrow","aria-hidden":"true"}):null]}),e.jsxs("div",{className:"settings-dialog__provider-switch",children:[e.jsx("span",{className:"settings-dialog__provider-switch-copy",children:s.enabled?"启用":"停用"}),e.jsx(qe,{size:"small",value:s.enabled,disabled:s.id===k,onChange:r=>void As(s.id,r)})]})]},s.id)})}),f?null:e.jsxs("button",{type:"button",className:"settings-dialog__sidebar-add",onClick:$e,children:[e.jsx("span",{className:"settings-dialog__sidebar-add-icon",children:"+"}),e.jsx("span",{children:"新增供应商"})]})]}),Ze=()=>e.jsxs("div",{className:"settings-dialog__sidebar-shell",children:[e.jsxs("div",{className:"settings-dialog__sidebar-summary",children:[e.jsxs("div",{className:"settings-dialog__sidebar-summary-row",children:[e.jsx("span",{className:"settings-dialog__sidebar-summary-title",children:"默认模型"}),f?e.jsx("button",{type:"button",className:"settings-dialog__sidebar-summary-action",onClick:Be,children:"新增预设"}):null]}),f?e.jsx("span",{className:"settings-dialog__sidebar-summary-text",children:"先选中一个预设,再进入详情页调整默认路由。"}):null]}),e.jsx("div",{className:"settings-dialog__sidebar-list",children:E.map(s=>{const n=s.id===(w==null?void 0:w.id),r=s.id===A,d=os(s);return e.jsxs("button",{type:"button",className:`settings-dialog__sidebar-item ${n?"settings-dialog__sidebar-item--active":""}`,onClick:()=>Ps(s.id),children:[e.jsxs("div",{className:"settings-dialog__sidebar-item-head",children:[e.jsxs("div",{className:"settings-dialog__sidebar-item-top",children:[e.jsx("span",{children:s.name}),r?e.jsx("span",{className:"settings-dialog__sidebar-badge settings-dialog__sidebar-badge--accent",children:"当前"}):null]}),f?e.jsx(es,{size:16,className:"settings-dialog__sidebar-item-arrow","aria-hidden":"true"}):null]}),e.jsxs("div",{className:"settings-dialog__sidebar-item-meta",children:[e.jsxs("span",{children:[d,"/3 已配置"]}),f?e.jsx("span",{children:r?"正在生效":"点击查看详情"}):null]})]},s.id)})}),f?null:e.jsxs("button",{type:"button",className:"settings-dialog__sidebar-add",onClick:Be,children:[e.jsx("span",{className:"settings-dialog__sidebar-add-icon",children:"+"}),e.jsx("span",{children:"新增预设"})]})]}),Ge=(s,n)=>e.jsx("div",{className:"settings-dialog__workspace settings-dialog__workspace--single",children:e.jsx("div",{className:"settings-dialog__content-panel settings-dialog__content-panel--compact",children:e.jsx("div",{className:"settings-dialog__mobile-stage",children:n},s)})}),He=(s=!1)=>{if(!_)return e.jsx("div",{className:"settings-dialog__empty-panel",children:"请选择一个供应商。"});const n=ds(C.models),r=Et(_,he),d=n.image+n.video+n.text;return e.jsxs("div",{className:`settings-dialog__content-panel settings-dialog__content-panel--providers ${s?"settings-dialog__content-panel--detail":""}`,children:[s?e.jsxs("div",{className:"settings-dialog__compact-stage-header",children:[e.jsxs("button",{type:"button",className:"settings-dialog__compact-back",onClick:()=>oe("catalog"),children:[e.jsx(Xe,{size:16}),e.jsx("span",{children:"返回供应商目录"})]}),e.jsxs("div",{className:"settings-dialog__compact-stage-copy",children:[e.jsx("span",{className:"settings-dialog__compact-stage-eyebrow",children:"供应商配置"}),e.jsx("p",{className:"settings-dialog__compact-stage-text",children:"进入详情后再编辑接口信息、密钥和模型同步配置。"})]})]}):null,e.jsx("div",{className:"settings-dialog__section settings-dialog__section--compact",children:e.jsxs("div",{className:"settings-dialog__panel-header",children:[e.jsxs("div",{className:"settings-dialog__profile-hero",children:[e.jsx(cs,{profile:_,size:"large"}),e.jsxs("div",{children:[e.jsx("h3",{className:"settings-dialog__section-title",children:_.name}),e.jsxs("div",{className:"settings-dialog__inline-meta",children:[e.jsx("span",{children:Oe[_.providerType].label}),e.jsx("span",{children:_.enabled?"启用":"停用"}),e.jsxs("span",{children:[d," 个模型"]}),e.jsx("span",{children:r==="saved"?"已保存":"未保存"})]})]})]}),rs(_.id)?null:e.jsx("button",{type:"button",className:"settings-dialog__danger-button",onClick:()=>Ds(_.id),children:"删除"})]})}),e.jsxs("div",{className:"settings-dialog__section",children:[e.jsx("div",{className:"settings-dialog__section-header",children:e.jsx("div",{children:e.jsx("h3",{className:"settings-dialog__section-title",children:"基础配置"})})}),e.jsxs("div",{className:"settings-dialog__grid",children:[e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column",children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"名称"}),e.jsx("input",{type:"text",className:"settings-dialog__input",value:_.name,onChange:l=>ce(_.id,c=>({...c,name:l.target.value}))})]}),e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column",children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"接口类型"}),e.jsx("select",{className:"settings-dialog__select",value:_.providerType,onChange:l=>ce(_.id,c=>{const h=l.target.value,M=De(c.providerType),v=De();return{...c,providerType:h,authType:c.authType===M?v:c.authType}}),children:Nt.map(l=>e.jsx("option",{value:l,children:Oe[l].label},l))})]}),e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column settings-dialog__field--full",children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"图标 URL"}),e.jsx("input",{type:"url",className:"settings-dialog__input",value:_.iconUrl||"",onChange:l=>ce(_.id,c=>({...c,iconUrl:l.target.value})),placeholder:"可选,留空时自动生成默认图标"}),e.jsx("span",{className:"settings-dialog__field-hint",children:"支持填写远程图片地址;未填写时将根据供应商名称生成默认图标。"})]}),e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column settings-dialog__field--full",children:[e.jsxs("div",{className:"settings-dialog__label-with-tooltip settings-dialog__label-with-tooltip--left",children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"API Key"}),e.jsx(at,{content:e.jsxs("div",{children:["您可以从以下地址获取 API Key:",e.jsx("br",{}),e.jsx("a",{href:"https://api.tu-zi.com/token",target:"_blank",rel:"noopener noreferrer",style:{color:"#F39C12",textDecoration:"none"},children:"api.tu-zi.com/token"})]}),placement:"top",theme:"light",showArrow:!1,children:e.jsx(xs,{className:"settings-dialog__tooltip-icon"})})]}),e.jsx("input",{type:"password",className:"settings-dialog__input",value:_.apiKey,onChange:l=>ce(_.id,c=>({...c,apiKey:l.target.value})),autoComplete:"off"})]}),e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column settings-dialog__field--full",children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"API 地址"}),e.jsx("input",{type:"text",className:"settings-dialog__input",value:_.baseUrl,onChange:l=>ce(_.id,c=>({...c,baseUrl:l.target.value})),placeholder:Ne})]}),e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column",children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"鉴权方式"}),e.jsx("select",{className:"settings-dialog__select",value:_.authType,onChange:l=>ce(_.id,c=>({...c,authType:l.target.value})),children:ft.map(l=>e.jsx("option",{value:l,children:St[l].label},l))})]})]})]}),_.id===k?e.jsx("div",{className:"settings-dialog__section settings-dialog__section--compact",children:e.jsxs("div",{className:"settings-dialog__compat-card",children:[e.jsx("div",{className:"settings-dialog__compat-title",children:"兼容默认模型"}),e.jsxs("div",{className:"settings-dialog__compat-meta",children:[e.jsxs("span",{children:["图片:",Y||X()]}),e.jsxs("span",{children:["视频:",Q||ee()]}),e.jsxs("span",{children:["文本:",o||se()]})]})]})}):null,Us()]},s?`provider-detail-${_.id}`:void 0)},Us=()=>{const s=new Map(ps.map((N,p)=>[N,p])),n=ys.trim(),r=ds(C.models),d=C.models.filter(N=>Ct(N,n)),l=Mt.map(N=>({type:N,models:d.filter(p=>p.type===N).sort((p,m)=>{const J=s.get(p.vendor)??Number.MAX_SAFE_INTEGER,ge=s.get(m.vendor)??Number.MAX_SAFE_INTEGER;return J!==ge?J-ge:p.id.localeCompare(m.id,"zh-Hans-CN")})})).filter(N=>N.models.length>0),c=Me||C.models.length>0,h=C.models.length>0&&d.length===0&&!!n,M=C.status==="error"&&C.models.length===0,v=!Me&&C.models.length===0;return e.jsxs("div",{className:"settings-dialog__section",children:[e.jsx("div",{className:"settings-dialog__section-header",children:e.jsxs("div",{children:[e.jsx("h3",{className:"settings-dialog__section-title",children:"模型"}),e.jsxs("div",{className:"settings-dialog__inline-meta",children:[e.jsxs("span",{children:["已添加 ",C.models.length," 个"]}),e.jsxs("span",{children:["图 ",r.image]}),e.jsxs("span",{children:["视 ",r.video]}),e.jsxs("span",{children:["文 ",r.text]})]})]})}),c?e.jsxs("div",{className:"settings-dialog__model-toolbar",children:[e.jsxs("label",{className:`settings-dialog__model-search ${C.models.length===0?"settings-dialog__model-search--disabled":""}`,children:[e.jsx(us,{size:15}),e.jsx("input",{type:"text",value:I,onChange:N=>U(N.target.value),placeholder:C.models.length>0?"搜索模型 ID、名称或品牌":"获取模型后可搜索",disabled:C.models.length===0}),I?e.jsx("button",{type:"button",className:"settings-dialog__model-search-clear",onClick:()=>U(""),"aria-label":"清空搜索",children:e.jsx(_s,{size:14})}):null]}),e.jsx("button",{type:"button",className:"settings-dialog__button settings-dialog__button--fetch",onClick:Ts,disabled:!Me||C.status==="loading",children:C.status==="loading"?e.jsxs(e.Fragment,{children:[e.jsx(rt,{size:15,className:"settings-dialog__button-spinner"}),"同步中"]}):"获取模型"})]}):null,l.length>0?e.jsx("div",{className:"settings-dialog__model-type-groups",children:l.map(({type:N,models:p})=>e.jsxs("div",{className:"settings-dialog__model-type-group",children:[e.jsxs("div",{className:"settings-dialog__model-type-header",children:[e.jsx("span",{className:"settings-dialog__model-type-title",children:yt[N]}),e.jsx("span",{className:"settings-dialog__model-type-count",children:p.length})]}),e.jsx("div",{className:"settings-dialog__model-type-list",children:p.map(m=>{const J=hs(m.vendor);return e.jsxs("div",{className:"settings-dialog__model-type-item",style:{"--model-brand-accent":J.accent,"--model-brand-surface":J.surface,"--model-brand-border":J.border},children:[e.jsx("span",{className:"settings-dialog__model-type-item-logo",children:e.jsx(vs,{vendor:m.vendor,size:16})}),e.jsxs("div",{className:"settings-dialog__model-type-item-copy",children:[e.jsx("span",{className:"settings-dialog__model-type-item-id",children:m.id}),e.jsx("span",{className:"settings-dialog__model-type-item-vendor",children:be(m.vendor)})]})]},m.id)})})]},N))}):h?e.jsx("div",{className:"settings-dialog__model-empty",children:"没有匹配的模型,试试搜索品牌名或更完整的模型 ID。"}):M?e.jsxs("div",{className:"settings-dialog__model-empty settings-dialog__model-empty--error",children:[e.jsx(gt,{size:16}),e.jsx("span",{children:C.error||"模型获取失败,请稍后重试"})]}):v?e.jsx("div",{className:"settings-dialog__model-empty",children:"填写 API Key 后即可获取模型,获取完成后可在这里检索和浏览。"}):e.jsx("div",{className:"settings-dialog__model-empty",children:"还没有已添加的模型"})]})},$s=(s,n,r)=>{const d=xe(r),l=F(r);return S.filter(c=>c.id===d||c.enabled&&c.capabilities[n]).map(c=>{const M=(c.id===k?s==="image"?Te:s==="video"?Le:Ve:ue.getState(c.id).models.filter(v=>v.type===s)).filter((v,N,p)=>p.findIndex(m=>m.id===v.id)===N);return c.id===d&&l&&!M.some(v=>v.id===l)&&M.unshift({id:l,label:l,shortLabel:l,type:s,vendor:dt.OTHER}),{profile:c,models:M}}).filter(c=>c.models.length>0)},Ce=(s,n,r)=>{var M;const d=$s(s,r,n),l=xe(n),c=F(n),h=((M=S.find(v=>v.id===l))==null?void 0:M.name)||"未配置";return e.jsxs("div",{className:`settings-dialog__route-card settings-dialog__route-card--${s}`,children:[e.jsx("div",{className:"settings-dialog__route-card-top",children:e.jsx("div",{className:"settings-dialog__route-card-title",children:bt[s]})}),e.jsxs("div",{className:"settings-dialog__stack",children:[e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column",children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"默认模型"}),e.jsxs("select",{className:"settings-dialog__select",value:l&&c?gs(l,c):"",onChange:v=>ks(s,v.target.value),children:[e.jsx("option",{value:"",children:"未配置"}),d.map(({profile:v,models:N})=>e.jsx("optgroup",{label:`${v.name}${v.enabled?"":"(已停用)"}`,children:N.map(p=>e.jsx("option",{value:gs(v.id,p.id),children:p.shortLabel||p.label},`${v.id}-${p.id}`))},v.id))]})]}),e.jsxs("div",{className:"settings-dialog__route-meta",children:[e.jsx("span",{children:h}),e.jsx("span",{children:c||"未选择模型"}),d.length===0?e.jsx("span",{children:"暂无可选模型"}):null]})]})]})},Ye=(s=!1)=>{if(!w)return e.jsx("div",{className:"settings-dialog__empty-panel",children:"请选择一个默认模型预设。"});const n=os(w),r=w.id===A;return e.jsxs("div",{className:`settings-dialog__content-panel ${s?"settings-dialog__content-panel--detail":""}`,children:[s?e.jsxs("div",{className:"settings-dialog__compact-stage-header",children:[e.jsxs("button",{type:"button",className:"settings-dialog__compact-back",onClick:()=>re("catalog"),children:[e.jsx(Xe,{size:16}),e.jsx("span",{children:"返回模型预设"})]}),e.jsxs("div",{className:"settings-dialog__compact-stage-copy",children:[e.jsx("span",{className:"settings-dialog__compact-stage-eyebrow",children:"模型预设"}),e.jsx("p",{className:"settings-dialog__compact-stage-text",children:"在这里设置图片、视频和文本模型的默认路由。"})]})]}):null,e.jsxs("div",{className:"settings-dialog__section",children:[e.jsxs("div",{className:"settings-dialog__panel-header",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"settings-dialog__section-title",children:w.name}),e.jsxs("div",{className:"settings-dialog__inline-meta",children:[e.jsx("span",{children:r?"当前预设":"未激活"}),e.jsxs("span",{children:[n,"/3 已配置"]})]})]}),e.jsxs("div",{className:"settings-dialog__inline-row",children:[e.jsx("button",{type:"button",className:"settings-dialog__ghost-button",onClick:()=>{Ue(E,w.id)},children:"设为当前预设"}),e.jsx("button",{type:"button",className:"settings-dialog__danger-button",onClick:()=>Rs(w.id),disabled:E.length<=1,children:"删除预设"})]})]}),e.jsx("div",{className:"settings-dialog__grid",children:e.jsxs("div",{className:"settings-dialog__field settings-dialog__field--column settings-dialog__field--full",children:[e.jsx("label",{className:"settings-dialog__label settings-dialog__label--stacked",children:"预设名称"}),e.jsx("input",{type:"text",className:"settings-dialog__input",value:w.name,onChange:d=>ws(w.id,l=>({...l,name:d.target.value}))})]})})]}),e.jsxs("div",{className:"settings-dialog__routes",children:[Ce("image",w.image,"supportsImage"),Ce("video",w.video,"supportsVideo"),Ce("text",w.text,"supportsText")]})]},s?`preset-detail-${w.id}`:void 0)},Bs=()=>e.jsx("div",{className:"settings-dialog__workspace settings-dialog__workspace--single",children:e.jsxs("div",{className:"settings-dialog__content-panel settings-dialog__content-panel--canvas",children:[f?e.jsx("div",{className:"settings-dialog__compact-stage-header",children:e.jsxs("div",{className:"settings-dialog__compact-stage-copy",children:[e.jsx("span",{className:"settings-dialog__compact-stage-eyebrow",children:"画布显示"}),e.jsx("p",{className:"settings-dialog__compact-stage-text",children:"手机上会以更集中的卡片形式展示,方便快速切换画布相关开关。"})]})}):null,e.jsxs("div",{className:"settings-dialog__section settings-dialog__section--canvas-card",children:[e.jsx("div",{className:"settings-dialog__section-header",children:e.jsx("div",{children:e.jsx("h3",{className:"settings-dialog__section-title",children:"画布显示配置"})})}),e.jsxs("div",{className:"settings-dialog__preference settings-dialog__preference--panel",children:[e.jsxs("div",{className:"settings-dialog__toggle-copy",children:[e.jsx("span",{className:"settings-dialog__toggle-title",children:"任务进度卡片"}),e.jsx("span",{className:"settings-dialog__toggle-desc",children:"在画布中显示任务进度卡片,便于追踪当前生成状态。"})]}),e.jsx(qe,{size:"small",value:j,onChange:s=>void Os(s)})]})]})]})}),Ks=()=>e.jsx("aside",{className:"settings-dialog__nav",children:e.jsx("div",{className:"settings-dialog__nav-shell",children:e.jsx("div",{className:"settings-dialog__nav-list",children:jt.map(s=>e.jsx("button",{type:"button",className:`settings-dialog__nav-item ${R===s.value?"settings-dialog__nav-item--active":""}`,onClick:()=>Cs(s.value),children:e.jsx("span",{className:"settings-dialog__nav-item-title",children:s.label})},s.value))})})}),Fs=()=>R==="canvas"?Bs():R==="presets"?f?bs==="catalog"?Ge("presets-catalog",Ze()):Ye(!0):e.jsxs("div",{className:"settings-dialog__workspace",children:[e.jsx("aside",{className:"settings-dialog__sidebar",children:Ze()}),Ye()]}):f?fs==="catalog"?Ge("providers-catalog",We()):He(!0):e.jsxs("div",{className:"settings-dialog__workspace",children:[e.jsx("aside",{className:"settings-dialog__sidebar",children:We()}),He()]});return e.jsxs(e.Fragment,{children:[e.jsx(it,{visible:a.openSettings,title:"设置",onClose:zs,width:f?"100%":"88%",height:f?"100%":"88%",minWidth:f?Math.max(320,Math.min(x-16,640)):1080,minHeight:f?Math.max(520,Math.min(O-16,820)):680,x:"center",y:"center",maximizable:!0,minimizable:!1,resizable:!f,movable:!f,modal:!1,className:"winbox-ai-generation winbox-tool-window winbox-settings-window",container:t,background:"#ffffff",autoMaximize:f,children:e.jsx("div",{className:"settings-dialog","data-testid":"settings-dialog",children:e.jsxs("div",{className:"settings-dialog__layout",children:[Ks(),e.jsx("div",{className:"settings-dialog__main",children:Fs()})]})})}),e.jsx(xt,{open:$,container:t,models:C.discoveredModels,selectedModelIds:C.selectedModelIds,onClose:()=>G(!1),onConfirm:Ls})]})};export{$t as IMAGE_MODEL_GROUPED_OPTIONS,Vt as SettingsDialog,Bt as VIDEO_MODEL_OPTIONS};
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./index-Cx19IgV-.js","./index-7WzIC7_D.js","./index-qP_w2VHW.css","./isEmpty-BoFRUVaJ.js","./index-Bco0OAak.js","./batch-image-generation-rvn9zCP-.js","./batch-image-generation-BePygpHd.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{aQ as t,bQ as ce,d5 as Ae,d6 as Le,r as i,d7 as me,d8 as ze,d9 as Ue,da as We,db as Be,dc as Ke,dd as Ye,de as $e,df as ge,c2 as te,aM as ae,dg as ie,cG as ne,dh as Se,di as ve,dj as Ce,dk as ee,dl as qe,dm as ke,dn as je,dp as h,a$ as He,aT as ue,aW as Y,b4 as L,v as pe,c8 as he,dq as fe,dr as Z,ds as Ie,dt as we,bU as De,bV as xe,c9 as ye,du as Je,dv as Xe,dw as Qe,dx as be,dy as Te}from"./index-7WzIC7_D.js";import"./DialogTaskList-0I91BD1p.js";import Ze from"./ai-image-generation-CvUX_vnh.js";import et from"./ai-video-generation-BgDcotXE.js";import"./index-WyqXHNHN.js";import"./pick-C1hcXSqm.js";import"./hasIn-4hPyOh4r.js";const Pe=({children:s})=>t.jsx("div",{className:"ttd-dialog-panels",children:s}),$=({label:s,children:e,panelAction:l,panelActionDisabled:d=!1,onTextSubmitInProgress:m,renderTopRight:c,renderSubmitShortcut:D,renderBottomRight:I})=>t.jsxs("div",{className:"ttd-dialog-panel",children:[t.jsxs("div",{className:"ttd-dialog-panel__header",children:[t.jsx("label",{children:s}),c==null?void 0:c()]}),e,t.jsxs("div",{className:ce("ttd-dialog-panel-button-container",{invisible:!l}),style:{display:"flex",alignItems:"center"},children:[t.jsx("button",{className:"ttd-dialog-panel-button drawnix-button ","data-track":"ttd_click_panel_action",onClick:l&&l.action,disabled:d||m,children:t.jsxs("div",{className:ce({invisible:m}),children:[l==null?void 0:l.label,(l==null?void 0:l.icon)&&t.jsx("span",{children:l.icon})]})}),!d&&!m&&(D==null?void 0:D()),I==null?void 0:I()]})]}),Me={CTRL_OR_CMD:Ae||Le?"metaKey":"ctrlKey",ENTER:"Enter"},Re=({input:s,placeholder:e,onChange:l,onKeyboardSubmit:d})=>{const m=i.useRef(null),c=i.useRef(d);return c.current=d,i.useEffect(()=>{if(!c.current)return;const D=m.current;if(D){const I=v=>{var g;v[Me.CTRL_OR_CMD]&&v.key===Me.ENTER&&(v.preventDefault(),(g=c.current)==null||g.call(c))};return D.addEventListener(me.KEYDOWN,I),()=>{D.removeEventListener(me.KEYDOWN,I)}}},[]),t.jsx("textarea",{className:"ttd-dialog-input",onChange:l,value:s,placeholder:e,autoFocus:!0,ref:m})},tt=({error:s})=>t.jsxs("div",{"data-testid":"ttd-dialog-output-error",className:"ttd-dialog-output-error",children:["Error! ",t.jsx("p",{children:s})]}),_e=({error:s,value:e,loaded:l})=>{const d=[Ue,We,Be,Ke],m={readonly:!0,hideScrollbar:!1,disabledScrollOnNonFocus:!0,themeColors:Ye};return t.jsxs("div",{className:"ttd-dialog-output-wrapper",children:[s&&t.jsx(tt,{error:s.message}),t.jsx("div",{style:{opacity:s?"0.15":1},className:"ttd-dialog-output-canvas-container",children:t.jsx(ze,{value:e,options:m,plugins:d,children:t.jsx($e,{})})})]})},Ne=()=>t.jsxs("div",{className:"ttd-dialog-submit-shortcut",children:[t.jsx("div",{className:"ttd-dialog-submit-shortcut__key",children:ge("CtrlOrCmd")}),t.jsx("div",{className:"ttd-dialog-submit-shortcut__key",children:ge("Enter")})]}),at=`flowchart TD
|
|
3
|
-
A[Christmas] -->|Get money| B(Go shopping)
|
|
4
|
-
B --> C{Let me think}
|
|
5
|
-
C -->|One| D[Laptop]
|
|
6
|
-
C -->|Two| E[iPhone]
|
|
7
|
-
C -->|Three| F[Car]`,it=()=>{const{closeDialog:s}=te(),{t:e,language:l}=ae(),[d,m]=i.useState({loaded:!1,api:Promise.resolve({parseMermaidToDrawnix:async()=>({elements:[]})})});i.useEffect(()=>{(async()=>{try{const n=await ne(()=>import("./index-Cx19IgV-.js").then(w=>w.aq),__vite__mapDeps([0,1,2,3]),import.meta.url);m({loaded:!0,api:Promise.resolve(n)})}catch(n){console.error("Failed to load mermaid library:",n),b(new Error(e("dialog.error.loadMermaid")))}})()},[]);const[c,D]=i.useState(()=>at),[I,v]=i.useState(()=>[]),g=i.useDeferredValue(c.trim()),[x,b]=i.useState(null),y=ie();i.useEffect(()=>{(async()=>{try{const n=await d.api;let w;try{w=await n.parseMermaidToDrawnix(g)}catch{w=await n.parseMermaidToDrawnix(g.replace(/"/g,"'"))}const{elements:f}=w;v(f),b(null)}catch(n){b(n)}})()},[g,d]);const M=()=>{if(!I.length)return;let r;const n=Se(y);if(n)r=n;else{const w=ve.getBoardContainer(y).getBoundingClientRect(),f=[w.width/2,w.height/2],k=y.viewport.zoom,j=Ce(y),R=j[0]+f[0]/k,P=j[1]+f[1]/k,F=I,U=ee.getBoundingRectangle(F.filter(G=>!qe.isGroup(G)).map(G=>ee.getRectangleByPoints(G.points)));r=[R-U.width/2,P-U.height/2]}y.insertFragment({elements:JSON.parse(JSON.stringify(I))},r,ke.paste),r&&requestAnimationFrame(()=>{je(y,r)}),s(h.mermaidToDrawnix)};return t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"ttd-dialog-desc",children:l==="zh"?t.jsxs(t.Fragment,{children:[e("dialog.mermaid.description")," ",t.jsx("a",{href:"https://mermaid.js.org/syntax/flowchart.html",target:"_blank",rel:"noreferrer",children:e("dialog.mermaid.flowchart")}),"、",t.jsx("a",{href:"https://mermaid.js.org/syntax/sequenceDiagram.html",target:"_blank",rel:"noreferrer",children:e("dialog.mermaid.sequence")})," ","和"," ",t.jsx("a",{href:"https://mermaid.js.org/syntax/classDiagram.html",target:"_blank",rel:"noreferrer",children:e("dialog.mermaid.class")}),e("dialog.mermaid.otherTypes")]}):t.jsxs(t.Fragment,{children:[e("dialog.mermaid.description")," ",t.jsx("a",{href:"https://mermaid.js.org/syntax/flowchart.html",target:"_blank",rel:"noreferrer",children:e("dialog.mermaid.flowchart")}),","," ",t.jsx("a",{href:"https://mermaid.js.org/syntax/sequenceDiagram.html",target:"_blank",rel:"noreferrer",children:e("dialog.mermaid.sequence")}),","," ",t.jsx("a",{href:"https://mermaid.js.org/syntax/classDiagram.html",target:"_blank",rel:"noreferrer",children:e("dialog.mermaid.class")}),e("dialog.mermaid.otherTypes")]})}),t.jsxs(Pe,{children:[t.jsx($,{label:e("dialog.mermaid.syntax"),children:t.jsx(Re,{input:c,placeholder:e("dialog.mermaid.placeholder"),onChange:r=>D(r.target.value),onKeyboardSubmit:()=>{M()}})}),t.jsx($,{label:e("dialog.mermaid.preview"),panelAction:{action:()=>{M()},label:e("dialog.mermaid.insert")},renderSubmitShortcut:()=>t.jsx(Ne,{}),children:t.jsx(_e,{value:I,loaded:d.loaded,error:x})})]})]})},Ee=s=>s==="zh"?`# Milkdown 入门
|
|
8
|
-
|
|
9
|
-
Milkdown 是一个强大的所见即所得 Markdown 编辑器,兼具 Markdown 的简洁和现代编辑器的灵活性。它轻量且可扩展,适合从简单到复杂的编辑需求。
|
|
10
|
-
|
|
11
|
-
## 快速开始
|
|
12
|
-
最快的方式是使用 @milkdown/crepe。
|
|
13
|
-
|
|
14
|
-
## 核心概念
|
|
15
|
-
Milkdown 由两部分组成:
|
|
16
|
-
1. 核心包(@milkdown/core)
|
|
17
|
-
- 插件加载器
|
|
18
|
-
- 内置插件
|
|
19
|
-
2. 扩展插件
|
|
20
|
-
- 语法支持
|
|
21
|
-
- 命令
|
|
22
|
-
- UI 组件
|
|
23
|
-
- 自定义能力
|
|
24
|
-
|
|
25
|
-
## 关键特性
|
|
26
|
-
- 📝 所见即所得 Markdown
|
|
27
|
-
- 🎨 可主题化
|
|
28
|
-
- 🎮 可扩展
|
|
29
|
-
- ⚡ Slash 与 Tooltip
|
|
30
|
-
- 🧮 LaTeX 数学公式
|
|
31
|
-
- 📊 表格
|
|
32
|
-
- 🍻 协作(yjs)
|
|
33
|
-
- 💾 剪贴板
|
|
34
|
-
- 👍 Emoji
|
|
35
|
-
|
|
36
|
-
## 技术栈
|
|
37
|
-
- Prosemirror
|
|
38
|
-
- Remark
|
|
39
|
-
- TypeScript
|
|
40
|
-
|
|
41
|
-
## 创建你的第一个编辑器
|
|
42
|
-
Milkdown 提供两种方式:
|
|
43
|
-
|
|
44
|
-
### 🍼 使用 @milkdown/kit(从零构建)
|
|
45
|
-
适合需要完全控制、自由组合功能的场景。
|
|
46
|
-
|
|
47
|
-
### 🥞 使用 @milkdown/crepe(开箱即用)
|
|
48
|
-
适合快速落地、开箱即用的生产环境。
|
|
49
|
-
|
|
50
|
-
## 下一步
|
|
51
|
-
🍼 有趣的事实:这个文档也是由 Milkdown 渲染的!`:`# Getting Started with Milkdown
|
|
52
|
-
|
|
53
|
-
Milkdown is a powerful WYSIWYG markdown editor that combines the simplicity of markdown with the flexibility of a modern editor. It's designed to be lightweight yet extensible, making it perfect for both simple and complex editing needs.
|
|
54
|
-
|
|
55
|
-
## Quick Start
|
|
56
|
-
The fastest way to get started is using @milkdown/crepe.
|
|
57
|
-
|
|
58
|
-
## Core Concepts
|
|
59
|
-
Milkdown consists of two main parts:
|
|
60
|
-
1. Core Package (@milkdown/core)
|
|
61
|
-
- Plugin loader
|
|
62
|
-
- Internal plugins
|
|
63
|
-
2. Additional Plugins
|
|
64
|
-
- Syntax support
|
|
65
|
-
- Commands
|
|
66
|
-
- UI components
|
|
67
|
-
- Custom features
|
|
68
|
-
|
|
69
|
-
## Key Features
|
|
70
|
-
- 📝 WYSIWYG Markdown
|
|
71
|
-
- 🎨 Themable
|
|
72
|
-
- 🎮 Hackable
|
|
73
|
-
- ⚡ Slash & Tooltip
|
|
74
|
-
- 🧮 Math (LaTeX)
|
|
75
|
-
- 📊 Table
|
|
76
|
-
- 🍻 Collaborate (yjs)
|
|
77
|
-
- 💾 Clipboard
|
|
78
|
-
- 👍 Emoji
|
|
79
|
-
|
|
80
|
-
## Tech Stack
|
|
81
|
-
- Prosemirror
|
|
82
|
-
- Remark
|
|
83
|
-
- TypeScript
|
|
84
|
-
|
|
85
|
-
## Creating Your First Editor
|
|
86
|
-
Milkdown provides two distinct approaches to create an editor:
|
|
87
|
-
|
|
88
|
-
### 🍼 Using @milkdown/kit (Build from Scratch)
|
|
89
|
-
Use this if you want full control and a custom editor from the ground up.
|
|
90
|
-
|
|
91
|
-
### 🥞 Using @milkdown/crepe (Ready to Use)
|
|
92
|
-
Use this if you want a production-ready editor with minimal setup.
|
|
93
|
-
|
|
94
|
-
## Next Steps
|
|
95
|
-
🍼 Fun fact: This documentation is rendered by Milkdown itself!`,nt=()=>{const{closeDialog:s}=te(),{t:e,language:l}=ae(),[d,m]=i.useState({loaded:!1,api:Promise.resolve({parseMarkdownToDrawnix:(r,n)=>null})});i.useEffect(()=>{(async()=>{try{const n=await ne(()=>import("./index-Bco0OAak.js"),__vite__mapDeps([4,1,2]),import.meta.url);m({loaded:!0,api:Promise.resolve(n)})}catch(n){console.error("Failed to load mermaid library:",n),b(new Error(e("dialog.error.loadMermaid")))}})()},[]);const[c,D]=i.useState(()=>Ee(l)),[I,v]=i.useState(()=>[]),g=i.useDeferredValue(c.trim()),[x,b]=i.useState(null),y=ie();i.useEffect(()=>{D(Ee(l))},[l]),i.useEffect(()=>{(async()=>{try{const n=await d.api;let w;try{w=await n.parseMarkdownToDrawnix(g)}catch{w=await n.parseMarkdownToDrawnix(g.replace(/"/g,"'"))}const f=w;f.points=[[0,0]],f&&(v([f]),b(null))}catch(n){b(n)}})()},[g,d]);const M=()=>{if(!I.length)return;let r;const n=Se(y);if(n)r=n;else{const f=ve.getBoardContainer(y).getBoundingClientRect(),k=[f.width/4,f.height/2-20],j=y.viewport.zoom,R=Ce(y),P=R[0]+k[0]/j,F=R[1]+k[1]/j;r=[P,F]}const w=I;y.insertFragment({elements:JSON.parse(JSON.stringify(w))},r,ke.paste),r&&requestAnimationFrame(()=>{je(y,r)}),s(h.markdownToDrawnix)};return t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"ttd-dialog-desc",children:e("dialog.markdown.description")}),t.jsxs(Pe,{children:[t.jsx($,{label:e("dialog.markdown.syntax"),children:t.jsx(Re,{input:c,placeholder:e("dialog.markdown.placeholder"),onChange:r=>D(r.target.value),onKeyboardSubmit:()=>{M()}})}),t.jsx($,{label:e("dialog.markdown.preview"),panelAction:{action:()=>{M()},label:e("dialog.markdown.insert")},renderSubmitShortcut:()=>t.jsx(Ne,{}),children:t.jsx(_e,{value:I,loaded:d.loaded,error:x})})]})]})},ot=i.lazy(()=>ne(()=>import("./batch-image-generation-rvn9zCP-.js"),__vite__mapDeps([5,1,2,6]),import.meta.url)),st=({container:s})=>{var se,re,le,de;const{appState:e,openDialog:l,closeDialog:d}=te(),{language:m}=ae(),c=ie(),{isMobile:D,isTablet:I}=He(),v=!D&&!I,g=i.useRef(!1),x=i.useRef(null),[b,y]=i.useState(""),[M,r]=i.useState(null),[n,w]=i.useState(""),[f,k]=i.useState(null),j=i.useRef(null),R=i.useRef(null),P=i.useCallback(()=>{const a=ue("image"),u=ue("video"),N=a.modelId||"gemini-3-pro-image-preview-vip",W=Y(a.profileId,N),V=u.modelId||"veo3",C=Y(u.profileId,V);y(o=>o===N?o:N),r(o=>L(N,o)===L(N,W)?o:W),w(o=>o===V?o:V),k(o=>L(V,o)===L(V,C)?o:C)},[]);i.useEffect(()=>{P()},[P]),i.useEffect(()=>{const a=()=>{P()};return pe.addListener(a),he.addListener(a),()=>{pe.removeListener(a),he.removeListener(a)}},[P]);const F=a=>{y(a)},U=a=>{w(a)},G=a=>{r(a)},Ve=a=>{k(a)};i.useEffect(()=>{if(!b)return;const a=L(b,M);j.current!==a&&(j.current=a,fe("image",Y(M==null?void 0:M.profileId,b)))},[b,M]),i.useEffect(()=>{if(!n)return;const a=L(n,f);R.current!==a&&(R.current=a,fe("video",Y(f==null?void 0:f.profileId,n)))},[n,f]);const[E,q]=i.useState({initialPrompt:"",initialImages:[],selectedElementIds:[]}),[_,H]=i.useState({initialPrompt:"",initialImage:void 0}),[Fe,O]=i.useState(!1),[A,oe]=i.useState(()=>{try{return localStorage.getItem(Z)==="batch"?"batch":"single"}catch{return"single"}});i.useEffect(()=>{!v&&A==="batch"&&oe("single")},[v,A]);const J=i.useCallback(a=>{oe(a),a==="batch"&&(O(!0),setTimeout(()=>O(!1),50));try{localStorage.setItem(Z,a)}catch(u){console.warn("Failed to save image mode:",u)}},[]);i.useEffect(()=>{if(e.openDialogTypes.has(h.aiImageGeneration)){if(E.initialImages&&E.initialImages.length>0||E.initialPrompt&&E.initialPrompt.trim()!==""){O(!1);return}try{localStorage.getItem(Z)==="batch"&&(O(!0),setTimeout(()=>O(!1),50))}catch{O(!1)}}},[e.openDialogTypes,E.initialImages,E.initialPrompt]);const X=i.useRef(new Set);i.useEffect(()=>{if(!c)return;const a=e.openDialogTypes,u=X.current,N=a.has(h.aiImageGeneration)&&!u.has(h.aiImageGeneration),W=a.has(h.aiVideoGeneration)&&!u.has(h.aiVideoGeneration);X.current=new Set(a),!g.current&&(N&&(async()=>{g.current=!0,x.current&&clearTimeout(x.current),x.current=setTimeout(()=>{console.warn("Processing timeout, resetting processing state"),g.current=!1},1e4);try{if(e.dialogInitialData){q({initialPrompt:e.dialogInitialData.initialPrompt||e.dialogInitialData.prompt||"",initialImages:e.dialogInitialData.initialImages||e.dialogInitialData.uploadedImages||[],selectedElementIds:[],initialResultUrl:e.dialogInitialData.initialResultUrl||e.dialogInitialData.resultUrl});return}const C=e.lastSelectedElementIds||[];let o,T,p;const S=Je(c);if(S.length===1&&Xe(S[0])){const z=S[0],K=ee.getRectangleByPoints(z.points);o=Qe(K.width,K.height),T=z.id,p={width:K.width,height:K.height}}const B=await be(c,C),Q=[];B.remainingImages.forEach(z=>{Q.push({url:z.url,name:z.name||`selected-image-${Date.now()}.png`})}),B.graphicsImage&&Q.push({url:B.graphicsImage,name:`graphics-combined-${Date.now()}.png`}),q({initialPrompt:B.remainingText||"",initialImages:Q,selectedElementIds:C,initialAspectRatio:o,targetFrameId:T,targetFrameDimensions:p})}catch(C){console.warn("Error processing selected content for AI:",C);const o=Te(c),T=o.images.map(p=>({url:p.url,name:p.name||`selected-image-${Date.now()}.png`}));q({initialPrompt:o.text||"",initialImages:T,selectedElementIds:[]})}finally{g.current=!1,x.current&&(clearTimeout(x.current),x.current=null)}})(),W&&(async()=>{g.current=!0,x.current&&clearTimeout(x.current),x.current=setTimeout(()=>{console.warn("Video processing timeout, resetting processing state"),g.current=!1},1e4);try{if(e.dialogInitialData){const p={initialPrompt:e.dialogInitialData.initialPrompt||e.dialogInitialData.prompt||"",initialImage:e.dialogInitialData.initialImage||e.dialogInitialData.uploadedImage,initialImages:e.dialogInitialData.initialImages||e.dialogInitialData.uploadedImages,initialDuration:e.dialogInitialData.initialDuration||e.dialogInitialData.duration,initialModel:e.dialogInitialData.initialModel||e.dialogInitialData.model,initialSize:e.dialogInitialData.initialSize||e.dialogInitialData.size,initialResultUrl:e.dialogInitialData.initialResultUrl||e.dialogInitialData.resultUrl};H(p);return}const C=e.lastSelectedElementIds||[],o=await be(c,C),T=[];o.remainingImages.length>0?o.remainingImages.forEach((p,S)=>{T.push({url:p.url,name:p.name||`selected-image-${S+1}-${Date.now()}.png`})}):o.graphicsImage&&T.push({url:o.graphicsImage,name:`graphics-combined-${Date.now()}.png`}),H({initialPrompt:o.remainingText||"",initialImage:T.length>0?T[0]:void 0,initialImages:T.map((p,S)=>({slot:S,slotLabel:`参考图${S+1}`,url:p.url,name:p.name}))})}catch(C){console.warn("Error processing selected content for AI video:",C);const o=Te(c),T=o.images.map((p,S)=>({url:p.url,name:p.name||`selected-image-${S+1}-${Date.now()}.png`}));H({initialPrompt:o.text||"",initialImage:T.length>0?T[0]:void 0,initialImages:T.map((p,S)=>({slot:S,slotLabel:`参考图${S+1}`,url:p.url,name:p.name}))})}finally{g.current=!1,x.current&&(clearTimeout(x.current),x.current=null)}})())},[e.openDialogTypes]),i.useEffect(()=>{e.openDialogTypes.size===0&&(g.current=!1,X.current=new Set)},[e.openDialogTypes]);const Ge=i.useCallback(()=>{const a=localStorage.getItem(Ie);if(a)try{const u=JSON.parse(a);u.timestamp=Date.now(),localStorage.setItem(Ie,JSON.stringify(u))}catch(u){console.warn("Failed to update cache timestamp:",u)}d(h.aiImageGeneration)},[d]),Oe=i.useCallback(()=>{const a=localStorage.getItem(we);if(a)try{const u=JSON.parse(a);u.timestamp=Date.now(),localStorage.setItem(we,JSON.stringify(u))}catch(u){console.warn("Failed to update cache timestamp:",u)}d(h.aiVideoGeneration)},[d]);return t.jsxs(t.Fragment,{children:[t.jsx(De,{open:e.openDialogTypes.has(h.mermaidToDrawnix),onOpenChange:a=>{a?l(h.mermaidToDrawnix):d(h.mermaidToDrawnix)},children:t.jsx(xe,{className:"Dialog ttd-dialog",container:s,children:t.jsx(it,{})})}),t.jsx(De,{open:e.openDialogTypes.has(h.markdownToDrawnix),onOpenChange:a=>{a?l(h.markdownToDrawnix):d(h.markdownToDrawnix)},children:t.jsx(xe,{className:"Dialog ttd-dialog",container:s,children:t.jsx(nt,{})})}),t.jsx(ye,{visible:e.openDialogTypes.has(h.aiImageGeneration),title:A==="batch"?m==="zh"?"批量出图":"Batch Generation":m==="zh"?"AI 图片生成":"AI Image Generation",headerContent:v?t.jsxs("div",{className:"image-generation-mode-tabs",onMouseDown:a=>a.stopPropagation(),onTouchStart:a=>a.stopPropagation(),onPointerDown:a=>a.stopPropagation(),children:[t.jsx("button",{type:"button",className:`mode-tab ${A==="single"?"active":""}`,onClick:a=>{a.stopPropagation(),a.preventDefault(),J("single")},children:m==="zh"?"AI 图片生成":"AI Image"}),t.jsx("button",{type:"button",className:`mode-tab ${A==="batch"?"active":""}`,onClick:a=>{a.stopPropagation(),a.preventDefault(),J("batch")},children:m==="zh"?"批量出图":"Batch"})]}):void 0,onClose:Ge,width:"80%",height:"60%",minWidth:800,minHeight:500,x:"center",y:"center",modal:!1,minimizable:!1,className:"winbox-ai-generation winbox-ai-image-generation",container:s,autoMaximize:Fe||D,children:e.openDialogTypes.has(h.aiImageGeneration)&&(A==="batch"?t.jsx(i.Suspense,{fallback:t.jsx("div",{className:"loading-fallback",children:m==="zh"?"加载中...":"Loading..."}),children:t.jsx(ot,{onSwitchToSingle:()=>J("single"),selectedModel:b,selectedModelRef:M,onModelChange:F,onModelRefChange:G})}):t.jsx(Ze,{initialPrompt:E.initialPrompt,initialImages:E.initialImages,selectedElementIds:E.selectedElementIds,initialWidth:((se=e.dialogInitialData)==null?void 0:se.initialWidth)||((re=e.dialogInitialData)==null?void 0:re.width),initialHeight:((le=e.dialogInitialData)==null?void 0:le.initialHeight)||((de=e.dialogInitialData)==null?void 0:de.height),initialResultUrl:E.initialResultUrl,initialAspectRatio:E.initialAspectRatio,targetFrameId:E.targetFrameId,targetFrameDimensions:E.targetFrameDimensions,selectedModel:b,selectedModelRef:M,onModelChange:F,onModelRefChange:G}))}),t.jsx(ye,{visible:e.openDialogTypes.has(h.aiVideoGeneration),title:m==="zh"?"AI 视频生成":"AI Video Generation",onClose:Oe,width:"70%",height:"60%",minWidth:800,minHeight:600,x:"center",y:"center",modal:!1,minimizable:!1,className:"winbox-ai-generation winbox-ai-video-generation",container:s,autoMaximize:D,children:e.openDialogTypes.has(h.aiVideoGeneration)&&t.jsx(et,{initialPrompt:_.initialPrompt,initialImage:_.initialImage,initialImages:_.initialImages,initialDuration:_.initialDuration,initialModel:_.initialModel,initialSize:_.initialSize,initialResultUrl:_.initialResultUrl,selectedModel:n,selectedModelRef:f,onModelChange:U,onModelRefChange:Ve})})]})},pt=i.memo(st,(s,e)=>s.container===e.container);export{pt as TTDDialog};
|