@camstack/addon-admin-ui 1.2.523 → 1.2.524

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/assets/{AddonAssetIcon-VXnpNoSj.js → AddonAssetIcon-CYhJlTNc.js} +1 -1
  3. package/dist/assets/Addons-BRZelwav.js +5 -0
  4. package/dist/assets/{AdminPage-B9JLs4rT.js → AdminPage-B1Q3Lunl.js} +1 -1
  5. package/dist/assets/{AdminSectionedPage-EY_w3HY7.js → AdminSectionedPage-CDZfKkL5.js} +1 -1
  6. package/dist/assets/AiProfiles-DC8OxOmV.js +3 -0
  7. package/dist/assets/BrokerEditorDialog-BX5w7CMy.js +1 -0
  8. package/dist/assets/Build-BVaH843t.js +40 -0
  9. package/dist/assets/{Calendars-ClQsQ24o.js → Calendars-q3MUFOBU.js} +1 -1
  10. package/dist/assets/Cluster-BKvY1r-a.js +1 -0
  11. package/dist/assets/ComposedDeviceEditDialog-BLfm22uf.js +1 -0
  12. package/dist/assets/CompositionBlockEditor-CJhCzXua.js +2 -0
  13. package/dist/assets/{CompositionEditorPage-NlrSqavW.js → CompositionEditorPage-dOMxAK9V.js} +1 -1
  14. package/dist/assets/Data-BVPL4yIo.js +2 -0
  15. package/dist/assets/DeviceDetail-BO5_O1mV.js +2 -0
  16. package/dist/assets/{DeviceDoActionFields-CSKUhZmq.js → DeviceDoActionFields-B50ODgPq.js} +1 -1
  17. package/dist/assets/{Devices-DtEGEpYK.js → Devices-CrdlW5-A.js} +1 -1
  18. package/dist/assets/{EmbedPlayerPage-Er_9ZZbp.js → EmbedPlayerPage-JBC0G-2I.js} +1 -1
  19. package/dist/assets/History-BP1mlcwA.js +1 -0
  20. package/dist/assets/Identity-CY_zYbdN.js +1 -0
  21. package/dist/assets/IntegrationDetail-DCjuDqWm.js +1 -0
  22. package/dist/assets/IntegrationHub-DE2mwBdj.js +1 -0
  23. package/dist/assets/Integrations-BmHL7d-i.js +1 -0
  24. package/dist/assets/Integrations-CKAi9srg.js +1 -0
  25. package/dist/assets/{Library-CWzUsm1c.js → Library-BrWQ54N7.js} +1 -1
  26. package/dist/assets/Locations-3qWlGxP3.js +3 -0
  27. package/dist/assets/{Logs-CkwhOBrz.js → Logs-DYi_B3vg.js} +1 -1
  28. package/dist/assets/{MaskShapeCanvas-B_J8Nub8.js → MaskShapeCanvas-D8Ke0Dim.js} +1 -1
  29. package/dist/assets/{MotionZonesSettings-DSDOgPiK.js → MotionZonesSettings--YqW3Onz.js} +1 -1
  30. package/dist/assets/MyAccess-DswPvXxB.js +2 -0
  31. package/dist/assets/Network-ChYmByS2.js +1 -0
  32. package/dist/assets/{NodeAddonsSettingsPanel-CNSfsu26.js → NodeAddonsSettingsPanel-DtvhgNC4.js} +1 -1
  33. package/dist/assets/Notifications-5onsUC_w.js +1 -0
  34. package/dist/assets/Pipeline-CgmB5Be8.js +1 -0
  35. package/dist/assets/{PrivacyMaskSettings-Zr9fXd19.js → PrivacyMaskSettings-B-vpuYKA.js} +1 -1
  36. package/dist/assets/Recordings-Bglrn4rQ.js +1 -0
  37. package/dist/assets/RemoteGrid-C_9BszV-.js +1 -0
  38. package/dist/assets/{ScanNetworkModal-BO8EFEZ1.js → ScanNetworkModal-BnhOMFd1.js} +1 -1
  39. package/dist/assets/{SceneMonitorEditor-CvqEBzUw.js → SceneMonitorEditor-CkaBEtmE.js} +1 -1
  40. package/dist/assets/SessionsList--FQem8XB.js +2 -0
  41. package/dist/assets/{Showroom-ClQBf_59.js → Showroom-B9J1IdLQ.js} +1 -1
  42. package/dist/assets/{System-d-rVWfA6.js → System-BVE97mrs.js} +1 -1
  43. package/dist/assets/Templates-CvoAkIdF.js +1 -0
  44. package/dist/assets/{Terminal-dvCiPiu7.js → Terminal-ieNh6d83.js} +5 -5
  45. package/dist/assets/{Viewer-D04RI6WE.js → Viewer-CAf7sAU0.js} +1 -1
  46. package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-CO8DU_dY.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-Bi1zqe4S.js} +1 -1
  47. package/dist/assets/{addon-icons-context-BsBIxYDH.js → addon-icons-context-RPiI9H0L.js} +1 -1
  48. package/dist/assets/{archive-Do2e48DU.js → archive-DQvuyIac.js} +1 -1
  49. package/dist/assets/{assignment-candidates-8RM__6oC.js → assignment-candidates-83kFfE1Z.js} +1 -1
  50. package/dist/assets/{authed-media-BYa-9dIZ.js → authed-media-BSoR_xYF.js} +1 -1
  51. package/dist/assets/{bell-off-RPYQoGP1.js → bell-off-C3u183tq.js} +1 -1
  52. package/dist/assets/{board-model-C9BgTio0.js → board-model-sARab1AV.js} +1 -1
  53. package/dist/assets/{boxes-BEverhi4.js → boxes-CVkAEP7e.js} +1 -1
  54. package/dist/assets/circle-slash-C86XHeiD.js +1 -0
  55. package/dist/assets/client-DcvpIFoh.js +674 -0
  56. package/dist/assets/{cloud-upload-nVfWiPdO.js → cloud-upload-CHQjI4ZF.js} +1 -1
  57. package/dist/assets/crop-Ct8elLRy.js +1 -0
  58. package/dist/assets/{device-integration-icon-C2pH_5Gl.js → device-integration-icon-DCuiIOlj.js} +1 -1
  59. package/dist/assets/device-picker-model-BvJkcx-a.js +1 -0
  60. package/dist/assets/{dist-BVH-vBQM.js → dist-B5lzpDFY.js} +1 -1
  61. package/dist/assets/{dist-ByEQfnSV.js → dist-BSrNHoV1.js} +1 -1
  62. package/dist/assets/{file-up-CUjXrmMK.js → file-up-C9_pj2VT.js} +1 -1
  63. package/dist/assets/{format-BccZ2tds.js → format-DGQA45Ye.js} +1 -1
  64. package/dist/assets/grip-vertical-C_VoFjYu.js +1 -0
  65. package/dist/assets/{hard-drive-download-DiXdli_I.js → hard-drive-download-DiC0khcq.js} +1 -1
  66. package/dist/assets/{hostInit-Bta217FF.js → hostInit-Dq6hIrVo.js} +1 -1
  67. package/dist/assets/{i18n-COiZcYwm.js → i18n-C-H4BlYV.js} +1 -1
  68. package/dist/assets/icons-C7pfBl-Q.js +1 -0
  69. package/dist/assets/index-DjwiZ7qT.css +2 -0
  70. package/dist/assets/index-o6kBNilE.js +4 -0
  71. package/dist/assets/{key-C0PivC5X.js → key-Cz6uvkUc.js} +1 -1
  72. package/dist/assets/{key-round-Cu5Tucyk.js → key-round-B9WTP907.js} +1 -1
  73. package/dist/assets/{layers-Cd1UYZNk.js → layers-DGMlfnn4.js} +1 -1
  74. package/dist/assets/{linked-devices-model-CFrDp7fw.js → linked-devices-model-D6PgoQtW.js} +1 -1
  75. package/dist/assets/{list-ordered-Bkr6PCeB.js → list-ordered-wHEw5a_e.js} +1 -1
  76. package/dist/assets/location-owned-usage-B-4MuD-Z.js +1 -0
  77. package/dist/assets/{log-in-DV8GfIgr.js → log-in-Da7IGp_j.js} +1 -1
  78. package/dist/assets/{memory-stick-C6TRN6ht.js → memory-stick-BLbgKSl7.js} +1 -1
  79. package/dist/assets/{message-square-plus-DTJ5QsLH.js → message-square-plus-CMdSHNUk.js} +1 -1
  80. package/dist/assets/{mf-entry-bootstrap-0-c0dc6497.js → mf-entry-bootstrap-0-e016a0f6.js} +2 -2
  81. package/dist/assets/{mic-off-gUMH3Z4J.js → mic-off-CIzR-elk.js} +1 -1
  82. package/dist/assets/{monitor-off-C4w1KSTZ.js → monitor-off-lToaeJ-K.js} +1 -1
  83. package/dist/assets/{monitor-smartphone-CpCqKvAV.js → monitor-smartphone-Dr1ELple.js} +1 -1
  84. package/dist/assets/mount-BvJkcx-a.js +1 -0
  85. package/dist/assets/{player-overlays-CZbAbeZY.js → player-overlays-oTS1TZZY.js} +1 -1
  86. package/dist/assets/{recycle-BaznD-UX.js → recycle-BNUPyJ7u.js} +1 -1
  87. package/dist/assets/remoteEntry-BK4ei3jy.js +1 -0
  88. package/dist/assets/{ruler-BSo-rKM0.js → ruler-CvDT4Z7Y.js} +1 -1
  89. package/dist/assets/{scan-eye-DN1vlvLP.js → scan-eye-BhxGMB3E.js} +1 -1
  90. package/dist/assets/{scissors-CC58_qMU.js → scissors-C-pdrglA.js} +1 -1
  91. package/dist/assets/{search-x-tQuhnR8q.js → search-x-wBrdZZXu.js} +1 -1
  92. package/dist/assets/{send-CAZEgHzo.js → send-D5hwnH6i.js} +1 -1
  93. package/dist/assets/{settings-2-BuBH9G2o.js → settings-2-D64sFGFI.js} +1 -1
  94. package/dist/assets/{shapes-D2hlOKTD.js → shapes-HTfCvSL2.js} +1 -1
  95. package/dist/assets/{sigma-Ceyn_S95.js → sigma-BYdS13dc.js} +1 -1
  96. package/dist/assets/{speaker-BRYEJSzP.js → speaker-DCCyafUF.js} +1 -1
  97. package/dist/assets/src-XEHc18wE.js +67 -0
  98. package/dist/assets/{step-inspector-model-BfR3NdqL.js → step-inspector-model-a05i0m0c.js} +1 -1
  99. package/dist/assets/{table-2-CuSc759e.js → table-2-BgDon14h.js} +1 -1
  100. package/dist/assets/{timer-reset-Bvn2aK40.js → timer-reset-Dst_i1Qg.js} +1 -1
  101. package/dist/assets/{unlink-BU_py8I2.js → unlink-CmmNdYky.js} +1 -1
  102. package/dist/assets/{usb-TZrC9eYC.js → usb-BCFcIAg4.js} +1 -1
  103. package/dist/assets/{use-device-bound-caps-CYR80PtH.js → use-device-bound-caps-CI6zlnII.js} +1 -1
  104. package/dist/assets/{use-scenes-feed-Ddftx740.js → use-scenes-feed-junBfGeR.js} +1 -1
  105. package/dist/assets/{use-stationary-objects-CJ3xxs43.js → use-stationary-objects-blP9Y5SS.js} +1 -1
  106. package/dist/assets/useEventInvalidation-BvJkcx-a.js +1 -0
  107. package/dist/assets/{useNodeUrlSelection-DNEz-JoD.js → useNodeUrlSelection-Cb470tqR.js} +1 -1
  108. package/dist/assets/user-round-D3ZUZuP3.js +1 -0
  109. package/dist/assets/{user-x-CYHlbR6F.js → user-x-891p2Gny.js} +1 -1
  110. package/dist/assets/{variable-BNQlwoos.js → variable-HM7A54CP.js} +1 -1
  111. package/dist/assets/{video-CrmOxhYy.js → video-Dx3E7zlj.js} +1 -1
  112. package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-Bucq-FfY.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-DHe9cBRl.js} +2 -2
  113. package/dist/index.html +10 -10
  114. package/dist/server/addon.js +43 -6
  115. package/package.json +1 -1
  116. package/dist/assets/Addons-DlINdzv0.js +0 -5
  117. package/dist/assets/AiProfiles-fuyzr8D4.js +0 -3
  118. package/dist/assets/BrokerEditorDialog-DoEQXizE.js +0 -1
  119. package/dist/assets/Build-CvZFLBc9.js +0 -40
  120. package/dist/assets/Cluster-D31IV0wr.js +0 -1
  121. package/dist/assets/ComposedDeviceEditDialog-Chymp38w.js +0 -1
  122. package/dist/assets/CompositionBlockEditor-CpPHLcVD.js +0 -2
  123. package/dist/assets/Data-BBsE7UVR.js +0 -2
  124. package/dist/assets/DeviceDetail-zZcKfcTs.js +0 -2
  125. package/dist/assets/History-DEuMaAFu.js +0 -1
  126. package/dist/assets/Identity-Bo-ulITU.js +0 -1
  127. package/dist/assets/IntegrationDetail-IopkO40B.js +0 -1
  128. package/dist/assets/IntegrationHub-CaKFrwmD.js +0 -1
  129. package/dist/assets/Integrations-B0XFfGvM.js +0 -1
  130. package/dist/assets/Integrations-DrmJI4oI.js +0 -1
  131. package/dist/assets/Locations-CUYgtHWg.js +0 -3
  132. package/dist/assets/MyAccess-kZWZLQ6w.js +0 -2
  133. package/dist/assets/Network-CsAvssW1.js +0 -1
  134. package/dist/assets/Notifications-eEXyaFax.js +0 -1
  135. package/dist/assets/Pipeline-CL-VwLPy.js +0 -1
  136. package/dist/assets/Recordings-BrITac0q.js +0 -1
  137. package/dist/assets/RemoteGrid-BGbiDThN.js +0 -1
  138. package/dist/assets/SessionsList-BkbXjQt1.js +0 -2
  139. package/dist/assets/Templates-BY9R_5lz.js +0 -1
  140. package/dist/assets/circle-slash-Bb_aa_QL.js +0 -1
  141. package/dist/assets/client-D-g0nOrC.js +0 -674
  142. package/dist/assets/crop-DVR1vsA9.js +0 -1
  143. package/dist/assets/device-picker-model-DBfk1Co5.js +0 -1
  144. package/dist/assets/icons-CDeaov6N.js +0 -1
  145. package/dist/assets/index-DnHMM2c9.css +0 -2
  146. package/dist/assets/index-Dqmlzvdc.js +0 -4
  147. package/dist/assets/location-owned-usage-E6eX4phu.js +0 -1
  148. package/dist/assets/mount-DBfk1Co5.js +0 -1
  149. package/dist/assets/remoteEntry-8jIMK97P.js +0 -1
  150. package/dist/assets/src-iRjUEwun.js +0 -67
  151. package/dist/assets/useEventInvalidation-DBfk1Co5.js +0 -1
  152. package/dist/assets/user-round-jCdxL4f8.js +0 -1
