@camstack/addon-admin-ui 1.2.518 → 1.2.520
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 +12 -0
- package/dist/assets/{AddonAssetIcon-BC78agF0.js → AddonAssetIcon-Do54wTZ7.js} +1 -1
- package/dist/assets/Addons-B1OJ_ktZ.js +5 -0
- package/dist/assets/{AdminPage-Bjs-nytk.js → AdminPage-BmoKOToB.js} +1 -1
- package/dist/assets/{AdminSectionedPage-C2tP0k-6.js → AdminSectionedPage-O0ffiJOS.js} +1 -1
- package/dist/assets/{AiProfiles-pD02-18U.js → AiProfiles-koWE1ekm.js} +2 -2
- package/dist/assets/{BrokerEditorDialog-DqKS37Rv.js → BrokerEditorDialog-CcvbGDox.js} +1 -1
- package/dist/assets/{Build-CS_dj5Hw.js → Build-DkW1vw1Z.js} +7 -7
- package/dist/assets/{Calendars-DCACjLC6.js → Calendars-DeDcWHS-.js} +1 -1
- package/dist/assets/Cluster-CZB476Cv.js +1 -0
- package/dist/assets/{ComposedDeviceEditDialog-BbJPDw4o.js → ComposedDeviceEditDialog-DiO4bitz.js} +1 -1
- package/dist/assets/CompositionBlockEditor-BQbgk5OR.js +2 -0
- package/dist/assets/{CompositionEditorPage-DP0zujWv.js → CompositionEditorPage-caLz4h3I.js} +1 -1
- package/dist/assets/Data-Cpi9Lb2k.js +2 -0
- package/dist/assets/{DeviceDetail-DkP5CZVE.js → DeviceDetail-SAboiNCE.js} +2 -2
- package/dist/assets/DeviceDoActionFields-C5Oeqy94.js +1 -0
- package/dist/assets/{Devices-mBnndiKl.js → Devices-DArtILxr.js} +1 -1
- package/dist/assets/{EmbedPlayerPage-BcZOBNUY.js → EmbedPlayerPage-B-NlJHwD.js} +1 -1
- package/dist/assets/{History-DaqaF73n.js → History-B_xZFQt7.js} +1 -1
- package/dist/assets/Identity-Cawa92L2.js +1 -0
- package/dist/assets/IntegrationDetail-D6gLTapX.js +1 -0
- package/dist/assets/{IntegrationHub-CBRrUUwz.js → IntegrationHub-vZ23z1RD.js} +1 -1
- package/dist/assets/{Integrations-LJTGYZMx.js → Integrations-BLhvc6uB.js} +1 -1
- package/dist/assets/Integrations-Bt-5ZNBV.js +1 -0
- package/dist/assets/{Library-DpuCsSIr.js → Library-K2waPmh-.js} +1 -1
- package/dist/assets/Locations-GaQ-Vlg2.js +3 -0
- package/dist/assets/{Logs-D1cD43iv.js → Logs-8qT_HE5j.js} +1 -1
- package/dist/assets/{MaskShapeCanvas-uxChMknO.js → MaskShapeCanvas-B599Qff8.js} +1 -1
- package/dist/assets/{MotionZonesSettings--b5THRq8.js → MotionZonesSettings-kGwQFrli.js} +1 -1
- package/dist/assets/{MyAccess-CM3VRR_i.js → MyAccess-A5l6WoMd.js} +1 -1
- package/dist/assets/Network-B_HZ4sjm.js +1 -0
- package/dist/assets/{NodeAddonsSettingsPanel-09f8jHVS.js → NodeAddonsSettingsPanel-Ccww7SgZ.js} +1 -1
- package/dist/assets/Notifications-DxoAS5SX.js +1 -0
- package/dist/assets/{Pipeline-Bbec-Y6A.js → Pipeline-7I-tbGWA.js} +1 -1
- package/dist/assets/{PrivacyMaskSettings-C4vaTevi.js → PrivacyMaskSettings-D3OKCG5L.js} +1 -1
- package/dist/assets/Recordings-Dqxrdll7.js +1 -0
- package/dist/assets/{RemoteGrid-BEi9hXEQ.js → RemoteGrid-BC7RcI7j.js} +1 -1
- package/dist/assets/{ScanNetworkModal-Da7Ia5fk.js → ScanNetworkModal-De1BMqEu.js} +1 -1
- package/dist/assets/{SceneMonitorEditor-CRNON98X.js → SceneMonitorEditor-BWwBdarY.js} +1 -1
- package/dist/assets/SessionsList-DK9sBB3z.js +2 -0
- package/dist/assets/{Showroom-B8oIkjzd.js → Showroom-bS5UisOb.js} +1 -1
- package/dist/assets/{System-BAxBoDDo.js → System-CoCWu43h.js} +1 -1
- package/dist/assets/{Templates-BzDGxVCB.js → Templates-DIMuzzu_.js} +1 -1
- package/dist/assets/{Terminal-DOuAcBhK.js → Terminal-CaIDL65f.js} +3 -3
- package/dist/assets/{Viewer-D8Z0j_5f.js → Viewer-BzxcMFB5.js} +1 -1
- package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-CAe-SPFx.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-DvIAWVsR.js} +1 -1
- package/dist/assets/{addon-icons-context-BFP9swAt.js → addon-icons-context-D-3KCr36.js} +1 -1
- package/dist/assets/{archive-Ci7cm4G6.js → archive-sIPC64K9.js} +1 -1
- package/dist/assets/{assignment-candidates-VjT4o6uu.js → assignment-candidates-C_UoiwJK.js} +1 -1
- package/dist/assets/{authed-media-Cez6z7Na.js → authed-media-BE3neYoh.js} +1 -1
- package/dist/assets/{bell-off-BQ5f8XC0.js → bell-off-DBYFNI8u.js} +1 -1
- package/dist/assets/{board-model-BTA-bFlQ.js → board-model-CeWFKx9n.js} +1 -1
- package/dist/assets/{boxes-Czy7yEhH.js → boxes-5j10egHw.js} +1 -1
- package/dist/assets/circle-slash-VFJ46qWN.js +1 -0
- package/dist/assets/client-BmfSvq-t.js +674 -0
- package/dist/assets/{cloud-upload-BA2sS5fo.js → cloud-upload-CUkN17bl.js} +1 -1
- package/dist/assets/crop-DwwjG8X9.js +1 -0
- package/dist/assets/{device-integration-icon-DSBE3o4D.js → device-integration-icon-DUQvGDM8.js} +1 -1
- package/dist/assets/device-picker-model-C2rxDYB3.js +1 -0
- package/dist/assets/dist-CGa31Bpn.js +674 -0
- package/dist/assets/{dist-eJJt48HH.js → dist-dCyhYCji.js} +1 -1
- package/dist/assets/{file-up-CoCeS48c.js → file-up-DF9281zn.js} +1 -1
- package/dist/assets/format-Ctn7h3o7.js +1 -0
- package/dist/assets/{hard-drive-download-D1726cbL.js → hard-drive-download-YoDQjZ6G.js} +1 -1
- package/dist/assets/{hostInit-DrD-30zD.js → hostInit-BqZN7ExA.js} +1 -1
- package/dist/assets/i18n-CWf2gqjI.js +1 -0
- package/dist/assets/{icons-BMj2QemZ.js → icons-CUtj9rug.js} +1 -1
- package/dist/assets/{index-DhFn-OXx.js → index-s2JBApLj.js} +3 -3
- package/dist/assets/{key-Cuez9yo6.js → key-BpA5yjS5.js} +1 -1
- package/dist/assets/{key-round-aeHPqKM8.js → key-round-BbwlZYgP.js} +1 -1
- package/dist/assets/{layers-CR_BGB4-.js → layers-Bxrx5612.js} +1 -1
- package/dist/assets/{linked-devices-model-DFhvKJk0.js → linked-devices-model-4X2JNgtv.js} +1 -1
- package/dist/assets/{list-ordered-C8f5XMRn.js → list-ordered-BQZRweJv.js} +1 -1
- package/dist/assets/{location-owned-usage-DtY0j8BQ.js → location-owned-usage-Dwc8i-A6.js} +1 -1
- package/dist/assets/{log-in-CHoY0fr_.js → log-in-BFtLVkKt.js} +1 -1
- package/dist/assets/{memory-stick-BEIQDnvw.js → memory-stick-65f0Nh--.js} +1 -1
- package/dist/assets/{message-square-plus-BRE3KNcy.js → message-square-plus-Cz97-8Ea.js} +1 -1
- package/dist/assets/{mf-entry-bootstrap-0-193177ad.js → mf-entry-bootstrap-0-bfee715d.js} +2 -2
- package/dist/assets/{mic-off-DdBze9n7.js → mic-off-C90AfhxH.js} +1 -1
- package/dist/assets/{monitor-off-BlV0-S9V.js → monitor-off-Kj0KouMn.js} +1 -1
- package/dist/assets/{monitor-smartphone-dysQUSro.js → monitor-smartphone-dJjQFha0.js} +1 -1
- package/dist/assets/mount-C2rxDYB3.js +1 -0
- package/dist/assets/{player-overlays-gMD_rhHz.js → player-overlays-Cl9fdVyE.js} +1 -1
- package/dist/assets/{recycle-BA7-S0W8.js → recycle-B_n3HNql.js} +1 -1
- package/dist/assets/remoteEntry-Bgu2wj6M.js +1 -0
- package/dist/assets/{ruler-D9Jk5se7.js → ruler-DFksgfFc.js} +1 -1
- package/dist/assets/{scan-eye-C8pDlR8P.js → scan-eye-Dcs85qj4.js} +1 -1
- package/dist/assets/{scissors-DXW7xXbW.js → scissors-DpVQCMjY.js} +1 -1
- package/dist/assets/{search-x-D_xVJpAe.js → search-x-BUboqisx.js} +1 -1
- package/dist/assets/{send-rR1Ku0wT.js → send-i8_gi4Wv.js} +1 -1
- package/dist/assets/{settings-2-D4IIivH2.js → settings-2-BuOeZPiK.js} +1 -1
- package/dist/assets/{shapes-w5Fgi2N8.js → shapes-DGstG7DR.js} +1 -1
- package/dist/assets/{sigma-CaOfCqqr.js → sigma-B0KIxXLC.js} +1 -1
- package/dist/assets/{speaker-CwxMftpn.js → speaker-C7Ctczma.js} +1 -1
- package/dist/assets/src-Cjqv1L1_.js +67 -0
- package/dist/assets/{step-inspector-model-DjL5SesH.js → step-inspector-model-Du5MgFTI.js} +1 -1
- package/dist/assets/{table-2-8ixw9N56.js → table-2-Bi2N6ehZ.js} +1 -1
- package/dist/assets/{timer-reset-CKI15cld.js → timer-reset-C-DbgYsd.js} +1 -1
- package/dist/assets/{unlink-CCyI_xx8.js → unlink-DOrqvhrS.js} +1 -1
- package/dist/assets/{usb-DEn49T2d.js → usb-D21IcPqp.js} +1 -1
- package/dist/assets/{use-device-bound-caps-T07YegIU.js → use-device-bound-caps-DUbLU0h-.js} +1 -1
- package/dist/assets/{use-scenes-feed-D5RNpqtT.js → use-scenes-feed-Cc_FfCf0.js} +1 -1
- package/dist/assets/{use-stationary-objects-DD6qOZ6v.js → use-stationary-objects-C9cIQpEH.js} +1 -1
- package/dist/assets/useEventInvalidation-C2rxDYB3.js +1 -0
- package/dist/assets/{useNodeUrlSelection-DR_meIYe.js → useNodeUrlSelection-B-iNHDOR.js} +1 -1
- package/dist/assets/user-round-CCHLAyrG.js +1 -0
- package/dist/assets/{user-x-DQZ1obZM.js → user-x-dk19_EsK.js} +1 -1
- package/dist/assets/{variable-BxoapzPU.js → variable-jCYthbGt.js} +1 -1
- package/dist/assets/{video-BnPjevi_.js → video-BbvU47vV.js} +1 -1
- package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-BhdwB_BG.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-DOT_MvML.js} +2 -2
- package/dist/index.html +9 -9
- package/dist/server/addon.js +67 -7
- package/package.json +1 -1
- package/dist/assets/Addons-CQDH0HWD.js +0 -5
- package/dist/assets/Cluster-BrqN0cCD.js +0 -1
- package/dist/assets/CompositionBlockEditor-Dmmow4DP.js +0 -2
- package/dist/assets/Data-CqOCFJFz.js +0 -2
- package/dist/assets/DeviceDoActionFields-H3tNQT9N.js +0 -1
- package/dist/assets/Identity-_pfy495m.js +0 -1
- package/dist/assets/IntegrationDetail-CoIH_IOT.js +0 -1
- package/dist/assets/Integrations-BgQD7R9-.js +0 -1
- package/dist/assets/Locations-itQSSJiL.js +0 -3
- package/dist/assets/Network-Bu0zlJZn.js +0 -1
- package/dist/assets/Notifications-CNGSWjOJ.js +0 -1
- package/dist/assets/Recordings-Ccv0flf6.js +0 -1
- package/dist/assets/SessionsList-BT-nRXks.js +0 -2
- package/dist/assets/circle-slash-Bj89nMWC.js +0 -1
- package/dist/assets/client-Btf9JC4a.js +0 -674
- package/dist/assets/crop-Cf489T6c.js +0 -1
- package/dist/assets/device-picker-model-BGDU8PR0.js +0 -1
- package/dist/assets/dist-Ca-InGm-.js +0 -674
- package/dist/assets/i18n-Bz5ob6rD.js +0 -1
- package/dist/assets/mount-BGDU8PR0.js +0 -1
- package/dist/assets/remoteEntry-BvdQpL1M.js +0 -1
- package/dist/assets/src-D55o373U.js +0 -67
- package/dist/assets/useEventInvalidation-BGDU8PR0.js +0 -1
- package/dist/assets/user-round-Dds3N7A4.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{C as e,K as t,R as n,S as r,V as i,Y as a,a as o,et as s,o as c,t as l,x as u}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEyXHAdg.js";import{D as d,Di as f,Ei as p,En as m,Ht as h,Oi as g,Si as _,Wr as v,_n as y,br as b,ct as x,dt as S,fr as C,gn as w,jn as ee,lr as te,on as ne,ot as T,pn as re,sr as ie,st as ae,xi as E,zt as oe}from"./player-overlays-gMD_rhHz.js";import{wi as se}from"./client-Btf9JC4a.js";import{i as ce}from"./video-BnPjevi_.js";import{t as D}from"./key-round-aeHPqKM8.js";import{Ad as O,Ar as le,Bs as ue,Cd as k,Dn as A,Fu as de,Gn as fe,Gs as pe,Hs as me,Js as he,Kn as j,Ks as ge,On as _e,Rd as M,Rs as ve,Ru as N,Sr as P,Tn as F,Tr as ye,Un as be,Us as xe,Vs as Se,Vu as Ce,Wn as I,Ws as we,Xd as Te,_r as Ee,br as De,ci as L,ei as R,gr as Oe,qs as ke,vr as Ae,xr as je,yn as z,yr as Me,zs as Ne}from"./src-D55o373U.js";import{t as B}from"./i18n-Bz5ob6rD.js";import{t as V}from"./useTranslation-BJr-n0es.js";import{O as Pe,T as Fe,pr as Ie,yr as Le}from"./index-DhFn-OXx.js";import{t as Re}from"./AdminSectionedPage-C2tP0k-6.js";import{t as H}from"./AdminPage-Bjs-nytk.js";import{t as ze}from"./NodeAddonsSettingsPanel-09f8jHVS.js";import{t as Be}from"./AddonAssetIcon-BC78agF0.js";s();var Ve={detection:`border-green-500`,detector:`border-green-500`,streaming:`border-blue-500`,decode:`border-blue-500`,decoder:`border-blue-500`,recording:`border-orange-500`,recorder:`border-orange-500`,transcoding:`border-purple-500`,transcoder:`border-purple-500`,restream:`border-cyan-500`,restreamer:`border-cyan-500`,storage:`border-yellow-500`,notification:`border-pink-500`,notifier:`border-pink-500`,faces:`border-indigo-500`},He={detection:`bg-green-500/5`,detector:`bg-green-500/5`,streaming:`bg-blue-500/5`,decode:`bg-blue-500/5`,decoder:`bg-blue-500/5`,recording:`bg-orange-500/5`,recorder:`bg-orange-500/5`,transcoding:`bg-purple-500/5`,transcoder:`bg-purple-500/5`,restream:`bg-cyan-500/5`,restreamer:`bg-cyan-500/5`,storage:`bg-yellow-500/5`,notification:`bg-pink-500/5`,notifier:`bg-pink-500/5`,faces:`bg-indigo-500/5`};function Ue({entry:t,actions:n}){let i=t.name.toLowerCase(),a=Ve[i]??`border-primary`,o=He[i]??`bg-primary/5`,s=t.providers.find(e=>e.active),c=n?.pendingCapability===t.name;return e(`div`,{className:`rounded-lg border-t-2 border border-border ${a} ${o} p-3 space-y-2`,children:[e(`div`,{className:`flex items-center justify-between gap-2`,children:[e(`span`,{className:`text-xs font-semibold text-foreground capitalize flex items-center gap-1.5`,children:[t.name,c&&r(C,{className:`h-3 w-3 animate-spin text-primary`})]}),r(`span`,{className:`rounded-full px-2 py-0.5 text-[10px] font-medium ${t.mode===`singleton`?`bg-primary/10 text-primary`:`bg-info/10 text-info`}`,children:t.mode})]}),t.mode===`singleton`?r(We,{entry:t,actions:n,activeProvider:s,isPending:c}):r(Ge,{entry:t,actions:n,isPending:c})]})}function We({entry:t,actions:n,activeProvider:i,isPending:a}){let{t:o}=V();if(!n)return r(`div`,{children:i?e(`div`,{className:`flex items-center gap-1.5 text-[10px] text-foreground`,children:[r(E,{className:`h-3 w-3 text-green-400 shrink-0`}),r(`span`,{className:`font-medium`,children:i.addonName}),r(`span`,{className:`rounded-full bg-green-500/10 text-green-400 px-1.5 py-0.5 font-medium ml-auto`,children:`ACTIVE`})]}):r(`div`,{className:`text-[10px] text-foreground-subtle italic`,children:o(`addons.capabilityMap.noActiveProvider`,`No active provider`)})});if(t.providers.length===0)return r(`div`,{className:`text-[10px] text-foreground-subtle italic`,children:o(`addons.capabilityMap.noProviders`,`No providers`)});let s=`__inherit__`;return e(`div`,{className:`space-y-2`,children:[r(`div`,{className:`space-y-1`,children:t.providers.map(i=>{let o=i.active;return e(`button`,{type:`button`,disabled:a||o,onClick:()=>n.onSelectSingleton(t.name,i.addonId),className:`flex w-full items-center gap-1.5 rounded px-1.5 py-1 text-[10px] text-left transition-colors ${o?`bg-green-500/10 text-foreground cursor-default`:`text-foreground-subtle hover:bg-surface-hover hover:text-foreground disabled:opacity-50`}`,children:[r(`span`,{className:`h-2.5 w-2.5 rounded-full border shrink-0 ${o?`border-green-400 bg-green-400`:`border-border`}`}),r(`span`,{className:`font-medium truncate`,children:i.addonName}),o&&r(`span`,{className:`rounded-full bg-green-500/10 text-green-400 px-1.5 py-0.5 font-medium ml-auto shrink-0`,children:`ACTIVE`})]},i.addonId)})}),t.perNode&&t.perNode.length>0&&r(`div`,{className:`space-y-2 pt-1 border-t border-border/40`,children:t.perNode.map(i=>{let c=i.hasOverride&&i.resolvedActive?i.resolvedActive:s,l=[{value:s,label:i.resolvedActive?o(`addons.capabilityMap.inheritGlobalWith`,{provider:i.resolvedActive}):o(`addons.capabilityMap.inheritGlobal`)},...i.providers.map(e=>({value:e,label:e}))],u=e=>{e===s?n.onClearNodeSingleton(t.name,i.nodeId):n.onSelectNodeSingleton(t.name,i.nodeId,e)},d=a;return e(`div`,{className:`space-y-0.5`,children:[e(`div`,{className:`text-[9px] font-semibold uppercase tracking-widest text-foreground-subtle/60 px-1.5`,children:[i.nodeId,i.hasOverride&&r(`span`,{className:`ml-1.5 rounded-full bg-primary/10 text-primary px-1 py-0.5 normal-case tracking-normal font-medium`,children:o(`common.override`)})]}),l.map(t=>{let n=c===t.value;return e(`button`,{type:`button`,disabled:d||n,onClick:()=>u(t.value),className:`flex w-full items-center gap-1.5 rounded px-1.5 py-1 text-[10px] text-left transition-colors ${n?`bg-green-500/10 text-foreground cursor-default`:`text-foreground-subtle hover:bg-surface-hover hover:text-foreground disabled:opacity-50`}`,children:[r(`span`,{className:`h-2.5 w-2.5 rounded-full border shrink-0 ${n?`border-green-400 bg-green-400`:`border-border`}`}),r(`span`,{className:`font-medium truncate`,children:t.label}),n&&t.value!==s&&r(`span`,{className:`rounded-full bg-green-500/10 text-green-400 px-1.5 py-0.5 font-medium ml-auto shrink-0`,children:`ACTIVE`})]},t.value)})]},i.nodeId)})})]})}function Ge({entry:t,actions:n,isPending:i}){let{t:a}=V();if(t.providers.length===0)return r(`div`,{className:`text-[10px] text-foreground-subtle italic`,children:a(`addons.capabilityMap.noProviders`,`No providers`)});if(!n)return r(`div`,{className:`space-y-1`,children:t.providers.map(t=>e(`div`,{className:`flex items-center justify-between gap-2 text-[10px]`,children:[r(`span`,{className:`text-foreground-subtle`,children:t.addonName}),t.active&&r(`span`,{className:`rounded-full bg-green-500/10 text-green-400 px-1.5 py-0.5 font-medium`,children:`ACTIVE`})]},t.addonId))});let o=t.providers.filter(e=>e.active).map(e=>e.addonId),s=(e,r)=>{let i=r?[...new Set([...o,e])]:o.filter(t=>t!==e);n.onToggleCollection(t.name,i)};return r(`div`,{className:`space-y-1`,children:t.providers.map(t=>e(`label`,{className:`flex items-center justify-between gap-2 text-[10px] rounded px-1.5 py-1 transition-colors ${i?`opacity-50`:`hover:bg-surface-hover cursor-pointer`}`,children:[e(`span`,{className:`flex items-center gap-1.5 min-w-0`,children:[r(`input`,{type:`checkbox`,checked:t.active,disabled:i,onChange:e=>s(t.addonId,e.target.checked),className:`h-3 w-3 accent-green-500 shrink-0`}),r(`span`,{className:`text-foreground truncate`,children:t.addonName})]}),t.active&&r(`span`,{className:`rounded-full bg-green-500/10 text-green-400 px-1.5 py-0.5 font-medium shrink-0`,children:`ACTIVE`})]},t.addonId))})}function U({capabilities:e,actions:t}){let{t:n}=V();return e.length===0?r(`div`,{className:`text-xs text-foreground-subtle text-center py-8`,children:n(`addons.capabilityMap.noCapabilitiesRegistered`,`No capabilities registered`)}):r(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-3`,children:e.map(e=>r(Ue,{entry:e,actions:t},e.name))})}var W=[`capabilities`,`listCapabilities`];function Ke(e){return e===`singleton`||e===`collection`}function qe(e){let t=e.indexOf(`@`);return t===-1?B.t(`system.capabilities.providerHub`,{addonId:e}):`${e.slice(0,t)} (${e.slice(t+1)})`}function Je(e,t){return{name:e.name,mode:t,providers:e.providers.map(n=>({addonId:n,addonName:qe(n),active:t===`singleton`?e.activeProvider===n:!e.disabledProviders.includes(n)})),...t===`singleton`&&e.perNode?{perNode:e.perNode}:{}}}function Ye(){let{t:n}=V(),i=S(),[s,c]=a(null),[u,d]=a(null),f=o({queryKey:W,queryFn:()=>i.trpcClient.capabilities.listCapabilities.query()}),p=t(()=>{let e=(f.data??[]).flatMap(e=>Ke(e.mode)?[Je(e,e.mode)]:[]),t=e.filter(e=>e.mode===`singleton`).toSorted((e,t)=>e.name.localeCompare(t.name)),n=e.filter(e=>e.mode===`collection`).toSorted((e,t)=>e.name.localeCompare(t.name));return[...t,...n]},[f.data]),m=t(()=>p.filter(e=>e.mode===`singleton`),[p]),h=t(()=>p.filter(e=>e.mode===`collection`),[p]),g=l({mutationFn:e=>i.trpcClient.capabilities.setActiveSingleton.mutate({capability:e.capName,addonId:e.addonId}),onMutate:e=>{c(e.capName),d(null)},onSuccess:async(e,t)=>{d({kind:`success`,message:n(`system.capabilities.isNowActive`,`{{capName}} → {{addonId}} is now active.`,{capName:t.capName,addonId:t.addonId})}),await f.refetch()},onError:(e,t)=>{d({kind:`error`,message:n(`system.capabilities.failedToSet`,{cap:t.capName,error:e instanceof Error?e.message:n(`common.unknownError`)})})},onSettled:()=>c(null)}),v=l({mutationFn:e=>i.trpcClient.capabilities.setActiveSingleton.mutate({capability:e.capName,addonId:e.addonId,nodeId:e.nodeId}),onMutate:e=>{c(e.capName),d(null)},onSuccess:async(e,t)=>{d({kind:`success`,message:`${t.capName} @ ${t.nodeId} → ${t.addonId}.`}),await f.refetch()},onError:(e,t)=>{d({kind:`error`,message:n(`system.capabilities.failedToSetOnNode`,{cap:t.capName,node:t.nodeId,error:e instanceof Error?e.message:n(`common.unknownError`)})})},onSettled:()=>c(null)}),y=l({mutationFn:e=>i.trpcClient.capabilities.clearSingletonNodeOverride.mutate({capability:e.capName,nodeId:e.nodeId}),onMutate:e=>{c(e.capName),d(null)},onSuccess:async(e,t)=>{d({kind:`success`,message:n(`system.capabilities.nowInheritsTheGlobalDefault`,`{{capName}} @ {{nodeId}} now inherits the global default.`,{capName:t.capName,nodeId:t.nodeId})}),await f.refetch()},onError:(e,t)=>{d({kind:`error`,message:n(`system.capabilities.failedToClearOnNode`,{cap:t.capName,node:t.nodeId,error:e instanceof Error?e.message:n(`common.unknownError`)})})},onSettled:()=>c(null)}),b=l({mutationFn:e=>i.trpcClient.capabilities.setCollectionEnabledProviders.mutate({capability:e.capName,enabledAddonIds:[...e.enabledAddonIds]}),onMutate:e=>{c(e.capName),d(null)},onSuccess:async(e,t)=>{d({kind:`success`,message:n(`system.capabilities.providerSEnabled`,`{{capName}}: {{length}} provider(s) enabled.`,{capName:t.capName,length:t.enabledAddonIds.length})}),await f.refetch()},onError:(e,t)=>{d({kind:`error`,message:n(`system.capabilities.failedToUpdate`,{cap:t.capName,error:e instanceof Error?e.message:n(`common.unknownError`)})})},onSettled:()=>c(null)}),x={onSelectSingleton:(e,t)=>g.mutate({capName:e,addonId:t}),onSelectNodeSingleton:(e,t,n)=>v.mutate({capName:e,nodeId:t,addonId:n}),onClearNodeSingleton:(e,t)=>y.mutate({capName:e,nodeId:t}),onToggleCollection:(e,t)=>b.mutate({capName:e,enabledAddonIds:t}),pendingCapability:s};return e(H,{embedded:!0,icon:ne,title:n(`system.capabilities.capabilities`,`Capabilities`),subtitle:n(`system.capabilities.chooseWhichProviderIsActive`,`Choose which provider is active for each system capability. Singleton caps pick exactly one provider; collection caps enable a set.`),children:[u&&e(`div`,{className:`flex items-center gap-2 rounded-md border px-3 py-2 text-xs ${u.kind===`success`?`border-success/30 bg-success/10 text-success`:`border-danger/40 bg-danger/10 text-danger`}`,children:[u.kind===`success`?r(E,{className:`h-3.5 w-3.5 shrink-0`}):r(_,{className:`h-3.5 w-3.5 shrink-0`}),r(`span`,{children:u.message})]}),f.isLoading&&r(`div`,{className:`flex items-center justify-center py-16`,children:r(`div`,{className:`animate-spin h-6 w-6 border-2 border-primary border-t-transparent rounded-full`})}),f.isError&&!f.isLoading&&r(le,{title:n(`system.capabilities.failedToLoadCapabilities`,`Failed to load capabilities`),message:f.error instanceof Error?f.error.message:n(`system.capabilities.unknownError`,`Unknown error`),onRetry:()=>void f.refetch()}),!f.isLoading&&!f.isError&&p.length===0&&r(`div`,{className:`text-xs text-foreground-subtle text-center py-16`,children:n(`system.capabilities.noCapabilitiesRegistered`,`No capabilities registered.`)}),!f.isLoading&&!f.isError&&p.length>0&&e(`div`,{className:`space-y-6`,children:[m.length>0&&e(`section`,{className:`space-y-2`,children:[r(`h2`,{className:`text-[11px] font-semibold uppercase tracking-widest text-foreground-subtle/70`,children:n(`system.capabilities.singletonPickOneProvider`,`Singleton — pick one provider`)}),r(U,{capabilities:m,actions:x})]}),h.length>0&&e(`section`,{className:`space-y-2`,children:[r(`h2`,{className:`text-[11px] font-semibold uppercase tracking-widest text-foreground-subtle/70`,children:n(`system.capabilities.collectionEnableASet`,`Collection — enable a set`)}),r(U,{capabilities:h,actions:x})]})]})]})}var G=[`locked`,`reset`,`shares-backup`,`recovery-key`,`rotation-pending`,`orphans`],Xe={"key-missing":`helpers.keychainNotices.lockedKeyMissing`,"wrong-key":`helpers.keychainNotices.lockedWrongKey`,"key-file-unreadable":`helpers.keychainNotices.lockedKeyFileUnreadable`,"store-unavailable":`helpers.keychainNotices.lockedStoreUnavailable`,"not-initialized":`helpers.keychainNotices.lockedNotInitialized`,"decrypt-failed":`helpers.keychainNotices.lockedDecryptFailed`};function Ze(e){let t=Xe[e];return t===void 0?e:B.t(t)}function Qe({status:e,reset:t,pendingReentry:n,orphans:r}){let i=e.keychain.state===`locked`,a=e.keySource??e.configuredSource,o=[];return e.keychain.state===`locked`&&o.push({id:`locked`,tone:`danger`,title:B.t(`helpers.keychainNotices.locked`,{reason:Ze(e.keychain.reason)})}),t!==null&&t.acknowledgedAt===null&&o.push({id:`reset`,tone:`danger`,title:n>0?B.t(`helpers.keychainNotices.resetPending`,{count:n}):B.t(`helpers.keychainNotices.resetDone`)}),a.sharesBackupWithDatabase&&o.push({id:`shares-backup`,tone:`warning`,title:B.t(`helpers.keychainNotices.sharesBackup`)}),!i&&e.recoveryKeyDownloadedAt===null&&o.push({id:`recovery-key`,tone:`warning`,title:B.t(`helpers.keychainNotices.recoveryKey`)}),!i&&e.rotationPending&&o.push({id:`rotation-pending`,tone:`info`,title:B.t(`helpers.keychainNotices.rotationPending`)}),!i&&r>0&&o.push({id:`orphans`,tone:`info`,title:B.t(`helpers.keychainNotices.orphans`,{count:r})}),[...o].sort((e,t)=>G.indexOf(e.id)-G.indexOf(t.id))}var $e={dateStyle:`short`,timeStyle:`short`};function K(e){return e===null?`—`:new Date(e).toLocaleString(void 0,$e)}function q({value:t,copyValue:n,srLabel:i,maxWidthClass:a,className:o}){let s=n??t;return e(`span`,{className:M(`flex min-w-0 items-center gap-0.5`,a),children:[r(`span`,{className:M(`min-w-0 truncate font-mono`,o),title:s,children:t}),r(z,{value:s,srLabel:i,className:`h-6 shrink-0 px-1.5`})]})}s();var et=new Set([`reveal`,`download-recovery-key`,`rotate-master-key`,`reset`]);function tt(e){return[{key:`at`,header:e(`system.keychainAuditTable.colWhen`),render:e=>K(e.at)},{key:`action`,header:e(`system.keychainAuditTable.colAction`),render:e=>r(L,{variant:et.has(e.action)?`warning`:`default`,children:e.action})},{key:`actor`,header:e(`system.keychainAuditTable.colActor`),render:e=>r(`span`,{className:`font-mono`,children:e.actor})},{key:`ref`,header:e(`system.keychainAuditTable.colRef`),render:e=>e.ref===null?r(`span`,{className:`text-foreground-subtle`,children:`—`}):r(q,{value:e.ref,srLabel:`secret ref`,maxWidthClass:`max-w-[22rem]`})},{key:`detail`,header:e(`system.keychainAuditTable.colDetail`),render:e=>r(`span`,{className:`text-foreground-muted`,children:e.detail??``})}]}function nt({entries:n}){let{t:i}=V(),[o,s]=a(0),c=t(()=>tt(i),[i]);if(n===void 0)return r(`p`,{className:`text-xs text-foreground-subtle`,children:i(`common.loading`,`Loading…`)});let l=Math.max(1,Math.ceil(n.length/25)),u=Math.min(o,l-1),d=u*25,m=n.slice(d,d+25);return e(`div`,{className:`space-y-2`,children:[r(A,{columns:c,rows:m,rowKey:e=>e.id,minWidthPx:760,emptyMessage:i(`secrets.keychainAuditTable.nothingHasBeenAuditedYet`,`Nothing has been audited yet.`)}),n.length>25&&e(`div`,{className:`flex flex-wrap items-center justify-between gap-2 text-[11px] text-foreground-subtle`,children:[r(`span`,{children:i(n.length>=500?`system.keychainAuditTable.rangeRecent`:`system.keychainAuditTable.range`,{from:d+1,to:d+m.length,total:n.length})}),e(`span`,{className:`inline-flex items-center gap-1`,children:[r(R,{size:`sm`,variant:`outline`,"aria-label":i(`secrets.keychainAuditTable.previousPage`,`Previous page`),disabled:u===0,onClick:()=>s(u-1),children:r(f,{className:`h-3.5 w-3.5`,"aria-hidden":!0})}),e(`span`,{className:`tabular-nums`,children:[u+1,` / `,l]}),r(R,{size:`sm`,variant:`outline`,"aria-label":i(`secrets.keychainAuditTable.nextPage`,`Next page`),disabled:u>=l-1,onClick:()=>s(u+1),children:r(p,{className:`h-3.5 w-3.5`,"aria-hidden":!0})})]})]})]})}function rt(e,t){switch(e){case`locked`:return r(R,{size:`sm`,variant:`danger`,disabled:t.busy,onClick:t.onReset,children:B.t(`secrets.keychainNoticeContent.resetKeychain`,`Reset keychain`)});case`reset`:return r(R,{size:`sm`,variant:`outline`,disabled:t.busy,onClick:t.onAcknowledgeReset,children:B.t(`secrets.keychainNoticeContent.dismiss`,`Dismiss`)});case`recovery-key`:return r(R,{size:`sm`,variant:`outline`,disabled:t.busy,onClick:t.onDownload,children:B.t(`secrets.keychainNoticeContent.download`,`Download`)});case`rotation-pending`:return r(R,{size:`sm`,variant:`outline`,disabled:t.busy,onClick:t.onRotate,children:B.t(`secrets.keychainNoticeContent.rotate`,`Rotate`)});case`orphans`:return r(R,{size:`sm`,variant:`outline`,onClick:t.onShowOrphans,children:B.t(`secrets.keychainNoticeContent.review`,`Review`)});case`shares-backup`:return null}}function it(e,t){switch(e){case`locked`:return r(`p`,{children:B.t(`secrets.keychainNoticeContent.noValueCanBeRead`,`No value can be read or stored. If the master key is lost for good, Reset archives every stored value and starts a new keychain; every secret field then reads “not set”.`)});case`reset`:return t.reset===null?null:r(at,{reset:t.reset,pending:t.pendingReentry});case`shares-backup`:return r(`p`,{children:r(Ie,{i18nKey:`secrets.keychainNoticeContent.backupKeyFile`,components:{code:r(`code`,{className:`font-mono`})}})});case`recovery-key`:return r(`p`,{children:B.t(`secrets.keychainNoticeContent.withoutACopyOfThe`,`Without a copy of the master key, the stored values cannot be recovered.`)});case`rotation-pending`:return r(`p`,{children:B.t(`secrets.keychainNoticeContent.theKeychainUnlockedWithA`,`The keychain unlocked with a previous key. Rotate to move onto the configured one.`)});case`orphans`:return null}}function at({reset:t,pending:n}){let{t:i}=V(),a=t.actor===`trigger-file`?i(`secrets.keychainNoticeContent.resetByTrigger`):i(`secrets.keychainNoticeContent.resetByAdmin`,{actor:t.actor});return e(`div`,{className:`space-y-1.5`,children:[r(`p`,{children:i(`secrets.keychainNoticeContent.resetDetail`,{when:K(t.at),by:a,archived:t.archived})}),n.length>0&&r(`ul`,{className:`max-h-40 space-y-0.5 overflow-y-auto rounded-md border border-border bg-background p-2 font-mono text-[11px] text-foreground`,children:n.map(t=>e(`li`,{className:`break-all`,children:[t.owner,` · `,t.scope,` · `,t.fieldPath]},t.ref))})]})}s();var ot=2,J={danger:{icon:ce,text:`text-danger`,border:`border-danger/40`},warning:{icon:oe,text:`text-warning`,border:`border-warning/40`},info:{icon:b,text:`text-info`,border:`border-border`}};function st({notices:t,renderAction:n,renderDetail:i}){let{t:o}=V(),[s,c]=a(!1),l=t[0];if(l===void 0)return null;let u=t.length>ot,d=u&&!s?t.slice(0,1):t,f=t.length-d.length;return e(`section`,{"aria-label":o(`secrets.keychainNotices.keychainNotices`,`Keychain notices`),className:M(`rounded-lg border bg-surface`,J[l.tone].border),children:[r(`ul`,{className:`divide-y divide-border`,children:d.map(e=>r(ct,{notice:e,action:n(e.id),detail:i(e.id)},e.id))}),u&&r(`div`,{className:`border-t border-border px-3 py-1`,children:e(R,{size:`sm`,variant:`ghost`,"aria-expanded":s,onClick:()=>c(e=>!e),children:[r(g,{className:M(`h-3.5 w-3.5 transition-transform`,s&&`rotate-180`),"aria-hidden":!0}),s?o(`secrets.keychainNotices.showLess`,`Show less`):o(`secrets.keychainNotices.more`,`{{hidden}} more`,{hidden:f})]})})]})}function ct({notice:t,action:n,detail:i}){let{t:o}=V(),[s,c]=a(!1),l=J[t.tone],u=l.icon,d=i!=null,f=`keychain-notice-${t.id}`;return e(`li`,{className:`px-3 py-2`,children:[e(`div`,{className:`flex flex-col gap-2 sm:flex-row sm:items-center sm:gap-3`,children:[e(`p`,{className:`flex min-w-0 flex-1 items-start gap-2 text-xs text-foreground`,children:[r(u,{className:M(`mt-0.5 h-3.5 w-3.5 shrink-0`,l.text),"aria-hidden":!0}),r(`span`,{className:`min-w-0 break-words`,children:t.title})]}),e(`div`,{className:`flex shrink-0 flex-wrap items-center gap-1.5 pl-5 sm:pl-0`,children:[d&&r(R,{size:`sm`,variant:`ghost`,"aria-expanded":s,"aria-controls":f,onClick:()=>c(e=>!e),children:o(`secrets.keychainNotices.details`,`Details`)}),n]})]}),d&&s&&r(`div`,{id:f,className:`mt-2 pl-5 text-xs text-foreground-muted`,children:i})]})}var lt={"config-file":`Key file (config.yaml)`,"previous-config-file":`Previous key file`,platform:`OS keychain`,"default-file":`Default key file (data volume)`},ut=8;function dt({status:t,busy:n,onDownload:i,onRotate:a,onPurge:o}){let{t:s}=V(),c=t.keychain.state===`locked`,l=t.keySource??t.configuredSource;return r(F,{headingId:`keychain-status`,title:s(`secrets.keychainStatusCard.keychain`,`Keychain`),icon:D,actions:e(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[t.retiredWraps>0&&r(R,{size:`sm`,variant:`ghost`,disabled:n||c,onClick:o,children:s(`secrets.keychainStatusCard.purge`,{count:t.retiredWraps})}),r(R,{size:`sm`,variant:`outline`,disabled:n||c,onClick:a,children:s(`secrets.keychainStatusCard.rotateKey`,`Rotate key`)}),r(R,{size:`sm`,variant:`outline`,disabled:n||c,onClick:i,children:s(`secrets.keychainStatusCard.downloadRecoveryKey`,`Download recovery key`)})]}),children:e(`dl`,{className:`${d} grid grid-cols-1 gap-x-6 gap-y-3 sm:grid-cols-2 xl:grid-cols-4`,children:[e(Y,{label:s(`secrets.keychainStatusCard.state`,`State`),children:[c?e(L,{variant:`danger`,className:`gap-1`,children:[r(te,{className:`h-3 w-3`,"aria-hidden":!0}),s(`secrets.keychainStatusCard.locked`,`Locked`)]}):e(L,{variant:`success`,className:`gap-1`,children:[r(re,{className:`h-3 w-3`,"aria-hidden":!0}),s(`secrets.keychainStatusCard.unlocked`,`Unlocked`)]}),r(`span`,{className:`ml-2 text-foreground-subtle`,children:s(`common.stored`,{count:t.secretCount})})]}),e(Y,{label:s(`secrets.keychainStatusCard.keySource`,`Key source`),children:[r(`span`,{className:`block`,children:lt[l.kind]}),l.path!==void 0&&r(q,{value:l.path,srLabel:`key path`})]}),r(Y,{label:s(`secrets.keychainStatusCard.fingerprint`,`Fingerprint`),children:t.fingerprint===null?r(`span`,{className:`text-foreground-subtle`,children:`—`}):e(`span`,{className:`inline-flex items-center gap-0.5`,children:[r(`span`,{className:`font-mono`,title:t.fingerprint,children:t.fingerprint.slice(0,ut)}),r(z,{value:t.fingerprint,srLabel:`fingerprint`})]})}),r(Y,{label:s(`secrets.keychainStatusCard.recoveryKey`,`Recovery key`),children:t.recoveryKeyDownloadedAt===null?r(L,{variant:`warning`,children:s(`secrets.keychainStatusCard.notTaken`,`Not taken`)}):r(`span`,{children:s(`secrets.keychainStatusCard.taken`,{when:K(t.recoveryKeyDownloadedAt)})})})]})})}function Y({label:t,children:n}){return e(`div`,{className:`min-w-0 text-xs`,children:[r(`dt`,{className:`text-foreground-subtle`,children:t}),r(`dd`,{className:`mt-0.5 min-w-0 text-foreground`,children:n})]})}s();var ft=1e3;function pt({revealed:t,onClose:n}){let{t:o}=V(),[s,c]=a(k);i(()=>{if(t===null)return;let e=Date.now();c(k);let r=setTimeout(n,k),i=setInterval(()=>c(Math.max(0,k-(Date.now()-e))),ft);return()=>{clearTimeout(r),clearInterval(i)}},[t,n]);let l=Math.ceil(s/1e3);return r(Oe,{open:t!==null,onOpenChange:e=>!e&&n(),children:r(Ae,{width:`lg`,placement:`sheet-on-mobile`,scroll:`body`,children:t!==null&&e(u,{children:[e(je,{children:[r(P,{className:`break-all`,children:t.entry.fieldPath}),e(Me,{className:`break-all`,children:[t.entry.owner,` · `,t.entry.scope]})]}),r(Ee,{children:r(`pre`,{"data-testid":`revealed-value`,className:`whitespace-pre-wrap break-all rounded-md border border-border bg-background p-3 font-mono text-xs text-foreground`,children:t.value})}),e(De,{className:`flex-col items-stretch gap-2 sm:flex-row sm:items-center sm:justify-between`,children:[r(`p`,{className:`text-[11px] text-foreground-subtle`,children:o(`secrets.revealDialog.recorded`,{seconds:l})}),e(`div`,{className:`flex justify-end gap-2`,children:[r(z,{value:t.value,label:o(`common.copy`,`Copy`),srLabel:`revealed value`}),r(R,{size:`sm`,variant:`outline`,onClick:n,children:o(`secrets.revealDialog.hide`,`Hide`)})]})]})]})})})}var X={orphan:{labelKey:`secrets.secretsTableState.usageOrphan`,variant:`warning`,hintKey:`secrets.secretsTableState.usageOrphanHint`,rank:0},unknown:{labelKey:`secrets.secretsTableState.usageUnknown`,variant:`default`,hintKey:`secrets.secretsTableState.usageUnknownHint`,rank:1},"in-use":{labelKey:`secrets.secretsTableState.usageInUse`,variant:`success`,hintKey:`secrets.secretsTableState.usageInUseHint`,rank:2}},mt=[{id:`all`,labelKey:`common.all`},{id:`in-use`,labelKey:`secrets.secretsTableState.usageInUse`},{id:`orphan`,labelKey:`secrets.secretsTableState.filterOrphans`},{id:`unknown`,labelKey:`secrets.secretsTableState.usageUnknown`}],Z=`system`;function ht(t){let{t:n}=V(),{secrets:i,filter:a,onFilterChange:o,onDeleteOrphans:s,deleting:c,locked:l}=t;if(i===void 0)return r(`p`,{className:`text-xs text-foreground-subtle`,children:n(`common.loading`,`Loading…`)});let u=e=>e===`all`?i.length:i.filter(t=>t.usage===e).length,d=i.filter(e=>e.usage===`orphan`).map(e=>e.ref),f=a===`all`?i:i.filter(e=>e.usage===a);return e(`div`,{className:`space-y-2`,children:[e(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[r(`div`,{className:`flex flex-wrap gap-1`,role:`group`,"aria-label":n(`secrets.secretsTable.filterByUsage`,`Filter by usage`),children:mt.map(t=>e(R,{size:`sm`,variant:a===t.id?`secondary`:`ghost`,"aria-pressed":a===t.id,className:a===t.id?`ring-1 ring-border`:void 0,onClick:()=>o(t.id),children:[n(t.labelKey),r(`span`,{className:`text-foreground-subtle tabular-nums`,children:u(t.id)})]},t.id))}),d.length>0&&e(R,{size:`sm`,variant:`outline`,className:`ml-auto`,disabled:c||l,onClick:()=>s(d),children:[r(h,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),n(`secrets.secretsTableState.deleteOrphans`,{count:d.length})]})]}),r(A,{columns:_t(t),rows:f,rowKey:e=>e.ref,minWidthPx:860,maxBodyHeight:_e,defaultSort:{columnKey:`owner`,dir:`asc`},emptyMessage:i.length===0?n(`secrets.secretsTable.noValueIsStoredIn`,`No value is stored in the keychain yet.`):n(`secrets.secretsTable.noStoredValueMatchesThis`,`No stored value matches this filter.`)})]})}function gt({owner:t}){let{t:n}=V();return e(`span`,{className:`flex items-center gap-2`,children:[r(Be,{addonId:t,fallback:t===Z?y:ee,tileClassName:`bg-surface-hover text-foreground-subtle`,size:`sm`}),r(`span`,{className:`font-medium`,children:t===Z?n(`secrets.secretsTable.hubSystem`,`Hub (system)`):t})]})}function _t({locked:t,onReveal:n,revealing:i}){return[{key:`owner`,header:B.t(`secrets.secretsTable.owner`,`Owner`),render:e=>r(gt,{owner:e.owner}),sortValue:e=>e.owner},{key:`scope`,header:B.t(`secrets.secretsTable.scope`,`Scope`),render:e=>r(`span`,{className:`block max-w-[11rem] truncate font-mono`,title:e.scope,children:e.scope}),sortValue:e=>e.scope},{key:`field`,header:B.t(`secrets.secretsTable.field`,`Field`),render:e=>r(q,{value:e.fieldPath,copyValue:e.ref,srLabel:`secret ref`,maxWidthClass:`max-w-[16rem]`}),sortValue:e=>e.fieldPath},{key:`updated`,header:B.t(`secrets.secretsTable.updated`,`Updated`),render:e=>K(e.updatedAt),sortValue:e=>e.updatedAt},{key:`last-read`,header:B.t(`secrets.secretsTable.lastRead`,`Last read`),render:e=>K(e.lastReadAt),sortValue:e=>e.lastReadAt},{key:`status`,header:B.t(`secrets.secretsTable.status`,`Status`),render:e=>r(L,{variant:X[e.usage].variant,title:B.t(X[e.usage].hintKey),children:B.t(X[e.usage].labelKey)}),sortValue:e=>X[e.usage].rank},{key:`actions`,header:``,align:`right`,notSortableReason:`Actions`,render:a=>e(R,{size:`sm`,variant:`ghost`,disabled:t||i,"aria-label":B.t(`secrets.secretsTable.reveal`,`Reveal {{fieldPath}}`,{fieldPath:a.fieldPath}),title:t?B.t(`secrets.secretsTable.theKeychainIsLocked`,`The keychain is locked`):B.t(`secrets.secretsTable.revealAudited`,`Reveal (audited)`),onClick:()=>n(a),children:[r(v,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),B.t(`secrets.secretsTable.reveal2`,`Reveal`)]})}]}function vt(e){return e instanceof Error?e.message:String(e)}function yt(e){let{t}=V(),n=ae(),r=T(),i=x(),a=ue(),o=ke(),s=xe(),c=we(),l=ve(),u=Ne(),d=async(t,n)=>{try{await n()}catch(e){await r({title:t,message:vt(e),variant:`danger`})}e()};return{busy:a.isPending||o.isPending||s.isPending||c.isPending,deleting:u.isPending,download:async()=>{await n({title:t(`secrets.useKeychainActions.downloadTitle`),message:t(`secrets.useKeychainActions.downloadMessage`),confirmLabel:t(`secrets.useKeychainActions.downloadConfirm`),variant:`warning`})&&await d(t(`secrets.useKeychainActions.downloadRefused`),async()=>{let e=await a.mutateAsync({});await i({title:t(`secrets.useKeychainActions.recoveryTitle`,{fingerprint:e.fingerprint}),message:t(`secrets.useKeychainActions.recoveryMessage`),defaultValue:e.key,readOnly:!0,confirmLabel:t(`secrets.useKeychainActions.recoveryDone`)})})},rotate:async()=>{await n({title:t(`secrets.useKeychainActions.rotateTitle`),message:t(`secrets.useKeychainActions.rotateMessage`),confirmLabel:t(`secrets.useKeychainActions.rotateConfirm`),variant:`warning`})&&await d(t(`secrets.useKeychainActions.rotateRefused`),async()=>{let e=await o.mutateAsync({});await r({title:t(`secrets.useKeychainActions.rotatedTitle`),message:t(`secrets.useKeychainActions.rotatedMessage`,{fingerprint:e.fingerprint})})})},purge:async()=>{await n({title:t(`secrets.useKeychainActions.purgeTitle`),message:t(`secrets.useKeychainActions.purgeMessage`),confirmLabel:t(`secrets.useKeychainActions.purgeConfirm`),variant:`warning`})&&await d(t(`secrets.useKeychainActions.purgeRefused`),async()=>{await s.mutateAsync({})})},reset:async()=>{await i({title:t(`secrets.useKeychainActions.resetTitle`),message:t(`secrets.useKeychainActions.resetMessage`,{confirmation:`RESET KEYCHAIN`}),confirmLabel:t(`secrets.useKeychainActions.resetConfirm`),validate:e=>e===`RESET KEYCHAIN`?null:t(`secrets.useKeychainActions.resetMismatch`)})===`RESET KEYCHAIN`&&await d(t(`secrets.useKeychainActions.resetRefused`),async()=>{await c.mutateAsync({confirm:se})})},acknowledgeReset:async()=>{await d(t(`secrets.useKeychainActions.dismissFailed`),async()=>{await l.mutateAsync({})})},deleteOrphans:async e=>{await n({title:t(`secrets.useKeychainActions.orphansTitle`,{count:e.length}),message:t(`secrets.useKeychainActions.orphansMessage`),confirmLabel:t(`secrets.useKeychainActions.orphansConfirm`),variant:`danger`})&&await d(t(`secrets.useKeychainActions.orphansRefused`),async()=>{let n=await u.mutateAsync({refs:[...e]});n.kept.length>0&&await r({title:t(`secrets.useKeychainActions.keptTitle`),message:t(`secrets.useKeychainActions.keptMessage`,{deleted:n.deleted.length,kept:n.kept.length})})})}}}s();var Q=`view`;function bt(){let[e,t]=Le();return[e.get(Q)===`audit`?`audit`:`values`,n=>{let r=new URLSearchParams(e);n===`values`?r.delete(Q):r.set(Q,n),t(r,{replace:!0})}]}function xt(){let{t:i}=V(),o=he({}),s=me({}),c=Se({limit:500}),l=pe({}),u=ge(),d=T(),[f,p]=bt(),[m,h]=a(`all`),[g,_]=a(null),v=yt(()=>{o.refetch(),s.refetch(),c.refetch(),l.refetch()}),y=o.data?.keychain.state===`locked`,b=t(()=>(s.data??[]).filter(e=>e.usage===`orphan`).length,[s.data]),x=t(()=>o.data===void 0?[]:Qe({status:o.data,reset:l.data?.reset??null,pendingReentry:l.data?.pendingReentry.length??0,orphans:b}),[o.data,l.data,b]),S={reset:l.data?.reset??null,pendingReentry:l.data?.pendingReentry??[],busy:v.busy,onReset:()=>void v.reset(),onAcknowledgeReset:()=>void v.acknowledgeReset(),onDownload:()=>void v.download(),onRotate:()=>void v.rotate(),onShowOrphans:()=>{h(`orphan`),p(`values`)}},C=async e=>{try{_({entry:e,value:(await u.mutateAsync({ref:e.ref})).value}),s.refetch()}catch(e){await d({title:i(`admin.system.secrets.revealRefused`,`Reveal refused`),message:Pe(e),variant:`danger`})}},w=n(()=>_(null),[]);return e(H,{embedded:!0,icon:D,title:i(`admin.system.secrets.secrets`,`Secrets`),subtitle:i(`admin.system.secrets.passwordsTokensAndKeysEncrypted`,`Passwords, tokens and keys, encrypted in the hub keychain. Values leave the hub only through an audited reveal.`),children:[r(st,{notices:x,renderAction:e=>rt(e,S),renderDetail:e=>it(e,S)}),o.data!==void 0&&r(dt,{status:o.data,busy:v.busy,onDownload:S.onDownload,onRotate:S.onRotate,onPurge:()=>void v.purge()}),e(be,{value:f,onValueChange:e=>p(e===`audit`?`audit`:`values`),children:[e(fe,{children:[r(j,{value:`values`,children:i(`admin.system.secrets.storedValues`,`Stored values`)}),r(j,{value:`audit`,children:i(`admin.system.secrets.audit`,`Audit`)})]}),r(I,{value:`values`,children:r(ht,{secrets:s.data,locked:y,filter:m,onFilterChange:h,onReveal:e=>void C(e),revealing:u.isPending,onDeleteOrphans:e=>void v.deleteOrphans(e),deleting:v.deleting})}),r(I,{value:`audit`,children:r(nt,{entries:c.data})})]}),r(pt,{revealed:g,onClose:w})]})}s();var St=[[`system`]];function $(e){return e.toFixed(6).replace(/0+$/,``).replace(/\.$/,``)}function Ct(){let{t}=V(),n=c(),o=N(),s=Ce(),l=de(),[u,d]=a(``),[f,p]=a(``),[h,g]=a(null),_=o.data?.location??null;i(()=>{d(_===null?``:$(_.latitude)),p(_===null?``:$(_.longitude))},[_]);let v=async()=>{await n.invalidateQueries({queryKey:St})},y=async e=>{e.preventDefault();let t=Number(u),n=Number(f);if(u.trim()===``||f.trim()===``){g(`Enter both a latitude and a longitude, or press Clear.`);return}if(!Number.isFinite(t)||t<-90||t>90){g(`Latitude must be between -90 and 90 decimal degrees.`);return}if(!Number.isFinite(n)||n<-180||n>180){g(`Longitude must be between -180 and 180 decimal degrees.`);return}g(null),await s.mutateAsync({latitude:t,longitude:n}),await v()},b=async()=>{g(null),await s.mutateAsync(null),await v()},x=async()=>{g(null),await l.mutateAsync(),await v()},S=s.isPending||l.isPending||o.isLoading;return e(ye,{className:`space-y-3`,children:[e(`div`,{className:`flex items-start justify-between gap-3`,children:[e(`div`,{className:`flex items-start gap-2`,children:[r(ie,{className:`h-4 w-4 mt-0.5 text-muted-foreground shrink-0`}),r(`div`,{children:r(`h3`,{className:`text-sm font-medium`,children:t(`settings.siteLocationCard.siteLocation`,`Site location`)})})]}),_===null?r(L,{variant:`warning`,children:t(`settings.siteLocationCard.notConfigured`,`Not configured`)}):r(L,{variant:_.source===`operator-set`?`success`:`info`,children:_.source===`operator-set`?t(`settings.siteLocationCard.setByYou`,`Set by you`):t(`settings.siteLocationCard.derivedFromIp`,`Derived from IP`)})]}),_?.label!==void 0&&_.label!==``?r(`p`,{className:`text-xs text-muted-foreground`,children:t(`settings.siteLocationCard.detectedNear`,{place:_.label})}):null,_===null&&o.data?.derivationAttemptedAt!==null?e(`p`,{className:`text-xs text-warning`,children:[t(`settings.siteLocationCard.automaticDetectionFromThePublic`,`Automatic detection from the public IP did not succeed`),o.data?.derivationError!==null&&o.data?.derivationError!==void 0?`: ${o.data.derivationError}`:`.`,` `,t(`settings.siteLocationCard.itIsNotRetriedOn`,`It is not retried on its own — enter the coordinates, or press Detect.`)]}):null,e(`form`,{className:`flex flex-wrap items-end gap-3`,onSubmit:y,children:[e(`label`,{className:`flex flex-col gap-1 text-xs`,children:[r(`span`,{className:`text-muted-foreground`,children:t(`settings.siteLocationCard.latitude`,`Latitude`)}),r(O,{className:`w-40`,value:u,inputMode:`decimal`,placeholder:`40.851800`,onChange:e=>d(e.target.value),"aria-label":t(`settings.siteLocationCard.latitude`,`Latitude`)})]}),e(`label`,{className:`flex flex-col gap-1 text-xs`,children:[r(`span`,{className:`text-muted-foreground`,children:t(`settings.siteLocationCard.longitude`,`Longitude`)}),r(O,{className:`w-40`,value:f,inputMode:`decimal`,placeholder:`14.268100`,onChange:e=>p(e.target.value),"aria-label":t(`settings.siteLocationCard.longitude`,`Longitude`)})]}),r(R,{type:`submit`,disabled:S,children:t(`common.save`,`Save`)}),e(R,{type:`button`,variant:`ghost`,disabled:S,onClick:x,children:[r(m,{className:`h-3.5 w-3.5 mr-1`}),t(`settings.siteLocationCard.detectFromIp`,`Detect from IP`)]}),_===null?null:r(R,{type:`button`,variant:`ghost`,disabled:S,onClick:b,children:t(`settings.siteLocationCard.clear`,`Clear`)})]}),h===null?null:r(`p`,{className:`text-xs text-danger`,children:h}),r(`p`,{className:`text-xs text-muted-foreground`,children:t(`settings.siteLocationCard.wgs84DecimalDegreesDetectAsks`,`WGS84 decimal degrees. Detect asks a public geo-IP service once and will not overwrite a value you typed — clear it first.`)})]})}function wt(){let{t}=V(),{nodes:n,isLoading:i}=Te(),a=n.find(e=>e.isHub&&e.isOnline),o=a?.addons.map(e=>e.addonId)??[];return e(H,{embedded:!0,children:[r(Ct,{}),i?r(`div`,{className:`text-muted-foreground text-sm py-12 text-center`,children:t(`admin.system.settings.loadingHubTopology`,`Loading hub topology…`)}):a?o.length===0?r(`div`,{className:`text-muted-foreground text-sm py-12 text-center`,children:t(`admin.system.settings.noAddonsInstalledOnThe`,`No addons installed on the hub yet.`)}):r(ze,{nodeId:a.id,addonIds:o,level:`global`}):e(`div`,{className:`flex flex-col items-center justify-center text-muted-foreground text-sm gap-2 py-12`,children:[r(w,{className:`h-8 w-8 opacity-30`}),r(`p`,{children:t(`admin.system.settings.noOnlineHubNodeFound`,`No online hub node found.`)}),r(`p`,{className:`text-xs`,children:t(`admin.system.settings.settingsWillAppearOnceThe`,`Settings will appear once the hub is reachable.`)})]})]})}function Tt(){let{t:e}=V(),t=Fe(`/system/settings`,{t:e,isAdmin:!0})??{icon:w,title:e(`system.systemNav`,`System`)};return r(Re,{icon:t.icon,title:t.title,defaultSection:`settings`,sectionsLabel:`${t.title} sections`,sections:[{id:`settings`,label:e(`system.system.settings`,`Settings`),content:r(wt,{})},{id:`secrets`,label:e(`system.system.secrets`,`Secrets`),content:r(xt,{}),ownedParams:[`view`]},{id:`capabilities`,label:e(`system.system.capabilities`,`Capabilities`),content:r(Ye,{})}]})}export{Tt as SystemPage};
|
|
1
|
+
import{C as e,K as t,R as n,S as r,V as i,Y as a,a as o,et as s,o as c,t as l,x as u}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEyXHAdg.js";import{D as d,Di as f,Ei as p,En as m,Ht as h,Oi as g,Si as _,Wr as v,_n as y,br as b,ct as x,dt as S,fr as C,gn as w,jn as ee,lr as te,on as ne,ot as T,pn as re,sr as ie,st as ae,xi as E,zt as oe}from"./player-overlays-Cl9fdVyE.js";import{wi as se}from"./client-BmfSvq-t.js";import{i as ce}from"./video-BbvU47vV.js";import{t as D}from"./key-round-BbwlZYgP.js";import{Ar as le,Bs as ue,Dn as O,Gn as de,Gs as fe,Hs as pe,Hu as me,Iu as he,Js as ge,Kn as k,Ks as _e,On as ve,Rs as ye,Sr as be,Tn as xe,Tr as A,Un as j,Us as M,Vs as Se,Wn as N,Ws as Ce,Zd as we,_r as Te,br as Ee,ci as P,ei as F,gr as De,jd as I,qs as Oe,vr as ke,wd as L,xr as Ae,yn as R,yr as je,zd as z,zs as Me,zu as Ne}from"./src-Cjqv1L1_.js";import{t as B}from"./i18n-CWf2gqjI.js";import{t as V}from"./useTranslation-BJr-n0es.js";import{O as Pe,T as Fe,pr as Ie,yr as Le}from"./index-s2JBApLj.js";import{t as Re}from"./AdminSectionedPage-O0ffiJOS.js";import{t as H}from"./AdminPage-BmoKOToB.js";import{t as ze}from"./NodeAddonsSettingsPanel-Ccww7SgZ.js";import{t as Be}from"./AddonAssetIcon-Do54wTZ7.js";s();var Ve={detection:`border-green-500`,detector:`border-green-500`,streaming:`border-blue-500`,decode:`border-blue-500`,decoder:`border-blue-500`,recording:`border-orange-500`,recorder:`border-orange-500`,transcoding:`border-purple-500`,transcoder:`border-purple-500`,restream:`border-cyan-500`,restreamer:`border-cyan-500`,storage:`border-yellow-500`,notification:`border-pink-500`,notifier:`border-pink-500`,faces:`border-indigo-500`},He={detection:`bg-green-500/5`,detector:`bg-green-500/5`,streaming:`bg-blue-500/5`,decode:`bg-blue-500/5`,decoder:`bg-blue-500/5`,recording:`bg-orange-500/5`,recorder:`bg-orange-500/5`,transcoding:`bg-purple-500/5`,transcoder:`bg-purple-500/5`,restream:`bg-cyan-500/5`,restreamer:`bg-cyan-500/5`,storage:`bg-yellow-500/5`,notification:`bg-pink-500/5`,notifier:`bg-pink-500/5`,faces:`bg-indigo-500/5`};function Ue({entry:t,actions:n}){let i=t.name.toLowerCase(),a=Ve[i]??`border-primary`,o=He[i]??`bg-primary/5`,s=t.providers.find(e=>e.active),c=n?.pendingCapability===t.name;return e(`div`,{className:`rounded-lg border-t-2 border border-border ${a} ${o} p-3 space-y-2`,children:[e(`div`,{className:`flex items-center justify-between gap-2`,children:[e(`span`,{className:`text-xs font-semibold text-foreground capitalize flex items-center gap-1.5`,children:[t.name,c&&r(C,{className:`h-3 w-3 animate-spin text-primary`})]}),r(`span`,{className:`rounded-full px-2 py-0.5 text-[10px] font-medium ${t.mode===`singleton`?`bg-primary/10 text-primary`:`bg-info/10 text-info`}`,children:t.mode})]}),t.mode===`singleton`?r(We,{entry:t,actions:n,activeProvider:s,isPending:c}):r(Ge,{entry:t,actions:n,isPending:c})]})}function We({entry:t,actions:n,activeProvider:i,isPending:a}){let{t:o}=V();if(!n)return r(`div`,{children:i?e(`div`,{className:`flex items-center gap-1.5 text-[10px] text-foreground`,children:[r(E,{className:`h-3 w-3 text-green-400 shrink-0`}),r(`span`,{className:`font-medium`,children:i.addonName}),r(`span`,{className:`rounded-full bg-green-500/10 text-green-400 px-1.5 py-0.5 font-medium ml-auto`,children:`ACTIVE`})]}):r(`div`,{className:`text-[10px] text-foreground-subtle italic`,children:o(`addons.capabilityMap.noActiveProvider`,`No active provider`)})});if(t.providers.length===0)return r(`div`,{className:`text-[10px] text-foreground-subtle italic`,children:o(`addons.capabilityMap.noProviders`,`No providers`)});let s=`__inherit__`;return e(`div`,{className:`space-y-2`,children:[r(`div`,{className:`space-y-1`,children:t.providers.map(i=>{let o=i.active;return e(`button`,{type:`button`,disabled:a||o,onClick:()=>n.onSelectSingleton(t.name,i.addonId),className:`flex w-full items-center gap-1.5 rounded px-1.5 py-1 text-[10px] text-left transition-colors ${o?`bg-green-500/10 text-foreground cursor-default`:`text-foreground-subtle hover:bg-surface-hover hover:text-foreground disabled:opacity-50`}`,children:[r(`span`,{className:`h-2.5 w-2.5 rounded-full border shrink-0 ${o?`border-green-400 bg-green-400`:`border-border`}`}),r(`span`,{className:`font-medium truncate`,children:i.addonName}),o&&r(`span`,{className:`rounded-full bg-green-500/10 text-green-400 px-1.5 py-0.5 font-medium ml-auto shrink-0`,children:`ACTIVE`})]},i.addonId)})}),t.perNode&&t.perNode.length>0&&r(`div`,{className:`space-y-2 pt-1 border-t border-border/40`,children:t.perNode.map(i=>{let c=i.hasOverride&&i.resolvedActive?i.resolvedActive:s,l=[{value:s,label:i.resolvedActive?o(`addons.capabilityMap.inheritGlobalWith`,{provider:i.resolvedActive}):o(`addons.capabilityMap.inheritGlobal`)},...i.providers.map(e=>({value:e,label:e}))],u=e=>{e===s?n.onClearNodeSingleton(t.name,i.nodeId):n.onSelectNodeSingleton(t.name,i.nodeId,e)},d=a;return e(`div`,{className:`space-y-0.5`,children:[e(`div`,{className:`text-[9px] font-semibold uppercase tracking-widest text-foreground-subtle/60 px-1.5`,children:[i.nodeId,i.hasOverride&&r(`span`,{className:`ml-1.5 rounded-full bg-primary/10 text-primary px-1 py-0.5 normal-case tracking-normal font-medium`,children:o(`common.override`)})]}),l.map(t=>{let n=c===t.value;return e(`button`,{type:`button`,disabled:d||n,onClick:()=>u(t.value),className:`flex w-full items-center gap-1.5 rounded px-1.5 py-1 text-[10px] text-left transition-colors ${n?`bg-green-500/10 text-foreground cursor-default`:`text-foreground-subtle hover:bg-surface-hover hover:text-foreground disabled:opacity-50`}`,children:[r(`span`,{className:`h-2.5 w-2.5 rounded-full border shrink-0 ${n?`border-green-400 bg-green-400`:`border-border`}`}),r(`span`,{className:`font-medium truncate`,children:t.label}),n&&t.value!==s&&r(`span`,{className:`rounded-full bg-green-500/10 text-green-400 px-1.5 py-0.5 font-medium ml-auto shrink-0`,children:`ACTIVE`})]},t.value)})]},i.nodeId)})})]})}function Ge({entry:t,actions:n,isPending:i}){let{t:a}=V();if(t.providers.length===0)return r(`div`,{className:`text-[10px] text-foreground-subtle italic`,children:a(`addons.capabilityMap.noProviders`,`No providers`)});if(!n)return r(`div`,{className:`space-y-1`,children:t.providers.map(t=>e(`div`,{className:`flex items-center justify-between gap-2 text-[10px]`,children:[r(`span`,{className:`text-foreground-subtle`,children:t.addonName}),t.active&&r(`span`,{className:`rounded-full bg-green-500/10 text-green-400 px-1.5 py-0.5 font-medium`,children:`ACTIVE`})]},t.addonId))});let o=t.providers.filter(e=>e.active).map(e=>e.addonId),s=(e,r)=>{let i=r?[...new Set([...o,e])]:o.filter(t=>t!==e);n.onToggleCollection(t.name,i)};return r(`div`,{className:`space-y-1`,children:t.providers.map(t=>e(`label`,{className:`flex items-center justify-between gap-2 text-[10px] rounded px-1.5 py-1 transition-colors ${i?`opacity-50`:`hover:bg-surface-hover cursor-pointer`}`,children:[e(`span`,{className:`flex items-center gap-1.5 min-w-0`,children:[r(`input`,{type:`checkbox`,checked:t.active,disabled:i,onChange:e=>s(t.addonId,e.target.checked),className:`h-3 w-3 accent-green-500 shrink-0`}),r(`span`,{className:`text-foreground truncate`,children:t.addonName})]}),t.active&&r(`span`,{className:`rounded-full bg-green-500/10 text-green-400 px-1.5 py-0.5 font-medium shrink-0`,children:`ACTIVE`})]},t.addonId))})}function U({capabilities:e,actions:t}){let{t:n}=V();return e.length===0?r(`div`,{className:`text-xs text-foreground-subtle text-center py-8`,children:n(`addons.capabilityMap.noCapabilitiesRegistered`,`No capabilities registered`)}):r(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-3`,children:e.map(e=>r(Ue,{entry:e,actions:t},e.name))})}var W=[`capabilities`,`listCapabilities`];function Ke(e){return e===`singleton`||e===`collection`}function qe(e){let t=e.indexOf(`@`);return t===-1?B.t(`system.capabilities.providerHub`,{addonId:e}):`${e.slice(0,t)} (${e.slice(t+1)})`}function Je(e,t){return{name:e.name,mode:t,providers:e.providers.map(n=>({addonId:n,addonName:qe(n),active:t===`singleton`?e.activeProvider===n:!e.disabledProviders.includes(n)})),...t===`singleton`&&e.perNode?{perNode:e.perNode}:{}}}function Ye(){let{t:n}=V(),i=S(),[s,c]=a(null),[u,d]=a(null),f=o({queryKey:W,queryFn:()=>i.trpcClient.capabilities.listCapabilities.query()}),p=t(()=>{let e=(f.data??[]).flatMap(e=>Ke(e.mode)?[Je(e,e.mode)]:[]),t=e.filter(e=>e.mode===`singleton`).toSorted((e,t)=>e.name.localeCompare(t.name)),n=e.filter(e=>e.mode===`collection`).toSorted((e,t)=>e.name.localeCompare(t.name));return[...t,...n]},[f.data]),m=t(()=>p.filter(e=>e.mode===`singleton`),[p]),h=t(()=>p.filter(e=>e.mode===`collection`),[p]),g=l({mutationFn:e=>i.trpcClient.capabilities.setActiveSingleton.mutate({capability:e.capName,addonId:e.addonId}),onMutate:e=>{c(e.capName),d(null)},onSuccess:async(e,t)=>{d({kind:`success`,message:n(`system.capabilities.isNowActive`,`{{capName}} → {{addonId}} is now active.`,{capName:t.capName,addonId:t.addonId})}),await f.refetch()},onError:(e,t)=>{d({kind:`error`,message:n(`system.capabilities.failedToSet`,{cap:t.capName,error:e instanceof Error?e.message:n(`common.unknownError`)})})},onSettled:()=>c(null)}),v=l({mutationFn:e=>i.trpcClient.capabilities.setActiveSingleton.mutate({capability:e.capName,addonId:e.addonId,nodeId:e.nodeId}),onMutate:e=>{c(e.capName),d(null)},onSuccess:async(e,t)=>{d({kind:`success`,message:`${t.capName} @ ${t.nodeId} → ${t.addonId}.`}),await f.refetch()},onError:(e,t)=>{d({kind:`error`,message:n(`system.capabilities.failedToSetOnNode`,{cap:t.capName,node:t.nodeId,error:e instanceof Error?e.message:n(`common.unknownError`)})})},onSettled:()=>c(null)}),y=l({mutationFn:e=>i.trpcClient.capabilities.clearSingletonNodeOverride.mutate({capability:e.capName,nodeId:e.nodeId}),onMutate:e=>{c(e.capName),d(null)},onSuccess:async(e,t)=>{d({kind:`success`,message:n(`system.capabilities.nowInheritsTheGlobalDefault`,`{{capName}} @ {{nodeId}} now inherits the global default.`,{capName:t.capName,nodeId:t.nodeId})}),await f.refetch()},onError:(e,t)=>{d({kind:`error`,message:n(`system.capabilities.failedToClearOnNode`,{cap:t.capName,node:t.nodeId,error:e instanceof Error?e.message:n(`common.unknownError`)})})},onSettled:()=>c(null)}),b=l({mutationFn:e=>i.trpcClient.capabilities.setCollectionEnabledProviders.mutate({capability:e.capName,enabledAddonIds:[...e.enabledAddonIds]}),onMutate:e=>{c(e.capName),d(null)},onSuccess:async(e,t)=>{d({kind:`success`,message:n(`system.capabilities.providerSEnabled`,`{{capName}}: {{length}} provider(s) enabled.`,{capName:t.capName,length:t.enabledAddonIds.length})}),await f.refetch()},onError:(e,t)=>{d({kind:`error`,message:n(`system.capabilities.failedToUpdate`,{cap:t.capName,error:e instanceof Error?e.message:n(`common.unknownError`)})})},onSettled:()=>c(null)}),x={onSelectSingleton:(e,t)=>g.mutate({capName:e,addonId:t}),onSelectNodeSingleton:(e,t,n)=>v.mutate({capName:e,nodeId:t,addonId:n}),onClearNodeSingleton:(e,t)=>y.mutate({capName:e,nodeId:t}),onToggleCollection:(e,t)=>b.mutate({capName:e,enabledAddonIds:t}),pendingCapability:s};return e(H,{embedded:!0,icon:ne,title:n(`system.capabilities.capabilities`,`Capabilities`),subtitle:n(`system.capabilities.chooseWhichProviderIsActive`,`Choose which provider is active for each system capability. Singleton caps pick exactly one provider; collection caps enable a set.`),children:[u&&e(`div`,{className:`flex items-center gap-2 rounded-md border px-3 py-2 text-xs ${u.kind===`success`?`border-success/30 bg-success/10 text-success`:`border-danger/40 bg-danger/10 text-danger`}`,children:[u.kind===`success`?r(E,{className:`h-3.5 w-3.5 shrink-0`}):r(_,{className:`h-3.5 w-3.5 shrink-0`}),r(`span`,{children:u.message})]}),f.isLoading&&r(`div`,{className:`flex items-center justify-center py-16`,children:r(`div`,{className:`animate-spin h-6 w-6 border-2 border-primary border-t-transparent rounded-full`})}),f.isError&&!f.isLoading&&r(le,{title:n(`system.capabilities.failedToLoadCapabilities`,`Failed to load capabilities`),message:f.error instanceof Error?f.error.message:n(`system.capabilities.unknownError`,`Unknown error`),onRetry:()=>void f.refetch()}),!f.isLoading&&!f.isError&&p.length===0&&r(`div`,{className:`text-xs text-foreground-subtle text-center py-16`,children:n(`system.capabilities.noCapabilitiesRegistered`,`No capabilities registered.`)}),!f.isLoading&&!f.isError&&p.length>0&&e(`div`,{className:`space-y-6`,children:[m.length>0&&e(`section`,{className:`space-y-2`,children:[r(`h2`,{className:`text-[11px] font-semibold uppercase tracking-widest text-foreground-subtle/70`,children:n(`system.capabilities.singletonPickOneProvider`,`Singleton — pick one provider`)}),r(U,{capabilities:m,actions:x})]}),h.length>0&&e(`section`,{className:`space-y-2`,children:[r(`h2`,{className:`text-[11px] font-semibold uppercase tracking-widest text-foreground-subtle/70`,children:n(`system.capabilities.collectionEnableASet`,`Collection — enable a set`)}),r(U,{capabilities:h,actions:x})]})]})]})}var G=[`locked`,`reset`,`shares-backup`,`recovery-key`,`rotation-pending`,`orphans`],Xe={"key-missing":`helpers.keychainNotices.lockedKeyMissing`,"wrong-key":`helpers.keychainNotices.lockedWrongKey`,"key-file-unreadable":`helpers.keychainNotices.lockedKeyFileUnreadable`,"store-unavailable":`helpers.keychainNotices.lockedStoreUnavailable`,"not-initialized":`helpers.keychainNotices.lockedNotInitialized`,"decrypt-failed":`helpers.keychainNotices.lockedDecryptFailed`};function Ze(e){let t=Xe[e];return t===void 0?e:B.t(t)}function Qe({status:e,reset:t,pendingReentry:n,orphans:r}){let i=e.keychain.state===`locked`,a=e.keySource??e.configuredSource,o=[];return e.keychain.state===`locked`&&o.push({id:`locked`,tone:`danger`,title:B.t(`helpers.keychainNotices.locked`,{reason:Ze(e.keychain.reason)})}),t!==null&&t.acknowledgedAt===null&&o.push({id:`reset`,tone:`danger`,title:n>0?B.t(`helpers.keychainNotices.resetPending`,{count:n}):B.t(`helpers.keychainNotices.resetDone`)}),a.sharesBackupWithDatabase&&o.push({id:`shares-backup`,tone:`warning`,title:B.t(`helpers.keychainNotices.sharesBackup`)}),!i&&e.recoveryKeyDownloadedAt===null&&o.push({id:`recovery-key`,tone:`warning`,title:B.t(`helpers.keychainNotices.recoveryKey`)}),!i&&e.rotationPending&&o.push({id:`rotation-pending`,tone:`info`,title:B.t(`helpers.keychainNotices.rotationPending`)}),!i&&r>0&&o.push({id:`orphans`,tone:`info`,title:B.t(`helpers.keychainNotices.orphans`,{count:r})}),[...o].sort((e,t)=>G.indexOf(e.id)-G.indexOf(t.id))}var $e={dateStyle:`short`,timeStyle:`short`};function K(e){return e===null?`—`:new Date(e).toLocaleString(void 0,$e)}function q({value:t,copyValue:n,srLabel:i,maxWidthClass:a,className:o}){let s=n??t;return e(`span`,{className:z(`flex min-w-0 items-center gap-0.5`,a),children:[r(`span`,{className:z(`min-w-0 truncate font-mono`,o),title:s,children:t}),r(R,{value:s,srLabel:i,className:`h-6 shrink-0 px-1.5`})]})}s();var et=new Set([`reveal`,`download-recovery-key`,`rotate-master-key`,`reset`]);function tt(e){return[{key:`at`,header:e(`system.keychainAuditTable.colWhen`),render:e=>K(e.at)},{key:`action`,header:e(`system.keychainAuditTable.colAction`),render:e=>r(P,{variant:et.has(e.action)?`warning`:`default`,children:e.action})},{key:`actor`,header:e(`system.keychainAuditTable.colActor`),render:e=>r(`span`,{className:`font-mono`,children:e.actor})},{key:`ref`,header:e(`system.keychainAuditTable.colRef`),render:e=>e.ref===null?r(`span`,{className:`text-foreground-subtle`,children:`—`}):r(q,{value:e.ref,srLabel:`secret ref`,maxWidthClass:`max-w-[22rem]`})},{key:`detail`,header:e(`system.keychainAuditTable.colDetail`),render:e=>r(`span`,{className:`text-foreground-muted`,children:e.detail??``})}]}function nt({entries:n}){let{t:i}=V(),[o,s]=a(0),c=t(()=>tt(i),[i]);if(n===void 0)return r(`p`,{className:`text-xs text-foreground-subtle`,children:i(`common.loading`,`Loading…`)});let l=Math.max(1,Math.ceil(n.length/25)),u=Math.min(o,l-1),d=u*25,m=n.slice(d,d+25);return e(`div`,{className:`space-y-2`,children:[r(O,{columns:c,rows:m,rowKey:e=>e.id,minWidthPx:760,emptyMessage:i(`secrets.keychainAuditTable.nothingHasBeenAuditedYet`,`Nothing has been audited yet.`)}),n.length>25&&e(`div`,{className:`flex flex-wrap items-center justify-between gap-2 text-[11px] text-foreground-subtle`,children:[r(`span`,{children:i(n.length>=500?`system.keychainAuditTable.rangeRecent`:`system.keychainAuditTable.range`,{from:d+1,to:d+m.length,total:n.length})}),e(`span`,{className:`inline-flex items-center gap-1`,children:[r(F,{size:`sm`,variant:`outline`,"aria-label":i(`secrets.keychainAuditTable.previousPage`,`Previous page`),disabled:u===0,onClick:()=>s(u-1),children:r(f,{className:`h-3.5 w-3.5`,"aria-hidden":!0})}),e(`span`,{className:`tabular-nums`,children:[u+1,` / `,l]}),r(F,{size:`sm`,variant:`outline`,"aria-label":i(`secrets.keychainAuditTable.nextPage`,`Next page`),disabled:u>=l-1,onClick:()=>s(u+1),children:r(p,{className:`h-3.5 w-3.5`,"aria-hidden":!0})})]})]})]})}function rt(e,t){switch(e){case`locked`:return r(F,{size:`sm`,variant:`danger`,disabled:t.busy,onClick:t.onReset,children:B.t(`secrets.keychainNoticeContent.resetKeychain`,`Reset keychain`)});case`reset`:return r(F,{size:`sm`,variant:`outline`,disabled:t.busy,onClick:t.onAcknowledgeReset,children:B.t(`secrets.keychainNoticeContent.dismiss`,`Dismiss`)});case`recovery-key`:return r(F,{size:`sm`,variant:`outline`,disabled:t.busy,onClick:t.onDownload,children:B.t(`secrets.keychainNoticeContent.download`,`Download`)});case`rotation-pending`:return r(F,{size:`sm`,variant:`outline`,disabled:t.busy,onClick:t.onRotate,children:B.t(`secrets.keychainNoticeContent.rotate`,`Rotate`)});case`orphans`:return r(F,{size:`sm`,variant:`outline`,onClick:t.onShowOrphans,children:B.t(`secrets.keychainNoticeContent.review`,`Review`)});case`shares-backup`:return null}}function it(e,t){switch(e){case`locked`:return r(`p`,{children:B.t(`secrets.keychainNoticeContent.noValueCanBeRead`,`No value can be read or stored. If the master key is lost for good, Reset archives every stored value and starts a new keychain; every secret field then reads “not set”.`)});case`reset`:return t.reset===null?null:r(at,{reset:t.reset,pending:t.pendingReentry});case`shares-backup`:return r(`p`,{children:r(Ie,{i18nKey:`secrets.keychainNoticeContent.backupKeyFile`,components:{code:r(`code`,{className:`font-mono`})}})});case`recovery-key`:return r(`p`,{children:B.t(`secrets.keychainNoticeContent.withoutACopyOfThe`,`Without a copy of the master key, the stored values cannot be recovered.`)});case`rotation-pending`:return r(`p`,{children:B.t(`secrets.keychainNoticeContent.theKeychainUnlockedWithA`,`The keychain unlocked with a previous key. Rotate to move onto the configured one.`)});case`orphans`:return null}}function at({reset:t,pending:n}){let{t:i}=V(),a=t.actor===`trigger-file`?i(`secrets.keychainNoticeContent.resetByTrigger`):i(`secrets.keychainNoticeContent.resetByAdmin`,{actor:t.actor});return e(`div`,{className:`space-y-1.5`,children:[r(`p`,{children:i(`secrets.keychainNoticeContent.resetDetail`,{when:K(t.at),by:a,archived:t.archived})}),n.length>0&&r(`ul`,{className:`max-h-40 space-y-0.5 overflow-y-auto rounded-md border border-border bg-background p-2 font-mono text-[11px] text-foreground`,children:n.map(t=>e(`li`,{className:`break-all`,children:[t.owner,` · `,t.scope,` · `,t.fieldPath]},t.ref))})]})}s();var ot=2,J={danger:{icon:ce,text:`text-danger`,border:`border-danger/40`},warning:{icon:oe,text:`text-warning`,border:`border-warning/40`},info:{icon:b,text:`text-info`,border:`border-border`}};function st({notices:t,renderAction:n,renderDetail:i}){let{t:o}=V(),[s,c]=a(!1),l=t[0];if(l===void 0)return null;let u=t.length>ot,d=u&&!s?t.slice(0,1):t,f=t.length-d.length;return e(`section`,{"aria-label":o(`secrets.keychainNotices.keychainNotices`,`Keychain notices`),className:z(`rounded-lg border bg-surface`,J[l.tone].border),children:[r(`ul`,{className:`divide-y divide-border`,children:d.map(e=>r(ct,{notice:e,action:n(e.id),detail:i(e.id)},e.id))}),u&&r(`div`,{className:`border-t border-border px-3 py-1`,children:e(F,{size:`sm`,variant:`ghost`,"aria-expanded":s,onClick:()=>c(e=>!e),children:[r(g,{className:z(`h-3.5 w-3.5 transition-transform`,s&&`rotate-180`),"aria-hidden":!0}),s?o(`secrets.keychainNotices.showLess`,`Show less`):o(`secrets.keychainNotices.more`,`{{hidden}} more`,{hidden:f})]})})]})}function ct({notice:t,action:n,detail:i}){let{t:o}=V(),[s,c]=a(!1),l=J[t.tone],u=l.icon,d=i!=null,f=`keychain-notice-${t.id}`;return e(`li`,{className:`px-3 py-2`,children:[e(`div`,{className:`flex flex-col gap-2 sm:flex-row sm:items-center sm:gap-3`,children:[e(`p`,{className:`flex min-w-0 flex-1 items-start gap-2 text-xs text-foreground`,children:[r(u,{className:z(`mt-0.5 h-3.5 w-3.5 shrink-0`,l.text),"aria-hidden":!0}),r(`span`,{className:`min-w-0 break-words`,children:t.title})]}),e(`div`,{className:`flex shrink-0 flex-wrap items-center gap-1.5 pl-5 sm:pl-0`,children:[d&&r(F,{size:`sm`,variant:`ghost`,"aria-expanded":s,"aria-controls":f,onClick:()=>c(e=>!e),children:o(`secrets.keychainNotices.details`,`Details`)}),n]})]}),d&&s&&r(`div`,{id:f,className:`mt-2 pl-5 text-xs text-foreground-muted`,children:i})]})}var lt={"config-file":`Key file (config.yaml)`,"previous-config-file":`Previous key file`,platform:`OS keychain`,"default-file":`Default key file (data volume)`},ut=8;function dt({status:t,busy:n,onDownload:i,onRotate:a,onPurge:o}){let{t:s}=V(),c=t.keychain.state===`locked`,l=t.keySource??t.configuredSource;return r(xe,{headingId:`keychain-status`,title:s(`secrets.keychainStatusCard.keychain`,`Keychain`),icon:D,actions:e(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[t.retiredWraps>0&&r(F,{size:`sm`,variant:`ghost`,disabled:n||c,onClick:o,children:s(`secrets.keychainStatusCard.purge`,{count:t.retiredWraps})}),r(F,{size:`sm`,variant:`outline`,disabled:n||c,onClick:a,children:s(`secrets.keychainStatusCard.rotateKey`,`Rotate key`)}),r(F,{size:`sm`,variant:`outline`,disabled:n||c,onClick:i,children:s(`secrets.keychainStatusCard.downloadRecoveryKey`,`Download recovery key`)})]}),children:e(`dl`,{className:`${d} grid grid-cols-1 gap-x-6 gap-y-3 sm:grid-cols-2 xl:grid-cols-4`,children:[e(Y,{label:s(`secrets.keychainStatusCard.state`,`State`),children:[c?e(P,{variant:`danger`,className:`gap-1`,children:[r(te,{className:`h-3 w-3`,"aria-hidden":!0}),s(`secrets.keychainStatusCard.locked`,`Locked`)]}):e(P,{variant:`success`,className:`gap-1`,children:[r(re,{className:`h-3 w-3`,"aria-hidden":!0}),s(`secrets.keychainStatusCard.unlocked`,`Unlocked`)]}),r(`span`,{className:`ml-2 text-foreground-subtle`,children:s(`common.stored`,{count:t.secretCount})})]}),e(Y,{label:s(`secrets.keychainStatusCard.keySource`,`Key source`),children:[r(`span`,{className:`block`,children:lt[l.kind]}),l.path!==void 0&&r(q,{value:l.path,srLabel:`key path`})]}),r(Y,{label:s(`secrets.keychainStatusCard.fingerprint`,`Fingerprint`),children:t.fingerprint===null?r(`span`,{className:`text-foreground-subtle`,children:`—`}):e(`span`,{className:`inline-flex items-center gap-0.5`,children:[r(`span`,{className:`font-mono`,title:t.fingerprint,children:t.fingerprint.slice(0,ut)}),r(R,{value:t.fingerprint,srLabel:`fingerprint`})]})}),r(Y,{label:s(`secrets.keychainStatusCard.recoveryKey`,`Recovery key`),children:t.recoveryKeyDownloadedAt===null?r(P,{variant:`warning`,children:s(`secrets.keychainStatusCard.notTaken`,`Not taken`)}):r(`span`,{children:s(`secrets.keychainStatusCard.taken`,{when:K(t.recoveryKeyDownloadedAt)})})})]})})}function Y({label:t,children:n}){return e(`div`,{className:`min-w-0 text-xs`,children:[r(`dt`,{className:`text-foreground-subtle`,children:t}),r(`dd`,{className:`mt-0.5 min-w-0 text-foreground`,children:n})]})}s();var ft=1e3;function pt({revealed:t,onClose:n}){let{t:o}=V(),[s,c]=a(L);i(()=>{if(t===null)return;let e=Date.now();c(L);let r=setTimeout(n,L),i=setInterval(()=>c(Math.max(0,L-(Date.now()-e))),ft);return()=>{clearTimeout(r),clearInterval(i)}},[t,n]);let l=Math.ceil(s/1e3);return r(De,{open:t!==null,onOpenChange:e=>!e&&n(),children:r(ke,{width:`lg`,placement:`sheet-on-mobile`,scroll:`body`,children:t!==null&&e(u,{children:[e(Ae,{children:[r(be,{className:`break-all`,children:t.entry.fieldPath}),e(je,{className:`break-all`,children:[t.entry.owner,` · `,t.entry.scope]})]}),r(Te,{children:r(`pre`,{"data-testid":`revealed-value`,className:`whitespace-pre-wrap break-all rounded-md border border-border bg-background p-3 font-mono text-xs text-foreground`,children:t.value})}),e(Ee,{className:`flex-col items-stretch gap-2 sm:flex-row sm:items-center sm:justify-between`,children:[r(`p`,{className:`text-[11px] text-foreground-subtle`,children:o(`secrets.revealDialog.recorded`,{seconds:l})}),e(`div`,{className:`flex justify-end gap-2`,children:[r(R,{value:t.value,label:o(`common.copy`,`Copy`),srLabel:`revealed value`}),r(F,{size:`sm`,variant:`outline`,onClick:n,children:o(`secrets.revealDialog.hide`,`Hide`)})]})]})]})})})}var X={orphan:{labelKey:`secrets.secretsTableState.usageOrphan`,variant:`warning`,hintKey:`secrets.secretsTableState.usageOrphanHint`,rank:0},unknown:{labelKey:`secrets.secretsTableState.usageUnknown`,variant:`default`,hintKey:`secrets.secretsTableState.usageUnknownHint`,rank:1},"in-use":{labelKey:`secrets.secretsTableState.usageInUse`,variant:`success`,hintKey:`secrets.secretsTableState.usageInUseHint`,rank:2}},mt=[{id:`all`,labelKey:`common.all`},{id:`in-use`,labelKey:`secrets.secretsTableState.usageInUse`},{id:`orphan`,labelKey:`secrets.secretsTableState.filterOrphans`},{id:`unknown`,labelKey:`secrets.secretsTableState.usageUnknown`}],Z=`system`;function ht(t){let{t:n}=V(),{secrets:i,filter:a,onFilterChange:o,onDeleteOrphans:s,deleting:c,locked:l}=t;if(i===void 0)return r(`p`,{className:`text-xs text-foreground-subtle`,children:n(`common.loading`,`Loading…`)});let u=e=>e===`all`?i.length:i.filter(t=>t.usage===e).length,d=i.filter(e=>e.usage===`orphan`).map(e=>e.ref),f=a===`all`?i:i.filter(e=>e.usage===a);return e(`div`,{className:`space-y-2`,children:[e(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[r(`div`,{className:`flex flex-wrap gap-1`,role:`group`,"aria-label":n(`secrets.secretsTable.filterByUsage`,`Filter by usage`),children:mt.map(t=>e(F,{size:`sm`,variant:a===t.id?`secondary`:`ghost`,"aria-pressed":a===t.id,className:a===t.id?`ring-1 ring-border`:void 0,onClick:()=>o(t.id),children:[n(t.labelKey),r(`span`,{className:`text-foreground-subtle tabular-nums`,children:u(t.id)})]},t.id))}),d.length>0&&e(F,{size:`sm`,variant:`outline`,className:`ml-auto`,disabled:c||l,onClick:()=>s(d),children:[r(h,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),n(`secrets.secretsTableState.deleteOrphans`,{count:d.length})]})]}),r(O,{columns:_t(t),rows:f,rowKey:e=>e.ref,minWidthPx:860,maxBodyHeight:ve,defaultSort:{columnKey:`owner`,dir:`asc`},emptyMessage:i.length===0?n(`secrets.secretsTable.noValueIsStoredIn`,`No value is stored in the keychain yet.`):n(`secrets.secretsTable.noStoredValueMatchesThis`,`No stored value matches this filter.`)})]})}function gt({owner:t}){let{t:n}=V();return e(`span`,{className:`flex items-center gap-2`,children:[r(Be,{addonId:t,fallback:t===Z?y:ee,tileClassName:`bg-surface-hover text-foreground-subtle`,size:`sm`}),r(`span`,{className:`font-medium`,children:t===Z?n(`secrets.secretsTable.hubSystem`,`Hub (system)`):t})]})}function _t({locked:t,onReveal:n,revealing:i}){return[{key:`owner`,header:B.t(`secrets.secretsTable.owner`,`Owner`),render:e=>r(gt,{owner:e.owner}),sortValue:e=>e.owner},{key:`scope`,header:B.t(`secrets.secretsTable.scope`,`Scope`),render:e=>r(`span`,{className:`block max-w-[11rem] truncate font-mono`,title:e.scope,children:e.scope}),sortValue:e=>e.scope},{key:`field`,header:B.t(`secrets.secretsTable.field`,`Field`),render:e=>r(q,{value:e.fieldPath,copyValue:e.ref,srLabel:`secret ref`,maxWidthClass:`max-w-[16rem]`}),sortValue:e=>e.fieldPath},{key:`updated`,header:B.t(`secrets.secretsTable.updated`,`Updated`),render:e=>K(e.updatedAt),sortValue:e=>e.updatedAt},{key:`last-read`,header:B.t(`secrets.secretsTable.lastRead`,`Last read`),render:e=>K(e.lastReadAt),sortValue:e=>e.lastReadAt},{key:`status`,header:B.t(`secrets.secretsTable.status`,`Status`),render:e=>r(P,{variant:X[e.usage].variant,title:B.t(X[e.usage].hintKey),children:B.t(X[e.usage].labelKey)}),sortValue:e=>X[e.usage].rank},{key:`actions`,header:``,align:`right`,notSortableReason:`Actions`,render:a=>e(F,{size:`sm`,variant:`ghost`,disabled:t||i,"aria-label":B.t(`secrets.secretsTable.reveal`,`Reveal {{fieldPath}}`,{fieldPath:a.fieldPath}),title:t?B.t(`secrets.secretsTable.theKeychainIsLocked`,`The keychain is locked`):B.t(`secrets.secretsTable.revealAudited`,`Reveal (audited)`),onClick:()=>n(a),children:[r(v,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),B.t(`secrets.secretsTable.reveal2`,`Reveal`)]})}]}function vt(e){return e instanceof Error?e.message:String(e)}function yt(e){let{t}=V(),n=ae(),r=T(),i=x(),a=ue(),o=Oe(),s=M(),c=Ce(),l=ye(),u=Me(),d=async(t,n)=>{try{await n()}catch(e){await r({title:t,message:vt(e),variant:`danger`})}e()};return{busy:a.isPending||o.isPending||s.isPending||c.isPending,deleting:u.isPending,download:async()=>{await n({title:t(`secrets.useKeychainActions.downloadTitle`),message:t(`secrets.useKeychainActions.downloadMessage`),confirmLabel:t(`secrets.useKeychainActions.downloadConfirm`),variant:`warning`})&&await d(t(`secrets.useKeychainActions.downloadRefused`),async()=>{let e=await a.mutateAsync({});await i({title:t(`secrets.useKeychainActions.recoveryTitle`,{fingerprint:e.fingerprint}),message:t(`secrets.useKeychainActions.recoveryMessage`),defaultValue:e.key,readOnly:!0,confirmLabel:t(`secrets.useKeychainActions.recoveryDone`)})})},rotate:async()=>{await n({title:t(`secrets.useKeychainActions.rotateTitle`),message:t(`secrets.useKeychainActions.rotateMessage`),confirmLabel:t(`secrets.useKeychainActions.rotateConfirm`),variant:`warning`})&&await d(t(`secrets.useKeychainActions.rotateRefused`),async()=>{let e=await o.mutateAsync({});await r({title:t(`secrets.useKeychainActions.rotatedTitle`),message:t(`secrets.useKeychainActions.rotatedMessage`,{fingerprint:e.fingerprint})})})},purge:async()=>{await n({title:t(`secrets.useKeychainActions.purgeTitle`),message:t(`secrets.useKeychainActions.purgeMessage`),confirmLabel:t(`secrets.useKeychainActions.purgeConfirm`),variant:`warning`})&&await d(t(`secrets.useKeychainActions.purgeRefused`),async()=>{await s.mutateAsync({})})},reset:async()=>{await i({title:t(`secrets.useKeychainActions.resetTitle`),message:t(`secrets.useKeychainActions.resetMessage`,{confirmation:`RESET KEYCHAIN`}),confirmLabel:t(`secrets.useKeychainActions.resetConfirm`),validate:e=>e===`RESET KEYCHAIN`?null:t(`secrets.useKeychainActions.resetMismatch`)})===`RESET KEYCHAIN`&&await d(t(`secrets.useKeychainActions.resetRefused`),async()=>{await c.mutateAsync({confirm:se})})},acknowledgeReset:async()=>{await d(t(`secrets.useKeychainActions.dismissFailed`),async()=>{await l.mutateAsync({})})},deleteOrphans:async e=>{await n({title:t(`secrets.useKeychainActions.orphansTitle`,{count:e.length}),message:t(`secrets.useKeychainActions.orphansMessage`),confirmLabel:t(`secrets.useKeychainActions.orphansConfirm`),variant:`danger`})&&await d(t(`secrets.useKeychainActions.orphansRefused`),async()=>{let n=await u.mutateAsync({refs:[...e]});n.kept.length>0&&await r({title:t(`secrets.useKeychainActions.keptTitle`),message:t(`secrets.useKeychainActions.keptMessage`,{deleted:n.deleted.length,kept:n.kept.length})})})}}}s();var Q=`view`;function bt(){let[e,t]=Le();return[e.get(Q)===`audit`?`audit`:`values`,n=>{let r=new URLSearchParams(e);n===`values`?r.delete(Q):r.set(Q,n),t(r,{replace:!0})}]}function xt(){let{t:i}=V(),o=ge({}),s=pe({}),c=Se({limit:500}),l=fe({}),u=_e(),d=T(),[f,p]=bt(),[m,h]=a(`all`),[g,_]=a(null),v=yt(()=>{o.refetch(),s.refetch(),c.refetch(),l.refetch()}),y=o.data?.keychain.state===`locked`,b=t(()=>(s.data??[]).filter(e=>e.usage===`orphan`).length,[s.data]),x=t(()=>o.data===void 0?[]:Qe({status:o.data,reset:l.data?.reset??null,pendingReentry:l.data?.pendingReentry.length??0,orphans:b}),[o.data,l.data,b]),S={reset:l.data?.reset??null,pendingReentry:l.data?.pendingReentry??[],busy:v.busy,onReset:()=>void v.reset(),onAcknowledgeReset:()=>void v.acknowledgeReset(),onDownload:()=>void v.download(),onRotate:()=>void v.rotate(),onShowOrphans:()=>{h(`orphan`),p(`values`)}},C=async e=>{try{_({entry:e,value:(await u.mutateAsync({ref:e.ref})).value}),s.refetch()}catch(e){await d({title:i(`admin.system.secrets.revealRefused`,`Reveal refused`),message:Pe(e),variant:`danger`})}},w=n(()=>_(null),[]);return e(H,{embedded:!0,icon:D,title:i(`admin.system.secrets.secrets`,`Secrets`),subtitle:i(`admin.system.secrets.passwordsTokensAndKeysEncrypted`,`Passwords, tokens and keys, encrypted in the hub keychain. Values leave the hub only through an audited reveal.`),children:[r(st,{notices:x,renderAction:e=>rt(e,S),renderDetail:e=>it(e,S)}),o.data!==void 0&&r(dt,{status:o.data,busy:v.busy,onDownload:S.onDownload,onRotate:S.onRotate,onPurge:()=>void v.purge()}),e(j,{value:f,onValueChange:e=>p(e===`audit`?`audit`:`values`),children:[e(de,{children:[r(k,{value:`values`,children:i(`admin.system.secrets.storedValues`,`Stored values`)}),r(k,{value:`audit`,children:i(`admin.system.secrets.audit`,`Audit`)})]}),r(N,{value:`values`,children:r(ht,{secrets:s.data,locked:y,filter:m,onFilterChange:h,onReveal:e=>void C(e),revealing:u.isPending,onDeleteOrphans:e=>void v.deleteOrphans(e),deleting:v.deleting})}),r(N,{value:`audit`,children:r(nt,{entries:c.data})})]}),r(pt,{revealed:g,onClose:w})]})}s();var St=[[`system`]];function $(e){return e.toFixed(6).replace(/0+$/,``).replace(/\.$/,``)}function Ct(){let{t}=V(),n=c(),o=Ne(),s=me(),l=he(),[u,d]=a(``),[f,p]=a(``),[h,g]=a(null),_=o.data?.location??null;i(()=>{d(_===null?``:$(_.latitude)),p(_===null?``:$(_.longitude))},[_]);let v=async()=>{await n.invalidateQueries({queryKey:St})},y=async e=>{e.preventDefault();let t=Number(u),n=Number(f);if(u.trim()===``||f.trim()===``){g(`Enter both a latitude and a longitude, or press Clear.`);return}if(!Number.isFinite(t)||t<-90||t>90){g(`Latitude must be between -90 and 90 decimal degrees.`);return}if(!Number.isFinite(n)||n<-180||n>180){g(`Longitude must be between -180 and 180 decimal degrees.`);return}g(null),await s.mutateAsync({latitude:t,longitude:n}),await v()},b=async()=>{g(null),await s.mutateAsync(null),await v()},x=async()=>{g(null),await l.mutateAsync(),await v()},S=s.isPending||l.isPending||o.isLoading;return e(A,{className:`space-y-3`,children:[e(`div`,{className:`flex items-start justify-between gap-3`,children:[e(`div`,{className:`flex items-start gap-2`,children:[r(ie,{className:`h-4 w-4 mt-0.5 text-muted-foreground shrink-0`}),r(`div`,{children:r(`h3`,{className:`text-sm font-medium`,children:t(`settings.siteLocationCard.siteLocation`,`Site location`)})})]}),_===null?r(P,{variant:`warning`,children:t(`settings.siteLocationCard.notConfigured`,`Not configured`)}):r(P,{variant:_.source===`operator-set`?`success`:`info`,children:_.source===`operator-set`?t(`settings.siteLocationCard.setByYou`,`Set by you`):t(`settings.siteLocationCard.derivedFromIp`,`Derived from IP`)})]}),_?.label!==void 0&&_.label!==``?r(`p`,{className:`text-xs text-muted-foreground`,children:t(`settings.siteLocationCard.detectedNear`,{place:_.label})}):null,_===null&&o.data?.derivationAttemptedAt!==null?e(`p`,{className:`text-xs text-warning`,children:[t(`settings.siteLocationCard.automaticDetectionFromThePublic`,`Automatic detection from the public IP did not succeed`),o.data?.derivationError!==null&&o.data?.derivationError!==void 0?`: ${o.data.derivationError}`:`.`,` `,t(`settings.siteLocationCard.itIsNotRetriedOn`,`It is not retried on its own — enter the coordinates, or press Detect.`)]}):null,e(`form`,{className:`flex flex-wrap items-end gap-3`,onSubmit:y,children:[e(`label`,{className:`flex flex-col gap-1 text-xs`,children:[r(`span`,{className:`text-muted-foreground`,children:t(`settings.siteLocationCard.latitude`,`Latitude`)}),r(I,{className:`w-40`,value:u,inputMode:`decimal`,placeholder:`40.851800`,onChange:e=>d(e.target.value),"aria-label":t(`settings.siteLocationCard.latitude`,`Latitude`)})]}),e(`label`,{className:`flex flex-col gap-1 text-xs`,children:[r(`span`,{className:`text-muted-foreground`,children:t(`settings.siteLocationCard.longitude`,`Longitude`)}),r(I,{className:`w-40`,value:f,inputMode:`decimal`,placeholder:`14.268100`,onChange:e=>p(e.target.value),"aria-label":t(`settings.siteLocationCard.longitude`,`Longitude`)})]}),r(F,{type:`submit`,disabled:S,children:t(`common.save`,`Save`)}),e(F,{type:`button`,variant:`ghost`,disabled:S,onClick:x,children:[r(m,{className:`h-3.5 w-3.5 mr-1`}),t(`settings.siteLocationCard.detectFromIp`,`Detect from IP`)]}),_===null?null:r(F,{type:`button`,variant:`ghost`,disabled:S,onClick:b,children:t(`settings.siteLocationCard.clear`,`Clear`)})]}),h===null?null:r(`p`,{className:`text-xs text-danger`,children:h}),r(`p`,{className:`text-xs text-muted-foreground`,children:t(`settings.siteLocationCard.wgs84DecimalDegreesDetectAsks`,`WGS84 decimal degrees. Detect asks a public geo-IP service once and will not overwrite a value you typed — clear it first.`)})]})}function wt(){let{t}=V(),{nodes:n,isLoading:i}=we(),a=n.find(e=>e.isHub&&e.isOnline),o=a?.addons.map(e=>e.addonId)??[];return e(H,{embedded:!0,children:[r(Ct,{}),i?r(`div`,{className:`text-muted-foreground text-sm py-12 text-center`,children:t(`admin.system.settings.loadingHubTopology`,`Loading hub topology…`)}):a?o.length===0?r(`div`,{className:`text-muted-foreground text-sm py-12 text-center`,children:t(`admin.system.settings.noAddonsInstalledOnThe`,`No addons installed on the hub yet.`)}):r(ze,{nodeId:a.id,addonIds:o,level:`global`}):e(`div`,{className:`flex flex-col items-center justify-center text-muted-foreground text-sm gap-2 py-12`,children:[r(w,{className:`h-8 w-8 opacity-30`}),r(`p`,{children:t(`admin.system.settings.noOnlineHubNodeFound`,`No online hub node found.`)}),r(`p`,{className:`text-xs`,children:t(`admin.system.settings.settingsWillAppearOnceThe`,`Settings will appear once the hub is reachable.`)})]})]})}function Tt(){let{t:e}=V(),t=Fe(`/system/settings`,{t:e,isAdmin:!0})??{icon:w,title:e(`system.systemNav`,`System`)};return r(Re,{icon:t.icon,title:t.title,defaultSection:`settings`,sectionsLabel:`${t.title} sections`,sections:[{id:`settings`,label:e(`system.system.settings`,`Settings`),content:r(wt,{})},{id:`secrets`,label:e(`system.system.secrets`,`Secrets`),content:r(xt,{}),ownedParams:[`view`]},{id:`capabilities`,label:e(`system.system.capabilities`,`Capabilities`),content:r(Ye,{})}]})}export{Tt as SystemPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{C as e,K as t,S as n,Y as r,et as i,o as a,x as o}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEyXHAdg.js";import{Fn as s,Ht as c,Vn as l,ea as u,ia as d,ii as f,na as p,ot as m,ra as h,st as g}from"./player-overlays-gMD_rhHz.js";import{Cr as _,Tr as v,hi as y,vr as b,wr as x,yr as S}from"./client-Btf9JC4a.js";import{l as C}from"./video-BnPjevi_.js";import{t as w}from"./shapes-w5Fgi2N8.js";import{Ad as T,Ar as E,Ct as D,Dn as O,Gu as ee,Hu as te,Md as k,Nr as ne,On as re,Sr as A,Td as j,Uu as M,Wu as ie,_r as N,br as ae,ci as oe,ei as P,gr as se,jd as F,jr as ce,nn as I,ri as le,vr as L,xr as R,xt as z}from"./src-D55o373U.js";import{t as B}from"./useTranslation-BJr-n0es.js";import{t as V}from"./AdminPage-Bjs-nytk.js";import{a as H,c as U,d as W,f as G,i as ue,l as K,m as q,n as de,o as fe,p as J,r as pe,s as me,t as he,u as ge}from"./RemoteGrid-BEi9hXEQ.js";i();var Y=`__custom__`;function X({value:t,onChange:i}){let{t:a}=B(),[o,c]=r(null),[l,u]=r(null),d=t.buttons.find(e=>e.id===o)??null,f=(e,t)=>{if(e.status===`ok`){u(null),i(e.grid),t?.(e.grid);return}u(a(`remote.layout.refusal.${e.reason}`))};return e(`div`,{className:`grid gap-4 md:grid-cols-[minmax(0,18rem)_minmax(0,1fr)]`,children:[e(`div`,{className:`space-y-3`,children:[e(`div`,{className:`grid grid-cols-2 gap-2`,children:[n(D,{label:a(`remote.layout.columns`),children:n(I,{value:t.columns,onDelta:e=>f(G(t,t.columns+e,t.rows))})}),n(D,{label:a(`remote.layout.rows`),children:n(I,{value:t.rows,onDelta:e=>f(G(t,t.columns,t.rows+e))})})]}),n(he,{grid:t,label:a(`remote.layout.previewLabel`),selectedId:o,onSelect:c,showEmptyCells:!0}),e(P,{variant:`outline`,size:`sm`,onClick:()=>f(pe(t,`ok`),e=>c(e.buttons.at(-1)?.id??null)),"data-testid":`remote-add-button`,children:[n(s,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),a(`remote.layout.addButton`)]}),l!==null&&n(`p`,{role:`alert`,className:`text-xs text-warning`,"data-testid":`remote-layout-refusal`,children:l})]}),n(`div`,{className:`min-w-0`,children:d===null?n(`p`,{className:`text-xs text-foreground-subtle`,children:a(`remote.layout.selectHint`)}):n(ve,{grid:t,buttonId:d.id,apply:f,onRemove:()=>{i(ge(t,d.id)),c(null),u(null)}})})]})}function _e(e){return[...de.flatMap(t=>U(t).map(n=>({value:n,label:e(`remote.role.${n}`,fe(n)),group:e(`remote.roleGroup.${t}`)}))),{value:Y,label:e(`remote.layout.customRole`),group:e(`remote.roleGroup.custom`)}]}function ve({grid:t,buttonId:i,apply:a,onRemove:o}){let{t:s}=B(),l=t.buttons.find(e=>e.id===i),f=l===void 0?null:_(l.role),[m,g]=r(null);if(l===void 0)return null;let b=me(l.role)||m!==null,S=m??f??``,C=v(S),E={trigger:s(`remote.layout.pickIcon`),panel:s(`remote.layout.iconPanel`),searchPlaceholder:s(`deviceDisplay.iconSearchPlaceholder`),clear:s(`remote.layout.noIcon`),noMatches:s(`deviceDisplay.iconNoMatches`)},O=e=>s(`deviceDisplay.iconCategory.${e}`,{defaultValue:y(e)});return e(`div`,{className:`space-y-3 rounded-lg border border-border bg-surface p-3`,"data-testid":`remote-inspector`,children:[n(le,{mode:`single`,singleDisplay:`field`,label:s(`remote.layout.role`),options:_e((e,t)=>s(e,t??e)),value:b?Y:l.role,onChange:e=>{if(e===Y){g(f??``);return}g(null),a(J(t,l.id,{role:e}))}}),b&&n(D,{label:s(`remote.layout.customKey`),...S!==``&&!C?{error:s(`remote.layout.customKeyInvalid`)}:{},children:n(T,{value:S,placeholder:`hdmi_1`,onChange:e=>{let n=e.target.value;g(n),v(n)&&a(J(t,l.id,{role:x(n)}))}})}),e(`div`,{className:`grid grid-cols-[auto_minmax(0,1fr)] items-end gap-2`,children:[n(D,{label:s(`remote.layout.icon`),children:n(k,{value:l.icon??null,onPick:e=>a(J(t,l.id,{icon:e})),fallbackGlyph:w,categoryLabel:O,labels:E})}),n(D,{label:s(`remote.layout.label`),children:n(T,{value:l.label??``,maxLength:40,onChange:e=>a(J(t,l.id,{label:e.target.value}))})})]}),e(`div`,{className:`grid grid-cols-2 gap-3`,children:[n(D,{label:s(`remote.layout.move`),children:e(`div`,{className:`flex items-center gap-1`,children:[n(F,{icon:h,size:`sm`,variant:`secondary`,"aria-label":s(`remote.layout.moveLeft`),onClick:()=>a(q(t,l.id,0,-1))}),n(F,{icon:u,size:`sm`,variant:`secondary`,"aria-label":s(`remote.layout.moveUp`),onClick:()=>a(q(t,l.id,-1,0))}),n(F,{icon:d,size:`sm`,variant:`secondary`,"aria-label":s(`remote.layout.moveDown`),onClick:()=>a(q(t,l.id,1,0))}),n(F,{icon:p,size:`sm`,variant:`secondary`,"aria-label":s(`remote.layout.moveRight`),onClick:()=>a(q(t,l.id,0,1))})]})}),n(D,{label:s(`remote.layout.position`),children:n(`p`,{className:`text-xs text-foreground-muted`,"data-testid":`remote-position`,children:s(`remote.layout.positionValue`,{row:l.row+1,col:l.col+1})})}),n(D,{label:s(`remote.layout.height`),children:n(I,{value:l.rowSpan,onDelta:e=>a(W(t,l.id,l.rowSpan+e,l.colSpan))})}),n(D,{label:s(`remote.layout.width`),children:n(I,{value:l.colSpan,onDelta:e=>a(W(t,l.id,l.rowSpan,l.colSpan+e))})})]}),e(P,{variant:`danger`,size:`sm`,onClick:o,children:[n(c,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),s(`remote.layout.removeButton`)]})]})}var ye={remote:{label:e=>e(`remote.templates.kind.remote`),emptyPayload:H,summary:(e,t)=>{let n=K(e);return t(`remote.templates.layoutSummary`,{columns:n.columns,rows:n.rows,count:n.buttons.length})},renderEditor:(e,t)=>n(X,{value:K(e),onChange:t}),isSavable:e=>ue(K(e))!==null}};function Z(e){return ye[e]}var Q=b;function be(e,t){let n=S(e,t);return n.ok?n.payload:null}i();function xe({draft:e,saving:t,error:r,onSave:i,onClose:a}){return n(se,{open:e!==null,onOpenChange:e=>!e&&a(),children:n(L,{width:`xl`,placement:`sheet-on-mobile`,scroll:`body`,children:e!==null&&n(Se,{draft:e,saving:t,error:r,onSave:i,onClose:a},e.id??`new`)})})}function Se({draft:t,saving:i,error:a,onSave:s,onClose:c}){let{t:l}=B(),[u,d]=r(t.kind),[f,p]=r(t.name),[m,h]=r(t.payload),g=Z(u),_=be(u,m),v=f.trim()!==``&&_!==null&&g.isSavable(m)&&!i;return e(o,{children:[n(R,{children:n(A,{children:t.id===null?l(`remote.templates.newTitle`):l(`remote.templates.editTitle`)})}),e(N,{className:`space-y-4`,children:[e(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[n(D,{label:l(`remote.templates.name`),children:n(T,{value:f,maxLength:120,onChange:e=>p(e.target.value),"data-testid":`template-name`})}),t.id===null&&Q.length>1&&n(D,{label:l(`remote.templates.kind.label`),children:n(j,{value:u,options:Q.map(e=>({value:e,label:Z(e).label(l)})),onChange:e=>{let t=Q.find(t=>t===e.target.value);t!==void 0&&(d(t),h(Z(t).emptyPayload()))}})})]}),g.renderEditor(m,h),a!==null&&n(`p`,{role:`alert`,className:`text-xs text-danger`,children:a})]}),e(ae,{children:[n(P,{variant:`ghost`,onClick:c,children:l(`common.cancel`)}),n(P,{disabled:!v,onClick:()=>s({id:t.id,kind:u,name:f.trim(),payload:_}),"data-testid":`template-save`,children:l(`common.save`)})]})]})}i();var $=b[0];function Ce(){let{t:i}=B(),o=a(),u=ie({}),d=te(),p=ee(),h=M(),_=g(),v=m(),[y,b]=r(null),[x,S]=r(null),w=()=>void o.invalidateQueries({queryKey:[[`template`]]}),T=async e=>{S(null);try{let t=e.id===null?await d.mutateAsync({kind:e.kind,name:e.name,payload:e.payload}):await p.mutateAsync({id:e.id,name:e.name,payload:e.payload});if(t.status===`refused`){S(t.detail);return}w(),b(null)}catch(e){S(e instanceof Error?e.message:String(e))}},D=async e=>{try{await d.mutateAsync({kind:e.kind,name:i(`remote.templates.copyName`,{name:e.name}),payload:e.payload}),w()}catch(e){await v({title:i(`remote.templates.duplicateFailed`),message:e instanceof Error?e.message:String(e),variant:`danger`})}},k=async e=>{if(await _({title:i(`remote.templates.deleteTitle`,{name:e.name}),message:i(`remote.templates.deleteMessage`),confirmLabel:i(`common.delete`),variant:`danger`}))try{let t=await h.mutateAsync({id:e.id});if(t.status===`in-use`){await v({title:i(`remote.templates.inUseTitle`,{name:e.name}),message:i(`remote.templates.inUseMessage`,{devices:t.devices.map(e=>e.name).join(`, `)}),variant:`warning`});return}w()}catch(e){await v({title:i(`remote.templates.deleteFailed`),message:e instanceof Error?e.message:String(e),variant:`danger`})}},A=t(()=>[{key:`name`,header:i(`remote.templates.name`),sortValue:e=>e.name.toLowerCase(),render:e=>n(`span`,{className:`font-medium text-foreground`,children:e.name})},{key:`kind`,header:i(`remote.templates.kind.label`),sortValue:e=>e.kind,render:e=>n(oe,{variant:`neutral`,children:Z(e.kind).label(i)})},{key:`summary`,header:i(`remote.templates.summary`),notSortableReason:`A sentence built from the payload.`,render:e=>n(`span`,{className:`text-foreground-muted`,children:Z(e.kind).summary(e.payload,i)})},{key:`updated`,header:i(`remote.templates.updated`),sortValue:e=>e.updatedAt,render:e=>n(`span`,{className:`text-foreground-muted`,children:new Date(e.updatedAt).toLocaleDateString()})},{key:`actions`,align:`right`,notSortableReason:`Row actions.`,render:e=>n(z,{title:i(`remote.templates.actionsFor`,{name:e.name}),items:[{id:`edit`,label:i(`common.edit`),icon:l,onClick:()=>{S(null),b({id:e.id,kind:e.kind,name:e.name,payload:e.payload})}},{id:`duplicate`,label:i(`remote.templates.duplicate`),icon:f,onClick:()=>void D(e)},{id:`delete`,label:i(`common.delete`),icon:c,danger:!0,onClick:()=>void k(e)}]})}],[i]),j=u.data??[],N=()=>{S(null),b({id:null,kind:$,name:``,payload:Z($).emptyPayload()})};return e(V,{icon:C,title:i(`remote.templates.title`),subtitle:i(`remote.templates.subtitle`),actions:e(P,{size:`sm`,onClick:N,"data-testid":`template-new`,children:[n(s,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),i(`remote.templates.new`)]}),children:[u.status===`error`?n(E,{title:i(`remote.templates.loadFailed`),message:u.error.message,onRetry:()=>void u.refetch()}):u.data===void 0?n(ne,{className:`h-32 w-full`}):j.length===0?n(ce,{icon:C,title:i(`remote.templates.emptyTitle`),description:i(`remote.templates.emptyDescription`),action:n(P,{size:`sm`,onClick:N,children:i(`remote.templates.new`)})}):n(O,{columns:A,rows:j,rowKey:e=>e.id,maxBodyHeight:re,defaultSort:{columnKey:`name`,dir:`asc`},onRowClick:e=>{S(null),b({id:e.id,kind:e.kind,name:e.name,payload:e.payload})}}),n(xe,{draft:y,saving:d.isPending||p.isPending,error:x,onSave:e=>void T(e),onClose:()=>b(null)})]})}export{Ce as TemplatesPage};
|
|
1
|
+
import{C as e,K as t,S as n,Y as r,et as i,o as a,x as o}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CEyXHAdg.js";import{Fn as s,Ht as c,Vn as l,ea as u,ia as d,ii as f,na as p,ot as m,ra as h,st as g}from"./player-overlays-Cl9fdVyE.js";import{Cr as _,Tr as v,hi as y,vr as b,wr as x,yr as S}from"./client-BmfSvq-t.js";import{l as C}from"./video-BbvU47vV.js";import{t as w}from"./shapes-DGstG7DR.js";import{Ar as T,Ct as E,Dn as D,Ed as O,Gu as ee,Ku as te,Md as k,Nd as A,Nr as ne,On as re,Sr as j,Uu as M,Wu as ie,_r as N,br as ae,ci as oe,ei as P,gr as se,jd as F,jr as ce,nn as I,ri as le,vr as L,xr as R,xt as z}from"./src-Cjqv1L1_.js";import{t as B}from"./useTranslation-BJr-n0es.js";import{t as V}from"./AdminPage-BmoKOToB.js";import{a as H,c as U,d as W,f as G,i as ue,l as K,m as q,n as de,o as fe,p as J,r as pe,s as me,t as he,u as ge}from"./RemoteGrid-BC7RcI7j.js";i();var Y=`__custom__`;function X({value:t,onChange:i}){let{t:a}=B(),[o,c]=r(null),[l,u]=r(null),d=t.buttons.find(e=>e.id===o)??null,f=(e,t)=>{if(e.status===`ok`){u(null),i(e.grid),t?.(e.grid);return}u(a(`remote.layout.refusal.${e.reason}`))};return e(`div`,{className:`grid gap-4 md:grid-cols-[minmax(0,18rem)_minmax(0,1fr)]`,children:[e(`div`,{className:`space-y-3`,children:[e(`div`,{className:`grid grid-cols-2 gap-2`,children:[n(E,{label:a(`remote.layout.columns`),children:n(I,{value:t.columns,onDelta:e=>f(G(t,t.columns+e,t.rows))})}),n(E,{label:a(`remote.layout.rows`),children:n(I,{value:t.rows,onDelta:e=>f(G(t,t.columns,t.rows+e))})})]}),n(he,{grid:t,label:a(`remote.layout.previewLabel`),selectedId:o,onSelect:c,showEmptyCells:!0}),e(P,{variant:`outline`,size:`sm`,onClick:()=>f(pe(t,`ok`),e=>c(e.buttons.at(-1)?.id??null)),"data-testid":`remote-add-button`,children:[n(s,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),a(`remote.layout.addButton`)]}),l!==null&&n(`p`,{role:`alert`,className:`text-xs text-warning`,"data-testid":`remote-layout-refusal`,children:l})]}),n(`div`,{className:`min-w-0`,children:d===null?n(`p`,{className:`text-xs text-foreground-subtle`,children:a(`remote.layout.selectHint`)}):n(ve,{grid:t,buttonId:d.id,apply:f,onRemove:()=>{i(ge(t,d.id)),c(null),u(null)}})})]})}function _e(e){return[...de.flatMap(t=>U(t).map(n=>({value:n,label:e(`remote.role.${n}`,fe(n)),group:e(`remote.roleGroup.${t}`)}))),{value:Y,label:e(`remote.layout.customRole`),group:e(`remote.roleGroup.custom`)}]}function ve({grid:t,buttonId:i,apply:a,onRemove:o}){let{t:s}=B(),l=t.buttons.find(e=>e.id===i),f=l===void 0?null:_(l.role),[m,g]=r(null);if(l===void 0)return null;let b=me(l.role)||m!==null,S=m??f??``,C=v(S),T={trigger:s(`remote.layout.pickIcon`),panel:s(`remote.layout.iconPanel`),searchPlaceholder:s(`deviceDisplay.iconSearchPlaceholder`),clear:s(`remote.layout.noIcon`),noMatches:s(`deviceDisplay.iconNoMatches`)},D=e=>s(`deviceDisplay.iconCategory.${e}`,{defaultValue:y(e)});return e(`div`,{className:`space-y-3 rounded-lg border border-border bg-surface p-3`,"data-testid":`remote-inspector`,children:[n(le,{mode:`single`,singleDisplay:`field`,label:s(`remote.layout.role`),options:_e((e,t)=>s(e,t??e)),value:b?Y:l.role,onChange:e=>{if(e===Y){g(f??``);return}g(null),a(J(t,l.id,{role:e}))}}),b&&n(E,{label:s(`remote.layout.customKey`),...S!==``&&!C?{error:s(`remote.layout.customKeyInvalid`)}:{},children:n(F,{value:S,placeholder:`hdmi_1`,onChange:e=>{let n=e.target.value;g(n),v(n)&&a(J(t,l.id,{role:x(n)}))}})}),e(`div`,{className:`grid grid-cols-[auto_minmax(0,1fr)] items-end gap-2`,children:[n(E,{label:s(`remote.layout.icon`),children:n(A,{value:l.icon??null,onPick:e=>a(J(t,l.id,{icon:e})),fallbackGlyph:w,categoryLabel:D,labels:T})}),n(E,{label:s(`remote.layout.label`),children:n(F,{value:l.label??``,maxLength:40,onChange:e=>a(J(t,l.id,{label:e.target.value}))})})]}),e(`div`,{className:`grid grid-cols-2 gap-3`,children:[n(E,{label:s(`remote.layout.move`),children:e(`div`,{className:`flex items-center gap-1`,children:[n(k,{icon:h,size:`sm`,variant:`secondary`,"aria-label":s(`remote.layout.moveLeft`),onClick:()=>a(q(t,l.id,0,-1))}),n(k,{icon:u,size:`sm`,variant:`secondary`,"aria-label":s(`remote.layout.moveUp`),onClick:()=>a(q(t,l.id,-1,0))}),n(k,{icon:d,size:`sm`,variant:`secondary`,"aria-label":s(`remote.layout.moveDown`),onClick:()=>a(q(t,l.id,1,0))}),n(k,{icon:p,size:`sm`,variant:`secondary`,"aria-label":s(`remote.layout.moveRight`),onClick:()=>a(q(t,l.id,0,1))})]})}),n(E,{label:s(`remote.layout.position`),children:n(`p`,{className:`text-xs text-foreground-muted`,"data-testid":`remote-position`,children:s(`remote.layout.positionValue`,{row:l.row+1,col:l.col+1})})}),n(E,{label:s(`remote.layout.height`),children:n(I,{value:l.rowSpan,onDelta:e=>a(W(t,l.id,l.rowSpan+e,l.colSpan))})}),n(E,{label:s(`remote.layout.width`),children:n(I,{value:l.colSpan,onDelta:e=>a(W(t,l.id,l.rowSpan,l.colSpan+e))})})]}),e(P,{variant:`danger`,size:`sm`,onClick:o,children:[n(c,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),s(`remote.layout.removeButton`)]})]})}var ye={remote:{label:e=>e(`remote.templates.kind.remote`),emptyPayload:H,summary:(e,t)=>{let n=K(e);return t(`remote.templates.layoutSummary`,{columns:n.columns,rows:n.rows,count:n.buttons.length})},renderEditor:(e,t)=>n(X,{value:K(e),onChange:t}),isSavable:e=>ue(K(e))!==null}};function Z(e){return ye[e]}var Q=b;function be(e,t){let n=S(e,t);return n.ok?n.payload:null}i();function xe({draft:e,saving:t,error:r,onSave:i,onClose:a}){return n(se,{open:e!==null,onOpenChange:e=>!e&&a(),children:n(L,{width:`xl`,placement:`sheet-on-mobile`,scroll:`body`,children:e!==null&&n(Se,{draft:e,saving:t,error:r,onSave:i,onClose:a},e.id??`new`)})})}function Se({draft:t,saving:i,error:a,onSave:s,onClose:c}){let{t:l}=B(),[u,d]=r(t.kind),[f,p]=r(t.name),[m,h]=r(t.payload),g=Z(u),_=be(u,m),v=f.trim()!==``&&_!==null&&g.isSavable(m)&&!i;return e(o,{children:[n(R,{children:n(j,{children:t.id===null?l(`remote.templates.newTitle`):l(`remote.templates.editTitle`)})}),e(N,{className:`space-y-4`,children:[e(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[n(E,{label:l(`remote.templates.name`),children:n(F,{value:f,maxLength:120,onChange:e=>p(e.target.value),"data-testid":`template-name`})}),t.id===null&&Q.length>1&&n(E,{label:l(`remote.templates.kind.label`),children:n(O,{value:u,options:Q.map(e=>({value:e,label:Z(e).label(l)})),onChange:e=>{let t=Q.find(t=>t===e.target.value);t!==void 0&&(d(t),h(Z(t).emptyPayload()))}})})]}),g.renderEditor(m,h),a!==null&&n(`p`,{role:`alert`,className:`text-xs text-danger`,children:a})]}),e(ae,{children:[n(P,{variant:`ghost`,onClick:c,children:l(`common.cancel`)}),n(P,{disabled:!v,onClick:()=>s({id:t.id,kind:u,name:f.trim(),payload:_}),"data-testid":`template-save`,children:l(`common.save`)})]})]})}i();var $=b[0];function Ce(){let{t:i}=B(),o=a(),u=ee({}),d=M(),p=te(),h=ie(),_=g(),v=m(),[y,b]=r(null),[x,S]=r(null),w=()=>void o.invalidateQueries({queryKey:[[`template`]]}),E=async e=>{S(null);try{let t=e.id===null?await d.mutateAsync({kind:e.kind,name:e.name,payload:e.payload}):await p.mutateAsync({id:e.id,name:e.name,payload:e.payload});if(t.status===`refused`){S(t.detail);return}w(),b(null)}catch(e){S(e instanceof Error?e.message:String(e))}},O=async e=>{try{await d.mutateAsync({kind:e.kind,name:i(`remote.templates.copyName`,{name:e.name}),payload:e.payload}),w()}catch(e){await v({title:i(`remote.templates.duplicateFailed`),message:e instanceof Error?e.message:String(e),variant:`danger`})}},k=async e=>{if(await _({title:i(`remote.templates.deleteTitle`,{name:e.name}),message:i(`remote.templates.deleteMessage`),confirmLabel:i(`common.delete`),variant:`danger`}))try{let t=await h.mutateAsync({id:e.id});if(t.status===`in-use`){await v({title:i(`remote.templates.inUseTitle`,{name:e.name}),message:i(`remote.templates.inUseMessage`,{devices:t.devices.map(e=>e.name).join(`, `)}),variant:`warning`});return}w()}catch(e){await v({title:i(`remote.templates.deleteFailed`),message:e instanceof Error?e.message:String(e),variant:`danger`})}},A=t(()=>[{key:`name`,header:i(`remote.templates.name`),sortValue:e=>e.name.toLowerCase(),render:e=>n(`span`,{className:`font-medium text-foreground`,children:e.name})},{key:`kind`,header:i(`remote.templates.kind.label`),sortValue:e=>e.kind,render:e=>n(oe,{variant:`neutral`,children:Z(e.kind).label(i)})},{key:`summary`,header:i(`remote.templates.summary`),notSortableReason:`A sentence built from the payload.`,render:e=>n(`span`,{className:`text-foreground-muted`,children:Z(e.kind).summary(e.payload,i)})},{key:`updated`,header:i(`remote.templates.updated`),sortValue:e=>e.updatedAt,render:e=>n(`span`,{className:`text-foreground-muted`,children:new Date(e.updatedAt).toLocaleDateString()})},{key:`actions`,align:`right`,notSortableReason:`Row actions.`,render:e=>n(z,{title:i(`remote.templates.actionsFor`,{name:e.name}),items:[{id:`edit`,label:i(`common.edit`),icon:l,onClick:()=>{S(null),b({id:e.id,kind:e.kind,name:e.name,payload:e.payload})}},{id:`duplicate`,label:i(`remote.templates.duplicate`),icon:f,onClick:()=>void O(e)},{id:`delete`,label:i(`common.delete`),icon:c,danger:!0,onClick:()=>void k(e)}]})}],[i]),j=u.data??[],N=()=>{S(null),b({id:null,kind:$,name:``,payload:Z($).emptyPayload()})};return e(V,{icon:C,title:i(`remote.templates.title`),subtitle:i(`remote.templates.subtitle`),actions:e(P,{size:`sm`,onClick:N,"data-testid":`template-new`,children:[n(s,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),i(`remote.templates.new`)]}),children:[u.status===`error`?n(T,{title:i(`remote.templates.loadFailed`),message:u.error.message,onRetry:()=>void u.refetch()}):u.data===void 0?n(ne,{className:`h-32 w-full`}):j.length===0?n(ce,{icon:C,title:i(`remote.templates.emptyTitle`),description:i(`remote.templates.emptyDescription`),action:n(P,{size:`sm`,onClick:N,children:i(`remote.templates.new`)})}):n(D,{columns:A,rows:j,rowKey:e=>e.id,maxBodyHeight:re,defaultSort:{columnKey:`name`,dir:`asc`},onRowClick:e=>{S(null),b({id:e.id,kind:e.kind,name:e.name,payload:e.payload})}}),n(xe,{draft:y,saving:d.isPending||p.isPending,error:x,onSave:e=>void E(e),onClose:()=>b(null)})]})}export{Ce as TemplatesPage};
|