- BEDIENUNG.md: Welle 1 bis 3 für den Alltag (Rückfragen, Antworttasten, Lucys Freiheiten, Wartungsfenster, Zertifikate, Neu entdeckt, Docker-Dienste, Was ist neu, Zeitleiste, Strg+K, Zeitpläne, neue Telegram-Nachrichten) - BETRIEB.md: Lucy (Freiheiten, Rückfragen, Untersuchungen, Wochenbericht, Hermes-Neustart für neue Werkzeuge), Wartungsfenster im Homelab-Teil - OFFENE-FAEDEN.md: Welle 2 und 3 erledigt, was am 27.09. zu beobachten ist - Einstellungen: Meldungen-Karte nennt Rückfragen und Wochenbericht; #lucy fasst nach, wenn Karten nachladen Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 line
45 KiB
JavaScript
1 line
45 KiB
JavaScript
import{a as e,c as t,i as n,n as r,r as i,t as a}from"./dist-aE7UmubC.js";import{B as o,Bt as s,D as c,Et as l,M as u,N as d,Rt as f,W as p,dt as m,ft as h,g,ht as _,lt as v,n as y,o as b,ot as x,p as S,rn as C,rt as w,s as T,tt as E,ut as D,v as O,zt as k}from"./abfragen-pD_qBEtc.js";import{t as A}from"./button-BHVKhtQ6.js";import{V as j,d as M,dt as N,f as P,m as F}from"./index-DRAkqVZT.js";var I={name:`key-round`,size:24,node:[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`,key:`1s6t7t`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`w0ekpg`}]]};I.node;var L=r(I),R=i(),z=t(e(),1),B=n(),V=[`Montag`,`Dienstag`,`Mittwoch`,`Donnerstag`,`Freitag`,`Samstag`,`Sonntag`],H={melden:`Nur melden`,sicherheit:`Sicherheitsupdates automatisch`,alles:`Alles automatisch im Fenster`},U=`h-10 rounded-xl border border-white/12 bg-white/[0.04] px-3 text-[15px] text-foreground outline-none focus:border-lab/60`;function W(e){let t=(0,R.c)(11),{wert:n,onWahl:r,label:i,mitStandard:a}=e,o=n??``,s;t[0]===r?s=t[1]:(s=e=>r(e.target.value||null),t[0]=r,t[1]=s);let c;t[2]===a?c=t[3]:(c=a&&(0,B.jsxs)(`option`,{value:``,children:[`Wie Standard (`,a,`)`]}),t[2]=a,t[3]=c);let l;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(l=Object.keys(H),t[4]=l):l=t[4];let u;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(u=l.map(G),t[5]=u):u=t[5];let d;return t[6]!==i||t[7]!==o||t[8]!==s||t[9]!==c?(d=(0,B.jsxs)(`select`,{"aria-label":i,value:o,onChange:s,className:`${U} min-w-0`,children:[c,u]}),t[6]=i,t[7]=o,t[8]=s,t[9]=c,t[10]=d):d=t[10],d}function G(e){return(0,B.jsx)(`option`,{value:e,children:H[e]},e)}function K(e){let t=(0,R.c)(61),{aktiv:n}=e,r=v(n),i=g(n).data?.ziele??[],a=D(),[o,s]=(0,z.useState)(null);if(!r.data){let e=r.isPending?`Wird gelesen …`:`Das Wartungsfenster lässt sich gerade nicht lesen.`,n;return t[0]===e?n=t[1]:(n=(0,B.jsx)(`p`,{className:`text-sm text-text-3`,children:e}),t[0]=e,t[1]=n),n}let c=o??r.data.fenster,l;t[2]!==o||t[3]!==r.data.fenster?(l=!!o&&JSON.stringify(o)!==JSON.stringify(r.data.fenster),t[2]=o,t[3]=r.data.fenster,t[4]=l):l=t[4];let u=l,d=r.data.stand,f;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,B.jsx)(`p`,{className:`m-0 text-sm text-text-2`,children:`Im Fenster spielt der Orchestrator ein, was die Regel des Geräts erlaubt — mit Snapshot vorher und Rückweg bei Rot. Einzelne Erfolge kommen gesammelt als eine Meldung, Fehler sofort. Den Proxmox-Host startet er nie von selbst neu.`}),t[5]=f):f=t[5];let p=c.tag,m;t[6]===c?m=t[7]:(m=e=>s({...c,tag:Number(e.target.value)}),t[6]=c,t[7]=m);let h;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(h=V.map(q),t[8]=h):h=t[8];let y;t[9]!==c.tag||t[10]!==m?(y=(0,B.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm text-text-2`,children:[`Tag`,(0,B.jsx)(`select`,{className:U,value:p,onChange:m,children:h})]}),t[9]=c.tag,t[10]=m,t[11]=y):y=t[11];let b;t[12]===c?b=t[13]:(b=e=>s({...c,von:e.target.value}),t[12]=c,t[13]=b);let x;t[14]!==c.von||t[15]!==b?(x=(0,B.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm text-text-2`,children:[`von`,(0,B.jsx)(`input`,{type:`time`,className:U,value:c.von,onChange:b})]}),t[14]=c.von,t[15]=b,t[16]=x):x=t[16];let S;t[17]===c?S=t[18]:(S=e=>s({...c,bis:e.target.value}),t[17]=c,t[18]=S);let C;t[19]!==c.bis||t[20]!==S?(C=(0,B.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm text-text-2`,children:[`bis`,(0,B.jsx)(`input`,{type:`time`,className:U,value:c.bis,onChange:S})]}),t[19]=c.bis,t[20]=S,t[21]=C):C=t[21];let w=!u||a.isPending,T;t[22]!==c||t[23]!==a?(T=()=>a.mutate({fenster:c},{onSuccess:()=>s(null)}),t[22]=c,t[23]=a,t[24]=T):T=t[24];let E;t[25]!==w||t[26]!==T?(E=(0,B.jsx)(`button`,{type:`button`,disabled:w,onClick:T,className:`h-10 rounded-xl bg-lab/20 px-4 text-sm font-medium text-lab-text ring-1 ring-lab/40 ring-inset disabled:opacity-40`,children:`Fenster speichern`}),t[25]=w,t[26]=T,t[27]=E):E=t[27];let O;t[28]!==C||t[29]!==E||t[30]!==y||t[31]!==x?(O=(0,B.jsxs)(`div`,{className:`flex flex-wrap items-end gap-2`,children:[y,x,C,E]}),t[28]=C,t[29]=E,t[30]=y,t[31]=x,t[32]=O):O=t[32];let k;t[33]===r.data.naechstes?k=t[34]:(k=_(new Date(r.data.naechstes*1e3).toISOString()).toLowerCase(),t[33]=r.data.naechstes,t[34]=k);let A;t[35]===d?A=t[36]:(A=d?` · zuletzt ${d.datum.split(`-`).reverse().join(`.`)}: ${d.status===`laeuft`?`läuft gerade`:`${d.schritte.length} Schritte`}`:``,t[35]=d,t[36]=A);let j;t[37]!==k||t[38]!==A?(j=(0,B.jsxs)(`p`,{className:`m-0 text-xs text-text-3`,children:[`Nächstes Fenster: `,k,A]}),t[37]=k,t[38]=A,t[39]=j):j=t[39];let M;t[40]===a?M=t[41]:(M=e=>e&&a.mutate({standard:e}),t[40]=a,t[41]=M);let N;t[42]!==M||t[43]!==r.data.standard?(N=(0,B.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm text-text-2`,children:[`Standard für alle Geräte (auch neue)`,(0,B.jsx)(W,{label:`Standard-Regel`,wert:r.data.standard,onWahl:M})]}),t[42]=M,t[43]=r.data.standard,t[44]=N):N=t[44];let P;if(t[45]!==a||t[46]!==r.data.regeln||t[47]!==r.data.standard||t[48]!==i){let e;t[50]!==a||t[51]!==r.data.regeln||t[52]!==r.data.standard?(e=e=>(0,B.jsxs)(`div`,{role:`row`,className:`flex flex-wrap items-center justify-between gap-2 border-t border-white/[0.06] py-2`,children:[(0,B.jsx)(`span`,{role:`rowheader`,className:`text-[15px]`,children:e.name}),(0,B.jsx)(`span`,{role:`cell`,children:(0,B.jsx)(W,{label:`Regel für ${e.name}`,wert:r.data.regeln[e.id]??null,mitStandard:H[r.data.standard],onWahl:t=>a.mutate({regeln:{[e.id]:t}})})})]},e.id),t[50]=a,t[51]=r.data.regeln,t[52]=r.data.standard,t[53]=e):e=t[53],P=i.map(e),t[45]=a,t[46]=r.data.regeln,t[47]=r.data.standard,t[48]=i,t[49]=P}else P=t[49];let F;t[54]===P?F=t[55]:(F=(0,B.jsx)(`div`,{role:`table`,"aria-label":`Regel je Gerät`,className:`flex flex-col`,children:P}),t[54]=P,t[55]=F);let I;return t[56]!==O||t[57]!==j||t[58]!==N||t[59]!==F?(I=(0,B.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[f,O,j,N,F]}),t[56]=O,t[57]=j,t[58]=N,t[59]=F,t[60]=I):I=t[60],I}function q(e,t){return(0,B.jsx)(`option`,{value:t,children:e},e)}var J=[{id:`lesen`,kurz:`Nur lesen`},{id:`fragen`,kurz:`Erst fragen`},{id:`selbst`,kurz:`Selbst handeln`}],Y=`h-10 rounded-xl border border-white/12 bg-white/[0.04] px-3 text-[15px] text-foreground outline-none focus:border-lab/60`;function ee(){let e=(0,R.c)(22),t=u(),n=d(),[r,i]=(0,z.useState)(null);if(!t.data){let n=t.isPending?`Wird gelesen …`:`Lucys Freiheiten lassen sich gerade nicht lesen.`,r;return e[0]===n?r=e[1]:(r=(0,B.jsx)(`p`,{className:`text-sm text-text-3`,children:n}),e[0]=n,e[1]=r),r}let o=te,s;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,B.jsx)(`p`,{className:`m-0 text-sm text-text-2`,children:`Bittest du Lucy ausdrücklich um etwas, tut sie es. Hier stellst du ein, was sie aus eigenem Antrieb darf: nur erklären, dich vorher fragen (in Telegram antwortest du mit „ja“ und der Nummer) oder selbst handeln — dann bekommst du danach eine Meldung.`}),e[2]=s):s=e[2];let c;if(e[3]!==t.data.arten||e[4]!==n){let r;e[6]===n?r=e[7]:(r=e=>(0,B.jsxs)(`div`,{role:`row`,className:`flex flex-col gap-2 border-t border-white/[0.06] py-3 first:border-t-0 sm:flex-row sm:items-center sm:justify-between`,children:[(0,B.jsxs)(`span`,{role:`rowheader`,className:`flex min-w-0 flex-col gap-0.5`,children:[(0,B.jsx)(`span`,{className:`text-[15px]`,children:e.name}),(0,B.jsx)(`span`,{className:`text-xs text-text-3`,children:e.text})]}),(0,B.jsx)(`span`,{role:`cell`,className:`shrink-0`,children:(0,B.jsx)(`select`,{"aria-label":`Freiheit: ${e.name}`,value:e.stufe,disabled:n.isPending,className:a(Y,`min-w-44`,e.stufe!==e.standard&&`border-lab/50`),onChange:t=>{let r=t.target.value;o(r)>o(e.standard)&&r===`selbst`?i({id:e.id,name:e.name,stufe:r}):n.mutate({[e.id]:r})},children:J.map(t=>(0,B.jsxs)(`option`,{value:t.id,children:[t.kurz,t.id===e.standard?` (Start)`:``]},t.id))})})]},e.id),e[6]=n,e[7]=r),c=t.data.arten.map(r),e[3]=t.data.arten,e[4]=n,e[5]=c}else c=e[5];let l;e[8]===c?l=e[9]:(l=(0,B.jsx)(`div`,{role:`table`,"aria-label":`Lucys Freiheiten`,className:`flex flex-col`,children:c}),e[8]=c,e[9]=l);let f=!!r,p=r?`„${r.name}“: Lucy selbst handeln lassen?`:``,m;e[10]===Symbol.for(`react.memo_cache_sentinel`)?(m=()=>i(null),e[10]=m):m=e[10];let h;e[11]!==r||e[12]!==n?(h=()=>{r&&n.mutate({[r.id]:r.stufe}),i(null)},e[11]=r,e[12]=n,e[13]=h):h=e[13];let g;e[14]!==n.isPending||e[15]!==f||e[16]!==p||e[17]!==h?(g=(0,B.jsx)(F,{offen:f,titel:p,text:`Dann tut sie es aus eigenem Antrieb, ohne dich vorher zu fragen, und meldet es erst danach. Zurückstellen kannst du es hier jederzeit.`,knopf:`Selbst handeln lassen`,gesperrt:n.isPending,onNein:m,onJa:h}),e[14]=n.isPending,e[15]=f,e[16]=p,e[17]=h,e[18]=g):g=e[18];let _;return e[19]!==l||e[20]!==g?(_=(0,B.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[s,l,g]}),e[19]=l,e[20]=g,e[21]=_):_=e[21],_}function te(e){return J.findIndex(t=>t.id===e)}function ne(){let e=(0,R.c)(27),t=m(),n=h(),[r,i]=(0,z.useState)(!1),a=t.data?.zuletzt,o;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(o=(0,B.jsx)(`p`,{className:`m-0 text-sm text-text-2`,children:`Sonntags um 07:30 schickt Lucy eine Nachricht statt vieler: was eingespielt wurde, was offen ist, Platten, Sicherungen, Zertifikate — und offene App-Updates zum Beantworten mit „ja“.`}),e[0]=o):o=e[0];let s;e[1]===n?s=e[2]:(s=()=>n.mutate(),e[1]=n,e[2]=s);let c=n.isPending?`Lucy schreibt …`:`Jetzt schicken`,l;e[3]!==n.isPending||e[4]!==s||e[5]!==c?(l=(0,B.jsx)(A,{size:`sm`,variant:`outline`,disabled:n.isPending,onClick:s,children:c}),e[3]=n.isPending,e[4]=s,e[5]=c,e[6]=l):l=e[6];let u;e[7]===t.data?u=e[8]:(u=t.data?`Nächster: ${_(new Date(t.data.naechster*1e3).toISOString()).toLowerCase()}`:``,e[7]=t.data,e[8]=u);let d;e[9]===a?d=e[10]:(d=a?` · zuletzt ${_(new Date(a.zeit*1e3).toISOString()).toLowerCase()}`:``,e[9]=a,e[10]=d);let f;e[11]!==u||e[12]!==d?(f=(0,B.jsxs)(`span`,{className:`text-xs text-text-3`,children:[u,d]}),e[11]=u,e[12]=d,e[13]=f):f=e[13];let p;e[14]!==r||e[15]!==a?(p=a&&(0,B.jsx)(`button`,{type:`button`,className:`text-xs text-cyan hover:underline`,onClick:()=>i(!r),children:r?`Letzten zuklappen`:`Letzten lesen`}),e[14]=r,e[15]=a,e[16]=p):p=e[16];let g;e[17]!==l||e[18]!==f||e[19]!==p?(g=(0,B.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[l,f,p]}),e[17]=l,e[18]=f,e[19]=p,e[20]=g):g=e[20];let v;e[21]!==r||e[22]!==a?(v=r&&a&&(0,B.jsx)(`pre`,{className:`flaeche-innen m-0 max-h-96 overflow-y-auto rounded-2xl p-4 font-sans text-sm whitespace-pre-wrap text-text-2`,children:a.text}),e[21]=r,e[22]=a,e[23]=v):v=e[23];let y;return e[24]!==g||e[25]!==v?(y=(0,B.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[o,g,v]}),e[24]=g,e[25]=v,e[26]=y):y=e[26],y}var X=[`Montag`,`Dienstag`,`Mittwoch`,`Donnerstag`,`Freitag`,`Samstag`,`Sonntag`],re=Array.from({length:48},(e,t)=>`${String(Math.floor(t/2)).padStart(2,`0`)}:${t%2?`30`:`00`}`),ie=new Intl.DateTimeFormat(`de-DE`,{day:`2-digit`,month:`2-digit`,year:`numeric`,hour:`2-digit`,minute:`2-digit`,timeZone:`Europe/Berlin`});function Z(e){let t=e?new Date(e):null;return t&&!Number.isNaN(t.getTime())?ie.format(t):`–`}function ae(e,t){let n=Number(t.slice(0,2)),r=n*60+179,i=e;r>=1440&&(r-=1440,i=e%7+1);let a=e=>String(e).padStart(2,`0`),o=`${a(n)}:00`,s=`${a(Math.floor(r/60))}:${a(r%60)}`;return i===e?`${X[e-1]} ${o}–${s}`:`${X[e-1]} ${o} – ${X[i-1]} ${s}`}function Q(e){let t=(0,R.c)(6),{titel:n,children:r}=e,i;t[0]===n?i=t[1]:(i=(0,B.jsx)(`h3`,{className:`etikett text-[11.5px] tracking-[0.16em] text-text-2`,children:n}),t[0]=n,t[1]=i);let a;return t[2]!==r||t[3]!==i||t[4]!==n?(a=(0,B.jsxs)(`section`,{"aria-label":n,className:`flex flex-col gap-3 border-t border-white/[0.06] pt-4 first:border-t-0 first:pt-0`,children:[i,r]}),t[2]=r,t[3]=i,t[4]=n,t[5]=a):a=t[5],a}function $(e){let t=(0,R.c)(23),{titel:n,text:r,farbe:i,id:o,children:s}=e,c=i===`box`?`var(--box)`:i===`homelab`?`var(--lab)`:null,l=i===`box`?`text-box-text`:i===`homelab`?`text-lab-text`:`text-foreground`,u=i===`box`?`[--rand:color-mix(in_srgb,var(--box)_28%,transparent)]`:i===`homelab`?`[--rand:color-mix(in_srgb,var(--lab)_28%,transparent)]`:``,d;t[0]===u?d=t[1]:(d=a(`flaeche relative flex min-w-0 flex-col gap-4 overflow-hidden rounded-3xl p-5 sm:p-6`,u),t[0]=u,t[1]=d);let f;t[2]===c?f=t[3]:(f=c&&(0,B.jsx)(`div`,{"aria-hidden":!0,className:`pointer-events-none absolute -top-40 -left-32 size-[400px] rounded-full`,style:{background:`radial-gradient(closest-side, color-mix(in srgb, ${c} 16%, transparent), transparent)`}}),t[2]=c,t[3]=f);let p;t[4]===l?p=t[5]:(p=a(`text-[19px] leading-tight font-semibold`,l),t[4]=l,t[5]=p);let m;t[6]!==p||t[7]!==n?(m=(0,B.jsx)(`h2`,{className:p,children:n}),t[6]=p,t[7]=n,t[8]=m):m=t[8];let h;t[9]===r?h=t[10]:(h=(0,B.jsx)(`p`,{className:`text-sm text-text-3`,children:r}),t[9]=r,t[10]=h);let g;t[11]!==m||t[12]!==h?(g=(0,B.jsxs)(`div`,{className:`relative flex flex-col gap-1`,children:[m,h]}),t[11]=m,t[12]=h,t[13]=g):g=t[13];let _;t[14]===s?_=t[15]:(_=(0,B.jsx)(`div`,{className:`relative flex min-w-0 flex-col gap-4`,children:s}),t[14]=s,t[15]=_);let v;return t[16]!==o||t[17]!==d||t[18]!==f||t[19]!==g||t[20]!==_||t[21]!==n?(v=(0,B.jsxs)(`section`,{id:o,"aria-label":n,className:d,children:[f,g,_]}),t[16]=o,t[17]=d,t[18]=f,t[19]=g,t[20]=_,t[21]=n,t[22]=v):v=t[22],v}function oe(e){let t=(0,R.c)(2),{children:n}=e,r;return t[0]===n?r=t[1]:(r=(0,B.jsx)(`p`,{className:`text-sm text-bernstein`,children:n}),t[0]=n,t[1]=r),r}function se(e){let t=(0,R.c)(3),{laedt:n,fehler:r}=e;if(n){let e;return t[0]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,B.jsx)(`p`,{className:`text-sm text-text-2`,children:`Wird gelesen …`}),t[0]=e):e=t[0],e}let i=r?`: ${r}`:`.`,a;return t[1]===i?a=t[2]:(a=(0,B.jsxs)(`p`,{role:`alert`,className:`text-sm text-rot-text`,children:[`Lässt sich gerade nicht lesen`,i]}),t[1]=i,t[2]=a),a}function ce({offen:e}){let t=C(),n=s({queryKey:[`geheimnisse`],queryFn:()=>f(`/api/maintenance/geheimnisse`),enabled:e}),[r,i]=(0,z.useState)(``),[a,o]=(0,z.useState)(!1),[c,u]=(0,z.useState)(!1);async function d(e){if(!a){o(!0),u(!1);try{await k(`/api/maintenance/geheimnisse`,{schluessel:`hf_token`,wert:e}),l(`erfolg`,e?`Hugging-Face-Zugang gespeichert.`:`Hugging-Face-Zugang gelöscht.`),i(``),t.invalidateQueries({queryKey:[`geheimnisse`]})}catch(e){l(`fehler`,e.message)}finally{o(!1)}}}let p=n.data,m;return m=n.isPending?`Wird gelesen …`:p?p.hf_token_gesetzt?`Ist hinterlegt.`:`Fehlt.`:`Lässt sich gerade nicht lesen${n.error?`: ${n.error.message}`:`.`}`,(0,B.jsxs)(Q,{titel:`Hugging-Face-Zugang`,children:[(0,B.jsxs)(`p`,{className:`text-sm text-text-2`,"aria-live":`polite`,children:[(0,B.jsx)(`span`,{className:!p&&!n.isPending?`text-rot-text`:void 0,children:m}),` Nötig für gesperrte Modelle und schnellere Downloads.`,p?.hf_token_aus_env?` Er kommt aus der Dienst-Einstellung und lässt sich hier nicht löschen.`:``]}),p?.schreibbar===!1&&(0,B.jsx)(`p`,{className:`text-sm text-bernstein`,children:`Die Box kann den Zugang gerade nicht speichern: Ihre Ablage ist nicht beschreibbar.`}),(0,B.jsxs)(`form`,{className:`flex gap-2`,onSubmit:e=>{e.preventDefault(),r.trim()&&d(r.trim())},children:[(0,B.jsx)(`label`,{htmlFor:`hf-token`,className:`sr-only`,children:`Hugging-Face-Zugang`}),(0,B.jsx)(`input`,{id:`hf-token`,type:`password`,autoComplete:`off`,value:r,onChange:e=>i(e.target.value),placeholder:`hf_…`,className:`h-11 min-w-0 flex-1 rounded-xl border border-white/12 bg-white/[0.04] px-3 text-[15px] outline-none focus:border-cyan/60 focus:bg-white/[0.06]`}),(0,B.jsx)(A,{type:`submit`,disabled:!r.trim()||p?.schreibbar===!1||a,children:a?`Speichert …`:`Speichern`})]}),p?.hf_token_gesetzt&&!p.hf_token_aus_env&&(c?(0,B.jsxs)(`span`,{className:`flex flex-wrap gap-2`,children:[(0,B.jsx)(A,{variant:`gefahr`,size:`sm`,disabled:a,onClick:()=>d(null),children:`Wirklich löschen?`}),(0,B.jsx)(A,{variant:`ghost`,size:`sm`,onClick:()=>u(!1),children:`Nein`})]}):(0,B.jsx)(A,{variant:`ghost`,size:`sm`,className:`self-start`,disabled:a,onClick:()=>u(!0),children:`Zugang löschen`}))]})}function le(e){let t=(0,R.c)(24),{ziel:n,name:r}=e,i=w(),a=i.data,o=null;if(i.isPending){let e;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,B.jsx)(`p`,{role:`status`,className:`text-sm text-text-2`,children:`Sendet …`}),t[0]=e):e=t[0],o=e}else if(a?.gesendet){let e=a.weg===`hermes`?`über Hermes`:`direkt an die Telegram-Bot-API`,n=a.kennung?`, Kennung ${a.kennung}`:``,r;t[1]!==e||t[2]!==n?(r=(0,B.jsxs)(`p`,{role:`status`,className:`text-sm text-gruen`,children:[`Gesendet `,e,n,`. Schau in Telegram nach.`]}),t[1]=e,t[2]=n,t[3]=r):r=t[3],o=r}else if(a){let e=a.grund??a.detail??`ohne Angabe eines Grundes.`,n;t[4]===e?n=t[5]:(n=(0,B.jsxs)(`p`,{role:`alert`,className:`text-sm text-rot-text`,children:[`Nicht gesendet: `,e]}),t[4]=e,t[5]=n),o=n}else if(i.error){let e;t[6]===i.error.message?e=t[7]:(e=(0,B.jsx)(`p`,{role:`alert`,className:`text-sm text-rot-text`,children:i.error.message}),t[6]=i.error.message,t[7]=e),o=e}let s;t[8]===r?s=t[9]:(s=(0,B.jsx)(`span`,{className:`text-[15px]`,children:r}),t[8]=r,t[9]=s);let c;t[10]!==i||t[11]!==n?(c=()=>i.mutate(n),t[10]=i,t[11]=n,t[12]=c):c=t[12];let l=`Testmeldung von ${r} senden`,u=i.isPending?`Sendet …`:`Test senden`,d;t[13]!==c||t[14]!==l||t[15]!==u||t[16]!==i.isPending?(d=(0,B.jsx)(A,{variant:`outline`,size:`sm`,disabled:i.isPending,onClick:c,"aria-label":l,children:u}),t[13]=c,t[14]=l,t[15]=u,t[16]=i.isPending,t[17]=d):d=t[17];let f;t[18]!==s||t[19]!==d?(f=(0,B.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[s,d]}),t[18]=s,t[19]=d,t[20]=f):f=t[20];let p;return t[21]!==o||t[22]!==f?(p=(0,B.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[f,o]}),t[21]=o,t[22]=f,t[23]=p):p=t[23],p}function ue(){let e=(0,R.c)(10),t=c().data,n=t?.rolle??`box`,r=n===`box`?`homelab`:`box`,i=t?.instanz??(n===`box`?`Box-Wart`:`Homelab`),a;e[0]!==r||e[1]!==n||e[2]!==t||e[3]!==i?(a=[{ziel:n,name:i}],t?.partner.eingerichtet&&a.push({ziel:r,name:t.partner.name}),a.sort(fe),e[0]=r,e[1]=n,e[2]=t,e[3]=i,e[4]=a):a=e[4];let o,s,l;e[5]===Symbol.for(`react.memo_cache_sentinel`)?(o=(0,B.jsx)(`p`,{className:`text-sm text-text-2`,children:`Dringende Hinweise gehen zusätzlich per Telegram raus, alles andere bleibt hier; was nachts anfällt, kommt um 07:00 als eine Morgenmeldung. Einfache Probleme wie einen abgestürzten Dienst behebt der Wächter selbst und schreibt es in den Verlauf.`}),s=(0,B.jsx)(`p`,{className:`text-sm text-text-2`,children:`Fragt Lucy vorher, antwortest du in Telegram mit „ja“ und der Nummer oder tippst auf die Antworttaste unter dem Eingabefeld — das löst genau die gefragte Aktion aus. Sonntags um 07:30 kommt ihr Wochenbericht.`}),l=(0,B.jsx)(`p`,{className:`text-sm text-text-2`,children:`Der Test schickt eine kurze Meldung über den echten Meldeweg, als dringend, damit sie auch nachts sofort kommt.`}),e[5]=o,e[6]=s,e[7]=l):(o=e[5],s=e[6],l=e[7]);let u;return e[8]===a?u=e[9]:(u=(0,B.jsxs)(Q,{titel:`Telegram`,children:[o,s,l,a.map(de)]}),e[8]=a,e[9]=u),u}function de(e){return(0,B.jsx)(le,{ziel:e.ziel,name:e.name},e.ziel)}function fe(e,t){return Number(e.ziel!==`box`)-Number(t.ziel!==`box`)}function pe(e){let t=(0,R.c)(87),{e:n,laedt:r,fehler:i}=e,a=x(),[o,s]=(0,z.useState)(null),[c,l]=(0,z.useState)(!1);if(!n){let e;return t[0]!==i||t[1]!==r?(e=(0,B.jsx)(Q,{titel:`Update-Zeitfenster`,children:(0,B.jsx)(se,{laedt:r,fehler:i})}),t[0]=i,t[1]=r,t[2]=e):e=t[2],e}let u=n.update_fenster,d,f,p,m,h,g,_,v,y,b,S,C,w,T,E,D,O;if(t[3]!==n.schaltbar||t[4]!==o||t[5]!==u.naechster_lauf||t[6]!==u.neustart_fenster||t[7]!==u.tag||t[8]!==u.tag_name||t[9]!==u.timer_aktiv||t[10]!==u.uhrzeit||t[11]!==u.wirksam){O=o??{tag:u.tag,uhrzeit:u.uhrzeit},f=O.tag!==u.tag||O.uhrzeit!==u.uhrzeit;let e=re.includes(O.uhrzeit)?re:[...re,O.uhrzeit].sort();d=Q,h=`Update-Zeitfenster`;let r;t[29]===u.naechster_lauf?r=t[30]:(r=u.naechster_lauf?` (nächster Lauf ${Z(u.naechster_lauf)})`:``,t[29]=u.naechster_lauf,t[30]=r),t[31]!==u.neustart_fenster||t[32]!==u.tag_name||t[33]!==u.uhrzeit||t[34]!==r?(g=(0,B.jsxs)(`p`,{className:`text-sm text-text-2`,children:[`Die Box aktualisiert sich jeden `,u.tag_name,` um `,u.uhrzeit,` Uhr`,r,`. Neu gestartet wird sie danach nur`,` `,u.neustart_fenster,`.`]}),t[31]=u.neustart_fenster,t[32]=u.tag_name,t[33]=u.uhrzeit,t[34]=r,t[35]=g):g=t[35],t[36]!==n.schaltbar||t[37]!==u.timer_aktiv?(_=n.schaltbar&&!u.timer_aktiv&&(0,B.jsx)(oe,{children:`Der Update-Timer läuft gerade nicht; er übernimmt das Fenster beim nächsten Start.`}),t[36]=n.schaltbar,t[37]=u.timer_aktiv,t[38]=_):_=t[38],t[39]!==n.schaltbar||t[40]!==u.wirksam?(v=n.schaltbar&&!u.wirksam&&(0,B.jsx)(oe,{children:`Der Timer läuft noch nach einem anderen Plan als eingestellt. Einmal speichern gleicht es an.`}),t[39]=n.schaltbar,t[40]=u.wirksam,t[41]=v):v=t[41],D=`flex flex-wrap items-end gap-2`;let i=O.tag,a;t[42]===Symbol.for(`react.memo_cache_sentinel`)?(a=X.map(he),t[42]=a):a=t[42],m=(0,B.jsxs)(`label`,{className:`flex flex-col gap-1 text-xs text-text-3`,children:[`Tag`,(0,B.jsx)(`select`,{className:`h-11 rounded-xl border border-white/12 bg-white/[0.04] px-3 text-[15px] text-foreground outline-none focus:border-cyan/60 focus:bg-white/[0.06]`,value:i,disabled:!n.schaltbar,"aria-label":`Wochentag`,onChange:e=>s({...O,tag:Number(e.target.value)}),children:a})]}),T=`flex flex-col gap-1 text-xs text-text-3`,E=`Uhrzeit`,p=`h-11 rounded-xl border border-white/12 bg-white/[0.04] px-3 text-[15px] text-foreground outline-none focus:border-cyan/60 focus:bg-white/[0.06]`,y=O.uhrzeit,b=!n.schaltbar,S=`Uhrzeit`,C=e=>s({...O,uhrzeit:e.target.value}),w=e.map(me),t[3]=n.schaltbar,t[4]=o,t[5]=u.naechster_lauf,t[6]=u.neustart_fenster,t[7]=u.tag,t[8]=u.tag_name,t[9]=u.timer_aktiv,t[10]=u.uhrzeit,t[11]=u.wirksam,t[12]=d,t[13]=f,t[14]=p,t[15]=m,t[16]=h,t[17]=g,t[18]=_,t[19]=v,t[20]=y,t[21]=b,t[22]=S,t[23]=C,t[24]=w,t[25]=T,t[26]=E,t[27]=D,t[28]=O}else d=t[12],f=t[13],p=t[14],m=t[15],h=t[16],g=t[17],_=t[18],v=t[19],y=t[20],b=t[21],S=t[22],C=t[23],w=t[24],T=t[25],E=t[26],D=t[27],O=t[28];let k;t[43]!==p||t[44]!==y||t[45]!==b||t[46]!==S||t[47]!==C||t[48]!==w?(k=(0,B.jsx)(`select`,{className:p,value:y,disabled:b,"aria-label":S,onChange:C,children:w}),t[43]=p,t[44]=y,t[45]=b,t[46]=S,t[47]=C,t[48]=w,t[49]=k):k=t[49];let j;t[50]!==k||t[51]!==T||t[52]!==E?(j=(0,B.jsxs)(`label`,{className:T,children:[E,k]}),t[50]=k,t[51]=T,t[52]=E,t[53]=j):j=t[53];let M=!n.schaltbar||a.isPending||!f&&u.wirksam,N;t[54]===Symbol.for(`react.memo_cache_sentinel`)?(N=()=>l(!0),t[54]=N):N=t[54];let P=a.isPending?`Speichert …`:`Speichern`,I;t[55]!==M||t[56]!==P?(I=(0,B.jsx)(A,{disabled:M,onClick:N,children:P}),t[55]=M,t[56]=P,t[57]=I):I=t[57];let L;t[58]!==m||t[59]!==j||t[60]!==I||t[61]!==D?(L=(0,B.jsxs)(`div`,{className:D,children:[m,j,I]}),t[58]=m,t[59]=j,t[60]=I,t[61]=D,t[62]=L):L=t[62];let V=n.schaltbar?``:` Einstellen lässt es sich nur auf der Box.`,H;t[63]===V?H=t[64]:(H=(0,B.jsxs)(`p`,{className:`text-xs text-text-3`,children:[`Am besten nachts nach der Sicherung (03:30) und vor der Morgenmeldung (07:00).`,V]}),t[63]=V,t[64]=H);let U;t[65]!==O.tag||t[66]!==O.uhrzeit?(U=ae(O.tag,O.uhrzeit),t[65]=O.tag,t[66]=O.uhrzeit,t[67]=U):U=t[67];let W=`Der Update-Lauf startet ab jetzt jeden ${X[O.tag-1]} um ${O.uhrzeit} Uhr. Neu gestartet wird die Box nur ${U}. Ein Termin, der dadurch schon vorbei ist, wird nicht nachgeholt: Der erste Lauf ist der nächste reguläre.`,G;t[68]===Symbol.for(`react.memo_cache_sentinel`)?(G=()=>l(!1),t[68]=G):G=t[68];let K;t[69]!==c||t[70]!==a||t[71]!==O?(K=()=>{c&&(a.mutate(O,{onSuccess:()=>s(null)}),l(!1))},t[69]=c,t[70]=a,t[71]=O,t[72]=K):K=t[72];let q;t[73]!==c||t[74]!==a.isPending||t[75]!==W||t[76]!==K?(q=(0,B.jsx)(F,{offen:c,titel:`Update-Zeitfenster ändern?`,text:W,knopf:`Speichern`,gesperrt:a.isPending,onNein:G,onJa:K}),t[73]=c,t[74]=a.isPending,t[75]=W,t[76]=K,t[77]=q):q=t[77];let J;return t[78]!==d||t[79]!==h||t[80]!==g||t[81]!==_||t[82]!==v||t[83]!==L||t[84]!==H||t[85]!==q?(J=(0,B.jsxs)(d,{titel:h,children:[g,_,v,L,H,q]}),t[78]=d,t[79]=h,t[80]=g,t[81]=_,t[82]=v,t[83]=L,t[84]=H,t[85]=q,t[86]=J):J=t[86],J}function me(e){return(0,B.jsx)(`option`,{value:e,children:e},e)}function he(e,t){return(0,B.jsx)(`option`,{value:t+1,children:e},e)}function ge(e){let t=(0,R.c)(37),{e:n,laedt:r,fehler:i}=e,a=p(),[o,s]=(0,z.useState)(null);if(!n){let e;return t[0]!==i||t[1]!==r?(e=(0,B.jsx)(Q,{titel:`Modell-Radar`,children:(0,B.jsx)(se,{laedt:r,fehler:i})}),t[0]=i,t[1]=r,t[2]=e):e=t[2],e}let c=n.radar,l=c.zustand===`an`||c.zustand===`unbekannt`&&c.an,u;t[3]===c.naechster_lauf?u=t[4]:(u=c.naechster_lauf?` (nächster Lauf ${Z(c.naechster_lauf)})`:``,t[3]=c.naechster_lauf,t[4]=u);let d=`An. Es sucht jede Nacht ab 00:30 nach besseren Modellen${u}.`,f=c.an?`Eingeschaltet.`:`Ausgeschaltet.`,m;t[5]!==d||t[6]!==f?(m={an:d,schlaeft:`Schläft. Es sucht und testet keine Modelle, bis du es wieder einschaltest.`,aus:`Gestoppt, steht aber noch im Autostart: Nach einem Neustart der Box liefe es wieder.`,unbekannt:f},t[5]=d,t[6]=f,t[7]=m):m=t[7];let h=m[c.zustand],g;t[8]===h?g=t[9]:(g=(0,B.jsx)(`p`,{className:`text-sm text-text-2`,children:h}),t[8]=h,t[9]=g);let _;t[10]!==n.schaltbar||t[11]!==c.an||t[12]!==c.wirksam?(_=n.schaltbar&&!c.wirksam&&(0,B.jsxs)(oe,{children:[`Eingestellt ist „`,c.an?`an`:`aus`,`“, systemd zeigt etwas anderes. Noch einmal schalten gleicht es an.`]}),t[10]=n.schaltbar,t[11]=c.an,t[12]=c.wirksam,t[13]=_):_=t[13];let v=l?`outline`:`default`,y=!n.schaltbar||a.isPending,b;t[14]===l?b=t[15]:(b=()=>s(!l),t[14]=l,t[15]=b);let x=a.isPending?`Schaltet …`:l?`Ausschalten`:`Einschalten`,S;t[16]!==b||t[17]!==x||t[18]!==v||t[19]!==y?(S=(0,B.jsx)(A,{variant:v,size:`sm`,className:`self-start`,disabled:y,onClick:b,children:x}),t[16]=b,t[17]=x,t[18]=v,t[19]=y,t[20]=S):S=t[20];let C=o!==null,w=o?`Modell-Radar einschalten?`:`Modell-Radar ausschalten?`,T=o?`Das Radar sucht ab heute Nacht um 00:30 wieder nach besseren Modellen und testet höchstens eines pro Woche. Ein verpasster Lauf wird nicht nachgeholt, tagsüber lädt es also nichts.`:`Das Radar sucht und testet dann keine neuen Modelle mehr, bis du es wieder einschaltest. Ein Nachttest, der gerade läuft, endet noch. Auch ein Deploy schaltet es nicht wieder ein.`,E=o?`Einschalten`:`Ausschalten`,D;t[21]===Symbol.for(`react.memo_cache_sentinel`)?(D=()=>s(null),t[21]=D):D=t[21];let O;t[22]!==o||t[23]!==a?(O=()=>{o!==null&&(a.mutate(o),s(null))},t[22]=o,t[23]=a,t[24]=O):O=t[24];let k;t[25]!==a.isPending||t[26]!==C||t[27]!==w||t[28]!==T||t[29]!==E||t[30]!==O?(k=(0,B.jsx)(F,{offen:C,titel:w,text:T,knopf:E,gesperrt:a.isPending,onNein:D,onJa:O}),t[25]=a.isPending,t[26]=C,t[27]=w,t[28]=T,t[29]=E,t[30]=O,t[31]=k):k=t[31];let j;return t[32]!==S||t[33]!==k||t[34]!==g||t[35]!==_?(j=(0,B.jsxs)(Q,{titel:`Modell-Radar`,children:[g,_,S,k]}),t[32]=S,t[33]=k,t[34]=g,t[35]=_,t[36]=j):j=t[36],j}function _e(e){let t=(0,R.c)(25),{name:n,stand:r,laedt:i,fehler:a}=e,o;if(i){let e;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,B.jsx)(`span`,{className:`text-sm text-text-2`,children:`Wird gelesen …`}),t[0]=e):e=t[0],o=e}else if(a){let e;t[1]===a?e=t[2]:(e=(0,B.jsxs)(`span`,{className:`text-sm text-rot-text`,children:[`Nicht lesbar: `,a]}),t[1]=a,t[2]=e),o=e}else if(r?.commit){let e;t[4]===r.commit?e=t[5]:(e=(0,B.jsx)(`span`,{className:`ziffern text-foreground`,children:r.commit}),t[4]=r.commit,t[5]=e);let n=r.betreff?` · ${r.betreff}`:``,i;t[6]!==e||t[7]!==n?(i=(0,B.jsxs)(`span`,{className:`text-sm text-text-2`,children:[e,n]}),t[6]=e,t[7]=n,t[8]=i):i=t[8];let a;t[9]!==r.deploy_zeit||t[10]!==r.quelle?(a=r.quelle===`deploy`?`Live seit ${Z(r.deploy_zeit)}`:`Aus git gelesen, ohne Deploy`,t[9]=r.deploy_zeit,t[10]=r.quelle,t[11]=a):a=t[11];let s;t[12]===r.commit_datum?s=t[13]:(s=r.commit_datum?` · Commit vom ${Z(r.commit_datum)}`:``,t[12]=r.commit_datum,t[13]=s);let c;t[14]!==a||t[15]!==s?(c=(0,B.jsxs)(`span`,{className:`text-xs text-text-3`,children:[a,s]}),t[14]=a,t[15]=s,t[16]=c):c=t[16];let l;t[17]!==i||t[18]!==c?(l=(0,B.jsxs)(B.Fragment,{children:[i,c]}),t[17]=i,t[18]=c,t[19]=l):l=t[19],o=l}else{let e;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,B.jsx)(`span`,{className:`text-sm text-text-2`,children:`Unbekannt: keine Stand-Datei und kein git.`}),t[3]=e):e=t[3],o=e}let s;t[20]===n?s=t[21]:(s=(0,B.jsx)(`span`,{className:`text-[15px]`,children:n}),t[20]=n,t[21]=s);let c;return t[22]!==o||t[23]!==s?(c=(0,B.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[s,o]}),t[22]=o,t[23]=s,t[24]=c):c=t[24],c}function ve(e,t){return!e||!t?null:e.startsWith(t)||t.startsWith(e)}function ye(e){let t=(0,R.c)(21),{offen:n}=e,r=c().data,i=!!r?.partner.eingerichtet,[a,o]=E(n,i),s=a.data?.stand?.commit,l=o.data?.stand?.commit,u;t[0]!==s||t[1]!==l?(u=ve(s,l),t[0]=s,t[1]=l,t[2]=u):u=t[2];let d=u,f=a.data?.instanz??r?.instanz??`Diese Instanz`,p=a.data?.stand,m=a.error?.message,h;t[3]!==a.isPending||t[4]!==f||t[5]!==p||t[6]!==m?(h=(0,B.jsx)(_e,{name:f,stand:p,laedt:a.isPending,fehler:m}),t[3]=a.isPending,t[4]=f,t[5]=p,t[6]=m,t[7]=h):h=t[7];let g;t[8]!==r?.partner||t[9]!==o.data?.instanz||t[10]!==o.data?.stand||t[11]!==o.error?.message||t[12]!==o.isPending||t[13]!==i?(g=i&&(0,B.jsx)(_e,{name:o.data?.instanz??r?.partner.name??`Partner`,stand:o.data?.stand,laedt:o.isPending,fehler:o.error?.message}),t[8]=r?.partner,t[9]=o.data?.instanz,t[10]=o.data?.stand,t[11]=o.error?.message,t[12]=o.isPending,t[13]=i,t[14]=g):g=t[14];let _;t[15]===d?_=t[16]:(_=d===!1&&(0,B.jsx)(oe,{children:`Die beiden Instanzen laufen mit verschiedenen Ständen. Der nächste Deploy der Box zieht den Homelab-Teil mit.`}),t[15]=d,t[16]=_);let v;return t[17]!==h||t[18]!==g||t[19]!==_?(v=(0,B.jsxs)(Q,{titel:`Instanzen`,children:[h,g,_]}),t[17]=h,t[18]=g,t[19]=_,t[20]=v):v=t[20],v}function be(e){let t=(0,R.c)(52),{h:n}=e,r=T(),i=b(),[a,o]=(0,z.useState)(``),[s,c]=(0,z.useState)(!1),[l,u]=(0,z.useState)(null),d=n.arcane,f;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(f={hinterlegt:(0,B.jsx)(j,{art:`gruen`,children:`hinterlegt`}),umgebung:(0,B.jsx)(j,{art:`gruen`,children:`aus der Dienst-Einstellung`}),fehlt:(0,B.jsx)(j,{art:`bernstein`,children:`fehlt`})},t[0]=f):f=t[0];let p=f[d.schluessel],m;t[1]===d.url?m=t[2]:(m=d.url&&(0,B.jsxs)(`a`,{href:d.url,target:`_blank`,rel:`noopener`,className:`ml-auto inline-flex items-center gap-1 text-cyan hover:underline`,children:[`Arcane öffnen `,(0,B.jsx)(N,{className:`size-3.5`,"aria-hidden":!0})]}),t[1]=d.url,t[2]=m);let h;t[3]!==p||t[4]!==m?(h=(0,B.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-sm text-text-2`,children:[`API-Schlüssel `,p,m]}),t[3]=p,t[4]=m,t[5]=h):h=t[5];let g;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(g=(0,B.jsx)(`p`,{className:`text-sm text-text-2`,children:`Mit Schlüssel sieht der Orchestrator, welche Docker-Images neuer sind. Anlegen in Arcane unter Einstellungen → API-Schlüssel; Lesen reicht, solange Docker-Updates nur als Probelauf laufen.`}),t[6]=g):g=t[6];let _;t[7]!==d.schluessel||t[8]!==r||t[9]!==a?(_=d.schluessel!==`umgebung`&&(0,B.jsxs)(`form`,{className:`flex gap-2`,onSubmit:e=>{e.preventDefault(),a.trim()&&r.mutate(a.trim(),{onSuccess:()=>o(``)})},children:[(0,B.jsx)(`label`,{htmlFor:`arcane-schluessel`,className:`sr-only`,children:`Arcane-API-Schlüssel`}),(0,B.jsxs)(`span`,{className:`relative min-w-0 flex-1`,children:[(0,B.jsx)(L,{className:`pointer-events-none absolute top-1/2 left-3 size-4 -translate-y-1/2 text-text-3`,"aria-hidden":!0}),(0,B.jsx)(`input`,{id:`arcane-schluessel`,type:`password`,autoComplete:`off`,value:a,onChange:e=>o(e.target.value),placeholder:d.schluessel===`hinterlegt`?`Neuen Schlüssel eintragen …`:`Schlüssel aus Arcane einfügen …`,className:`h-11 w-full rounded-xl border border-white/12 bg-white/[0.04] pr-3 pl-9 text-[15px] outline-none focus:border-lab/60 focus:bg-white/[0.06]`})]}),(0,B.jsx)(A,{type:`submit`,disabled:!a.trim()||r.isPending,children:r.isPending?`Prüft …`:`Prüfen und speichern`})]}),t[7]=d.schluessel,t[8]=r,t[9]=a,t[10]=_):_=t[10];let v;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(v=(0,B.jsx)(`p`,{className:`text-xs text-text-3`,children:`Der Schlüssel wird vor dem Speichern an Arcane geprüft und nie wieder angezeigt. Er liegt nur im Homelab-Teil.`}),t[11]=v):v=t[11];let y;t[12]!==d.schluessel||t[13]!==s||t[14]!==r?(y=d.schluessel===`hinterlegt`&&(s?(0,B.jsxs)(`span`,{className:`flex flex-wrap gap-2`,children:[(0,B.jsx)(A,{variant:`gefahr`,size:`sm`,disabled:r.isPending,onClick:()=>{r.mutate(null),c(!1)},children:`Wirklich entfernen?`}),(0,B.jsx)(A,{variant:`ghost`,size:`sm`,onClick:()=>c(!1),children:`Nein`})]}):(0,B.jsx)(A,{variant:`ghost`,size:`sm`,className:`self-start`,onClick:()=>c(!0),children:`Schlüssel entfernen`})),t[12]=d.schluessel,t[13]=s,t[14]=r,t[15]=y):y=t[15];let x;t[16]!==h||t[17]!==_||t[18]!==y?(x=(0,B.jsxs)(Q,{titel:`Arcane (Docker)`,children:[h,g,_,v,y]}),t[16]=h,t[17]=_,t[18]=y,t[19]=x):x=t[19];let S=d.echt?`Echt: „Jetzt updaten“ bei Arcane zieht neue Images und startet die Container neu.`:`Probelauf: Arcane zeigt nur, was es tun würde — kein Container wird angefasst.`,C=d.echt_quelle===`umgebung`?` Festgelegt in der Dienst-Einstellung (MC_ARCANE_ECHT).`:``,w;t[20]!==S||t[21]!==C?(w=(0,B.jsxs)(`p`,{className:`text-sm text-text-2`,children:[S,C]}),t[20]=S,t[21]=C,t[22]=w):w=t[22];let E=d.echt?`outline`:`default`,D=d.echt_quelle===`umgebung`||i.isPending||d.schluessel===`fehlt`,O;t[23]===d.echt?O=t[24]:(O=()=>u(!d.echt),t[23]=d.echt,t[24]=O);let k=i.isPending?`Schaltet …`:d.echt?`Zurück auf Probelauf`:`Echt schalten`,M;t[25]!==E||t[26]!==D||t[27]!==O||t[28]!==k?(M=(0,B.jsx)(A,{variant:E,size:`sm`,className:`self-start`,disabled:D,onClick:O,children:k}),t[25]=E,t[26]=D,t[27]=O,t[28]=k,t[29]=M):M=t[29];let P;t[30]===d.schluessel?P=t[31]:(P=d.schluessel===`fehlt`&&(0,B.jsx)(`p`,{className:`text-xs text-text-3`,children:`Erst den Schlüssel eintragen.`}),t[30]=d.schluessel,t[31]=P);let I=l!==null,V=l?`Docker-Updates echt ausführen?`:`Zurück auf Probelauf?`,H=l?`Ab jetzt zieht „Jetzt updaten“ bei Arcane neue Images und startet die betroffenen Container neu. Vorher wird ein Snapshot der VM angelegt, soweit möglich. Das lässt sich hier jederzeit zurückschalten.`:`Docker-Updates zeigen dann wieder nur, was Arcane tun würde.`,U=l?`Echt schalten`:`Probelauf`,W=!!l,G;t[32]===Symbol.for(`react.memo_cache_sentinel`)?(G=()=>u(null),t[32]=G):G=t[32];let K;t[33]!==i||t[34]!==l?(K=()=>{l!==null&&(i.mutate(l),u(null))},t[33]=i,t[34]=l,t[35]=K):K=t[35];let q;t[36]!==i.isPending||t[37]!==I||t[38]!==V||t[39]!==H||t[40]!==U||t[41]!==W||t[42]!==K?(q=(0,B.jsx)(F,{offen:I,titel:V,text:H,knopf:U,gefahr:W,gesperrt:i.isPending,onNein:G,onJa:K}),t[36]=i.isPending,t[37]=I,t[38]=V,t[39]=H,t[40]=U,t[41]=W,t[42]=K,t[43]=q):q=t[43];let J;t[44]!==w||t[45]!==M||t[46]!==P||t[47]!==q?(J=(0,B.jsxs)(Q,{titel:`Docker-Updates`,children:[w,M,P,q]}),t[44]=w,t[45]=M,t[46]=P,t[47]=q,t[48]=J):J=t[48];let Y;return t[49]!==J||t[50]!==x?(Y=(0,B.jsxs)(B.Fragment,{children:[x,J]}),t[49]=J,t[50]=x,t[51]=Y):Y=t[51],Y}function xe(e){let t=(0,R.c)(44),{h:n}=e,r=y(),[i,o]=(0,z.useState)(``),[s,c]=(0,z.useState)(``),[l,u]=(0,z.useState)(!1),d=n.adguard;if(!d)return null;let f;t[0]!==d.benutzer||t[1]!==d.zugang?(f=d.zugang===`hinterlegt`?(0,B.jsxs)(j,{art:`gruen`,children:[`hinterlegt`,d.benutzer?` · ${d.benutzer}`:``]}):(0,B.jsx)(j,{art:`grau`,children:`keiner`}),t[0]=d.benutzer,t[1]=d.zugang,t[2]=f):f=t[2];let p;t[3]===d.url?p=t[4]:(p=d.url&&(0,B.jsxs)(`a`,{href:d.url,target:`_blank`,rel:`noopener`,className:`ml-auto inline-flex items-center gap-1 text-cyan hover:underline`,children:[`AdGuard öffnen `,(0,B.jsx)(N,{className:`size-3.5`,"aria-hidden":!0})]}),t[3]=d.url,t[4]=p);let m;t[5]!==f||t[6]!==p?(m=(0,B.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-sm text-text-2`,children:[`Zugang `,f,p]}),t[5]=f,t[6]=p,t[7]=m):m=t[7];let h;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,B.jsx)(`p`,{className:`text-sm text-text-2`,children:`Mit einem Zugang zeigt die Kachel von AdGuard, wie viele Anfragen es blockt. Er wird nur zum Lesen der Statistik benutzt — am besten ein eigener Benutzer dafür.`}),t[8]=h):h=t[8];let g;t[9]!==i||t[10]!==s||t[11]!==r?(g=e=>{e.preventDefault(),i.trim()&&s&&r.mutate({benutzer:i.trim(),passwort:s},{onSuccess:()=>{c(``),o(``)}})},t[9]=i,t[10]=s,t[11]=r,t[12]=g):g=t[12];let _;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(_=(0,B.jsx)(`label`,{htmlFor:`adguard-benutzer`,className:`sr-only`,children:`AdGuard-Benutzer`}),t[13]=_):_=t[13];let v;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(v=e=>o(e.target.value),t[14]=v):v=t[14];let b;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(b=a(`h-11 w-full rounded-xl border border-white/12 bg-white/[0.04] px-3 text-[15px] outline-none focus:border-lab/60 focus:bg-white/[0.06]`,`min-w-0 flex-1 basis-40`),t[15]=b):b=t[15];let x;t[16]===i?x=t[17]:(x=(0,B.jsx)(`input`,{id:`adguard-benutzer`,autoComplete:`off`,value:i,onChange:v,placeholder:`Benutzer`,className:b}),t[16]=i,t[17]=x);let S;t[18]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,B.jsx)(`label`,{htmlFor:`adguard-passwort`,className:`sr-only`,children:`AdGuard-Passwort`}),t[18]=S):S=t[18];let C;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(C=e=>c(e.target.value),t[19]=C):C=t[19];let w;t[20]===Symbol.for(`react.memo_cache_sentinel`)?(w=a(`h-11 w-full rounded-xl border border-white/12 bg-white/[0.04] px-3 text-[15px] outline-none focus:border-lab/60 focus:bg-white/[0.06]`,`min-w-0 flex-1 basis-40`),t[20]=w):w=t[20];let T;t[21]===s?T=t[22]:(T=(0,B.jsx)(`input`,{id:`adguard-passwort`,type:`password`,autoComplete:`new-password`,value:s,onChange:C,placeholder:`Passwort`,className:w}),t[21]=s,t[22]=T);let E;t[23]!==i||t[24]!==s||t[25]!==r.isPending?(E=!i.trim()||!s||r.isPending,t[23]=i,t[24]=s,t[25]=r.isPending,t[26]=E):E=t[26];let D=r.isPending?`Prüft …`:`Prüfen und speichern`,O;t[27]!==E||t[28]!==D?(O=(0,B.jsx)(A,{type:`submit`,disabled:E,children:D}),t[27]=E,t[28]=D,t[29]=O):O=t[29];let k;t[30]!==T||t[31]!==O||t[32]!==g||t[33]!==x?(k=(0,B.jsxs)(`form`,{className:`flex flex-wrap gap-2`,onSubmit:g,children:[_,x,S,T,O]}),t[30]=T,t[31]=O,t[32]=g,t[33]=x,t[34]=k):k=t[34];let M;t[35]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,B.jsx)(`p`,{className:`text-xs text-text-3`,children:`Vor dem Speichern fragt der Homelab-Teil AdGuard einmal damit. Das Passwort wird nie wieder angezeigt und liegt nur im Homelab-Teil.`}),t[35]=M):M=t[35];let P;t[36]!==d.zugang||t[37]!==l||t[38]!==r?(P=d.zugang===`hinterlegt`&&(l?(0,B.jsxs)(`span`,{className:`flex flex-wrap gap-2`,children:[(0,B.jsx)(A,{variant:`gefahr`,size:`sm`,disabled:r.isPending,onClick:()=>{r.mutate(null),u(!1)},children:`Wirklich entfernen?`}),(0,B.jsx)(A,{variant:`ghost`,size:`sm`,onClick:()=>u(!1),children:`Nein`})]}):(0,B.jsx)(A,{variant:`ghost`,size:`sm`,className:`self-start`,onClick:()=>u(!0),children:`Zugang entfernen`})),t[36]=d.zugang,t[37]=l,t[38]=r,t[39]=P):P=t[39];let F;return t[40]!==k||t[41]!==P||t[42]!==m?(F=(0,B.jsxs)(Q,{titel:`AdGuard Home`,children:[m,h,k,M,P]}),t[40]=k,t[41]=P,t[42]=m,t[43]=F):F=t[43],F}function Se(e){let t=(0,R.c)(21),{h:n}=e,r=n.ausfuehrer,i;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,B.jsx)(`dt`,{className:`text-text-3`,children:`Ausführer`}),t[0]=i):i=t[0];let a=r.verbunden?`text-gruen-text`:`text-rot-text`,o=r.verbunden?`verbunden`:`meldet sich nicht`,s;t[1]===r.zuletzt?s=t[2]:(s=r.zuletzt?` · zuletzt ${_(new Date(r.zuletzt*1e3).toISOString()).toLowerCase()}`:``,t[1]=r.zuletzt,t[2]=s);let c;t[3]!==a||t[4]!==o||t[5]!==s?(c=(0,B.jsxs)(`dd`,{className:a,children:[o,s]}),t[3]=a,t[4]=o,t[5]=s,t[6]=c):c=t[6];let l;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,B.jsx)(`dt`,{className:`text-text-3`,children:`Modus`}),t[7]=l):l=t[7];let u=r.nur_lesen?`nur lesen — Updates sind gesperrt`:`voll: Snapshots, Sicherungen und Updates`,d;t[8]===u?d=t[9]:(d=(0,B.jsx)(`dd`,{className:`text-text-2`,children:u}),t[8]=u,t[9]=d);let f;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(f=(0,B.jsx)(`dt`,{className:`text-text-3`,children:`Sicherungen`}),t[10]=f):f=t[10];let p=r.sicherung_speicher?`auf „${r.sicherung_speicher}“ (wo kein Snapshot geht)`:`kein Speicher gefunden`,m;t[11]===p?m=t[12]:(m=(0,B.jsx)(`dd`,{className:`text-text-2`,children:p}),t[11]=p,t[12]=m);let h;t[13]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,B.jsx)(`dt`,{className:`text-text-3`,children:`Wartezeit`}),t[13]=h):h=t[13];let g=n.karenz_h>0?`${n.karenz_h} Stunden nach einer Änderung am Update-Skript einer App`:`aus`,v;t[14]===g?v=t[15]:(v=(0,B.jsx)(`dd`,{className:`text-text-2`,children:g}),t[14]=g,t[15]=v);let y;return t[16]!==m||t[17]!==v||t[18]!==c||t[19]!==d?(y=(0,B.jsx)(Q,{titel:`Ausführer und Updates`,children:(0,B.jsxs)(`dl`,{className:`grid grid-cols-[auto_minmax(0,1fr)] gap-x-4 gap-y-2 text-sm`,children:[i,c,l,d,f,m,h,v]})}),t[16]=m,t[17]=v,t[18]=c,t[19]=d,t[20]=y):y=t[20],y}function Ce(){let e=(0,R.c)(18),t=c().data,n=o().data,r=t?.rolle===`homelab`||!!(n?.eingerichtet&&n.erreichbar),i=O(r),a;if(!r){let t;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,B.jsx)(`p`,{className:`text-sm text-text-2`,children:`Der Homelab-Teil antwortet gerade nicht.`}),e[0]=t):t=e[0],a=t}else if(i.data){let t,n;e[4]===i.data?(t=e[5],n=e[6]):(t=(0,B.jsx)(be,{h:i.data}),n=(0,B.jsx)(xe,{h:i.data}),e[4]=i.data,e[5]=t,e[6]=n);let o;e[7]===r?o=e[8]:(o=(0,B.jsx)(Q,{titel:`Wartungsfenster und Regel je Gerät`,children:(0,B.jsx)(K,{aktiv:r})}),e[7]=r,e[8]=o);let s;e[9]===i.data?s=e[10]:(s=(0,B.jsx)(Se,{h:i.data}),e[9]=i.data,e[10]=s);let c;e[11]!==t||e[12]!==n||e[13]!==o||e[14]!==s?(c=(0,B.jsxs)(B.Fragment,{children:[t,n,o,s]}),e[11]=t,e[12]=n,e[13]=o,e[14]=s,e[15]=c):c=e[15],a=c}else{let t=i.error?.message,n;e[1]!==i.isPending||e[2]!==t?(n=(0,B.jsx)(se,{laedt:i.isPending,fehler:t}),e[1]=i.isPending,e[2]=t,e[3]=n):n=e[3],a=n}let s;return e[16]===a?s=e[17]:(s=(0,B.jsx)($,{titel:`Homelab`,farbe:`homelab`,text:`Arcane und Docker, AdGuard, der Ausführer auf dem Proxmox-Host, Rückwege.`,children:a}),e[16]=a,e[17]=s),s}function we(){let e=(0,R.c)(4),t;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,B.jsx)(Q,{titel:`Wie selbstständig Lucy handelt`,children:(0,B.jsx)(ee,{})}),e[0]=t):t=e[0];let n;e[1]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,B.jsx)(Q,{titel:`Offene Rückfragen`,children:(0,B.jsx)(M,{leerText:`Gerade wartet keine Rückfrage auf dich.`})}),e[1]=n):n=e[1];let r;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,B.jsx)(Q,{titel:`Zuletzt beantwortet`,children:(0,B.jsx)(P,{})}),e[2]=r):r=e[2];let i;return e[3]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,B.jsxs)($,{id:`lucy`,titel:`Lucy`,text:`Was sie aus eigenem Antrieb darf, ihre Rückfragen an dich und der Wochenbericht.`,children:[t,n,r,(0,B.jsx)(Q,{titel:`Wochenbericht`,children:(0,B.jsx)(ne,{})})]}),e[3]=i):i=e[3],i}function Te(){let e=(0,R.c)(20),t=S(!0),n=t.error?.message,r;e[0]!==t.data||e[1]!==t.isPending||e[2]!==n?(r={e:t.data,laedt:t.isPending,fehler:n},e[0]=t.data,e[1]=t.isPending,e[2]=n,e[3]=r):r=e[3];let i=r,a;e[4]===Symbol.for(`react.memo_cache_sentinel`)?(a=[],e[4]=a):a=e[4],(0,z.useEffect)(Ee,a);let o,s;e[5]===i?(o=e[6],s=e[7]):(o=(0,B.jsx)(pe,{...i}),s=(0,B.jsx)(ge,{...i}),e[5]=i,e[6]=o,e[7]=s);let c;e[8]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,B.jsx)(ce,{offen:!0}),e[8]=c):c=e[8];let l;e[9]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,B.jsxs)(Q,{titel:`Hermes`,children:[(0,B.jsxs)(`a`,{href:`/hermes-ui/`,target:`_blank`,rel:`noopener`,className:`flex h-11 items-center gap-2 self-start rounded-xl border border-white/12 bg-white/[0.04] px-4 text-[15px] font-semibold hover:border-white/20 hover:bg-white/[0.08]`,children:[(0,B.jsx)(N,{className:`size-4`,"aria-hidden":!0}),` Hermes-Dashboard öffnen`]}),(0,B.jsx)(`p`,{className:`text-xs text-text-3`,children:`Chat, Sitzungen und Cron-Jobs verwaltet Hermes selbst. Es fragt nach seiner eigenen Anmeldung.`})]}),e[9]=l):l=e[9];let u;e[10]!==o||e[11]!==s?(u=(0,B.jsxs)($,{titel:`KI-Box`,farbe:`box`,text:`Wann sie sich aktualisiert, das Modell-Radar und Zugänge.`,children:[o,s,c,l]}),e[10]=o,e[11]=s,e[12]=u):u=e[12];let d,f;e[13]===Symbol.for(`react.memo_cache_sentinel`)?(d=(0,B.jsx)(Ce,{}),f=(0,B.jsx)(we,{}),e[13]=d,e[14]=f):(d=e[13],f=e[14]);let p;e[15]===Symbol.for(`react.memo_cache_sentinel`)?(p=(0,B.jsx)($,{titel:`Meldungen`,text:`Telegram, Morgenmeldung und was sofort kommt.`,children:(0,B.jsx)(ue,{})}),e[15]=p):p=e[15];let m;e[16]===Symbol.for(`react.memo_cache_sentinel`)?(m=(0,B.jsx)($,{titel:`Software-Stand`,text:`Welcher Stand auf beiden Instanzen läuft.`,children:(0,B.jsx)(ye,{offen:!0})}),e[16]=m):m=e[16];let h;e[17]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,B.jsxs)(`p`,{className:`text-xs text-text-3 xl:col-span-2`,children:[`Logos der Dienste: `,(0,B.jsx)(`a`,{href:`https://selfh.st/icons`,target:`_blank`,rel:`noopener`,className:`underline-offset-4 hover:underline`,children:`selfh.st/icons`}),`, Lizenz CC BY 4.0. Die Marken gehören ihren Inhabern und dienen hier nur dem Wiedererkennen.`]}),e[17]=h):h=e[17];let g;return e[18]===u?g=e[19]:(g=(0,B.jsxs)(`div`,{className:`grid gap-5 md:gap-6 xl:grid-cols-2`,children:[u,d,f,p,m,h]}),e[18]=u,e[19]=g),g}function Ee(){if(window.location.hash!==`#lucy`)return;let e=Oe;e();let t=[700,1800].map(t=>window.setTimeout(e,t));return()=>t.forEach(De)}function De(e){return window.clearTimeout(e)}function Oe(){return document.getElementById(`lucy`)?.scrollIntoView({block:`start`})}export{Te as EinstellungenSeite}; |