mirror of
https://github.com/pyMC-dev/pyMC_Repeater.git
synced 2026-07-06 18:01:34 +02:00
1 line
27 KiB
JavaScript
1 line
27 KiB
JavaScript
import{E as e,K as t,S as n,b as r,dt as i,f as a,g as o,j as s,k as c,l,m as u,o as d,p as f,pt as p,r as m,s as h,u as g,w as _,z as v}from"./runtime-core.esm-bundler-HnidnMFy.js";import{t as y}from"./api-CbM6k1ZB.js";import{f as b,h as x,l as S,u as C}from"./index-BFltqMtv.js";import{t as w}from"./ConfirmDialog-PLW-eI8u.js";import{t as T}from"./MessageDialog-CEzYMZ-3.js";var E={id:`import-modal-description`,class:`text-content-secondary dark:text-content-muted text-sm mb-4`},D={class:`mb-4`},O={class:`flex items-center gap-2 mb-2`},k={key:0,class:`text-content-muted dark:text-content-muted text-xs mb-2`},A={key:1,class:`flex flex-wrap gap-3 ml-6`},j=[`value`],M={class:`text-content-primary dark:text-content-primary text-sm capitalize`},N={class:`border-t border-stroke-subtle dark:border-white/10 pt-4 mt-4 mb-4`},P={class:`flex flex-wrap gap-3 mb-2`},F=[`value`],ee={class:`text-content-primary dark:text-content-primary text-sm`},te={class:`flex flex-wrap items-center gap-2 mt-2`},ne={class:`flex items-center gap-2`},I={key:1,class:`text-content-muted dark:text-content-muted text-sm`},L={class:`border-t border-stroke-subtle dark:border-white/10 pt-4 mt-4 mb-4`},R={class:`flex flex-wrap items-center gap-2`},z={key:0,role:`alert`,class:`mb-4 p-3 rounded-lg bg-accent-red/10 dark:bg-accent-red/20 border border-accent-red/30 text-accent-red text-sm`},B={key:1,class:`text-content-muted dark:text-content-muted text-sm mb-4`},V={class:`flex justify-end gap-3`},H=[`disabled`],U=[`disabled`],W=o({name:`ImportRepeaterContactsModal`,__name:`ImportRepeaterContactsModal`,props:{isOpen:{type:Boolean},companionName:{}},emits:[`close`,`imported`],setup(n,{emit:i}){let a=[`companion`,`repeater`,`room_server`,`sensor`],o=[{label:`All time`,value:null},{label:`Last 24 hours`,value:24},{label:`Last 7 days`,value:168},{label:`Last 30 days`,value:720},{label:`Custom`,value:`custom`}].slice(0,4),u=n,w=i,T=v(!1),W=v(null),G=v(!0),K=v([]),q=v(null),J=v(``),Y=v(``),X=v(null),Z=v(null);function Q(){let e=q.value;if(e===null||e===`custom`){if(e===`custom`){let e=J.value;if(e===``||e===null)return;let t=Number(e);return Number.isInteger(t)&&t>=1?t:void 0}return}return e}function $(){let e=Y.value;if(e===``||e===null)return;let t=Number(e);return Number.isInteger(t)&&t>=1?t:void 0}function re(){G.value=!0,K.value=[],q.value=null,J.value=``,Y.value=``,W.value=null}c(()=>u.isOpen,e=>{e&&(re(),r(()=>{Z.value?.focus()}))}),c(q,e=>{e===`custom`&&r(()=>{X.value?.focus()})});let ie=d(()=>{let e=G.value?`All types`:K.value.map(e=>e.replace(`_`,` `)).join(`, `),t,n=q.value;if(n===null)t=`all time`;else if(n===`custom`){let e=Q();t=e===void 0?`custom`:`last ${e} hours`}else t=n===24?`last 24 hours`:n===168?`last 7 days`:n===720?`last 30 days`:`all time`;let r=$(),i=r===void 0?`no limit`:`max ${r} contacts`;return`Import: ${e}, ${t}, ${i}.`});function ae(){if(q.value===`custom`){let e=Q();if(e===void 0||e<1)return`Custom recency must be at least 1 hour.`}let e=$();if(Y.value!==``&&(e===void 0||e<1))return`Limit must be at least 1.`;if(!G.value&&K.value.length===0)return`Select at least one contact type or use All types.`;if(!G.value){let e=K.value.filter(e=>!a.includes(e));if(e.length>0)return`Invalid contact type: ${e.join(`, `)}`}return null}async function oe(){W.value=null;let e=ae();if(e){W.value=e;return}let t={companion_name:u.companionName};!G.value&&K.value.length>0&&(t.contact_types=[...K.value]);let n=Q();n!==void 0&&(t.hours=n);let r=$();r!==void 0&&(t.limit=r),T.value=!0;try{let e=await y.importRepeaterContacts(t);e.success&&e.data?(w(`imported`,e.data.imported),w(`close`)):W.value=e.error||`Import failed.`}catch(e){W.value=e instanceof Error?e.message:`Import failed.`}finally{T.value=!1}}function se(e){e.target===e.currentTarget&&w(`close`)}function ce(e){e.key===`Escape`&&w(`close`)}return(r,i)=>n.isOpen?(_(),g(`div`,{key:0,class:`fixed inset-0 bg-black/50 flex items-center justify-center z-50 p-4`,onClick:se,onKeydown:ce},[h(`div`,{role:`dialog`,"aria-describedby":`import-modal-description`,class:`bg-white dark:bg-surface-elevated backdrop-blur-xl border border-stroke-subtle dark:border-white/10 rounded-[15px] p-6 max-w-lg w-full max-h-[90vh] overflow-y-auto`,onClick:i[7]||=x(()=>{},[`stop`])},[i[18]||=h(`h2`,{class:`text-xl font-bold text-content-primary dark:text-content-primary mb-4`},` Import repeater contacts `,-1),h(`p`,E,[i[8]||=f(` Seed `,-1),h(`strong`,null,p(n.companionName),1),i[9]||=f(` with contacts from the repeater's adverts. Results are ordered by most recent first. `,-1)]),h(`div`,D,[i[11]||=h(`label`,{class:`block text-content-secondary dark:text-content-primary/70 text-sm mb-2`},` Contact types `,-1),h(`label`,O,[s(h(`input`,{ref_key:`firstFocusRef`,ref:Z,"onUpdate:modelValue":i[0]||=e=>G.value=e,type:`checkbox`,class:`rounded border-stroke-subtle dark:border-stroke/20 text-primary focus:ring-primary/50`},null,512),[[S,G.value]]),i[10]||=h(`span`,{class:`text-content-primary dark:text-content-primary text-sm`},`All types`,-1)]),G.value?(_(),g(`p`,k,` Uncheck to filter by type (repeater, companion, room server, sensor). `)):l(``,!0),G.value?l(``,!0):(_(),g(`div`,A,[(_(),g(m,null,e(a,e=>h(`label`,{key:e,class:`flex items-center gap-2`},[s(h(`input`,{"onUpdate:modelValue":i[1]||=e=>K.value=e,type:`checkbox`,value:e,class:`rounded border-stroke-subtle dark:border-stroke/20 text-primary focus:ring-primary/50`},null,8,j),[[S,K.value]]),h(`span`,M,p(e.replace(`_`,` `)),1)])),64))]))]),h(`div`,N,[i[13]||=h(`label`,{class:`block text-content-secondary dark:text-content-primary/70 text-sm mb-2`},` Recency `,-1),h(`div`,P,[(_(!0),g(m,null,e(t(o),e=>(_(),g(`label`,{key:e.label,class:`flex items-center gap-2`},[s(h(`input`,{"onUpdate:modelValue":i[2]||=e=>q.value=e,type:`radio`,value:e.value,class:`border-stroke-subtle dark:border-stroke/20 text-primary focus:ring-primary/50`},null,8,F),[[C,q.value]]),h(`span`,ee,p(e.label),1)]))),128))]),h(`div`,te,[h(`label`,ne,[s(h(`input`,{"onUpdate:modelValue":i[3]||=e=>q.value=e,type:`radio`,value:`custom`,class:`border-stroke-subtle dark:border-stroke/20 text-primary focus:ring-primary/50`},null,512),[[C,q.value]]),i[12]||=h(`span`,{class:`text-content-primary dark:text-content-primary text-sm`},`Custom:`,-1)]),q.value===`custom`?s((_(),g(`input`,{key:0,ref_key:`customHoursInputRef`,ref:X,"onUpdate:modelValue":i[4]||=e=>J.value=e,type:`number`,min:`1`,placeholder:`e.g. 48`,class:`w-24 bg-white dark:bg-white/5 border border-stroke-subtle dark:border-stroke/10 rounded-lg px-3 py-1.5 text-content-primary dark:text-content-primary text-sm placeholder-gray-500 dark:placeholder-white/40 focus:outline-none focus:border-primary/50`},null,512)),[[b,J.value,void 0,{number:!0}]]):l(``,!0),q.value===`custom`?(_(),g(`span`,I,`hours`)):l(``,!0)])]),h(`div`,L,[i[16]||=h(`label`,{class:`block text-content-secondary dark:text-content-primary/70 text-sm mb-2`},` Max contacts (optional) `,-1),h(`div`,R,[i[14]||=h(`span`,{class:`text-content-muted dark:text-content-muted text-sm`},`Import at most`,-1),s(h(`input`,{"onUpdate:modelValue":i[5]||=e=>Y.value=e,type:`number`,inputmode:`numeric`,min:`1`,placeholder:`No limit`,class:`w-32 bg-white dark:bg-white/5 border border-stroke-subtle dark:border-stroke/10 rounded-lg px-3 py-2 text-content-primary dark:text-content-primary placeholder-gray-500 dark:placeholder-white/40 focus:outline-none focus:border-primary/50`},null,512),[[b,Y.value,void 0,{number:!0}]]),i[15]||=h(`span`,{class:`text-content-muted dark:text-content-muted text-sm`},`contacts`,-1)]),i[17]||=h(`p`,{class:`text-content-muted dark:text-content-muted text-xs mt-1`},` Leave empty for no cap. Server caps at companion max. `,-1)]),W.value?(_(),g(`div`,z,p(W.value),1)):l(``,!0),W.value?l(``,!0):(_(),g(`p`,B,p(ie.value),1)),h(`div`,V,[h(`button`,{type:`button`,disabled:T.value,class:`px-4 py-2 bg-background-mute dark:bg-white/5 hover:bg-stroke-subtle dark:hover:bg-white/10 text-content-primary dark:text-content-primary rounded-lg transition-colors disabled:opacity-50`,onClick:i[6]||=e=>w(`close`)},` Cancel `,8,H),h(`button`,{type:`button`,disabled:T.value,class:`px-4 py-2 bg-primary/20 hover:bg-primary/30 text-primary rounded-lg border border-primary/50 transition-colors disabled:opacity-50`,onClick:oe},p(T.value?`Importing…`:`Import`),9,U)])])],32)):l(``,!0)}}),G={class:`p-6 space-y-6`},K={key:0,class:`grid grid-cols-1 md:grid-cols-2 gap-4`},q={class:`group relative overflow-hidden glass-card backdrop-blur-xl border border-stroke-subtle dark:border-white/10 rounded-[15px] p-5`},J={class:`relative flex items-center justify-between`},Y={class:`text-3xl font-bold text-content-primary dark:text-content-primary`},X={class:`glass-card backdrop-blur-xl border border-stroke-subtle dark:border-white/10 rounded-[15px] p-6`},Z={key:0,class:`flex items-center justify-center py-12`},Q={key:1,class:`flex items-center justify-center py-12`},$={class:`text-center`},re={class:`text-content-secondary dark:text-content-muted text-sm mb-4`},ie={key:2,class:`space-y-4`},ae={class:`relative flex items-start justify-between`},oe={class:`flex-1`},se={class:`flex items-center gap-3 mb-4`},ce={class:`relative`},le={key:0,class:`absolute inset-0 bg-accent-green/50 rounded-full animate-ping`},ue={class:`text-xl font-bold text-content-primary dark:text-content-primary`},de={key:0,class:`text-content-muted dark:text-content-muted text-sm`},fe={class:`grid grid-cols-1 md:grid-cols-2 gap-3 text-sm mb-3`},pe={class:`text-content-primary dark:text-content-primary/90 ml-2`},me={class:`text-content-primary dark:text-content-primary/90 ml-2`},he={class:`text-content-primary dark:text-content-primary/90 ml-2`},ge={class:`flex items-center gap-2`},_e={key:0,class:`text-content-primary dark:text-content-primary/90 font-mono ml-2 text-xs`},ve={key:1,class:`text-content-muted dark:text-content-muted ml-2 text-xs`},ye=[`onClick`],be={class:`text-xs text-content-muted dark:text-content-muted`},xe={key:0,class:`ml-2 font-mono text-content-primary dark:text-content-primary/90 break-all`},Se={key:1,class:`ml-2 text-content-muted dark:text-content-muted`},Ce={class:`ml-4 flex flex-wrap gap-2`},we=[`onClick`],Te=[`onClick`],Ee=[`onClick`],De={key:3,class:`text-center py-12 text-content-secondary dark:text-content-muted`},Oe={key:1,class:`fixed inset-0 bg-black/50 flex items-center justify-center z-50 p-4`},ke={class:`bg-white dark:bg-surface-elevated backdrop-blur-xl border border-stroke-subtle dark:border-white/10 rounded-[15px] p-6 max-w-2xl w-full max-h-[90vh] overflow-y-auto`},Ae={class:`space-y-4`},je={class:`block text-content-secondary dark:text-content-primary/70 text-sm mb-2`},Me={key:0},Ne={key:1,class:`text-content-secondary dark:text-content-muted text-sm`},Pe={class:`grid grid-cols-2 gap-4`},Fe={key:2,class:`fixed inset-0 bg-black/50 flex items-center justify-center z-50 p-4`},Ie={class:`bg-white dark:bg-surface-elevated backdrop-blur-xl border border-stroke-subtle dark:border-white/10 rounded-[15px] p-6 max-w-2xl w-full max-h-[90vh] overflow-y-auto`},Le={class:`space-y-4`},Re=[`value`],ze={class:`block text-content-secondary dark:text-content-primary/70 text-sm mb-2`},Be={key:0},Ve={class:`grid grid-cols-2 gap-4`},He=5050,Ue=1,We=65535,Ge=o({name:`CompanionsView`,__name:`Companions`,setup(t){let r=v(!1),o=v(null),c=v(null),d=v(!1),x=v(!1),S=v(null),C=v(!1),E=v(!1),D=v(new Set),O=v(!1),k=v(``),A=v(!1),j=v(``),M=v(!1),N=v({message:``,variant:`success`}),P=v({name:``,identity_key:``,type:`companion`,settings:{node_name:``,tcp_port:5e3,bind_address:`0.0.0.0`}});n(async()=>{await F()});async function F(){r.value=!0,o.value=null;try{let e=await y.getIdentities();e.success?c.value=e.data:o.value=e.error||`Failed to load identities`}catch(e){o.value=e instanceof Error?e.message:`Failed to load identities`}finally{r.value=!1}}async function ee(){try{let e=await y.createIdentity({...P.value,settings:{node_name:P.value.settings.node_name||P.value.name,tcp_port:P.value.settings.tcp_port??5e3,bind_address:P.value.settings.bind_address||`0.0.0.0`}});e.success?(d.value=!1,z(),await F(),L(e.message||`Companion created successfully!`,`success`)):L(`Failed to create companion: ${e.error}`,`error`)}catch(e){L(`Error creating companion: ${e}`,`error`)}}async function te(){try{let e=await y.updateIdentity({name:S.value.name,new_name:S.value.new_name,identity_key:S.value.identity_key,type:`companion`,settings:{node_name:S.value.settings?.node_name,tcp_port:S.value.settings?.tcp_port,bind_address:S.value.settings?.bind_address}});e.success?(x.value=!1,S.value=null,await F(),L(e.message||`Companion updated successfully!`,`success`)):L(`Failed to update companion: ${e.error}`,`error`)}catch(e){L(`Error updating companion: ${e}`,`error`)}}function ne(e){k.value=e,O.value=!0}async function I(){let e=k.value;O.value=!1;try{let t=await y.deleteIdentity(e,`companion`);t.success?(await F(),L(t.message||`Companion deleted successfully!`,`success`)):L(`Failed to delete companion: ${t.error}`,`error`)}catch(e){L(`Error deleting companion: ${e}`,`error`)}finally{k.value=``}}function L(e,t){N.value={message:e,variant:t},M.value=!0}function R(e){S.value=JSON.parse(JSON.stringify(e)),S.value.settings||(S.value.settings={node_name:``,tcp_port:5e3,bind_address:`0.0.0.0`}),S.value.new_name=``,E.value=!1,x.value=!0}function z(){P.value={name:``,identity_key:``,type:`companion`,settings:{node_name:``,tcp_port:5e3,bind_address:`0.0.0.0`}},C.value=!1}function B(){d.value=!1,x.value=!1,S.value=null,C.value=!1,E.value=!1,z()}function V(e){D.value.has(e)?D.value.delete(e):D.value.add(e)}let H=()=>c.value?.configured_companions??[],U=()=>c.value?.total_configured_companions??0;function Ge(){let e=H();if(e.length===0)return He;let t=e.map(e=>e.settings?.tcp_port??5e3),n=Math.max(...t)+1;return Math.min(We,Math.max(Ue,n))}function Ke(){z(),P.value.settings.tcp_port=Ge(),d.value=!0}function qe(e){j.value=e,A.value=!0}function Je(){A.value=!1,j.value=``}function Ye(e){L(`Imported ${e} contact${e===1?``:`s`}.`,`success`),Je()}return(t,n)=>(_(),g(m,null,[h(`div`,G,[h(`div`,{class:`relative overflow-hidden rounded-[20px] p-6 mb-6 glass-card backdrop-blur-xl border border-stroke-subtle dark:border-white/10`},[n[16]||=h(`div`,{class:`absolute inset-0 bg-gradient-to-br from-primary/20 via-secondary/10 to-accent-purple/20 opacity-50`},null,-1),n[17]||=h(`div`,{class:`absolute inset-0 bg-gradient-to-tl from-accent-green/10 via-transparent to-primary/10 animate-pulse`},null,-1),h(`div`,{class:`relative flex items-center justify-between`},[n[15]||=a(`<div class="flex items-center gap-4"><div class="relative"><div class="absolute inset-0 bg-primary/30 blur-xl rounded-full"></div><div class="relative bg-primary/20 p-4 rounded-[15px] border border-primary/30"><svg class="w-8 h-8 text-primary" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z"></path></svg></div></div><div><h1 class="text-3xl font-bold text-content-primary dark:text-content-primary mb-1"> Companions </h1><p class="text-content-secondary dark:text-content-muted text-sm"> Manage companion identities (TCP frame server) </p></div></div>`,1),h(`button`,{onClick:Ke,class:`group relative px-6 py-3 bg-gradient-to-r from-primary/30 to-secondary/30 hover:from-primary/40 hover:to-secondary/40 text-content-primary dark:text-content-primary rounded-[12px] border border-primary/50 transition-all hover:scale-105 hover:shadow-lg hover:shadow-primary/20`},[...n[14]||=[h(`span`,{class:`flex items-center gap-2`},[h(`svg`,{class:`w-5 h-5`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[h(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M12 4v16m8-8H4`})]),f(` Add Companion `)],-1)]])])]),c.value&&U()>0?(_(),g(`div`,K,[h(`div`,q,[h(`div`,J,[h(`div`,null,[n[18]||=h(`div`,{class:`text-content-secondary dark:text-content-muted text-xs font-medium mb-2 uppercase tracking-wide`},` Total Configured `,-1),h(`div`,Y,p(U()),1)])])])])):l(``,!0),h(`div`,X,[r.value?(_(),g(`div`,Z,[...n[19]||=[h(`div`,{class:`text-center`},[h(`div`,{class:`animate-spin w-8 h-8 border-2 border-stroke-subtle dark:border-stroke/20 border-t-primary rounded-full mx-auto mb-4`}),h(`div`,{class:`text-content-secondary dark:text-content-primary/70`},` Loading companions... `)],-1)]])):o.value?(_(),g(`div`,Q,[h(`div`,$,[n[20]||=h(`div`,{class:`text-red-600 dark:text-red-400 mb-2`},`Failed to load companions`,-1),h(`div`,re,p(o.value),1),h(`button`,{onClick:F,class:`px-4 py-2 bg-primary/20 hover:bg-primary/30 text-content-primary dark:text-content-primary rounded-lg border border-primary/50 transition-colors`},` Retry `)])])):c.value&&H().length>0?(_(),g(`div`,ie,[(_(!0),g(m,null,e(H(),e=>(_(),g(`div`,{key:e.name,class:`group relative overflow-hidden glass-card backdrop-blur-xl rounded-[15px] p-5 border border-stroke-subtle dark:border-white/10 hover:border-primary/30 transition-all duration-300`},[h(`div`,ae,[h(`div`,oe,[h(`div`,se,[h(`div`,ce,[e.registered?(_(),g(`div`,le)):l(``,!0),h(`div`,{class:i([`relative w-3 h-3 rounded-full`,e.registered?`bg-accent-green`:`bg-accent-red`])},null,2)]),h(`h3`,ue,p(e.name),1),h(`span`,{class:i([`px-3 py-1 text-xs font-semibold rounded-full`,e.registered?`bg-accent-green/20 text-accent-green border border-accent-green/30`:`bg-accent-red/20 text-accent-red border border-accent-red/30`])},p(e.registered?`● Active`:`○ Inactive`),3),e.hash?(_(),g(`span`,de,p(e.hash),1)):l(``,!0)]),h(`div`,fe,[h(`div`,null,[n[21]||=h(`span`,{class:`text-content-muted dark:text-content-muted`},`Node Name:`,-1),h(`span`,pe,p(e.settings?.node_name||e.name),1)]),h(`div`,null,[n[22]||=h(`span`,{class:`text-content-muted dark:text-content-muted`},`TCP Port:`,-1),h(`span`,me,p(e.settings?.tcp_port??5e3),1)]),h(`div`,null,[n[23]||=h(`span`,{class:`text-content-muted dark:text-content-muted`},`Bind Address:`,-1),h(`span`,he,p(e.settings?.bind_address||`0.0.0.0`),1)]),h(`div`,ge,[n[24]||=h(`span`,{class:`text-content-muted dark:text-content-muted`},`Identity Key:`,-1),D.value.has(e.name)?(_(),g(`span`,_e,p(e.identity_key),1)):(_(),g(`span`,ve,`••••••••••••••••`)),h(`button`,{onClick:t=>V(e.name),class:`text-primary/70 hover:text-primary text-xs underline`},p(D.value.has(e.name)?`Hide`:`Show`),9,ye)])]),h(`div`,be,[n[25]||=h(`span`,{class:`text-content-muted dark:text-content-muted`},`Public Key:`,-1),e.public_key?(_(),g(`span`,xe,p(e.public_key),1)):(_(),g(`span`,Se,`—`))])]),h(`div`,Ce,[h(`button`,{onClick:t=>qe(e.name),class:`px-3 py-1 bg-primary/20 hover:bg-primary/30 text-primary rounded text-xs transition-colors`},` Import contacts `,8,we),h(`button`,{onClick:t=>R(e),class:`px-3 py-1 bg-primary/20 hover:bg-primary/30 text-primary rounded text-xs transition-colors`},` Edit `,8,Te),h(`button`,{onClick:t=>ne(e.name),class:`px-3 py-1 bg-accent-red/20 hover:bg-accent-red/30 text-accent-red rounded text-xs transition-colors`},` Delete `,8,Ee)])])]))),128))])):(_(),g(`div`,De,[n[26]||=h(`svg`,{class:`w-16 h-16 mx-auto mb-4 text-content-muted dark:text-content-muted/60`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[h(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z`})],-1),n[27]||=h(`p`,{class:`text-lg mb-2`},`No companions configured`,-1),n[28]||=h(`p`,{class:`text-sm mb-4`},` Add a companion to run a TCP frame server for firmware or other clients `,-1),h(`button`,{onClick:Ke,class:`px-4 py-2 bg-primary/20 hover:bg-primary/30 text-primary rounded-lg border border-primary/50 transition-colors`},` + Add Companion `)]))]),d.value?(_(),g(`div`,Oe,[h(`div`,ke,[n[35]||=h(`h2`,{class:`text-xl font-bold text-content-primary dark:text-content-primary mb-4`},` Add Companion `,-1),h(`div`,Ae,[h(`div`,null,[n[29]||=h(`label`,{class:`block text-content-secondary dark:text-content-primary/70 text-sm mb-2`},`Name *`,-1),s(h(`input`,{"onUpdate:modelValue":n[0]||=e=>P.value.name=e,type:`text`,placeholder:`e.g., TestCompanion`,class:`w-full bg-white dark:bg-white/5 border border-stroke-subtle dark:border-stroke/10 rounded-lg px-4 py-2 text-content-primary dark:text-content-primary placeholder-gray-500 dark:placeholder-white/40 focus:outline-none focus:border-primary/50 transition-colors`},null,512),[[b,P.value.name]])]),h(`div`,null,[h(`label`,je,[n[30]||=f(` Identity Key (Optional) `,-1),h(`button`,{onClick:n[1]||=e=>C.value=!C.value,type:`button`,class:`ml-2 text-primary/70 hover:text-primary text-xs underline`},p(C.value?`Hide`:`Show/Edit`),1)]),C.value?(_(),g(`div`,Me,[s(h(`input`,{"onUpdate:modelValue":n[2]||=e=>P.value.identity_key=e,type:`text`,placeholder:`Leave empty to auto-generate (32 bytes hex)`,class:`w-full bg-white dark:bg-white/5 border border-stroke-subtle dark:border-stroke/10 rounded-lg px-4 py-2 text-content-primary dark:text-content-primary font-mono text-sm placeholder-gray-500 dark:placeholder-white/40 focus:outline-none focus:border-primary/50 transition-colors`},null,512),[[b,P.value.identity_key]]),n[31]||=h(`p`,{class:`text-content-secondary dark:text-content-muted text-xs mt-1`},` 32 or 64 bytes hex. Leave empty to auto-generate. `,-1)])):(_(),g(`div`,Ne,` Will be auto-generated if not provided `))]),h(`div`,null,[n[32]||=h(`label`,{class:`block text-content-secondary dark:text-content-primary/70 text-sm mb-2`},`Node Name`,-1),s(h(`input`,{"onUpdate:modelValue":n[3]||=e=>P.value.settings.node_name=e,type:`text`,placeholder:`Display name (defaults to Name)`,class:`w-full bg-white dark:bg-white/5 border border-stroke-subtle dark:border-stroke/10 rounded-lg px-4 py-2 text-content-primary dark:text-content-primary placeholder-gray-500 dark:placeholder-white/40 focus:outline-none focus:border-primary/50 transition-colors`},null,512),[[b,P.value.settings.node_name]])]),h(`div`,Pe,[h(`div`,null,[n[33]||=h(`label`,{class:`block text-content-secondary dark:text-content-primary/70 text-sm mb-2`},`TCP Port`,-1),s(h(`input`,{"onUpdate:modelValue":n[4]||=e=>P.value.settings.tcp_port=e,type:`number`,min:`1`,max:`65535`,class:`w-full bg-white dark:bg-white/5 border border-stroke-subtle dark:border-stroke/10 rounded-lg px-4 py-2 text-content-primary dark:text-content-primary focus:outline-none focus:border-primary/50 transition-colors`},null,512),[[b,P.value.settings.tcp_port,void 0,{number:!0}]])]),h(`div`,null,[n[34]||=h(`label`,{class:`block text-content-secondary dark:text-content-primary/70 text-sm mb-2`},`Bind Address`,-1),s(h(`input`,{"onUpdate:modelValue":n[5]||=e=>P.value.settings.bind_address=e,type:`text`,placeholder:`0.0.0.0`,class:`w-full bg-white dark:bg-white/5 border border-stroke-subtle dark:border-stroke/10 rounded-lg px-4 py-2 text-content-primary dark:text-content-primary placeholder-gray-500 dark:placeholder-white/40 focus:outline-none focus:border-primary/50 transition-colors`},null,512),[[b,P.value.settings.bind_address]])])])]),h(`div`,{class:`flex justify-end gap-3 mt-6`},[h(`button`,{onClick:B,class:`px-4 py-2 bg-background-mute dark:bg-white/5 hover:bg-stroke-subtle dark:hover:bg-white/10 text-content-primary dark:text-content-primary rounded-lg transition-colors`},` Cancel `),h(`button`,{onClick:ee,class:`px-4 py-2 bg-primary/20 hover:bg-primary/30 text-primary rounded-lg border border-primary/50 transition-colors`},` Create `)])])])):l(``,!0),x.value&&S.value?(_(),g(`div`,Fe,[h(`div`,Ie,[n[42]||=h(`h2`,{class:`text-xl font-bold text-content-primary dark:text-content-primary mb-4`},` Edit Companion `,-1),h(`div`,Le,[h(`div`,null,[n[36]||=h(`label`,{class:`block text-content-secondary dark:text-content-primary/70 text-sm mb-2`},`Current Name`,-1),h(`input`,{value:S.value.name,disabled:``,type:`text`,class:`w-full bg-background-mute dark:bg-white/5 border border-stroke-subtle dark:border-stroke/10 rounded-lg px-4 py-2 text-content-muted dark:text-content-muted cursor-not-allowed`},null,8,Re)]),h(`div`,null,[n[37]||=h(`label`,{class:`block text-content-secondary dark:text-content-primary/70 text-sm mb-2`},`New Name (optional)`,-1),s(h(`input`,{"onUpdate:modelValue":n[6]||=e=>S.value.new_name=e,type:`text`,placeholder:`Leave empty to keep current name`,class:`w-full bg-white dark:bg-white/5 border border-stroke-subtle dark:border-stroke/10 rounded-lg px-4 py-2 text-content-primary dark:text-content-primary placeholder-gray-500 dark:placeholder-white/40 focus:outline-none focus:border-primary/50 transition-colors`},null,512),[[b,S.value.new_name]])]),h(`div`,null,[h(`label`,ze,[n[38]||=f(` Identity Key (Optional) `,-1),h(`button`,{onClick:n[7]||=e=>E.value=!E.value,type:`button`,class:`ml-2 text-primary/70 hover:text-primary text-xs underline`},p(E.value?`Hide`:`Show/Edit`),1)]),E.value?(_(),g(`div`,Be,[s(h(`input`,{"onUpdate:modelValue":n[8]||=e=>S.value.identity_key=e,type:`text`,placeholder:`Leave empty to keep current key`,class:`w-full bg-white dark:bg-white/5 border border-stroke-subtle dark:border-stroke/10 rounded-lg px-4 py-2 text-content-primary dark:text-content-primary font-mono text-sm placeholder-gray-500 dark:placeholder-white/40 focus:outline-none focus:border-primary/50 transition-colors`},null,512),[[b,S.value.identity_key]])])):l(``,!0)]),h(`div`,null,[n[39]||=h(`label`,{class:`block text-content-secondary dark:text-content-primary/70 text-sm mb-2`},`Node Name`,-1),s(h(`input`,{"onUpdate:modelValue":n[9]||=e=>S.value.settings.node_name=e,type:`text`,class:`w-full bg-white dark:bg-white/5 border border-stroke-subtle dark:border-stroke/10 rounded-lg px-4 py-2 text-content-primary dark:text-content-primary focus:outline-none focus:border-primary/50 transition-colors`},null,512),[[b,S.value.settings.node_name]])]),h(`div`,Ve,[h(`div`,null,[n[40]||=h(`label`,{class:`block text-content-secondary dark:text-content-primary/70 text-sm mb-2`},`TCP Port`,-1),s(h(`input`,{"onUpdate:modelValue":n[10]||=e=>S.value.settings.tcp_port=e,type:`number`,min:`1`,max:`65535`,class:`w-full bg-white dark:bg-white/5 border border-stroke-subtle dark:border-stroke/10 rounded-lg px-4 py-2 text-content-primary dark:text-content-primary focus:outline-none focus:border-primary/50 transition-colors`},null,512),[[b,S.value.settings.tcp_port,void 0,{number:!0}]])]),h(`div`,null,[n[41]||=h(`label`,{class:`block text-content-secondary dark:text-content-primary/70 text-sm mb-2`},`Bind Address`,-1),s(h(`input`,{"onUpdate:modelValue":n[11]||=e=>S.value.settings.bind_address=e,type:`text`,class:`w-full bg-white dark:bg-white/5 border border-stroke-subtle dark:border-stroke/10 rounded-lg px-4 py-2 text-content-primary dark:text-content-primary focus:outline-none focus:border-primary/50 transition-colors`},null,512),[[b,S.value.settings.bind_address]])])])]),h(`div`,{class:`flex justify-end gap-3 mt-6`},[h(`button`,{onClick:B,class:`px-4 py-2 bg-background-mute dark:bg-white/5 hover:bg-stroke-subtle dark:hover:bg-white/10 text-content-primary dark:text-content-primary rounded-lg transition-colors`},` Cancel `),h(`button`,{onClick:te,class:`px-4 py-2 bg-primary/20 hover:bg-primary/30 text-primary rounded-lg border border-primary/50 transition-colors`},` Update `)])])])):l(``,!0)]),u(W,{"is-open":A.value,"companion-name":j.value,onClose:Je,onImported:Ye},null,8,[`is-open`,`companion-name`]),u(w,{show:O.value,title:`Delete Companion`,message:`Are you sure you want to delete '${k.value}'? Restart required to fully remove.`,"confirm-text":`Delete`,"cancel-text":`Cancel`,variant:`danger`,onClose:n[12]||=e=>O.value=!1,onConfirm:I},null,8,[`show`,`message`]),u(T,{show:M.value,message:N.value.message,variant:N.value.variant,onClose:n[13]||=e=>M.value=!1},null,8,[`show`,`message`,`variant`])],64))}});export{Ge as default}; |