@@ -1,2 +0,0 @@
1
- import{C as e,J as t,K as n,R as r,S as i,V as a,Y as o,et as s}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 c,Ht as l,Wr as u,bi as d,ct as f,dt as p,fr as m,gt as h,ma as g,mn as _,pn as v,st as y}from"./player-overlays-CZbAbeZY.js";import{a as b,i as x,s as S}from"./video-CrmOxhYy.js";import{t as C}from"./key-round-Cu5Tucyk.js";import{Ar as w,Dn as T,Ed as E,Gn as D,Kn as O,Md as k,Mo as ee,On as A,Ot as j,Sr as M,Tn as te,Un as N,Yn as P,_n as F,_r as I,br as L,ci as R,ei as z,gr as B,gt as ne,hd as V,jd as H,li as re,lt as ie,mt as U,nf as W,ut as ae,vn as G,vr as K,xr as q,yn as oe,yr as se,zd as J}from"./src-iRjUEwun.js";import{t as Y}from"./i18n-COiZcYwm.js";import{t as X}from"./useTranslation-BJr-n0es.js";import{n as Z,pr as ce,rr as le,t as ue}from"./index-Dqmlzvdc.js";s();function de({id:t,title:n,icon:r,description:a,actions:o,tone:s=`default`,notice:l=null,onDismissNotice:u,children:d}){return i(te,{headingId:`access-${t}`,title:n,icon:r,actions:o,testId:`access-${t}`,children:e(`div`,{className:`${c} space-y-3`,children:[i(`div`,{className:J(`text-[11px] leading-relaxed`,s===`danger`?`rounded-md border border-danger/30 bg-danger/5 px-3 py-2 text-foreground`:`text-foreground-subtle`),children:a}),l!==null&&i(pe,{notice:l,onDismiss:u}),d]})})}var fe={success:{icon:d,line:`border-success/30 text-foreground`,mark:`text-success`},danger:{icon:x,line:`border-danger/40 text-danger`,mark:`text-danger`}};function pe({notice:t,onDismiss:n}){let{t:r}=X(),a=fe[t.tone],o=a.icon;return e(`div`,{role:t.tone===`danger`?`alert`:`status`,className:J(`flex items-start gap-2 rounded-md border bg-surface px-3 py-2 text-[11px]`,a.line),children:[i(o,{className:J(`mt-0.5 h-3.5 w-3.5 shrink-0`,a.mark),"aria-hidden":!0}),i(`span`,{className:`min-w-0 flex-1`,children:t.message}),n!==void 0&&i(k,{type:`button`,variant:`ghost`,size:`sm`,icon:h,"aria-label":r(`access.accessSection.dismiss`,`Dismiss`),onClick:n,className:`-my-1 h-5 w-5`})]})}function me(){let{data:e}=V();return n(()=>{let t=new Map;for(let n of e??[])t.set(n.id,n.username);return t},[e])}function he(e,t=null){return e===null?t:{tone:`danger`,message:e}}var ge={active:`access.credentialColumns.statusActive`,expired:`access.credentialColumns.statusExpired`,revoked:`access.credentialColumns.statusRevoked`,current:`access.credentialColumns.statusCurrent`};function _e(e){return Y.t(ge[e])}var ve={active:`success`,expired:`warning`,revoked:`default`,current:`info`},ye={current:0,active:1,expired:2,revoked:3};function be(e,t){if(e===null)return t;let n=new Date(e);return Number.isNaN(n.getTime())?`—`:n.toLocaleString()}function xe({status:e}){return i(R,{variant:ve[e],className:`text-[10px]`,children:_e(e)})}function Se({row:t,action:n}){if(!n.isAvailable(t))return null;let r=n.icon,a=n.busyId===t.id;return e(z,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>n.onRun(t),disabled:n.disabled,"aria-label":Y.t(`access.credentialColumns.actionOn`,{action:n.label,name:t.name}),className:n.tone===`neutral`?void 0:`text-danger hover:bg-danger/10`,children:[a?i(m,{className:`h-3 w-3 animate-spin`,"aria-hidden":!0}):i(r,{className:`h-3 w-3`,"aria-hidden":!0}),n.label]})}function Ce(t){return[{key:`name`,header:Y.t(`access.credentialColumns.name`,`Name`),sortValue:e=>e.name.toLowerCase(),render:t=>e(`div`,{className:`min-w-0 max-w-[18rem]`,children:[i(`div`,{className:`truncate font-medium text-foreground`,title:t.name,children:t.name}),t.detail!==null&&i(`div`,{className:`truncate font-mono text-[10px] text-foreground-subtle`,title:t.detail,children:t.detail})]})},t.hideOwner?null:{key:`owner`,header:Y.t(`access.credentialColumns.owner`,`Owner`),sortValue:e=>e.ownerName.toLowerCase(),render:e=>e.ownerName},{key:`kind`,header:Y.t(`access.credentialColumns.kindScope`,`Kind / scope`),sortValue:e=>e.kind.toLowerCase(),nowrap:!1,render:t=>e(`div`,{className:`min-w-[8rem] max-w-[16rem]`,children:[i(`div`,{className:`text-foreground`,children:t.kind}),t.scope!==null&&i(`div`,{className:`line-clamp-2 text-[10px] text-foreground-subtle`,title:t.scope,children:t.scope})]})},{key:`status`,header:Y.t(`access.credentialColumns.status`,`Status`),sortValue:e=>ye[e.status],render:e=>i(xe,{status:e.status})},{key:`created`,header:Y.t(`access.credentialColumns.created`,`Created`),sortValue:e=>e.createdAt,render:e=>i(`span`,{className:`text-foreground-subtle`,children:be(e.createdAt,`—`)})},{key:`lastUsed`,header:Y.t(`access.credentialColumns.lastUsed`,`Last used`),sortValue:e=>e.lastUsedAt,render:e=>i(`span`,{className:`text-foreground-subtle`,children:be(e.lastUsedAt,Y.t(`access.credentialColumns.never`))})},{key:`expires`,header:Y.t(`access.credentialColumns.expires`,`Expires`),sortValue:e=>e.expiresAt,render:e=>i(`span`,{className:`text-foreground-subtle`,children:be(e.expiresAt,t.expiresNone)})},t.action===null?null:{key:`actions`,header:``,align:`right`,notSortableReason:Y.t(`access.credentialColumns.actionsHeader`),render:e=>i(`div`,{className:`flex items-center justify-end gap-1`,children:[...t.extraActions??[],t.action].map(t=>t===null?null:i(Se,{row:e,action:t},t.label))})}].filter(e=>e!==null)}s();var we=6,Te={"current-session":`access.bulk.skipCurrentSession`,"not-active":`access.bulk.skipNotActive`};function Ee(e){let t=Te[e];return t===void 0?e:Y.t(t)}function De(e,t){return Y.t(t.key,{count:e})}function Q(e,t){return Y.t(`access.bulk.countOf`,{count:e,noun:De(e,t)})}function Oe(e){let t=new Map;for(let n of e)t.set(n.status,(t.get(n.status)??0)+1);return[...t.entries()].map(([e,t])=>Y.t(`access.bulk.statusCount`,{count:t,status:_e(e).toLowerCase()})).join(`, `)}function ke(e,t){let n=e.slice(0,we).map(e=>`• ${e.name} — ${e.ownerName}`),r=e.length>we?[Y.t(`access.bulk.previewMore`,{count:e.length-we})]:[];return[Y.t(`access.bulk.previewIntro`,{what:Q(e.length,t),breakdown:Oe(e)}),``,...n,...r].join(`
2
- `)}async function Ae(e,t,n){let r=String(t.length),i=await e({title:Y.t(`access.bulk.confirmTitle`,{what:Q(t.length,n)}),message:ke(t,n),label:Y.t(`access.bulk.confirmLabel`,{expected:r}),placeholder:r,confirmLabel:Y.t(`access.bulk.confirmButton`,{expected:r}),variant:`danger`,validate:e=>e.trim()===r?null:Y.t(`access.bulk.confirmMismatch`,{expected:r,noun:De(2,n)})});return i!==null&&i.trim()===r}function je(e,t){let n=f(),r=W.auth.revokeCredentials.useMutation(),[i,a]=o(null);return{run:async i=>{if(i.length===0||!await Ae(n,i,e))return!1;a(null);try{let t=await r.mutateAsync({ids:i.map(e=>e.id),confirmCount:i.length}),n=t.skipped.map(e=>Ee(e.reason));return a({tone:`success`,message:n.length>0?Y.t(`access.bulk.revokedSkipped`,{what:Q(t.revoked.length,e),count:n.length,reasons:[...new Set(n)].join(`, `)}):Y.t(`access.bulk.revoked`,{what:Q(t.revoked.length,e)})}),!0}catch(e){return a({tone:`danger`,message:Y.t(`access.bulk.revokeFailed`,{error:e instanceof Error?e.message:Y.t(`access.bulk.requestFailed`)})}),!1}finally{t()}},busy:r.isPending,outcome:i,dismiss:()=>a(null)}}function Me(e,t,n){let r=f(),[i,a]=o(!1),[s,c]=o(null);return{run:async i=>{if(i.length===0||!await Ae(r,i,e))return!1;c(null),a(!0);let o=[],s=0;for(let e of i)try{await t(e.id),s+=1}catch(t){o.push(`${e.name}: ${t instanceof Error?t.message:Y.t(`access.bulk.requestFailed`)}`)}return a(!1),n(),o.length===0?(c({tone:`success`,message:Y.t(`access.bulk.revoked`,{what:Q(s,e)})}),!0):(c({tone:`danger`,message:Y.t(o.length>3?`access.bulk.eachPartialMore`:`access.bulk.eachPartial`,{what:Q(s,e),count:o.length,details:o.slice(0,3).join(`; `)})}),s>0)},busy:i,outcome:s,dismiss:()=>c(null)}}s();var Ne={searchText:e=>[e.name,e.detail??``,e.ownerName,e.kind,e.scope??``],facetGroups:[{id:`status`,value:e=>e.status},{id:`owner`,value:e=>e.ownerName},{id:`kind`,value:e=>e.kind}]},Pe={status:`access.credentialTable.groupStatus`,owner:`access.credentialTable.groupOwner`,kind:`access.credentialTable.groupKind`},Fe=e=>e.status!==`current`,Ie=[`active`,`current`];function Le({rows:t,label:r,isLoading:a,loadError:s,emptyText:c,hideOwner:l=!1,expiresNone:u,action:d,extraActions:f,bulk:p,defaultStatus:h=Ie}){let{t:g}=X(),[_]=o(()=>h.length===0?{search:``,facets:[]}:{search:``,facets:[],groups:{status:[...h]}}),v=F(t,Ne,_),[y,b]=o(()=>new Set),x=u??g(`access.credentialColumns.never`),S=n(()=>Ce({hideOwner:l,expiresNone:x,action:d??null,...f===void 0?{}:{extraActions:f}}),[l,x,d,f,g]),C=n(()=>p===void 0?()=>!1:e=>Fe(e)&&p.isSelectable(e),[p]),E=n(()=>v.rows.filter(e=>y.has(e.id)&&C(e)),[v.rows,y,C]);return a?e(`div`,{className:`flex items-center gap-2 py-4 text-xs text-foreground-subtle`,children:[i(m,{className:`h-3.5 w-3.5 animate-spin`,"aria-hidden":!0}),g(`access.credentialTable.loading`,{label:r})]}):s===null?e(`div`,{className:`space-y-3`,children:[i(G,{state:v.state,facets:v.facets,groups:v.groups.filter(e=>!(l&&e.id===`owner`)).map(e=>({...e,label:Pe[e.id]===void 0?e.id:g(Pe[e.id]),...e.id===`status`?{facetLabel:e=>_e(e)}:{}})),labels:{searchPlaceholder:g(`access.credentialTable.searchPlaceholder`,{label:r}),searchLabel:g(`access.credentialTable.searchLabel`,{label:r}),facetsLabel:g(`access.credentialTable.facetsLabel`,{label:r}),clearLabel:g(`access.credentialTable.clearFilters`)},onSearch:v.setSearch,onToggleFacet:v.toggleFacet,onToggleGroupFacet:v.toggleGroupFacet,onClear:v.clear}),p!==void 0&&i(Re,{bulk:p,shown:v.rows.filter(C),targets:E,onSelect:b}),i(T,{columns:S,rows:v.rows,rowKey:e=>e.id,minWidthPx:l?760:860,maxBodyHeight:A,defaultSort:{columnKey:`created`,dir:`desc`},pageSize:25,paginationLabels:{navLabel:g(`access.credentialTable.pagesLabel`,{label:r}),previous:g(`access.credentialTable.previousPage`),next:g(`access.credentialTable.nextPage`),range:(e,t,n)=>g(`access.credentialTable.range`,{from:e,to:t,total:n})},emptyMessage:v.active?g(`access.credentialTable.noMatchTheFilters`,`No {{label}} match the filters.`,{label:r}):c,rowClassName:e=>e.status===`revoked`||e.status===`expired`?`opacity-70`:void 0,...p===void 0?{}:{selection:{selected:y,onChange:b,isSelectable:C,rowLabel:e=>g(`access.credentialTable.rowLabel`,{name:e.name,owner:e.ownerName}),pageLabel:g(`access.credentialTable.pageLabel`,{noun:De(1,p.noun)})}}})]}):i(w,{title:g(`access.credentialTable.couldNotLoad`,`Could not load {{label}}`,{label:r}),message:s})}function Re({bulk:t,shown:n,targets:r,onSelect:a}){let{t:o}=X(),{revoke:s,noun:c}=t,u=(t.quickSelect??[]).map(e=>({...e,rows:n.filter(e.match)})).filter(e=>e.rows.length>0),d=async()=>{await s.run(r)&&a(new Set)};return e(`div`,{className:`flex flex-wrap items-center gap-2`,"data-testid":`bulk-bar`,children:[n.length>0&&i(z,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>a(new Set(n.map(e=>e.id))),children:o(`access.credentialTable.selectAllShown`,{count:n.length})}),u.map(t=>e(z,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>a(new Set(t.rows.map(e=>e.id))),children:[t.label,` (`,String(t.rows.length),`)`]},t.label)),r.length>0&&e(`div`,{className:`ml-auto flex flex-wrap items-center gap-2`,children:[i(`span`,{className:`text-[11px] tabular-nums text-foreground`,"aria-live":`polite`,children:o(`access.credentialTable.selectedLabel`,{what:Q(r.length,c)})}),e(z,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>a(new Set),children:[i(h,{className:`h-3 w-3`,"aria-hidden":!0}),o(`access.credentialTable.clearSelection`,`Clear selection`)]}),e(z,{type:`button`,variant:`danger`,size:`sm`,disabled:s.busy,onClick:()=>void d(),children:[s.busy?i(m,{className:`h-3 w-3 animate-spin`,"aria-hidden":!0}):i(l,{className:`h-3 w-3`,"aria-hidden":!0}),o(`access.credentialTable.revoke`,{what:Q(r.length,c)})]})]})]})}var ze=(e,t)=>t===null?`—`:e.get(t)??t;function Be(e,t){return e!=null&&e<=t?`expired`:`active`}function Ve(e,t,n){return{id:e.id,name:n.client(e.client),detail:e.ip,ownerId:e.userId,ownerName:ze(t,e.userId),kind:n.method(e.method),scope:null,status:e.current?`current`:`active`,createdAt:e.createdAt,lastUsedAt:e.lastUsedAt,expiresAt:e.expiresAt}}function He(e,t){return{id:e.id,name:e.integrationId,detail:null,ownerId:e.userId,ownerName:e.username,kind:e.integrationId,scope:t,status:e.revokedAt===null?`active`:`revoked`,createdAt:e.createdAt,lastUsedAt:e.lastUsedAt,expiresAt:null}}var Ue=`All permissions`,We=`View link`,Ge=`Scoped`,Ke={"grid-view":`Grid`,"events-view":`Events`};function qe(e,t){return e.map(e=>t.get(e)??`#${String(e)}`).join(`, `)}function Je(e){return e!==`*`&&e.type===`share-view`&&`grant`in e}function Ye(e,t,n){return e===`*`?Ue:Je(e)?`${`${Ke[e.grant.kind]} view${e.grant.talk===!0?` + talk`:``}`}: ${qe(e.grant.deviceIds,t)}`:n(e)}function Xe(e){return e.includes(`*`)?Ue:e.some(Je)?We:Ge}function Ze(e,t,n,r){return{id:e.id,name:e.label,detail:null,ownerId:e.subjectId,ownerName:ze(t,e.subjectId),kind:Xe(e.scopes),scope:n,status:e.revokedAt===null?Be(e.expiresAt,r):`revoked`,createdAt:e.createdAt,lastUsedAt:e.lastUsedAt,expiresAt:e.expiresAt}}function Qe(e){return`${e.provider}\u0000${e.subject}`}function $e(e,t){return{id:Qe(e),name:e.label??e.subject,detail:e.issuer,ownerId:e.userId,ownerName:ze(t,e.userId),kind:e.provider,scope:null,status:`active`,createdAt:e.linkedAt,lastUsedAt:null,expiresAt:null}}var et=40,tt=[{test:/Electron\//,name:`CamStack desktop`},{test:/Edg(e|A|iOS)?\//,name:`Edge`},{test:/OPR\/|Opera/,name:`Opera`},{test:/Firefox\/|FxiOS\//,name:`Firefox`},{test:/Chrome\/|CriOS\//,name:`Chrome`},{test:/Version\/[\d.]+.*Safari\//,name:`Safari`}],nt=[{test:/iPhone/,name:`iPhone`},{test:/iPad/,name:`iPad`},{test:/Android/,name:`Android`},{test:/Mac OS X|Macintosh/,name:`macOS`},{test:/Windows/,name:`Windows`},{test:/CrOS/,name:`ChromeOS`},{test:/Linux/,name:`Linux`}],rt=[{test:/CFNetwork\/.*Darwin\//,name:`CamStack app on iOS`},{test:/^okhttp\//i,name:`CamStack app on Android`},{test:/^(node|undici)\b/i,name:`Script (Node.js)`},{test:/^curl\//i,name:`curl`}];function it(e,t){return e.find(e=>e.test.test(t))?.name??null}function at(e){return e.length<=et?e:`${e.slice(0,et)}…`}function ot(e){if(e===null||e.trim().length===0)return{label:Y.t(`helpers.sessionClient.unknownDevice`),raw:null};let t=e.trim(),n=it(rt,t);if(n!==null)return{label:n,raw:t};let r=it(tt,t),i=it(nt,t);return r!==null&&i!==null?{label:Y.t(`helpers.sessionClient.browserOnSystem`,{browser:r,system:i}),raw:t}:r===null?{label:at(t),raw:t}:{label:r,raw:t}}var st={password:`helpers.sessionClient.method.password`,passkey:`helpers.sessionClient.method.passkey`,sso:`helpers.sessionClient.method.sso`,handoff:`helpers.sessionClient.method.handoff`,exchange:`helpers.sessionClient.method.exchange`};function ct(e){let t=st[e];return t===void 0?e:Y.t(t)}function lt(e){if(e==null)return`—`;let t=new Date(e);return Number.isNaN(t.getTime())?`—`:t.toLocaleString()}s();function ut(e,t){return e instanceof Error&&e.message.length>0?e.message:t}function dt(n){let{t:a}=X(),s=p(),[c,l]=o(!1),[u,d]=o(``),[f,h]=o(null),[g,_]=o(null),v=t(null),y=r(e=>{v.current?.(e),v.current=null,l(!1),d(``),h(null),_(null)},[]),b=r(()=>new Promise(e=>{v.current?.(null),v.current=e,_(null),l(!0)}),[]),x=async()=>{h(`password`),_(null);try{let{reauthToken:e}=await s.reauthenticate({password:u});y(e)}catch(e){_(ut(e,`Password is incorrect`)),h(null)}},S=async()=>{h(`passkey`),_(null);try{let{optionsJSON:e}=await s.reauthBeginPasskey();if(!ue(e))throw Error(`passkey authentication options missing challenge`);let t=await Z({optionsJSON:e}),{reauthToken:n}=await s.reauthenticate({passkeyResponse:Object.fromEntries(Object.entries(t))});y(n)}catch(e){_(ut(e,`Passkey verification failed`)),h(null)}};return{requestProof:b,dialog:i(B,{open:c,onOpenChange:e=>!e&&y(null),children:e(K,{children:[e(q,{children:[i(M,{children:a(`auth.reauthDialog.confirmItSYou`,`Confirm it’s you`)}),i(se,{children:a(`auth.reauthDialog.needsPassword`,{action:n})})]}),e(`form`,{className:`space-y-3`,onSubmit:e=>{e.preventDefault(),u.length>0&&f===null&&x()},children:[i(H,{type:`password`,autoComplete:`current-password`,placeholder:a(`auth.reauthDialog.currentPassword`,`Current password`),value:u,onChange:e=>d(e.target.value),"aria-label":a(`auth.reauthDialog.currentPassword`,`Current password`)}),g!==null&&i(`p`,{role:`alert`,className:`text-xs text-danger`,children:g}),e(L,{className:`flex flex-wrap gap-2`,children:[e(z,{type:`button`,variant:`outline`,disabled:f!==null,onClick:()=>void S(),children:[f===`passkey`?i(m,{className:`h-4 w-4 animate-spin`}):i(C,{className:`h-4 w-4`}),a(`auth.reauthDialog.useAPasskey`,`Use a passkey`)]}),e(z,{type:`submit`,disabled:u.length===0||f!==null,children:[f===`password`&&i(m,{className:`h-4 w-4 animate-spin`}),a(`common.confirm`,`Confirm`)]})]})]})]})})}}function ft({token:t,label:n,onClose:r}){let{t:a}=X();return i(B,{open:!0,onOpenChange:e=>!e&&r(),children:e(K,{width:`md`,scroll:`body`,children:[i(q,{children:i(M,{children:a(`auth.tokenModals.token`,`Token: {{label}}`,{label:n})})}),e(I,{className:`space-y-3`,children:[i(`div`,{className:`rounded-md border border-warning/30 bg-warning/10 px-3 py-2 text-xs text-warning`,children:a(`auth.tokenModals.copyThisTokenNowOnce`,`Copy this token now. Once you close this dialog the secret cannot be displayed again.`)}),i(`div`,{className:`select-all break-all rounded-md border border-border bg-background p-2 font-mono text-[11px] text-foreground`,children:t})]}),e(L,{children:[i(oe,{value:t,label:a(`common.copy`,`Copy`),srLabel:`token`}),i(z,{type:`button`,variant:`primary`,size:`sm`,onClick:r,children:a(`auth.tokenModals.done`,`Done`)})]})]})})}var pt={token:`newToken`,scoped:`newScoped`,admin:`newAdmin`};s();var mt=80,$=86400,ht=[{value:`1`,seconds:$},{value:`7`,seconds:7*$},{value:`30`,seconds:30*$},{value:`90`,seconds:90*$},{value:`never`,seconds:`never`}],gt={type:`device-multiselect`,key:`cameras`,deviceFilter:{types:[`camera`]},maxItems:64},_t={type:`capability`,target:``,access:[`view`,`create`]};function vt({open:t,users:r,onClose:s,onSubmit:c,submitting:l,formError:d,awaitingProof:f}){let{t:p}=X(),h=g(),{user:y}=le(),b=y?.isAdmin===!0,x=b?null:y?.scopes??[],[S,w]=o(`scopes`),[T,k]=o(y?.id??``),[ee,A]=o(``),[j,M]=o([_t]),[te,F]=o([]),[I,L]=o(`grid-view`),[R,B]=o(!1),[V,U]=o(`30`);a(()=>{t||(w(`scopes`),k(y?.id??``),A(``),M([_t]),F([]),L(`grid-view`),B(!1),U(`30`))},[t,y?.id]),a(()=>{S!==`view-link`&&V===`never`&&U(`30`)},[S,V]);let W=n(()=>ht.filter(e=>e.seconds!==`never`||S===`view-link`).map(e=>({value:e.value,label:e.seconds===`never`?p(`access.createTokenModal.never`,`Never (until revoked)`):p(`access.createTokenModal.days`,{count:Number(e.value)})})),[S,p]),G=ee.trim(),K=S===`scopes`?ae(j,h):null,q=te.map(Number).filter(e=>Number.isInteger(e)&&e>=0),oe=ht.find(e=>e.value===V)?.seconds??30*$,se=()=>S===`all`?[`*`]:S===`view-link`?[{type:`share-view`,grant:{kind:I,deviceIds:q,...R?{talk:!0}:{}}}]:j,J=G.length>0&&G.length<=mt&&!l&&!f&&(S===`all`?b:S===`view-link`?q.length>0:j.length>0&&K===null),Y=()=>{if(!J)return;let e=b&&S!==`all`&&T!==``&&T!==y?.id;c({scopes:se(),expiresIn:oe,label:G,...e?{subjectId:T}:{}})},Z=S===`all`,ue=Z?_:v;return i(ne,{open:t,onClose:s,title:p(`access.createTokenModal.createToken`,`Create token`),icon:Z?_:C,error:d,width:`md`,testId:`create-token-dialog`,footer:e(z,{type:`button`,variant:Z?`danger`:`primary`,size:`sm`,onClick:Y,disabled:!J,"data-testid":`create-token-submit`,children:[l||f?i(m,{className:`h-3.5 w-3.5 animate-spin`,"aria-hidden":!0}):i(ue,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),p(`access.createTokenModal.issueToken`,`Issue token`)]}),children:e(`div`,{className:`space-y-3`,children:[e(`div`,{className:`space-y-1`,children:[i(P,{children:p(`access.createTokenModal.whatItMayDo`,`What it may do`)}),i(N,{appearance:`pills`,value:S,onValueChange:e=>{(e===`scopes`||e===`view-link`||e===`all`)&&w(e)},children:e(D,{"aria-label":p(`access.createTokenModal.whatItMayDo`,`What it may do`),children:[e(O,{value:`scopes`,"data-testid":`token-reach-scopes`,children:[i(v,{className:`h-3.5 w-3.5 shrink-0`,"aria-hidden":!0}),p(`access.createTokenModal.reachScopes`,`Scopes`)]}),e(O,{value:`view-link`,"data-testid":`token-reach-view-link`,children:[i(u,{className:`h-3.5 w-3.5 shrink-0`,"aria-hidden":!0}),p(`access.createTokenModal.reachViewLink`,`View link`)]}),b?e(O,{value:`all`,"data-testid":`token-reach-all`,children:[i(_,{className:`h-3.5 w-3.5 shrink-0`,"aria-hidden":!0}),p(`access.createTokenModal.reachAll`,`All permissions`)]}):null]})})]}),Z?i(`div`,{className:`space-y-1 rounded-md border border-danger/30 bg-danger/5 px-3 py-2 text-[11px] leading-relaxed text-foreground`,"data-testid":`admin-token-warning`,children:i(`p`,{children:i(ce,{i18nKey:`auth.adminTokenNoticeShort`,components:{strong:i(`strong`,{})}})})}):null,b&&S!==`all`&&r.length>1?e(`div`,{className:`space-y-1`,children:[i(P,{htmlFor:`token-user`,children:p(`access.createTokenModal.onBehalfOfUser`,`On behalf of user`)}),i(E,{id:`token-user`,value:T,onChange:e=>k(e.target.value),options:r.map(e=>({value:e.id,label:e.username}))})]}):null,e(`div`,{className:`space-y-1`,children:[i(P,{htmlFor:`token-name`,children:p(`access.createTokenModal.label`,`Label`)}),i(H,{id:`token-name`,value:ee,maxLength:mt,required:!0,onChange:e=>A(e.target.value),placeholder:S===`view-link`?`kitchen-wall`:`nightly-backup`,autoFocus:!0})]}),S===`scopes`?e(`div`,{className:`space-y-1`,children:[i(P,{children:p(`access.createTokenModal.scopes`,`Scopes`)}),i(ie,{value:j,onChange:M,clampToParent:x}),K&&i(`p`,{className:`text-[10px] text-danger`,children:K}),i(`p`,{className:`text-[10px] text-foreground-subtle`,children:p(`access.createTokenModal.eachScopePicksACap`,`Each scope picks a (cap or addon) target + one or more access flavours. The token can access ONLY what's listed.`)})]}):null,S===`view-link`?e(`div`,{className:`space-y-2`,"data-testid":`token-view-link`,children:[e(`div`,{className:`space-y-1`,children:[i(P,{children:p(`access.createTokenModal.cameras`,`Cameras`)}),i(re,{field:{...gt,label:p(`access.createTokenModal.cameras`,`Cameras`)},value:te,onChange:e=>F(Array.isArray(e)?e.filter(e=>typeof e==`string`):[])})]}),e(`div`,{className:`space-y-1`,children:[i(P,{htmlFor:`token-view-kind`,children:p(`access.createTokenModal.viewKind`,`Shows`)}),i(E,{id:`token-view-kind`,value:I,onChange:e=>L(e.target.value===`events-view`?`events-view`:`grid-view`),options:[{value:`grid-view`,label:p(`access.createTokenModal.viewGrid`,`Live grid`)},{value:`events-view`,label:p(`access.createTokenModal.viewEvents`,`Events`)}]})]}),I===`grid-view`?e(`label`,{className:`flex items-start gap-2 text-sm text-foreground`,children:[i(`input`,{type:`checkbox`,className:`mt-0.5`,checked:R,onChange:e=>B(e.target.checked),"data-testid":`token-view-talk`}),i(`span`,{children:p(`access.createTokenModal.talk`,`Allow talk-back on these cameras`)})]}):null]}):null,e(`div`,{className:`space-y-1`,children:[i(P,{htmlFor:`token-lifetime`,children:p(`access.createTokenModal.expires`,`Expires after`)}),i(E,{id:`token-lifetime`,value:V,onChange:e=>U(e.target.value),options:W})]})]})})}s();var yt={key:`access.nouns.token`};function bt(e){return typeof e==`object`&&!!e&&`kind`in e}function xt(e,t){let n=e.access===void 0?``:` [${e.access.join(`, `)}]`;return e.type===`device`?`device:[${bt(e.selector)?j(e.selector,t):`?`}]${n}`:e.type===`addon-routes`?`${t(`access.tokensSection.everyAddonRoutes`,`every addon's routes`)}${n}`:`${e.type}:${e.target??``}${n}`}function St({headerOwnsCreate:t=!1,createRequested:r=!1,onCreateConsumed:s,ownOnly:c=!1}){let{t:u}=X(),d=g(),{user:f}=le(),p=y(),m=W.useUtils(),h=me(),{data:_}=V(),v=n(()=>_??[],[_]),{data:b}=ee({}),x=n(()=>{let e=new Map;for(let t of b??[])e.set(t.id,t.name);return e},[b]),S=W.auth.listTokens.useQuery(void 0),{requestProof:w,dialog:T}=dt(`Creating a token with all permissions`),{state:E,openNew:D,close:O}=U({newKey:pt.token}),[k,A]=o(null),[j,M]=o(null),[te,N]=o(!1),[P,F]=o(null),[I,L]=o(null);a(()=>{r&&(D(),s?.())},[r,D,s]);let R=()=>{m.auth.listTokens.invalidate(),m.auth.listAuthAudit.invalidate()},B=W.auth.mintToken.useMutation({onSuccess:({token:e,record:t})=>{R(),O(),M(null),N(!1),F({token:e,label:t.label})},onError:e=>{M(`Create failed: ${e.message}`),N(!1)}}),ne=W.auth.revokeToken.useMutation({onSuccess:()=>{L(null),R()},onError:e=>{L(null),A(`Revoke failed: ${e.message}`)}}),H=je(yt,R),re=Date.now(),ie=(S.data??[]).filter(e=>!c||e.subjectId===f?.id).map(e=>Ze(e,h,e.scopes.includes(`*`)?null:e.scopes.map(e=>Ye(e,x,e=>xt(e,d))).join(`, `),re)),ae=async e=>{await p({title:u(`access.tokensSection.revoke`,`Revoke "{{name}}"?`,{name:e.name}),message:e.kind===`All permissions`?u(`access.tokensSection.everyScriptUsingItLoses`,`Every script using it loses access immediately. This cannot be undone.`):u(`access.tokensSection.stopsWorking`,`Whoever holds it loses access immediately. This cannot be undone.`),confirmLabel:u(`access.tokensSection.revoke2`,`Revoke`),variant:`danger`})&&(A(null),L(e.id),ne.mutate({id:e.id}))},G=e=>{(async()=>{A(null),M(null);let t;if(e.scopes.includes(`*`)){N(!0);let e=await w();if(N(!1),e===null)return;t=e}B.mutate({scopes:[...e.scopes],expiresIn:e.expiresIn,label:e.label,...e.subjectId===void 0?{}:{subjectId:e.subjectId},...t===void 0?{}:{reauthToken:t}})})()};return e(`div`,{"data-testid":`tokens`,children:[T,i(de,{notice:he(k,H.outcome),onDismissNotice:()=>{A(null),H.dismiss()},id:c?`my-tokens`:`tokens`,title:c?u(`access.tokensSection.myTokens`,`My tokens`):u(`access.tokensSection.tokens`,`Tokens`),icon:C,actions:t?void 0:e(z,{size:`sm`,type:`button`,"data-testid":`tokens-new`,onClick:D,children:[i(C,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),u(`system.access.newToken`,`New token`)]}),description:u(`access.tokensSection.oneFormat`,`Every token is its scopes: a few permissions for a script, all permissions for an admin script, or a view of some cameras for a share link. Revoking one stops it on its next use.`),children:i(Le,{rows:ie,label:u(`common.tokensLabel`),isLoading:S.isLoading,loadError:S.isError?S.error?.message??`Request failed`:null,emptyText:u(`access.tokensSection.noTokens`,`No tokens.`),action:{label:u(`access.tokensSection.revoke2`,`Revoke`),icon:l,isAvailable:e=>e.status===`active`,onRun:e=>void ae(e),busyId:I,disabled:H.busy||I!==null},...f?.isAdmin===!0?{bulk:{revoke:H,noun:yt,isSelectable:e=>e.status===`active`}}:{}})}),i(vt,{open:E.mode===`new`,users:v.map(e=>({id:e.id,username:e.username})),onClose:()=>{O(),M(null),N(!1)},submitting:B.isPending,formError:j,awaitingProof:te,onSubmit:G}),P&&i(ft,{token:P.token,label:P.label,onClose:()=>F(null)})]})}var Ct=864e5,wt={qr:`QR (by an admin)`,self:`Self-enrolled`},Tt={ios:`iOS`,android:`Android`,web:`Web`,other:`Other`};function Et(e){return e.status===`revoked`}function Dt(e){return e.status!==`revoked`}function Ot(e,t=`—`){if(e===null)return t;let n=new Date(e);return Number.isNaN(n.getTime())?t:n.toLocaleString()}function kt(e,t){return e===null||Number.isNaN(e)?null:Math.floor((e-t)/Ct)}function At(e,t){let n=kt(e,t);return n===null?`unknown`:n<0?`expired`:n<30?`soon`:`ok`}function jt(e,t){let n=kt(e,t);return n===null?Y.t(`helpers.certificateModel.unknown`):n===0?Y.t(`helpers.certificateModel.today`):n>0?Y.t(`helpers.certificateModel.inDays`,{count:n}):Y.t(`helpers.certificateModel.daysAgo`,{count:-n})}function Mt(e){if(e===null)return null;let t=Date.parse(e);return Number.isNaN(t)?null:t}function Nt(e){return e===null||e.length===0?`—`:e.length<=17?e:`${e.slice(0,8)}…${e.slice(-8)}`}function Pt(e){return e.length<=10?e:`${e.slice(0,10)}…`}function Ft(e){if(!e.online)return{allowed:!1,reason:Y.t(`helpers.certificateModel.nodeOffline`)};if(e.isHub&&e.https.kind===`served`){if(e.https.status.mode===`uploaded`)return{allowed:!1,reason:Y.t(`helpers.certificateModel.uploadedCert`)};if(e.https.status.mode===`disabled`)return{allowed:!1,reason:Y.t(`helpers.certificateModel.tlsDisabled`)}}return{allowed:!0,reason:null}}var It={prepare:`helpers.certificateModel.stage.prepare`,issue:`helpers.certificateModel.stage.issue`,install:`helpers.certificateModel.stage.install`,reconnect:`helpers.certificateModel.stage.reconnect`,confirm:`helpers.certificateModel.stage.confirm`};function Lt(e){if(e.ok)return{tone:`success`,message:Y.t(`helpers.certificateModel.renewed`,{nodeId:e.nodeId,serial:Pt(e.newSerial)})};let t=e.keptPreviousLeaf?Y.t(`helpers.certificateModel.keptPrevious`):Y.t(`helpers.certificateModel.maybeNoCert`);return{tone:`danger`,message:Y.t(`helpers.certificateModel.renewalFailed`,{nodeId:e.nodeId,stage:Y.t(It[e.stage]),reason:e.reason,kept:t})}}function Rt(e,t){let n=Math.max(0,e-t),r=Math.ceil(n/1e3),i=Math.floor(r/60),a=r%60;return{expired:n===0,label:`${String(i)}:${String(a).padStart(2,`0`)}`}}var zt=11;function Bt(e,t){let n=e.slice(0,zt);return t===null?n:`${n} · ${t}`}function Vt(e){return{id:e.id,name:e.deviceName,detail:Bt(e.fingerprint,e.lastUsedFrom),ownerId:e.userId,ownerName:e.username??e.userId,kind:Tt[e.platform],scope:wt[e.enrolledVia],status:e.status,createdAt:e.issuedAt,lastUsedAt:e.lastUsedAt,expiresAt:e.expiresAt}}function Ht(e,t){return{id:e.id,name:e.deviceName,detail:null,ownerId:null,ownerName:t,kind:Tt[e.platform],scope:null,status:e.status,createdAt:e.issuedAt,lastUsedAt:e.lastUsedAt,expiresAt:e.expiresAt}}function Ut({sessions:t,isLoading:n,loadError:r,emptyText:a,onRevoke:o,revokingId:s}){let{t:c}=X();return n?e(`div`,{className:`flex items-center gap-2 text-xs text-foreground-subtle`,children:[i(m,{className:`h-3.5 w-3.5 animate-spin`}),c(`auth.sessionsList.loadingSessions`,`Loading sessions…`)]}):r===null?t.length===0?i(`div`,{className:`rounded border border-dashed border-border px-3 py-4 text-xs text-foreground-subtle text-center`,children:a}):i(`ul`,{className:`divide-y divide-border rounded-md border border-border`,children:t.map(e=>i(Wt,{session:e,revoking:s===e.id,onRevoke:()=>o(e)},e.id))}):e(`div`,{className:`text-[11px] text-danger`,children:[c(`auth.sessionsList.couldNotLoadSessions`,`Could not load sessions:`),` `,r]})}function Wt({session:t,revoking:n,onRevoke:r}){let{t:a}=X(),o=ot(t.client);return e(`li`,{"data-testid":`session-row`,className:`flex items-start gap-3 px-3 py-2 text-xs`,children:[i(b,{className:`h-3.5 w-3.5 mt-0.5 shrink-0 text-foreground-subtle`}),e(`div`,{className:`flex-1 min-w-0 space-y-0.5`,children:[e(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[i(`span`,{className:`font-medium text-foreground truncate`,title:o.raw??void 0,children:o.label}),t.current&&i(`span`,{className:`rounded bg-primary/10 px-1.5 py-0.5 text-[10px] font-medium text-primary`,children:a(`auth.sessionsList.thisDevice`,`This device`)})]}),e(`div`,{className:`flex flex-wrap gap-x-3 text-[11px] text-foreground-subtle`,children:[i(`span`,{children:ct(t.method)}),i(`span`,{className:`font-mono`,children:t.ip??a(`auth.sessionsList.ipUnknown`,`IP unknown`)}),i(`span`,{children:a(`auth.sessionsList.lastActive`,{when:lt(t.lastUsedAt)})}),i(`span`,{children:a(`auth.sessionsList.expires`,{when:lt(t.expiresAt)})})]})]}),!t.current&&e(`button`,{onClick:r,disabled:n,className:`inline-flex items-center gap-1 rounded px-2 py-1 text-[10px] text-danger hover:bg-danger/10 disabled:opacity-50`,children:[n?i(m,{className:`h-3 w-3 animate-spin`}):i(S,{className:`h-3 w-3`}),a(`auth.sessionsList.signOut`,`Sign out`)]})]})}export{me as A,He as C,Me as D,je as E,de as O,$e as S,Le as T,dt as _,Dt as a,lt as b,jt as c,Ot as d,Ft as f,pt as g,St as h,Et as i,he as k,Lt as l,Pt as m,Vt as n,Rt as o,Nt as p,Ht as r,Mt as s,Ut as t,At as u,ot as v,Ve as w,Qe as x,ct as y};
@@ -1 +0,0 @@
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-CZbAbeZY.js";import{Cr as _,Sr as v,_r as y,gr as b,ir as x,pi as S,rr as C,xr as w}from"./client-D-g0nOrC.js";import{l as T}from"./video-CrmOxhYy.js";import{t as ee}from"./shapes-D2hlOKTD.js";import{Ar as te,Ct as E,Dn as ne,Ed as D,Gu as re,Ku as ie,Md as O,Nd as k,Nr as ae,On as oe,Sr as se,Uu as ce,Wu as le,_r as ue,br as de,ci as fe,ei as A,gr as pe,jd as j,jr as me,nn as M,ri as he,vr as ge,xr as _e,xt as ve}from"./src-iRjUEwun.js";import{t as N}from"./useTranslation-BJr-n0es.js";import{t as ye}from"./AdminPage-B9JLs4rT.js";import{_ as P,a as be,c as xe,d as Se,f as Ce,g as F,h as we,i as Te,l as Ee,m as De,n as Oe,o as ke,p as I,r as L,s as R,t as Ae,u as je,v as z}from"./RemoteGrid-BGbiDThN.js";i();var B=12,V=4,H=3,U=(e,t,n,r,i,a={})=>({id:e,role:t,row:n,col:r,colSpan:i,...a}),W=e=>`custom:${e}`;function G(e,t,n=[]){return t.map((t,r)=>U(`r${e}c${r}`,t,e,r*V,V,{...n[r]===void 0?{}:{label:n[r]}}))}function K(e){return[U(`up`,`up`,e,V,V),U(`left`,`left`,e+1,0,V),U(`ok`,`ok`,e+1,V,V),U(`right`,`right`,e+1,2*V,V),U(`down`,`down`,e+2,V,V)]}function q(e,t){return t.map((t,n)=>U(`app_${t}`,W(`app_${t}`),e,n*H,H,{icon:L(t)}))}var J=(e,t)=>({id:`core:section-divider`,row:e,col:0,options:{scale:{cols:B},title:t}});function Me(e,t,n){let r=R(B,e,t);for(let e of n){let t=x(r,C(e.id),{row:e.row,col:e.col},e.options);if(!t.ok)throw Error(`preset component ${e.id} at ${e.row}:${e.col}: ${t.reason}`);r=t.layout}return r}var Y={scale:{cols:V}},Ne={scale:{rows:2,cols:V}},Pe=(e,t,n,r)=>({idSuffix:e,row:3,col:t,rowSpan:1,colSpan:1,role:n,label:r}),Fe=Me(23,[U(`input`,`input`,0,2*V,V),U(`mute`,`mute`,7,V,V),U(`ch_list`,W(`ch_list`),8,V,V,{label:`CH LIST`}),U(`settings`,W(`settings`),9,V,V,{label:`Settings`}),U(`home`,`home`,10,V,V),U(`guide`,`guide`,12,0,V),U(`e_manual`,W(`e_manual`),12,V,V,{label:`e-Manual`}),U(`info`,`info`,12,2*V,V),U(`back`,`back`,17,0,V),U(`exit`,`exit`,17,2*V,V),U(`color_a`,W(`color_a`),19,0,H,{label:`A`}),U(`color_b`,W(`color_b`),19,H,H,{label:`B`}),U(`color_c`,W(`color_c`),19,2*H,H,{label:`C`}),U(`color_d`,W(`color_d`),19,3*H,H,{label:`D`}),U(`pic_size`,W(`pic_size`),20,0,V,{label:`P.SIZE`}),U(`picture`,W(`picture`),20,V,V,{label:`Picture`}),U(`ad_subt`,W(`ad_subt`),20,2*V,V,{label:`AD/SUBT`})],[{id:`core:power`,row:0,col:0,options:{scale:{cols:2}}},J(1,`Numbers`),{id:`core:keypad`,row:2,col:0,options:{scale:Y.scale,extras:[Pe(`ttx`,0,W(`ttx_mix`),`TTX/MIX`),Pe(`prech`,2,W(`pre_ch`),`PRE-CH`)]}},J(6,`Volume and channels`),{id:`core:rocker-volume-v`,row:7,col:0,options:Ne},{id:`core:rocker-channel-v`,row:7,col:2*V,options:Ne},J(11,`Menus`),J(13,`Navigation`),{id:`core:dpad`,row:14,col:0,options:Y},J(18,`Colour and picture`),J(21,`Playback`),{id:`core:media-transport`,row:22,col:1,options:{scale:{cols:2}}}]),Ie=[`netflix`,`youtube`,`primevideo`,`disneyplus`,`dazn`,`raiplay`],Le=Me(20,[U(`input`,`input`,0,2*V,V),...G(4,[`menu`,`home`,`exit`]),U(`guide`,`guide`,6,0,V),U(`info`,`info`,6,2*V,V),U(`back`,`back`,10,0,V),U(`play_pause`,`play_pause`,10,2*V,V),U(`mute`,`mute`,12,V,V),U(`ch_list`,W(`ch_list`),13,V,V,{label:`CH.LIST`}),U(`subtitle`,W(`subtitle`),14,0,6,{label:`Subtitle`}),U(`text`,W(`text`),14,6,6,{label:`Text`})],[{id:`core:power`,row:0,col:0,options:{scale:{cols:2}}},{id:`core:panel`,row:1,col:0,options:{scale:Y.scale,title:`Apps`,extras:Ie.map((e,t)=>({idSuffix:e,row:Math.floor(t/3),col:t%3,rowSpan:1,colSpan:1,role:W(`app_${e}`),icon:L(e)}))}},{id:`core:colour-keys`,row:3,col:0,options:{scale:{cols:H}}},J(5,`Navigation`),{id:`core:dpad`,row:7,col:0,options:Y},J(11,`Volume and channels`),{id:`core:rocker-volume-v`,row:12,col:0,options:Y},{id:`core:rocker-channel-v`,row:12,col:2*V,options:Y},J(15,`Numbers`),{id:`core:keypad`,row:16,col:0,options:Y}]),Re=R(B,8,[U(`power`,`power`,0,0,V),U(`input`,`input`,0,2*V,V),...K(1),...G(4,[`back`,`home`,`play_pause`]),U(`vol_up`,`volume_up`,5,0,V),U(`mute`,`mute`,5,V,V,{rowSpan:2}),U(`ch_up`,`channel_up`,5,2*V,V),U(`vol_down`,`volume_down`,6,0,V),U(`ch_down`,`channel_down`,6,2*V,V),...q(7,[`netflix`,`primevideo`,`disneyplus`,`youtube`])]),ze=R(B,9,[U(`power`,`power`,0,0,V),U(`input`,`input`,0,2*V,V),U(`settings`,W(`settings`),1,0,V,{label:`Settings`}),U(`up`,`up`,1,V,V),U(`guide`,`guide`,1,2*V,V),U(`left`,`left`,2,0,V),U(`ok`,`ok`,2,V,V),U(`right`,`right`,2,2*V,V),U(`back`,`back`,3,0,V),U(`down`,`down`,3,V,V),U(`home`,`home`,3,2*V,V),U(`vol_up`,`volume_up`,4,0,V,{rowSpan:2}),U(`vol_down`,`volume_down`,6,0,V,{rowSpan:2}),U(`mute`,`mute`,4,V,V),U(`info`,`info`,5,V,V),U(`menu`,`menu`,6,V,V),U(`exit`,`exit`,7,V,V),U(`ch_up`,`channel_up`,4,2*V,V,{rowSpan:2}),U(`ch_down`,`channel_down`,6,2*V,V,{rowSpan:2}),...q(8,[`netflix`,`primevideo`,`disneyplus`,`youtube`])]),Be=R(B,8,[U(`assistant`,W(`assistant`),0,0,V,{label:`Assistant`}),U(`input`,`input`,0,V,V),U(`power`,`power`,0,2*V,V),...K(1),...G(4,[`back`,`home`,`guide`]),U(`vol_up`,`volume_up`,5,0,V),U(`mute`,`mute`,5,V,V),U(`ch_up`,`channel_up`,5,2*V,V),U(`vol_down`,`volume_down`,6,0,V),U(`play_pause`,`play_pause`,6,V,V),U(`ch_down`,`channel_down`,6,2*V,V),...q(7,[`youtube`,`netflix`,`primevideo`,`disneyplus`])]),Ve=R(B,7,[U(`siri`,W(`siri`),0,0,V,{label:`Siri`}),U(`power`,`power`,0,2*V,V),...K(1),...G(4,[`back`,`play_pause`,`home`]),U(`vol_up`,`volume_up`,5,0,6),U(`vol_down`,`volume_down`,5,6,6),U(`mute`,`mute`,6,V,V)]),He=[{id:`samsung-classic`,layout:Fe},{id:`hisense-vidaa`,layout:Le},{id:`samsung-smart`,layout:Re},{id:`lg-magic`,layout:ze},{id:`google-tv`,layout:Be},{id:`apple-tv`,layout:Ve}];function Ue(e){let t=He.find(t=>t.id===e);return t===void 0?null:{...t.layout,buttons:t.layout.buttons.map(e=>({...e}))}}var X=`__custom__`;function We({value:t,onChange:i}){let{t:a}=N(),[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(M,{value:t.columns,onDelta:e=>f(F(t,t.columns+e,t.rows))})}),n(E,{label:a(`remote.layout.rows`),children:n(M,{value:t.rows,onDelta:e=>f(F(t,t.columns,t.rows+e))})})]}),n(Ae,{grid:t,label:a(`remote.layout.previewLabel`),selectedId:o,onSelect:c,showEmptyCells:!0}),e(A,{variant:`outline`,size:`sm`,onClick:()=>f(ke(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(Ke,{grid:t,buttonId:d.id,apply:f,onRemove:()=>{i(De(t,d.id)),c(null),u(null)}})})]})}function Ge(e){return[...be.flatMap(t=>Ce(t).map(n=>({value:n,label:e(`remote.role.${n}`,je(n)),group:e(`remote.roleGroup.${t}`)}))),{value:X,label:e(`remote.layout.customRole`),group:e(`remote.roleGroup.custom`)}]}function Ke({grid:t,buttonId:i,apply:a,onRemove:o}){let{t:s}=N(),l=t.buttons.find(e=>e.id===i),f=l===void 0?null:w(l.role),[m,g]=r(null);if(l===void 0)return null;let y=Se(l.role)||m!==null,b=m??f??``,x=_(b),C={trigger:s(`remote.layout.pickIcon`),panel:s(`remote.layout.iconPanel`),searchPlaceholder:s(`deviceDisplay.iconSearchPlaceholder`),clear:s(`remote.layout.noIcon`),noMatches:s(`deviceDisplay.iconNoMatches`)},T=e=>s(`deviceDisplay.iconCategory.${e}`,{defaultValue:S(e)});return e(`div`,{className:`space-y-3 rounded-lg border border-border bg-surface p-3`,"data-testid":`remote-inspector`,children:[n(he,{mode:`single`,singleDisplay:`field`,label:s(`remote.layout.role`),options:Ge((e,t)=>s(e,t??e)),value:y?X:l.role,onChange:e=>{if(e===X){g(f??``);return}g(null),a(P(t,l.id,{role:e}))}}),y&&n(E,{label:s(`remote.layout.customKey`),...b!==``&&!x?{error:s(`remote.layout.customKeyInvalid`)}:{},children:n(j,{value:b,placeholder:`hdmi_1`,onChange:e=>{let n=e.target.value;g(n),_(n)&&a(P(t,l.id,{role:v(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(k,{value:l.icon??null,onPick:e=>a(P(t,l.id,{icon:e})),fallbackGlyph:ee,categoryLabel:T,labels:C})}),n(E,{label:s(`remote.layout.label`),children:n(j,{value:l.label??``,maxLength:40,onChange:e=>a(P(t,l.id,{label:e.target.value}))})})]}),n(E,{label:s(`remote.layout.appIcon`),children:n(D,{value:Te(l.icon)?.key??``,options:[{value:``,label:s(`remote.layout.noApp`)},...Oe.map(e=>({value:e.key,label:e.label}))],onChange:e=>{let n=e.target.value;n===``?Te(l.icon)!==void 0&&a(P(t,l.id,{icon:null})):a(P(t,l.id,{icon:L(n)}))},"data-testid":`remote-app-icon`})}),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(O,{icon:h,size:`sm`,variant:`secondary`,"aria-label":s(`remote.layout.moveLeft`),onClick:()=>a(z(t,l.id,0,-1))}),n(O,{icon:u,size:`sm`,variant:`secondary`,"aria-label":s(`remote.layout.moveUp`),onClick:()=>a(z(t,l.id,-1,0))}),n(O,{icon:d,size:`sm`,variant:`secondary`,"aria-label":s(`remote.layout.moveDown`),onClick:()=>a(z(t,l.id,1,0))}),n(O,{icon:p,size:`sm`,variant:`secondary`,"aria-label":s(`remote.layout.moveRight`),onClick:()=>a(z(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(M,{value:l.rowSpan,onDelta:e=>a(we(t,l.id,l.rowSpan+e,l.colSpan))})}),n(E,{label:s(`remote.layout.width`),children:n(M,{value:l.colSpan,onDelta:e=>a(we(t,l.id,l.rowSpan,l.colSpan+e))})})]}),e(A,{variant:`danger`,size:`sm`,onClick:o,children:[n(c,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),s(`remote.layout.removeButton`)]})]})}var qe={remote:{label:e=>e(`remote.templates.kind.remote`),emptyPayload:Ee,summary:(e,t)=>{let n=I(e);return t(`remote.templates.layoutSummary`,{columns:n.columns,rows:n.rows,count:n.buttons.length})},renderEditor:(e,t)=>n(We,{value:I(e),onChange:t}),isSavable:e=>xe(I(e))!==null,presets:e=>He.map(t=>({id:t.id,label:e(`remote.templates.preset.${t.id}`),payload:()=>Ue(t.id)}))}};function Z(e){return qe[e]}var Q=b;function Je(e,t){let n=y(e,t);return n.ok?n.payload:null}i();function Ye({draft:e,saving:t,error:r,onSave:i,onClose:a}){return n(pe,{open:e!==null,onOpenChange:e=>!e&&a(),children:n(ge,{width:`xl`,placement:`sheet-on-mobile`,scroll:`body`,children:e!==null&&n(Xe,{draft:e,saving:t,error:r,onSave:i,onClose:a},e.id??`new`)})})}function Xe({draft:t,saving:i,error:a,onSave:s,onClose:c}){let{t:l}=N(),[u,d]=r(t.kind),[f,p]=r(t.name),[m,h]=r(t.payload),[g,_]=r(``),v=Z(u),y=v.presets(l),b=Je(u,m),x=f.trim()!==``&&b!==null&&v.isSavable(m)&&!i;return e(o,{children:[n(_e,{children:n(se,{children:t.id===null?l(`remote.templates.newTitle`):l(`remote.templates.editTitle`)})}),e(ue,{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(j,{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(D,{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()),_(``))}})}),t.id===null&&y.length>0&&n(E,{label:l(`remote.templates.startFrom`),children:n(D,{value:g,options:[{value:``,label:l(`remote.templates.startBlank`)},...y.map(e=>({value:e.id,label:e.label}))],onChange:e=>{let t=y.find(t=>t.id===e.target.value);_(t?.id??``),h(t===void 0?v.emptyPayload():t.payload()),t!==void 0&&f.trim()===``&&p(t.label)},"data-testid":`template-preset`})})]}),v.renderEditor(m,h),a!==null&&n(`p`,{role:`alert`,className:`text-xs text-danger`,children:a})]}),e(de,{children:[n(A,{variant:`ghost`,onClick:c,children:l(`common.cancel`)}),n(A,{disabled:!x,onClick:()=>s({id:t.id,kind:u,name:f.trim(),payload:b}),"data-testid":`template-save`,children:l(`common.save`)})]})]})}i();var $=b[0];function Ze(){let{t:i}=N(),o=a(),u=re({}),d=ce(),p=ie(),h=le(),_=g(),v=m(),[y,b]=r(null),[x,S]=r(null),C=()=>void o.invalidateQueries({queryKey:[[`template`]]}),w=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}C(),b(null)}catch(e){S(e instanceof Error?e.message:String(e))}},ee=async e=>{try{await d.mutateAsync({kind:e.kind,name:i(`remote.templates.copyName`,{name:e.name}),payload:e.payload}),C()}catch(e){await v({title:i(`remote.templates.duplicateFailed`),message:e instanceof Error?e.message:String(e),variant:`danger`})}},E=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}C()}catch(e){await v({title:i(`remote.templates.deleteFailed`),message:e instanceof Error?e.message:String(e),variant:`danger`})}},D=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(fe,{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(ve,{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 ee(e)},{id:`delete`,label:i(`common.delete`),icon:c,danger:!0,onClick:()=>void E(e)}]})}],[i]),O=u.data??[],k=()=>{S(null),b({id:null,kind:$,name:``,payload:Z($).emptyPayload()})};return e(ye,{icon:T,title:i(`remote.templates.title`),subtitle:i(`remote.templates.subtitle`),actions:e(A,{size:`sm`,onClick:k,"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(te,{title:i(`remote.templates.loadFailed`),message:u.error.message,onRetry:()=>void u.refetch()}):u.data===void 0?n(ae,{className:`h-32 w-full`}):O.length===0?n(me,{icon:T,title:i(`remote.templates.emptyTitle`),description:i(`remote.templates.emptyDescription`),action:n(A,{size:`sm`,onClick:k,children:i(`remote.templates.new`)})}):n(ne,{columns:D,rows:O,rowKey:e=>e.id,maxBodyHeight:oe,defaultSort:{columnKey:`name`,dir:`asc`},onRowClick:e=>{S(null),b({id:e.id,kind:e.kind,name:e.name,payload:e.payload})}}),n(Ye,{draft:y,saving:d.isPending||p.isPending,error:x,onSave:e=>void w(e),onClose:()=>b(null)})]})}export{Ze as TemplatesPage};
@@ -1 +0,0 @@
1
- import{la as e}from"./player-overlays-CZbAbeZY.js";var t=e(`circle-slash`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`9`,x2:`15`,y1:`15`,y2:`9`,key:`1dfufj`}]]);export{t};