@camstack/addon-admin-ui 1.2.527 → 1.2.529
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/dist/assets/{AddonAssetIcon-BZ0hQcho.js → AddonAssetIcon-B1rn0DLw.js} +1 -1
- package/dist/assets/Addons-CZ_5JUVc.js +5 -0
- package/dist/assets/{AdminPage-7avIuDBh.js → AdminPage-DmkuRREx.js} +1 -1
- package/dist/assets/{AdminSectionedPage-Bd2owMGm.js → AdminSectionedPage-B_tSbkIV.js} +1 -1
- package/dist/assets/{AiProfiles-aCDtxD2T.js → AiProfiles-W2ByefcY.js} +2 -2
- package/dist/assets/{Build-SObpGxas.js → Build-BesaIcQt.js} +3 -3
- package/dist/assets/Calendars-PHb_rEbJ.js +1 -0
- package/dist/assets/Cluster-CnMcgkaB.js +1 -0
- package/dist/assets/{ComposedDeviceEditDialog-BiIiBFG-.js → ComposedDeviceEditDialog-DlxMQhZP.js} +1 -1
- package/dist/assets/{CompositionBlockEditor-BXYXXUEU.js → CompositionBlockEditor-Ctx6d-qx.js} +2 -2
- package/dist/assets/CompositionEditorPage-CVp1OM-C.js +1 -0
- package/dist/assets/Data-OpXlBhEa.js +2 -0
- package/dist/assets/DeviceDetail-CUzPIb4E.js +2 -0
- package/dist/assets/DeviceDoActionFields-D1rhgn3I.js +1 -0
- package/dist/assets/Devices-DFfVPHVt.js +1 -0
- package/dist/assets/{EmbedPlayerPage-B7MIw7cv.js → EmbedPlayerPage-D0lVyXps.js} +1 -1
- package/dist/assets/FormBuilder-BvQZWKCS.js +1 -0
- package/dist/assets/History-BLJJzgUt.js +1 -0
- package/dist/assets/Identity-B_TiHuO-.js +1 -0
- package/dist/assets/IntegrationDetail-DtTxTigM.js +1 -0
- package/dist/assets/IntegrationHub-BvDB6bjh.js +1 -0
- package/dist/assets/Integrations-CK3qys8g.js +1 -0
- package/dist/assets/Integrations-Xub2OY5T.js +1 -0
- package/dist/assets/Library-CO10lVu2.js +1 -0
- package/dist/assets/Locations-CaL7Y2a3.js +3 -0
- package/dist/assets/{Logs-CrxQn3Uq.js → Logs-Bu40SOPP.js} +1 -1
- package/dist/assets/{MaskShapeCanvas-tJyuoOTy.js → MaskShapeCanvas-HJuLPIJP.js} +1 -1
- package/dist/assets/{MotionZonesSettings-DaGyceJa.js → MotionZonesSettings-COMPKhfx.js} +1 -1
- package/dist/assets/MyAccess-CNQzuYsW.js +2 -0
- package/dist/assets/Network-BBm6sZIX.js +1 -0
- package/dist/assets/NodeAddonsSettingsPanel-DZwxKBXw.js +1 -0
- package/dist/assets/Notifications-BS4cbFH2.js +1 -0
- package/dist/assets/Pipeline-BhNYn1U-.js +1 -0
- package/dist/assets/{PrivacyMaskSettings-zzQcpeb0.js → PrivacyMaskSettings-C88JqmdE.js} +1 -1
- package/dist/assets/Recordings-B8VQL_Ik.js +1 -0
- package/dist/assets/{RemoteGrid-Bz_u9tq6.js → RemoteGrid-CF92aN64.js} +1 -1
- package/dist/assets/ScanNetworkModal-SyHjZF2T.js +1 -0
- package/dist/assets/{SceneMonitorEditor-B0ICySEi.js → SceneMonitorEditor-mE7W6emU.js} +1 -1
- package/dist/assets/SessionsList-BD87Vhfu.js +2 -0
- package/dist/assets/Showroom-BS88iBLb.js +1 -0
- package/dist/assets/System-D-Xj3jc0.js +1 -0
- package/dist/assets/{Templates-uAAxbV9V.js → Templates-D0V7IdcS.js} +1 -1
- package/dist/assets/{Terminal-D1fhPY66.js → Terminal-DhbVA89N.js} +5 -5
- package/dist/assets/Trans-Bsz5Pghy.js +1 -0
- package/dist/assets/{Viewer-BWN8qfBa.js → Viewer-BTxcZ-BR.js} +1 -1
- package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-sshFQYnL.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-CmowmspB.js} +1 -1
- package/dist/assets/{addon-icons-context-BHF-RdY-.js → addon-icons-context-DZZCjo9x.js} +1 -1
- package/dist/assets/{archive-2V-x_y9T.js → archive-Bu9T4BL0.js} +1 -1
- package/dist/assets/{assignment-candidates-BpC51VXR.js → assignment-candidates-DWivr3bV.js} +1 -1
- package/dist/assets/{authed-media-CdbbdgDZ.js → authed-media-yW7W_8pm.js} +1 -1
- package/dist/assets/{bell-off-DDQ8FbF1.js → bell-off-E0Abr7jJ.js} +1 -1
- package/dist/assets/{board-model-D3wYwuI4.js → board-model-CCD7fB3T.js} +1 -1
- package/dist/assets/{boxes-BwEV9Act.js → boxes-BkzsIUkw.js} +1 -1
- package/dist/assets/circle-slash-pdaivo-U.js +1 -0
- package/dist/assets/{client-r4i0EpF6.js → client-BvflqtP1.js} +1 -1
- package/dist/assets/{cloud-upload-BII8r4p9.js → cloud-upload-BIjzjy_K.js} +1 -1
- package/dist/assets/crop-CZJDrMcX.js +1 -0
- package/dist/assets/device-integration-icon-D-OosuOg.js +1 -0
- package/dist/assets/device-picker-model-2dkiqOI6.js +1 -0
- package/dist/assets/{dist-B0LFF94V.js → dist-DoqhrZoo.js} +1 -1
- package/dist/assets/{dist-BOdjk8IV.js → dist-Gm_hHBN2.js} +1 -1
- package/dist/assets/{file-up-Bizrs9Ca.js → file-up-Cyg6A2qN.js} +1 -1
- package/dist/assets/{format-Bqo-j708.js → format-ChSVChsY.js} +1 -1
- package/dist/assets/{grip-vertical-C-qhB3oM.js → grip-vertical-CLVyc1HC.js} +1 -1
- package/dist/assets/{hard-drive-download-Dym9jihx.js → hard-drive-download-Cd122TYb.js} +1 -1
- package/dist/assets/{hostInit-bmlgmSTk.js → hostInit-DR1ykbVx.js} +1 -1
- package/dist/assets/i18n-Bg2ooh3q.js +1 -0
- package/dist/assets/icons-BSJCF6qM.js +1 -0
- package/dist/assets/index-CyqhCHax.css +2 -0
- package/dist/assets/index-DMMw81r0.js +4 -0
- package/dist/assets/{key-DddJ6bil.js → key-D_zqd1r-.js} +1 -1
- package/dist/assets/{key-round-CbCqycf3.js → key-round-pNw827HU.js} +1 -1
- package/dist/assets/{layers-C-ZqYk3U.js → layers-CFNXRt4j.js} +1 -1
- package/dist/assets/{linked-devices-model-BPUD1khJ.js → linked-devices-model-D9m6pafu.js} +1 -1
- package/dist/assets/{list-ordered-Cxznlat2.js → list-ordered-Dy6tCUD8.js} +1 -1
- package/dist/assets/location-owned-usage-DasgH3RR.js +1 -0
- package/dist/assets/{memory-stick-CLL3KiND.js → memory-stick-Bt2KoB-0.js} +1 -1
- package/dist/assets/{message-square-plus-C2nVnMG1.js → message-square-plus-rkd_X0vs.js} +1 -1
- package/dist/assets/{mf-entry-bootstrap-0-edf9b20a.js → mf-entry-bootstrap-0-dd19d57d.js} +2 -2
- package/dist/assets/{mic-off-CcHQBwDt.js → mic-off-DWb36TX2.js} +1 -1
- package/dist/assets/{monitor-off-DUE1gt1S.js → monitor-off-B2GWMMt_.js} +1 -1
- package/dist/assets/{monitor-smartphone-CwOoXB0L.js → monitor-smartphone-DJzvbVtx.js} +1 -1
- package/dist/assets/mount-2dkiqOI6.js +1 -0
- package/dist/assets/notification-schedule-field-B7FdiF_t.js +1 -0
- package/dist/assets/{player-overlays-Cw_gjG75.js → player-overlays-DpZIxQHp.js} +1 -1
- package/dist/assets/{recycle-hW2Os1lc.js → recycle-BWLoavmg.js} +1 -1
- package/dist/assets/remoteEntry-CD4F7fE2.js +1 -0
- package/dist/assets/{ruler-SYjqj9n_.js → ruler-C1SbVRl3.js} +1 -1
- package/dist/assets/{scan-eye-BZlKp5Ev.js → scan-eye-Bv4PGTFl.js} +1 -1
- package/dist/assets/{scissors-Prn6Kbb7.js → scissors-BsEkbrx_.js} +1 -1
- package/dist/assets/{search-x-CCA8373c.js → search-x-DE4DxdsF.js} +1 -1
- package/dist/assets/{send-C5rCH5_0.js → send-Dd0BBamd.js} +1 -1
- package/dist/assets/{settings-2-wlw_-rxi.js → settings-2-z3X6U2eo.js} +1 -1
- package/dist/assets/{shapes-Kj0bK1D8.js → shapes-D-IaC6en.js} +1 -1
- package/dist/assets/{sigma-NPxR3lj1.js → sigma-CxBVWJ85.js} +1 -1
- package/dist/assets/{speaker-CIKbprnA.js → speaker-Dy79a571.js} +1 -1
- package/dist/assets/src-KDhMZ5Ob.js +67 -0
- package/dist/assets/sso-popup-BjTl8T6g.js +1 -0
- package/dist/assets/{step-inspector-model-BKKc_lkM.js → step-inspector-model-DINPtCNq.js} +1 -1
- package/dist/assets/{table-2-Sw__YAPa.js → table-2-IUuOvuT8.js} +1 -1
- package/dist/assets/{timer-reset-BhPZYoCT.js → timer-reset-D1H0hoMf.js} +1 -1
- package/dist/assets/{unlink-DNy8sNAV.js → unlink-DTu1e00O.js} +1 -1
- package/dist/assets/{usb-CyQsTtlO.js → usb-CFK8z-TS.js} +1 -1
- package/dist/assets/{use-device-bound-caps-BQo_OD1O.js → use-device-bound-caps-DS4FtJtN.js} +1 -1
- package/dist/assets/{use-scenes-feed-BCDAv1nN.js → use-scenes-feed-CE-KFGxN.js} +1 -1
- package/dist/assets/{use-stationary-objects-BnIfyZw5.js → use-stationary-objects-CFLRkxjx.js} +1 -1
- package/dist/assets/useEventInvalidation-2dkiqOI6.js +1 -0
- package/dist/assets/useNodeUrlSelection-A-NDcCsx.js +1 -0
- package/dist/assets/user-round-BSVSJsjB.js +1 -0
- package/dist/assets/{user-x-CUkBojXx.js → user-x-KWsBR0tG.js} +1 -1
- package/dist/assets/{variable-CpgCMY_Q.js → variable-BG_qKWYf.js} +1 -1
- package/dist/assets/{video-DXegVNA2.js → video-D0guHpd1.js} +1 -1
- package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-2LL0aB_0.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-FCSZ5q7m.js} +2 -2
- package/dist/index.html +14 -10
- package/dist/server/addon.js +9 -1
- package/package.json +1 -1
- package/dist/assets/Addons-BAqAfY0r.js +0 -5
- package/dist/assets/BrokerEditorDialog-Cp7neyJC.js +0 -1
- package/dist/assets/Calendars-B2TORAnq.js +0 -1
- package/dist/assets/Cluster-CD4DYic_.js +0 -1
- package/dist/assets/CompositionEditorPage-Cm4C-7Z-.js +0 -1
- package/dist/assets/Data-CRPVPhFT.js +0 -2
- package/dist/assets/DeviceDetail-DNsWQGiy.js +0 -2
- package/dist/assets/DeviceDoActionFields-BEhy6_KW.js +0 -1
- package/dist/assets/Devices-CS5P4d9n.js +0 -1
- package/dist/assets/History-BbOfWf-p.js +0 -1
- package/dist/assets/Identity-Df140-fX.js +0 -1
- package/dist/assets/IntegrationDetail-B7sqZ94w.js +0 -1
- package/dist/assets/IntegrationHub-DndCuqMe.js +0 -1
- package/dist/assets/Integrations-BJh_WZAT.js +0 -1
- package/dist/assets/Integrations-DRCpstaG.js +0 -1
- package/dist/assets/Library-Cx17_SRL.js +0 -1
- package/dist/assets/Locations-Dt9LOu5v.js +0 -3
- package/dist/assets/MyAccess-Bp2dsON4.js +0 -2
- package/dist/assets/Network-DftlNAIH.js +0 -1
- package/dist/assets/NodeAddonsSettingsPanel-JIXh-CLX.js +0 -1
- package/dist/assets/Notifications-2tj0VaIS.js +0 -1
- package/dist/assets/Pipeline-CqZqLWQZ.js +0 -1
- package/dist/assets/Recordings-DoAJqZqc.js +0 -1
- package/dist/assets/ScanNetworkModal-DL-mWRtG.js +0 -1
- package/dist/assets/SessionsList-QvqpXCDN.js +0 -2
- package/dist/assets/Showroom-B6CDELO1.js +0 -1
- package/dist/assets/System-C0KUcOaJ.js +0 -1
- package/dist/assets/circle-slash-BjzSCz4-.js +0 -1
- package/dist/assets/crop-D9cpl5_W.js +0 -1
- package/dist/assets/device-integration-icon-Cf2JTj5q.js +0 -1
- package/dist/assets/device-picker-model-B_Zjyqyk.js +0 -1
- package/dist/assets/i18n-BE1bPZOs.js +0 -1
- package/dist/assets/icons-BZ8D05w2.js +0 -1
- package/dist/assets/index-DimGtYV1.css +0 -2
- package/dist/assets/index-Ohn-2iW_.js +0 -4
- package/dist/assets/location-owned-usage-DOmOvdiG.js +0 -1
- package/dist/assets/log-in-9Uirjetj.js +0 -1
- package/dist/assets/mount-B_Zjyqyk.js +0 -1
- package/dist/assets/remoteEntry-CHuAXwj-.js +0 -1
- package/dist/assets/src-nnHXOip7.js +0 -67
- package/dist/assets/useEventInvalidation-B_Zjyqyk.js +0 -1
- package/dist/assets/useNodeUrlSelection-CR_BnlEg.js +0 -1
- package/dist/assets/user-round-BY4YxbLZ.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{C as e,K as t,R as n,S as r,V as i,Y as a,et as o,o as s,x as c}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEyXHAdg.js";import{Ai as l,D as u,Dn as d,En as f,Ht as p,In as m,Kn as h,L as g,Ln as _,Z as v,_n as y,ai as b,bt as x,dt as S,fn as C,gt as w,pr as T,qr as E,rn as ee,tn as D,ur as O,xn as te,zt as k}from"./player-overlays-Cw_gjG75.js";import{ci as ne,dr as re,li as ie,ri as ae}from"./client-r4i0EpF6.js";import{t as A}from"./boxes-BwEV9Act.js";import{s as oe,u as j}from"./video-DXegVNA2.js";import{t as se}from"./log-in-9Uirjetj.js";import{$s as ce,An as le,Cc as ue,Dn as de,Fo as fe,Hi as M,Nd as pe,Nr as me,On as he,Or as ge,Qs as _e,Rd as ve,Tc as ye,Tn as be,Ui as N,Zn as xe,_c as Se,bc as Ce,di as P,ec as we,gc as Te,ic as Ee,lc as De,md as Oe,oc as ke,ri as F,sc as Ae,uc as je,vc as Me,wc as Ne,yc as Pe}from"./src-nnHXOip7.js";import{t as I}from"./i18n-BE1bPZOs.js";import{t as L}from"./useTranslation-BJr-n0es.js";import"./mount-B_Zjyqyk.js";import{T as Fe,a as R,br as Ie,gr as Le,hr as Re,i as z}from"./index-Ohn-2iW_.js";import{t as ze}from"./AdminSectionedPage-Bd2owMGm.js";import{t as B}from"./AdminPage-7avIuDBh.js";import{t as Be}from"./NodeAddonsSettingsPanel-JIXh-CLX.js";import{n as V,r as Ve,t as H}from"./IntegrationHub-DndCuqMe.js";import{n as U,t as W}from"./addon-display-names-BkwMrExv.js";o();var G=5e3,K=`network-access`,He={connected:!1,endpoint:null};function Ue(){let{t:e}=L(),n=s(),i=N({capName:`network-access`},{refetchInterval:G}),o=M(void 0,{refetchInterval:G}),c=t(()=>W(o.data??[]),[o.data]),l=t(()=>(i.data??[]).map(e=>({addonId:e.addonId,displayName:c.get(e.addonId)??e.addonId,isActive:e.isActive})),[i.data,c]),[u,d]=a(null),[f,p]=a({}),m=(e,t)=>{let r=t?.addonId;n.invalidateQueries({queryKey:[[`networkAccess`,`getStatus`],{input:{addonId:r},type:`query`}]}),d(null),p(e=>{if(r===void 0||!(r in e))return e;let t={...e};return delete t[r],t})},h=(e,t)=>{d(null);let n=t?.addonId;if(n===void 0)return;let r=e instanceof Error?e.message:String(e);p(e=>({...e,[n]:r}))},g=Ne({onSuccess:m,onError:h}),_=ye({onSuccess:m,onError:h}),v=[{id:K,label:e(`system.remoteAccess.remoteAccess`,`Remote access`),install:{capability:K,label:e(`system.remoteAccess.addTunnel`,`Add tunnel`)},entries:l.map(e=>({id:e.addonId,name:e.displayName,fallbackIcon:j,...U(e.isActive),render:()=>r(V,{addonId:e.addonId,displayName:e.displayName,capName:K,isActive:e.isActive,badges:r(We,{addonId:e.addonId}),error:f[e.addonId]??null,primaryAction:r(Ge,{addonId:e.addonId,busyId:u,onStart:e=>{d(e),g.mutate({addonId:e})},onStop:e=>{d(e),_.mutate({addonId:e})}})})}))}];return r(H,{embedded:!0,icon:j,title:e(`system.remoteAccess.remoteAccess2`,`Remote Access`),subtitle:e(`system.remoteAccess.publicFacingTunnelsThatExpose`,`Public-facing tunnels that expose this hub to the internet (Cloudflare Tunnel, ngrok, …).`),groups:v,isLoading:i.isLoading,emptyTitle:e(`system.remoteAccess.noRemoteAccessProvidersInstalled`,`No remote-access providers installed`),emptyDescription:e(`system.remoteAccess.installATunnelAddonE`,`Install a tunnel addon (e.g. @camstack/addon-cloudflare) to expose this hub publicly.`)})}function q(e){let{data:t}=ue({addonId:e},{refetchInterval:G,retry:!1}),n=t?ae.safeParse(t):null;return n?.success?n.data:He}function We({addonId:t}){let{t:n}=L(),i=q(t);return e(c,{children:[r(P,{variant:i.connected?`success`:`default`,className:Ve,children:i.connected?n(`system.remoteAccess.connected`,`Connected`):n(`system.remoteAccess.disconnected`,`Disconnected`)}),i.endpoint&&e(`a`,{href:i.endpoint.url,target:`_blank`,rel:`noopener noreferrer`,className:`flex min-w-0 items-center gap-1 break-all text-[11px] text-success hover:underline`,children:[r(E,{className:`h-3 w-3`}),i.endpoint.url]})]})}function Ge({addonId:t,busyId:n,onStart:i,onStop:a}){let{t:o}=L(),s=q(t),c=n===t;return s.connected?e(F,{size:`sm`,variant:`secondary`,disabled:c,onClick:()=>a(t),children:[c?r(T,{className:`h-3 w-3 animate-spin`}):r(D,{className:`h-3 w-3`}),o(`system.remoteAccess.stop`,`Stop`)]}):e(F,{size:`sm`,variant:`primary`,disabled:c,onClick:()=>i(t),children:[c?r(T,{className:`h-3 w-3 animate-spin`}):r(_,{className:`h-3 w-3`}),o(`system.remoteAccess.start`,`Start`)]})}o();var Ke=3e4,J=`turn-provider`;function qe(e){let t=[];for(let n of e)typeof n.urls==`string`?t.push(n.urls):t.push(...n.urls);return t}function Je(){let{t:n}=L(),i=N({capName:`turn-provider`},{refetchInterval:Ke}),a=M(void 0,{refetchInterval:Ke}),o=Oe(),s=o.data??[],c=t(()=>W(a.data??[]),[a.data]),l=t(()=>(i.data??[]).map(e=>({addonId:e.addonId,displayName:c.get(e.addonId)??e.addonId,isActive:e.isActive})),[i.data,c]),d=[{id:J,label:n(`system.turnServers.turnProviders`,`TURN providers`),install:{capability:J,label:n(`system.turnServers.addProvider`,`Add provider`)},entries:l.map(e=>({id:e.addonId,name:e.displayName,fallbackIcon:h,...U(e.isActive),render:()=>r(V,{addonId:e.addonId,displayName:e.displayName,capName:J,isActive:e.isActive,panels:[{id:`ice-servers`,title:n(`system.turnServers.discoveredIceServers`,`Discovered ICE servers`),icon:h,content:r(Ye,{addonId:e.addonId,enabled:e.isActive})}]})}))}];return r(H,{embedded:!0,icon:h,title:n(`system.turnServers.turnServers`,`TURN Servers`),subtitle:n(`system.turnServers.iceServersUsedForWebrtc`,`ICE servers used for WebRTC NAT traversal. Multiple providers can coexist — the WebRTC layer concatenates servers from all enabled providers per session.`),groups:d,isLoading:i.isLoading,emptyTitle:n(`system.turnServers.noTurnProvidersInstalled`,`No TURN providers installed`),emptyDescription:n(`system.turnServers.installATurnAddonE`,`Install a TURN addon (e.g. @camstack/addon-cloudflare) to enable WebRTC behind restrictive NATs.`),trailing:r(he,{headingId:`turn-combined-ice`,title:n(`system.turnServers.combinedIceServerListAll`,`Combined ICE server list — all enabled providers`),icon:h,actions:r(F,{size:`sm`,variant:`secondary`,onClick:()=>o.refetch(),disabled:o.isFetching,children:n(`common.refresh`,`Refresh`)}),children:r(`div`,{className:u,children:s.length===0?r(`div`,{className:`text-xs text-foreground-subtle`,children:n(`system.turnServers.noServersFromEnabledProviders`,`No servers from enabled providers.`)}):r(`div`,{className:`flex flex-col gap-3`,children:s.map((t,n)=>{let i=Array.isArray(t.urls)?t.urls:[t.urls];return e(`div`,{className:`rounded border border-border bg-surface`,children:[(t.username||t.credential)&&e(`div`,{className:`px-3 py-1.5 border-b border-border text-[10px] font-mono text-foreground-subtle flex items-center gap-3`,children:[t.username&&e(`span`,{children:[r(`span`,{className:`text-foreground-subtle`,children:`user:`}),` `,r(`span`,{className:`text-foreground`,children:t.username})]}),t.credential&&e(`span`,{children:[r(`span`,{className:`text-foreground-subtle`,children:`credential:`}),` `,r(`span`,{className:`text-foreground`,children:`••••••••`})]})]}),r(`ul`,{className:`divide-y divide-border`,children:i.map(e=>r(`li`,{className:`px-3 py-1.5 font-mono text-xs text-foreground break-all`,children:e},e))})]},n)})})})})})}function Ye({addonId:e,enabled:n}){let i=Oe({addonId:e},{enabled:n,retry:!1}),a=t(()=>qe(i.data??[]),[i.data]),o=n?i.isLoading?`Loading…`:a.length===0?`This provider returned no servers.`:null:`Disabled — enable the provider to fetch its servers.`;return r(`div`,{className:`rounded-lg border border-border bg-surface p-2 sm:p-3`,children:o===null?r(`div`,{className:`flex flex-wrap gap-1`,children:a.map(e=>r(`span`,{className:`inline-block break-all rounded bg-foreground-subtle/10 px-1.5 py-0.5 font-mono text-[10px] text-foreground`,children:e},e))}):r(`div`,{className:`text-xs text-foreground-subtle`,children:o})})}o();var Xe={lan:h,wifi:x,docker:A,vpn:O,loopback:y,other:y},Ze={lan:`LAN`,wifi:`Wi-Fi`,docker:`Docker`,vpn:`VPN`,loopback:`Loopback`,other:`Other`},Qe=[`lan`,`wifi`,`vpn`,`docker`,`other`,`loopback`];function $e(n){let{t:i}=L(),{interfaces:a,disabled:o,hideLoopback:s,ipv4Only:c,emptyMessage:u}=n,d=t(()=>a.filter(e=>!(s&&e.kind===`loopback`||c&&e.family!==`IPv4`)),[a,s,c]),f=t(()=>{let e=new Map;for(let t of d){let n=e.get(t.kind)??[];n.push(t),e.set(t.kind,n)}return Qe.filter(t=>e.has(t)).map(t=>({kind:t,items:e.get(t)}))},[d]),p=e=>n.mode===`single`?n.value===e:n.value.includes(e),m=e=>{if(o||e.kind===`loopback`)return;if(n.mode===`single`){n.onChange(n.value===e.address?null:e.address);return}let t=new Set(n.value);t.has(e.address)?t.delete(e.address):t.add(e.address),n.onChange([...t])};return d.length===0?r(`div`,{className:`text-xs text-foreground-subtle italic`,children:u??i(`shared.addressSelector.noAddressesAvailable`,`No addresses available.`)}):r(`div`,{className:`flex flex-col gap-3`,children:f.map(({kind:t,items:a})=>e(`div`,{className:`rounded-md border border-border overflow-hidden`,children:[e(`div`,{className:`flex items-center gap-2 px-3 py-1.5 bg-surface-hover/30 border-b border-border`,children:[r(Xe[t]??y,{className:`h-3.5 w-3.5 text-foreground-subtle`}),r(`span`,{className:`text-[11px] font-semibold uppercase tracking-wide text-foreground-subtle`,children:Ze[t]??t}),e(`span`,{className:`text-[10px] text-foreground-subtle`,children:[`· `,a.length]})]}),r(`ul`,{className:`divide-y divide-border`,children:a.map(t=>{let a=p(t.address),s=t.kind===`loopback`,c=!t.plausible&&!s;return e(`li`,{className:`flex items-center gap-3 px-3 py-2 ${s?`opacity-60 cursor-not-allowed`:o?`opacity-60`:c?`cursor-pointer hover:bg-surface-hover/30 bg-amber-500/[0.04]`:`cursor-pointer hover:bg-surface-hover/30`}`,onClick:()=>m(t),children:[r(`span`,{className:`flex items-center justify-center h-4 w-4 rounded ${n.mode===`single`?`rounded-full`:`rounded`} border ${a?`border-primary bg-primary text-primary-foreground`:`border-border bg-surface`}`,children:a&&r(l,{className:`h-3 w-3`})}),e(`div`,{className:`flex-1 min-w-0 ${c?`text-foreground-subtle`:``}`,children:[e(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[r(`span`,{className:`font-mono text-xs font-semibold ${c?`text-foreground-subtle`:`text-foreground`}`,children:t.name}),r(`span`,{className:`text-[10px] rounded px-1.5 py-0.5 bg-foreground-subtle/10 text-foreground-subtle font-mono`,children:t.family}),t.preferred&&r(`span`,{className:`text-[10px] rounded-full px-2 py-0.5 font-medium bg-primary/15 text-primary`,children:i(`shared.addressSelector.autoPreferred`,`Auto-preferred`)}),s&&r(`span`,{className:`text-[10px] rounded-full px-2 py-0.5 font-medium bg-foreground-subtle/15 text-foreground-subtle`,children:i(`shared.addressSelector.alwaysIncluded`,`Always included`)}),c&&e(`span`,{className:`inline-flex items-center gap-1 text-[10px] rounded-full px-2 py-0.5 font-medium bg-amber-500/15 text-amber-700 dark:text-amber-300`,title:t.plausibleReason||void 0,children:[r(k,{className:`h-2.5 w-2.5`}),i(`shared.addressSelector.unlikelyUsable`,`Unlikely usable`)]})]}),e(`div`,{className:`text-xs text-foreground-subtle mt-0.5 font-mono break-all`,children:[t.address,t.cidr&&t.cidr!==t.address?` (${t.cidr})`:``]})]})]},`${t.name}-${t.family}-${t.address}`)})})]},t))})}var Y=[{role:`appConnections`,get title(){return I.t(`helpers.addressTableModel.appConnectionsTitle`)},single:!1,get help(){return I.t(`helpers.addressTableModel.appConnectionsHelp`)}},{role:`notificationTaps`,get title(){return I.t(`helpers.addressTableModel.notificationTapsTitle`)},single:!0,get help(){return I.t(`helpers.addressTableModel.notificationTapsHelp`)}},{role:`publicEndpoint`,get title(){return I.t(`helpers.addressTableModel.publicEndpointTitle`)},single:!0,get help(){return I.t(`helpers.addressTableModel.publicEndpointHelp`)}},{role:`internal`,get title(){return I.t(`helpers.addressTableModel.internalTitle`)},single:!0,get help(){return I.t(`helpers.addressTableModel.internalHelp`)}}],et=`A role with nothing ticked is automatic. Add a custom address when the hub is reached at an address it cannot see itself (NAT, reverse proxy, VPN, Docker bridge).`;function X(e,t){return e.inUse.includes(t)}function tt(e,t){if(!e.eligible.includes(t))return{kind:`none`};if(e.kind===`app-link`)return X(e,t)?{kind:`none`}:{kind:`set`,input:{role:t,baseUrl:null,enabled:!0}};if(e.flags.includes(t)||t===`appConnections`&&X(e,t))return{kind:`set`,input:{role:t,baseUrl:e.baseUrl,enabled:!1}};let n={role:t,baseUrl:e.baseUrl,enabled:!0};return t===`publicEndpoint`&&e.baseUrl.startsWith(`http:`)?{kind:`confirm-http`,input:n,reason:ne}:{kind:`set`,input:n}}function nt(e){return Y.map(({role:t,title:n})=>{if(t===`appConnections`){let r=e.roles.appConnections;return{role:t,title:n,inUse:r.resolved.length===0?`nothing reachable`:r.resolved.join(`, `),automatic:r.source!==`flagged`}}let r=e.roles[t];return{role:t,title:n,inUse:r.resolved===null?`nothing reachable`:t===`notificationTaps`&&r.source===`auto`?`CamStack app link`:r.resolved,automatic:r.source!==`flagged`}})}o();var rt={"lan-ipv4":{labelKey:`system.addressesCard.kindIpv4`,className:`bg-emerald-500/15 text-emerald-700 dark:text-emerald-300`},"lan-ipv6":{labelKey:`system.addressesCard.kindIpv6`,className:`bg-violet-500/15 text-violet-700 dark:text-violet-300`},public:{labelKey:`system.addressesCard.kindPublic`,className:`bg-blue-500/15 text-blue-700 dark:text-blue-300`},"app-link":{labelKey:`system.addressesCard.kindAppLink`,className:`bg-amber-500/15 text-amber-700 dark:text-amber-300`},custom:{labelKey:`system.addressesCard.kindCustom`,className:`bg-sky-500/15 text-sky-700 dark:text-sky-300`},loopback:{labelKey:`system.addressesCard.kindLoopback`,className:`bg-foreground-subtle/15 text-foreground-subtle`}};function it({book:t,loading:n,saving:i,error:o,onSetRole:s,onAdd:c,onRemove:l}){let{t:u}=L(),[d,f]=a(``),[h,g]=a(``),[_,v]=a(null),[y,b]=a(null),x=()=>{let e=ie(d);if(!e.ok){v(e.reason);return}v(null),f(``),g(``),c(e.baseUrl,h.trim())},S=(e,t)=>{let n=tt(e,t.role);if(n.kind!==`none`){if(n.kind===`confirm-http`){b({input:n.input,reason:n.reason});return}b(null),s(n.input)}},C=[{key:`url`,header:u(`system.addressesCard.address`,`Address`),render:n=>e(`div`,{className:`min-w-0 py-0.5`,children:[r(`div`,{className:`font-mono text-[12px] break-all ${n.plausible?`text-foreground`:`text-foreground-subtle`}`,children:n.baseUrl}),e(`div`,{className:`mt-0.5 flex flex-wrap items-center gap-1.5 text-[11px] text-foreground-subtle`,children:[r(`span`,{children:n.label}),n.kind===`app-link`&&e(`span`,{className:`font-mono`,children:[`hub=`,` `,t?.appLinkHub??u(`system.addressesCard.noneNoTunnelOrTailscale`,`none (no tunnel or Tailscale)`)]}),n.custom&&n.detected&&r(`span`,{children:u(`system.addressesCard.alsoAddedAsACustom`,`also added as a custom address`)}),n.kind!==`custom`&&n.interfaceKind!==`lan`&&n.interfaceKind!==`public`&&n.interfaceKind!==`other`&&r(`span`,{className:`uppercase tracking-wide`,children:n.interfaceKind}),!n.plausible&&n.interfaceKind!==`loopback`&&e(`span`,{className:`inline-flex items-center gap-1 text-amber-700 dark:text-amber-300`,title:n.plausibleReason||void 0,children:[r(k,{className:`h-2.5 w-2.5`}),u(`system.addressesCard.unlikelyUsable`,`Unlikely usable`)]})]})]})},{key:`kind`,header:u(`system.addressesCard.kind`,`Kind`),nowrap:!0,render:e=>{let t=rt[e.kind]??rt.loopback;return r(`span`,{className:`text-[10px] rounded-full px-2 py-0.5 font-medium ${t.className}`,children:u(t.labelKey)})}},...Y.map(t=>({key:t.role,headerRender:()=>r(`span`,{title:t.help,children:t.title}),align:`center`,nowrap:!0,width:`w-24`,render:n=>{let a=n.eligible.includes(t.role),o=n.flags.includes(t.role),s=X(n,t.role);return e(`label`,{className:`inline-flex items-center justify-center gap-1 ${a?`cursor-pointer`:`cursor-not-allowed opacity-40`}`,title:a?s&&!o?u(`system.addressesCard.inUseAutomatically`,`{{title}}: in use automatically. {{help}}`,{title:t.title,help:t.help}):t.help:u(`system.addressesCard.thisAddressCannotBeUsed`,`This address cannot be used for this.`),children:[r(xe,{checked:a&&s,disabled:!a||i,onChange:()=>S(n,t),"aria-label":`${t.title}: ${n.baseUrl}`}),s&&!o&&a&&r(`span`,{className:`text-[9px] text-foreground-subtle`,children:u(`common.auto`)})]})}})),{key:`actions`,header:``,align:`right`,nowrap:!0,render:e=>e.custom?r(F,{size:`sm`,variant:`ghost`,disabled:i,onClick:()=>l(e.baseUrl),"aria-label":u(`system.addressesCard.remove`,`Remove {{baseUrl}}`,{baseUrl:e.baseUrl}),title:u(`system.addressesCard.removeThisCustomAddressIts`,`Remove this custom address (its roles turn automatic)`),children:r(p,{className:`h-3 w-3`})}):null}],w=t===void 0?[]:nt(t);return e(ge,{children:[e(`div`,{className:`px-4 py-3 border-b border-border flex flex-col gap-2`,children:[e(`div`,{children:[r(`div`,{className:`text-sm font-semibold`,children:u(`system.addressesCard.addresses`,`Addresses`)}),r(`div`,{className:`text-xs text-foreground-subtle max-w-3xl`,children:u(`system.addressesCard.everyAddressThisHubIs`,`Every address this hub is reached at, detected or added by you. Tick what each one is used for.`)}),e(`details`,{className:`mt-1.5 text-xs max-w-3xl`,"data-testid":`address-roles-help`,children:[r(`summary`,{className:`cursor-pointer select-none text-foreground-subtle hover:text-foreground`,children:u(`system.addressesCard.whatAreRoles`,`What are roles?`)}),r(`dl`,{className:`mt-1.5 grid grid-cols-[auto_1fr] gap-x-3 gap-y-1`,children:Y.map(t=>e(`div`,{className:`contents`,children:[r(`dt`,{className:`font-medium`,children:t.title}),r(`dd`,{className:`text-foreground-subtle`,children:t.help})]},t.role))}),r(`p`,{className:`mt-1.5 text-foreground-subtle`,children:et})]})]}),w.length>0&&r(`div`,{className:`grid grid-cols-[auto_1fr_auto] gap-x-3 gap-y-1 items-baseline text-xs`,"data-testid":`address-roles-summary`,children:w.map(t=>e(`div`,{className:`contents`,children:[r(`span`,{className:`text-foreground-subtle`,children:t.title}),e(`span`,{className:`font-mono break-all`,"data-testid":`address-role-${t.role}`,children:[t.inUse,r(`span`,{className:`ml-1.5 font-sans text-foreground-subtle`,children:t.automatic?u(`system.addressesCard.automatic`,`(automatic)`):u(`system.addressesCard.setByYou`,`(set by you)`)})]}),t.automatic?r(`span`,{}):r(F,{size:`sm`,variant:`secondary`,disabled:i,onClick:()=>s({role:t.role,baseUrl:null,enabled:!1}),children:u(`system.addressesCard.useAutomatic`,`Use automatic`)})]},t.role))}),y!==null&&e(`div`,{className:`rounded-md border border-amber-500/40 bg-amber-500/10 px-3 py-2 text-xs flex flex-wrap items-center gap-2`,children:[r(k,{className:`h-3.5 w-3.5 text-amber-600`}),r(`span`,{className:`flex-1 min-w-[220px]`,children:y.reason}),r(F,{size:`sm`,variant:`secondary`,onClick:()=>{s({...y.input,acceptInsecureHttp:!0}),b(null)},children:u(`system.addressesCard.useHttpAnyway`,`Use http anyway`)}),r(F,{size:`sm`,variant:`ghost`,onClick:()=>b(null),children:u(`common.cancel`,`Cancel`)})]}),o!==null&&r(`div`,{className:`text-[11px] text-red-600 dark:text-red-400`,role:`alert`,children:o})]}),r(le,{columns:C,rows:t?.rows??[],rowKey:e=>`${e.kind}-${e.baseUrl}`,minWidthPx:760,bordered:!1,emptyMessage:n?u(`common.loading`,`Loading…`):u(`system.addressesCard.noAddressesAvailable`,`No addresses available.`),rowClassName:e=>e.plausible?void 0:`opacity-80`}),e(`div`,{className:`px-4 py-3 border-t border-border flex flex-wrap items-start gap-2`,children:[e(`div`,{className:`flex-1 min-w-[220px]`,children:[r(ve,{value:d,onChange:e=>{f(e.target.value),v(null)},placeholder:`https://cams.example.com or https://192.0.2.20:4443`,"aria-label":u(`system.addressesCard.customAddress`,`Custom address`),disabled:i}),_!==null&&r(`div`,{className:`mt-1 text-[11px] text-red-600 dark:text-red-400`,children:_})]}),r(`div`,{className:`w-48`,children:r(ve,{value:h,onChange:e=>g(e.target.value),placeholder:u(`system.addressesCard.labelOptional`,`Label (optional)`),"aria-label":u(`system.addressesCard.customAddressLabel`,`Custom address label`),maxLength:80,disabled:i})}),e(F,{size:`sm`,variant:`secondary`,disabled:i||d.trim()===``,onClick:x,children:[r(m,{className:`h-3 w-3`}),u(`system.addressesCard.addCustomAddress`,`Add custom address`)]})]})]})}o();function at(){let{t:n}=L(),o=s(),c=()=>{o.invalidateQueries({queryKey:[[`localNetwork`]]})},l=Ee(void 0,{refetchInterval:3e4}),p=we(void 0),m=je({onSuccess:c}),h=Ae({onSuccess:e=>{w(e.addresses),c()}}),g=t(()=>l.data?.interfaces??[],[l.data]),_=ce({scheme:typeof window<`u`&&window.location.protocol===`https:`?`https`:`http`},{refetchInterval:3e4}),v=De({onSuccess:c}),y=_e({onSuccess:c}),b=ke({onSuccess:c}),x=v.error?.message??y.error?.message??b.error?.message??null,S=v.isPending||y.isPending||b.isPending,[C,w]=a([]),[T,E]=a(!1);i(()=>{!T&&p.data&&(w(p.data.addresses),E(!0))},[p.data,T]);let D=p.data?.addresses??[],O=t(()=>{if(C.length!==D.length)return!0;let e=[...C].toSorted(),t=[...D].toSorted();return e.some((e,n)=>e!==t[n])},[C,D]);return e(B,{embedded:!0,children:[e(`div`,{className:`flex items-center justify-between gap-3 flex-wrap`,children:[r(`p`,{className:`text-xs text-foreground-subtle max-w-2xl`,children:n(`system.networkAddresses.pinWhichHostInterfacesExist`,`Pin which host interfaces exist, then tick what each address is used for. Add a custom address when this hub is reached at one it cannot detect.`)}),r(`div`,{className:`flex items-center gap-2 shrink-0`,children:e(F,{size:`sm`,variant:`secondary`,onClick:()=>{l.refetch(),p.refetch(),_.refetch()},disabled:l.isLoading,children:[r(d,{className:`h-3 w-3 ${l.isLoading?`animate-spin`:``}`}),n(`common.refresh`,`Refresh`)]})})]}),r(he,{headingId:`network-allowed-addresses`,title:n(`system.networkAddresses.allowedAddresses`,`Allowed addresses`),actions:e(`div`,{className:`flex flex-wrap items-center gap-1`,children:[e(F,{size:`sm`,variant:`secondary`,onClick:()=>h.mutate(void 0),disabled:h.isPending||m.isPending,title:n(`system.networkAddresses.reRunTheAutoDetection`,`Re-run the auto-detection heuristic + overwrite the current allowlist with the best matches.`),children:[r(ee,{className:`h-3 w-3`}),h.isPending?n(`system.networkAddresses.detecting`,`Detecting…`):n(`system.networkAddresses.bestMatch`,`Best match`)]}),e(F,{size:`sm`,variant:`secondary`,onClick:()=>{w([])},disabled:C.length===0||m.isPending,children:[r(f,{className:`h-3 w-3`}),n(`system.networkAddresses.clear`,`Clear`)]}),O&&r(F,{size:`sm`,variant:`secondary`,onClick:()=>{w(D)},disabled:m.isPending,children:n(`system.networkAddresses.discard`,`Discard`)}),e(F,{size:`sm`,variant:`primary`,onClick:()=>{m.mutate({addresses:[...C]})},disabled:!O||m.isPending,children:[r(te,{className:`h-3 w-3`}),m.isPending?n(`system.networkAddresses.saving`,`Saving…`):n(`common.save`,`Save`)]})]}),children:e(`div`,{className:u,children:[r(`p`,{className:`mb-3 text-xs text-foreground-subtle`,children:C.length===0?n(`system.networkAddresses.autoEveryNonLoopbackNon`,`Auto — every non-loopback / non-link-local interface participates.`):n(`system.networkAddresses.pinned`,`{{value1}} pinned`,{value1:String(C.length)})}),r($e,{mode:`multiple`,interfaces:g,value:C,onChange:w,disabled:m.isPending,emptyMessage:l.isLoading?n(`system.networkAddresses.loadingInterfaces`,`Loading interfaces…`):n(`system.networkAddresses.noInterfacesDetected`,`No interfaces detected.`)})]})}),r(it,{book:_.data,loading:_.isLoading,saving:S,error:x,onSetRole:e=>v.mutate({...e}),onAdd:(e,t)=>y.mutate({baseUrl:e,label:t}),onRemove:e=>b.mutate({baseUrl:e})})]})}o();var ot={mesh:`bg-violet-500/15 text-violet-700 dark:text-violet-300`,public:`bg-blue-500/15 text-blue-700 dark:text-blue-300`},Z=5e3,Q=`mesh-network`,st=3e4,ct={joined:!1,meshIp:``,magicDnsHostname:``,peerCount:0,endpoints:[],tenantName:``,magicDnsSuffix:``,userLogin:null,controlPlaneUrl:``,keyExpiry:null};function lt(){let{t:e}=L(),n=N({capName:`mesh-network`},{refetchInterval:Z}),i=M(void 0,{refetchInterval:Z}),a=t(()=>W(i.data??[]),[i.data]),o=t(()=>(n.data??[]).map(e=>({addonId:e.addonId,displayName:a.get(e.addonId)??e.addonId,isActive:e.isActive})),[n.data,a]),s=[{id:Q,label:e(`system.meshNetworks.meshNetworks`,`Mesh networks`),install:{capability:Q,label:e(`system.meshNetworks.addMesh`,`Add mesh`)},entries:o.map(t=>({id:t.addonId,name:t.displayName,fallbackIcon:h,...U(t.isActive),render:()=>r(V,{addonId:t.addonId,displayName:t.displayName,capName:Q,isActive:t.isActive,badges:r(ut,{addonId:t.addonId}),primaryAction:r(dt,{addonId:t.addonId}),panels:[{id:`status`,title:e(`system.meshNetworks.status`,`Status`),icon:A,content:r(ft,{addonId:t.addonId})}]})}))}];return r(H,{embedded:!0,icon:A,title:e(`system.meshNetworks.meshNetworks2`,`Mesh Networks`),subtitle:e(`system.meshNetworks.privateVpnMeshesThatConnect`,`Private VPN meshes that connect CamStack to your other devices (Tailscale, Headscale, …). Each provider can also expose this hub publicly via its ingress (Tailscale Funnel).`),groups:s,isLoading:n.isLoading,emptyTitle:e(`system.meshNetworks.noMeshNetworkProvidersInstalled`,`No mesh-network providers installed`),emptyDescription:e(`system.meshNetworks.installAMeshAddonE`,`Install a mesh addon (e.g. @camstack/addon-tailscale) to join this hub into a private VPN mesh.`)})}function $(e){let{data:t,isLoading:n}=Te({addonId:e},{refetchInterval:Z,retry:!1}),r=t?re.safeParse(t):null;return{status:r?.success?r.data:ct,isLoading:n}}function ut({addonId:t}){let{t:n}=L(),{status:i}=$(t);return e(c,{children:[r(P,{variant:i.joined?`success`:`default`,className:Ve,children:i.joined?n(`system.meshNetworks.joined`,`Joined`):n(`system.meshNetworks.notJoined`,`Not joined`)}),i.joined&&r(P,{className:`text-[10px]`,children:n(`common.peers`,{count:i.peerCount})})]})}function dt({addonId:t}){let{t:i}=L(),o=s(),[l,u]=a(!1),[d,f]=a(null),p=S(),{status:m}=$(t),h=n(()=>{o.invalidateQueries({queryKey:[[`meshNetwork`]]})},[o]),g=Ce(),_=Se({onSuccess:h}),v=Pe({onSuccess:h}),y=n(async()=>{u(!0);let e={cancelled:!1};f(e);try{let n=await g.mutateAsync({addonId:t});if(e.cancelled)return;n.loginUrl&&window.open(n.loginUrl,`_blank`,`noopener,noreferrer`);let r=Date.now();for(;!e.cancelled&&(await yt(2e3),!e.cancelled);){let e=await p.trpcClient.meshNetwork.getStatus.query({addonId:t}).catch(()=>null),n=e?re.safeParse(e):null;if(n?.success&&n.data.joined){h();break}if(Date.now()-r>6e5)break}}finally{u(!1),f(null)}},[t,h,g,p]),b=n(()=>{d&&(d.cancelled=!0),u(!1),f(null)},[d]);return r(c,{children:m.joined?e(c,{children:[e(F,{size:`sm`,variant:`secondary`,disabled:_.isPending,onClick:()=>_.mutate({addonId:t}),children:[_.isPending?r(T,{className:`h-3 w-3 animate-spin`}):r(oe,{className:`h-3 w-3`}),i(`system.meshNetworks.disconnect`,`Disconnect`)]}),e(F,{size:`sm`,variant:`ghost`,disabled:v.isPending,onClick:()=>v.mutate({addonId:t}),children:[v.isPending?r(T,{className:`h-3 w-3 animate-spin`}):r(C,{className:`h-3 w-3`}),i(`system.meshNetworks.logOut`,`Log out`)]})]}):l?e(F,{size:`sm`,variant:`ghost`,onClick:b,children:[r(w,{className:`h-3 w-3 mr-1`}),` `,i(`common.cancel`)]}):e(c,{children:[e(F,{size:`sm`,variant:`primary`,onClick:()=>void y(),children:[r(se,{className:`h-3 w-3`}),i(`system.meshNetworks.connect`,`Connect`)]}),e(F,{size:`sm`,variant:`ghost`,disabled:v.isPending,onClick:()=>v.mutate({addonId:t}),children:[v.isPending?r(T,{className:`h-3 w-3 animate-spin`}):r(C,{className:`h-3 w-3`}),i(`system.meshNetworks.logOut`,`Log out`)]})]})})}function ft({addonId:t}){let{t:n}=L(),{status:i}=$(t),a=Me({addonId:t},{refetchInterval:st,retry:!1});return e(`div`,{className:`rounded-lg border border-border bg-surface`,children:[e(`div`,{className:`space-y-4 p-2 sm:p-4`,children:[i.error&&r(me,{message:i.error}),r(pt,{status:i}),i.endpoints.length>0&&e(`div`,{className:`space-y-1.5`,children:[r(`div`,{className:`text-[11px] font-semibold text-foreground-subtle uppercase tracking-wide`,children:n(`system.meshNetworks.endpoints`,`Endpoints`)}),i.endpoints.map(t=>e(`div`,{className:`flex items-center gap-2 text-xs flex-wrap`,children:[e(`span`,{className:`text-[10px] rounded-full px-2 py-0.5 font-medium ${ot[t.scope]??`bg-foreground-subtle/15 text-foreground-subtle`}`,children:[t.scope===`public`?r(j,{className:`inline h-2.5 w-2.5 mr-0.5`}):null,t.label]}),e(`a`,{href:t.url,target:`_blank`,rel:`noopener noreferrer`,className:`text-emerald-700 dark:text-emerald-300 hover:underline break-all flex items-center gap-1`,children:[r(E,{className:`h-3 w-3 shrink-0`}),t.url]})]},t.id))]})]}),r(`div`,{className:`border-t border-border`,children:r(ht,{peers:a.data?.peers??[],loading:a.isLoading})})]})}function pt({status:t}){let{t:n}=L();return r(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 gap-x-6 gap-y-1.5`,children:[{label:n(`system.meshNetworks.tenant`,`Tenant`),value:t.tenantName||`—`},{label:n(`system.meshNetworks.user`,`User`),value:t.userLogin??`—`},{label:n(`system.meshNetworks.controlPlane`,`Control plane`),value:t.controlPlaneUrl||`—`},{label:n(`system.meshNetworks.meshIp`,`Mesh IP`),value:t.meshIp||`—`,mono:!0},{label:n(`system.meshNetworks.magicdns`,`MagicDNS`),value:t.magicDnsHostname||`—`,mono:!0},{label:n(`system.meshNetworks.dnsSuffix`,`DNS suffix`),value:t.magicDnsSuffix||`—`,mono:!0},{label:n(`system.meshNetworks.peers`,`Peers`),value:String(t.peerCount)},{label:n(`system.meshNetworks.keyExpiry`,`Key expiry`),value:t.keyExpiry?mt(t.keyExpiry):`—`}].map(t=>e(`div`,{className:`flex items-baseline justify-between gap-3 text-xs`,children:[r(`span`,{className:`text-foreground-subtle shrink-0`,children:t.label}),r(`span`,{className:`text-foreground truncate ${t.mono?`font-mono`:``}`,children:t.value})]},t.label))})}function mt(e){let t=e-Date.now();if(t<0)return I.t(`system.meshNetworks.expiredAgo`,{when:vt(e)});let n=Math.floor(t/864e5);if(n>60)return new Date(e).toLocaleDateString();if(n>1)return I.t(`system.meshNetworks.expiryDays`,{count:n});let r=Math.floor(t/36e5);return r>1?I.t(`system.meshNetworks.expiryHours`,{count:r}):I.t(`system.meshNetworks.expiryMin`,{count:Math.max(1,Math.floor(t/6e4))})}function ht({peers:i,loading:a}){let{t:o}=L(),s=t(()=>i.map(e=>({...e,_id:e.id})),[i]),c=n(e=>{e&&navigator.clipboard?.writeText(e)},[]),l=t(()=>[{key:`hostname`,header:o(`system.meshNetworks.hostname`,`Hostname`),render:t=>e(`div`,{className:`flex flex-col`,children:[e(`div`,{className:`flex items-center gap-1.5`,children:[r(`span`,{className:`font-medium text-foreground`,children:t.hostname||o(`system.meshNetworks.unknown`,`(unknown)`)}),t.isSelf&&r(P,{variant:`info`,children:o(`common.self`)}),t.exitNodeOption&&r(P,{variant:`warning`,children:`exit-node`})]}),t.userLogin&&r(`div`,{className:`text-[10px] text-foreground-subtle truncate`,children:t.userLogin})]})},{key:`magicDns`,header:o(`system.meshNetworks.magicdns`,`MagicDNS`),render:t=>t.magicDns?e(`div`,{className:`flex items-center gap-1`,children:[r(`span`,{className:`font-mono text-xs truncate`,children:t.magicDns}),r(`button`,{onClick:()=>c(t.magicDns),className:`p-0.5 hover:bg-foreground-subtle/10 rounded`,"aria-label":o(`system.meshNetworks.copyMagicdns`,`Copy MagicDNS`),children:r(b,{className:`h-3 w-3 text-foreground-subtle`})})]}):r(`span`,{className:`text-foreground-subtle`,children:`—`})},{key:`addresses`,header:`IP`,render:t=>{let n=t.addresses[0]??``;return n?e(`div`,{className:`flex items-center gap-1`,children:[r(`span`,{className:`font-mono text-xs`,children:n}),r(`button`,{onClick:()=>c(n),className:`p-0.5 hover:bg-foreground-subtle/10 rounded`,"aria-label":o(`system.meshNetworks.copyIp`,`Copy IP`),children:r(b,{className:`h-3 w-3 text-foreground-subtle`})})]}):r(`span`,{className:`text-foreground-subtle`,children:`—`})}},{key:`connection`,header:o(`system.meshNetworks.connection`,`Connection`),render:t=>e(`div`,{className:`flex items-center gap-1.5`,children:[r(P,{variant:gt(t.connection),children:t.connection}),t.relay&&r(`span`,{className:`text-[10px] text-foreground-subtle font-mono`,children:t.relay})]})},{key:`routes`,header:o(`system.meshNetworks.routes`,`Routes`),render:e=>e.advertisedRoutes.length>0?r(`span`,{className:`text-[10px] font-mono text-foreground-subtle truncate`,children:e.advertisedRoutes.join(`, `)}):r(`span`,{className:`text-foreground-subtle`,children:`—`})},{key:`tx`,header:o(`system.meshNetworks.txRx`,`TX / RX`),render:t=>e(`span`,{className:`text-[10px] text-foreground-subtle font-mono`,children:[`↑ `,_t(t.txBytes),` · ↓ `,_t(t.rxBytes)]})},{key:`lastSeen`,header:o(`system.meshNetworks.lastSeen`,`Last seen`),render:e=>r(`span`,{className:`text-[10px] text-foreground-subtle`,children:e.lastSeenMs>0?vt(e.lastSeenMs):`—`})}],[c,o]);return a&&i.length===0?e(`div`,{className:`p-4 text-xs text-foreground-subtle`,children:[r(T,{className:`h-3 w-3 animate-spin inline mr-1`}),` `,o(`systemPage.meshNetworks.loadingPeers`)]}):i.length===0?r(`div`,{className:`p-4 text-xs text-foreground-subtle`,children:o(`system.meshNetworks.noPeersVisibleYourTailnet`,`No peers visible — your tailnet may be empty or the host is not joined.`)}):r(`div`,{className:`p-4`,children:r(le,{columns:l,rows:s,rowKey:e=>e._id,minWidthPx:820})})}function gt(e){return e===`direct`?`success`:e===`relay`?`warning`:`info`}function _t(e){return e<1024?`${e}B`:e<1024*1024?`${(e/1024).toFixed(1)}KB`:e<1024*1024*1024?`${(e/1024/1024).toFixed(1)}MB`:`${(e/1024/1024/1024).toFixed(2)}GB`}function vt(e){let t=Date.now()-e;return t<6e4?I.t(`system.meshNetworks.justNow`):t<36e5?I.t(`system.meshNetworks.agoMin`,{count:Math.round(t/6e4)}):t<864e5?I.t(`system.meshNetworks.agoHour`,{count:Math.round(t/36e5)}):I.t(`system.meshNetworks.agoDay`,{count:Math.round(t/864e5)})}function yt(e){return new Promise(t=>setTimeout(t,e))}var bt=`/system/identity?tab=certificates`;function xt(){let{t}=L();return r(B,{embedded:!0,children:e(`div`,{className:g,children:[r(Be,{nodeId:`hub`,addonIds:[`local-network`],level:`global`,title:t(`system.localAccess.lanHttp`,`LAN HTTP`),description:t(`system.localAccess.nativeAppsOnThisWi`,`Native apps on this Wi-Fi use http:// and skip the private certificate. The tunnel and this admin UI stay on HTTPS.`)}),e(`p`,{className:`text-xs text-foreground-subtle`,"data-testid":`https-certificate-hint`,children:[t(`system.localAccess.certificateMoved`,`The HTTPS certificate and the local CA are managed under`),` `,r(Re,{className:`underline`,to:bt,children:t(`system.localAccess.certificateMovedLink`,`Identity → Certificates`)}),`.`]})]})})}o();function St({value:n,onChange:i}){let{t:a}=L(),{data:o}=fe({isCamera:!0,projection:`slim`}),s=t(()=>o===void 0?[{value:``,label:a(`system.networkDiagnostics.loadingCameras`,`Loading cameras…`)}]:o.length===0?[{value:``,label:a(`system.networkDiagnostics.noCameras`,`No cameras`)}]:[{value:``,label:a(`system.networkDiagnostics.pickACamera`,`Pick a camera`)},...o.toSorted((e,t)=>e.name.localeCompare(t.name)).map(e=>({value:String(e.id),label:`${e.name} (#${String(e.id)})`}))],[o,a]);return e(`label`,{className:`flex min-w-0 flex-col gap-1`,children:[r(`span`,{className:`text-[11px] text-foreground-subtle`,children:a(`system.networkDiagnostics.camera`,`Camera`)}),r(pe,{value:n===null?``:String(n),disabled:o===void 0||o.length===0,onChange:e=>i(e.target.value===``?null:Number(e.target.value)),options:s})]})}function Ct(){let t=S(),[i,o]=a(null);return r(B,{embedded:!0,children:e(`div`,{className:g,"data-testid":`network-diagnostics`,children:[r(de,{loadServers:n(async()=>t.trpcClient.turnProvider.getTurnServers.query(),[t])}),r(be,{trpc:t.trpcClient,serverUrl:v(),deviceId:i,cameraField:r(St,{value:i,onChange:o})})]})})}var wt=[`certificate`,`certificates`,`https`];function Tt(){let{t:e}=L(),[t]=Ie();if(wt.includes(t.get(`tab`)??``))return r(Le,{to:bt,replace:!0});let n=Fe(`/system/network`,{t:e,isAdmin:!0})??{icon:j,title:e(`system.network`,`Network`)};return r(ze,{icon:n.icon,title:n.title,defaultSection:`addresses`,sectionsLabel:`${n.title} sections`,sections:[{id:`local-access`,label:e(`systemPage.network.localAccess`,`Local access`),content:r(xt,{})},{id:`addresses`,label:e(`systemPage.network.networkAddresses`,`Network Addresses`),content:r(at,{})},{id:R.remoteAccess.tab,label:e(`systemPage.network.remoteAccess`,`Remote Access`),content:r(Ue,{}),ownedParams:z},{id:R.mesh.tab,label:e(`systemPage.network.meshNetworks`,`Mesh Networks`),content:r(lt,{}),ownedParams:z},{id:R.turn.tab,label:e(`systemPage.network.turnServers`,`TURN Servers`),content:r(Je,{}),ownedParams:z},{id:`diagnostics`,label:e(`systemPage.network.diagnostics`,`Diagnostics`),content:r(Ct,{})}]})}export{Tt as NetworkPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{C as e,J as t,K as n,R as r,S as i,V as a,W as o,Y as s,et as c,i as l,j as u,o as d,p as f,t as p}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEyXHAdg.js";import{dt as m}from"./player-overlays-Cw_gjG75.js";import{Ro as h}from"./client-r4i0EpF6.js";import{Hi as g,Mi as _,ji as v,la as y,no as ee,xt as te}from"./src-nnHXOip7.js";import{t as ne}from"./useTranslation-BJr-n0es.js";import{I as re,L as ie,R as b,rr as x}from"./index-Ohn-2iW_.js";c();var S=u(function({addonId:e,schema:s,serverValues:c,onImmediateSave:l,onStateChange:u,onAction:d,disabled:f},p){let m=x({schema:s,serverValues:c,onImmediateSave:r(t=>l(e,t),[e,l]),onDeferredSave:r(()=>{},[])});o(p,()=>({flush:()=>{let e={};for(let t of m.pendingKeys)e[t]=m.values[t];return m.handleDiscard(m.pendingKeys),e},discard:()=>m.resetAll()}),[m]);let h=m.pendingKeys,g=h.join(`|`),_=n(()=>h.map(e=>`${e}=${JSON.stringify(m.values[e])}`).join(`,`),[h,m.values]),v=t(u);a(()=>{v.current=u},[u]),a(()=>{let t={};for(let e of h)t[e]=m.values[e];v.current({addonId:e,pendingKeys:h,pendingValues:t})},[e,g,_]);let y=n(()=>{if(d)return(t,n,r)=>d(e,t,n,r)},[e,d]);return i(b,{schema:s,values:m.values,onChange:m.handleChange,disabled:f,onAction:y})});function C(e){return`perNode`in e&&e.perNode===!0}function w(e,t){if(e.type===`group`){let n=T(e.fields,t);return n.length>0?{...e,fields:n}:null}if(e.type===`sub-tabs`){let n=e.tabs.map(e=>({...e,fields:T(e.fields,t)})).filter(e=>e.fields.length>0);return n.length>0?{...e,tabs:n}:null}return C(e)===(t===`perNode`)?e:null}function T(e,t){let n=[];for(let r of e){let e=w(r,t);e!==null&&n.push(e)}return n}function ae(e,t){let n=[];for(let r of e.sections){let e=T(r.fields,t);e.length!==0&&n.push({...r,fields:e})}return{...e,sections:n}}function oe(e,t){let n=e??`general`;return t?.[n]??n}function E(e){return typeof e!=`object`||!e||!(`key`in e)?null:typeof e.key==`string`?e.key:null}function se(e,t){let n=t.fieldKeys===void 0?null:new Set(t.fieldKeys),r=[];for(let i of e){let e=n===null?i.fields:i.fields.filter(e=>{let t=E(e);return t!==null&&n.has(t)});e.length!==0&&r.push({...i,fields:e,...t.tabAliases===void 0?{}:{tab:oe(i.tab,t.tabAliases)},...t.hideSectionChrome===!0?{title:``,description:void 0}:{}})}return r}c();function D(e,t){if(e.type===`separator`||e.type===`info`||e.type===`button`)return e;if(e.type===`group`){let n=e.fields.map(e=>D(e,t));return{...e,fields:n}}let n=e;t[e.key]=n.value;let{value:r,...i}=n;return i}function O(e,t){return{...e,fields:e.fields.map(e=>D(e,t))}}function ce(e){let t={};return{schema:{...e.tabs?{tabs:e.tabs}:{},sections:e.sections.map(e=>O(e,t))},values:t}}function k({nodeId:a,addonIds:o,level:c,deviceId:u,capability:b,sectionIds:x,omitSectionIds:S,fieldKeys:C,hideSectionChrome:w,tabAliases:T,tabLabelOverrides:E,sectionTab:D,fieldScope:O,surface:k,emptyMessage:ue,extraTabs:A,schemaTabExtras:j,title:M,description:N,selfTabbed:de,activeTab:P,onActiveTabChange:fe}){let{t:F}=ne(),I=d(),L=m().trpcClient,R=_(),z=v(),pe=ee(),me=y(),B=de===!0||!!(A&&A.length>0),[he,ge]=s(null);if(c===`device`&&!u)throw Error(`NodeAddonsSettingsPanel: deviceId is required when level === "device"`);if(k!==void 0){if(c!==`global`||u!==void 0)throw Error(`NodeAddonsSettingsPanel: integration-level settings are addon-wide — they cannot be mounted at device level or with a deviceId. A second page, never a second scope.`);if(a!==null)throw Error(`NodeAddonsSettingsPanel: an integration has no node behind it — pass nodeId={null}. Received ${JSON.stringify(a)}.`);if(O!==void 0)throw Error("NodeAddonsSettingsPanel: integration-level settings arrive already cluster-scoped from core — remove `fieldScope` rather than restating it.")}let V=a??`hub`,H=l({queries:o.map(e=>({queryKey:[[`addonSettings`,k===void 0?c===`global`?`getGlobalSettings`:`getDeviceSettings`:`getIntegrationSettings`],{addonId:e,nodeId:V,deviceId:u??null,cap:b??null,scope:O??null}],queryFn:async()=>{let t=e=>e!==null&&O!==void 0?ae(e,O):e;return k===void 0?c===`global`?{addonId:e,result:t(await L.addonSettings.getGlobalSettings.query({addonId:e,nodeId:V,...b?{cap:b}:{}}))}:{addonId:e,result:t(await L.addonSettings.getDeviceSettings.query({addonId:e,deviceId:u,nodeId:V}))}:{addonId:e,result:await L.addonSettings.getIntegrationSettings.query({addonId:e,nodeId:V})}},placeholderData:f}))}),_e=H.some(e=>e.isLoading),ve=H.map(e=>{if(!e.data)return`-`;if(e.data.result===null)return`${e.data.addonId}:n`;let t=[];for(let n of e.data.result.sections){t.push(`s:${n.id}:${n.tab??`general`}`);for(let e of n.fields){if(!(`key`in e))continue;let n=`options`in e&&Array.isArray(e.options)?e.options.map(e=>e.value).join(`,`):``,r=e.value,i=r===void 0?``:typeof r==`string`?r:JSON.stringify(r);t.push(`f:${e.key}:${n}:${i}`)}}return`${e.data.addonId}:${t.join(`|`)}`}).join(`||`),U=n(()=>{let e=new Set;for(let t of H){let n=t.data?.result?.sections;if(n)for(let t of n)e.add(oe(t.tab,T))}return[...e]},[T,ve+`::`+H.map(e=>(e.data?.result?.sections??[]).map(e=>e.tab??`general`).join(`,`)).join(`::`)]),W=n(()=>new Map((A??[]).map(e=>[e.id,e])),[A]),G=n(()=>{if(!B)return[];let e=[...new Set([...U,...(A??[]).map(e=>e.id),...(j??[]).map(e=>e.tabId)])],t=e=>{let t=W.get(e);if(t?.order!==void 0)return t.order;let n=h[e];return n?n.order:50};return e.toSorted((e,n)=>{let r=t(e),i=t(n);return r===i?e.localeCompare(n):r-i})},[B,U,A,W,j]),ye=n(()=>{let e=new Map,t=e=>h[e]?.label??e.charAt(0).toUpperCase()+e.slice(1);for(let n of U)e.set(n,t(n));for(let n of j??[])e.has(n.tabId)||e.set(n.tabId,t(n.tabId));for(let t of A??[])e.set(t.id,t.label);for(let[t,n]of Object.entries(E??{}))e.set(t,n);return e},[U,A,j,E]),K=P===void 0?he:P,q=B?K&&G.includes(K)?K:G[0]??null:null,be=e=>{ge(e),fe?.(e)},xe=q!==null&&W.has(q),J=B?q&&!xe?q:void 0:D,{data:Se}=g(void 0),Ce=n(()=>{let e=new Map;for(let t of Se??[]){let n=t.manifest?.id;if(!n)continue;let r=t.manifest?.name??t.manifest?.packageDisplayName??n;e.set(n,r)}return e},[Se]),we=t(new Map),Y=n(()=>{let e=x?new Set(x):null,t=S?new Set(S):null,n=n=>!(e!==null&&!e.has(n)||t!==null&&t.has(n)),r=[];for(let e of H){if(!e.data)continue;let t=e.data.result??we.current.get(e.data.addonId)??null;if(e.data.result!==null&&we.current.set(e.data.addonId,e.data.result),t===null)continue;let{schema:i,values:a}=ce(t),o={...C===void 0?{}:{fieldKeys:C},...w===void 0?{}:{hideSectionChrome:w},...T===void 0?{}:{tabAliases:T}},s=se(i.sections.filter(e=>n(e.id)),o);if(s.length===0)continue;let c={...t,sections:se(t.sections.filter(e=>n(e.id)),o)},l={...i,sections:s};r.push({addonId:e.data.addonId,schemaWithValues:c,schema:l,serverValues:a})}return r},[ve,x,S,C,w,T]),[X,Te]=s(new Map),Ee=r(e=>{Te(t=>{let n=new Map(t);return n.set(e.addonId,e),n})},[]),Z=t(new Map),De=r(e=>t=>{t?Z.current.set(e,t):Z.current.delete(e)},[]),Oe=r(async(e,t)=>{c===`global`?await R.mutateAsync({addonId:e,nodeId:V,patch:t}):await z.mutateAsync({addonId:e,deviceId:u,nodeId:V,patch:t}),I.invalidateQueries({queryKey:[[`addonSettings`]]})},[R,z,V,c,u,I]),ke=r(async(e,t,n,r)=>{let i=V;try{switch(t){case`reprobe-hwaccel`:await pe.mutateAsync({nodeId:i}),I.invalidateQueries({queryKey:[[`addonSettings`]]});return;case`reprobe-audio-engine`:await me.mutateAsync({nodeId:i}),I.invalidateQueries({queryKey:[[`addonSettings`]]});return;default:{let n=await L.addons.custom.mutate({addonId:e,action:t,input:r});return I.invalidateQueries({queryKey:[[`addonSettings`]]}),n}}}catch(n){throw console.error(`[NodeAddonsSettingsPanel] action failed`,{addonId:e,action:t,err:n}),n}},[pe,me,V,I,L]),Ae=r((e,t)=>{Oe(e,t)},[Oe]),Q=p({mutationFn:async()=>{let e=[];for(let t of Y){let n=X.get(t.addonId);!n||n.pendingKeys.length===0||e.push({addonId:t.addonId,patch:n.pendingValues})}return e.length===0?{saved:[]}:{saved:await Promise.all(e.map(async({addonId:e,patch:t})=>(c===`global`?await R.mutateAsync({addonId:e,nodeId:V,patch:t}):await z.mutateAsync({addonId:e,deviceId:u,nodeId:V,patch:t}),e)))}},onSuccess:({saved:e})=>{for(let t of e)Z.current.get(t)?.discard();I.invalidateQueries({queryKey:[[`addonSettings`]]})}}),je=r(()=>{for(let e of Z.current.values())e.discard()},[]),Me=n(()=>{let e=0;for(let t of Y){let n=X.get(t.addonId);n&&(e+=n.pendingKeys.length)}return e},[Y,X]),Ne=n(()=>{let e=new Map;for(let t of Y){let n=X.get(t.addonId);if(!n||n.pendingKeys.length===0)continue;let r=new Set(n.pendingKeys);for(let n of t.schema.sections){let t=n.tab??`general`;for(let i of n.fields)`key`in i&&r.has(i.key)&&e.set(t,(e.get(t)??0)+1)}}return e},[Y,X]);if(_e)return i(`div`,{className:`h-24 rounded-lg border border-border bg-surface animate-pulse`});let $=q&&xe?W.get(q):void 0;if(!B&&Y.length===0)return i(`div`,{className:`text-[11px] text-foreground-subtle italic`,children:ue??F(`settings.nodeAddonsSettingsPanel.noAddonsIn`,{scope:o.length>0?`[${o.join(`, `)}]`:F(`settings.nodeAddonsSettingsPanel.theCurrentSelection`,`the current selection`),level:c})});let Pe=Q.isPending;return e(`div`,{className:`space-y-4`,children:[(M||N)&&e(`div`,{className:`border-b border-border pb-2`,children:[M&&i(`h2`,{className:`text-sm font-semibold text-foreground`,children:M}),N&&i(`p`,{className:`text-[11px] text-foreground-subtle mt-0.5`,children:N})]}),B&&i(re,{tabs:G.map(e=>({id:e,label:ye.get(e)??e})),activeId:q,onChange:be,pendingByTab:Ne}),Q.isError&&e(`div`,{className:`rounded-md border border-red-500/40 bg-red-500/10 px-3 py-2 text-[11px] text-red-400`,children:[F(`settings.nodeAddonsSettingsPanel.saveFailed`,`Save failed:`),` `,String(Q.error?.message??Q.error)]}),i(te,{tabKey:$?`extra:${q??``}`:`tab:${q??``}`,children:$?$.content:(()=>{let t=J?Y.reduce((e,t)=>e+t.schemaWithValues.sections.filter(e=>(e.tab??`general`)===J).length,0):0,n=!!J&&t<=1,r=Y.map(e=>({...e,renderedWithValues:{...e.schemaWithValues,sections:e.schemaWithValues.sections.filter(e=>J?(e.tab??`general`)===J:!0).map(e=>n?{...e,title:``,description:void 0}:e)}})).filter(e=>e.renderedWithValues.sections.length>0).toSorted((e,t)=>{let n=e=>{let t=1/0;for(let n of e)typeof n.order==`number`&&n.order<t&&(t=n.order);return t},r=n(e.renderedWithValues.sections),i=n(t.renderedWithValues.sections);return r===i?0:r-i}),a=(j??[]).filter(e=>e.tabId===J),o=a.filter(e=>(e.placement??`before`)===`before`),s=a.filter(e=>e.placement===`after`);return r.length===0&&a.length===0?i(`div`,{className:`text-[11px] text-foreground-subtle italic`,children:ue??F(`settings.nodeAddonsSettingsPanel.nothingToConfigureHereFor`,`Nothing to configure here for this node.`)}):e(`div`,{className:`space-y-6`,children:[o.map((e,t)=>i(`div`,{children:e.content},`extra-before-${t}`)),r.length>0&&i(le,{entries:r,paneStates:X,displayNames:Ce,disabled:Pe,setPaneRef:De,onPaneStateChange:Ee,onImmediateSave:Ae,onAction:ke,inline:B||!!D}),s.map((e,t)=>i(`div`,{children:e.content},`extra-after-${t}`))]})})()}),!_e&&i(ie,{pendingCount:Me,onSave:()=>Q.mutate(),onDiscard:je,saving:Pe})]})}function le({entries:t,paneStates:r,displayNames:o,disabled:c,setPaneRef:l,onPaneStateChange:u,onImmediateSave:d,onAction:f,inline:p}){let m=n(()=>[...t].toSorted((e,t)=>{if(e.addonId===`system-config`)return-1;if(t.addonId===`system-config`)return 1;let n=o.get(e.addonId)??e.addonId,r=o.get(t.addonId)??t.addonId;return n.localeCompare(r)}),[t,o]),[h,g]=s(m[0]?.addonId??``);a(()=>{m.length!==0&&(m.find(e=>e.addonId===h)||g(m[0].addonId))},[m,h]);let _=m.find(e=>e.addonId===h)??m[0];if(!_)return null;let v=n(()=>f?(e,t,n,r)=>f(e,t,n,r):void 0,[f]),y=e=>i(S,{ref:l(e.addonId),addonId:e.addonId,schema:e.renderedWithValues,serverValues:e.serverValues,onImmediateSave:d,onStateChange:u,onAction:v,disabled:c},e.addonId);return m.length===1||p?i(`div`,{className:`flex flex-col gap-4`,children:m.map(y)}):e(`div`,{className:`flex flex-col gap-3`,children:[i(`div`,{className:`flex flex-wrap items-center gap-1 border-b border-border shrink-0`,children:m.map(t=>{let n=o.get(t.addonId)??t.addonId,a=t.addonId===_.addonId,s=(r.get(t.addonId)?.pendingKeys.length??0)>0;return e(`button`,{type:`button`,onClick:()=>g(t.addonId),className:`relative px-3 py-1.5 text-xs font-medium rounded-t-md transition-colors -mb-px border-b-2 whitespace-nowrap ${a?`text-primary border-primary bg-primary/5`:`text-foreground-subtle border-transparent hover:text-foreground hover:bg-surface-hover`}`,children:[n,s&&i(`span`,{className:`ml-1.5 inline-flex h-1.5 w-1.5 rounded-full bg-amber-400`})]},t.addonId)})}),i(`div`,{className:`space-y-2`,children:m.map(e=>i(`div`,{style:e.addonId===_.addonId?void 0:{display:`none`},children:y(e)},e.addonId))})]})}export{k as t};
|