nextclaw 0.8.40 → 0.8.42

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.
Files changed (32) hide show
  1. package/dist/cli/index.js +1 -1
  2. package/package.json +4 -4
  3. package/templates/USAGE.md +17 -5
  4. package/ui-dist/assets/ChannelsList-DKiedAFa.js +1 -0
  5. package/ui-dist/assets/{ChatPage-CjzR-76f.js → ChatPage-BwNLpkSy.js} +16 -16
  6. package/ui-dist/assets/{CronConfig-DREWLzKD.js → CronConfig-DS4SLvdJ.js} +1 -1
  7. package/ui-dist/assets/{DocBrowser-fXdmzwRi.js → DocBrowser-GX0i3zMz.js} +1 -1
  8. package/ui-dist/assets/{MarketplacePage-zKC-b_O_.js → MarketplacePage-Cfary3pL.js} +1 -1
  9. package/ui-dist/assets/{ModelConfig-BdogzFBq.js → ModelConfig-DqA1Fpq1.js} +1 -1
  10. package/ui-dist/assets/ProvidersList-Bp8j2dHz.js +1 -0
  11. package/ui-dist/assets/{RuntimeConfig-CGsoLtsV.js → RuntimeConfig-BPFqqOmo.js} +1 -1
  12. package/ui-dist/assets/{SecretsConfig-B8ZDpRgB.js → SecretsConfig-817qoOc8.js} +1 -1
  13. package/ui-dist/assets/{SessionsConfig-CcpfGazP.js → SessionsConfig-DSz76nPB.js} +1 -1
  14. package/ui-dist/assets/{card-Bt8T3JA3.js → card-DsXZnE66.js} +1 -1
  15. package/ui-dist/assets/{dialog-BNi5ymWD.js → dialog-CM-OB-VU.js} +2 -2
  16. package/ui-dist/assets/index-BDnLuH5V.js +2 -0
  17. package/ui-dist/assets/index-yypHrk9r.css +1 -0
  18. package/ui-dist/assets/{label-BDCnjFl3.js → label-BryQW6Hh.js} +1 -1
  19. package/ui-dist/assets/logos-DpQfWN7T.js +1 -0
  20. package/ui-dist/assets/{page-layout-DWVnm0X8.js → page-layout-CljvdClt.js} +1 -1
  21. package/ui-dist/assets/{switch-CrmdAOBw.js → switch-DK9xeFoj.js} +1 -1
  22. package/ui-dist/assets/{tabs-custom-WJxQwDQy.js → tabs-custom-BWSgRC2i.js} +1 -1
  23. package/ui-dist/assets/useConfig-Cr9T194r.js +6 -0
  24. package/ui-dist/assets/{useConfirmDialog-C5hEiEeb.js → useConfirmDialog-CeUaLKWy.js} +1 -1
  25. package/ui-dist/assets/{vendor-H2M3a_4Z.js → vendor-CrNxGKd2.js} +77 -72
  26. package/ui-dist/index.html +3 -3
  27. package/ui-dist/assets/ChannelsList-DgkIu7_t.js +0 -1
  28. package/ui-dist/assets/ProvidersList-BLScOe9j.js +0 -1
  29. package/ui-dist/assets/action-link-RjYHzlQk.js +0 -1
  30. package/ui-dist/assets/index-B_OeEGic.css +0 -1
  31. package/ui-dist/assets/index-CtNWUrVR.js +0 -2
  32. package/ui-dist/assets/useConfig-COoN7EVf.js +0 -6
package/dist/cli/index.js CHANGED
@@ -3527,7 +3527,7 @@ var ServiceCommands = class {
3527
3527
  continue;
3528
3528
  }
3529
3529
  yield event;
