archyne 1.1.1-alpha.1 → 1.2.0-alpha.1
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 +2 -1
- package/dist/assets/{AiPanel-cizsxiQw.js → AiPanel-BYrYaTRr.js} +1 -1
- package/dist/assets/{abnfDiagram-WEYOIA3C-DhX2N40N.js → abnfDiagram-WEYOIA3C-7hUMVm9c.js} +1 -1
- package/dist/assets/ar-BEGAEw7i.js +1 -0
- package/dist/assets/architecture-C8enpGnf.js +3 -0
- package/dist/assets/{architectureDiagram-ZHVYKT53-DQ39-dmN.js → architectureDiagram-ZHVYKT53-DNDfu2vi.js} +1 -1
- package/dist/assets/{blockDiagram-RJAE7QA3-CYPxHQnz.js → blockDiagram-RJAE7QA3-B86OHU_e.js} +1 -1
- package/dist/assets/{c4Diagram-XDPPPE54-BZgF0uy1.js → c4Diagram-XDPPPE54-DYatp7y0.js} +1 -1
- package/dist/assets/{changes-Bhz9SZug.js → changes-DWLvt0qb.js} +1 -1
- package/dist/assets/{chunk-2E7WHVMD-jYqcw7lJ.js → chunk-2E7WHVMD-kU1DS-Ov.js} +1 -1
- package/dist/assets/{chunk-4EMNKR2T-CuLbhNLH.js → chunk-4EMNKR2T-CSUldRws.js} +1 -1
- package/dist/assets/{chunk-AQDTSKZB-y4y2mbZy.js → chunk-AQDTSKZB-DJ8mIT1L.js} +1 -1
- package/dist/assets/{chunk-HAGFOTED-Bnpg2p6V.js → chunk-HAGFOTED-DogUyNBq.js} +1 -1
- package/dist/assets/{chunk-HNE4Q36P-B4SsKZZK.js → chunk-HNE4Q36P-BiNmXUxf.js} +1 -1
- package/dist/assets/{chunk-NQOKRVIF-Dy7cYepr.js → chunk-NQOKRVIF-DLNLgPiM.js} +1 -1
- package/dist/assets/{chunk-WQQL4CDK-DeeqxUy0.js → chunk-WQQL4CDK-Br1WjoWq.js} +1 -1
- package/dist/assets/chunk-YZO67HFG-tSTbHNnU.js +1 -0
- package/dist/assets/{chunk-ZAUX2LTX-CFJVqsBQ.js → chunk-ZAUX2LTX-ruM05QOo.js} +1 -1
- package/dist/assets/{chunk-ZCHMQSOR-DbQja4UW.js → chunk-ZCHMQSOR-kPl2pATB.js} +1 -1
- package/dist/assets/{classDiagram-v2-4MYWR3UA-CyG6rH_-.js → classDiagram-v2-4MYWR3UA-CvXPbrba.js} +1 -1
- package/dist/assets/{cynefinDiagram-WF24UDRP-C2Cp7PTo.js → cynefinDiagram-WF24UDRP-D2QZnRM_.js} +1 -1
- package/dist/assets/{dagre-NK4GIZVX-COlQY4G8.js → dagre-NK4GIZVX-DMnhOBCZ.js} +1 -1
- package/dist/assets/de-DYXP2Xj4.js +1 -0
- package/dist/assets/{diagram-CBK3MWTC-SSR9PdiH.js → diagram-CBK3MWTC-DLARQDwU.js} +1 -1
- package/dist/assets/{diagram-I5XIIV2D-BAlXemfH.js → diagram-I5XIIV2D-z79XT9XK.js} +1 -1
- package/dist/assets/{diagram-ODIL2UCW-CH48Ua3M.js → diagram-ODIL2UCW-Cnq2AYjQ.js} +1 -1
- package/dist/assets/{diagram-RJA3I4VV-grjOTy9m.js → diagram-RJA3I4VV-AuwL5UgD.js} +1 -1
- package/dist/assets/{diagram-TYUNFSNR-C6gCOOHy.js → diagram-TYUNFSNR-mKBHyH9Q.js} +1 -1
- package/dist/assets/{ebnfDiagram-V4P3TTPT-Dn8Wb-ok.js → ebnfDiagram-V4P3TTPT-nBvxsosM.js} +1 -1
- package/dist/assets/{elk-QONTBCTQ-CxncOfL3.js → elk-QONTBCTQ-BLTMm-dG.js} +1 -1
- package/dist/assets/{erDiagram-KYQIGQAA-CFxjaF_P.js → erDiagram-KYQIGQAA-CFv73u6t.js} +1 -1
- package/dist/assets/es-L97Z5r4j.js +1 -0
- package/dist/assets/flowDiagram-IUGLLWBU-BRcf4yes.js +1 -0
- package/dist/assets/{fromDot-DXaBZswx.js → fromDot-Bty_Qz_b.js} +2 -2
- package/dist/assets/fromDrawio-CWgolgYF.js +6 -0
- package/dist/assets/{fromExcalidraw-Blpd8wAP.js → fromExcalidraw-xy6eOLxX.js} +1 -1
- package/dist/assets/{fromLucid-CGaG7i_M.js → fromLucid-yUyr1Vjm.js} +2 -2
- package/dist/assets/{fromPlantuml-snHdBKEN.js → fromPlantuml-53lWpvdj.js} +1 -1
- package/dist/assets/{fromSql-Ck8lFyWR.js → fromSql-BXmwIPho.js} +1 -1
- package/dist/assets/fromVsdx-Dm5Vgejf.js +2 -0
- package/dist/assets/{ganttDiagram-R7GPNTJY-Befi_-Ka.js → ganttDiagram-R7GPNTJY-DLmTOKsI.js} +1 -1
- package/dist/assets/{generate-Ctt7OIYt.js → generate-DH_UpkiR.js} +1 -1
- package/dist/assets/i18n-DogkFT65.js +1 -0
- package/dist/assets/index-C_wVJZMB.js +227 -0
- package/dist/assets/index-XD5hlBb4.css +1 -0
- package/dist/assets/{infoDiagram-MVDRKAX5-LRfgkgJo.js → infoDiagram-MVDRKAX5-DEHCtJRA.js} +1 -1
- package/dist/assets/{ishikawaDiagram-HPEHV2GE-VKOJSJ_g.js → ishikawaDiagram-HPEHV2GE-Cp9b7uNo.js} +1 -1
- package/dist/assets/it-WH4G0JVB.js +1 -0
- package/dist/assets/ja-Ck-yhgwU.js +1 -0
- package/dist/assets/{kanban-definition-FNSA4HC5-CTIEI4kz.js → kanban-definition-FNSA4HC5-CVGwfCQ1.js} +1 -1
- package/dist/assets/{linear-CFQ5llbP.js → linear-EFrPfQeP.js} +1 -1
- package/dist/assets/{mermaid.core-Bh6iUGiO.js → mermaid.core-CzhTuTFf.js} +4 -4
- package/dist/assets/{mindmap-definition-6OY57UG3-BN-Mt4oK.js → mindmap-definition-6OY57UG3-C_qs0mti.js} +1 -1
- package/dist/assets/{pegDiagram-ECIUJNBX-CtemSMgx.js → pegDiagram-ECIUJNBX-MMEp5l59.js} +1 -1
- package/dist/assets/{pieDiagram-GNMPY74T-DJGVDY6_.js → pieDiagram-GNMPY74T-DA-z-IGZ.js} +1 -1
- package/dist/assets/{plantumlFamilies-DKCzTTBD.js → plantumlFamilies-w-_7Gnbr.js} +2 -2
- package/dist/assets/{provider-DiGaSl1J.js → provider-CglKTnl2.js} +1 -1
- package/dist/assets/{quadrantDiagram-D57K4MC3-BkTxoOwZ.js → quadrantDiagram-D57K4MC3-YTkIsK-y.js} +1 -1
- package/dist/assets/{railroadDiagram-Y72NRBL7-Dgp_TUQk.js → railroadDiagram-Y72NRBL7-BnNhwqVg.js} +1 -1
- package/dist/assets/{requirementDiagram-EQYSW5RA-BS_TxMy4.js → requirementDiagram-EQYSW5RA-DTcINI6A.js} +1 -1
- package/dist/assets/{sequenceDiagram-BLEHNHQU-DbdPdr_t.js → sequenceDiagram-BLEHNHQU-CjH3Uzln.js} +1 -1
- package/dist/assets/{stateDiagram-v2-A6IESKWZ-BlNxN85x.js → stateDiagram-v2-A6IESKWZ-BTS3oCpE.js} +1 -1
- package/dist/assets/{swimlanes-B3ENRKFQ-BvRN-zgg.js → swimlanes-B3ENRKFQ-Df0Y1tmM.js} +1 -1
- package/dist/assets/swimlanesDiagram-AYQRV4AK-ZzDwZQO9.js +8 -0
- package/dist/assets/{timeline-definition-JXYKGLGB-6RT5FG05.js → timeline-definition-JXYKGLGB-jlaAI5R3.js} +1 -1
- package/dist/assets/{usecaseDiagram-WPOLBNNX-Bl_j_4a2.js → usecaseDiagram-WPOLBNNX-RyIQjXD5.js} +1 -1
- package/dist/assets/{vennDiagram-Q3Y3IDCW-CwsLh9-L.js → vennDiagram-Q3Y3IDCW-CBvh2KRW.js} +1 -1
- package/dist/assets/{wardleyDiagram-IVAIDKWA-DjnZWkZj.js → wardleyDiagram-IVAIDKWA-DdbAd_gc.js} +1 -1
- package/dist/assets/{xychartDiagram-4URNHDU4-B1MUw51D.js → xychartDiagram-4URNHDU4-DkfeL0h7.js} +1 -1
- package/dist/assets/zh-Db5xzX3m.js +1 -0
- package/dist/index.html +4 -4
- package/package.json +2 -1
- package/dist/assets/ar-DfyRXZM9.js +0 -1
- package/dist/assets/architecture-Cl0qLcG8.js +0 -3
- package/dist/assets/chunk-YZO67HFG-71aMjf16.js +0 -1
- package/dist/assets/de-Bn06VvST.js +0 -1
- package/dist/assets/es-Bx5E-jhA.js +0 -1
- package/dist/assets/flowDiagram-IUGLLWBU-B9r4Jg2Q.js +0 -1
- package/dist/assets/fromDrawio-CHZVRLel.js +0 -6
- package/dist/assets/fromVsdx-Ji5l1-GW.js +0 -2
- package/dist/assets/i18n-Clgq-7gx.js +0 -1
- package/dist/assets/importShared-Cqq_WO7A.js +0 -1
- package/dist/assets/index-C7pEN42H.js +0 -226
- package/dist/assets/index-C7ztvSGm.css +0 -1
- package/dist/assets/it-BP-qPR64.js +0 -1
- package/dist/assets/ja-DMozX1sW.js +0 -1
- package/dist/assets/swimlanesDiagram-AYQRV4AK-vWeXPxmW.js +0 -8
- package/dist/assets/zh-DIjDpuUf.js +0 -1
package/README.md
CHANGED
|
@@ -404,7 +404,8 @@ read-only, rendered rather than refused.
|
|
|
404
404
|
The palette, inspector, and "New…" menu adapt to the active diagram kind.
|
|
405
405
|
Plus: **undo/redo** (Ctrl+Z/Y — the code being the source of truth makes
|
|
406
406
|
history a stack of snapshots), **copy/paste** (Ctrl+C/V, id-remapped, edges
|
|
407
|
-
included
|
|
407
|
+
included — a copy is also a picture for a slide and Mermaid for an editor,
|
|
408
|
+
and a picture pasted onto a flowchart becomes an image node), **resizing** with drag handles or typed width and height,
|
|
408
409
|
snap-to-grid, **alignment guides** while dragging, double-click any node or
|
|
409
410
|
edge to rename it, drag-and-drop, direction switch, ELK auto-layout,
|
|
410
411
|
`.mmd` open/save, **PNG/SVG/PDF export** of the canvas — to a file, or
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{a as t,f as n,i as r}from"./i18n-Clgq-7gx.js";import{n as i,v as a}from"./index-C7pEN42H.js";import{hasChanges as o}from"./changes-Bhz9SZug.js";import{SERVER_PRESETS as s,isLocalUrl as c,presetOf as l,probeServer as u}from"./server-BX-Rqf3U.js";import{a as d,aiMode as f,c as p,d as m,i as h,l as g,n as _,o as v,r as y,s as b,t as x,u as S}from"./provider-DiGaSl1J.js";var C=e(n(),1);function w(e){return e.filter(e=>e.type!==`group`&&e.type!==`note`&&e.type!==`junction`).map(e=>{let t=e.data;return{label:typeof t.label==`string`?t.label.trim():``,shape:typeof t.shape==`string`?t.shape:void 0}}).filter(e=>e.label&&e.label.length<=40)}function T(e,t){let n=w(t);if(n.length===0)return[{key:`ai.suggestStartLogin`},{key:`ai.suggestStartShop`},{key:`ai.suggestStartOrder`}];let r=[];if(e===`flowchart`){let e=n.find(e=>e.shape===`cylinder`&&!/cache/i.test(e.label)),t=n.find(e=>e.shape===`square`||e.shape===`round`)??n[0],i=n.find(e=>e.shape===`diamond`);e&&r.push({key:`ai.suggestCache`,params:{node:e.label}}),r.push({key:`ai.suggestRetry`,params:{node:t.label}}),i&&r.push({key:`ai.suggestOutcome`,params:{node:i.label}}),r.push({key:`ai.suggestColour`,params:{node:(n.at(-1)??t).label}})}else r.push({key:`ai.suggestConnect`,params:{node:n[0].label}}),r.push({key:`ai.suggestRemove`,params:{node:(n.at(-1)??n[0]).label}});return r.slice(0,3)}var E=a();function D({connectionId:e,target:n,config:i,disabled:a,onChange:o}){let s=t(),c=r(e=>e.locale),l=m(),[u,d]=(0,C.useState)({signedIn:!1}),[f,p]=(0,C.useState)(!1),[h,g]=(0,C.useState)(null),[_,v]=(0,C.useState)(null),b=e=>o({...i,...e}),x=i.flow===`jwt_bearer`;if((0,C.useEffect)(()=>{if(!l)return;let t=!0;y().then(()=>l.authStatus(e)).then(e=>t&&d(e));let n=l.onEvent(n=>{if(n.type===`ai:auth`&&n.connectionId===e){if(n.state===`device-code`){g({userCode:n.userCode,uri:n.verificationUriComplete??n.verificationUri});return}g(null),p(!1),v(n.state===`error`?n.detail??``:null),l.authStatus(e).then(e=>t&&d(e))}});return()=>{t=!1,n()}},[l,e,n]),!l)return null;let S=async()=>{p(!0),v(null),await y(),await l.signIn(e)},w=async()=>{await y(),await l.signOut(e),d(await l.authStatus(e))},T=u.expiresAt?new Date(u.expiresAt).toLocaleTimeString(c,{hour:`2-digit`,minute:`2-digit`}):null;return(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[s(`ai.oauthFlow`),(0,E.jsxs)(`select`,{value:i.flow,"aria-label":s(`ai.oauthFlow`),disabled:a||f,onChange:e=>b({flow:e.target.value}),children:[(0,E.jsx)(`option`,{value:`authorization_code`,children:s(`ai.oauthFlowBrowser`)}),(0,E.jsx)(`option`,{value:`device_code`,children:s(`ai.oauthFlowDevice`)}),(0,E.jsx)(`option`,{value:`client_credentials`,children:s(`ai.oauthFlowMachine`)}),(0,E.jsx)(`option`,{value:`jwt_bearer`,children:s(`ai.oauthFlowAssertion`)})]})]}),x&&(0,E.jsx)(`p`,{className:`ai-server-hint`,children:s(`ai.oauthAssertionHint`)}),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[s(`ai.oauthIssuer`),(0,E.jsx)(`input`,{type:`url`,value:i.issuer??``,placeholder:s(`ai.oauthIssuerHint`),spellCheck:!1,disabled:a||f,onChange:e=>b({issuer:e.target.value.trim()||void 0})})]}),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[s(x?`ai.oauthAssertionIssuer`:`ai.oauthClientId`),(0,E.jsx)(`input`,{type:`text`,value:i.clientId??``,spellCheck:!1,disabled:a||f,onChange:e=>b({clientId:e.target.value.trim()||void 0})})]}),i.flow!==`client_credentials`&&!x&&(0,E.jsxs)(`label`,{className:`ai-oauth-check`,children:[(0,E.jsx)(`input`,{type:`checkbox`,checked:!!i.register,disabled:a||f,onChange:e=>b({register:e.target.checked})}),s(`ai.oauthRegister`)]}),!x&&(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[s(`ai.oauthClientAuth`),(0,E.jsxs)(`select`,{value:i.clientAuth??``,"aria-label":s(`ai.oauthClientAuth`),disabled:a||f,onChange:e=>b({clientAuth:e.target.value||void 0}),children:[(0,E.jsx)(`option`,{value:``,children:s(`ai.oauthClientAuthAuto`)}),(0,E.jsx)(`option`,{value:`client_secret_basic`,children:s(`ai.oauthClientAuthBasic`)}),(0,E.jsx)(`option`,{value:`client_secret_post`,children:s(`ai.oauthClientAuthPost`)}),(0,E.jsx)(`option`,{value:`private_key_jwt`,children:s(`ai.oauthClientAuthKey`)}),(0,E.jsx)(`option`,{value:`tls_client_auth`,children:s(`ai.oauthClientAuthTls`)})]})]}),!x&&(0,E.jsxs)(`label`,{className:`ai-oauth-check`,children:[(0,E.jsx)(`input`,{type:`checkbox`,checked:!!i.dpop,disabled:a||f,onChange:e=>b({dpop:e.target.checked})}),s(`ai.oauthDpop`)]}),x&&(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[s(`ai.oauthSubject`),(0,E.jsx)(`input`,{type:`text`,value:i.subject??``,spellCheck:!1,disabled:a||f,onChange:e=>b({subject:e.target.value.trim()||void 0})})]}),(i.clientAuth===`private_key_jwt`||x)&&(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[s(`ai.oauthKeyId`),(0,E.jsx)(`input`,{type:`text`,value:i.keyId??``,spellCheck:!1,disabled:a||f,onChange:e=>b({keyId:e.target.value.trim()||void 0})})]}),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[s(`ai.oauthScopes`),(0,E.jsx)(`input`,{type:`text`,value:i.scopes??``,spellCheck:!1,disabled:a||f,onChange:e=>b({scopes:e.target.value})})]}),(0,E.jsxs)(`div`,{className:`ai-remote-row`,children:[(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[s(`ai.oauthResource`),(0,E.jsx)(`input`,{type:`text`,value:i.resource??``,spellCheck:!1,disabled:a||f,onChange:e=>b({resource:e.target.value.trim()||void 0})})]}),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[s(`ai.oauthAudience`),(0,E.jsx)(`input`,{type:`text`,value:i.audience??``,spellCheck:!1,disabled:a||f,onChange:e=>b({audience:e.target.value.trim()||void 0})})]})]}),(0,E.jsxs)(`div`,{className:`ai-server-check`,children:[f?(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,onClick:()=>{l.cancelSignIn(e),p(!1),g(null)},children:s(`ai.oauthCancel`)}):u.signedIn?(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,disabled:a,onClick:()=>void w(),children:s(`ai.oauthSignOut`)}):(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,disabled:a,onClick:()=>void S(),children:s(`ai.oauthSignIn`)}),(0,E.jsx)(`p`,{className:`ai-server-status${u.signedIn?` ai-server-status--ok`:f||_===null?` ai-server-status--note`:``}`,role:`status`,"data-auth":f?`busy`:u.signedIn?`signed-in`:`signed-out`,children:f?h?null:s(`ai.oauthWaiting`):u.signedIn?T?s(`ai.oauthSignedInUntil`,{time:T}):s(`ai.oauthSignedIn`):_===null?s(`ai.oauthSignedOut`):s(`ai.oauthFailed`,{error:_})}),f&&h&&(0,E.jsxs)(`div`,{className:`ai-oauth-device`,role:`status`,children:[(0,E.jsxs)(`p`,{children:[s(`ai.oauthDeviceCode`),` `,(0,E.jsx)(`a`,{href:h.uri,target:`_blank`,rel:`noreferrer`,children:h.uri})]}),(0,E.jsx)(`p`,{className:`ai-oauth-code`,children:h.userCode})]})]})]})}var O=[`azure-kv`,`aws-sm`,`gcp-sm`,`alibaba-kms`,`hashicorp`],k={azureName:/^[0-9A-Za-z-]{1,127}$/,azureVault:/^https:\/\/[a-z0-9-]{3,24}\.vault\.(azure\.net|azure\.cn|usgovcloudapi\.net)\/?$/,awsName:/^[A-Za-z0-9/_+=.@:-]{1,2048}$/,awsRegion:/^[a-z]{2}(-[a-z]+)+-\d{1,2}$/,gcpName:/^[A-Za-z0-9_-]{1,255}$/,gcpProject:/^([a-z][a-z0-9-]{4,28}[a-z0-9]|\d{1,20})$/,alibabaName:/^[A-Za-z0-9_/+=.@:-]{1,192}$/,alibabaRegion:/^[a-z]{2}-[a-z0-9-]{2,30}$/,hashicorpPath:/^(?!.*\.\.)[A-Za-z0-9_.-]+(\/[A-Za-z0-9_.-]+)*$/,hashicorpMount:/^[A-Za-z0-9_.-]{1,64}$/,namespace:/^[A-Za-z0-9_-]+(\/[A-Za-z0-9_-]+)*$/,word:/^[A-Za-z0-9_.-]{1,128}$/};function A(e){let t=e.vault;if(e.protocol!==`vault`||!t||!O.includes(t.kind)||t.via!==`cli`&&t.via!==`sign-in`)return`vault`;if(t.profile!==void 0&&t.profile!==``&&!k.word.test(t.profile))return`profile`;switch(t.kind){case`azure-kv`:return k.azureVault.test(e.baseUrl)?null:`address`;case`aws-sm`:return k.awsRegion.test(t.region??``)?null:`region`;case`gcp-sm`:return k.gcpProject.test(t.project??``)?null:`project`;case`alibaba-kms`:return k.alibabaRegion.test(t.region??``)?null:`region`;case`hashicorp`:{let n;try{n=new URL(e.baseUrl)}catch{return`address`}return n.protocol!==`https:`&&![`localhost`,`127.0.0.1`].includes(n.hostname)||n.username||n.password||n.search||n.hash?`address`:t.mount&&!k.hashicorpMount.test(t.mount)?`mount`:t.namespace&&!k.namespace.test(t.namespace)?`namespace`:null}}}var j={"azure-kv":`Azure Key Vault`,"aws-sm":`AWS Secrets Manager`,"gcp-sm":`Google Secret Manager`,"alibaba-kms":`Alibaba Cloud KMS`,hashicorp:`HashiCorp Vault / OpenBao`},M={"azure-kv":{command:`az`,login:`az login`},"aws-sm":{command:`aws`,login:`aws sso login`},"gcp-sm":{command:`gcloud`,login:`gcloud auth login`},"alibaba-kms":{command:`aliyun`,login:`aliyun configure`},hashicorp:{command:`vault`,login:`vault login`}},N={"azure-kv":`https://<name>.vault.azure.net`,hashicorp:`https://vault.example.com:8200`},P={address:`ai.vaultProblemAddress`,region:`ai.remoteProblemRegion`,project:`ai.vaultProblemProject`,profile:`ai.vaultProblemField`,mount:`ai.vaultProblemField`,namespace:`ai.vaultProblemField`};function F({disabled:e}){let n=t(),r=d(e=>e.vaults),i=d(e=>e.addVault),a=d(e=>e.removeVault),[o,s]=(0,C.useState)(null),c=r.find(e=>e.id===o)??r[0]??null;return(0,E.jsxs)(`details`,{className:`ai-vaults`,children:[(0,E.jsx)(`summary`,{children:n(`ai.vaults`,{count:r.length})}),(0,E.jsx)(`p`,{className:`ai-server-hint`,children:n(`ai.vaultsHint`)}),(0,E.jsxs)(`div`,{className:`ai-server-presets`,children:[r.length>0&&(0,E.jsxs)(`label`,{className:`ai-server-field ai-remote-pick`,children:[n(`ai.vaultPick`),(0,E.jsx)(`select`,{value:c?.id??``,"aria-label":n(`ai.vaultPick`),disabled:e,onChange:e=>s(e.target.value),children:r.map(e=>(0,E.jsx)(`option`,{value:e.id,children:e.label||j[e.vault?.kind??`azure-kv`]},e.id))})]}),(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,disabled:e,onClick:()=>s(i(n(`ai.vaultNewName`),`azure-kv`)),children:n(`ai.vaultAdd`)}),c&&(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,disabled:e,onClick:()=>{a(c.id),s(null)},children:n(`ai.vaultRemove`)})]}),c&&(0,E.jsx)(I,{vault:c,disabled:e},c.id)]})}function I({vault:e,disabled:n}){let r=t(),i=d(e=>e.updateVault),a=e.vault??{kind:`azure-kv`,via:`cli`},o=t=>i(e.id,t),s=e=>o({vault:{...a,...e}}),c=e.baseUrl!==`https://`||[a.region,a.project,a.profile,a.mount,a.namespace].some(Boolean)?A(e):null,l=a.kind===`azure-kv`||a.kind===`hashicorp`,u=a.kind===`aws-sm`||a.kind===`alibaba-kms`,f=(e,t,i,a)=>(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[r(e),(0,E.jsx)(`input`,{type:`text`,value:t,spellCheck:!1,placeholder:a,disabled:n,onChange:e=>i(e.target.value.trim())})]});return(0,E.jsxs)(E.Fragment,{children:[f(`ai.remoteName`,e.label,e=>o({label:e})),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[r(`ai.vaultKind`),(0,E.jsx)(`select`,{value:a.kind,"aria-label":r(`ai.vaultKind`),disabled:n,onChange:e=>s({kind:e.target.value}),children:O.map(e=>(0,E.jsx)(`option`,{value:e,children:j[e]},e))})]}),l&&f(`ai.serverAddress`,e.baseUrl===`https://`?``:e.baseUrl,e=>o({baseUrl:e||`https://`}),N[a.kind]),u&&f(`ai.awsRegion`,a.region??``,e=>s({region:e}),a.kind===`aws-sm`?`eu-west-1`:`ap-southeast-1`),a.kind===`gcp-sm`&&f(`ai.vaultProject`,a.project??``,e=>s({project:e})),a.kind===`hashicorp`&&(0,E.jsxs)(`div`,{className:`ai-remote-row`,children:[f(`ai.vaultMount`,a.mount??``,e=>s({mount:e}),`secret`),f(`ai.vaultNamespace`,a.namespace??``,e=>s({namespace:e}))]}),(a.kind===`aws-sm`||a.kind===`alibaba-kms`)&&f(`ai.vaultProfile`,a.profile??``,e=>s({profile:e})),(0,E.jsx)(`p`,{className:`ai-server-hint`,children:r(`ai.vaultCliHint`,M[a.kind])}),c&&P[c]&&(0,E.jsx)(`p`,{className:`ai-server-status`,role:`status`,children:r(P[c])})]})}function L(){let e=globalThis.location?.origin??``;return e&&e!==`null`?e:`file://*`}function R(e,t,n,r){let i=l(n),a=i?s[i].label:e(`ai.serverGeneric`);switch(t){case`blocked`:return i===`ollama`?e(`ai.serverBlockedOllama`,{origin:L()}):i===`lmstudio`?e(`ai.serverBlockedLmStudio`):e(`ai.serverBlocked`,{origin:L()});case`down`:return e(`ai.serverDown`,{url:n,server:a});case`not-local`:return e(`ai.serverNotLocal`);case`no-model`:return e(`ai.serverNeedsModel`);default:return e(`ai.serverHttp`,{status:r??`?`})}}function z(e,t,n,r){switch(t){case`not-local`:return e(`ai.remoteNotHttps`);case`down`:case`network`:return e(`ai.remoteDown`,{url:n});case`no-model`:return e(`ai.remoteNeedsModel`);case`vault`:return r?.problem===`not-authorized`?e(`ai.vaultNotAuthorized`):r?.problem===`denied`?e(`ai.vaultDenied`):e(`ai.remoteVaultFailed`,{detail:r?.problem??``});case`invalid`:switch(r?.problem){case`protocol`:return e(`ai.remoteProblemProtocol`);case`header-name`:return e(`ai.remoteProblemHeaderName`);case`username`:return e(`ai.remoteProblemUsername`);case`extra-header`:return e(`ai.remoteProblemExtraHeader`);case`flow`:return e(`ai.remoteProblemFlow`);case`issuer`:return e(`ai.remoteProblemIssuer`);case`client`:return e(`ai.remoteProblemClient`);case`tls-https`:return e(`ai.remoteProblemTlsHttps`);case`tls-client-auth`:return e(`ai.remoteProblemTlsClientAuth`);case`region`:return e(`ai.remoteProblemRegion`);case`service`:return e(`ai.remoteProblemService`);default:return e(`ai.remoteProblemUnknown`)}default:return r?.status===401||r?.status===403?e(`ai.remoteUnauthorized`,{status:r.status}):e(`ai.serverHttp`,{status:r?.status??`?`})}}function B({disabled:e}){let n=t(),r=d(e=>e.connections),i=d(e=>e.connectionId),a=d(e=>e.addConnection),o=d(e=>e.removeConnection),s=d(e=>e.selectConnection),c=r.find(e=>e.id===i)??null,[l,u]=(0,C.useState)({id:i,open:!c?.model});l.id!==i&&u({id:i,open:!c?.model});let f=l.id===i?l.open:!c?.model;return(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)(`details`,{className:`ai-server`,open:f,onToggle:e=>{let t=e.currentTarget.open;t!==f&&u({id:i,open:t})},children:[(0,E.jsx)(`summary`,{children:n(`ai.remoteSummary`,{model:c?`${c.label} · ${c.model||n(`ai.serverNoModel`)}`:n(`ai.serverNoModel`)})}),(0,E.jsxs)(`div`,{className:`ai-server-presets`,children:[r.length>0&&(0,E.jsxs)(`label`,{className:`ai-server-field ai-remote-pick`,children:[n(`ai.remoteService`),(0,E.jsx)(`select`,{value:i??``,"aria-label":n(`ai.remoteService`),disabled:e,onChange:e=>s(e.target.value),children:r.map(e=>(0,E.jsx)(`option`,{value:e.id,children:e.label||e.baseUrl},e.id))})]}),(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,disabled:e,onClick:()=>a(n(`ai.remoteNewName`)),children:n(`ai.remoteAdd`)}),c&&(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,disabled:e,onClick:()=>o(c.id),children:n(`ai.remoteRemove`)})]}),c?(0,E.jsx)(U,{connection:c,disabled:e,onPicked:()=>u({id:c.id,open:!1})},c.id):(0,E.jsx)(`p`,{className:`ai-server-hint`,children:n(`ai.remoteNone`)})]}),(0,E.jsx)(F,{disabled:e})]})}var V={openai:{baseUrl:``,auth:{type:`header`,name:`Authorization`,prefix:`Bearer `}},anthropic:{baseUrl:`https://api.anthropic.com/v1`,auth:{type:`header`,name:`x-api-key`},hint:`ai.remoteAnthropicHint`},azure:{baseUrl:``,auth:{type:`header`,name:`api-key`},hint:`ai.remoteAzureHint`},bedrock:{baseUrl:H(`us-east-1`),auth:{type:`sigv4`,region:`us-east-1`},hint:`ai.remoteBedrockHint`},vertex:{baseUrl:`https://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/endpoints/openapi`,auth:{type:`oauth`,flow:`jwt_bearer`,issuer:`https://accounts.google.com`,scopes:`https://www.googleapis.com/auth/cloud-platform`},hint:`ai.remoteVertexHint`},alibaba:{baseUrl:`https://dashscope-intl.aliyuncs.com/compatible-mode/v1`,auth:{type:`header`,name:`Authorization`,prefix:`Bearer `},hint:`ai.remoteAlibabaHint`}};function H(e){return`https://bedrock-runtime.${e}.amazonaws.com`}function ee(e){try{let t=new URL(e).hostname;return/^bedrock-runtime(?:-fips)?\.([a-z0-9-]+)\.amazonaws\.com$/.exec(t)?.[1]??null}catch{return null}}function U({connection:e,disabled:n,onPicked:r}){let i=t(),a=d(e=>e.updateConnection),o=d(e=>e.vaults),s=m(),[c,l]=(0,C.useState)([]),[u,f]=(0,C.useState)(!0),[h,_]=(0,C.useState)(null),[x,w]=(0,C.useState)(()=>p(e.headers)),[T,O]=(0,C.useState)(()=>Object.keys(e.headers??{}).length>0),[k,A]=(0,C.useState)(null),[j,M]=(0,C.useState)([]),[N,P]=(0,C.useState)(null),F=t=>a(e.id,t),I=b(e);(0,C.useEffect)(()=>{if(!s)return;let t=!0;return y().then(()=>Promise.all([s.secretFields(e.id),s.canKeepSecrets()])).then(([e,n])=>{t&&(l(e),f(n))}),()=>{t=!1}},[s,e.id,I]);let L=JSON.stringify([e.fromVault??null,I,o]);if((0,C.useEffect)(()=>{if(!s)return;let t=!0;return y().then(()=>s.vaultAuthorized(e.id)).then(e=>t&&M(e)),()=>{t=!1}},[s,e.id,L]),!s)return null;let R=async t=>{P(null),await y();let n=await s.authorizeVaultSecret(e.id,t);`problem`in n&&P({field:t,text:n.problem===`denied`?i(`ai.vaultDenied`):n.problem===`invalid`?i(`ai.vaultIncompleteRef`):i(`ai.remoteVaultFailed`,{detail:n.problem})}),M(await s.vaultAuthorized(e.id))},B=async()=>{_(`checking`),await y(),_(await s.probe(e.id))},U=(t,n)=>{let r=Object.fromEntries(Object.entries(e.fromVault??{}).filter(([e])=>e!==t)),i=n?{...r,[t]:n}:r;F({fromVault:Object.keys(i).length?i:void 0})},W=async(t,n)=>{await y(),await s.setSecret(e.id,t,n),l(await s.secretFields(e.id))},G=async t=>{A(null),await y();let n=await s.importSecretFile(e.id,t);`problem`in n&&A({field:t,key:re[n.problem]??`ai.fileUnreadable`}),l(await s.secretFields(e.id))},K=c.includes(`tlsPfx`),q=t=>{let n=t===`header`?{type:t,name:`Authorization`,prefix:`Bearer `}:t===`basic`?{type:t,username:``}:t===`oauth`?{type:t,flow:`authorization_code`,register:!0,scopes:``}:t===`sigv4`?{type:t,region:ee(e.baseUrl)??`us-east-1`}:{type:`none`};F({auth:n})},J=t=>{let n=V[e.protocol],r=V[t],i={protocol:t,model:``};(e.baseUrl===`https://`||e.baseUrl===``||e.baseUrl===n?.baseUrl)&&(i.baseUrl=r.baseUrl||`https://`);let a=e.auth;(a.type===`none`||n&&JSON.stringify(a)===JSON.stringify(n.auth))&&(i.auth=r.auth),_(null),F(i)},Y=V[e.protocol],ae=[`azure`,`bedrock`,`vertex`,`alibaba`].includes(e.protocol),X=e.protocol===`bedrock`||e.protocol===`alibaba`,oe=t=>{let n=e.auth.type===`sigv4`?e.auth:null,r={auth:{type:`sigv4`,region:t,...n?.service?{service:n.service}:{}}};n&&e.baseUrl===H(n.region)&&/^[a-z0-9-]+$/.test(t)&&(r.baseUrl=H(t)),F(r)},Z=h&&h!==`checking`&&h.state===`ok`?h.models:[],Q=e.model&&!Z.includes(e.model)?[e.model,...Z]:Z,$=t=>t.filter(e=>v.has(e)).filter(e=>!K||e!==`tlsCert`&&e!==`tlsKey`).map(t=>(0,E.jsx)(te,{label:i(t===`privateKey`&&e.auth.type===`oauth`&&e.auth.flow===`jwt_bearer`?`ai.oauthAssertionKey`:ne[t]??`ai.remotePassword`),saved:c.includes(t),disabled:n||!u,onSave:e=>void W(t,e),onForget:()=>void W(t,null),vaults:o,fromVault:e.fromVault?.[t],onFromVault:e=>{e&&c.includes(t)&&W(t,null),U(t,e)},onFile:ie.has(t)?()=>void G(t):void 0,problem:k?.field===t?i(k.key):N?.field===t?N.text:void 0,authorized:j.includes(t),onAuthorize:()=>void R(t)},t));return(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)(`section`,{className:`ai-section`,"aria-label":i(`ai.sectionService`),children:[(0,E.jsx)(`h3`,{className:`ai-section-title`,children:i(`ai.sectionService`)}),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[i(`ai.remoteName`),(0,E.jsx)(`input`,{type:`text`,value:e.label,disabled:n,onChange:e=>F({label:e.target.value})})]}),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[i(`ai.remoteProtocol`),(0,E.jsxs)(`select`,{value:e.protocol,"aria-label":i(`ai.remoteProtocol`),disabled:n,onChange:e=>J(e.target.value),children:[(0,E.jsx)(`option`,{value:`openai`,children:i(`ai.remoteProtocolOpenai`)}),(0,E.jsx)(`option`,{value:`anthropic`,children:`Anthropic`}),(0,E.jsx)(`option`,{value:`azure`,children:`Azure OpenAI / AI Foundry`}),(0,E.jsx)(`option`,{value:`bedrock`,children:`Amazon Bedrock`}),(0,E.jsx)(`option`,{value:`vertex`,children:`Google Vertex AI`}),(0,E.jsx)(`option`,{value:`alibaba`,children:`Alibaba Cloud Model Studio`})]})]}),Y?.hint&&(0,E.jsx)(`p`,{className:`ai-server-hint`,children:i(Y.hint)}),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[i(`ai.serverAddress`),(0,E.jsx)(`input`,{type:`url`,value:e.baseUrl,spellCheck:!1,disabled:n,onChange:e=>F({baseUrl:e.target.value.trim()})})]})]}),(0,E.jsxs)(`section`,{className:`ai-section`,"aria-label":i(`ai.sectionSignIn`),children:[(0,E.jsx)(`h3`,{className:`ai-section-title`,children:i(`ai.sectionSignIn`)}),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[i(`ai.remoteAuth`),(0,E.jsxs)(`select`,{value:e.auth.type,"aria-label":i(`ai.remoteAuth`),disabled:n,onChange:e=>q(e.target.value),children:[(0,E.jsx)(`option`,{value:`none`,children:i(`ai.remoteAuthNone`)}),(0,E.jsx)(`option`,{value:`header`,children:i(`ai.remoteAuthHeader`)}),(0,E.jsx)(`option`,{value:`basic`,children:i(`ai.remoteAuthBasic`)}),(0,E.jsx)(`option`,{value:`oauth`,children:i(`ai.remoteAuthOAuth`)}),(0,E.jsx)(`option`,{value:`sigv4`,children:i(`ai.remoteAuthSigv4`)})]})]}),e.auth.type===`header`&&(0,E.jsxs)(`div`,{className:`ai-remote-row`,children:[(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[i(`ai.remoteHeaderName`),(0,E.jsx)(`input`,{type:`text`,value:e.auth.name,spellCheck:!1,disabled:n,onChange:t=>F({auth:{...e.auth,name:t.target.value.trim()}})})]}),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[i(`ai.remoteHeaderPrefix`),(0,E.jsx)(`input`,{type:`text`,value:e.auth.prefix??``,spellCheck:!1,disabled:n,onChange:t=>F({auth:{...e.auth,prefix:t.target.value}})})]})]}),e.auth.type===`basic`&&(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[i(`ai.remoteUsername`),(0,E.jsx)(`input`,{type:`text`,value:e.auth.username,autoComplete:`off`,disabled:n,onChange:e=>F({auth:{type:`basic`,username:e.target.value}})})]}),e.auth.type===`sigv4`&&(0,E.jsxs)(`div`,{className:`ai-remote-row`,children:[(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[i(`ai.awsRegion`),(0,E.jsx)(`input`,{type:`text`,value:e.auth.region,spellCheck:!1,disabled:n,onChange:e=>oe(e.target.value.trim())})]}),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[i(`ai.awsService`),(0,E.jsx)(`input`,{type:`text`,value:e.auth.service??``,placeholder:`bedrock`,spellCheck:!1,disabled:n,onChange:t=>F({auth:{type:`sigv4`,region:e.auth.region,...t.target.value.trim()?{service:t.target.value.trim()}:{}}})})]})]}),e.auth.type===`oauth`&&(0,E.jsx)(D,{connectionId:e.id,target:I,config:e.auth,disabled:n,onChange:e=>F({auth:e})}),$(S(e.auth)),!u&&(0,E.jsx)(`p`,{className:`ai-server-status`,children:i(`ai.remoteNoSecureStorage`)}),(0,E.jsx)(`p`,{className:`ai-server-hint`,children:i(`ai.remoteHint`)})]}),(0,E.jsxs)(`section`,{className:`ai-section`,"aria-label":i(`ai.sectionCertificate`),children:[(0,E.jsx)(`h3`,{className:`ai-section-title`,children:i(`ai.sectionCertificate`)}),(0,E.jsxs)(`label`,{className:`ai-oauth-check`,children:[(0,E.jsx)(`input`,{type:`checkbox`,checked:!!e.clientCertificate,disabled:n,onChange:e=>F({clientCertificate:e.target.checked})}),i(`ai.tlsClientCertificate`)]}),e.clientCertificate&&(0,E.jsx)(`p`,{className:`ai-server-hint`,children:i(`ai.tlsHint`)}),e.clientCertificate&&K&&(0,E.jsxs)(`div`,{className:`ai-server-field`,children:[(0,E.jsx)(`span`,{children:i(`ai.tlsPfx`)}),(0,E.jsx)(`p`,{className:`ai-secret-file`,"data-saved":`true`,children:i(`ai.secretFileSaved`)}),(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,disabled:n||!u,onClick:()=>void W(`tlsPfx`,null),children:i(`ai.remoteSecretForget`)})]}),e.clientCertificate&&$(S({type:`none`},!0).filter(e=>e.startsWith(`tls`)))]}),(0,E.jsxs)(`section`,{className:`ai-section`,"aria-label":i(`ai.sectionModel`),children:[(0,E.jsx)(`h3`,{className:`ai-section-title`,children:i(`ai.sectionModel`)}),ae?(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[i(e.protocol===`bedrock`?`ai.remoteBedrockModel`:e.protocol===`azure`?`ai.remoteDeployment`:`ai.serverModel`),(0,E.jsx)(`input`,{type:`text`,value:e.model??``,list:X?`ai-models-${e.id}`:void 0,spellCheck:!1,disabled:n,onChange:e=>F({model:e.target.value.trim()})}),X&&(0,E.jsx)(`datalist`,{id:`ai-models-${e.id}`,children:Z.map(e=>(0,E.jsx)(`option`,{value:e},e))})]}):(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[i(`ai.serverModel`),(0,E.jsxs)(`select`,{value:e.model??``,"aria-label":i(`ai.serverModel`),disabled:n||Q.length===0,onChange:e=>{F({model:e.target.value}),r()},children:[(0,E.jsx)(`option`,{value:``,disabled:!0,children:i(`ai.serverPickModel`)}),Q.map(e=>(0,E.jsx)(`option`,{value:e,children:e},e))]})]}),(0,E.jsxs)(`div`,{className:`ai-server-check`,children:[(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,disabled:n||h===`checking`,onClick:()=>void B(),children:i(h===`checking`?`ai.serverChecking`:`ai.serverCheck`)}),h&&h!==`checking`&&(0,E.jsx)(`p`,{className:`ai-server-status ai-server-status--${h.state}`,role:`status`,"data-state":h.state,children:h.state===`ok`?h.models.length>0?i(`ai.serverOk`,{count:h.models.length}):i(`ai.serverOkEmpty`):z(i,h.state,e.baseUrl,{status:h.state===`http`?h.status:void 0,problem:h.state===`invalid`?h.problem:h.state===`vault`?h.detail:void 0})})]})]}),(0,E.jsxs)(`section`,{className:`ai-section ai-section--folded`,children:[(0,E.jsx)(`button`,{type:`button`,className:`ai-section-toggle`,"aria-expanded":T,onClick:()=>O(!T),children:i(`ai.sectionAdvanced`)}),T&&(0,E.jsx)(E.Fragment,{children:(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[i(`ai.remoteHeaders`),(0,E.jsx)(`textarea`,{rows:2,value:x,spellCheck:!1,disabled:n,onChange:e=>w(e.target.value),onBlur:()=>F({headers:g(x)})})]})})]})]})}function te({label:e,saved:n,disabled:r,onSave:i,onForget:a,vaults:o,fromVault:s,onFromVault:c,onFile:l,problem:u,authorized:d=!1,onAuthorize:f}){let p=t(),[m,h]=(0,C.useState)(``),g=()=>{m&&(i(m),h(``))},_=s&&o.find(e=>e.id===s.vault),v=_?.vault?.kind===`hashicorp`,y=(0,C.useId)();return(0,E.jsxs)(`div`,{className:`ai-server-field ai-secret`,children:[(0,E.jsxs)(`div`,{className:`ai-secret-head`,children:[!_&&!l?(0,E.jsx)(`label`,{htmlFor:y,children:e}):(0,E.jsx)(`span`,{children:e}),o.length>0&&(0,E.jsxs)(`select`,{className:`ai-secret-source`,value:_?_.id:``,"aria-label":`${e} · ${p(`ai.secretSource`)}`,disabled:r,onChange:e=>c(e.target.value?{vault:e.target.value,name:``}:void 0),children:[(0,E.jsx)(`option`,{value:``,children:p(`ai.secretKeptHere`)}),o.map(e=>(0,E.jsx)(`option`,{value:e.id,children:p(`ai.secretVaultOption`,{vault:e.label||e.baseUrl})},e.id))]})]}),_&&s?(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)(`div`,{className:`ai-remote-row`,children:[(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[p(v?`ai.vaultSecretPath`:`ai.vaultSecretName`),(0,E.jsx)(`input`,{type:`text`,value:s.name,spellCheck:!1,disabled:r,onChange:e=>c({...s,name:e.target.value.trim()})})]}),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[p(v?`ai.vaultSecretField`:`ai.vaultSecretKey`),(0,E.jsx)(`input`,{type:`text`,value:s.key??``,spellCheck:!1,placeholder:v?`value`:``,disabled:r,onChange:e=>c({...s,key:e.target.value.trim()||void 0})})]})]}),(0,E.jsx)(`p`,{className:`ai-server-hint`,children:p(`ai.vaultSecretHint`)}),(0,E.jsx)(`p`,{className:`ai-secret-file`,"data-saved":d||void 0,children:p(d?`ai.vaultAuthorizedYes`:`ai.vaultAuthorizedNo`)}),(0,E.jsx)(`div`,{className:`ai-secret-actions`,children:(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,disabled:r||!s.name,"aria-label":`${p(`ai.vaultAuthorize`)} ${e}`,onClick:f,children:p(`ai.vaultAuthorize`)})})]}):l?(0,E.jsx)(`p`,{className:`ai-secret-file`,"data-saved":n||void 0,children:p(n?`ai.secretFileSaved`:`ai.secretNoFile`)}):(0,E.jsx)(`input`,{id:y,type:`password`,value:m,autoComplete:`off`,placeholder:n?p(`ai.remoteSecretSaved`):``,disabled:r,"data-saved":n||void 0,onChange:e=>h(e.target.value),onBlur:g,onKeyDown:e=>{e.key===`Enter`&&g()}}),!_&&(l||n)&&(0,E.jsxs)(`div`,{className:`ai-secret-actions`,children:[l&&(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,disabled:r,"aria-label":`${p(`ai.secretFromFile`)} ${e}`,onClick:l,children:p(`ai.secretFromFile`)}),n&&(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,disabled:r,onClick:a,children:p(`ai.remoteSecretForget`)})]}),u&&(0,E.jsx)(`p`,{className:`ai-server-status`,role:`status`,children:u})]})}var ne={key:`ai.remoteKey`,password:`ai.remotePassword`,clientSecret:`ai.oauthClientSecret`,privateKey:`ai.oauthPrivateKey`,tlsCert:`ai.tlsCert`,tlsKey:`ai.tlsKey`,tlsPassphrase:`ai.tlsPassphrase`,tlsCa:`ai.tlsCa`,accessKeyId:`ai.awsAccessKeyId`,secretAccessKey:`ai.awsSecretAccessKey`,sessionToken:`ai.awsSessionToken`},re={"too-large":`ai.fileTooLarge`,empty:`ai.fileEmpty`,"not-certificate":`ai.fileNotCertificate`,"not-key":`ai.fileNotKey`},ie=new Set([`tlsCert`,`tlsKey`,`tlsCa`,`privateKey`]);function W(){let e=i(e=>e.aiTurns),n=i(e=>e.aiModel),r=i(e=>e.aiModelStatus),a=i(e=>e.setAiModel),o=i(e=>e.aiGenerate),s=i(e=>e.aiCancel),c=i(e=>e.aiUndoTurn),l=i(e=>e.aiClear),u=d(e=>e.engine),p=d(e=>e.setEngine),m=d(e=>e.server),g=d(e=>e.connections.find(t=>t.id===e.connectionId)??null),[v,y]=(0,C.useState)(``),b=t(),x=f(),S=(e[e.length-1]?.state??null)===`working`,w=u===`server`,D=u===`remote`,O=u===`browser`,k=w?m.model!==``:!D||!!g?.model,A=[..._()?[`browser`]:[],`server`,...h()?[`remote`]:[]],j=(0,C.useRef)(null),M=()=>{let e=j.current?.querySelector(`:scope > details.ai-server`);e&&(e.open=!1,e.querySelector(`summary`)?.focus())},N=i(e=>e.kind),P=i(e=>e.nodes),F=(0,C.useMemo)(()=>T(N,P),[N,P]),I=(0,C.useRef)(null),L=()=>{v.trim()&&k&&(o(v),y(``))};return(0,E.jsxs)(`div`,{className:`ai-panel ai-chat`,children:[(0,E.jsxs)(`div`,{className:`ai-header`,children:[A.length>1&&(0,E.jsxs)(`label`,{className:`ai-model`,children:[b(`ai.engine`),(0,E.jsxs)(`select`,{value:u,"aria-label":b(`ai.engine`),disabled:S,onChange:e=>p(e.target.value),children:[A.includes(`browser`)&&(0,E.jsx)(`option`,{value:`browser`,children:b(`ai.engineBrowser`)}),(0,E.jsx)(`option`,{value:`server`,children:b(`ai.engineServer`)}),A.includes(`remote`)&&(0,E.jsx)(`option`,{value:`remote`,children:b(`ai.engineRemote`)})]})]}),O&&(0,E.jsxs)(`label`,{className:`ai-model`,children:[b(`ai.model`),(0,E.jsxs)(`select`,{value:n,"aria-label":b(`ai.model`),disabled:S,onChange:e=>a(e.target.value),children:[(0,E.jsx)(`option`,{value:`qwen2.5-coder-0.5b`,children:b(`ai.modelSmall`)}),(0,E.jsx)(`option`,{value:`qwen2.5-coder-1.5b`,children:b(`ai.modelLarge`)})]})]}),(0,E.jsx)(`button`,{type:`button`,className:`editor-action ai-new`,title:b(`ai.newHint`),disabled:S||e.length===0,onClick:l,children:b(`ai.new`)})]}),(w||D)&&(0,E.jsxs)(`div`,{className:`ai-settings`,ref:j,children:[w&&(0,E.jsx)(J,{disabled:S}),D&&(0,E.jsx)(B,{disabled:S}),(0,E.jsx)(`button`,{type:`button`,className:`editor-action ai-settings-done`,onClick:M,children:b(`ai.settingsDone`)})]}),O&&x===`local`&&r.state!==`idle`&&(0,E.jsxs)(`div`,{className:`ai-model-status ai-model-status--${r.state}`,role:`status`,"data-device":r.state===`ready`?r.device:void 0,children:[r.state===`downloading`&&(0,E.jsxs)(`span`,{children:[b(`ai.downloading`,{percent:r.percent===null?`…`:String(r.percent)}),r.file?` — ${r.file}`:``]}),r.state===`warming`&&(0,E.jsx)(`span`,{children:b(`ai.warming`)}),r.state===`ready`&&(0,E.jsx)(`span`,{children:b(`ai.ready`)}),r.state===`error`&&(0,E.jsx)(`span`,{className:`ai-model-error`,children:b(`ai.localError`,{error:r.error})})]}),(0,E.jsxs)(`div`,{className:`ai-thread`,tabIndex:0,role:`region`,"aria-label":b(`ai.thread`),children:[e.length===0&&(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(`p`,{className:`ai-seed`,children:b(`ai.seed`)}),(0,E.jsxs)(`div`,{className:`ai-suggestions`,role:`group`,"aria-label":b(`ai.suggestTitle`),children:[(0,E.jsx)(`p`,{className:`ai-suggestions-title`,children:b(`ai.suggestTitle`)}),F.map(e=>{let t=b(e.key,e.params);return(0,E.jsx)(`button`,{type:`button`,className:`ai-suggestion`,disabled:S||!k,onClick:()=>{y(t),I.current?.focus()},children:t},t)})]})]}),e.map(e=>(0,E.jsxs)(`div`,{className:`ai-turn`,children:[(0,E.jsx)(`div`,{className:`ai-bubble ai-user`,children:e.request}),(0,E.jsxs)(`div`,{className:`ai-bubble ai-assistant ${e.state}`,children:[e.state===`working`&&(0,E.jsxs)(`p`,{className:`ai-status`,role:`status`,children:[(0,E.jsx)(`span`,{className:`ai-spinner`,"aria-hidden":`true`}),e.attempts>1?b(`ai.retrying`):b(`ai.generating`)]}),e.state===`error`&&(0,E.jsx)(`p`,{className:`ai-error`,children:!e.reason||e.reason===`http`?b(`ai.failed`,{error:e.error??``}):D?z(b,e.reason,g?.baseUrl??``,{problem:e.error??void 0}):R(b,e.reason,m.baseUrl)}),e.state===`done`&&(0,E.jsx)(K,{changes:e.changes}),e.state===`done`&&e.codeBefore!==null&&(0,E.jsx)(`div`,{className:`ai-actions`,children:(0,E.jsx)(`button`,{type:`button`,title:b(`ai.undoTurnHint`),onClick:()=>c(e.id),children:b(`ai.undoTurn`)})})]})]},e.id))]}),(0,E.jsxs)(`div`,{className:`ai-composer`,children:[(0,E.jsx)(`textarea`,{ref:I,className:`ai-request`,rows:2,value:v,placeholder:b(k?`ai.placeholder`:D?`ai.remoteNeedsModel`:`ai.serverNeedsModel`),disabled:S||!k,onChange:e=>y(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&!e.nativeEvent.isComposing&&(e.preventDefault(),L())}}),S?(0,E.jsx)(`button`,{type:`button`,className:`primary ai-send`,title:b(`ai.cancelHint`),onClick:s,children:b(`ai.cancel`)}):(0,E.jsx)(`button`,{type:`button`,className:`primary ai-send`,title:b(`ai.sendHint`),disabled:!v.trim()||!k,onClick:L,children:b(`ai.send`)})]})]})}var G=8;function K({changes:e}){let n=t(),r=i(e=>e.aiShowChange);if(e===void 0)return(0,E.jsx)(`p`,{className:`ai-applied`,role:`status`,children:n(`ai.applied`)});if(e===null||!o(e))return(0,E.jsx)(`p`,{className:`ai-applied`,role:`status`,children:n(e===null?`ai.changesRedrawn`:`ai.changesNone`)});let a=new Set(e.removedNodes.map(e=>e.id)),s=e=>e.label?`${e.from} → ${e.to} (${e.label})`:`${e.from} → ${e.to}`,c=[...e.addedNodes.map(e=>({kind:`added`,text:e.label,target:{node:e.id}})),...e.addedEdges.map(e=>({kind:`added`,text:s(e),target:{source:e.source,target:e.target}})),...e.renamedNodes.map(e=>({kind:`renamed`,text:`${e.was} → ${e.label}`,target:{node:e.id}})),...e.removedNodes.map(e=>({kind:`removed`,text:e.label})),...e.removedEdges.filter(e=>!a.has(e.source)&&!a.has(e.target)).map(e=>({kind:`removed`,text:s(e)}))],l={added:`+`,renamed:`✎`,removed:`−`},u={added:n(`ai.changeAdded`),renamed:n(`ai.changeRenamed`),removed:n(`ai.changeRemoved`)};return(0,E.jsxs)(`div`,{className:`ai-changes`,role:`status`,children:[(0,E.jsx)(`p`,{className:`ai-changes-title`,children:n(`ai.changesTitle`)}),(0,E.jsx)(`ul`,{children:c.slice(0,G).map((e,t)=>(0,E.jsxs)(`li`,{className:`ai-change ai-change--${e.kind}`,children:[(0,E.jsx)(`span`,{className:`ai-change-mark`,"aria-hidden":`true`,children:l[e.kind]}),(0,E.jsxs)(`span`,{className:`visually-hidden`,children:[u[e.kind],`: `]}),e.target?(0,E.jsx)(`button`,{type:`button`,className:`ai-change-link`,title:n(`ai.changeShow`),onClick:()=>r(e.target),children:e.text}):(0,E.jsx)(`span`,{className:`ai-change-text`,children:e.text})]},t))}),c.length>G&&(0,E.jsx)(`p`,{className:`ai-changes-more`,children:n(`ai.changesMore`,{count:c.length-G})})]})}async function q(e){let t=m();if(!t||!c(e.baseUrl))return u(e);await y();let n=await t.probe(x);return n.state===`invalid`||n.state===`vault`?{state:`not-local`}:n}function J({disabled:e}){let n=d(e=>e.server),r=d(e=>e.setServer),[i,a]=(0,C.useState)(n.baseUrl),[o,c]=(0,C.useState)(`checking`),u=t(),f=async e=>{c(`checking`),c(await q({...d.getState().server,baseUrl:e}))};(0,C.useEffect)(()=>{let e=!0;return q(d.getState().server).then(t=>{e&&c(t)}),()=>{e=!1}},[]);let p=e=>{let t=e.trim();a(t),t!==n.baseUrl&&(r({baseUrl:t,model:``}),f(t))},m=o!==`checking`&&o.state===`ok`?o.models:[],h=n.model&&!m.includes(n.model)?[n.model,...m]:m,g=o!==`checking`&&o.state===`ok`?o.remote:[],_=e=>g.includes(e)||/[-:]cloud$/i.test(e);return(0,E.jsxs)(`details`,{className:`ai-server`,open:!n.model,children:[(0,E.jsx)(`summary`,{children:u(`ai.serverSummary`,{model:n.model||u(`ai.serverNoModel`)})}),(0,E.jsx)(`p`,{className:`ai-server-hint`,children:u(`ai.serverHint`)}),(0,E.jsx)(`div`,{className:`ai-server-presets`,children:Object.keys(s).map(t=>(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,"aria-pressed":l(n.baseUrl)===t,disabled:e,onClick:()=>p(s[t].baseUrl),children:s[t].label},t))}),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[u(`ai.serverAddress`),(0,E.jsx)(`input`,{type:`url`,value:i,spellCheck:!1,disabled:e,onChange:e=>a(e.target.value),onBlur:e=>p(e.target.value),onKeyDown:e=>{e.key===`Enter`&&p(e.currentTarget.value)}})]}),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[u(`ai.serverModel`),(0,E.jsxs)(`select`,{value:n.model,"aria-label":u(`ai.serverModel`),disabled:e||h.length===0,onChange:e=>r({model:e.target.value}),children:[(0,E.jsx)(`option`,{value:``,disabled:!0,children:u(`ai.serverPickModel`)}),h.map(e=>(0,E.jsx)(`option`,{value:e,children:_(e)?u(`ai.serverCloudTag`,{model:e}):e},e))]})]}),n.model&&_(n.model)&&(0,E.jsx)(`p`,{className:`ai-server-status ai-server-cloud`,role:`note`,children:u(`ai.serverCloudWarning`)}),(0,E.jsxs)(`div`,{className:`ai-server-check`,children:[(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,disabled:e||o===`checking`,onClick:()=>void f(n.baseUrl),children:u(o===`checking`?`ai.serverChecking`:`ai.serverCheck`)}),o!==`checking`&&(0,E.jsx)(`p`,{className:`ai-server-status ai-server-status--${o.state}`,role:`status`,"data-state":o.state,children:o.state===`ok`?o.models.length>0?u(`ai.serverOk`,{count:o.models.length}):u(`ai.serverOkEmpty`):R(u,o.state,n.baseUrl,o.state===`http`?o.status:void 0)})]})]})}export{W as AiPanel};
|
|
1
|
+
import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{a as t,f as n,i as r}from"./i18n-DogkFT65.js";import{C as i,i as a}from"./index-C_wVJZMB.js";import{hasChanges as o}from"./changes-DWLvt0qb.js";import{SERVER_PRESETS as s,isLocalUrl as c,presetOf as l,probeServer as u}from"./server-BX-Rqf3U.js";import{a as d,aiMode as f,c as p,d as m,i as h,l as g,n as _,o as v,r as y,s as b,t as x,u as S}from"./provider-CglKTnl2.js";var C=e(n(),1);function w(e){return e.filter(e=>e.type!==`group`&&e.type!==`note`&&e.type!==`junction`).map(e=>{let t=e.data;return{label:typeof t.label==`string`?t.label.trim():``,shape:typeof t.shape==`string`?t.shape:void 0}}).filter(e=>e.label&&e.label.length<=40)}function T(e,t){let n=w(t);if(n.length===0)return[{key:`ai.suggestStartLogin`},{key:`ai.suggestStartShop`},{key:`ai.suggestStartOrder`}];let r=[];if(e===`flowchart`){let e=n.find(e=>e.shape===`cylinder`&&!/cache/i.test(e.label)),t=n.find(e=>e.shape===`square`||e.shape===`round`)??n[0],i=n.find(e=>e.shape===`diamond`);e&&r.push({key:`ai.suggestCache`,params:{node:e.label}}),r.push({key:`ai.suggestRetry`,params:{node:t.label}}),i&&r.push({key:`ai.suggestOutcome`,params:{node:i.label}}),r.push({key:`ai.suggestColour`,params:{node:(n.at(-1)??t).label}})}else r.push({key:`ai.suggestConnect`,params:{node:n[0].label}}),r.push({key:`ai.suggestRemove`,params:{node:(n.at(-1)??n[0]).label}});return r.slice(0,3)}var E=i();function D({connectionId:e,target:n,config:i,disabled:a,onChange:o}){let s=t(),c=r(e=>e.locale),l=m(),[u,d]=(0,C.useState)({signedIn:!1}),[f,p]=(0,C.useState)(!1),[h,g]=(0,C.useState)(null),[_,v]=(0,C.useState)(null),b=e=>o({...i,...e}),x=i.flow===`jwt_bearer`;if((0,C.useEffect)(()=>{if(!l)return;let t=!0;y().then(()=>l.authStatus(e)).then(e=>t&&d(e));let n=l.onEvent(n=>{if(n.type===`ai:auth`&&n.connectionId===e){if(n.state===`device-code`){g({userCode:n.userCode,uri:n.verificationUriComplete??n.verificationUri});return}g(null),p(!1),v(n.state===`error`?n.detail??``:null),l.authStatus(e).then(e=>t&&d(e))}});return()=>{t=!1,n()}},[l,e,n]),!l)return null;let S=async()=>{p(!0),v(null),await y(),await l.signIn(e)},w=async()=>{await y(),await l.signOut(e),d(await l.authStatus(e))},T=u.expiresAt?new Date(u.expiresAt).toLocaleTimeString(c,{hour:`2-digit`,minute:`2-digit`}):null;return(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[s(`ai.oauthFlow`),(0,E.jsxs)(`select`,{value:i.flow,"aria-label":s(`ai.oauthFlow`),disabled:a||f,onChange:e=>b({flow:e.target.value}),children:[(0,E.jsx)(`option`,{value:`authorization_code`,children:s(`ai.oauthFlowBrowser`)}),(0,E.jsx)(`option`,{value:`device_code`,children:s(`ai.oauthFlowDevice`)}),(0,E.jsx)(`option`,{value:`client_credentials`,children:s(`ai.oauthFlowMachine`)}),(0,E.jsx)(`option`,{value:`jwt_bearer`,children:s(`ai.oauthFlowAssertion`)})]})]}),x&&(0,E.jsx)(`p`,{className:`ai-server-hint`,children:s(`ai.oauthAssertionHint`)}),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[s(`ai.oauthIssuer`),(0,E.jsx)(`input`,{type:`url`,value:i.issuer??``,placeholder:s(`ai.oauthIssuerHint`),spellCheck:!1,disabled:a||f,onChange:e=>b({issuer:e.target.value.trim()||void 0})})]}),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[s(x?`ai.oauthAssertionIssuer`:`ai.oauthClientId`),(0,E.jsx)(`input`,{type:`text`,value:i.clientId??``,spellCheck:!1,disabled:a||f,onChange:e=>b({clientId:e.target.value.trim()||void 0})})]}),i.flow!==`client_credentials`&&!x&&(0,E.jsxs)(`label`,{className:`ai-oauth-check`,children:[(0,E.jsx)(`input`,{type:`checkbox`,checked:!!i.register,disabled:a||f,onChange:e=>b({register:e.target.checked})}),s(`ai.oauthRegister`)]}),!x&&(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[s(`ai.oauthClientAuth`),(0,E.jsxs)(`select`,{value:i.clientAuth??``,"aria-label":s(`ai.oauthClientAuth`),disabled:a||f,onChange:e=>b({clientAuth:e.target.value||void 0}),children:[(0,E.jsx)(`option`,{value:``,children:s(`ai.oauthClientAuthAuto`)}),(0,E.jsx)(`option`,{value:`client_secret_basic`,children:s(`ai.oauthClientAuthBasic`)}),(0,E.jsx)(`option`,{value:`client_secret_post`,children:s(`ai.oauthClientAuthPost`)}),(0,E.jsx)(`option`,{value:`private_key_jwt`,children:s(`ai.oauthClientAuthKey`)}),(0,E.jsx)(`option`,{value:`tls_client_auth`,children:s(`ai.oauthClientAuthTls`)})]})]}),!x&&(0,E.jsxs)(`label`,{className:`ai-oauth-check`,children:[(0,E.jsx)(`input`,{type:`checkbox`,checked:!!i.dpop,disabled:a||f,onChange:e=>b({dpop:e.target.checked})}),s(`ai.oauthDpop`)]}),x&&(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[s(`ai.oauthSubject`),(0,E.jsx)(`input`,{type:`text`,value:i.subject??``,spellCheck:!1,disabled:a||f,onChange:e=>b({subject:e.target.value.trim()||void 0})})]}),(i.clientAuth===`private_key_jwt`||x)&&(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[s(`ai.oauthKeyId`),(0,E.jsx)(`input`,{type:`text`,value:i.keyId??``,spellCheck:!1,disabled:a||f,onChange:e=>b({keyId:e.target.value.trim()||void 0})})]}),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[s(`ai.oauthScopes`),(0,E.jsx)(`input`,{type:`text`,value:i.scopes??``,spellCheck:!1,disabled:a||f,onChange:e=>b({scopes:e.target.value})})]}),(0,E.jsxs)(`div`,{className:`ai-remote-row`,children:[(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[s(`ai.oauthResource`),(0,E.jsx)(`input`,{type:`text`,value:i.resource??``,spellCheck:!1,disabled:a||f,onChange:e=>b({resource:e.target.value.trim()||void 0})})]}),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[s(`ai.oauthAudience`),(0,E.jsx)(`input`,{type:`text`,value:i.audience??``,spellCheck:!1,disabled:a||f,onChange:e=>b({audience:e.target.value.trim()||void 0})})]})]}),(0,E.jsxs)(`div`,{className:`ai-server-check`,children:[f?(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,onClick:()=>{l.cancelSignIn(e),p(!1),g(null)},children:s(`ai.oauthCancel`)}):u.signedIn?(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,disabled:a,onClick:()=>void w(),children:s(`ai.oauthSignOut`)}):(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,disabled:a,onClick:()=>void S(),children:s(`ai.oauthSignIn`)}),(0,E.jsx)(`p`,{className:`ai-server-status${u.signedIn?` ai-server-status--ok`:f||_===null?` ai-server-status--note`:``}`,role:`status`,"data-auth":f?`busy`:u.signedIn?`signed-in`:`signed-out`,children:f?h?null:s(`ai.oauthWaiting`):u.signedIn?T?s(`ai.oauthSignedInUntil`,{time:T}):s(`ai.oauthSignedIn`):_===null?s(`ai.oauthSignedOut`):s(`ai.oauthFailed`,{error:_})}),f&&h&&(0,E.jsxs)(`div`,{className:`ai-oauth-device`,role:`status`,children:[(0,E.jsxs)(`p`,{children:[s(`ai.oauthDeviceCode`),` `,(0,E.jsx)(`a`,{href:h.uri,target:`_blank`,rel:`noreferrer`,children:h.uri})]}),(0,E.jsx)(`p`,{className:`ai-oauth-code`,children:h.userCode})]})]})]})}var O=[`azure-kv`,`aws-sm`,`gcp-sm`,`alibaba-kms`,`hashicorp`],k={azureName:/^[0-9A-Za-z-]{1,127}$/,azureVault:/^https:\/\/[a-z0-9-]{3,24}\.vault\.(azure\.net|azure\.cn|usgovcloudapi\.net)\/?$/,awsName:/^[A-Za-z0-9/_+=.@:-]{1,2048}$/,awsRegion:/^[a-z]{2}(-[a-z]+)+-\d{1,2}$/,gcpName:/^[A-Za-z0-9_-]{1,255}$/,gcpProject:/^([a-z][a-z0-9-]{4,28}[a-z0-9]|\d{1,20})$/,alibabaName:/^[A-Za-z0-9_/+=.@:-]{1,192}$/,alibabaRegion:/^[a-z]{2}-[a-z0-9-]{2,30}$/,hashicorpPath:/^(?!.*\.\.)[A-Za-z0-9_.-]+(\/[A-Za-z0-9_.-]+)*$/,hashicorpMount:/^[A-Za-z0-9_.-]{1,64}$/,namespace:/^[A-Za-z0-9_-]+(\/[A-Za-z0-9_-]+)*$/,word:/^[A-Za-z0-9_.-]{1,128}$/};function A(e){let t=e.vault;if(e.protocol!==`vault`||!t||!O.includes(t.kind)||t.via!==`cli`&&t.via!==`sign-in`)return`vault`;if(t.profile!==void 0&&t.profile!==``&&!k.word.test(t.profile))return`profile`;switch(t.kind){case`azure-kv`:return k.azureVault.test(e.baseUrl)?null:`address`;case`aws-sm`:return k.awsRegion.test(t.region??``)?null:`region`;case`gcp-sm`:return k.gcpProject.test(t.project??``)?null:`project`;case`alibaba-kms`:return k.alibabaRegion.test(t.region??``)?null:`region`;case`hashicorp`:{let n;try{n=new URL(e.baseUrl)}catch{return`address`}return n.protocol!==`https:`&&![`localhost`,`127.0.0.1`].includes(n.hostname)||n.username||n.password||n.search||n.hash?`address`:t.mount&&!k.hashicorpMount.test(t.mount)?`mount`:t.namespace&&!k.namespace.test(t.namespace)?`namespace`:null}}}var j={"azure-kv":`Azure Key Vault`,"aws-sm":`AWS Secrets Manager`,"gcp-sm":`Google Secret Manager`,"alibaba-kms":`Alibaba Cloud KMS`,hashicorp:`HashiCorp Vault / OpenBao`},M={"azure-kv":{command:`az`,login:`az login`},"aws-sm":{command:`aws`,login:`aws sso login`},"gcp-sm":{command:`gcloud`,login:`gcloud auth login`},"alibaba-kms":{command:`aliyun`,login:`aliyun configure`},hashicorp:{command:`vault`,login:`vault login`}},N={"azure-kv":`https://<name>.vault.azure.net`,hashicorp:`https://vault.example.com:8200`},P={address:`ai.vaultProblemAddress`,region:`ai.remoteProblemRegion`,project:`ai.vaultProblemProject`,profile:`ai.vaultProblemField`,mount:`ai.vaultProblemField`,namespace:`ai.vaultProblemField`};function F({disabled:e}){let n=t(),r=d(e=>e.vaults),i=d(e=>e.addVault),a=d(e=>e.removeVault),[o,s]=(0,C.useState)(null),c=r.find(e=>e.id===o)??r[0]??null;return(0,E.jsxs)(`details`,{className:`ai-vaults`,children:[(0,E.jsx)(`summary`,{children:n(`ai.vaults`,{count:r.length})}),(0,E.jsx)(`p`,{className:`ai-server-hint`,children:n(`ai.vaultsHint`)}),(0,E.jsxs)(`div`,{className:`ai-server-presets`,children:[r.length>0&&(0,E.jsxs)(`label`,{className:`ai-server-field ai-remote-pick`,children:[n(`ai.vaultPick`),(0,E.jsx)(`select`,{value:c?.id??``,"aria-label":n(`ai.vaultPick`),disabled:e,onChange:e=>s(e.target.value),children:r.map(e=>(0,E.jsx)(`option`,{value:e.id,children:e.label||j[e.vault?.kind??`azure-kv`]},e.id))})]}),(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,disabled:e,onClick:()=>s(i(n(`ai.vaultNewName`),`azure-kv`)),children:n(`ai.vaultAdd`)}),c&&(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,disabled:e,onClick:()=>{a(c.id),s(null)},children:n(`ai.vaultRemove`)})]}),c&&(0,E.jsx)(I,{vault:c,disabled:e},c.id)]})}function I({vault:e,disabled:n}){let r=t(),i=d(e=>e.updateVault),a=e.vault??{kind:`azure-kv`,via:`cli`},o=t=>i(e.id,t),s=e=>o({vault:{...a,...e}}),c=e.baseUrl!==`https://`||[a.region,a.project,a.profile,a.mount,a.namespace].some(Boolean)?A(e):null,l=a.kind===`azure-kv`||a.kind===`hashicorp`,u=a.kind===`aws-sm`||a.kind===`alibaba-kms`,f=(e,t,i,a)=>(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[r(e),(0,E.jsx)(`input`,{type:`text`,value:t,spellCheck:!1,placeholder:a,disabled:n,onChange:e=>i(e.target.value.trim())})]});return(0,E.jsxs)(E.Fragment,{children:[f(`ai.remoteName`,e.label,e=>o({label:e})),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[r(`ai.vaultKind`),(0,E.jsx)(`select`,{value:a.kind,"aria-label":r(`ai.vaultKind`),disabled:n,onChange:e=>s({kind:e.target.value}),children:O.map(e=>(0,E.jsx)(`option`,{value:e,children:j[e]},e))})]}),l&&f(`ai.serverAddress`,e.baseUrl===`https://`?``:e.baseUrl,e=>o({baseUrl:e||`https://`}),N[a.kind]),u&&f(`ai.awsRegion`,a.region??``,e=>s({region:e}),a.kind===`aws-sm`?`eu-west-1`:`ap-southeast-1`),a.kind===`gcp-sm`&&f(`ai.vaultProject`,a.project??``,e=>s({project:e})),a.kind===`hashicorp`&&(0,E.jsxs)(`div`,{className:`ai-remote-row`,children:[f(`ai.vaultMount`,a.mount??``,e=>s({mount:e}),`secret`),f(`ai.vaultNamespace`,a.namespace??``,e=>s({namespace:e}))]}),(a.kind===`aws-sm`||a.kind===`alibaba-kms`)&&f(`ai.vaultProfile`,a.profile??``,e=>s({profile:e})),(0,E.jsx)(`p`,{className:`ai-server-hint`,children:r(`ai.vaultCliHint`,M[a.kind])}),c&&P[c]&&(0,E.jsx)(`p`,{className:`ai-server-status`,role:`status`,children:r(P[c])})]})}function L(){let e=globalThis.location?.origin??``;return e&&e!==`null`?e:`file://*`}function R(e,t,n,r){let i=l(n),a=i?s[i].label:e(`ai.serverGeneric`);switch(t){case`blocked`:return i===`ollama`?e(`ai.serverBlockedOllama`,{origin:L()}):i===`lmstudio`?e(`ai.serverBlockedLmStudio`):e(`ai.serverBlocked`,{origin:L()});case`down`:return e(`ai.serverDown`,{url:n,server:a});case`not-local`:return e(`ai.serverNotLocal`);case`no-model`:return e(`ai.serverNeedsModel`);default:return e(`ai.serverHttp`,{status:r??`?`})}}function z(e,t,n,r){switch(t){case`not-local`:return e(`ai.remoteNotHttps`);case`down`:case`network`:return e(`ai.remoteDown`,{url:n});case`no-model`:return e(`ai.remoteNeedsModel`);case`vault`:return r?.problem===`not-authorized`?e(`ai.vaultNotAuthorized`):r?.problem===`denied`?e(`ai.vaultDenied`):e(`ai.remoteVaultFailed`,{detail:r?.problem??``});case`invalid`:switch(r?.problem){case`protocol`:return e(`ai.remoteProblemProtocol`);case`header-name`:return e(`ai.remoteProblemHeaderName`);case`username`:return e(`ai.remoteProblemUsername`);case`extra-header`:return e(`ai.remoteProblemExtraHeader`);case`flow`:return e(`ai.remoteProblemFlow`);case`issuer`:return e(`ai.remoteProblemIssuer`);case`client`:return e(`ai.remoteProblemClient`);case`tls-https`:return e(`ai.remoteProblemTlsHttps`);case`tls-client-auth`:return e(`ai.remoteProblemTlsClientAuth`);case`region`:return e(`ai.remoteProblemRegion`);case`service`:return e(`ai.remoteProblemService`);default:return e(`ai.remoteProblemUnknown`)}default:return r?.status===401||r?.status===403?e(`ai.remoteUnauthorized`,{status:r.status}):e(`ai.serverHttp`,{status:r?.status??`?`})}}function B({disabled:e}){let n=t(),r=d(e=>e.connections),i=d(e=>e.connectionId),a=d(e=>e.addConnection),o=d(e=>e.removeConnection),s=d(e=>e.selectConnection),c=r.find(e=>e.id===i)??null,[l,u]=(0,C.useState)({id:i,open:!c?.model});l.id!==i&&u({id:i,open:!c?.model});let f=l.id===i?l.open:!c?.model;return(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)(`details`,{className:`ai-server`,open:f,onToggle:e=>{let t=e.currentTarget.open;t!==f&&u({id:i,open:t})},children:[(0,E.jsx)(`summary`,{children:n(`ai.remoteSummary`,{model:c?`${c.label} · ${c.model||n(`ai.serverNoModel`)}`:n(`ai.serverNoModel`)})}),(0,E.jsxs)(`div`,{className:`ai-server-presets`,children:[r.length>0&&(0,E.jsxs)(`label`,{className:`ai-server-field ai-remote-pick`,children:[n(`ai.remoteService`),(0,E.jsx)(`select`,{value:i??``,"aria-label":n(`ai.remoteService`),disabled:e,onChange:e=>s(e.target.value),children:r.map(e=>(0,E.jsx)(`option`,{value:e.id,children:e.label||e.baseUrl},e.id))})]}),(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,disabled:e,onClick:()=>a(n(`ai.remoteNewName`)),children:n(`ai.remoteAdd`)}),c&&(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,disabled:e,onClick:()=>o(c.id),children:n(`ai.remoteRemove`)})]}),c?(0,E.jsx)(U,{connection:c,disabled:e,onPicked:()=>u({id:c.id,open:!1})},c.id):(0,E.jsx)(`p`,{className:`ai-server-hint`,children:n(`ai.remoteNone`)})]}),(0,E.jsx)(F,{disabled:e})]})}var V={openai:{baseUrl:``,auth:{type:`header`,name:`Authorization`,prefix:`Bearer `}},anthropic:{baseUrl:`https://api.anthropic.com/v1`,auth:{type:`header`,name:`x-api-key`},hint:`ai.remoteAnthropicHint`},azure:{baseUrl:``,auth:{type:`header`,name:`api-key`},hint:`ai.remoteAzureHint`},bedrock:{baseUrl:H(`us-east-1`),auth:{type:`sigv4`,region:`us-east-1`},hint:`ai.remoteBedrockHint`},vertex:{baseUrl:`https://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/endpoints/openapi`,auth:{type:`oauth`,flow:`jwt_bearer`,issuer:`https://accounts.google.com`,scopes:`https://www.googleapis.com/auth/cloud-platform`},hint:`ai.remoteVertexHint`},alibaba:{baseUrl:`https://dashscope-intl.aliyuncs.com/compatible-mode/v1`,auth:{type:`header`,name:`Authorization`,prefix:`Bearer `},hint:`ai.remoteAlibabaHint`}};function H(e){return`https://bedrock-runtime.${e}.amazonaws.com`}function ee(e){try{let t=new URL(e).hostname;return/^bedrock-runtime(?:-fips)?\.([a-z0-9-]+)\.amazonaws\.com$/.exec(t)?.[1]??null}catch{return null}}function U({connection:e,disabled:n,onPicked:r}){let i=t(),a=d(e=>e.updateConnection),o=d(e=>e.vaults),s=m(),[c,l]=(0,C.useState)([]),[u,f]=(0,C.useState)(!0),[h,_]=(0,C.useState)(null),[x,w]=(0,C.useState)(()=>p(e.headers)),[T,O]=(0,C.useState)(()=>Object.keys(e.headers??{}).length>0),[k,A]=(0,C.useState)(null),[j,M]=(0,C.useState)([]),[N,P]=(0,C.useState)(null),F=t=>a(e.id,t),I=b(e);(0,C.useEffect)(()=>{if(!s)return;let t=!0;return y().then(()=>Promise.all([s.secretFields(e.id),s.canKeepSecrets()])).then(([e,n])=>{t&&(l(e),f(n))}),()=>{t=!1}},[s,e.id,I]);let L=JSON.stringify([e.fromVault??null,I,o]);if((0,C.useEffect)(()=>{if(!s)return;let t=!0;return y().then(()=>s.vaultAuthorized(e.id)).then(e=>t&&M(e)),()=>{t=!1}},[s,e.id,L]),!s)return null;let R=async t=>{P(null),await y();let n=await s.authorizeVaultSecret(e.id,t);`problem`in n&&P({field:t,text:n.problem===`denied`?i(`ai.vaultDenied`):n.problem===`invalid`?i(`ai.vaultIncompleteRef`):i(`ai.remoteVaultFailed`,{detail:n.problem})}),M(await s.vaultAuthorized(e.id))},B=async()=>{_(`checking`),await y(),_(await s.probe(e.id))},U=(t,n)=>{let r=Object.fromEntries(Object.entries(e.fromVault??{}).filter(([e])=>e!==t)),i=n?{...r,[t]:n}:r;F({fromVault:Object.keys(i).length?i:void 0})},W=async(t,n)=>{await y(),await s.setSecret(e.id,t,n),l(await s.secretFields(e.id))},G=async t=>{A(null),await y();let n=await s.importSecretFile(e.id,t);`problem`in n&&A({field:t,key:re[n.problem]??`ai.fileUnreadable`}),l(await s.secretFields(e.id))},K=c.includes(`tlsPfx`),q=t=>{let n=t===`header`?{type:t,name:`Authorization`,prefix:`Bearer `}:t===`basic`?{type:t,username:``}:t===`oauth`?{type:t,flow:`authorization_code`,register:!0,scopes:``}:t===`sigv4`?{type:t,region:ee(e.baseUrl)??`us-east-1`}:{type:`none`};F({auth:n})},J=t=>{let n=V[e.protocol],r=V[t],i={protocol:t,model:``};(e.baseUrl===`https://`||e.baseUrl===``||e.baseUrl===n?.baseUrl)&&(i.baseUrl=r.baseUrl||`https://`);let a=e.auth;(a.type===`none`||n&&JSON.stringify(a)===JSON.stringify(n.auth))&&(i.auth=r.auth),_(null),F(i)},Y=V[e.protocol],ae=[`azure`,`bedrock`,`vertex`,`alibaba`].includes(e.protocol),X=e.protocol===`bedrock`||e.protocol===`alibaba`,oe=t=>{let n=e.auth.type===`sigv4`?e.auth:null,r={auth:{type:`sigv4`,region:t,...n?.service?{service:n.service}:{}}};n&&e.baseUrl===H(n.region)&&/^[a-z0-9-]+$/.test(t)&&(r.baseUrl=H(t)),F(r)},Z=h&&h!==`checking`&&h.state===`ok`?h.models:[],Q=e.model&&!Z.includes(e.model)?[e.model,...Z]:Z,$=t=>t.filter(e=>v.has(e)).filter(e=>!K||e!==`tlsCert`&&e!==`tlsKey`).map(t=>(0,E.jsx)(te,{label:i(t===`privateKey`&&e.auth.type===`oauth`&&e.auth.flow===`jwt_bearer`?`ai.oauthAssertionKey`:ne[t]??`ai.remotePassword`),saved:c.includes(t),disabled:n||!u,onSave:e=>void W(t,e),onForget:()=>void W(t,null),vaults:o,fromVault:e.fromVault?.[t],onFromVault:e=>{e&&c.includes(t)&&W(t,null),U(t,e)},onFile:ie.has(t)?()=>void G(t):void 0,problem:k?.field===t?i(k.key):N?.field===t?N.text:void 0,authorized:j.includes(t),onAuthorize:()=>void R(t)},t));return(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)(`section`,{className:`ai-section`,"aria-label":i(`ai.sectionService`),children:[(0,E.jsx)(`h3`,{className:`ai-section-title`,children:i(`ai.sectionService`)}),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[i(`ai.remoteName`),(0,E.jsx)(`input`,{type:`text`,value:e.label,disabled:n,onChange:e=>F({label:e.target.value})})]}),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[i(`ai.remoteProtocol`),(0,E.jsxs)(`select`,{value:e.protocol,"aria-label":i(`ai.remoteProtocol`),disabled:n,onChange:e=>J(e.target.value),children:[(0,E.jsx)(`option`,{value:`openai`,children:i(`ai.remoteProtocolOpenai`)}),(0,E.jsx)(`option`,{value:`anthropic`,children:`Anthropic`}),(0,E.jsx)(`option`,{value:`azure`,children:`Azure OpenAI / AI Foundry`}),(0,E.jsx)(`option`,{value:`bedrock`,children:`Amazon Bedrock`}),(0,E.jsx)(`option`,{value:`vertex`,children:`Google Vertex AI`}),(0,E.jsx)(`option`,{value:`alibaba`,children:`Alibaba Cloud Model Studio`})]})]}),Y?.hint&&(0,E.jsx)(`p`,{className:`ai-server-hint`,children:i(Y.hint)}),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[i(`ai.serverAddress`),(0,E.jsx)(`input`,{type:`url`,value:e.baseUrl,spellCheck:!1,disabled:n,onChange:e=>F({baseUrl:e.target.value.trim()})})]})]}),(0,E.jsxs)(`section`,{className:`ai-section`,"aria-label":i(`ai.sectionSignIn`),children:[(0,E.jsx)(`h3`,{className:`ai-section-title`,children:i(`ai.sectionSignIn`)}),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[i(`ai.remoteAuth`),(0,E.jsxs)(`select`,{value:e.auth.type,"aria-label":i(`ai.remoteAuth`),disabled:n,onChange:e=>q(e.target.value),children:[(0,E.jsx)(`option`,{value:`none`,children:i(`ai.remoteAuthNone`)}),(0,E.jsx)(`option`,{value:`header`,children:i(`ai.remoteAuthHeader`)}),(0,E.jsx)(`option`,{value:`basic`,children:i(`ai.remoteAuthBasic`)}),(0,E.jsx)(`option`,{value:`oauth`,children:i(`ai.remoteAuthOAuth`)}),(0,E.jsx)(`option`,{value:`sigv4`,children:i(`ai.remoteAuthSigv4`)})]})]}),e.auth.type===`header`&&(0,E.jsxs)(`div`,{className:`ai-remote-row`,children:[(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[i(`ai.remoteHeaderName`),(0,E.jsx)(`input`,{type:`text`,value:e.auth.name,spellCheck:!1,disabled:n,onChange:t=>F({auth:{...e.auth,name:t.target.value.trim()}})})]}),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[i(`ai.remoteHeaderPrefix`),(0,E.jsx)(`input`,{type:`text`,value:e.auth.prefix??``,spellCheck:!1,disabled:n,onChange:t=>F({auth:{...e.auth,prefix:t.target.value}})})]})]}),e.auth.type===`basic`&&(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[i(`ai.remoteUsername`),(0,E.jsx)(`input`,{type:`text`,value:e.auth.username,autoComplete:`off`,disabled:n,onChange:e=>F({auth:{type:`basic`,username:e.target.value}})})]}),e.auth.type===`sigv4`&&(0,E.jsxs)(`div`,{className:`ai-remote-row`,children:[(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[i(`ai.awsRegion`),(0,E.jsx)(`input`,{type:`text`,value:e.auth.region,spellCheck:!1,disabled:n,onChange:e=>oe(e.target.value.trim())})]}),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[i(`ai.awsService`),(0,E.jsx)(`input`,{type:`text`,value:e.auth.service??``,placeholder:`bedrock`,spellCheck:!1,disabled:n,onChange:t=>F({auth:{type:`sigv4`,region:e.auth.region,...t.target.value.trim()?{service:t.target.value.trim()}:{}}})})]})]}),e.auth.type===`oauth`&&(0,E.jsx)(D,{connectionId:e.id,target:I,config:e.auth,disabled:n,onChange:e=>F({auth:e})}),$(S(e.auth)),!u&&(0,E.jsx)(`p`,{className:`ai-server-status`,children:i(`ai.remoteNoSecureStorage`)}),(0,E.jsx)(`p`,{className:`ai-server-hint`,children:i(`ai.remoteHint`)})]}),(0,E.jsxs)(`section`,{className:`ai-section`,"aria-label":i(`ai.sectionCertificate`),children:[(0,E.jsx)(`h3`,{className:`ai-section-title`,children:i(`ai.sectionCertificate`)}),(0,E.jsxs)(`label`,{className:`ai-oauth-check`,children:[(0,E.jsx)(`input`,{type:`checkbox`,checked:!!e.clientCertificate,disabled:n,onChange:e=>F({clientCertificate:e.target.checked})}),i(`ai.tlsClientCertificate`)]}),e.clientCertificate&&(0,E.jsx)(`p`,{className:`ai-server-hint`,children:i(`ai.tlsHint`)}),e.clientCertificate&&K&&(0,E.jsxs)(`div`,{className:`ai-server-field`,children:[(0,E.jsx)(`span`,{children:i(`ai.tlsPfx`)}),(0,E.jsx)(`p`,{className:`ai-secret-file`,"data-saved":`true`,children:i(`ai.secretFileSaved`)}),(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,disabled:n||!u,onClick:()=>void W(`tlsPfx`,null),children:i(`ai.remoteSecretForget`)})]}),e.clientCertificate&&$(S({type:`none`},!0).filter(e=>e.startsWith(`tls`)))]}),(0,E.jsxs)(`section`,{className:`ai-section`,"aria-label":i(`ai.sectionModel`),children:[(0,E.jsx)(`h3`,{className:`ai-section-title`,children:i(`ai.sectionModel`)}),ae?(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[i(e.protocol===`bedrock`?`ai.remoteBedrockModel`:e.protocol===`azure`?`ai.remoteDeployment`:`ai.serverModel`),(0,E.jsx)(`input`,{type:`text`,value:e.model??``,list:X?`ai-models-${e.id}`:void 0,spellCheck:!1,disabled:n,onChange:e=>F({model:e.target.value.trim()})}),X&&(0,E.jsx)(`datalist`,{id:`ai-models-${e.id}`,children:Z.map(e=>(0,E.jsx)(`option`,{value:e},e))})]}):(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[i(`ai.serverModel`),(0,E.jsxs)(`select`,{value:e.model??``,"aria-label":i(`ai.serverModel`),disabled:n||Q.length===0,onChange:e=>{F({model:e.target.value}),r()},children:[(0,E.jsx)(`option`,{value:``,disabled:!0,children:i(`ai.serverPickModel`)}),Q.map(e=>(0,E.jsx)(`option`,{value:e,children:e},e))]})]}),(0,E.jsxs)(`div`,{className:`ai-server-check`,children:[(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,disabled:n||h===`checking`,onClick:()=>void B(),children:i(h===`checking`?`ai.serverChecking`:`ai.serverCheck`)}),h&&h!==`checking`&&(0,E.jsx)(`p`,{className:`ai-server-status ai-server-status--${h.state}`,role:`status`,"data-state":h.state,children:h.state===`ok`?h.models.length>0?i(`ai.serverOk`,{count:h.models.length}):i(`ai.serverOkEmpty`):z(i,h.state,e.baseUrl,{status:h.state===`http`?h.status:void 0,problem:h.state===`invalid`?h.problem:h.state===`vault`?h.detail:void 0})})]})]}),(0,E.jsxs)(`section`,{className:`ai-section ai-section--folded`,children:[(0,E.jsx)(`button`,{type:`button`,className:`ai-section-toggle`,"aria-expanded":T,onClick:()=>O(!T),children:i(`ai.sectionAdvanced`)}),T&&(0,E.jsx)(E.Fragment,{children:(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[i(`ai.remoteHeaders`),(0,E.jsx)(`textarea`,{rows:2,value:x,spellCheck:!1,disabled:n,onChange:e=>w(e.target.value),onBlur:()=>F({headers:g(x)})})]})})]})]})}function te({label:e,saved:n,disabled:r,onSave:i,onForget:a,vaults:o,fromVault:s,onFromVault:c,onFile:l,problem:u,authorized:d=!1,onAuthorize:f}){let p=t(),[m,h]=(0,C.useState)(``),g=()=>{m&&(i(m),h(``))},_=s&&o.find(e=>e.id===s.vault),v=_?.vault?.kind===`hashicorp`,y=(0,C.useId)();return(0,E.jsxs)(`div`,{className:`ai-server-field ai-secret`,children:[(0,E.jsxs)(`div`,{className:`ai-secret-head`,children:[!_&&!l?(0,E.jsx)(`label`,{htmlFor:y,children:e}):(0,E.jsx)(`span`,{children:e}),o.length>0&&(0,E.jsxs)(`select`,{className:`ai-secret-source`,value:_?_.id:``,"aria-label":`${e} · ${p(`ai.secretSource`)}`,disabled:r,onChange:e=>c(e.target.value?{vault:e.target.value,name:``}:void 0),children:[(0,E.jsx)(`option`,{value:``,children:p(`ai.secretKeptHere`)}),o.map(e=>(0,E.jsx)(`option`,{value:e.id,children:p(`ai.secretVaultOption`,{vault:e.label||e.baseUrl})},e.id))]})]}),_&&s?(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)(`div`,{className:`ai-remote-row`,children:[(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[p(v?`ai.vaultSecretPath`:`ai.vaultSecretName`),(0,E.jsx)(`input`,{type:`text`,value:s.name,spellCheck:!1,disabled:r,onChange:e=>c({...s,name:e.target.value.trim()})})]}),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[p(v?`ai.vaultSecretField`:`ai.vaultSecretKey`),(0,E.jsx)(`input`,{type:`text`,value:s.key??``,spellCheck:!1,placeholder:v?`value`:``,disabled:r,onChange:e=>c({...s,key:e.target.value.trim()||void 0})})]})]}),(0,E.jsx)(`p`,{className:`ai-server-hint`,children:p(`ai.vaultSecretHint`)}),(0,E.jsx)(`p`,{className:`ai-secret-file`,"data-saved":d||void 0,children:p(d?`ai.vaultAuthorizedYes`:`ai.vaultAuthorizedNo`)}),(0,E.jsx)(`div`,{className:`ai-secret-actions`,children:(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,disabled:r||!s.name,"aria-label":`${p(`ai.vaultAuthorize`)} ${e}`,onClick:f,children:p(`ai.vaultAuthorize`)})})]}):l?(0,E.jsx)(`p`,{className:`ai-secret-file`,"data-saved":n||void 0,children:p(n?`ai.secretFileSaved`:`ai.secretNoFile`)}):(0,E.jsx)(`input`,{id:y,type:`password`,value:m,autoComplete:`off`,placeholder:n?p(`ai.remoteSecretSaved`):``,disabled:r,"data-saved":n||void 0,onChange:e=>h(e.target.value),onBlur:g,onKeyDown:e=>{e.key===`Enter`&&g()}}),!_&&(l||n)&&(0,E.jsxs)(`div`,{className:`ai-secret-actions`,children:[l&&(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,disabled:r,"aria-label":`${p(`ai.secretFromFile`)} ${e}`,onClick:l,children:p(`ai.secretFromFile`)}),n&&(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,disabled:r,onClick:a,children:p(`ai.remoteSecretForget`)})]}),u&&(0,E.jsx)(`p`,{className:`ai-server-status`,role:`status`,children:u})]})}var ne={key:`ai.remoteKey`,password:`ai.remotePassword`,clientSecret:`ai.oauthClientSecret`,privateKey:`ai.oauthPrivateKey`,tlsCert:`ai.tlsCert`,tlsKey:`ai.tlsKey`,tlsPassphrase:`ai.tlsPassphrase`,tlsCa:`ai.tlsCa`,accessKeyId:`ai.awsAccessKeyId`,secretAccessKey:`ai.awsSecretAccessKey`,sessionToken:`ai.awsSessionToken`},re={"too-large":`ai.fileTooLarge`,empty:`ai.fileEmpty`,"not-certificate":`ai.fileNotCertificate`,"not-key":`ai.fileNotKey`},ie=new Set([`tlsCert`,`tlsKey`,`tlsCa`,`privateKey`]);function W(){let e=a(e=>e.aiTurns),n=a(e=>e.aiModel),r=a(e=>e.aiModelStatus),i=a(e=>e.setAiModel),o=a(e=>e.aiGenerate),s=a(e=>e.aiCancel),c=a(e=>e.aiUndoTurn),l=a(e=>e.aiClear),u=d(e=>e.engine),p=d(e=>e.setEngine),m=d(e=>e.server),g=d(e=>e.connections.find(t=>t.id===e.connectionId)??null),[v,y]=(0,C.useState)(``),b=t(),x=f(),S=(e[e.length-1]?.state??null)===`working`,w=u===`server`,D=u===`remote`,O=u===`browser`,k=w?m.model!==``:!D||!!g?.model,A=[..._()?[`browser`]:[],`server`,...h()?[`remote`]:[]],j=(0,C.useRef)(null),M=()=>{let e=j.current?.querySelector(`:scope > details.ai-server`);e&&(e.open=!1,e.querySelector(`summary`)?.focus())},N=a(e=>e.kind),P=a(e=>e.nodes),F=(0,C.useMemo)(()=>T(N,P),[N,P]),I=(0,C.useRef)(null),L=()=>{v.trim()&&k&&(o(v),y(``))};return(0,E.jsxs)(`div`,{className:`ai-panel ai-chat`,children:[(0,E.jsxs)(`div`,{className:`ai-header`,children:[A.length>1&&(0,E.jsxs)(`label`,{className:`ai-model`,children:[b(`ai.engine`),(0,E.jsxs)(`select`,{value:u,"aria-label":b(`ai.engine`),disabled:S,onChange:e=>p(e.target.value),children:[A.includes(`browser`)&&(0,E.jsx)(`option`,{value:`browser`,children:b(`ai.engineBrowser`)}),(0,E.jsx)(`option`,{value:`server`,children:b(`ai.engineServer`)}),A.includes(`remote`)&&(0,E.jsx)(`option`,{value:`remote`,children:b(`ai.engineRemote`)})]})]}),O&&(0,E.jsxs)(`label`,{className:`ai-model`,children:[b(`ai.model`),(0,E.jsxs)(`select`,{value:n,"aria-label":b(`ai.model`),disabled:S,onChange:e=>i(e.target.value),children:[(0,E.jsx)(`option`,{value:`qwen2.5-coder-0.5b`,children:b(`ai.modelSmall`)}),(0,E.jsx)(`option`,{value:`qwen2.5-coder-1.5b`,children:b(`ai.modelLarge`)})]})]}),(0,E.jsx)(`button`,{type:`button`,className:`editor-action ai-new`,title:b(`ai.newHint`),disabled:S||e.length===0,onClick:l,children:b(`ai.new`)})]}),(w||D)&&(0,E.jsxs)(`div`,{className:`ai-settings`,ref:j,children:[w&&(0,E.jsx)(J,{disabled:S}),D&&(0,E.jsx)(B,{disabled:S}),(0,E.jsx)(`button`,{type:`button`,className:`editor-action ai-settings-done`,onClick:M,children:b(`ai.settingsDone`)})]}),O&&x===`local`&&r.state!==`idle`&&(0,E.jsxs)(`div`,{className:`ai-model-status ai-model-status--${r.state}`,role:`status`,"data-device":r.state===`ready`?r.device:void 0,children:[r.state===`downloading`&&(0,E.jsxs)(`span`,{children:[b(`ai.downloading`,{percent:r.percent===null?`…`:String(r.percent)}),r.file?` — ${r.file}`:``]}),r.state===`warming`&&(0,E.jsx)(`span`,{children:b(`ai.warming`)}),r.state===`ready`&&(0,E.jsx)(`span`,{children:b(`ai.ready`)}),r.state===`error`&&(0,E.jsx)(`span`,{className:`ai-model-error`,children:b(`ai.localError`,{error:r.error})})]}),(0,E.jsxs)(`div`,{className:`ai-thread`,tabIndex:0,role:`region`,"aria-label":b(`ai.thread`),children:[e.length===0&&(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(`p`,{className:`ai-seed`,children:b(`ai.seed`)}),(0,E.jsxs)(`div`,{className:`ai-suggestions`,role:`group`,"aria-label":b(`ai.suggestTitle`),children:[(0,E.jsx)(`p`,{className:`ai-suggestions-title`,children:b(`ai.suggestTitle`)}),F.map(e=>{let t=b(e.key,e.params);return(0,E.jsx)(`button`,{type:`button`,className:`ai-suggestion`,disabled:S||!k,onClick:()=>{y(t),I.current?.focus()},children:t},t)})]})]}),e.map(e=>(0,E.jsxs)(`div`,{className:`ai-turn`,children:[(0,E.jsx)(`div`,{className:`ai-bubble ai-user`,children:e.request}),(0,E.jsxs)(`div`,{className:`ai-bubble ai-assistant ${e.state}`,children:[e.state===`working`&&(0,E.jsxs)(`p`,{className:`ai-status`,role:`status`,children:[(0,E.jsx)(`span`,{className:`ai-spinner`,"aria-hidden":`true`}),e.attempts>1?b(`ai.retrying`):b(`ai.generating`)]}),e.state===`error`&&(0,E.jsx)(`p`,{className:`ai-error`,children:!e.reason||e.reason===`http`?b(`ai.failed`,{error:e.error??``}):D?z(b,e.reason,g?.baseUrl??``,{problem:e.error??void 0}):R(b,e.reason,m.baseUrl)}),e.state===`done`&&(0,E.jsx)(K,{changes:e.changes}),e.state===`done`&&e.codeBefore!==null&&(0,E.jsx)(`div`,{className:`ai-actions`,children:(0,E.jsx)(`button`,{type:`button`,title:b(`ai.undoTurnHint`),onClick:()=>c(e.id),children:b(`ai.undoTurn`)})})]})]},e.id))]}),(0,E.jsxs)(`div`,{className:`ai-composer`,children:[(0,E.jsx)(`textarea`,{ref:I,className:`ai-request`,rows:2,value:v,placeholder:b(k?`ai.placeholder`:D?`ai.remoteNeedsModel`:`ai.serverNeedsModel`),disabled:S||!k,onChange:e=>y(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&!e.nativeEvent.isComposing&&(e.preventDefault(),L())}}),S?(0,E.jsx)(`button`,{type:`button`,className:`primary ai-send`,title:b(`ai.cancelHint`),onClick:s,children:b(`ai.cancel`)}):(0,E.jsx)(`button`,{type:`button`,className:`primary ai-send`,title:b(`ai.sendHint`),disabled:!v.trim()||!k,onClick:L,children:b(`ai.send`)})]})]})}var G=8;function K({changes:e}){let n=t(),r=a(e=>e.aiShowChange);if(e===void 0)return(0,E.jsx)(`p`,{className:`ai-applied`,role:`status`,children:n(`ai.applied`)});if(e===null||!o(e))return(0,E.jsx)(`p`,{className:`ai-applied`,role:`status`,children:n(e===null?`ai.changesRedrawn`:`ai.changesNone`)});let i=new Set(e.removedNodes.map(e=>e.id)),s=e=>e.label?`${e.from} → ${e.to} (${e.label})`:`${e.from} → ${e.to}`,c=[...e.addedNodes.map(e=>({kind:`added`,text:e.label,target:{node:e.id}})),...e.addedEdges.map(e=>({kind:`added`,text:s(e),target:{source:e.source,target:e.target}})),...e.renamedNodes.map(e=>({kind:`renamed`,text:`${e.was} → ${e.label}`,target:{node:e.id}})),...e.removedNodes.map(e=>({kind:`removed`,text:e.label})),...e.removedEdges.filter(e=>!i.has(e.source)&&!i.has(e.target)).map(e=>({kind:`removed`,text:s(e)}))],l={added:`+`,renamed:`✎`,removed:`−`},u={added:n(`ai.changeAdded`),renamed:n(`ai.changeRenamed`),removed:n(`ai.changeRemoved`)};return(0,E.jsxs)(`div`,{className:`ai-changes`,role:`status`,children:[(0,E.jsx)(`p`,{className:`ai-changes-title`,children:n(`ai.changesTitle`)}),(0,E.jsx)(`ul`,{children:c.slice(0,G).map((e,t)=>(0,E.jsxs)(`li`,{className:`ai-change ai-change--${e.kind}`,children:[(0,E.jsx)(`span`,{className:`ai-change-mark`,"aria-hidden":`true`,children:l[e.kind]}),(0,E.jsxs)(`span`,{className:`visually-hidden`,children:[u[e.kind],`: `]}),e.target?(0,E.jsx)(`button`,{type:`button`,className:`ai-change-link`,title:n(`ai.changeShow`),onClick:()=>r(e.target),children:e.text}):(0,E.jsx)(`span`,{className:`ai-change-text`,children:e.text})]},t))}),c.length>G&&(0,E.jsx)(`p`,{className:`ai-changes-more`,children:n(`ai.changesMore`,{count:c.length-G})})]})}async function q(e){let t=m();if(!t||!c(e.baseUrl))return u(e);await y();let n=await t.probe(x);return n.state===`invalid`||n.state===`vault`?{state:`not-local`}:n}function J({disabled:e}){let n=d(e=>e.server),r=d(e=>e.setServer),[i,a]=(0,C.useState)(n.baseUrl),[o,c]=(0,C.useState)(`checking`),u=t(),f=async e=>{c(`checking`),c(await q({...d.getState().server,baseUrl:e}))};(0,C.useEffect)(()=>{let e=!0;return q(d.getState().server).then(t=>{e&&c(t)}),()=>{e=!1}},[]);let p=e=>{let t=e.trim();a(t),t!==n.baseUrl&&(r({baseUrl:t,model:``}),f(t))},m=o!==`checking`&&o.state===`ok`?o.models:[],h=n.model&&!m.includes(n.model)?[n.model,...m]:m,g=o!==`checking`&&o.state===`ok`?o.remote:[],_=e=>g.includes(e)||/[-:]cloud$/i.test(e);return(0,E.jsxs)(`details`,{className:`ai-server`,open:!n.model,children:[(0,E.jsx)(`summary`,{children:u(`ai.serverSummary`,{model:n.model||u(`ai.serverNoModel`)})}),(0,E.jsx)(`p`,{className:`ai-server-hint`,children:u(`ai.serverHint`)}),(0,E.jsx)(`div`,{className:`ai-server-presets`,children:Object.keys(s).map(t=>(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,"aria-pressed":l(n.baseUrl)===t,disabled:e,onClick:()=>p(s[t].baseUrl),children:s[t].label},t))}),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[u(`ai.serverAddress`),(0,E.jsx)(`input`,{type:`url`,value:i,spellCheck:!1,disabled:e,onChange:e=>a(e.target.value),onBlur:e=>p(e.target.value),onKeyDown:e=>{e.key===`Enter`&&p(e.currentTarget.value)}})]}),(0,E.jsxs)(`label`,{className:`ai-server-field`,children:[u(`ai.serverModel`),(0,E.jsxs)(`select`,{value:n.model,"aria-label":u(`ai.serverModel`),disabled:e||h.length===0,onChange:e=>r({model:e.target.value}),children:[(0,E.jsx)(`option`,{value:``,disabled:!0,children:u(`ai.serverPickModel`)}),h.map(e=>(0,E.jsx)(`option`,{value:e,children:_(e)?u(`ai.serverCloudTag`,{model:e}):e},e))]})]}),n.model&&_(n.model)&&(0,E.jsx)(`p`,{className:`ai-server-status ai-server-cloud`,role:`note`,children:u(`ai.serverCloudWarning`)}),(0,E.jsxs)(`div`,{className:`ai-server-check`,children:[(0,E.jsx)(`button`,{type:`button`,className:`editor-action`,disabled:e||o===`checking`,onClick:()=>void f(n.baseUrl),children:u(o===`checking`?`ai.serverChecking`:`ai.serverCheck`)}),o!==`checking`&&(0,E.jsx)(`p`,{className:`ai-server-status ai-server-status--${o.state}`,role:`status`,"data-state":o.state,children:o.state===`ok`?o.models.length>0?u(`ai.serverOk`,{count:o.models.length}):u(`ai.serverOkEmpty`):R(u,o.state,n.baseUrl,o.state===`http`?o.status:void 0)})]})]})}export{W as AiPanel};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{m as e,t}from"./mermaid-parser.core-eJASdD4X.js";import{n}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{t as r}from"./src-7lQuYpZB.js";import"./chunk-DSNLSHJZ-Cm_KIxT6.js";import{n as i,r as a,t as o}from"./chunk-2E7WHVMD-
|
|
1
|
+
import{m as e,t}from"./mermaid-parser.core-eJASdD4X.js";import{n}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{t as r}from"./src-7lQuYpZB.js";import"./chunk-DSNLSHJZ-Cm_KIxT6.js";import{n as i,r as a,t as o}from"./chunk-2E7WHVMD-kU1DS-Ov.js";import{t as s}from"./chunk-JWPE2WC7-DVXcaiue.js";import"./mermaid.core-CzhTuTFf.js";var c=e().RailroadAbnf.parser.LangiumParser,l=n(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=n(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=n(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=n(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=n(e=>{switch(e.$type){case`AbnfStringLiteral`:return{type:`terminal`,value:e.value};case`AbnfNumVal`:return{type:`terminal`,value:e.value};case`AbnfRuleName`:return{type:`nonterminal`,name:e.name};case`AbnfGroup`:return l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=n(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=n(e=>{s(e,o),e.title&&o.setTitle(e.title),e.rules.map(e=>o.addRule(m(e)))},`populateDb`),g={parser:{parse:n(e=>{o.clear(),r.debug(`[ABNF Parser] Starting Langium parse`);let n=c.parse(e);if(n.lexerErrors.length>0||n.parserErrors.length>0)throw new t(n);let i=n.value;r.debug(`[ABNF Parser] Parsed rules:`,i.rules.length),h(i),r.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:o}},db:o,renderer:a,styles:i};export{g as diagram};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={"app.name":`Archyne`,"app.tagline":`محرر الرسوم البيانية المرئي`,"app.loading":`جارٍ تحميل محرك الرسوم…`,"kind.flowchart":`مخطط انسيابي`,"kind.state":`مخطط الحالات`,"kind.er":`مخطط الكيانات والعلاقات`,"kind.class":`مخطط الفئات`,"kind.sequence":`مخطط التتابع`,"kind.architecture":`البنية`,"kind.c4":`نموذج C4`,"toolbar.about":`حول Archyne والتراخيص`,"toolbar.aboutTitle":`حول والتراخيص`,"toolbar.shapesDrawer":`الأشكال`,"toolbar.codeDrawer":`الشيفرة`,"toolbar.direction":`الاتجاه`,"toolbar.dirTB":`من أعلى إلى أسفل`,"toolbar.layoutAs":`ترتيب كـ`,"toolbar.layoutAutoHint":`يرسم الملف بكل ترتيب ويُبقي الأفضل قراءةً.`,"toolbar.layoutLayeredHint":`مستويات إلى أسفل الصفحة، تتبع الوصلات.`,"toolbar.layoutBandsHint":`المستويات كشرائط، وعناصر المستوى جنبًا إلى جنب.`,"toolbar.layoutCompactHint":`مرصوص معًا، بأقل مساحة فارغة ممكنة.`,"toolbar.layoutTreeHint":`متفرّع من جذر واحد.`,"toolbar.layoutOrganicHint":`مستقرّ كما لو كانت الوصلات نوابض.`,"toolbar.layoutLayered":`هرمي`,"toolbar.layoutAuto":`تلقائي`,"toolbar.layoutBands":`شرائط`,"toolbar.layoutCompact":`مضغوط`,"toolbar.layoutTree":`شجرة`,"toolbar.layoutOrganic":`عضوي`,"toolbar.dirLR":`من اليسار إلى اليمين`,"toolbar.dirBT":`من أسفل إلى أعلى`,"toolbar.dirRL":`من اليمين إلى اليسار`,"toolbar.undo":`تراجع`,"toolbar.undoHint":`تراجع (Ctrl+Z)`,"toolbar.redo":`إعادة`,"toolbar.redoHint":`إعادة (Ctrl+Y)`,"toolbar.autoLayout":`تخطيط تلقائي`,"toolbar.new":`جديد…`,"toolbar.newDiagram":`مخطط جديد`,"toolbar.open":`فتح`,"toolbar.import":`استيراد…`,"import.title":`استيراد من {source}`,"import.becomes":`سيصبح {kind}`,"import.readAs":`اقرأه كـ`,"import.readAsPage":`الصفحة`,"import.pagesToImport":`الصفحات المراد استيرادها`,"import.allPages":`كل الصفحات`,"import.confirmPages":`استيراد {count} صفحات`,"import.view":`طريقة العرض`,"import.view.canvas":`لوحة الرسم`,"import.view.mermaid":`عرض Mermaid`,"import.view.source":`شيفرة Mermaid`,"import.rendering":`يجري رسم المعاينة…`,"import.mermaidLayout":`يرتّب Mermaid المخططات بنفسه ويتجاهل المواضع المحفوظة في الملف — هكذا يظهر في مكان آخر، لا على لوحة الرسم.`,"import.noCanvas":`يُرتَّب مخطط التسلسل حسب ترتيب رسائله، وهو ما لا تستطيعه هذه المعاينة — راجع عرض Mermaid.`,"import.counts":`{nodes} عنصرًا و{edges} وصلة`,"import.onePage":`تُحوَّل الصفحة الأولى «{page}» فقط من {count}`,"import.looksLike":`يبدو أنه مخطط {family}؛ سيُحوَّل كمخطط انسيابي`,"import.dropped":`بعض العناصر بلا مقابل في Mermaid ولم تُستورد ({count})`,"import.unbound":`سيصل باسم {name} دون حفظ. لن يُمسّ الملف الذي اخترته.`,"import.cancel":`إلغاء`,"import.confirm":`استيراد`,"import.previewAlt":`معاينة المخطط بعد التحويل`,"import.zoom":`التكبير`,"import.zoomIn":`تكبير`,"import.zoomOut":`تصغير`,"import.zoomFit":`ملاءمة العرض`,"import.sourceAlt":`شيفرة Mermaid الناتجة`,"toolbar.save":`حفظ .mmd`,"toolbar.export":`تصدير…`,"toolbar.copyCode":`نسخ الشيفرة`,"toolbar.copied":`تم النسخ!`,"prefs.singleKeys":`اختصارات بمفتاح واحد`,"toolbar.theme":`المظهر`,"toolbar.themeDark":`داكن`,"toolbar.themeLight":`فاتح`,"toolbar.themeSystem":`النظام`,"toolbar.language":`اللغة`,"panel.sourceAndInspector":`الشيفرة والمفتش`,"panel.mermaidSource":`شيفرة mermaid`,"panel.sourceView":`عرض الشيفرة`,"panel.tabCode":`Mermaid`,"panel.tabPreview":`معاينة`,"panel.cannotRender":`تعذّر العرض: {message}`,"panel.expand":`تكبير`,"panel.expandHint":`فتح المعاينة بملء الشاشة`,"panel.previewTitle":`معاينة المخطط`,"palette.shapes":`لوحة الأشكال`,"palette.architecture":`لوحة البنية`,"palette.hint":`اسحب إلى اللوحة، أو انقر للإضافة`,"palette.close":`إغلاق اللوحة`,"palette.search":`البحث عن الأيقونات`,"palette.clearSearch":`مسح البحث`,"palette.noIcons":`لم يُعثر على أيقونات`,"palette.favorites":`المفضلة`,"palette.addFavorite":`إضافة إلى المفضلة`,"palette.removeFavorite":`إزالة من المفضلة`,"palette.add":`إضافة {name}`,"palette.addGroup":`أضف {name} كحاوية`,"iconPicker.otherVendor":`المستوردة`,"iconPicker.currentIs":`على هذه العقدة:`,"shape.square":`عملية`,"shape.round":`مستدير`,"shape.stadium":`نهاية`,"shape.subroutine":`روتين فرعي`,"shape.cylinder":`قاعدة بيانات`,"shape.circle":`دائرة`,"shape.doublecircle":`دائرة مزدوجة`,"shape.diamond":`قرار`,"shape.hexagon":`سداسي`,"shape.odd":`علَم`,"shape.trapezoid":`شبه منحرف`,"shape.inv_trapezoid":`شبه منحرف معكوس`,"shape.lean_right":`إدخال/إخراج`,"shape.lean_left":`إخراج/إدخال`,"shape.group":`مجموعة`,"item.state":`حالة`,"item.start":`بداية`,"item.end":`نهاية`,"item.choice":`اختيار`,"item.forkJoin":`تفرّع / دمج`,"item.entity":`كيان`,"item.class":`فئة`,"item.note":`ملاحظة`,"item.person":`شخص`,"item.system":`نظام`,"item.systemExt":`نظام (خارجي)`,"item.systemDb":`قاعدة بيانات النظام`,"item.container":`حاوية`,"item.component":`مكوّن`,"item.participant":`مشارك`,"item.actor":`فاعل`,"item.loop":`حلقة`,"item.altElse":`Alt / Else`,"item.opt":`Opt`,"item.subgraph":`مخطط فرعي`,"canvas.label":`لوحة المخطط`,"canvas.arranging":`جارٍ ترتيب المخطط…`,"canvas.brokenTitle":`يتعذّر رسم هذا المخطط`,"canvas.brokenBody":`شفرة Mermaid غير صالحة. تبيّن علامة تبويب Mermaid في اللوحة الجانبية موضع الخطأ.`,"canvas.emptyTitle":`هذا المخطط فارغ`,"canvas.emptyBody":`اكتب Mermaid في اللوحة الجانبية، أو ابدأ من القوالب.`,"canvas.summary":`{kind}. العقد: {nodes}. المجموعات: {groups}. الاتصالات: {edges}. هذه اللوحة بصرية؛ تسرد علامة التبويب المخطط كل عقدة واتصالاتها كنص.`,"canvas.keyboardHelp":`اضغط Tab للتنقل بين العقد. اضغط C على عقدة لبدء اتصال، ثم Enter على عقدة أخرى لإتمامه، أو Escape للإلغاء. اضغط Delete لحذف العقدة المحددة.`,"canvas.connectStart":`جارٍ الاتصال من {name}. انتقل إلى عقدة أخرى واضغط Enter.`,"canvas.connectDone":`تم الاتصال من {from} إلى {to}.`,"canvas.connectCancelled":`أُلغي الاتصال.`,"canvas.connectSameNode":`اختر عقدة مختلفة للاتصال بها.`,"menu.actions":`إجراءات المخطط`,"menu.rename":`إعادة تسمية`,"menu.ungroup":`فك التجميع`,"menu.deleteGroup":`حذف المجموعة`,"menu.duplicate":`تكرار`,"menu.copy":`نسخ`,"menu.copyAsImage":`نسخ كصورة`,"menu.copyAsText":`نسخ كنص`,"menu.cropImage":`اقتصاص الصورة…`,"menu.removeFromGroup":`إزالة من المجموعة`,"menu.delete":`حذف`,"menu.groupNodes":`تجميع {count} عقدة`,"menu.deleteSelection":`حذف التحديد`,"menu.editLabel":`تحرير التسمية`,"menu.addNodeHere":`إضافة عقدة هنا`,"menu.addCornerHere":`أضف زاوية هنا`,"menu.removeCorner":`احذف هذه الزاوية`,"menu.straighten":`اجعل الخط مستقيماً`,"menu.paste":`لصق`,"menu.autoLayout":`تخطيط تلقائي`,"export.title":`تصدير المخطط`,"export.source":`المصدر`,"export.sourceCanvas":`اللوحة (كما هي مرتبة هنا)`,"export.sourceMermaid":`محرك mermaid (المظهر القياسي)`,"export.format":`الصيغة`,"export.formatPng":`PNG`,"export.formatSvg":`SVG (متجهي)`,"export.formatPdf":`PDF`,"export.page":`الصفحة`,"export.pageFit":`ملاءمة المخطط`,"export.pageA4":`A4`,"export.pageLetter":`Letter`,"export.pdfHint":`يحتوي ملف PDF على المخطط كصورة بالجودة المختارة. صدّر بصيغة SVG إذا احتجت رسمًا يكبر بلا حدود.`,"export.copyImage":`نسخ الصورة`,"export.copyMarkup":`نسخ الشيفرة`,"export.copied":`تم النسخ`,"export.background":`الخلفية`,"export.bgDark":`داكنة`,"export.bgLight":`بيضاء`,"export.bgTransparent":`شفافة`,"export.mermaidTheme":`مظهر mermaid`,"export.quality":`الجودة`,"export.quality1":`1× (شاشة)`,"export.quality2":`2× (شرائح)`,"export.quality3":`3× (طباعة)`,"export.margin":`الهامش ({padding} بكسل)`,"export.generating":`جارٍ إنشاء المعاينة…`,"export.previewAlt":`معاينة المخطط المصدَّر`,"export.cancel":`إلغاء`,"export.confirm":`تصدير {format}`,"about.title":`حول Archyne`,"about.trademark":`Archyne مشروع مستقل. وهو غير تابع لـ Mermaid أو Mermaid Chart ولا معتمد أو مموّل منهما. «Mermaid» علامة تجارية لمالكها، وتُستخدم هنا فقط لوصف صيغة الملفات التي يقرؤها Archyne ويكتبها.`,"about.close":`إغلاق`,"about.version":`الإصدار {version}`,"inspector.diagram":`المخطط`,"inspector.accTitle":`عنوان الوصول (accTitle)`,"inspector.accDescr":`وصف الوصول (accDescr)`,"inspector.empty":`حدّد عقدة أو حافة لتحريرها. انقر نقرًا مزدوجًا على مساحة فارغة لإضافة عقدة، واسحب بين المقابض للربط.`,"palette.sectionShapes":`الأشكال`,"palette.sectionBase":`أساسية`,"palette.sectionPinned":`الأخيرة والمفضلة`,"palette.sectionCarried":`أيقونات هذا المخطط`,"palette.sectionVendor":`أيقونات المزوّدين`,"palette.searchIcons":`ابحث في أكثر من 13000 أيقونة…`,"item.compositeState":`حالة مركّبة`,"item.boundary":`حدّ`,"item.namespace":`مساحة الأسماء`,"item.junction":`وصلة`,"insp.selection":`{count} عقدة محددة`,"insp.align":`محاذاة`,"insp.alignLeft":`يسار`,"insp.alignCenterX":`توسيط`,"insp.alignRight":`يمين`,"insp.alignTop":`أعلى`,"insp.alignMiddleY":`وسط`,"insp.alignBottom":`أسفل`,"insp.distribute":`توزيع`,"insp.distributeX":`أفقيًا`,"insp.distributeY":`رأسيًا`,"insp.alignSameParent":`حدد عقدتين أو أكثر داخل المجموعة نفسها لترتيبها.`,"insp.distributeNeedsThree":`التوزيع يحتاج ثلاث عقد أو أكثر: فهو يرتب ما بين الطرفين.`,"insp.label":`التسمية`,"edge.addCorner":`اسحب لإضافة زاوية`,"edge.moveSegment":`اسحب لتحريك هذا الجزء`,"edge.moveLabel":`اسحب لتحريك التسمية، ونقرة مزدوجة لإعادتها`,"edge.removeCorner":`اسحب للتحريك، انقر نقرًا مزدوجًا للحذف`,"edge.cornerNamed":`الزاوية {index} من {total}. الأسهم تحرّكها، مع Shift خطوة أكبر، وDelete يحذفها.`,"insp.corners":`الزوايا`,"insp.addCorner":`إضافة زاوية`,"insp.removeCorner":`حذف`,"insp.straighten":`تسوية`,"watch.reloaded":`تغيّر {name} على القرص — أُعيد تحميله`,"watch.conflict":`تغيّر {name} على القرص. تم الاحتفاظ بتغييراتك غير المحفوظة.`,"menu.reloadFromDisk":`إعادة التحميل من القرص`,"toast.reloadedFromDisk":`أُعيد التحميل من القرص`,"toast.imported":`تم استيراد {nodes} عنصرًا و{edges} وصلة من {source}`,"toast.importedPages":`تم استيراد {count} صفحات من {source}، كل منها في علامة تبويب`,"toast.importedOnePage":`حُوّلت الصفحة الأولى «{page}» من {count}`,"toast.importedLooksLike":`يبدو أنه مخطط {family}؛ وقد استُورد كمخطط انسيابي`,"toast.importedDropped":`بعض العناصر بلا مقابل في Mermaid ولم تُستورد ({count})`,"insp.autoSize":`حجم تلقائي`,"insp.width":`العرض`,"insp.height":`الارتفاع`,"insp.shape":`الشكل`,"insp.fill":`التعبئة`,"insp.border":`الحدود`,"insp.text":`النص`,"insp.fontSize":`حجم الخط`,"insp.reset":`إعادة تعيين`,"insp.presets":`الألوان`,"insp.preset":`تعبئة {fill}، حد {stroke}`,"insp.name":`الاسم`,"insp.attributes":`السمات — واحدة في كل سطر:`,"insp.junction":`وصلة — نقطة عبور للموصّل.`,"insp.pseudoState":`حالة زائفة {type}`,"insp.elementType":`نوع العنصر`,"insp.description":`الوصف`,"insp.kind":`النوع`,"insp.participantBox":`مشارك (صندوق)`,"insp.actorPerson":`فاعل (شخص)`,"insp.annotations":`التعليقات التوضيحية — مثل`,"insp.annotationsHint":`(مفصولة بمسافات)`,"insp.arrow":`سهم`,"insp.line":`الخط`,"insp.lineSolid":`متصل`,"insp.lineDotted":`منقّط`,"insp.lineThick":`سميك`,"insp.routing":`المسار`,"insp.routeOrthogonal":`بزوايا قائمة`,"insp.routeStraight":`مستقيم`,"insp.routeCurved":`منحنٍ`,"insp.look":`المظهر`,"insp.lookBoxed":`إطار مع الأيقونة`,"insp.lookIcon":`الأيقونة وحدها`,"insp.icon":`أيقونة — مدمجة (server، database، cloud…) أو "logos:aws-s3"`,"insp.lookDashed":`إطار متقطع`,"insp.lookSolid":`إطار متصل`,"insp.lookPlain":`خط رفيع`,"insp.image":`صورة (رابط) — تُرسم على العقدة، وكذلك في أدوات Mermaid الأخرى`,"insp.imagePos":`التسمية`,"insp.imagePosAbove":`فوق`,"insp.imagePosBelow":`تحت`,"insp.imageSize":`الحجم`,"insp.imageHint":`الصورة المعطاة برابط هي الأيقونة الوحيدة التي ترسمها أدوات Mermaid الأخرى أيضًا؛ أسماء مثل logos:aws تظهر هنا ولا تظهر هناك.`,"insp.importIcon":`استيراد SVG…`,"insp.importUrl":`من رابط…`,"iconPicker.choose":`اختر أيقونة…`,"iconPicker.title":`اختيار أيقونة`,"iconPicker.imported":`المستوردة`,"iconPicker.common":`شائعة`,"iconPicker.results":`النتائج`,"iconPicker.nothing":`لا يوجد ما يطابق ذلك. لكل مزوّد مصطلحاته — شبكات Azure اسمها «virtual networks» وليس «vnet».`,"iconPicker.none":`بدون أيقونة`,"iconUrl.title":`استيراد أيقونات من رابط`,"iconUrl.label":`الروابط، رابط في كل سطر`,"iconUrl.hintWeb":`روابط مباشرة لملفات .svg على {hosts}. المواقع الأخرى لا تسمح لصفحة بقراءتها؛ ولحزمة zip من المزوّد استخدم تطبيق سطح المكتب.`,"iconUrl.hintDesktop":`أي رابط https لملف .svg أو لملف .zip يحتوي عليها — حزمة المزوّد كاملة تعمل هنا.`,"iconUrl.hintIconify":`وتصلح أيضًا أي أيقونة من Iconify، نحو 200000 أيقونة: api.iconify.design/mdi/database.svg`,"iconUrl.fetch":`استيراد`,"iconUrl.fetching":`جارٍ التنزيل…`,"toast.iconsFetchFailed":`لم يصل شيء من تلك الروابط`,"toast.iconNotSvg":`هذا الملف ليس أيقونة SVG`,"toast.iconsImported":`تم استيراد {count} أيقونة، وتم تخطي {skipped}`,"insp.arrowPoint":`سهم`,"insp.arrowNone":`بلا`,"insp.arrowCircle":`دائرة`,"insp.arrowCross":`صليب`,"insp.bothEnds":`رؤوس أسهم في الطرفين`,"insp.identifying":`معرِّفة (خط متصل)`,"insp.technology":`التقنية`,"insp.techPlaceholder":`مثل HTTPS/JSON`,"insp.bidirectional":`ثنائي الاتجاه`,"insp.dottedLine":`خط منقّط`,"insp.cardOnePlaceholder":`مثل 1`,"insp.cardManyPlaceholder":`مثل كثير`,"insp.diagramTitle":`المخطط`,"insp.title":`العنوان`,"error.crashTitle":`حدث خطأ أثناء العرض`,"error.crashIntro":`مخططك بأمان — هذه شيفرته الحالية. انسخها في مكان ما إن ساورك الشك، ثم حاول الاستعادة:`,"error.reset":`إعادة التعيين إلى المخطط النموذجي وإعادة التحميل`,"insp.groupTitle":`مجموعة {id}`,"insp.nodeTitle":`عقدة {id}`,"insp.edgeTitle":`حافة {source} ← {target}`,"seq.notePlaceholder":`نص الملاحظة`,"seq.dragReorder":`اسحب عموديًا لإعادة الترتيب`,"seq.delete":`حذف`,"seq.done":`تم`,"seq.over":`فوق`,"seq.leftOf":`يسار`,"seq.rightOf":`يمين`,"unsupported.title":`للقراءة فقط: مخططات {type}`,"unsupported.body":`لا يملك Archyne بعد محررًا مرئيًا لهذه العائلة من المخططات، لذا فاللوحة للقراءة فقط. شيفرة mermaid قابلة للتحرير بالكامل، والحفظ يُبقي ملفك كما هو تمامًا.`,"unsupported.badge":`{type} (للقراءة فقط)`,"unsupported.paletteHint":`هذه العائلة من المخططات للقراءة فقط. حرّرها بصيغة شيفرة mermaid في اللوحة الجانبية.`,"toolbar.saveAs":`حفظ باسم…`,"file.unsaved":`تغييرات غير محفوظة`,"file.untitled":`مخطط بلا عنوان`,"file.confirmDiscard":`يحتوي هذا المخطط على تغييرات غير محفوظة. هل تريد المغادرة على أي حال؟`,"doc.menuLabel":`الرسم: {name} — التبديل أو الإدارة`,"doc.openDocuments":`الرسوم المفتوحة`,"doc.closeNamed":`إغلاق {name}`,"doc.tabsHint":`الرسوم المفتوحة في Archyne`,"doc.tabsPrev":`إظهار الرسوم السابقة`,"doc.tabsNext":`إظهار الرسوم التالية`,"doc.list":`كل الرسوم`,"doc.listLabel":`كل الرسوم ({count})`,"doc.sortName":`ترتيب حسب الاسم`,"doc.sortRecent":`ترتيب حسب آخر استخدام`,"doc.moveUp":`تحريك لأعلى`,"doc.moveDown":`تحريك لأسفل`,"doc.reorderHint":`اسحب علامة تبويب، أو استخدم Alt مع مفاتيح الأسهم هنا.`,"doc.moved":`تم نقل {name} إلى الموضع {position} من {count}`,"doc.closeAll":`أغلق الكل`,"doc.closeAllTitle":`إغلاق {count} من المستندات؟`,"doc.closeAllBody":`ستُغلق كل المخططات المفتوحة ويبدأ مخطط فارغ جديد.`,"doc.closeAllUnsaved":`لم تُحفظ التغييرات في هذه المخططات، وستُفقد:`,"doc.current":`(الحالي)`,"doc.new":`رسم جديد`,"doc.rename":`إعادة تسمية…`,"doc.duplicate":`تكرار`,"doc.delete":`حذف`,"doc.renameTitle":`إعادة تسمية الرسم`,"doc.nameLabel":`الاسم`,"doc.renameConfirm":`إعادة تسمية`,"doc.renameHint":`هذه تسمية داخل Archyne. لا تتم إعادة تسمية الملف على القرص.`,"doc.deleteTitle":`حذف “{name}”؟`,"doc.deleteBody":`يزيل هذا الرسم من Archyne. أي ملف حفظته فيه يبقى دون تغيير.`,"doc.deleteUnsaved":`يحتوي هذا الرسم على تغييرات غير محفوظة في ملف. حذفه يفقدها. أي ملف حفظته سابقًا يبقى دون تغيير.`,"doc.switchTo":`التبديل إلى {name}`,"common.cancel":`إلغاء`,"common.close":`إغلاق`,"toast.dismiss":`إغلاق`,"toast.saved":`تم الحفظ`,"toast.copied":`تم نسخ شيفرة mermaid`,"toast.copyFailed":`تعذر النسخ إلى الحافظة`,"toast.pasteFailed":`تعذر لصق الصورة`,"toast.pictureNeedsFlowchart":`لا يمكن وضع صورة إلا في مخطط انسيابي`,"crop.title":`اقتصاص الصورة`,"crop.left":`اليسار`,"crop.top":`الأعلى`,"crop.width":`العرض`,"crop.height":`الارتفاع`,"crop.reset":`إعادة تعيين`,"crop.apply":`اقتصاص`,"toast.cropFailed":`تعذر اقتصاص الصورة`,"toast.saveFailed":`تعذّر الحفظ`,"toast.openFailed":`تعذّر فتح الملف`,"shortcuts.title":`اختصارات لوحة المفاتيح`,"shortcuts.file":`ملف`,"shortcuts.edit":`تحرير`,"shortcuts.canvas":`اللوحة`,"shortcuts.view":`عرض`,"shortcuts.selectAll":`تحديد الكل`,"shortcuts.nextNode":`التنقل بين العقد`,"shortcuts.connect":`بدء اتصال من العقدة المحددة`,"shortcuts.completeConnect":`إتمام الاتصال`,"shortcuts.labelBreak":`سطر جديد أثناء إعادة تسمية عقدة`,"shortcuts.cancel":`إلغاء`,"shortcuts.nudge":`تحريك التحديد`,"shortcuts.nudgeFar":`تحريك أبعد`,"shortcuts.commandPalette":`لوحة الأوامر`,"panel.tabOutline":`المخطط التفصيلي`,"outline.filter":`تصفية العقد`,"outline.empty":`لا توجد عقد مطابقة`,"outline.noNodes":`لا يحتوي هذا المخطط على عقد بعد.`,"outline.connections":`{count} صادرة`,"outline.select":`تحديد {name}`,"outline.summary":`{nodes} عقدة، {edges} اتصالاً`,"palette.commandTitle":`لوحة الأوامر`,"palette.commandFilter":`اكتب أمرًا أو اسم عقدة`,"palette.commandEmpty":`لا توجد نتائج`,"palette.groupCommands":`الأوامر`,"palette.groupNodes":`الانتقال إلى عقدة`,"palette.groupArrange":`ترتيب`,"palette.groupDocuments":`تبديل الرسم`,"palette.groupNew":`مخطط جديد`,"cmd.run":`تشغيل`,"ai.tab":`توليد`,"ai.placeholder":`مثال: افصل خطوة الدفع وافحص البطاقة أولًا`,"ai.model":`النموذج`,"ai.modelSmall":`Qwen2.5 Coder 0.5B — سريع`,"ai.modelLarge":`Qwen2.5 Coder 1.5B — أفضل`,"ai.new":`محادثة جديدة`,"ai.newHint":`انسَ هذه المحادثة وابدأ من جديد`,"ai.send":`إرسال`,"ai.sendHint":`إرسال (إدخال)`,"ai.thread":`المحادثة`,"ai.seed":`اطلب مخططًا وسيُرسم هنا. كل طلب لاحق يغيّر المخطط الظاهر على الشاشة.`,"ai.cancel":`إيقاف`,"ai.cancelHint":`إيقاف التوليد`,"ai.generating":`جارٍ رسم المخطط…`,"ai.retrying":`تعذّرت قراءة الرسمة الأولى — أعيد الرسم…`,"ai.applied":`طُبِّق على المخطط`,"ai.undoTurn":`التراجع عن هذا التغيير`,"ai.undoTurnHint":`يعيد المخطط إلى ما كان عليه قبل هذه الإجابة`,"ai.failed":`تعذّر رسم ذلك: {error}`,"ai.downloading":`جارٍ تنزيل النموذج… {percent}%`,"ai.warming":`جارٍ تحميل النموذج…`,"ai.ready":`النموذج جاهز`,"ai.localError":`النموذج المحلي غير جاهز: {error}`,"ai.engine":`المحرك`,"ai.engineBrowser":`في هذا المتصفح`,"ai.engineServer":`خادم محلي`,"ai.serverSummary":`خادم محلي: {model}`,"ai.serverNoModel":`لم يتم اختيار نموذج`,"ai.serverHint":`يعمل مع Ollama وLM Studio وأي خادم يدعم واجهة OpenAI البرمجية. يبقى المخطط على هذا الحاسوب، ما لم تختر نموذجاً سحابياً.`,"ai.serverCloudTag":`{model} — سحابي`,"ai.serverCloudWarning":`يعمل هذا النموذج في السحابة وليس على هذا الحاسوب: سيُرسل المخطط إلى هناك.`,"ai.serverAddress":`العنوان`,"ai.serverModel":`النموذج`,"ai.serverPickModel":`اختر نموذجاً`,"ai.serverCheck":`التحقق من الاتصال`,"ai.serverChecking":`جارٍ التحقق…`,"ai.serverOk":`متصل — يتوفر {count} من النماذج.`,"ai.serverOkEmpty":`متصل، لكن الخادم لا يعرض أي نموذج. حمّل نموذجاً أو نزّله أولاً.`,"ai.serverDown":`لا شيء يستجيب على {url}. شغّل {server} ثم تحقق مرة أخرى.`,"ai.serverBlockedOllama":`Ollama يعمل لكنه يرفض هذه الصفحة. اضبط OLLAMA_ORIGINS على {origin} ثم أعد تشغيل Ollama.`,"ai.serverBlockedLmStudio":`LM Studio يعمل لكنه يرفض هذه الصفحة. فعّل «Enable CORS» في إعدادات خادم LM Studio.`,"ai.serverBlocked":`الخادم يعمل لكنه يرفض هذه الصفحة (CORS). اسمح بالأصل {origin} في إعداداته.`,"ai.serverNotLocal":`لا يمكن استخدام إلا خادم على هذا الحاسوب: يجب أن يبدأ العنوان بـ http://localhost أو http://127.0.0.1.`,"ai.serverHttp":`رد الخادم بالخطأ {status}.`,"ai.serverNeedsModel":`اختر نموذجاً أولاً في إعدادات الخادم المحلي.`,"ai.serverGeneric":`الخادم`,"ai.remoteSummary":`خدمة بعيدة: {model}`,"ai.engineRemote":`خدمة بعيدة`,"ai.remoteService":`الخدمة`,"ai.remoteNone":`لا توجد خدمة بعد. أضف واحدة للبدء.`,"ai.remoteAdd":`إضافة خدمة`,"ai.remoteRemove":`إزالة الخدمة`,"ai.remoteNewName":`خدمة جديدة`,"ai.remoteName":`الاسم`,"ai.remoteAuth":`المصادقة`,"ai.remoteProtocol":`نوع الخدمة`,"ai.remoteProtocolOpenai":`متوافق مع OpenAI`,"ai.remoteDeployment":`النشر`,"ai.remoteAnthropicHint":`واجهة Anthropic البرمجية. يوضع المفتاح في الترويسة x-api-key.`,"ai.remoteAzureHint":`العنوان: https://<المورد>.openai.azure.com/openai/v1، أو .services.ai.azure.com لـ AI Foundry. النشر هو الاسم الذي أعطيته للنموذج في Azure. لـ Microsoft Entra استخدم OAuth بالنطاق https://ai.azure.com/.default.`,"ai.remoteAuthSigv4":`توقيع AWS (SigV4)`,"ai.awsRegion":`المنطقة`,"ai.awsService":`اسم التوقيع`,"ai.awsAccessKeyId":`معرّف مفتاح الوصول`,"ai.awsSecretAccessKey":`مفتاح الوصول السري`,"ai.awsSessionToken":`رمز الجلسة (لبيانات الاعتماد المؤقتة فقط)`,"ai.remoteBedrockHint":`العنوان: https://bedrock-runtime.<المنطقة>.amazonaws.com. وقّع بمفتاح وصول AWS (SigV4)، أو ضع مفتاح API لـ Bedrock في الترويسة Authorization كرمز Bearer. يتطلب سرد النماذج الصلاحيتين bedrock:ListInferenceProfiles وbedrock:ListFoundationModels؛ وبدونهما اكتب معرّف النموذج.`,"ai.remoteVertexHint":`العنوان: استبدل PROJECT_ID بمشروعك على Google Cloud؛ ولاستخدام منطقة بدل global استخدم https://<المنطقة>-aiplatform.googleapis.com/v1/projects/<المشروع>/locations/<المنطقة>/endpoints/openapi. تُسمّى النماذج مثل google/gemini-…. سجّل الدخول بمفتاح حساب خدمة، أو عبر المتصفح بعميل OAuth من Google.`,"ai.remoteAlibabaHint":`العنوان: سنغافورة كما هو مُعطى؛ بكين هي https://dashscope.aliyuncs.com/compatible-mode/v1، وهونغ كونغ https://cn-hongkong.dashscope.aliyuncs.com/compatible-mode/v1، ويمكن الوصول إلى أي منطقة (فرجينيا، فرانكفورت، طوكيو…) عبر عنوان مساحة العمل الخاصة بك، https://<workspace-id>.<region>.maas.aliyuncs.com/compatible-mode/v1. يجب أن يكون مفتاح API من المنطقة نفسها، وإلا تردّ الخدمة بالرمز 401. أسماء النماذج مثل qwen-plus.`,"ai.vaults":`الخزائن ({count})`,"ai.vaultsHint":`احتفظ بمفاتيح الخدمة في خزنة السحابة بدلًا من هذا الحاسوب. يقرأها Archyne بأداة سطر الأوامر الخاصة بالخزنة بالحساب الذي سجّلت الدخول به، ويُبقيها في الذاكرة فقط، ويسألك قبل إرسال أيٍّ منها إلى أي مكان لأول مرة.`,"ai.vaultPick":`الخزنة`,"ai.vaultAdd":`إضافة خزنة`,"ai.vaultRemove":`إزالة الخزنة`,"ai.vaultNewName":`خزنة جديدة`,"ai.vaultKind":`نوع الخزنة`,"ai.vaultProject":`المشروع`,"ai.vaultProfile":`الملف الشخصي (اختياري)`,"ai.vaultMount":`نقطة التحميل`,"ai.vaultNamespace":`مساحة الاسم (اختيارية)`,"ai.vaultCliHint":`تُقرأ بالأمر {command} بحسابك الحالي. إذا ظهر أنك لم تسجّل الدخول، فشغّل {login}.`,"ai.vaultProblemAddress":`العنوان غير صالح: عنوان Key Vault يشبه https://name.vault.azure.net، وعنوان HashiCorp يجب أن يكون https.`,"ai.vaultProblemProject":`المشروع غير صالح: استخدم مُعرّفه مثل acme-ai-123456 أو رقمه.`,"ai.vaultProblemField":`يحتوي هذا الحقل على حرف غير مسموح به.`,"ai.secretSource":`المصدر`,"ai.secretKeptHere":`على هذا الحاسوب`,"ai.secretVaultOption":`من الخزنة «{vault}»`,"ai.vaultSecretName":`اسم السرّ`,"ai.vaultSecretPath":`مسار السرّ`,"ai.vaultSecretKey":`المفتاح داخله (اختياري)`,"ai.vaultSecretField":`الحقل`,"ai.vaultSecretHint":`يُقرأ من الخزنة عند الحاجة ويُحفظ في الذاكرة فقط، وذلك فقط بعد أن تفوّضه لهذه الخدمة.`,"ai.remoteVaultFailed":`تعذّرت قراءة سرّ من الخزنة: {detail}`,"ai.secretFromFile":`اختيار ملف…`,"ai.tlsPfx":`الشهادة والمفتاح (من ملف .pfx / .p12)`,"ai.fileTooLarge":`الملف أكبر من أن يكون شهادة أو مفتاحًا.`,"ai.fileEmpty":`الملف فارغ.`,"ai.fileNotCertificate":`لا يحتوي الملف على شهادة (PEM أو DER أو حزمة .pfx / .p12).`,"ai.fileNotKey":`لا يحتوي الملف على مفتاح خاص (PEM أو PKCS#8 DER).`,"ai.fileUnreadable":`تعذّر تحميل الملف هنا.`,"ai.secretFileSaved":`تم التحميل — اختر ملفًا آخر لاستبداله`,"ai.secretNoFile":`لم يُحمَّل أي ملف بعد`,"ai.settingsDone":`العودة إلى المحادثة`,"ai.vaultAuthorize":`تفويض…`,"ai.vaultAuthorizedYes":`مفوَّض: يمكن لـ Archyne إرساله إلى هذه الخدمة.`,"ai.vaultAuthorizedNo":`لم يُفوَّض بعد: لن يقرأه Archyne حتى تفوّضه.`,"ai.vaultNotAuthorized":`لم يُفوَّض سرّ من الخزنة بعد: فوّضه في إعدادات هذه الخدمة.`,"ai.vaultDenied":`غير مفوَّض: لم يُقرأ شيء من الخزنة.`,"ai.vaultIncompleteRef":`اختر خزنة أولًا وأدخل اسم السرّ.`,"ai.sectionService":`الاتصال`,"ai.sectionSignIn":`تسجيل الدخول`,"ai.sectionCertificate":`شهادة العميل`,"ai.sectionModel":`النموذج`,"ai.sectionAdvanced":`خيارات متقدمة`,"ai.changesTitle":`التغييرات في المخطط:`,"ai.changesNone":`بقي المخطط كما كان.`,"ai.changesRedrawn":`طُبِّق: أُعيد رسم المخطط.`,"ai.changesMore":`و{count} أخرى`,"ai.changeAdded":`أُضيف`,"ai.changeRenamed":`أُعيدت تسميته`,"ai.changeRemoved":`أُزيل`,"ai.changeShow":`تحديده على اللوحة`,"ai.suggestTitle":`جرّب أن تطلب:`,"ai.suggestCache":`ضع ذاكرة تخزين مؤقت أمام {node}`,"ai.suggestRetry":`أعد محاولة {node} حتى ثلاث مرات إذا فشل`,"ai.suggestOutcome":`أضف إلى {node} نتيجة ثالثة لحالة عدم التأكد`,"ai.suggestColour":`لوّن {node} بالأخضر`,"ai.suggestConnect":`أضف عنصرًا متصلًا بـ {node}`,"ai.suggestRemove":`احذف {node} وأعد توصيل ما حوله`,"ai.suggestStartLogin":`ارسم تسجيل دخول بمصادقة ثنائية`,"ai.suggestStartShop":`ارسم خدمات متجر إلكتروني وكيف تتواصل فيما بينها`,"ai.suggestStartOrder":`ارسم حالات طلب، من تقديمه إلى تسليمه`,"ai.loading":`جارٍ التحميل…`,"ai.oauthFlowAssertion":`تأكيد موقَّع (حساب خدمة)`,"ai.oauthAssertionHint":`الصق المفتاح الخاص أدناه، أو ملف مفتاح JSON لحساب خدمة Google كما هو: فهو يتضمن المُصدِر ومعرّف المفتاح.`,"ai.oauthAssertionIssuer":`المُصدِر (لحساب خدمة: بريده الإلكتروني)`,"ai.oauthAssertionKey":`المفتاح الخاص (أو ملف مفتاح JSON)`,"ai.oauthSubject":`التصرف نيابةً عن (اختياري)`,"ai.remoteBedrockModel":`معرّف النموذج أو ملف تعريف الاستدلال`,"ai.remoteProblemRegion":`المنطقة غير صالحة؛ شكلها مثل eu-west-1.`,"ai.remoteProblemService":`لا يجوز أن يحتوي اسم التوقيع إلا على أحرف صغيرة وأرقام وشرطات.`,"ai.remoteAuthNone":`بدون`,"ai.remoteAuthHeader":`مفتاح API في ترويسة`,"ai.remoteAuthBasic":`اسم المستخدم وكلمة المرور (Basic)`,"ai.remoteHeaderName":`الترويسة`,"ai.remoteHeaderPrefix":`البادئة`,"ai.remoteKey":`مفتاح API`,"ai.remoteUsername":`اسم المستخدم`,"ai.remotePassword":`كلمة المرور`,"ai.remoteSecretSaved":`محفوظ — اكتب قيمة جديدة لاستبداله`,"ai.remoteSecretForget":`حذف`,"ai.remoteHeaders":`ترويسات إضافية، واحدة في كل سطر (الاسم: القيمة)`,"ai.remoteHint":`تُحفظ المفاتيح وكلمات المرور في التخزين الآمن لهذا الحاسوب ولا تُعرض مرة أخرى.`,"ai.remoteNoSecureStorage":`لا يوفر هذا النظام تخزيناً آمناً، لذا لا يمكن حفظ المفاتيح وكلمات المرور.`,"ai.remoteNotHttps":`لا يُسمح بـ http غير المشفّر إلا لخادم على هذا الحاسوب. استخدم عنوان https.`,"ai.remoteDown":`تعذّر الوصول إلى {url}.`,"ai.remoteUnauthorized":`رفضت الخدمة بيانات الاعتماد ({status}). تحقق من المفتاح أو كلمة المرور.`,"ai.remoteProblemProtocol":`هذا البروتوكول غير مدعوم بعد.`,"ai.remoteProblemHeaderName":`اسم الترويسة غير صالح.`,"ai.remoteProblemUsername":`لا يمكن أن يكون اسم المستخدم فارغاً أو أن يحتوي على نقطتين.`,"ai.remoteProblemExtraHeader":`إحدى الترويسات الإضافية اسمها غير صالح، أو تضبط Authorization أو Cookie اللتين تخصان المصادقة.`,"ai.remoteProblemUnknown":`لم يتم إعداد هذه الخدمة بعد.`,"ai.remoteNeedsModel":`اختر خدمة ونموذجاً أولاً.`,"ai.remoteAuthOAuth":`OAuth (تسجيل الدخول)`,"ai.oauthFlow":`طريقة تسجيل الدخول`,"ai.oauthFlowBrowser":`في المتصفح`,"ai.oauthFlowDevice":`باستخدام رمز، على أي جهاز`,"ai.oauthIssuer":`خادم التفويض`,"ai.oauthIssuerHint":`اتركه فارغاً للعثور عليه من الخدمة`,"ai.oauthClientId":`معرّف العميل`,"ai.oauthRegister":`سجّل Archyne لدى الخادم عند عدم وجود معرّف عميل`,"ai.oauthClientSecret":`سرّ العميل (للعملاء السريين فقط)`,"ai.oauthScopes":`النطاقات`,"ai.oauthResource":`Resource`,"ai.oauthAudience":`Audience`,"ai.oauthSignIn":`تسجيل الدخول`,"ai.oauthSignOut":`تسجيل الخروج`,"ai.oauthCancel":`إلغاء`,"ai.oauthSignedIn":`تم تسجيل الدخول`,"ai.oauthSignedInUntil":`تم تسجيل الدخول حتى {time}`,"ai.oauthSignedOut":`لم يتم تسجيل الدخول`,"ai.oauthWaiting":`أكمل تسجيل الدخول في المتصفح…`,"ai.oauthDeviceCode":`افتح هذه الصفحة وأدخل الرمز أدناه:`,"ai.oauthFailed":`تعذّر تسجيل الدخول: {error}`,"ai.remoteProblemFlow":`اختر طريقة تسجيل الدخول.`,"ai.remoteProblemIssuer":`يجب أن يكون عنوان خادم التفويض https.`,"ai.remoteProblemClient":`أدخل معرّف عميل، أو دع Archyne يسجّل نفسه.`,"ai.oauthFlowMachine":`بهوية هذا التطبيق، دون شخص (client credentials)`,"ai.oauthClientAuth":`مصادقة العميل`,"ai.oauthClientAuthAuto":`تلقائي`,"ai.oauthClientAuthBasic":`سرّ العميل في ترويسة Basic`,"ai.oauthClientAuthPost":`سرّ العميل في نص الطلب`,"ai.oauthClientAuthKey":`مفتاح خاص (تأكيد موقّع)`,"ai.oauthClientAuthTls":`شهادة العميل (TLS متبادل)`,"ai.oauthKeyId":`معرّف المفتاح`,"ai.oauthDpop":`ربط الرموز بمفتاح محفوظ على هذا الحاسوب (DPoP)، إذا كان الخادم يدعم ذلك`,"ai.oauthPrivateKey":`المفتاح الخاص`,"ai.tlsClientCertificate":`تقديم شهادة عميل (TLS متبادل)`,"ai.tlsHint":`تُستخدم للخدمة ولخادم تسجيل الدخول الخاص بها، عبر https فقط. لا تستخدم هذه الطلبات شهادات النظام: إذا كانت شهادة الخادم صادرة عن المرجع المصدّق لشركتك، فأضفه أدناه.`,"ai.tlsCert":`شهادة العميل`,"ai.tlsKey":`مفتاح الشهادة`,"ai.tlsPassphrase":`عبارة مرور المفتاح (إن وُجدت)`,"ai.tlsCa":`مرجع مصدّق إضافي موثوق (اختياري)`,"ai.remoteProblemTlsHttps":`تتطلب شهادة العميل عنوان https.`,"ai.remoteProblemTlsClientAuth":`تتطلب المصادقة بشهادة العميل شهادة عميل: فعّلها أدناه.`,"tpl.title":`ابدأ من قالب`,"tpl.blank":`مخطط فارغ`,"tpl.blankDesc":`{kind} فارغ لتبنيه بنفسك.`,"tpl.open":`القوالب`,"tpl.approval":`سير عمل الموافقات`,"tpl.approvalDesc":`قرارات متفرعة بنتيجتين.`,"tpl.auth":`تدفق تسجيل الدخول`,"tpl.authDesc":`رسائل بين المستخدم والتطبيق والخدمة، مع كتلة alt.`,"tpl.orders":`مخطط الطلبات`,"tpl.ordersDesc":`العملاء والطلبات والمنتجات بعلاقات قدم الغراب.`,"tpl.webapp":`تطبيق ويب`,"tpl.webappDesc":`نشر سحابي بمجموعات متداخلة وأيقونات المزوّدين.`,"tpl.orderState":`دورة حياة الطلب`,"tpl.orderStateDesc":`الحالات والانتقالات من مسودة إلى مُسلَّم.`,"tpl.domain":`نموذج المجال`,"tpl.domainDesc":`فئات بحقول وطرق وعلاقات.`,"tpl.context":`سياق النظام`,"tpl.contextDesc":`الأشخاص والأنظمة حول منتج واحد، بأسلوب C4.`,"toolbar.more":`المزيد`,"panel.resize":`تغيير عرض اللوحة الجانبية`,"panel.resizeHint":`اسحب لتغيير العرض، وانقر نقرًا مزدوجًا لإعادة الضبط`,"editor.format":`تنسيق`,"editor.formatHint":`ترتيب المسافات البادئة (Shift+Alt+F)`,"editor.formatCommand":`تنسيق كود Mermaid`,"editor.fontSize":`حجم النص`,"editor.fontSmaller":`نص أصغر`,"editor.fontLarger":`نص أكبر`,"editor.fontReset":`إعادة ضبط حجم النص`,"editor.metaFolded":`بيانات التخطيط التي يكتبها Archyne في الملف. انقر للفتح.`,"shortcuts.editor":`محرر الكود`,"error.title":`حدث خطأ ما`,"error.reload":`إعادة التحميل`};export{e as messages};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
var e={fontFamily:`"Segoe UI", system-ui, sans-serif`,palette:{dark:{bg:`#0f1014`,text:`#ebebf0`,nodeFill:`#1c1f2b`,nodeStroke:`#7e8bdd`,edge:`#8b91a3`,edgeLabel:`#e6e9f0`,edgeLabelBg:`#20242f`,markerHollow:`#12141a`},light:{bg:`#f6f6f9`,text:`#161827`,nodeFill:`#ffffff`,nodeStroke:`#384abc`,edge:`#5f6673`,edgeLabel:`#1c2230`,edgeLabelBg:`#ffffff`,markerHollow:`#ffffff`}},c4:{fill:`#2b5797`,stroke:`#1f4177`,text:`#ffffff`},borderWidth:1.5,shapeLabel:{padX:28,padY:8},stateNode:{padX:36,padY:24,minWidth:120,fontSize:12.5},tableNode:{minWidth:180,fontSize:12},tableTitle:{padX:24,padY:14,fontWeight:600},tableRows:{padX:0,padY:8},tableRow:{padX:24,padY:4,gap:8},erTypeColumn:{minWidth:48},tableRowKeys:{fontSize:10},tableRowMono:{fontFamily:`"Cascadia Code", Consolas, monospace`,fontSize:11.5},classAnnotation:{fontSize:10},participantHead:{padX:36,padY:24,minWidth:130},serviceNode:{padX:24,padY:20,minWidth:90,gap:6},serviceLabel:{fontSize:11.5,maxWidth:130},c4Node:{padX:32,padY:24,minWidth:170,maxWidth:230},c4Head:{size:26,marginBottom:4},c4Tag:{fontSize:10},c4Label:{fontSize:13,fontWeight:600},c4Descr:{fontSize:11},groupTitle:{padX:20,padY:12,fontSize:11},noteNode:{padX:28,padY:22,minWidth:140,maxWidth:220,fontSize:12,lineHeight:1.45}},t=e.borderWidth,n=e.borderWidth*2,r=e.fontFamily;function i(e,t){return{family:r,size:e,...t?{weight:t}:{}}}var a={width:64,height:32},o={shape:{padX:e.shapeLabel.padX,padY:e.shapeLabel.padY,border:0,minWidth:0},state:{padX:e.stateNode.padX,padY:e.stateNode.padY,border:n,minWidth:e.stateNode.minWidth},table:{padX:0,padY:0,border:n,minWidth:e.tableNode.minWidth},participant:{padX:e.participantHead.padX,padY:e.participantHead.padY,border:n,minWidth:e.participantHead.minWidth},service:{padX:e.serviceNode.padX,padY:e.serviceNode.padY,border:n,minWidth:e.serviceNode.minWidth,gap:e.serviceNode.gap},c4:{padX:e.c4Node.padX,padY:e.c4Node.padY,border:n,minWidth:e.c4Node.minWidth,maxWidth:e.c4Node.maxWidth},note:{padX:e.noteNode.padX,padY:e.noteNode.padY,border:0,minWidth:e.noteNode.minWidth,maxWidth:e.noteNode.maxWidth}},s={padX:e.tableTitle.padX,padY:e.tableTitle.padY,rule:1},c={padX:e.groupTitle.padX,padY:e.groupTitle.padY},l={padY:e.tableRows.padY,rowPadX:e.tableRow.padX,rowPadY:e.tableRow.padY,gap:e.tableRow.gap},u=e.erTypeColumn.minWidth,d=e.c4Head.size+e.c4Head.marginBottom,f=e.noteNode.lineHeight,p={state:i(e.stateNode.fontSize),table:i(e.tableNode.fontSize),tableTitle:i(e.tableNode.fontSize,e.tableTitle.fontWeight),keys:i(e.tableRowKeys.fontSize),mono:{family:e.tableRowMono.fontFamily,size:e.tableRowMono.fontSize},annotation:i(e.classAnnotation.fontSize),service:i(e.serviceLabel.fontSize),c4Label:i(e.c4Label.fontSize,e.c4Label.fontWeight),c4Tag:i(e.c4Tag.fontSize),c4Descr:i(e.c4Descr.fontSize),note:i(e.noteNode.fontSize),groupTitle:i(e.groupTitle.fontSize),label:i(12)},m=e.palette,h=e.c4,g=e.serviceLabel.maxWidth,_=new Set([`L`,`R`,`T`,`B`]);function v(e,t){return typeof e==`string`&&_.has(e)?e:t}function y(e){let t=e.getGroups?.()??[],n=e.getServices?.()??[],r=e.getJunctions?.()??[],i=e.getEdges?.()??[],a=[],o=e=>{if(a.some(t=>t.id===e))return;let n=t.find(t=>String(t.id)===e);if(!n)return;let r=n.in?String(n.in):void 0;r&&o(r);let i={id:e,type:`group`,position:{x:0,y:0},data:{label:String(n.title??e),subgraphId:e,...n.icon?{icon:String(n.icon)}:{}},style:{width:340,height:240},...r?{parentId:r}:{}};a.push(i)};for(let e of t)o(String(e.id));for(let e of n){let t=e.in?String(e.in):void 0,n={id:String(e.id),type:`service`,position:{x:0,y:0},data:{label:e.title==null?``:String(e.title),icon:e.icon==null?``:String(e.icon),direction:`TB`},...t?{parentId:t}:{}};a.push(n)}for(let e of r){let t=e.in?String(e.in):void 0,n={id:String(e.id),type:`junction`,position:{x:0,y:0},data:{},...t?{parentId:t}:{}};a.push(n)}let s=new Set,c=new Set;for(let e of i){let t=`${e.lhsId}-${e.rhsId}`;s.has(t)&&c.add(t),s.add(t)}return{nodes:a,edges:i.map((e,t)=>{let n={lhsDir:v(e.lhsDir,`R`),rhsDir:v(e.rhsDir,`L`),lhsInto:!!e.lhsInto,rhsInto:!!e.rhsInto,lhsGroup:!!e.lhsGroup,rhsGroup:!!e.rhsGroup};return{id:`e${t}_${e.lhsId}_${e.rhsId}`,source:String(e.lhsId),target:String(e.rhsId),sourceHandle:n.lhsDir,targetHandle:n.rhsDir,data:{label:String(e.title??``),arch:n}}}),...c.size>0?{warning:`mermaid can render only ONE connection per ordered pair of services — duplicated: ${[...c].join(`, `)}. The canvas shows them, but preview/render will fail until the extra edges are removed.`}:{}}}function b(e,t){let n=[`architecture-beta`],r=e=>e.parentId?` in ${e.parentId}`:``,i=e=>e?`(${e})`:``,a=e=>e?`[${e}]`:``;for(let t of e)t.type===`group`&&n.push(` group ${t.id}${i(t.data.icon)}${a(t.data.label)}${r(t)}`);for(let t of e)t.type===`service`?n.push(` service ${t.id}${i(t.data.icon)}${a(t.data.label)}${r(t)}`):t.type===`junction`&&n.push(` junction ${t.id}${r(t)}`);t.length>0&&n.push(``);for(let e of t){let t=e.data?.arch;if(!t)continue;let r=`${e.source}${t.lhsGroup?`{group}`:``}:${t.lhsDir}`,i=`${t.rhsDir}:${e.target}${t.rhsGroup?`{group}`:``}`,a=e.data?.label?`[${e.data.label}]`:``,o=`${t.lhsInto?`<`:``}-${a}-${t.rhsInto?`>`:``}`;n.push(` ${r} ${o} ${i}`)}return n.join(`
|
|
2
|
+
`)+`
|
|
3
|
+
`}export{h as a,u as c,f as d,m as f,i as g,s as h,o as i,p as l,l as m,b as n,d as o,g as p,t as r,a as s,y as t,c as u};
|