jishushell 0.4.30 → 0.5.22
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/Dockerfile.hermes-slim +2 -5
- package/apps/anythingllm-container.yaml +287 -0
- package/apps/browserless-chromium-container.yaml +18 -6
- package/apps/filebrowser-container.yaml +164 -0
- package/apps/ollama-binary.yaml +44 -0
- package/apps/ollama-with-hollama-binary.yaml +45 -1
- package/apps/openclaw-binary.yaml +8 -0
- package/apps/openclaw-container.yaml +9 -1
- package/apps/openclaw-with-searxng-container.yaml +4 -0
- package/apps/searxng-container.yaml +5 -4
- package/apps/weknora-container.yaml +471 -0
- package/dist/cli/doctor.js +144 -16
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/panel.js.map +1 -1
- package/dist/config.d.ts +19 -0
- package/dist/config.js +99 -1
- package/dist/config.js.map +1 -1
- package/dist/install.js +4 -4
- package/dist/install.js.map +1 -1
- package/dist/routes/auth.js +2 -2
- package/dist/routes/auth.js.map +1 -1
- package/dist/routes/backup.js +64 -11
- package/dist/routes/backup.js.map +1 -1
- package/dist/routes/external-mounts.d.ts +17 -0
- package/dist/routes/external-mounts.js +73 -0
- package/dist/routes/external-mounts.js.map +1 -0
- package/dist/routes/file-mounts.d.ts +13 -0
- package/dist/routes/file-mounts.js +90 -0
- package/dist/routes/file-mounts.js.map +1 -0
- package/dist/routes/files-organize.d.ts +28 -0
- package/dist/routes/files-organize.js +167 -0
- package/dist/routes/files-organize.js.map +1 -0
- package/dist/routes/files.d.ts +31 -0
- package/dist/routes/files.js +321 -0
- package/dist/routes/files.js.map +1 -0
- package/dist/routes/instances.js +87 -12
- package/dist/routes/instances.js.map +1 -1
- package/dist/routes/internal.d.ts +2 -0
- package/dist/routes/internal.js +59 -0
- package/dist/routes/internal.js.map +1 -0
- package/dist/routes/llm.js +29 -0
- package/dist/routes/llm.js.map +1 -1
- package/dist/routes/setup.js +9 -9
- package/dist/routes/setup.js.map +1 -1
- package/dist/routes/system.js +1 -1
- package/dist/routes/system.js.map +1 -1
- package/dist/routes/webdav.d.ts +17 -0
- package/dist/routes/webdav.js +114 -0
- package/dist/routes/webdav.js.map +1 -0
- package/dist/server.js +358 -6
- package/dist/server.js.map +1 -1
- package/dist/services/agent-apps/catalog.d.ts +3 -0
- package/dist/services/agent-apps/catalog.js +40 -13
- package/dist/services/agent-apps/catalog.js.map +1 -1
- package/dist/services/agent-apps/installers/shell-script.d.ts +1 -1
- package/dist/services/agent-apps/installers/shell-script.js +19 -2
- package/dist/services/agent-apps/installers/shell-script.js.map +1 -1
- package/dist/services/agent-apps/types.d.ts +3 -0
- package/dist/services/app/app-compiler.d.ts +1 -1
- package/dist/services/app/app-compiler.js +5 -5
- package/dist/services/app/app-compiler.js.map +1 -1
- package/dist/services/app/app-manager.d.ts +9 -0
- package/dist/services/app/app-manager.js +248 -43
- package/dist/services/app/app-manager.js.map +1 -1
- package/dist/services/app/custom-manager.js.map +1 -1
- package/dist/services/app/hermes-agent-manager.js +1 -0
- package/dist/services/app/hermes-agent-manager.js.map +1 -1
- package/dist/services/app/ollama-manager.js +1 -1
- package/dist/services/app/ollama-manager.js.map +1 -1
- package/dist/services/app/openclaw-manager.js +37 -5
- package/dist/services/app/openclaw-manager.js.map +1 -1
- package/dist/services/app/platform-transform.d.ts +32 -0
- package/dist/services/app/platform-transform.js +65 -0
- package/dist/services/app/platform-transform.js.map +1 -0
- package/dist/services/app-passwords.d.ts +61 -0
- package/dist/services/app-passwords.js +173 -0
- package/dist/services/app-passwords.js.map +1 -0
- package/dist/services/backup-manager.d.ts +11 -0
- package/dist/services/backup-manager.js +220 -8
- package/dist/services/backup-manager.js.map +1 -1
- package/dist/services/capability-endpoint-validator.js +26 -7
- package/dist/services/capability-endpoint-validator.js.map +1 -1
- package/dist/services/connection-apply.d.ts +2 -0
- package/dist/services/connection-apply.js +55 -1
- package/dist/services/connection-apply.js.map +1 -1
- package/dist/services/connection-resolver.js +1 -1
- package/dist/services/connection-resolver.js.map +1 -1
- package/dist/services/connection-transactor.d.ts +2 -0
- package/dist/services/connection-transactor.js +12 -2
- package/dist/services/connection-transactor.js.map +1 -1
- package/dist/services/external-mounts.d.ts +40 -0
- package/dist/services/external-mounts.js +187 -0
- package/dist/services/external-mounts.js.map +1 -0
- package/dist/services/files-manager.d.ts +252 -0
- package/dist/services/files-manager.js +1075 -0
- package/dist/services/files-manager.js.map +1 -0
- package/dist/services/files-mounts.d.ts +42 -0
- package/dist/services/files-mounts.js +207 -0
- package/dist/services/files-mounts.js.map +1 -0
- package/dist/services/instance-manager.js +90 -32
- package/dist/services/instance-manager.js.map +1 -1
- package/dist/services/llm-proxy/index.d.ts +28 -0
- package/dist/services/llm-proxy/index.js +76 -3
- package/dist/services/llm-proxy/index.js.map +1 -1
- package/dist/services/llm-proxy/ssrf.js +6 -2
- package/dist/services/llm-proxy/ssrf.js.map +1 -1
- package/dist/services/llm-proxy/validate-key.d.ts +41 -0
- package/dist/services/llm-proxy/validate-key.js +672 -0
- package/dist/services/llm-proxy/validate-key.js.map +1 -0
- package/dist/services/macos-launchd.d.ts +89 -0
- package/dist/services/macos-launchd.js +273 -0
- package/dist/services/macos-launchd.js.map +1 -0
- package/dist/services/nomad-manager.d.ts +11 -0
- package/dist/services/nomad-manager.js +343 -98
- package/dist/services/nomad-manager.js.map +1 -1
- package/dist/services/organize/applier.d.ts +46 -0
- package/dist/services/organize/applier.js +218 -0
- package/dist/services/organize/applier.js.map +1 -0
- package/dist/services/organize/rules.d.ts +57 -0
- package/dist/services/organize/rules.js +286 -0
- package/dist/services/organize/rules.js.map +1 -0
- package/dist/services/organize/scanner.d.ts +50 -0
- package/dist/services/organize/scanner.js +366 -0
- package/dist/services/organize/scanner.js.map +1 -0
- package/dist/services/organize/store.d.ts +14 -0
- package/dist/services/organize/store.js +82 -0
- package/dist/services/organize/store.js.map +1 -0
- package/dist/services/panel-manager.js +40 -11
- package/dist/services/panel-manager.js.map +1 -1
- package/dist/services/process-manager.js +3 -2
- package/dist/services/process-manager.js.map +1 -1
- package/dist/services/runtime/adapters/custom.js +56 -0
- package/dist/services/runtime/adapters/custom.js.map +1 -1
- package/dist/services/runtime/adapters/hermes.d.ts +4 -3
- package/dist/services/runtime/adapters/hermes.js +166 -64
- package/dist/services/runtime/adapters/hermes.js.map +1 -1
- package/dist/services/runtime/adapters/openclaw-routes.d.ts +8 -2
- package/dist/services/runtime/adapters/openclaw-routes.js +68 -0
- package/dist/services/runtime/adapters/openclaw-routes.js.map +1 -1
- package/dist/services/runtime/adapters/openclaw.d.ts +118 -0
- package/dist/services/runtime/adapters/openclaw.js +1459 -49
- package/dist/services/runtime/adapters/openclaw.js.map +1 -1
- package/dist/services/runtime/instance.d.ts +1 -1
- package/dist/services/runtime/instance.js +1 -1
- package/dist/services/runtime/instance.js.map +1 -1
- package/dist/services/runtime/mcp-shims/anythingllm-shim.d.ts +46 -0
- package/dist/services/runtime/mcp-shims/anythingllm-shim.js +281 -0
- package/dist/services/runtime/mcp-shims/anythingllm-shim.js.map +1 -0
- package/dist/services/runtime/mcp-shims/drive-shim.d.ts +54 -0
- package/dist/services/runtime/mcp-shims/drive-shim.js +489 -0
- package/dist/services/runtime/mcp-shims/drive-shim.js.map +1 -0
- package/dist/services/runtime/types.d.ts +31 -0
- package/dist/services/setup-manager.js +190 -68
- package/dist/services/setup-manager.js.map +1 -1
- package/dist/services/suggestions.js.map +1 -1
- package/dist/services/update-manager.js +32 -14
- package/dist/services/update-manager.js.map +1 -1
- package/dist/services/webdav/server.d.ts +24 -0
- package/dist/services/webdav/server.js +420 -0
- package/dist/services/webdav/server.js.map +1 -0
- package/dist/services/webdav/xml-builder.d.ts +73 -0
- package/dist/services/webdav/xml-builder.js +156 -0
- package/dist/services/webdav/xml-builder.js.map +1 -0
- package/dist/services/workspace-builder.d.ts +29 -0
- package/dist/services/workspace-builder.js +188 -0
- package/dist/services/workspace-builder.js.map +1 -0
- package/dist/types.d.ts +61 -0
- package/dist/utils/path-locks.d.ts +30 -0
- package/dist/utils/path-locks.js +63 -0
- package/dist/utils/path-locks.js.map +1 -0
- package/dist/utils/path-safety.d.ts +41 -0
- package/dist/utils/path-safety.js +119 -0
- package/dist/utils/path-safety.js.map +1 -0
- package/dist/utils/safe-write.d.ts +24 -0
- package/dist/utils/safe-write.js +82 -0
- package/dist/utils/safe-write.js.map +1 -0
- package/install/jishu-install.sh +247 -35
- package/install/jishu-uninstall.sh +45 -5
- package/package.json +20 -2
- package/public/assets/ApiKeyField-CvyAOcJS.js +1 -0
- package/public/assets/Dashboard-AuJESBlJ.js +1 -0
- package/public/assets/{HermesChatPanel-_GHoklgo.js → HermesChatPanel-CByPREwb.js} +1 -1
- package/public/assets/HermesConfigForm-DRda8FKX.js +4 -0
- package/public/assets/InitPassword-ka4wNpM5.js +1 -0
- package/public/assets/InstanceDetail-Cg1nS8HX.js +92 -0
- package/public/assets/Login-aPajuQzf.js +1 -0
- package/public/assets/NewInstance-Dd1ebNIx.js +1 -0
- package/public/assets/ProviderRecommendations-DFmADQ7V.js +1 -0
- package/public/assets/Settings-BYQnbLYL.js +1 -0
- package/public/assets/Setup-D05lwDOV.js +1 -0
- package/public/assets/WeixinLoginPanel-D89kdhP4.js +9 -0
- package/public/assets/index-HSXCsceK.css +1 -0
- package/public/assets/index-bnBu0nlQ.js +19 -0
- package/public/assets/registry-C_qeFTkZ.js +2 -0
- package/public/assets/usePolling-Bn93fe7M.js +1 -0
- package/public/assets/{vendor-i18n-ucpM0OR0.js → vendor-i18n-flxcMVeP.js} +2 -2
- package/public/assets/{vendor-react-Bk1hRGiY.js → vendor-react-ZC5T_huj.js} +7 -7
- package/public/index.html +4 -4
- package/scripts/check-app-spec.mjs +18 -4
- package/scripts/check-colima-launchd.mjs +230 -0
- package/scripts/check-new-file-tests.mjs +230 -0
- package/scripts/check-quarantine-expiry.mjs +105 -0
- package/scripts/perf/README.md +49 -0
- package/scripts/perf/auth.js +99 -0
- package/scripts/perf/config.js +63 -0
- package/scripts/perf/instances.js +143 -0
- package/scripts/perf/proxy.js +96 -0
- package/scripts/smoke/files-w1.sh +142 -0
- package/scripts/smoke-backend.mjs +122 -0
- package/scripts/smoke-post-publish.mjs +346 -0
- package/public/assets/Dashboard-rkWp-CXd.js +0 -1
- package/public/assets/HermesConfigForm-anDnwUp_.js +0 -4
- package/public/assets/InitPassword-ZU9_-hDr.js +0 -1
- package/public/assets/InstanceDetail-CN0FH1aw.js +0 -92
- package/public/assets/Login-BItXqYAJ.js +0 -1
- package/public/assets/NewInstance-BousE6kY.js +0 -1
- package/public/assets/ProviderRecommendations-DFYj7Fb6.js +0 -1
- package/public/assets/Settings-Bttc6QmM.js +0 -1
- package/public/assets/Setup-Bsxx1zgj.js +0 -1
- package/public/assets/WeixinLoginPanel-DPZpAKgO.js +0 -9
- package/public/assets/index-8xZy1z5k.css +0 -1
- package/public/assets/index-Dw3HhUYE.js +0 -19
- package/public/assets/input-paste-CrNVAyOy.js +0 -1
- package/public/assets/providers-DtNXh9JD.js +0 -1
- package/public/assets/registry-5s2UB6is.js +0 -2
- package/public/assets/usePolling-Do5Erqm_.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{aE as ye,ab as Ne,a9 as Fe,G as we,a5 as e,g as Me,f as ke,r as Se,ap as Ae,aa as Ce,af as Ie,n as Ke,aB as Ue,ao as $e,R as Pe,B as Le}from"./index-bnBu0nlQ.js";import{c as d}from"./vendor-react-ZC5T_huj.js";import{P as Ee}from"./ProviderRecommendations-DFmADQ7V.js";import{P as I,A as ae}from"./ApiKeyField-CvyAOcJS.js";import{u as G}from"./vendor-i18n-flxcMVeP.js";function He({showToast:a}){var se;const{t:s}=G("settings"),{t:F}=G("instance"),{t:w}=G("common"),[b,M]=d.useState([]),[H,f]=d.useState(!0),[x,B]=d.useState(null),[K,D]=d.useState(!1),[j,U]=d.useState(!1),[_,W]=d.useState(null),[y,N]=d.useState([]),[n,r]=d.useState(""),[m,$]=d.useState(""),[c,R]=d.useState(""),[z,k]=d.useState(""),[V,J]=d.useState(""),[Z,T]=d.useState(!1),[S,P]=d.useState([]),[de,re]=d.useState("idle"),ne={name:"",baseUrl:"",api:"openai",apiKey:"",authHeader:"",selectedModelId:""},[i,v]=d.useState(ne),[ie,oe]=d.useState("idle"),A=d.useCallback(()=>{f(!0),Ce().then(M).catch(()=>M([])).finally(()=>f(!1))},[]);d.useEffect(()=>{A()},[A]);const C="w-full bg-[var(--input-bg)] border border-[var(--border)] rounded-md px-3 py-2 text-sm text-foreground placeholder-[var(--muted)] focus:outline-none focus:ring-1 focus:ring-[#0066FF]/60 focus:border-[#0066FF]/60 transition-colors duration-200",O="w-full bg-background border border-[var(--border)] rounded-md px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-[#0066FF]/60 focus:border-[#0066FF]/60 transition-colors duration-200 appearance-none",ce=()=>{B(null),r(""),$(""),R(""),k(""),J(""),P([]),N([]),D(!0)},me=l=>{D(!1),N([]),v({name:l.name||l.id,baseUrl:l.baseUrl,api:l.api,apiKey:"",authHeader:l.authHeader||"",selectedModelId:l.selectedModelId||""}),B(l.id)},q=()=>{D(!1),B(null),N([]),r(""),$(""),R(""),k(""),J(""),P([])},ee=d.useCallback(l=>{const t=I.find(h=>h.id===l);r(l),R((t==null?void 0:t.baseUrl)||""),k(""),P([])},[]),ue=async()=>{var te;if(!n){a(s("llm.presetRequired"),"error");return}const l=I.find(u=>u.id===n),t=l.local===!0;if(!t&&!m.trim()){a(s("llm.apiKeyRequired"),"error");return}if(t&&!c.trim()&&!l.baseUrl){a(s("llm.baseUrlRequired"),"error");return}const h=b.map(u=>u.id),L=V.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"");let E=L?`${n}-${L}`:n;if(h.includes(E)){if(L){a(s("llm.aliasConflict"),"error");return}let u=2;for(;h.includes(`${n}-${u}`);)u++;E=`${n}-${u}`}const Q=V.trim()?`${l.label} (${V.trim()})`:l.label,p=S.length>0?S.map(u=>({id:u.id,name:u.id,contextWindow:0})):l.models,X=z||((te=p[0])==null?void 0:te.id)||"";!t&&m.trim()&&de!=="valid"&&a(w("llm.saveWithoutValidation"),"error"),U(!0);try{await Ke({id:E,name:Q,baseUrl:(t?c.trim():void 0)||l.baseUrl,api:l.api,apiKey:m||void 0,authHeader:l.authHeader?"x-api-key":void 0,models:p,selectedModelId:X}),a(s("llm.added"),"success"),q(),A()}catch(u){a(u.message||s("llm.saveFailed"),"error")}finally{U(!1)}},xe=async(l,t={})=>{if(!n)return;const h=I.find(p=>p.id===n),L=h.authHeader?"x-api-key":"Authorization",E=h.local===!0&&c.trim()?c.trim():h.baseUrl,Q=m;T(!0);try{const{models:p}=await Ie(E,Q,L,h.id,h.api);P(p),p.length>0&&k(X=>X||p[0].id),t.silentSuccess||a(s("llm.modelsFetched",{count:p.length}),"success")}catch(p){a(p.message||s("llm.modelsFetchFailed"),"error")}finally{T(!1)}},pe=async()=>{if(x){if(!i.baseUrl.trim()){a(s("llm.baseUrlRequired"),"error");return}i.apiKey.trim()&&ie!=="valid"&&a(w("llm.saveWithoutValidation"),"error"),U(!0);try{await Ue(x,{name:i.name||x,baseUrl:i.baseUrl.trim(),api:i.api,apiKey:i.apiKey||void 0,authHeader:i.authHeader||void 0,selectedModelId:i.selectedModelId||void 0}),a(s("llm.updated"),"success"),q(),A()}catch(l){a(l.message||s("llm.saveFailed"),"error")}finally{U(!1)}}},he=async l=>{if(window.confirm(s("llm.confirmDelete",{id:l})))try{await Le(l),a(s("llm.deleted"),"success"),A()}catch(t){a(t.message||s("llm.deleteFailed"),"error")}},be=async l=>{try{await $e(l),a(s("llm.defaultSet",{id:l}),"success"),A()}catch(t){a(t.message,"error")}},ve=async l=>{W(l);try{const{models:t}=await Pe(l);N(t),a(s("llm.modelsFetched",{count:t.length}),"success")}catch(t){a(t.message||s("llm.modelsFetchFailed"),"error")}finally{W(null)}},ge=[...new Set(I.map(l=>l.group))],o=I.find(l=>l.id===n),le=(o==null?void 0:o.local)===!0,Y=S.length>0?S.map(l=>({id:l.id,label:l.id})):((o==null?void 0:o.models)||[]).map(l=>({id:l.id,label:`${l.name} (${Math.round(l.contextWindow/1e3)}K)`})),fe=e.jsxs("div",{className:"mt-3 border border-[var(--border)] rounded-lg p-4 space-y-3 bg-[var(--input-bg)]/40",children:[e.jsx("h3",{className:"text-sm font-medium",children:s("llm.addTitle")}),e.jsxs("div",{className:"space-y-3",children:[e.jsx(Ee,{title:s("llm.recommendedTitle"),description:s("llm.recommendedDescription"),apiKeyHint:s("llm.apiKeyHint"),selectedProviderId:n,onSelectProvider:ee}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs text-muted mb-1",children:s("llm.presetLabel")}),e.jsxs("select",{value:n,onChange:l=>ee(l.target.value),className:O,children:[e.jsx("option",{value:"",children:s("llm.presetPlaceholder")}),ge.map(l=>e.jsx("optgroup",{label:F(`configForm.providerGroup.${l}`,{defaultValue:l}),children:I.filter(t=>t.group===l).map(t=>e.jsx("option",{value:t.id,children:F(`configForm.providerLabel.${t.id}`,{defaultValue:t.label})},t.id))},l))]})]}),n&&e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs text-muted mb-1",children:s("llm.alias")}),e.jsx("input",{value:V,onChange:l=>J(l.target.value),placeholder:s("llm.aliasPlaceholder"),className:C}),e.jsx("p",{className:"text-[11px] text-muted mt-0.5",children:s("llm.aliasHint")})]}),n&&!le&&e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs text-muted mb-1",children:s("llm.fieldApiKey")}),e.jsx(ae,{value:m,saved:!1,onChange:l=>$(l),baseUrl:(o==null?void 0:o.local)===!0&&c.trim()?c.trim():(o==null?void 0:o.baseUrl)||"",api:(o==null?void 0:o.api)||"",authHeader:o!=null&&o.authHeader?"x-api-key":void 0,providerId:n,placeholder:s("llm.apiKeyPlaceholder"),onModels:l=>{P(l),l.length>0&&k(t=>t||l[0].id)},onStateChange:re,selectedModelId:z})]}),n&&le&&e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs text-muted mb-1",children:s("llm.fieldBaseUrl")}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{value:c,onChange:l=>R(l.target.value),className:`${C} flex-1`}),e.jsx("button",{type:"button",onClick:()=>{xe()},disabled:Z,className:"px-3 py-1.5 text-xs border border-[var(--border)] rounded-md hover:bg-[var(--input-bg)] disabled:opacity-40 transition-all whitespace-nowrap",children:s(Z?"llm.fetchingModels":"llm.fetchModels")})]})]}),n&&Y.length>0&&e.jsxs("div",{children:[e.jsxs("label",{className:"block text-xs text-muted mb-1",children:[s("llm.fieldModel"),S.length>0&&e.jsxs("span",{className:"ml-1 text-green-500 text-[10px]",children:["(",S.length," ",s("llm.liveModels"),")"]})]}),e.jsx("select",{value:z||((se=Y[0])==null?void 0:se.id)||"",onChange:l=>k(l.target.value),className:O,children:Y.map(l=>e.jsx("option",{value:l.id,children:l.label},l.id))})]})]}),e.jsxs("div",{className:"flex gap-2 pt-1",children:[e.jsx("button",{onClick:ue,disabled:j,className:"px-4 py-1.5 bg-[#0066FF] text-white rounded-md text-sm font-medium hover:bg-[#0066FF]/90 disabled:opacity-40 transition-all",children:s(j?"llm.saving":"llm.save")}),e.jsx("button",{onClick:q,className:"px-4 py-1.5 border border-[var(--border)] rounded-md text-sm hover:bg-[var(--input-bg)] transition-all",children:s("llm.cancel")})]})]}),g=b.find(l=>l.id===x),je=e.jsxs("div",{className:"mt-3 border border-[var(--border)] rounded-lg p-4 space-y-3 bg-[var(--input-bg)]/40",children:[e.jsx("h3",{className:"text-sm font-medium",children:s("llm.editTitle",{id:x})}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{className:"col-span-2",children:[e.jsx("label",{className:"block text-xs text-muted mb-1",children:s("llm.fieldName")}),e.jsx("input",{value:i.name,onChange:l=>v(t=>({...t,name:l.target.value})),placeholder:s("llm.fieldNamePlaceholder"),className:C})]}),e.jsxs("div",{className:"col-span-2",children:[e.jsxs("label",{className:"block text-xs text-muted mb-1",children:[s("llm.fieldBaseUrl")," *"]}),e.jsx("input",{value:i.baseUrl,onChange:l=>v(t=>({...t,baseUrl:l.target.value})),placeholder:"https://api.openai.com",className:C})]}),e.jsxs("div",{className:"col-span-2 sm:col-span-1",children:[e.jsx("label",{className:"block text-xs text-muted mb-1",children:s("llm.fieldApi")}),e.jsxs("select",{value:i.api,onChange:l=>v(t=>({...t,api:l.target.value})),className:O,children:[e.jsx("option",{value:"openai",children:"OpenAI"}),e.jsx("option",{value:"openai-completions",children:"OpenAI Completions"}),e.jsx("option",{value:"anthropic",children:"Anthropic"}),e.jsx("option",{value:"anthropic-messages",children:"Anthropic Messages"})]})]}),e.jsxs("div",{className:"col-span-2 sm:col-span-1",children:[e.jsx("label",{className:"block text-xs text-muted mb-1",children:s("llm.fieldAuthHeader")}),e.jsx("input",{value:i.authHeader,onChange:l=>v(t=>({...t,authHeader:l.target.value})),placeholder:"Authorization",className:C})]}),e.jsxs("div",{className:"col-span-2",children:[e.jsxs("label",{className:"block text-xs text-muted mb-1",children:[s("llm.fieldApiKey"),g!=null&&g.hasApiKey?` (${s("llm.apiKeyConfigured")})`:""]}),e.jsx(ae,{value:i.apiKey,saved:!!(g!=null&&g.hasApiKey),onChange:l=>v(t=>({...t,apiKey:l})),baseUrl:i.baseUrl.trim(),api:i.api,authHeader:i.authHeader||void 0,providerId:x||void 0,placeholder:g!=null&&g.hasApiKey?s("llm.apiKeyLeaveBlank"):s("llm.apiKeyPlaceholder"),onModels:l=>{N(l),l.length>0&&v(t=>({...t,selectedModelId:t.selectedModelId||l[0].id}))},onStateChange:oe,selectedModelId:i.selectedModelId})]}),e.jsxs("div",{className:"col-span-2",children:[e.jsx("label",{className:"block text-xs text-muted mb-1",children:s("llm.fieldModel")}),y.length>0?e.jsxs("select",{value:i.selectedModelId,onChange:l=>v(t=>({...t,selectedModelId:l.target.value})),className:O,children:[e.jsx("option",{value:"",children:s("llm.noModel")}),y.map(l=>e.jsx("option",{value:l.id,children:l.id},l.id))]}):e.jsx("input",{value:i.selectedModelId,onChange:l=>v(t=>({...t,selectedModelId:l.target.value})),placeholder:"gpt-4o",className:C})]})]}),e.jsxs("div",{className:"flex gap-2 pt-1",children:[e.jsx("button",{onClick:pe,disabled:j,className:"px-4 py-1.5 bg-[#0066FF] text-white rounded-md text-sm font-medium hover:bg-[#0066FF]/90 disabled:opacity-40 transition-all",children:s(j?"llm.saving":"llm.save")}),e.jsx("button",{onClick:q,className:"px-4 py-1.5 border border-[var(--border)] rounded-md text-sm hover:bg-[var(--input-bg)] transition-all",children:s("llm.cancel")})]})]});return e.jsxs("div",{className:"bg-[var(--card)] border border-[var(--border)] rounded-xl p-4",children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-sm font-medium text-foreground",children:s("llm.title")}),e.jsx("p",{className:"text-xs text-muted mt-0.5",children:s("llm.desc")})]}),!K&&!x&&e.jsxs("button",{onClick:ce,className:"px-3 py-1.5 bg-[#0066FF] text-white rounded-md text-xs font-medium hover:bg-[#0066FF]/90 transition-all",children:["+ ",s("llm.add")]})]}),K&&fe,H?e.jsx("p",{className:"text-sm text-muted py-3",children:s("llm.loading")}):b.length===0&&!K?e.jsx("p",{className:"text-sm text-muted py-3",children:s("llm.empty")}):e.jsx("div",{className:"space-y-2 mt-2",children:b.map(l=>e.jsxs("div",{className:`border rounded-lg p-3 transition-all ${l.isDefault?"border-[#0066FF]/40 bg-[#0066FF]/5":"border-[var(--border)]"}`,children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx("span",{className:"text-sm font-medium truncate",children:l.name||l.id}),l.isDefault&&e.jsx("span",{className:"text-[10px] px-1.5 py-0.5 bg-[#0066FF]/15 text-[#0066FF] rounded font-medium",children:s("llm.default")}),e.jsx("span",{className:"text-[10px] px-1.5 py-0.5 bg-[var(--input-bg)] text-muted rounded",children:l.api}),l.hasApiKey&&e.jsx("span",{className:"text-[10px] text-green-500",children:"🔑"})]}),e.jsx("p",{className:"text-xs text-muted truncate mt-0.5",children:l.baseUrl}),l.selectedModelId&&e.jsxs("p",{className:"text-xs text-muted mt-0.5",children:[s("llm.model"),": ",e.jsx("span",{className:"font-mono",children:l.selectedModelId})]})]}),e.jsxs("div",{className:"flex gap-1 flex-shrink-0",children:[!l.isDefault&&e.jsx("button",{onClick:()=>be(l.id),className:"px-2 py-1 text-xs border border-[var(--border)] rounded hover:bg-[var(--input-bg)] transition-all",children:s("llm.setDefault")}),e.jsx("button",{onClick:()=>{me(l),ve(l.id)},disabled:_===l.id,className:"px-2 py-1 text-xs border border-[var(--border)] rounded hover:bg-[var(--input-bg)] transition-all disabled:opacity-40",children:_===l.id?"...":s("llm.edit")}),e.jsx("button",{onClick:()=>he(l.id),disabled:b.length<=1,title:b.length<=1?s("llm.deleteLastForbidden"):void 0,className:"px-2 py-1 text-xs border border-red-500/30 text-red-400 rounded hover:bg-red-500/10 transition-all disabled:opacity-30 disabled:cursor-not-allowed disabled:pointer-events-none",children:s("llm.delete")})]})]}),x===l.id&&je,_===null&&y.length>0&&x!==l.id&&e.jsxs("div",{className:"mt-2 pt-2 border-t border-[var(--border)]",children:[e.jsxs("p",{className:"text-xs text-muted mb-1",children:[s("llm.availableModels")," (",y.length,")"]}),e.jsx("div",{className:"flex flex-wrap gap-1 max-h-20 overflow-y-auto",children:y.map(t=>e.jsx("span",{className:"text-[11px] font-mono px-1.5 py-0.5 bg-[var(--input-bg)] rounded",children:t.id},t.id))})]})]},l.id))})]})}function Oe(){const{t:a}=G("settings"),{system:s,showToast:F}=ye(),[w,b]=d.useState(""),[M,H]=d.useState(""),[f,x]=d.useState(!1),[B,K]=d.useState([]),[D,j]=d.useState(!1),[U,_]=d.useState(!1),[W,y]=d.useState(!1);d.useEffect(()=>{j(!0),Ne().then(K).catch(()=>{}).finally(()=>j(!1)),Fe().then(async r=>{try{const m=await Promise.all(r.map(c=>we(c.id).catch(()=>({enabled:!1})))),$=r.length>0&&m.every(c=>c==null?void 0:c.enabled);y($)}catch{}}).catch(()=>{})},[]);const N=async r=>{r.preventDefault();try{const m=await Se(w,M);m.token&&Ae(m.token),F(a("password.updated"),"success"),b(""),H("")}catch(m){F(m.message||a("password.failed"),"error")}},n="w-full bg-[var(--input-bg)] border border-[var(--border)] rounded-md px-3 py-2 text-sm text-foreground placeholder-[var(--muted)] focus:outline-none focus:ring-1 focus:ring-[#0066FF]/60 focus:border-[#0066FF]/60 transition-colors duration-200";return e.jsxs("div",{className:"p-6 2xl:px-6 2xl:py-4 max-w-4xl xl:max-w-5xl 2xl:max-w-none mx-auto",children:[e.jsxs("div",{className:"mb-5",children:[e.jsx("h1",{className:"text-lg font-semibold text-foreground",children:a("title")}),e.jsx("p",{className:"text-sm text-muted mt-0.5",children:a("subtitle")})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"bg-[var(--card)] border border-[var(--border)] rounded-xl p-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-sm font-medium text-foreground",children:a("proxy.title")}),e.jsx("p",{className:"text-sm text-muted mt-1",children:a("proxy.desc")})]}),e.jsx("div",{className:"mt-3 bg-red-500/10 border border-red-500/20 text-red-400 text-sm rounded-lg px-4 py-3",children:a("proxy.status")})]}),e.jsx(He,{showToast:F}),e.jsxs("div",{className:"bg-[var(--card)] border border-[var(--border)] rounded-xl p-4",children:[e.jsx("h2",{className:"text-sm font-medium text-foreground mb-3",children:a("password.title")}),e.jsxs("form",{onSubmit:N,className:"space-y-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm text-muted mb-1.5",children:a("password.current")}),e.jsxs("div",{className:"relative",children:[e.jsx("input",{type:f?"text":"password",value:w,onChange:r=>b(r.target.value),placeholder:a("password.currentPlaceholder"),className:`${n} pr-9`}),e.jsx("button",{type:"button",onClick:()=>x(!f),"aria-label":a("common:action.togglePassword"),className:"absolute right-2.5 top-1/2 -translate-y-1/2 text-muted hover:text-foreground transition-colors",children:f?e.jsx(Me,{className:"w-3.5 h-3.5"}):e.jsx(ke,{className:"w-3.5 h-3.5"})})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm text-muted mb-1.5",children:a("password.new")}),e.jsx("input",{type:f?"text":"password",value:M,onChange:r=>H(r.target.value),placeholder:a("password.newPlaceholder"),className:n})]}),e.jsx("button",{type:"submit",disabled:!w||M.length<8,className:"px-4 py-2 bg-[#0066FF] text-white rounded-md text-sm font-medium hover:bg-[#0066FF]/90 disabled:opacity-40 transition-all duration-200",children:a("password.submit")})]})]}),s&&e.jsxs("div",{className:"bg-[var(--card)] border border-[var(--border)] rounded-xl p-4",children:[e.jsx("h2",{className:"text-sm font-medium text-foreground mb-3",children:a("system.title")}),e.jsxs("div",{className:"space-y-3",children:[[{label:a("system.cpuUsage"),value:`${s.cpu_percent}%`,percent:s.cpu_percent,warn:s.cpu_percent>90,color:"bg-[#0066FF]"},{label:a("system.memory"),value:`${s.memory.used_mb}MB / ${s.memory.total_mb}MB (${s.memory.percent}%)`,percent:s.memory.percent,warn:!1,color:"bg-[#00D4AA]"},{label:a("system.disk"),value:`${s.disk.used_gb}GB / ${s.disk.total_gb}GB (${s.disk.percent}%)`,percent:s.disk.percent,warn:s.disk.percent>90,color:"bg-[#0066FF]"}].map(r=>e.jsxs("div",{children:[e.jsxs("div",{className:"flex justify-between text-sm mb-1.5",children:[e.jsx("span",{className:"text-muted",children:r.label}),e.jsx("span",{className:`font-medium font-mono text-[13px] ${r.warn?"text-red-400":"text-foreground"}`,children:r.value})]}),e.jsx("div",{className:"w-full bg-[var(--input-bg)] rounded-full h-1.5",children:e.jsx("div",{className:`h-1.5 rounded-full transition-all duration-500 ${r.warn?"bg-red-500":r.color}`,style:{width:`${r.percent}%`}})})]},r.label)),s.temperature&&e.jsxs("div",{className:"flex justify-between text-sm pt-2 border-t border-[var(--border)]",children:[e.jsx("span",{className:"text-muted",children:a("system.cpuTemp")}),e.jsxs("span",{className:"font-medium font-mono text-[13px] text-foreground",children:[s.temperature,"°C"]})]})]})]}),e.jsxs("div",{className:"bg-[var(--card)] border border-[var(--border)] rounded-xl p-4",children:[e.jsx("h2",{className:"text-sm font-medium text-foreground mb-2",children:a("about.title")}),e.jsx("div",{className:"text-sm text-muted space-y-1",children:e.jsxs("p",{children:["JishuShell ","0.5.22"]})})]})]})]})}export{Oe as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Y as re,Z as we,af as Fe,a5 as e,L as Se,T as _e,am as ne,a2 as E,ar as Ce,ak as Ie,a4 as Me,aC as Te}from"./index-bnBu0nlQ.js";import{c}from"./vendor-react-ZC5T_huj.js";import{P as k,A as Le}from"./ApiKeyField-CvyAOcJS.js";import{u as Pe}from"./registry-C_qeFTkZ.js";import{P as Re}from"./ProviderRecommendations-DFmADQ7V.js";import{u as oe}from"./vendor-i18n-flxcMVeP.js";function ie(i,p){var n,j;if(!i)return!1;const t=(n=i.runtimes)==null?void 0:n[p];return t?!!t.installed&&!!t.imageReady:p==="openclaw"?!!((j=i.openclaw)!=null&&j.installed)&&!!i.dockerImageReady:!1}function Ae(i,p){var n;const t=(n=i==null?void 0:i.runtimes)==null?void 0:n[p];return t&&typeof t.required=="boolean"?t.required:p==="openclaw"}function ae(i,p){if(!i)return!1;const t=p.filter(n=>Ae(i,n.agentType));return t.length===0?!0:t.every(n=>ie(i,n.agentType))}const C=[{id:"check",label:"环境检测"},{id:"node",label:"Node.js"},{id:"docker",label:"Docker"},{id:"nomad",label:"Nomad"},{id:"openclaw",label:"OpenClaw"},{id:"provider",label:"模型配置"},{id:"done",label:"完成"}];function De({ok:i}){return i?e.jsx("span",{className:"inline-block w-2 h-2 rounded-full bg-emerald-500 shadow-[0_0_6px_rgba(16,185,129,0.7)]"}):e.jsx("span",{className:"inline-block w-2 h-2 rounded-full bg-[var(--border)]"})}function A({dep:i,label:p,required:t,extra:n}){const{t:j}=oe("setup"),x=i.needsUpgrade;return e.jsxs("div",{className:"flex items-center justify-between py-2.5 border-b border-[var(--border)] last:border-0",children:[e.jsxs("div",{className:"flex items-center gap-2.5",children:[x?e.jsx("span",{className:"inline-block w-2 h-2 rounded-full bg-amber-400 shadow-[0_0_6px_rgba(251,191,36,0.6)]"}):e.jsx(De,{ok:i.installed}),e.jsx("span",{className:"text-sm text-foreground",children:p||i.name}),x&&e.jsx("span",{className:"text-xs text-amber-400",children:j("versionTooOld")}),t&&!i.installed&&!x&&e.jsx("span",{className:"text-xs text-red-400",children:j("required")})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[n,e.jsx("span",{className:"text-xs text-muted font-mono",children:i.installed?i.version||"installed":"not installed"})]})]})}function I(){return e.jsx("span",{className:"w-3.5 h-3.5 border-2 border-white/30 border-t-white rounded-full animate-spin"})}function de(i){return/失败|error|denied|forbidden|unauthorized/i.test(i)?"error":/完成|已就绪|已启动|已存在|成功|built|installed/i.test(i)?"success":/正在|等待|下载|安装|构建|启动|升级|progress|exporting|transferring/i.test(i)?"progress":"info"}function Ue(i){switch(i){case"progress":return{dot:"bg-sky-400 shadow-[0_0_8px_rgba(56,189,248,0.55)]",text:"text-sky-100"};case"success":return{dot:"bg-emerald-400 shadow-[0_0_8px_rgba(52,211,153,0.55)]",text:"text-emerald-100"};case"error":return{dot:"bg-red-400 shadow-[0_0_8px_rgba(248,113,113,0.55)]",text:"text-red-200"};default:return{dot:"bg-slate-500 shadow-[0_0_8px_rgba(148,163,184,0.35)]",text:"text-slate-200/90"}}}function Ve({onDone:i}){var X,ee,te,se;const{runtimes:p}=Pe(),{t}=oe(["setup","common","instance"]),[n,j]=c.useState(null),[x,D]=c.useState("check"),[g,y]=c.useState(null),[q,$]=c.useState([]),[M,v]=c.useState(""),[H,K]=c.useState(!1),[b,le]=c.useState(""),[w,ce]=c.useState(""),[U,T]=c.useState(""),[B,V]=c.useState(!1),[F,_]=c.useState([]),[z,O]=c.useState(!1),[S,W]=c.useState(""),[ue,me]=c.useState("idle"),G=c.useRef(new Set),Y=c.useCallback((r,s)=>{if(G.current.has(r))return;G.current.add(r);const a=s==="openclaw-docker"?t("setup:dockerImageBuild"):s==="docker"?t("setup:dockerInstall"):s==="openclaw"?t("setup:openclawInstall"):s;y(s),f(t("setup:resumeTask",{label:a}),"progress"),Z(r,a).then(()=>{h(!0)}).catch(o=>{v(o.message||t("setup:taskFailed"))}).finally(()=>{y(null)})},[]),h=c.useCallback((r=!1)=>{re().then(s=>{var a;if(j(s),(a=s.runningTasks)!=null&&a.length)for(const o of s.runningTasks)Y(o.id,o.name);if(!r&&s.ready){D("provider");return}}).catch(()=>{})},[i,Y]);c.useEffect(()=>{h()},[h]),c.useEffect(()=>{var s,a;if(x!=="nomad"||!((s=n==null?void 0:n.nomad)!=null&&s.installed)||(a=n==null?void 0:n.nomad)!=null&&a.running)return;const r=setInterval(()=>{h(!0)},3e3);return()=>clearInterval(r)},[x,(X=n==null?void 0:n.nomad)==null?void 0:X.installed,(ee=n==null?void 0:n.nomad)==null?void 0:ee.running,h]);const f=(r,s=de(r))=>$(a=>[...a,{message:r,tone:s}].slice(-200)),xe=(r,s)=>s.type==="progress"&&typeof s.progress=="number"?`${r}: ${s.message} [${s.progress}%]`:s.type==="done"?`${r}: ${s.message}`:s.type==="error"?t("setup:taskErrorPrefix",{label:r,message:s.message}):s.message,Z=async(r,s)=>{let a=0,o=0,u=t("setup:taskCompleted",{label:s});const d=Date.now()+30*60*1e3;for(;Date.now()<d;){try{const m=await we(r);o=0;const ke=m.events.slice(a);a=m.events.length;for(const N of ke){const ye=N.type==="done"?"success":N.type==="error"?"error":N.type==="progress"?"progress":de(N.message);f(xe(s,N),ye),N.message&&(u=N.message)}if(m.status==="done")return u;if(m.status==="error")throw new Error(u)}catch(m){if(o+=1,o>=5)throw new Error((m==null?void 0:m.message)||t("setup:taskStatusFailed",{label:s}))}const l=Math.min(1e3+a*200,3e3);await new Promise(m=>setTimeout(m,l))}throw new Error(t("setup:taskTimeout",{label:s}))},L=async(r,s,a)=>{y(r),v(""),f(t("setup:installing",{label:s}),"progress");try{const o=await a();let u=o.message||t("setup:taskStarted",{label:s});return o!=null&&o.taskId?u=await Z(o.taskId,s):f(`${s}: ${u}`,"success"),h(!0),!0}catch(o){const u=o.message||t("setup:defaultInstallFailed");return f(t("setup:installFailed",{label:s,error:u}),"error"),v(u),!1}finally{y(null)}},J=async()=>{await L("node","Node.js",()=>Te())},pe=async()=>{await L("docker","Docker",()=>E("docker"))},[be,he]=c.useState(!1),fe=async r=>{const s=p.find(o=>o.agentType===r);if(!s)return;s.installHint&&f(t(s.installHint),"info");const a=await L(`runtime-${r}`,t(s.installLabel),()=>Me(r));r==="openclaw"&&a&&he(!0),h(!0)},ge=async()=>{var s;if(await L("nomad","Nomad",()=>E("nomad"))){f(t("setup:configuringNomadSystemd"),"progress"),y("nomad-systemd");try{await E("nomad-systemd"),f(t("setup:nomadServiceStarted"),"success")}catch{try{await Ce("nomad"),f(t("setup:nomadStarted"),"success")}catch(a){f(t("setup:nomadStartFailed",{error:a.message}),"error"),v(a.message)}}y(null),f(t("setup:waitingNomad"),"progress");for(let a=0;a<10;a++){await new Promise(u=>setTimeout(u,2e3));const o=await re();if((s=o.nomad)!=null&&s.running){j(o),f(t("setup:nomadReady"),"success");return}}h(!0)}},P=!!((te=n==null?void 0:n.node)!=null&&te.installed)&&!((se=n==null?void 0:n.node)!=null&&se.needsUpgrade),R=async()=>{var o,u,d,l;const r=C.findIndex(m=>m.id===x);if(r>=C.length-1)return;let s=r+1;for(;s<C.length-1;){const m=C[s].id;if(m==="node"&&P){s++;continue}if(m==="docker"&&((o=n==null?void 0:n.docker)!=null&&o.installed)&&((u=n==null?void 0:n.docker)!=null&&u.running)){s++;continue}if(m==="nomad"&&((d=n==null?void 0:n.nomad)!=null&&d.installed)&&((l=n==null?void 0:n.nomad)!=null&&l.running)){s++;continue}if(m==="openclaw"&&ae(n,p)){s++;continue}break}const a=C[s].id;if(v(""),$([]),a==="done"){D("done"),K(!0);try{await Ie({installNomad:!1,buildDockerImage:!1})}catch(m){v(m.message||t("setup:configWriteFailed"))}finally{K(!1)}}else D(a)},ve=r=>{if(!n)return!1;switch(r){case"check":return P;case"node":return P;case"docker":return n.docker.installed&&n.docker.running;case"nomad":return n.nomad.installed&&n.nomad.running;case"openclaw":return ae(n,p)||be&&n.openclaw.installed&&p.length===1;case"provider":return!0;case"done":return!0;default:return!1}},Q=c.useCallback(r=>{le(r),T(""),_([]);const s=k.find(a=>a.id===r);W((s==null?void 0:s.baseUrl)||"")},[]),je=c.useCallback(async r=>{if(!b)return;const s=k.find(l=>l.id===b);if(!s)return;const o=s.local===!0&&S.trim()?S.trim():s.baseUrl,u=s.authHeader?"x-api-key":"Authorization",d=r??w;O(!0),v("");try{const{models:l}=await Fe(o,d,u,s.id,s.api);_(l),l.length>0&&T(l[0].id)}catch(l){v(l.message||t("setup:provider.fetchModelsFailed"))}finally{O(!1)}},[w,S,b,t]),Ne=async()=>{var d;if(!b)return!1;const r=k.find(l=>l.id===b);if(!r)return!1;const s=r.local===!0,a=s&&S.trim()?S.trim():r.baseUrl;if(s&&!a)return v(t("setup:provider.baseUrlRequired",{defaultValue:"Base URL is required"})),!1;const o=F.length>0?F.map(l=>({id:l.id,name:l.name||l.id,contextWindow:128e3})):r.models,u=U||((d=o[0])==null?void 0:d.id)||"";V(!0),!s&&w.trim()&&ue!=="valid"&&v(t("common:llm.saveWithoutValidation"));try{return await ne({providerId:r.id,baseUrl:a,api:r.api,authHeader:r.authHeader?"x-api-key":void 0,models:o,selectedModelId:u,apiKey:w||""}),!0}catch(l){return v(l.message||t("setup:provider.saveFailed")),!1}finally{V(!1)}};return n?e.jsxs("div",{className:"min-h-screen flex items-center justify-center p-4 bg-background relative overflow-hidden",children:[e.jsx("div",{className:"grid-bg absolute inset-0 pointer-events-none"}),e.jsx("div",{className:"absolute top-1/3 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[600px] h-[400px] rounded-full bg-[#0066FF]/[0.06] blur-[100px] pointer-events-none"}),e.jsx("div",{className:"absolute left-4 bottom-4 z-20",children:e.jsx(Se,{className:"bg-card/80 backdrop-blur-sm"})}),e.jsxs("div",{className:"w-full max-w-lg relative z-10",children:[e.jsxs("div",{className:"text-center mb-8",children:[e.jsx(_e,{className:"w-48 h-48 mx-auto mb-4 object-contain"}),e.jsx("p",{className:"text-sm text-muted mt-1",children:t("setup:title")})]}),e.jsxs("div",{className:"bg-card border border-[var(--border)] rounded-xl p-6 backdrop-blur-sm",children:[x==="check"&&e.jsxs("div",{children:[e.jsx("h2",{className:"text-base font-medium text-foreground mb-1",children:t("setup:check.title")}),e.jsx("p",{className:"text-sm text-muted mb-4",children:t("setup:check.desc")}),e.jsx("p",{className:"text-xs text-muted mb-1.5 font-medium",children:t("setup:check.requiredComponents")}),e.jsxs("div",{className:"bg-card rounded-md border border-[var(--border)] px-4",children:[e.jsx(A,{dep:n.node,label:"Node.js",required:!0,extra:n.node.needsUpgrade?e.jsx("button",{onClick:J,disabled:!!g,className:"text-xs bg-amber-500/20 text-amber-400 border border-amber-500/30 rounded px-2 py-0.5 hover:bg-amber-500/30 disabled:opacity-40 transition-colors duration-200",children:t(g==="node"?"setup:check.upgrading":"setup:check.upgrade")}):void 0}),e.jsx(A,{dep:n.docker,label:"Docker",required:!0}),e.jsx(A,{dep:n.nomad,label:"Nomad",required:!0}),e.jsx(A,{dep:n.openclaw,label:"OpenClaw",required:!0})]})]}),x==="node"&&e.jsxs("div",{children:[e.jsx("h2",{className:"text-base font-medium text-foreground mb-1",children:t("setup:node.title")}),e.jsx("p",{className:"text-sm text-muted mb-4",children:t("setup:node.desc")}),P?e.jsx("div",{className:"bg-emerald-500/10 border border-emerald-500/20 text-emerald-400 text-sm rounded-md px-3 py-2.5",children:t("setup:node.ready",{version:n.node.version})}):n.hasSudo?e.jsxs("div",{className:"space-y-3",children:[e.jsx("div",{className:"bg-amber-500/10 border border-amber-500/20 text-amber-400 text-sm rounded-md px-3 py-2.5",children:t("setup:node.currentVersion",{version:n.node.version})}),e.jsx("button",{onClick:J,disabled:!!g,className:"bg-[#0066FF] text-white rounded-md px-4 py-2 text-sm font-medium hover:bg-[#0066FF]/90 disabled:opacity-40 transition-all duration-200",children:g?e.jsxs("span",{className:"inline-flex items-center gap-2",children:[e.jsx(I,{}),t("setup:node.upgrading")]}):t("setup:node.upgradeBtn")}),e.jsx("p",{className:"text-xs text-muted",children:t("setup:node.sudoRequired")})]}):e.jsxs("div",{className:"space-y-3",children:[e.jsx("div",{className:"bg-amber-500/10 border border-amber-500/20 text-amber-400 text-sm rounded-md px-3 py-2.5",children:t("setup:node.noSudo",{version:n.node.version})}),e.jsxs("div",{className:"bg-card border border-[var(--border)] rounded-md p-3",children:[e.jsx("p",{className:"text-xs text-muted mb-1.5",children:t("setup:node.contactAdmin")}),e.jsx("code",{className:"text-xs text-foreground font-mono block whitespace-pre-wrap",children:"curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - && sudo apt-get install -y nodejs"})]}),e.jsx("button",{onClick:()=>h(!0),className:"text-xs text-muted hover:text-foreground underline transition-colors duration-200",children:t("setup:node.refreshAfterInstall")})]})]}),x==="docker"&&e.jsxs("div",{children:[e.jsx("h2",{className:"text-base font-medium text-foreground mb-1",children:t("setup:docker.title")}),e.jsx("p",{className:"text-sm text-muted mb-4",children:t("setup:docker.desc")}),n.docker.installed&&n.docker.running?e.jsx("div",{className:"bg-emerald-500/10 border border-emerald-500/20 text-emerald-400 text-sm rounded-md px-3 py-2.5",children:t("setup:docker.running",{version:n.docker.version})}):n.docker.installed&&!n.docker.running?e.jsxs("div",{className:"space-y-3",children:[e.jsx("div",{className:"bg-amber-500/10 border border-amber-500/20 text-amber-400 text-sm rounded-md px-3 py-2.5",children:t("setup:docker.notRunning")}),e.jsx("div",{className:"bg-card border border-[var(--border)] rounded-md p-3",children:e.jsx("code",{className:"text-xs text-foreground font-mono block",children:/Mac|iPhone|iPad/i.test(navigator.userAgent)?"jishushell doctor --fix":"sudo systemctl start docker"})}),e.jsx("button",{onClick:()=>h(!0),className:"text-xs text-muted hover:text-foreground underline transition-colors duration-200",children:t("setup:docker.refreshAfterStart")})]}):/Mac|iPhone|iPad/i.test(navigator.userAgent)?e.jsxs("div",{className:"space-y-3",children:[e.jsx("p",{className:"text-xs text-muted",children:t("setup:docker.macosColima")}),e.jsx("div",{className:"bg-card border border-[var(--border)] rounded-md p-3",children:e.jsx("code",{className:"text-xs text-foreground font-mono block",children:"jishushell doctor --fix"})}),e.jsx("button",{onClick:()=>h(!0),className:"text-xs text-muted hover:text-foreground underline transition-colors duration-200",children:t("setup:docker.refreshAfterInstall")})]}):n.hasSudo?e.jsxs("div",{className:"space-y-3",children:[e.jsx("button",{onClick:pe,disabled:!!g,className:"bg-[#0066FF] text-white rounded-md px-4 py-2 text-sm font-medium hover:bg-[#0066FF]/90 disabled:opacity-40 transition-all duration-200",children:g?e.jsxs("span",{className:"inline-flex items-center gap-2",children:[e.jsx(I,{}),t("setup:docker.installing")]}):t("setup:docker.installBtn")}),e.jsx("p",{className:"text-xs text-muted",children:t("setup:docker.sudoRequired")})]}):e.jsxs("div",{className:"space-y-3",children:[e.jsx("div",{className:"bg-amber-500/10 border border-amber-500/20 text-amber-400 text-sm rounded-md px-3 py-2.5",children:t("setup:docker.noSudo")}),e.jsxs("div",{className:"bg-card border border-[var(--border)] rounded-md p-3",children:[e.jsx("p",{className:"text-xs text-muted mb-1.5",children:t("setup:docker.contactAdmin")}),e.jsx("code",{className:"text-xs text-foreground font-mono block",children:"curl -fsSL https://get.docker.com | sh"})]}),e.jsx("button",{onClick:()=>h(!0),className:"text-xs text-muted hover:text-foreground underline transition-colors duration-200",children:t("setup:docker.refreshAfterInstall")})]})]}),x==="nomad"&&e.jsxs("div",{children:[e.jsx("h2",{className:"text-base font-medium text-foreground mb-1",children:t("setup:nomad.title")}),e.jsx("p",{className:"text-sm text-muted mb-4",children:t("setup:nomad.desc")}),n.nomad.installed&&n.nomad.running?e.jsx("div",{className:"bg-emerald-500/10 border border-emerald-500/20 text-emerald-400 text-sm rounded-md px-3 py-2.5",children:t("setup:nomad.running",{version:n.nomad.version})}):n.nomad.installed?e.jsx("div",{className:"space-y-3",children:e.jsxs("div",{className:"flex items-center gap-2 bg-amber-500/10 border border-amber-500/20 text-amber-400 text-sm rounded-md px-3 py-2.5",children:[e.jsx(I,{}),e.jsx("span",{children:t("setup:nomad.starting")})]})}):e.jsx("button",{onClick:ge,disabled:!!g,className:"bg-[#0066FF] text-white rounded-md px-4 py-2 text-sm font-medium hover:bg-[#0066FF]/90 disabled:opacity-40 transition-all duration-200",children:g?e.jsxs("span",{className:"inline-flex items-center gap-2",children:[e.jsx(I,{}),t("setup:nomad.installing")]}):t("setup:nomad.installBtn")})]}),x==="openclaw"&&e.jsxs("div",{children:[e.jsx("h2",{className:"text-base font-medium text-foreground mb-1",children:"Agent 运行时"}),e.jsx("p",{className:"text-sm text-muted mb-4",children:"安装所有已注册的 Agent 运行时 (Docker 镜像 / shim)。每次添加新 Agent 时,这里会自动出现一行。"}),e.jsx("div",{className:"space-y-4",children:p.map(r=>{const s=ie(n,r.agentType),a=g===`runtime-${r.agentType}`;return e.jsxs("div",{className:"rounded-md border border-[var(--border)] bg-[var(--card)] p-4",children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-sm font-medium text-foreground",children:r.displayName}),e.jsx("div",{className:"text-xs text-muted",children:r.description})]}),s?e.jsx("span",{className:"text-xs text-emerald-400 font-mono",children:"已就绪"}):a?e.jsxs("span",{className:"inline-flex items-center gap-1.5 text-xs text-amber-400",children:[e.jsx(I,{}),"安装中"]}):e.jsx("span",{className:"text-xs text-muted",children:"未安装"})]}),!s&&!a&&e.jsxs("div",{className:"space-y-2",children:[r.installHint&&e.jsx("p",{className:"text-xs text-muted",children:t(r.installHint)}),e.jsxs("button",{onClick:()=>fe(r.agentType),disabled:!!g,className:"bg-[#0066FF] text-white rounded-md px-4 py-2 text-sm font-medium hover:bg-[#0066FF]/90 disabled:opacity-40 transition-all duration-200",children:["安装 ",r.displayName]})]})]},r.agentType)})})]}),x==="done"&&e.jsx("div",{className:"text-center py-4",children:H?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"w-12 h-12 mx-auto mb-3 flex items-center justify-center",children:e.jsx("div",{className:"w-8 h-8 border-2 border-white/10 border-t-[#0066FF] rounded-full animate-spin"})}),e.jsx("h2",{className:"text-base font-medium text-foreground mb-1",children:t("setup:done.finalizing")}),e.jsx("p",{className:"text-sm text-muted",children:t("setup:done.finalizingDesc")})]}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"w-12 h-12 mx-auto mb-3 rounded-full bg-emerald-500/10 border border-emerald-500/20 flex items-center justify-center",children:e.jsx("svg",{className:"w-6 h-6 text-emerald-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 13l4 4L19 7"})})}),e.jsx("h2",{className:"text-base font-medium text-foreground mb-1",children:t("setup:done.complete")}),e.jsx("p",{className:"text-sm text-muted",children:t("setup:done.completeDesc")})]})}),x==="provider"&&(()=>{var u;const r=k.find(d=>d.id===b),s=[...new Set(k.map(d=>d.group))],a=(r==null?void 0:r.local)===!0,o=F.length>0?F.map(d=>({id:d.id,label:d.name||d.id})):((r==null?void 0:r.models)||[]).map(d=>({id:d.id,label:`${d.name} (${Math.round(d.contextWindow/1e3)}K)`}));return e.jsxs("div",{children:[e.jsx("h2",{className:"text-base font-medium text-foreground mb-1",children:t("setup:provider.title")}),e.jsx("p",{className:"text-sm text-muted mb-4",children:t("setup:provider.desc")}),e.jsxs("div",{className:"space-y-4",children:[e.jsx(Re,{title:t("setup:provider.recommendedTitle"),description:t("setup:provider.recommendedDescription"),apiKeyHint:t("setup:provider.apiKeyHint"),selectedProviderId:b,onSelectProvider:Q}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-muted mb-1.5",children:t("setup:provider.label")}),e.jsxs("select",{value:b,onChange:d=>Q(d.target.value),className:"w-full bg-background border border-[var(--border)] rounded-md px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-[#0066FF]/60",children:[e.jsx("option",{value:"",children:t("setup:provider.placeholder")}),s.map(d=>e.jsx("optgroup",{label:t(`instance:configForm.providerGroup.${d}`,{defaultValue:d}),children:k.filter(l=>l.group===d).map(l=>e.jsx("option",{value:l.id,children:t(`instance:configForm.providerLabel.${l.id}`,{defaultValue:l.label})},l.id))},d))]})]}),b&&a&&e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-muted mb-1.5",children:t("setup:provider.baseUrl")}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{value:S,onChange:d=>{W(d.target.value),_([])},className:"flex-1 bg-[var(--input-bg)] border border-[var(--border)] rounded-md px-3 py-2 text-sm text-foreground font-mono focus:outline-none focus:ring-1 focus:ring-[#0066FF]/60"}),e.jsx("button",{type:"button",onClick:()=>{je()},disabled:z,className:"px-3 py-1.5 text-xs border border-[var(--border)] rounded-md hover:bg-[var(--input-bg)] disabled:opacity-40 transition-all whitespace-nowrap",children:t(z?"setup:provider.fetchingModels":"setup:provider.fetchModels")})]})]}),b&&!a&&e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-muted mb-1.5",children:t("setup:provider.apiKey")}),e.jsx(Le,{value:w,saved:!1,onChange:d=>{ce(d),_([])},baseUrl:(r==null?void 0:r.baseUrl)||"",api:(r==null?void 0:r.api)||"",authHeader:r!=null&&r.authHeader?"x-api-key":void 0,providerId:b,placeholder:t("setup:provider.apiKeyPlaceholder"),onModels:d=>{_(d),d.length>0&&T(d[0].id)},onStateChange:me,selectedModelId:U})]}),r&&o.length>0&&e.jsxs("div",{children:[e.jsxs("label",{className:"block text-sm font-medium text-muted mb-1.5",children:[t("setup:provider.defaultModel"),F.length>0&&e.jsxs("span",{className:"ml-1.5 text-emerald-400 text-xs",children:["(",F.length," ",t("setup:provider.liveModels"),")"]})]}),e.jsx("select",{value:U||((u=o[0])==null?void 0:u.id)||"",onChange:d=>T(d.target.value),className:"w-full bg-background border border-[var(--border)] rounded-md px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-1 focus:ring-[#0066FF]/60",children:o.map(d=>e.jsx("option",{value:d.id,children:d.label},d.id))})]})]})]})})(),q.length>0&&x!=="done"&&e.jsxs("div",{className:"mt-4 rounded-lg border border-[var(--border)] bg-[linear-gradient(180deg,rgba(2,6,23,0.96),rgba(15,23,42,0.92))] p-3 shadow-[inset_0_1px_0_rgba(255,255,255,0.04)] max-h-40 overflow-y-auto",children:[q.map((r,s)=>{const a=Ue(r.tone);return e.jsxs("div",{className:"flex items-start gap-2 py-0.5",children:[e.jsx("span",{className:`mt-1.5 h-1.5 w-1.5 shrink-0 rounded-full ${a.dot}`}),e.jsx("div",{className:`min-w-0 whitespace-pre-wrap break-words text-xs font-mono leading-5 ${a.text}`,children:r.message})]},s)}),e.jsx("div",{className:"pointer-events-none sticky bottom-0 h-4 bg-gradient-to-t from-slate-950/85 to-transparent"})]}),M&&e.jsx("div",{className:"mt-4 bg-red-500/10 border border-red-500/20 text-red-400 text-sm rounded-md px-3 py-2.5",children:M})]}),e.jsx("div",{className:"flex justify-between mt-6",children:x==="provider"?(()=>{var a;const r=((a=k.find(o=>o.id===b))==null?void 0:a.local)===!0,s=b&&(r||w.trim());return e.jsxs(e.Fragment,{children:[e.jsx("button",{onClick:async()=>{await ne({skipped:!0}).catch(()=>{}),R()},className:"bg-[var(--card)] border border-[var(--border)] text-foreground rounded-md px-6 py-2 text-sm font-medium hover:bg-[var(--card-hover)] transition-all duration-200",children:t("setup:provider.skip")}),e.jsx("button",{onClick:async()=>{await Ne()&&R()},disabled:!s||B,className:"bg-[#0066FF] text-white rounded-md px-6 py-2 text-sm font-medium hover:bg-[#0066FF]/90 disabled:opacity-40 disabled:cursor-not-allowed transition-all duration-200 shadow-[0_0_20px_rgba(0,102,255,0.3)]",children:t(B?"setup:provider.saving":"setup:provider.saveAndContinue")})]})})():x!=="done"?e.jsxs(e.Fragment,{children:[e.jsx("div",{}),e.jsx("button",{onClick:R,disabled:!ve(x)||!!g,className:"bg-[#0066FF] text-white rounded-md px-6 py-2 text-sm font-medium hover:bg-[#0066FF]/90 disabled:opacity-40 disabled:cursor-not-allowed transition-all duration-200 shadow-[0_0_20px_rgba(0,102,255,0.3)] hover:shadow-[0_0_28px_rgba(0,102,255,0.45)]",children:t("setup:nav.next")})]}):e.jsx("button",{onClick:M?()=>R():i,disabled:H,className:"w-full bg-[#0066FF] text-white rounded-md py-2.5 text-sm font-medium hover:bg-[#0066FF]/90 disabled:opacity-40 disabled:cursor-not-allowed transition-all duration-200 shadow-[0_0_20px_rgba(0,102,255,0.3)]",children:t(M?"setup:nav.retry":"setup:nav.enterPanel")})})]})]}):e.jsx("div",{className:"min-h-screen flex items-center justify-center bg-background",children:e.jsx("div",{className:"w-5 h-5 border-2 border-[var(--border)] border-t-foreground rounded-full animate-spin"})})}export{Ve as default};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import{a5 as f,as as he,ac as fe,a1 as Y,av as me,ad as ge}from"./index-bnBu0nlQ.js";import{R as b,c as A}from"./vendor-react-ZC5T_huj.js";import{u as K}from"./vendor-i18n-flxcMVeP.js";var pe=Object.defineProperty,B=Object.getOwnPropertySymbols,W=Object.prototype.hasOwnProperty,X=Object.prototype.propertyIsEnumerable,V=(c,a,o)=>a in c?pe(c,a,{enumerable:!0,configurable:!0,writable:!0,value:o}):c[a]=o,z=(c,a)=>{for(var o in a||(a={}))W.call(a,o)&&V(c,o,a[o]);if(B)for(var o of B(a))X.call(a,o)&&V(c,o,a[o]);return c},_=(c,a)=>{var o={};for(var m in c)W.call(c,m)&&a.indexOf(m)<0&&(o[m]=c[m]);if(c!=null&&B)for(var m of B(c))a.indexOf(m)<0&&X.call(c,m)&&(o[m]=c[m]);return o};/**
|
|
2
|
+
* @license QR Code generator library (TypeScript)
|
|
3
|
+
* Copyright (c) Project Nayuki.
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/var O;(c=>{const a=class E{constructor(e,r,t,s){if(this.version=e,this.errorCorrectionLevel=r,this.modules=[],this.isFunction=[],e<E.MIN_VERSION||e>E.MAX_VERSION)throw new RangeError("Version value out of range");if(s<-1||s>7)throw new RangeError("Mask value out of range");this.size=e*4+17;let n=[];for(let i=0;i<this.size;i++)n.push(!1);for(let i=0;i<this.size;i++)this.modules.push(n.slice()),this.isFunction.push(n.slice());this.drawFunctionPatterns();const u=this.addEccAndInterleave(t);if(this.drawCodewords(u),s==-1){let i=1e9;for(let d=0;d<8;d++){this.applyMask(d),this.drawFormatBits(d);const h=this.getPenaltyScore();h<i&&(s=d,i=h),this.applyMask(d)}}p(0<=s&&s<=7),this.mask=s,this.applyMask(s),this.drawFormatBits(s),this.isFunction=[]}static encodeText(e,r){const t=c.QrSegment.makeSegments(e);return E.encodeSegments(t,r)}static encodeBinary(e,r){const t=c.QrSegment.makeBytes(e);return E.encodeSegments([t],r)}static encodeSegments(e,r,t=1,s=40,n=-1,u=!0){if(!(E.MIN_VERSION<=t&&t<=s&&s<=E.MAX_VERSION)||n<-1||n>7)throw new RangeError("Invalid value");let i,d;for(i=t;;i++){const g=E.getNumDataCodewords(i,r)*8,v=N.getTotalBits(e,i);if(v<=g){d=v;break}if(i>=s)throw new RangeError("Data too long")}for(const g of[E.Ecc.MEDIUM,E.Ecc.QUARTILE,E.Ecc.HIGH])u&&d<=E.getNumDataCodewords(i,g)*8&&(r=g);let h=[];for(const g of e){o(g.mode.modeBits,4,h),o(g.numChars,g.mode.numCharCountBits(i),h);for(const v of g.getData())h.push(v)}p(h.length==d);const R=E.getNumDataCodewords(i,r)*8;p(h.length<=R),o(0,Math.min(4,R-h.length),h),o(0,(8-h.length%8)%8,h),p(h.length%8==0);for(let g=236;h.length<R;g^=253)o(g,8,h);let M=[];for(;M.length*8<h.length;)M.push(0);return h.forEach((g,v)=>M[v>>>3]|=g<<7-(v&7)),new E(i,r,M,n)}getModule(e,r){return 0<=e&&e<this.size&&0<=r&&r<this.size&&this.modules[r][e]}getModules(){return this.modules}drawFunctionPatterns(){for(let t=0;t<this.size;t++)this.setFunctionModule(6,t,t%2==0),this.setFunctionModule(t,6,t%2==0);this.drawFinderPattern(3,3),this.drawFinderPattern(this.size-4,3),this.drawFinderPattern(3,this.size-4);const e=this.getAlignmentPatternPositions(),r=e.length;for(let t=0;t<r;t++)for(let s=0;s<r;s++)t==0&&s==0||t==0&&s==r-1||t==r-1&&s==0||this.drawAlignmentPattern(e[t],e[s]);this.drawFormatBits(0),this.drawVersion()}drawFormatBits(e){const r=this.errorCorrectionLevel.formatBits<<3|e;let t=r;for(let n=0;n<10;n++)t=t<<1^(t>>>9)*1335;const s=(r<<10|t)^21522;p(s>>>15==0);for(let n=0;n<=5;n++)this.setFunctionModule(8,n,m(s,n));this.setFunctionModule(8,7,m(s,6)),this.setFunctionModule(8,8,m(s,7)),this.setFunctionModule(7,8,m(s,8));for(let n=9;n<15;n++)this.setFunctionModule(14-n,8,m(s,n));for(let n=0;n<8;n++)this.setFunctionModule(this.size-1-n,8,m(s,n));for(let n=8;n<15;n++)this.setFunctionModule(8,this.size-15+n,m(s,n));this.setFunctionModule(8,this.size-8,!0)}drawVersion(){if(this.version<7)return;let e=this.version;for(let t=0;t<12;t++)e=e<<1^(e>>>11)*7973;const r=this.version<<12|e;p(r>>>18==0);for(let t=0;t<18;t++){const s=m(r,t),n=this.size-11+t%3,u=Math.floor(t/3);this.setFunctionModule(n,u,s),this.setFunctionModule(u,n,s)}}drawFinderPattern(e,r){for(let t=-4;t<=4;t++)for(let s=-4;s<=4;s++){const n=Math.max(Math.abs(s),Math.abs(t)),u=e+s,i=r+t;0<=u&&u<this.size&&0<=i&&i<this.size&&this.setFunctionModule(u,i,n!=2&&n!=4)}}drawAlignmentPattern(e,r){for(let t=-2;t<=2;t++)for(let s=-2;s<=2;s++)this.setFunctionModule(e+s,r+t,Math.max(Math.abs(s),Math.abs(t))!=1)}setFunctionModule(e,r,t){this.modules[r][e]=t,this.isFunction[r][e]=!0}addEccAndInterleave(e){const r=this.version,t=this.errorCorrectionLevel;if(e.length!=E.getNumDataCodewords(r,t))throw new RangeError("Invalid argument");const s=E.NUM_ERROR_CORRECTION_BLOCKS[t.ordinal][r],n=E.ECC_CODEWORDS_PER_BLOCK[t.ordinal][r],u=Math.floor(E.getNumRawDataModules(r)/8),i=s-u%s,d=Math.floor(u/s);let h=[];const R=E.reedSolomonComputeDivisor(n);for(let g=0,v=0;g<s;g++){let S=e.slice(v,v+d-n+(g<i?0:1));v+=S.length;const x=E.reedSolomonComputeRemainder(S,R);g<i&&S.push(0),h.push(S.concat(x))}let M=[];for(let g=0;g<h[0].length;g++)h.forEach((v,S)=>{(g!=d-n||S>=i)&&M.push(v[g])});return p(M.length==u),M}drawCodewords(e){if(e.length!=Math.floor(E.getNumRawDataModules(this.version)/8))throw new RangeError("Invalid argument");let r=0;for(let t=this.size-1;t>=1;t-=2){t==6&&(t=5);for(let s=0;s<this.size;s++)for(let n=0;n<2;n++){const u=t-n,d=(t+1&2)==0?this.size-1-s:s;!this.isFunction[d][u]&&r<e.length*8&&(this.modules[d][u]=m(e[r>>>3],7-(r&7)),r++)}}p(r==e.length*8)}applyMask(e){if(e<0||e>7)throw new RangeError("Mask value out of range");for(let r=0;r<this.size;r++)for(let t=0;t<this.size;t++){let s;switch(e){case 0:s=(t+r)%2==0;break;case 1:s=r%2==0;break;case 2:s=t%3==0;break;case 3:s=(t+r)%3==0;break;case 4:s=(Math.floor(t/3)+Math.floor(r/2))%2==0;break;case 5:s=t*r%2+t*r%3==0;break;case 6:s=(t*r%2+t*r%3)%2==0;break;case 7:s=((t+r)%2+t*r%3)%2==0;break;default:throw new Error("Unreachable")}!this.isFunction[r][t]&&s&&(this.modules[r][t]=!this.modules[r][t])}}getPenaltyScore(){let e=0;for(let n=0;n<this.size;n++){let u=!1,i=0,d=[0,0,0,0,0,0,0];for(let h=0;h<this.size;h++)this.modules[n][h]==u?(i++,i==5?e+=E.PENALTY_N1:i>5&&e++):(this.finderPenaltyAddHistory(i,d),u||(e+=this.finderPenaltyCountPatterns(d)*E.PENALTY_N3),u=this.modules[n][h],i=1);e+=this.finderPenaltyTerminateAndCount(u,i,d)*E.PENALTY_N3}for(let n=0;n<this.size;n++){let u=!1,i=0,d=[0,0,0,0,0,0,0];for(let h=0;h<this.size;h++)this.modules[h][n]==u?(i++,i==5?e+=E.PENALTY_N1:i>5&&e++):(this.finderPenaltyAddHistory(i,d),u||(e+=this.finderPenaltyCountPatterns(d)*E.PENALTY_N3),u=this.modules[h][n],i=1);e+=this.finderPenaltyTerminateAndCount(u,i,d)*E.PENALTY_N3}for(let n=0;n<this.size-1;n++)for(let u=0;u<this.size-1;u++){const i=this.modules[n][u];i==this.modules[n][u+1]&&i==this.modules[n+1][u]&&i==this.modules[n+1][u+1]&&(e+=E.PENALTY_N2)}let r=0;for(const n of this.modules)r=n.reduce((u,i)=>u+(i?1:0),r);const t=this.size*this.size,s=Math.ceil(Math.abs(r*20-t*10)/t)-1;return p(0<=s&&s<=9),e+=s*E.PENALTY_N4,p(0<=e&&e<=2568888),e}getAlignmentPatternPositions(){if(this.version==1)return[];{const e=Math.floor(this.version/7)+2,r=this.version==32?26:Math.ceil((this.version*4+4)/(e*2-2))*2;let t=[6];for(let s=this.size-7;t.length<e;s-=r)t.splice(1,0,s);return t}}static getNumRawDataModules(e){if(e<E.MIN_VERSION||e>E.MAX_VERSION)throw new RangeError("Version number out of range");let r=(16*e+128)*e+64;if(e>=2){const t=Math.floor(e/7)+2;r-=(25*t-10)*t-55,e>=7&&(r-=36)}return p(208<=r&&r<=29648),r}static getNumDataCodewords(e,r){return Math.floor(E.getNumRawDataModules(e)/8)-E.ECC_CODEWORDS_PER_BLOCK[r.ordinal][e]*E.NUM_ERROR_CORRECTION_BLOCKS[r.ordinal][e]}static reedSolomonComputeDivisor(e){if(e<1||e>255)throw new RangeError("Degree out of range");let r=[];for(let s=0;s<e-1;s++)r.push(0);r.push(1);let t=1;for(let s=0;s<e;s++){for(let n=0;n<r.length;n++)r[n]=E.reedSolomonMultiply(r[n],t),n+1<r.length&&(r[n]^=r[n+1]);t=E.reedSolomonMultiply(t,2)}return r}static reedSolomonComputeRemainder(e,r){let t=r.map(s=>0);for(const s of e){const n=s^t.shift();t.push(0),r.forEach((u,i)=>t[i]^=E.reedSolomonMultiply(u,n))}return t}static reedSolomonMultiply(e,r){if(e>>>8||r>>>8)throw new RangeError("Byte out of range");let t=0;for(let s=7;s>=0;s--)t=t<<1^(t>>>7)*285,t^=(r>>>s&1)*e;return p(t>>>8==0),t}finderPenaltyCountPatterns(e){const r=e[1];p(r<=this.size*3);const t=r>0&&e[2]==r&&e[3]==r*3&&e[4]==r&&e[5]==r;return(t&&e[0]>=r*4&&e[6]>=r?1:0)+(t&&e[6]>=r*4&&e[0]>=r?1:0)}finderPenaltyTerminateAndCount(e,r,t){return e&&(this.finderPenaltyAddHistory(r,t),r=0),r+=this.size,this.finderPenaltyAddHistory(r,t),this.finderPenaltyCountPatterns(t)}finderPenaltyAddHistory(e,r){r[0]==0&&(e+=this.size),r.pop(),r.unshift(e)}};a.MIN_VERSION=1,a.MAX_VERSION=40,a.PENALTY_N1=3,a.PENALTY_N2=3,a.PENALTY_N3=40,a.PENALTY_N4=10,a.ECC_CODEWORDS_PER_BLOCK=[[-1,7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],[-1,13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]],a.NUM_ERROR_CORRECTION_BLOCKS=[[-1,1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],[-1,1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],[-1,1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],[-1,1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]],c.QrCode=a;function o(w,e,r){if(e<0||e>31||w>>>e)throw new RangeError("Value out of range");for(let t=e-1;t>=0;t--)r.push(w>>>t&1)}function m(w,e){return(w>>>e&1)!=0}function p(w){if(!w)throw new Error("Assertion error")}const l=class y{constructor(e,r,t){if(this.mode=e,this.numChars=r,this.bitData=t,r<0)throw new RangeError("Invalid argument");this.bitData=t.slice()}static makeBytes(e){let r=[];for(const t of e)o(t,8,r);return new y(y.Mode.BYTE,e.length,r)}static makeNumeric(e){if(!y.isNumeric(e))throw new RangeError("String contains non-numeric characters");let r=[];for(let t=0;t<e.length;){const s=Math.min(e.length-t,3);o(parseInt(e.substring(t,t+s),10),s*3+1,r),t+=s}return new y(y.Mode.NUMERIC,e.length,r)}static makeAlphanumeric(e){if(!y.isAlphanumeric(e))throw new RangeError("String contains unencodable characters in alphanumeric mode");let r=[],t;for(t=0;t+2<=e.length;t+=2){let s=y.ALPHANUMERIC_CHARSET.indexOf(e.charAt(t))*45;s+=y.ALPHANUMERIC_CHARSET.indexOf(e.charAt(t+1)),o(s,11,r)}return t<e.length&&o(y.ALPHANUMERIC_CHARSET.indexOf(e.charAt(t)),6,r),new y(y.Mode.ALPHANUMERIC,e.length,r)}static makeSegments(e){return e==""?[]:y.isNumeric(e)?[y.makeNumeric(e)]:y.isAlphanumeric(e)?[y.makeAlphanumeric(e)]:[y.makeBytes(y.toUtf8ByteArray(e))]}static makeEci(e){let r=[];if(e<0)throw new RangeError("ECI assignment value out of range");if(e<128)o(e,8,r);else if(e<16384)o(2,2,r),o(e,14,r);else if(e<1e6)o(6,3,r),o(e,21,r);else throw new RangeError("ECI assignment value out of range");return new y(y.Mode.ECI,0,r)}static isNumeric(e){return y.NUMERIC_REGEX.test(e)}static isAlphanumeric(e){return y.ALPHANUMERIC_REGEX.test(e)}getData(){return this.bitData.slice()}static getTotalBits(e,r){let t=0;for(const s of e){const n=s.mode.numCharCountBits(r);if(s.numChars>=1<<n)return 1/0;t+=4+n+s.bitData.length}return t}static toUtf8ByteArray(e){e=encodeURI(e);let r=[];for(let t=0;t<e.length;t++)e.charAt(t)!="%"?r.push(e.charCodeAt(t)):(r.push(parseInt(e.substring(t+1,t+3),16)),t+=2);return r}};l.NUMERIC_REGEX=/^[0-9]*$/,l.ALPHANUMERIC_REGEX=/^[A-Z0-9 $%*+.\/:-]*$/,l.ALPHANUMERIC_CHARSET="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:";let N=l;c.QrSegment=l})(O||(O={}));(c=>{(a=>{const o=class{constructor(p,l){this.ordinal=p,this.formatBits=l}};o.LOW=new o(0,1),o.MEDIUM=new o(1,0),o.QUARTILE=new o(2,3),o.HIGH=new o(3,2),a.Ecc=o})(c.QrCode||(c.QrCode={}))})(O||(O={}));(c=>{(a=>{const o=class{constructor(p,l){this.modeBits=p,this.numBitsCharCount=l}numCharCountBits(p){return this.numBitsCharCount[Math.floor((p+7)/17)]}};o.NUMERIC=new o(1,[10,12,14]),o.ALPHANUMERIC=new o(2,[9,11,13]),o.BYTE=new o(4,[8,16,16]),o.KANJI=new o(8,[8,10,12]),o.ECI=new o(7,[0,0,0]),a.Mode=o})(c.QrSegment||(c.QrSegment={}))})(O||(O={}));var T=O;/**
|
|
6
|
+
* @license qrcode.react
|
|
7
|
+
* Copyright (c) Paul O'Shannessy
|
|
8
|
+
* SPDX-License-Identifier: ISC
|
|
9
|
+
*/var xe={L:T.QrCode.Ecc.LOW,M:T.QrCode.Ecc.MEDIUM,Q:T.QrCode.Ecc.QUARTILE,H:T.QrCode.Ecc.HIGH},Z=128,J="L",ee="#FFFFFF",te="#000000",re=!1,se=1,Ee=4,we=0,Ce=.1;function ne(c,a=0){const o=[];return c.forEach(function(m,p){let l=null;m.forEach(function(N,w){if(!N&&l!==null){o.push(`M${l+a} ${p+a}h${w-l}v1H${l+a}z`),l=null;return}if(w===m.length-1){if(!N)return;l===null?o.push(`M${w+a},${p+a} h1v1H${w+a}z`):o.push(`M${l+a},${p+a} h${w+1-l}v1H${l+a}z`);return}N&&l===null&&(l=w)})}),o.join("")}function oe(c,a){return c.slice().map((o,m)=>m<a.y||m>=a.y+a.h?o:o.map((p,l)=>l<a.x||l>=a.x+a.w?p:!1))}function Ne(c,a,o,m){if(m==null)return null;const p=c.length+o*2,l=Math.floor(a*Ce),N=p/a,w=(m.width||l)*N,e=(m.height||l)*N,r=m.x==null?c.length/2-w/2:m.x*N,t=m.y==null?c.length/2-e/2:m.y*N,s=m.opacity==null?1:m.opacity;let n=null;if(m.excavate){let i=Math.floor(r),d=Math.floor(t),h=Math.ceil(w+r-i),R=Math.ceil(e+t-d);n={x:i,y:d,w:h,h:R}}const u=m.crossOrigin;return{x:r,y:t,h:e,w,excavation:n,opacity:s,crossOrigin:u}}function ve(c,a){return a!=null?Math.max(Math.floor(a),0):c?Ee:we}function ie({value:c,level:a,minVersion:o,includeMargin:m,marginSize:p,imageSettings:l,size:N,boostLevel:w}){let e=b.useMemo(()=>{const i=(Array.isArray(c)?c:[c]).reduce((d,h)=>(d.push(...T.QrSegment.makeSegments(h)),d),[]);return T.QrCode.encodeSegments(i,xe[a],o,void 0,void 0,w)},[c,a,o,w]);const{cells:r,margin:t,numCells:s,calculatedImageSettings:n}=b.useMemo(()=>{let u=e.getModules();const i=ve(m,p),d=u.length+i*2,h=Ne(u,N,i,l);return{cells:u,margin:i,numCells:d,calculatedImageSettings:h}},[e,N,l,m,p]);return{qrcode:e,margin:t,cells:r,numCells:s,calculatedImageSettings:n}}var Re=function(){try{new Path2D().addPath(new Path2D)}catch{return!1}return!0}(),Me=b.forwardRef(function(a,o){const m=a,{value:p,size:l=Z,level:N=J,bgColor:w=ee,fgColor:e=te,includeMargin:r=re,minVersion:t=se,boostLevel:s,marginSize:n,imageSettings:u}=m,d=_(m,["value","size","level","bgColor","fgColor","includeMargin","minVersion","boostLevel","marginSize","imageSettings"]),{style:h}=d,R=_(d,["style"]),M=u==null?void 0:u.src,g=b.useRef(null),v=b.useRef(null),S=b.useCallback(j=>{g.current=j,typeof o=="function"?o(j):o&&(o.current=j)},[o]),[x,F]=b.useState(!1),{margin:C,cells:I,numCells:D,calculatedImageSettings:P}=ie({value:p,level:N,minVersion:t,boostLevel:s,includeMargin:r,marginSize:n,imageSettings:u,size:l});b.useEffect(()=>{if(g.current!=null){const j=g.current,L=j.getContext("2d");if(!L)return;let H=I;const U=v.current,q=P!=null&&U!==null&&U.complete&&U.naturalHeight!==0&&U.naturalWidth!==0;q&&P.excavation!=null&&(H=oe(I,P.excavation));const $=window.devicePixelRatio||1;j.height=j.width=l*$;const G=l/D*$;L.scale(G,G),L.fillStyle=w,L.fillRect(0,0,D,D),L.fillStyle=e,Re?L.fill(new Path2D(ne(H,C))):I.forEach(function(ae,ce){ae.forEach(function(ue,de){ue&&L.fillRect(de+C,ce+C,1,1)})}),P&&(L.globalAlpha=P.opacity),q&&L.drawImage(U,P.x+C,P.y+C,P.w,P.h)}}),b.useEffect(()=>{F(!1)},[M]);const le=z({height:l,width:l},h);let Q=null;return M!=null&&(Q=b.createElement("img",{src:M,key:M,style:{display:"none"},onLoad:()=>{F(!0)},ref:v,crossOrigin:P==null?void 0:P.crossOrigin})),b.createElement(b.Fragment,null,b.createElement("canvas",z({style:le,height:l,width:l,ref:S,role:"img"},R)),Q)});Me.displayName="QRCodeCanvas";var k=b.forwardRef(function(a,o){const m=a,{value:p,size:l=Z,level:N=J,bgColor:w=ee,fgColor:e=te,includeMargin:r=re,minVersion:t=se,boostLevel:s,title:n,marginSize:u,imageSettings:i}=m,d=_(m,["value","size","level","bgColor","fgColor","includeMargin","minVersion","boostLevel","title","marginSize","imageSettings"]),{margin:h,cells:R,numCells:M,calculatedImageSettings:g}=ie({value:p,level:N,minVersion:t,boostLevel:s,includeMargin:r,marginSize:u,imageSettings:i,size:l});let v=R,S=null;i!=null&&g!=null&&(g.excavation!=null&&(v=oe(R,g.excavation)),S=b.createElement("image",{href:i.src,height:g.h,width:g.w,x:g.x+h,y:g.y+h,preserveAspectRatio:"none",opacity:g.opacity,crossOrigin:g.crossOrigin}));const x=ne(v,h);return b.createElement("svg",z({height:l,width:l,viewBox:`0 0 ${M} ${M}`,ref:o,role:"img"},d),!!n&&b.createElement("title",null,n),b.createElement("path",{fill:w,d:`M0,0 h${M}v${M}H0z`,shapeRendering:"crispEdges"}),b.createElement("path",{fill:e,d:x,shapeRendering:"crispEdges"}),S)});k.displayName="QRCodeSVG";function Pe({instanceId:c,channelKey:a,existingAppId:o,existingDomain:m,onConfigured:p}){const{t:l}=K(["instance","common"]),[N,w]=A.useState(""),[,e]=A.useState(""),[r,t]=A.useState("idle"),[s,n]=A.useState(""),[u,i]=A.useState(""),d=A.useRef(!1),h=A.useRef(!1),R=A.useRef(0),M=6,g=async()=>{if(c){h.current=!1,t("loading"),n(""),w("");try{let x=null;for(let F=0;F<3;F++){if(h.current)return;try{if(x=await he(c,a),x!=null&&x.qrcodeUrl)break}catch{F<2&&await new Promise(C=>setTimeout(C,1500))}}if(h.current)return;x!=null&&x.qrcodeUrl?(w(x.qrcodeUrl),e(x.sessionKey),t("waiting"),n(l("configForm.feishu.scanHint")),v(x.sessionKey)):(t("error"),n(l("qr.getFailed")))}catch{h.current||(t("error"),n(l("qr.getFailed")))}}},v=x=>{if(!c||d.current)return;d.current=!0,R.current=0;const F=async()=>{if(d.current)try{const C=await fe(c,x);if(R.current=0,C.connected){d.current=!1,t("confirmed"),n(C.message||l("qr.loginSuccess")),i(C.domain||"feishu"),w(""),p==null||p();return}if(C.status==="expired"){d.current=!1,t("error"),n(C.message||l("qr.expired"));return}setTimeout(F,3e3)}catch{if(!d.current)return;if(R.current+=1,R.current>=M){d.current=!1,t("error"),n(l("qr.pollFailed",{defaultValue:"轮询失败,请刷新后重试"}));return}setTimeout(F,3e3)}};F()};if(A.useEffect(()=>()=>{d.current=!1},[]),r==="confirmed")return f.jsxs("div",{className:"bg-emerald-500/10 border border-emerald-500/20 rounded-md px-4 py-3 text-sm",children:[f.jsxs("div",{className:"flex items-center gap-2 text-emerald-400",children:[f.jsx("span",{className:"text-lg",children:"✓"}),f.jsx("span",{className:"font-medium",children:s})]}),f.jsx("p",{className:"text-xs text-muted mt-1",children:l("configForm.feishu.platform",{platform:l(u==="lark"?"configForm.feishu.platformLark":"configForm.feishu.platformFeishu")})})]});if(r==="idle"||r==="error")return f.jsxs("div",{className:"bg-[var(--card-hover)] rounded-md px-4 py-3 space-y-3",children:[o&&f.jsxs("div",{children:[f.jsx("p",{className:"text-xs text-muted mb-1",children:l("configForm.feishu.added")}),f.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[f.jsx("span",{className:"text-emerald-400",children:"✓"}),f.jsx("code",{className:"font-mono text-foreground/70",children:o}),f.jsx("span",{className:"text-muted opacity-60",children:m==="lark"?"Lark":l("configForm.feishu.platformFeishu")})]})]}),f.jsxs("div",{children:[f.jsx("button",{onClick:g,className:"px-4 py-2 bg-[#3370FF] text-white rounded-md text-xs font-medium hover:bg-[#3370FF]/90 transition-colors",children:l("configForm.feishu.addBot")}),f.jsx("p",{className:"text-xs text-muted mt-2",children:l("configForm.feishu.addBotHint")})]})]});const S=()=>{h.current=!0,d.current=!1,t("idle"),n(""),w(""),e("")};return f.jsx("div",{className:"bg-[var(--card-hover)] rounded-md px-4 py-4",children:f.jsxs("div",{className:"flex flex-col items-center gap-3",children:[N?f.jsx(k,{value:N,size:192,className:"rounded-lg"}):f.jsx("div",{className:"w-48 h-48 flex items-center justify-center",children:f.jsx("div",{className:"w-6 h-6 border-2 border-[#3370FF]/30 border-t-[#3370FF] rounded-full animate-spin"})}),f.jsx("div",{className:"text-sm text-muted",children:r==="loading"?l("configForm.feishu.gettingQr"):s}),f.jsxs("div",{className:"flex items-center gap-3",children:[f.jsx("button",{onClick:S,className:"px-3 py-1.5 text-xs text-white bg-red-500 rounded-md hover:bg-red-500/90 transition-colors",children:l("configForm.feishu.cancel")}),f.jsx("button",{onClick:()=>{S(),setTimeout(g,100)},className:"px-3 py-1.5 text-xs text-white bg-[#0066FF] rounded-md hover:bg-[#0066FF]/90 transition-colors",children:l("configForm.feishu.refresh")})]})]})})}function Le({instanceId:c,onConfigured:a}){const{t:o,i18n:m}=K(["instance","common"]),[p,l]=A.useState(""),[,N]=A.useState(""),[w,e]=A.useState("idle"),[r,t]=A.useState(""),[s,n]=A.useState(""),[u,i]=A.useState([]),d=A.useRef(!1),h=A.useRef(!1),R=A.useRef(0),M=6;A.useEffect(()=>{c&&Y(c).then(x=>{var F;(F=x==null?void 0:x.accounts)!=null&&F.length&&i(x.accounts)}).catch(()=>{})},[c]);const g=async()=>{if(c){h.current=!1,e("loading"),t(""),l("");try{let x=null;for(let F=0;F<3;F++){if(h.current)return;try{if(x=await me(c),x!=null&&x.qrcodeUrl)break}catch{F<2&&await new Promise(C=>setTimeout(C,1500))}}if(h.current)return;x!=null&&x.qrcodeUrl?(l(x.qrcodeUrl),N(x.sessionKey),e("waiting"),t(o("configForm.weixin.scanHint")),v(x.sessionKey)):(e("error"),t(o("qr.getFailed")))}catch{h.current||(e("error"),t(o("qr.getFailed")))}}},v=x=>{if(!c||d.current)return;d.current=!0,R.current=0;const F=async()=>{if(d.current)try{const C=await ge(c,x);if(R.current=0,C.connected){d.current=!1,e("confirmed"),t(C.message||o("qr.loginSuccess")),n(C.accountId||""),l(""),c&&Y(c).then(I=>{I!=null&&I.accounts&&i(I.accounts)}).catch(()=>{}),a==null||a();return}if(C.status==="scaned")e("scaned"),t(C.message||o("qr.scaned"));else if(C.status==="refreshed"&&C.qrcodeUrl)l(C.qrcodeUrl),e("waiting"),t(o("qr.refreshed"));else if(C.status==="expired"){d.current=!1,e("error"),t(C.message||o("qr.expired"));return}setTimeout(F,2e3)}catch{if(!d.current)return;if(R.current+=1,R.current>=M){d.current=!1,e("error"),t(o("qr.pollFailed",{defaultValue:"轮询失败,请刷新后重试"}));return}setTimeout(F,3e3)}};F()};if(A.useEffect(()=>()=>{d.current=!1},[]),w==="confirmed")return f.jsxs("div",{className:"bg-emerald-500/10 border border-emerald-500/20 rounded-md px-4 py-3 text-sm",children:[f.jsxs("div",{className:"flex items-center gap-2 text-emerald-400",children:[f.jsx("span",{className:"text-lg",children:"✓"}),f.jsx("span",{className:"font-medium",children:r})]}),s&&f.jsxs("p",{className:"text-xs text-muted mt-1",children:[o("configForm.weixin.accountId")," ",f.jsx("code",{className:"font-mono",children:s})]}),f.jsx("p",{className:"text-xs text-muted mt-1",children:o("configForm.weixin.restartHint")}),f.jsx("button",{onClick:g,className:"mt-2 px-3 py-1 text-xs border border-emerald-500/30 rounded text-emerald-400 hover:bg-emerald-500/10 transition-colors",children:o("configForm.weixin.addAnother")})]});if(w==="idle"||w==="error")return f.jsxs("div",{className:"bg-[var(--card-hover)] rounded-md px-4 py-3 space-y-3",children:[u.length>0&&f.jsxs("div",{children:[f.jsx("p",{className:"text-xs text-muted mb-1.5",children:o("configForm.weixin.added")}),u.map(x=>f.jsxs("div",{className:"flex items-center gap-2 text-xs py-1",children:[f.jsx("span",{className:"text-emerald-400",children:"✓"}),f.jsx("code",{className:"font-mono text-foreground/70",children:x.accountId}),x.savedAt&&f.jsx("span",{className:"text-muted opacity-60",children:new Date(x.savedAt).toLocaleDateString(m.language==="zh"?"zh-CN":"en-US")})]},x.accountId))]}),f.jsxs("div",{children:[f.jsx("button",{onClick:g,className:"px-4 py-2 bg-[#07C160] text-white rounded-md text-xs font-medium hover:bg-[#07C160]/90 transition-colors",children:o("configForm.weixin.addClawBot")}),f.jsx("p",{className:"text-xs text-muted mt-2",children:o("configForm.weixin.addClawBotHint",{extra:u.length>0?o("configForm.weixin.addClawBotHintRestart"):o("configForm.weixin.addClawBotHintMulti")})})]})]});const S=()=>{h.current=!0,d.current=!1,e("idle"),t(""),l(""),N("")};return f.jsx("div",{className:"bg-[var(--card-hover)] rounded-md px-4 py-4",children:f.jsxs("div",{className:"flex flex-col items-center gap-3",children:[p?f.jsx(k,{value:p,size:192,className:"rounded-lg"}):f.jsx("div",{className:"w-48 h-48 flex items-center justify-center",children:f.jsx("div",{className:"w-6 h-6 border-2 border-[#07C160]/30 border-t-[#07C160] rounded-full animate-spin"})}),f.jsx("div",{className:"flex items-center gap-2 text-sm",children:w==="scaned"?f.jsxs("span",{className:"text-[#07C160] font-medium",children:["👀 ",r]}):w==="loading"?f.jsx("span",{className:"text-muted",children:o("configForm.weixin.gettingQr")}):f.jsx("span",{className:"text-muted",children:r})}),f.jsxs("div",{className:"flex items-center gap-3",children:[f.jsx("button",{onClick:S,className:"px-3 py-1.5 text-xs text-white bg-red-500 rounded-md hover:bg-red-500/90 transition-colors",children:o("configForm.weixin.cancel")}),f.jsx("button",{onClick:()=>{S(),setTimeout(g,100)},className:"px-3 py-1.5 text-xs text-white bg-[#0066FF] rounded-md hover:bg-[#0066FF]/90 transition-colors",children:o("configForm.weixin.refresh")})]})]})})}export{Pe as F,k as Q,Le as W};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Geist:wght@400;500;600;700&family=Geist+Mono:wght@400;500&display=swap";*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Geist,Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Microsoft YaHei,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:Geist Mono,JetBrains Mono,SF Mono,Fira Code,ui-monospace,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: #F8FAFC;--foreground: #0F172A;--muted: #64748B;--card: rgba(0,0,0,.03);--card-hover: rgba(0,0,0,.055);--border: rgba(0,0,0,.09);--border-hover: rgba(0, 102, 255, .35);--primary: #0066FF;--primary-hover: #0052CC;--accent: #00D4AA;--sidebar-bg: #F1F5F9;--input-bg: rgba(0,0,0,.04)}@media (prefers-color-scheme: dark){:root{color-scheme:dark;--background: #0A0A0F;--foreground: #FAFAFA;--muted: rgba(255,255,255,.5);--card: rgba(255,255,255,.04);--card-hover: rgba(255,255,255,.07);--border: rgba(255,255,255,.08);--border-hover: rgba(0, 102, 255, .5);--primary: #0066FF;--primary-hover: #3385FF;--accent: #00D4AA;--sidebar-bg: rgba(255,255,255,.025);--input-bg: rgba(255,255,255,.06)}}html{font-family:Geist,Inter,-apple-system,BlinkMacSystemFont,PingFang SC,Microsoft YaHei,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body,select,select option,select optgroup{background-color:var(--background);color:var(--foreground)}.font-mono{font-family:Geist Mono,JetBrains Mono,SF Mono,Fira Code,ui-monospace,monospace}.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.-right-0\.5{right:-.125rem}.-top-0\.5{top:-.125rem}.bottom-0{bottom:0}.bottom-1{bottom:.25rem}.bottom-4{bottom:1rem}.left-0{left:0}.left-1\/2{left:50%}.left-3{left:.75rem}.left-4{left:1rem}.left-\[18px\]{left:18px}.left-\[3px\]{left:3px}.right-0{right:0}.right-1{right:.25rem}.right-2\.5{right:.625rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-1\/2{top:50%}.top-1\/3{top:33.333333%}.top-1\/4{top:25%}.top-3{top:.75rem}.top-4{top:1rem}.top-\[3px\]{top:3px}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.col-span-2{grid-column:span 2 / span 2}.-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0\.5{margin-top:.125rem;margin-bottom:.125rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-1\.5{margin-left:.375rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-9{margin-left:2.25rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-20{height:5rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-40{height:10rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-60{height:15rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[300px\]{height:300px}.h-\[400px\]{height:400px}.h-\[520px\]{height:520px}.h-\[600px\]{height:600px}.h-full{height:100%}.h-screen{height:100vh}.max-h-20{max-height:5rem}.max-h-40{max-height:10rem}.max-h-52{max-height:13rem}.max-h-\[480px\]{max-height:480px}.max-h-\[70vh\]{max-height:70vh}.max-h-\[80vh\]{max-height:80vh}.min-h-0{min-height:0px}.min-h-\[220px\]{min-height:220px}.min-h-\[240px\]{min-height:240px}.min-h-\[320px\]{min-height:320px}.min-h-\[400px\]{min-height:400px}.min-h-screen{min-height:100vh}.w-1\.5{width:.375rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-20{width:5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-40{width:10rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-52{width:13rem}.w-6{width:1.5rem}.w-60{width:15rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[500px\]{width:500px}.w-\[600px\]{width:600px}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-\[140px\]{min-width:140px}.min-w-\[200px\]{min-width:200px}.min-w-full{min-width:100%}.max-w-2xl{max-width:42rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-\[80\%\]{max-width:80%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0\.5{--tw-translate-x: .125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-4{--tw-translate-x: 1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.resize-none{resize:none}.resize-y{resize:vertical}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.flex-nowrap{flex-wrap:nowrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-x-1{-moz-column-gap:.25rem;column-gap:.25rem}.gap-y-0\.5{row-gap:.125rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-\[var\(--border\)\]>:not([hidden])~:not([hidden]){border-color:var(--border)}.self-end{align-self:flex-end}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-\[22px\]{border-radius:22px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-\[\#0066FF\]{--tw-border-opacity: 1;border-color:rgb(0 102 255 / var(--tw-border-opacity, 1))}.border-\[\#0066FF\]\/20{border-color:#06f3}.border-\[\#0066FF\]\/25{border-color:#0066ff40}.border-\[\#0066FF\]\/30{border-color:#0066ff4d}.border-\[\#0066FF\]\/40{border-color:#06f6}.border-\[\#0066FF\]\/50{border-color:#0066ff80}.border-\[\#07C160\]\/30{border-color:#07c1604d}.border-\[\#3370FF\]\/30{border-color:#3370ff4d}.border-\[\#ff6b6b\]\/25{border-color:#ff6b6b40}.border-\[var\(--border\)\]{border-color:var(--border)}.border-\[var\(--primary\)\]{border-color:var(--primary)}.border-amber-300{--tw-border-opacity: 1;border-color:rgb(252 211 77 / var(--tw-border-opacity, 1))}.border-amber-500\/20{border-color:#f59e0b33}.border-amber-500\/30{border-color:#f59e0b4d}.border-cyan-500\/20{border-color:#06b6d433}.border-emerald-500\/20{border-color:#10b98133}.border-emerald-500\/30{border-color:#10b9814d}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.border-green-300{--tw-border-opacity: 1;border-color:rgb(134 239 172 / var(--tw-border-opacity, 1))}.border-indigo-500\/20{border-color:#6366f133}.border-muted{border-color:var(--muted)}.border-red-300{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity, 1))}.border-red-500\/20{border-color:#ef444433}.border-red-500\/30{border-color:#ef44444d}.border-sky-500\/20{border-color:#0ea5e933}.border-sky-500\/30{border-color:#0ea5e94d}.border-transparent{border-color:transparent}.border-violet-500\/20{border-color:#8b5cf633}.border-white\/10{border-color:#ffffff1a}.border-white\/15{border-color:#ffffff26}.border-white\/30{border-color:#ffffff4d}.border-white\/40{border-color:#fff6}.border-l-\[\#0066FF\]{--tw-border-opacity: 1;border-left-color:rgb(0 102 255 / var(--tw-border-opacity, 1))}.border-l-\[\#00D4AA\]{--tw-border-opacity: 1;border-left-color:rgb(0 212 170 / var(--tw-border-opacity, 1))}.border-l-red-400{--tw-border-opacity: 1;border-left-color:rgb(248 113 113 / var(--tw-border-opacity, 1))}.border-t-\[\#0066FF\]{--tw-border-opacity: 1;border-top-color:rgb(0 102 255 / var(--tw-border-opacity, 1))}.border-t-\[\#07C160\]{--tw-border-opacity: 1;border-top-color:rgb(7 193 96 / var(--tw-border-opacity, 1))}.border-t-\[\#3370FF\]{--tw-border-opacity: 1;border-top-color:rgb(51 112 255 / var(--tw-border-opacity, 1))}.border-t-foreground{border-top-color:var(--foreground)}.border-t-muted{border-top-color:var(--muted)}.border-t-transparent{border-top-color:transparent}.border-t-white{--tw-border-opacity: 1;border-top-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.bg-\[\#0066FF\]{--tw-bg-opacity: 1;background-color:rgb(0 102 255 / var(--tw-bg-opacity, 1))}.bg-\[\#0066FF\]\/10{background-color:#0066ff1a}.bg-\[\#0066FF\]\/15{background-color:#0066ff26}.bg-\[\#0066FF\]\/5{background-color:#0066ff0d}.bg-\[\#0066FF\]\/\[0\.06\]{background-color:#0066ff0f}.bg-\[\#0066FF\]\/\[0\.07\]{background-color:#0066ff12}.bg-\[\#00D4AA\]{--tw-bg-opacity: 1;background-color:rgb(0 212 170 / var(--tw-bg-opacity, 1))}.bg-\[\#07C160\]{--tw-bg-opacity: 1;background-color:rgb(7 193 96 / var(--tw-bg-opacity, 1))}.bg-\[\#07C160\]\/5{background-color:#07c1600d}.bg-\[\#09111f\]{--tw-bg-opacity: 1;background-color:rgb(9 17 31 / var(--tw-bg-opacity, 1))}.bg-\[\#3370FF\]{--tw-bg-opacity: 1;background-color:rgb(51 112 255 / var(--tw-bg-opacity, 1))}.bg-\[\#3370FF\]\/5{background-color:#3370ff0d}.bg-\[\#39d98a\]{--tw-bg-opacity: 1;background-color:rgb(57 217 138 / var(--tw-bg-opacity, 1))}.bg-\[\#ff6b6b\]{--tw-bg-opacity: 1;background-color:rgb(255 107 107 / var(--tw-bg-opacity, 1))}.bg-\[\#ff6b6b\]\/10{background-color:#ff6b6b1a}.bg-\[var\(--bg\)\]{background-color:var(--bg)}.bg-\[var\(--border\)\]{background-color:var(--border)}.bg-\[var\(--card\)\]{background-color:var(--card)}.bg-\[var\(--card-hover\)\]{background-color:var(--card-hover)}.bg-\[var\(--input-bg\)\]{background-color:var(--input-bg)}.bg-\[var\(--muted\)\]{background-color:var(--muted)}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-amber-500\/15{background-color:#f59e0b26}.bg-amber-500\/20{background-color:#f59e0b33}.bg-background{background-color:var(--background)}.bg-black\/20{background-color:#0003}.bg-black\/30{background-color:#0000004d}.bg-black\/60{background-color:#0009}.bg-black\/\[0\.03\]{background-color:#00000008}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-card{background-color:var(--card)}.bg-cyan-500\/10{background-color:#06b6d41a}.bg-emerald-400{--tw-bg-opacity: 1;background-color:rgb(52 211 153 / var(--tw-bg-opacity, 1))}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-emerald-500\/10{background-color:#10b9811a}.bg-emerald-500\/15{background-color:#10b98126}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-400{--tw-bg-opacity: 1;background-color:rgb(156 163 175 / var(--tw-bg-opacity, 1))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-green-400{--tw-bg-opacity: 1;background-color:rgb(74 222 128 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-indigo-500\/10{background-color:#6366f11a}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-400{--tw-bg-opacity: 1;background-color:rgb(248 113 113 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-500\/10{background-color:#ef44441a}.bg-red-500\/15{background-color:#ef444426}.bg-red-500\/20{background-color:#ef444433}.bg-red-500\/5{background-color:#ef44440d}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-red-950\/20{background-color:#450a0a33}.bg-sky-400{--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity, 1))}.bg-sky-500{--tw-bg-opacity: 1;background-color:rgb(14 165 233 / var(--tw-bg-opacity, 1))}.bg-sky-500\/10{background-color:#0ea5e91a}.bg-slate-500{--tw-bg-opacity: 1;background-color:rgb(100 116 139 / var(--tw-bg-opacity, 1))}.bg-slate-500\/10{background-color:#64748b1a}.bg-transparent{background-color:transparent}.bg-violet-500\/10{background-color:#8b5cf61a}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-\[linear-gradient\(180deg\,rgba\(2\,6\,23\,0\.96\)\,rgba\(15\,23\,42\,0\.92\)\)\]{background-image:linear-gradient(180deg,#020617f5,#0f172aeb)}.bg-\[radial-gradient\(circle\,rgba\(0\,102\,255\,0\.08\)_0\%\,transparent_70\%\)\]{background-image:radial-gradient(circle,rgba(0,102,255,.08) 0%,transparent 70%)}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-slate-950\/85{--tw-gradient-from: rgb(2 6 23 / .85) var(--tw-gradient-from-position);--tw-gradient-to: rgb(2 6 23 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.object-contain{-o-object-fit:contain;object-fit:contain}.p-0{padding:0}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-0\.5{padding-bottom:.125rem}.pb-1{padding-bottom:.25rem}.pb-4{padding-bottom:1rem}.pl-9{padding-left:2.25rem}.pl-\[6px\]{padding-left:6px}.pr-10{padding-right:2.5rem}.pr-3{padding-right:.75rem}.pr-9{padding-right:2.25rem}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:Geist Mono,JetBrains Mono,SF Mono,Fira Code,ui-monospace,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[10\.5px\]{font-size:10.5px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.tracking-\[0\.08em\]{letter-spacing:.08em}.tracking-\[0\.16em\]{letter-spacing:.16em}.tracking-\[0\.18em\]{letter-spacing:.18em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-\[\#0066FF\]{--tw-text-opacity: 1;color:rgb(0 102 255 / var(--tw-text-opacity, 1))}.text-\[\#0066FF\]\/80{color:#06fc}.text-\[\#0066FF\]\/90{color:#0066ffe6}.text-\[\#00D4AA\]{--tw-text-opacity: 1;color:rgb(0 212 170 / var(--tw-text-opacity, 1))}.text-\[\#07C160\]{--tw-text-opacity: 1;color:rgb(7 193 96 / var(--tw-text-opacity, 1))}.text-\[\#3370FF\]{--tw-text-opacity: 1;color:rgb(51 112 255 / var(--tw-text-opacity, 1))}.text-\[\#7f97c2\]{--tw-text-opacity: 1;color:rgb(127 151 194 / var(--tw-text-opacity, 1))}.text-\[\#7fd0ff\]{--tw-text-opacity: 1;color:rgb(127 208 255 / var(--tw-text-opacity, 1))}.text-\[\#9cb3d9\]{--tw-text-opacity: 1;color:rgb(156 179 217 / var(--tw-text-opacity, 1))}.text-\[\#d7e3ff\]{--tw-text-opacity: 1;color:rgb(215 227 255 / var(--tw-text-opacity, 1))}.text-\[\#e8f0ff\]{--tw-text-opacity: 1;color:rgb(232 240 255 / var(--tw-text-opacity, 1))}.text-\[\#ff9c9c\]{--tw-text-opacity: 1;color:rgb(255 156 156 / var(--tw-text-opacity, 1))}.text-\[\#ffc2c2\]{--tw-text-opacity: 1;color:rgb(255 194 194 / var(--tw-text-opacity, 1))}.text-\[var\(--muted\)\]{color:var(--muted)}.text-amber-200{--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.text-amber-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.text-amber-300\/80{color:#fcd34dcc}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-400\/60{color:#fbbf2499}.text-amber-400\/90{color:#fbbf24e6}.text-amber-50{--tw-text-opacity: 1;color:rgb(255 251 235 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-amber-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-current{color:currentColor}.text-cyan-400{--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.text-emerald-100{--tw-text-opacity: 1;color:rgb(209 250 229 / var(--tw-text-opacity, 1))}.text-emerald-200{--tw-text-opacity: 1;color:rgb(167 243 208 / var(--tw-text-opacity, 1))}.text-emerald-200\/80{color:#a7f3d0cc}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-foreground{color:var(--foreground)}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-indigo-400{--tw-text-opacity: 1;color:rgb(129 140 248 / var(--tw-text-opacity, 1))}.text-muted{color:var(--muted)}.text-red-100{--tw-text-opacity: 1;color:rgb(254 226 226 / var(--tw-text-opacity, 1))}.text-red-200{--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.text-red-200\/80{color:#fecacacc}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-sky-100{--tw-text-opacity: 1;color:rgb(224 242 254 / var(--tw-text-opacity, 1))}.text-sky-200{--tw-text-opacity: 1;color:rgb(186 230 253 / var(--tw-text-opacity, 1))}.text-sky-200\/80{color:#bae6fdcc}.text-sky-400{--tw-text-opacity: 1;color:rgb(56 189 248 / var(--tw-text-opacity, 1))}.text-slate-200\/90{color:#e2e8f0e6}.text-violet-400{--tw-text-opacity: 1;color:rgb(167 139 250 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-500{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}.decoration-current{text-decoration-color:currentColor}.underline-offset-2{text-underline-offset:2px}.placeholder-\[var\(--muted\)\]::-moz-placeholder{color:var(--muted)}.placeholder-\[var\(--muted\)\]::placeholder{color:var(--muted)}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(0\,102\,255\,0\.3\)\]{--tw-shadow: 0 0 12px rgba(0,102,255,.3);--tw-shadow-colored: 0 0 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_20px_rgba\(0\,102\,255\,0\.3\)\]{--tw-shadow: 0 0 20px rgba(0,102,255,.3);--tw-shadow-colored: 0 0 20px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_6px_rgba\(16\,185\,129\,0\.6\)\]{--tw-shadow: 0 0 6px rgba(16,185,129,.6);--tw-shadow-colored: 0 0 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_6px_rgba\(16\,185\,129\,0\.7\)\]{--tw-shadow: 0 0 6px rgba(16,185,129,.7);--tw-shadow-colored: 0 0 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_6px_rgba\(239\,68\,68\,0\.6\)\]{--tw-shadow: 0 0 6px rgba(239,68,68,.6);--tw-shadow-colored: 0 0 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_6px_rgba\(251\,191\,36\,0\.5\)\]{--tw-shadow: 0 0 6px rgba(251,191,36,.5);--tw-shadow-colored: 0 0 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_6px_rgba\(251\,191\,36\,0\.6\)\]{--tw-shadow: 0 0 6px rgba(251,191,36,.6);--tw-shadow-colored: 0 0 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(148\,163\,184\,0\.35\)\]{--tw-shadow: 0 0 8px rgba(148,163,184,.35);--tw-shadow-colored: 0 0 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(248\,113\,113\,0\.55\)\]{--tw-shadow: 0 0 8px rgba(248,113,113,.55);--tw-shadow-colored: 0 0 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(52\,211\,153\,0\.55\)\]{--tw-shadow: 0 0 8px rgba(52,211,153,.55);--tw-shadow-colored: 0 0 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(56\,189\,248\,0\.55\)\]{--tw-shadow: 0 0 8px rgba(56,189,248,.55);--tw-shadow-colored: 0 0 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_18px_48px_rgba\(15\,23\,42\,0\.06\)\]{--tw-shadow: 0 18px 48px rgba(15,23,42,.06);--tw-shadow-colored: 0 18px 48px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_18px_60px_rgba\(4\,12\,24\,0\.28\)\]{--tw-shadow: 0 18px 60px rgba(4,12,24,.28);--tw-shadow-colored: 0 18px 60px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_8px_24px_rgba\(0\,102\,255\,0\.24\)\]{--tw-shadow: 0 8px 24px rgba(0,102,255,.24);--tw-shadow-colored: 0 8px 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[inset_0_1px_0_rgba\(255\,255\,255\,0\.04\)\]{--tw-shadow: inset 0 1px 0 rgba(255,255,255,.04);--tw-shadow-colored: inset 0 1px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-\[100px\]{--tw-blur: blur(100px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-\[90px\]{--tw-blur: blur(90px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-xl{--tw-backdrop-blur: blur(24px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#8080804d}.sidebar-scroll::-webkit-scrollbar{width:4px}.sidebar-scroll::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}.grid-bg{background-image:linear-gradient(to right,var(--border) 1px,transparent 1px),linear-gradient(to bottom,var(--border) 1px,transparent 1px);background-size:40px 40px}.glow-blue{background:radial-gradient(circle,rgba(0,102,255,.08) 0%,transparent 70%)}.placeholder\:text-\[\#7188b2\]::-moz-placeholder{--tw-text-opacity: 1;color:rgb(113 136 178 / var(--tw-text-opacity, 1))}.placeholder\:text-\[\#7188b2\]::placeholder{--tw-text-opacity: 1;color:rgb(113 136 178 / var(--tw-text-opacity, 1))}.placeholder\:text-muted::-moz-placeholder{color:var(--muted)}.placeholder\:text-muted::placeholder{color:var(--muted)}.last\:border-0:last-child{border-width:0px}.hover\:border-\[\#0066FF\]\/35:hover{border-color:#0066ff59}.hover\:border-\[\#0066FF\]\/40:hover{border-color:#06f6}.hover\:border-\[var\(--border-hover\)\]:hover{border-color:var(--border-hover)}.hover\:border-white\/35:hover{border-color:#ffffff59}.hover\:bg-\[\#0052cc\]:hover{--tw-bg-opacity: 1;background-color:rgb(0 82 204 / var(--tw-bg-opacity, 1))}.hover\:bg-\[\#0066FF\]\/10:hover{background-color:#0066ff1a}.hover\:bg-\[\#0066FF\]\/15:hover{background-color:#0066ff26}.hover\:bg-\[\#0066FF\]\/20:hover{background-color:#06f3}.hover\:bg-\[\#0066FF\]\/5:hover{background-color:#0066ff0d}.hover\:bg-\[\#0066FF\]\/90:hover{background-color:#0066ffe6}.hover\:bg-\[\#0066FF\]\/\[0\.04\]:hover{background-color:#0066ff0a}.hover\:bg-\[\#07C160\]\/10:hover{background-color:#07c1601a}.hover\:bg-\[\#07C160\]\/90:hover{background-color:#07c160e6}.hover\:bg-\[\#3370FF\]\/10:hover{background-color:#3370ff1a}.hover\:bg-\[\#3370FF\]\/90:hover{background-color:#3370ffe6}.hover\:bg-\[var\(--card\)\]:hover{background-color:var(--card)}.hover\:bg-\[var\(--card-hover\)\]:hover{background-color:var(--card-hover)}.hover\:bg-\[var\(--hover-bg\)\]:hover{background-color:var(--hover-bg)}.hover\:bg-\[var\(--input-bg\)\]:hover{background-color:var(--input-bg)}.hover\:bg-amber-400:hover{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.hover\:bg-amber-500\/30:hover{background-color:#f59e0b4d}.hover\:bg-blue-700:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity, 1))}.hover\:bg-emerald-400:hover{--tw-bg-opacity: 1;background-color:rgb(52 211 153 / var(--tw-bg-opacity, 1))}.hover\:bg-emerald-500\/10:hover{background-color:#10b9811a}.hover\:bg-red-400:hover{--tw-bg-opacity: 1;background-color:rgb(248 113 113 / var(--tw-bg-opacity, 1))}.hover\:bg-red-500\/10:hover{background-color:#ef44441a}.hover\:bg-red-500\/15:hover{background-color:#ef444426}.hover\:bg-red-500\/20:hover{background-color:#ef444433}.hover\:bg-red-500\/90:hover{background-color:#ef4444e6}.hover\:bg-red-700:hover{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.hover\:bg-sky-400:hover{--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity, 1))}.hover\:text-\[\#0066FF\]:hover{--tw-text-opacity: 1;color:rgb(0 102 255 / var(--tw-text-opacity, 1))}.hover\:text-\[\#0066FF\]\/80:hover{color:#06fc}.hover\:text-amber-300:hover{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.hover\:text-amber-400:hover{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.hover\:text-blue-600:hover{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.hover\:text-emerald-400:hover{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:text-red-300:hover{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.hover\:text-red-400:hover{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:opacity-90:hover{opacity:.9}.hover\:shadow-\[0_0_28px_rgba\(0\,102\,255\,0\.45\)\]:hover{--tw-shadow: 0 0 28px rgba(0,102,255,.45);--tw-shadow-colored: 0 0 28px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\:border-\[\#0066FF\]\/60:focus{border-color:#06f9}.focus\:border-amber-500\/60:focus{border-color:#f59e0b99}.focus\:border-red-500\/60:focus{border-color:#ef444499}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-\[\#0066FF\]\/60:focus{--tw-ring-color: rgb(0 102 255 / .6)}.focus\:ring-amber-500\/60:focus{--tw-ring-color: rgb(245 158 11 / .6)}.focus\:ring-red-500\/60:focus{--tw-ring-color: rgb(239 68 68 / .6)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-gray-300:disabled{--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity, 1))}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-45:disabled{opacity:.45}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}@media (min-width: 640px){.sm\:col-span-1{grid-column:span 1 / span 1}.sm\:inline{display:inline}.sm\:table-cell{display:table-cell}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}}@media (min-width: 768px){.md\:table-cell{display:table-cell}}@media (min-width: 1024px){.lg\:flex{display:flex}.lg\:table-cell{display:table-cell}.lg\:hidden{display:none}.lg\:min-h-\[500px\]{min-height:500px}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-\[1\.1fr_0\.9fr\]{grid-template-columns:1.1fr .9fr}.lg\:grid-cols-\[280px_minmax\(0\,1fr\)\]{grid-template-columns:280px minmax(0,1fr)}}@media (min-width: 1280px){.xl\:max-w-5xl{max-width:64rem}.xl\:max-w-6xl{max-width:72rem}}@media (min-width: 1536px){.\32xl\:max-w-none{max-width:none}.\32xl\:px-6{padding-left:1.5rem;padding-right:1.5rem}.\32xl\:py-3{padding-top:.75rem;padding-bottom:.75rem}.\32xl\:py-4{padding-top:1rem;padding-bottom:1rem}}@media (prefers-color-scheme: dark){.dark\:border-amber-700{--tw-border-opacity: 1;border-color:rgb(180 83 9 / var(--tw-border-opacity, 1))}.dark\:border-gray-600{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1))}.dark\:border-gray-700{--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.dark\:border-green-700{--tw-border-opacity: 1;border-color:rgb(21 128 61 / var(--tw-border-opacity, 1))}.dark\:border-red-700{--tw-border-opacity: 1;border-color:rgb(185 28 28 / var(--tw-border-opacity, 1))}.dark\:bg-amber-900\/20{background-color:#78350f33}.dark\:bg-blue-900\/30{background-color:#1e3a8a4d}.dark\:bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-800{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-800\/40{background-color:#1f293766}.dark\:bg-gray-900\/40{background-color:#11182766}.dark\:bg-green-900\/20{background-color:#14532d33}.dark\:bg-red-900\/20{background-color:#7f1d1d33}.dark\:bg-red-900\/30{background-color:#7f1d1d4d}.dark\:text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.dark\:text-blue-200{--tw-text-opacity: 1;color:rgb(191 219 254 / var(--tw-text-opacity, 1))}.dark\:text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.dark\:text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.dark\:text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.dark\:text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.dark\:text-red-200{--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.dark\:hover\:text-blue-400:hover{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}}
|