3530
- if (event.type !== "delta") {
3530
+ if (event.type === "final" || event.type === "error") {
3531
3531
  await run;
3532
3532
  return;
3533
3533
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nextclaw",
3
- "version": "0.8.40",
3
+ "version": "0.8.42",
4
4
  "description": "Lightweight personal AI assistant with CLI, multi-provider routing, and channel integrations.",
5
5
  "private": false,
6
6
  "type": "module",
@@ -38,9 +38,9 @@
38
38
  "dependencies": {
39
39
  "chokidar": "^3.6.0",
40
40
  "commander": "^12.1.0",
41
- "@nextclaw/core": "^0.6.37",
42
- "@nextclaw/server": "^0.5.20",
43
- "@nextclaw/openclaw-compat": "^0.1.28"
41
+ "@nextclaw/core": "^0.6.38",
42
+ "@nextclaw/server": "^0.5.21",
43
+ "@nextclaw/openclaw-compat": "^0.1.29"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@types/node": "^20.17.6",
@@ -37,27 +37,39 @@ When NextClaw AI needs to operate the product itself (status/doctor/channels/con
37
37
 
38
38
  ## Quick Start
39
39
 
40
- 1. Install:
40
+ 1. Install (desktop installer beta, no Node needed):
41
+
42
+ - Download from <https://github.com/Peiiii/nextclaw/releases/latest>
43
+ - macOS:
44
+ - `NextClaw-<version>-beta-macos-arm64-installer.pkg` (Apple Silicon)
45
+ - `NextClaw-<version>-beta-macos-x64-installer.pkg` (Intel)
46
+ - Windows:
47
+ - `NextClaw-<version>-beta-windows-x64-installer.exe`
48
+ - `NextClaw-<version>-beta-windows-arm64-installer.exe`
49
+ - Open **Start NextClaw** from Desktop/Start Menu.
50
+ - Beta notice: desktop installers are still beta and may have issues.
51
+
52
+ 2. Or install with npm:
41
53
 
42
54
  ```bash
43
55
  npm i -g nextclaw
44
56
  ```
45
57
 
46
- 2. Start the service (gateway + config UI in the background):
58
+ 3. Start the service (gateway + config UI in the background):
47
59
 
48
60
  ```bash
49
61
  nextclaw start
50
62
  ```
51
63
 
52
- 3. Open **http://127.0.0.1:18791** in your browser. Set a provider (e.g. OpenRouter) and model in the UI.
64
+ 4. Open **http://127.0.0.1:18791** in your browser. Set a provider (e.g. OpenRouter) and model in the UI.
53
65
 
54
- 4. Optionally run `nextclaw init` to create a workspace with agent templates, or chat from the CLI:
66
+ 5. Optionally run `nextclaw init` to create a workspace with agent templates, or chat from the CLI:
55
67
 
56
68
  ```bash
57
69
  nextclaw agent -m "Hello!"
58
70
  ```
59
71
 
60
- 5. Stop the service when done:
72
+ 6. Stop the service when done:
61
73
 
62
74
  ```bash
63
75
  nextclaw stop
@@ -0,0 +1 @@
1
+ import{r as k,j as a,ad as ae,M as I,ae as A,af as S,K as te,a0 as ne,ab as le,ag as se,ah as oe,ai as re,n as K,aj as ce,ak as ie,al as me}from"./vendor-CrNxGKd2.js";import{u as _,a as q,h as pe,i as de,I as F,f as ue}from"./useConfig-Cr9T194r.js";import{t as e,c as j,u as G,S as be,b as xe,d as ge,e as ye,g as he}from"./index-BDnLuH5V.js";import{D as fe,a as we,b as je,c as ve,d as ke,e as Ce}from"./dialog-CM-OB-VU.js";import{B as T,P as Ne,a as Pe}from"./page-layout-CljvdClt.js";import{L as Se}from"./label-BryQW6Hh.js";import{S as Ie}from"./switch-DK9xeFoj.js";import{h as M}from"./config-hints-CApS3K_7.js";import{T as De}from"./tabs-custom-BWSgRC2i.js";import{L as Fe,a as Te,S as Me}from"./logos-DpQfWN7T.js";function Ae({value:n,onChange:l,className:r,placeholder:p=""}){const[m,g]=k.useState(""),u=b=>{b.key==="Enter"&&m.trim()?(b.preventDefault(),l([...n,m.trim()]),g("")):b.key==="Backspace"&&!m&&n.length>0&&l(n.slice(0,-1))},f=b=>{l(n.filter((i,x)=>x!==b))};return a.jsxs("div",{className:j("flex flex-wrap gap-2 p-2 border rounded-md min-h-[42px]",r),children:[n.map((b,i)=>a.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-1 bg-primary text-primary-foreground rounded text-sm",children:[b,a.jsx("button",{type:"button",onClick:()=>f(i),className:"hover:text-red-300 transition-colors",children:a.jsx(ae,{className:"h-3 w-3"})})]},i)),a.jsx("input",{type:"text",value:m,onChange:b=>g(b.target.value),onKeyDown:u,className:"flex-1 outline-none min-w-[100px] bg-transparent text-sm",placeholder:p||e("enterTag")})]})}const E=[{value:"pairing",label:"pairing"},{value:"allowlist",label:"allowlist"},{value:"open",label:"open"},{value:"disabled",label:"disabled"}],B=[{value:"open",label:"open"},{value:"allowlist",label:"allowlist"},{value:"disabled",label:"disabled"}],Le=[{value:"off",label:"off"},{value:"partial",label:"partial"},{value:"block",label:"block"},{value:"progress",label:"progress"}],Ue=n=>n.includes("token")||n.includes("secret")||n.includes("password")?a.jsx(te,{className:"h-3.5 w-3.5 text-gray-500"}):n.includes("url")||n.includes("host")?a.jsx(ne,{className:"h-3.5 w-3.5 text-gray-500"}):n.includes("email")||n.includes("mail")?a.jsx(A,{className:"h-3.5 w-3.5 text-gray-500"}):n.includes("id")||n.includes("from")?a.jsx(le,{className:"h-3.5 w-3.5 text-gray-500"}):n==="enabled"||n==="consentGranted"?a.jsx(se,{className:"h-3.5 w-3.5 text-gray-500"}):a.jsx(oe,{className:"h-3.5 w-3.5 text-gray-500"});function O(){return{telegram:[{name:"enabled",type:"boolean",label:e("enabled")},{name:"token",type:"password",label:e("botToken")},{name:"allowFrom",type:"tags",label:e("allowFrom")},{name:"proxy",type:"text",label:e("proxy")},{name:"accountId",type:"text",label:e("accountId")},{name:"dmPolicy",type:"select",label:e("dmPolicy"),options:E},{name:"groupPolicy",type:"select",label:e("groupPolicy"),options:B},{name:"groupAllowFrom",type:"tags",label:e("groupAllowFrom")},{name:"requireMention",type:"boolean",label:e("requireMention")},{name:"mentionPatterns",type:"tags",label:e("mentionPatterns")},{name:"groups",type:"json",label:e("groupRulesJson")}],discord:[{name:"enabled",type:"boolean",label:e("enabled")},{name:"token",type:"password",label:e("botToken")},{name:"allowBots",type:"boolean",label:e("allowBotMessages")},{name:"allowFrom",type:"tags",label:e("allowFrom")},{name:"gatewayUrl",type:"text",label:e("gatewayUrl")},{name:"intents",type:"number",label:e("intents")},{name:"proxy",type:"text",label:e("proxy")},{name:"mediaMaxMb",type:"number",label:e("attachmentMaxSizeMb")},{name:"streaming",type:"select",label:e("streamingMode"),options:Le},{name:"draftChunk",type:"json",label:e("draftChunkingJson")},{name:"textChunkLimit",type:"number",label:e("textChunkLimit")},{name:"accountId",type:"text",label:e("accountId")},{name:"dmPolicy",type:"select",label:e("dmPolicy"),options:E},{name:"groupPolicy",type:"select",label:e("groupPolicy"),options:B},{name:"groupAllowFrom",type:"tags",label:e("groupAllowFrom")},{name:"requireMention",type:"boolean",label:e("requireMention")},{name:"mentionPatterns",type:"tags",label:e("mentionPatterns")},{name:"groups",type:"json",label:e("groupRulesJson")}],whatsapp:[{name:"enabled",type:"boolean",label:e("enabled")},{name:"bridgeUrl",type:"text",label:e("bridgeUrl")},{name:"allowFrom",type:"tags",label:e("allowFrom")}],feishu:[{name:"enabled",type:"boolean",label:e("enabled")},{name:"appId",type:"text",label:e("appId")},{name:"appSecret",type:"password",label:e("appSecret")},{name:"encryptKey",type:"password",label:e("encryptKey")},{name:"verificationToken",type:"password",label:e("verificationToken")},{name:"allowFrom",type:"tags",label:e("allowFrom")}],dingtalk:[{name:"enabled",type:"boolean",label:e("enabled")},{name:"clientId",type:"text",label:e("clientId")},{name:"clientSecret",type:"password",label:e("clientSecret")},{name:"allowFrom",type:"tags",label:e("allowFrom")}],wecom:[{name:"enabled",type:"boolean",label:e("enabled")},{name:"corpId",type:"text",label:e("corpId")},{name:"agentId",type:"text",label:e("agentId")},{name:"secret",type:"password",label:e("secret")},{name:"token",type:"password",label:e("token")},{name:"callbackPort",type:"number",label:e("callbackPort")},{name:"callbackPath",type:"text",label:e("callbackPath")},{name:"allowFrom",type:"tags",label:e("allowFrom")}],slack:[{name:"enabled",type:"boolean",label:e("enabled")},{name:"mode",type:"text",label:e("mode")},{name:"webhookPath",type:"text",label:e("webhookPath")},{name:"allowBots",type:"boolean",label:e("allowBotMessages")},{name:"botToken",type:"password",label:e("botToken")},{name:"appToken",type:"password",label:e("appToken")}],email:[{name:"enabled",type:"boolean",label:e("enabled")},{name:"consentGranted",type:"boolean",label:e("consentGranted")},{name:"imapHost",type:"text",label:e("imapHost")},{name:"imapPort",type:"number",label:e("imapPort")},{name:"imapUsername",type:"text",label:e("imapUsername")},{name:"imapPassword",type:"password",label:e("imapPassword")},{name:"fromAddress",type:"email",label:e("fromAddress")}],mochat:[{name:"enabled",type:"boolean",label:e("enabled")},{name:"baseUrl",type:"text",label:e("baseUrl")},{name:"clawToken",type:"password",label:e("clawToken")},{name:"agentUserId",type:"text",label:e("agentUserId")},{name:"allowFrom",type:"tags",label:e("allowFrom")}],qq:[{name:"enabled",type:"boolean",label:e("enabled")},{name:"appId",type:"text",label:e("appId")},{name:"secret",type:"password",label:e("appSecret")},{name:"markdownSupport",type:"boolean",label:e("markdownSupport")},{name:"allowFrom",type:"tags",label:e("allowFrom")}]}}const R={telegram:I,slack:I,email:A,default:I},$={telegram:"from-primary-300 to-primary-600",slack:"from-primary-200 to-primary-500",email:"from-primary-100 to-primary-400",default:"from-gray-300 to-gray-500"};function D(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function J(n,l){const r={...n};for(const[p,m]of Object.entries(l)){const g=r[p];if(D(g)&&D(m)){r[p]=J(g,m);continue}r[p]=m}return r}function Ee(n,l){const r=n.split("."),p={};let m=p;for(let g=0;g<r.length-1;g+=1){const u=r[g];m[u]={},m=m[u]}return m[r[r.length-1]]=l,p}function Be(){var L,U;const{channelModal:n,closeChannelModal:l}=G(),{data:r}=_(),{data:p}=q(),m=pe(),g=de(),[u,f]=k.useState({}),[b,i]=k.useState({}),[x,h]=k.useState(null),c=n.channel,w=c?r==null?void 0:r.channels[c]:null,C=c?O()[c]??[]:[],N=p==null?void 0:p.uiHints,P=c?`channels.${c}`:null,z=((L=p==null?void 0:p.actions)==null?void 0:L.filter(t=>t.scope===P))??[],V=c&&(((U=M(`channels.${c}`,N))==null?void 0:U.label)??c);k.useEffect(()=>{if(w){f({...w});const t={};(c?O()[c]??[]:[]).filter(o=>o.type==="json").forEach(o=>{const y=w[o.name];t[o.name]=JSON.stringify(y??{},null,2)}),i(t)}else f({}),i({})},[w,c]);const v=(t,s)=>{f(o=>({...o,[t]:s}))},Y=t=>{if(t.preventDefault(),!c)return;const s={...u};for(const o of C){if(o.type!=="password")continue;const y=s[o.name];(typeof y!="string"||y.length===0)&&delete s[o.name]}for(const o of C){if(o.type!=="json")continue;const y=b[o.name]??"";try{s[o.name]=y.trim()?JSON.parse(y):{}}catch{S.error(`${e("invalidJson")}: ${o.name}`);return}}m.mutate({channel:c,data:s},{onSuccess:()=>l()})},W=t=>{if(!t||!c)return;const s=t.channels;if(!D(s))return;const o=s[c];D(o)&&f(y=>J(y,o))},X=async t=>{if(!(!c||!P)){h(t.id);try{let s={...u};t.saveBeforeRun&&(s={...s,...t.savePatch??{}},f(s),await m.mutateAsync({channel:c,data:s}));const o=await g.mutateAsync({actionId:t.id,data:{scope:P,draftConfig:Ee(P,s)}});W(o.patch),o.ok?S.success(o.message||e("success")):S.error(o.message||e("error"))}catch(s){const o=s instanceof Error?s.message:String(s);S.error(`${e("error")}: ${o}`)}finally{h(null)}}},Q=R[c||""]||R.default,Z=$[c||""]||$.default;return a.jsx(fe,{open:n.open,onOpenChange:l,children:a.jsxs(we,{className:"sm:max-w-[550px] max-h-[85vh] overflow-hidden flex flex-col",children:[a.jsx(je,{children:a.jsxs("div",{className:"flex items-center gap-3",children:[a.jsx("div",{className:`h-10 w-10 rounded-xl bg-gradient-to-br ${Z} flex items-center justify-center`,children:a.jsx(Q,{className:"h-5 w-5 text-white"})}),a.jsxs("div",{children:[a.jsx(ve,{className:"capitalize",children:V}),a.jsx(ke,{children:e("configureMessageChannelParameters")})]})]})}),a.jsxs("form",{onSubmit:Y,className:"flex flex-col flex-1 overflow-hidden",children:[a.jsx("div",{className:"flex-1 overflow-y-auto custom-scrollbar py-2 pr-2 space-y-5",children:C.map(t=>{const s=c?M(`channels.${c}.${t.name}`,N):void 0,o=(s==null?void 0:s.label)??t.label,y=s==null?void 0:s.placeholder;return a.jsxs("div",{className:"space-y-2.5",children:[a.jsxs(Se,{htmlFor:t.name,className:"text-sm font-medium text-gray-900 flex items-center gap-2",children:[Ue(t.name),o]}),t.type==="boolean"&&a.jsxs("div",{className:"flex items-center justify-between p-3 rounded-xl bg-gray-50",children:[a.jsx("span",{className:"text-sm text-gray-500",children:u[t.name]?e("enabled"):e("disabled")}),a.jsx(Ie,{id:t.name,checked:u[t.name]||!1,onCheckedChange:d=>v(t.name,d),className:"data-[state=checked]:bg-emerald-500"})]}),(t.type==="text"||t.type==="email")&&a.jsx(F,{id:t.name,type:t.type,value:u[t.name]||"",onChange:d=>v(t.name,d.target.value),placeholder:y,className:"rounded-xl"}),t.type==="password"&&a.jsx(F,{id:t.name,type:"password",value:u[t.name]||"",onChange:d=>v(t.name,d.target.value),placeholder:y??e("leaveBlankToKeepUnchanged"),className:"rounded-xl"}),t.type==="number"&&a.jsx(F,{id:t.name,type:"number",value:u[t.name]||0,onChange:d=>v(t.name,parseInt(d.target.value)||0),placeholder:y,className:"rounded-xl"}),t.type==="tags"&&a.jsx(Ae,{value:u[t.name]||[],onChange:d=>v(t.name,d)}),t.type==="select"&&a.jsxs(be,{value:u[t.name]||"",onValueChange:d=>v(t.name,d),children:[a.jsx(xe,{className:"rounded-xl",children:a.jsx(ge,{})}),a.jsx(ye,{children:(t.options??[]).map(d=>a.jsx(he,{value:d.value,children:d.label},d.value))})]}),t.type==="json"&&a.jsx("textarea",{id:t.name,value:b[t.name]??"{}",onChange:d=>i(ee=>({...ee,[t.name]:d.target.value})),className:"min-h-[120px] w-full rounded-lg border border-gray-200 bg-white px-3 py-2 text-xs font-mono"})]},t.name)})}),a.jsxs(Ce,{className:"pt-4 flex-shrink-0",children:[a.jsx(T,{type:"button",variant:"outline",onClick:l,children:e("cancel")}),a.jsx(T,{type:"submit",disabled:m.isPending||!!x,children:m.isPending?e("saving"):e("save")}),z.filter(t=>t.trigger==="manual").map(t=>a.jsx(T,{type:"button",onClick:()=>X(t),disabled:m.isPending||!!x,variant:"secondary",children:x===t.id?e("connecting"):t.title},t.id))]})]})]})})}function Oe({children:n,onClick:l,className:r}){return a.jsx("div",{onClick:l,className:j("group relative flex flex-col p-6 rounded-2xl border border-gray-200/50 bg-white shadow-card","transition-all duration-base cursor-pointer","hover:shadow-card-hover hover:border-gray-200",r),children:n})}function Re({children:n,className:l}){return a.jsx("div",{className:j("flex items-start justify-between mb-4",l),children:n})}function $e({title:n,description:l,className:r}){return a.jsxs("div",{className:j("flex-1",r),children:[a.jsx("h3",{className:"text-[14px] font-bold text-gray-900 mb-0.5",children:n}),l&&a.jsx("p",{className:"text-[12px] text-gray-400 leading-relaxed line-clamp-2",children:l})]})}function He({children:n,className:l}){return a.jsx("div",{className:j("mt-4 pt-3 flex items-center justify-between",l),children:n})}function Ke({label:n,className:l,onClick:r}){return a.jsxs("span",{onClick:r,className:j("inline-flex items-center gap-1 text-[13px] font-medium text-gray-600 hover:text-primary transition-colors cursor-pointer group/action",l),children:[n,a.jsx(re,{className:"h-3 w-3 transition-transform group-hover/action:translate-x-0.5"})]})}const H={telegram:I,slack:ie,email:A,webhook:ce,default:K},_e={telegram:"channelDescTelegram",slack:"channelDescSlack",email:"channelDescEmail",webhook:"channelDescWebhook",discord:"channelDescDiscord",feishu:"channelDescFeishu"};function ea(){const{data:n}=_(),{data:l}=ue(),{data:r}=q(),{openChannelModal:p}=G(),[m,g]=k.useState("active"),u=r==null?void 0:r.uiHints;if(!n||!l)return a.jsx("div",{className:"p-8 text-gray-400",children:e("channelsLoading")});const f=[{id:"active",label:e("channelsTabEnabled"),count:l.channels.filter(i=>{var x;return(x=n.channels[i.name])==null?void 0:x.enabled}).length},{id:"all",label:e("channelsTabAll"),count:l.channels.length}],b=l.channels.filter(i=>{var h;const x=((h=n.channels[i.name])==null?void 0:h.enabled)||!1;return m==="all"||x});return a.jsxs(Ne,{children:[a.jsx(Pe,{title:e("channelsPageTitle")}),a.jsx(De,{tabs:f,activeTab:m,onChange:g}),a.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4",children:b.map(i=>{const x=n.channels[i.name],h=(x==null?void 0:x.enabled)||!1,c=H[i.name]||H.default,w=M(`channels.${i.name}`,u),C=(w==null?void 0:w.help)||e(_e[i.name]||"channelDescriptionDefault");return a.jsxs(Oe,{onClick:()=>p(i.name),children:[a.jsxs(Re,{children:[a.jsx(Fe,{name:i.name,src:Te(i.name),className:j("h-11 w-11 rounded-xl border transition-all",h?"bg-white border-primary/30":"bg-white border-gray-200/60 group-hover:border-gray-300"),imgClassName:"h-5 w-5",fallback:a.jsx(c,{className:"h-5 w-5"})}),a.jsx(Me,{status:h?"active":"inactive",label:h?e("statusActive"):e("statusInactive")})]}),a.jsx($e,{title:i.displayName||i.name,description:C}),a.jsxs(He,{children:[a.jsx(Ke,{label:h?e("actionConfigure"):e("actionEnable")}),i.tutorialUrl&&a.jsx("a",{href:i.tutorialUrl,target:"_blank",rel:"noreferrer",onClick:N=>N.stopPropagation(),className:"flex items-center justify-center h-6 w-6 rounded-md text-gray-300 hover:text-gray-500 hover:bg-gray-100/60 transition-colors",title:e("channelsGuideTitle"),children:a.jsx(me,{className:"h-3.5 w-3.5"})})]})]},i.name)})}),b.length===0&&a.jsxs("div",{className:"flex flex-col items-center justify-center py-16 text-center",children:[a.jsx("div",{className:"h-14 w-14 flex items-center justify-center rounded-xl bg-gray-100/80 mb-4",children:a.jsx(K,{className:"h-6 w-6 text-gray-300"})}),a.jsx("h3",{className:"text-[14px] font-semibold text-gray-900 mb-1.5",children:e("channelsEmptyTitle")}),a.jsx("p",{className:"text-[13px] text-gray-400 max-w-sm",children:e("channelsEmptyDescription")})]}),a.jsx(Be,{})]})}export{ea as ChannelsList};