libre-webui 0.34.2 → 0.35.0

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 (171) hide show
  1. package/backend/dist/persistence/extensionTypes.d.ts +2 -0
  2. package/backend/dist/persistence/extensionTypes.d.ts.map +1 -1
  3. package/backend/dist/persistence/extensionTypes.js.map +1 -1
  4. package/backend/dist/persistence/postgresExtensionRepositories.d.ts.map +1 -1
  5. package/backend/dist/persistence/postgresExtensionRepositories.js +26 -0
  6. package/backend/dist/persistence/postgresExtensionRepositories.js.map +1 -1
  7. package/backend/dist/persistence/sqliteExtensionRepositories.d.ts.map +1 -1
  8. package/backend/dist/persistence/sqliteExtensionRepositories.js +28 -0
  9. package/backend/dist/persistence/sqliteExtensionRepositories.js.map +1 -1
  10. package/backend/dist/platform/jobs/durableJobRuntime.d.ts.map +1 -1
  11. package/backend/dist/platform/jobs/durableJobRuntime.js +3 -1
  12. package/backend/dist/platform/jobs/durableJobRuntime.js.map +1 -1
  13. package/backend/dist/platform/storage/s3EncryptedBlobStore.js +1 -1
  14. package/backend/dist/platform/storage/s3EncryptedBlobStore.js.map +1 -1
  15. package/backend/dist/routes/chat.d.ts.map +1 -1
  16. package/backend/dist/routes/chat.js +49 -0
  17. package/backend/dist/routes/chat.js.map +1 -1
  18. package/backend/dist/routes/plugins.d.ts.map +1 -1
  19. package/backend/dist/routes/plugins.js +29 -2
  20. package/backend/dist/routes/plugins.js.map +1 -1
  21. package/backend/dist/services/calendarService.js +1 -1
  22. package/backend/dist/services/calendarService.js.map +1 -1
  23. package/backend/dist/services/chatService.d.ts.map +1 -1
  24. package/backend/dist/services/chatService.js +5 -2
  25. package/backend/dist/services/chatService.js.map +1 -1
  26. package/backend/dist/services/documentService.d.ts.map +1 -1
  27. package/backend/dist/services/documentService.js +4 -5
  28. package/backend/dist/services/documentService.js.map +1 -1
  29. package/backend/dist/services/followUpService.js +1 -1
  30. package/backend/dist/services/followUpService.js.map +1 -1
  31. package/backend/dist/services/galleryService.d.ts.map +1 -1
  32. package/backend/dist/services/galleryService.js +5 -2
  33. package/backend/dist/services/galleryService.js.map +1 -1
  34. package/backend/dist/services/legacyCiphertextIntegrity.js +2 -2
  35. package/backend/dist/services/legacyCiphertextIntegrity.js.map +1 -1
  36. package/backend/dist/services/pluginCacheInvalidation.d.ts.map +1 -1
  37. package/backend/dist/services/pluginCacheInvalidation.js +3 -2
  38. package/backend/dist/services/pluginCacheInvalidation.js.map +1 -1
  39. package/backend/dist/services/pluginUsageService.d.ts +5 -1
  40. package/backend/dist/services/pluginUsageService.d.ts.map +1 -1
  41. package/backend/dist/services/pluginUsageService.js +37 -14
  42. package/backend/dist/services/pluginUsageService.js.map +1 -1
  43. package/backend/dist/services/thinkingSummaryService.d.ts +48 -0
  44. package/backend/dist/services/thinkingSummaryService.d.ts.map +1 -0
  45. package/backend/dist/services/thinkingSummaryService.js +170 -0
  46. package/backend/dist/services/thinkingSummaryService.js.map +1 -0
  47. package/backend/dist/services/workRuntimeService.d.ts.map +1 -1
  48. package/backend/dist/services/workRuntimeService.js +5 -2
  49. package/backend/dist/services/workRuntimeService.js.map +1 -1
  50. package/backend/dist/services/workTaskService.d.ts.map +1 -1
  51. package/backend/dist/services/workTaskService.js +5 -2
  52. package/backend/dist/services/workTaskService.js.map +1 -1
  53. package/backend/dist/utils/pluginStreamAdapter.d.ts.map +1 -1
  54. package/backend/dist/utils/pluginStreamAdapter.js +2 -7
  55. package/backend/dist/utils/pluginStreamAdapter.js.map +1 -1
  56. package/backend/package.json +1 -1
  57. package/bin/cli.js +0 -1
  58. package/frontend/dist/artifact-runtime/.build-fingerprint +1 -1
  59. package/frontend/dist/assets/index-B8CRGFpq.css +1 -0
  60. package/frontend/dist/assets/index-D34e2tgI.js +92 -0
  61. package/frontend/dist/index.html +17 -17
  62. package/frontend/dist/js/{ArtifactContainer-CQjqR9G1.js → ArtifactContainer-DxNTcOvH.js} +1 -1
  63. package/frontend/dist/js/{ArtifactDemoPage-DbbqglMU.js → ArtifactDemoPage-Bzb07rM8.js} +1 -1
  64. package/frontend/dist/js/{ArtifactSandboxFrame-DI2b9BW5.js → ArtifactSandboxFrame-DP_4rZwQ.js} +1 -1
  65. package/frontend/dist/js/{ArtifactSlideOutPanel-B_UX92CK.js → ArtifactSlideOutPanel-DkuFYmTf.js} +1 -1
  66. package/frontend/dist/js/{AutomationModal-CNiy1Dxm.js → AutomationModal-Dh_l3_KV.js} +1 -1
  67. package/frontend/dist/js/{AutomationsPage-CeAsldk_.js → AutomationsPage-BZqRE_iS.js} +1 -1
  68. package/frontend/dist/js/{AvatarUpload-xCWQm3_w.js → AvatarUpload-CM537pyV.js} +1 -1
  69. package/frontend/dist/js/{CalendarPage-Cwk0X00z.js → CalendarPage-CNovVIyJ.js} +1 -1
  70. package/frontend/dist/js/{ChannelsPage-BG3n4ElV.js → ChannelsPage-B24ElGbY.js} +1 -1
  71. package/frontend/dist/js/ChatPage-YD9iS6Kh.js +14 -0
  72. package/frontend/dist/js/{ConnectModels-D7ZTGihA.js → ConnectModels-Dwih31mg.js} +1 -1
  73. package/frontend/dist/js/{EvaluationsPage-C795TI_6.js → EvaluationsPage-fd4Bzfet.js} +1 -1
  74. package/frontend/dist/js/{FirstTimeSetup-C4C5GLjW.js → FirstTimeSetup-Bf6VF-W2.js} +1 -1
  75. package/frontend/dist/js/{GalleryPage-DVWl3LaC.js → GalleryPage-BiHsiQXa.js} +1 -1
  76. package/frontend/dist/js/HomePage-QmyVNWCW.js +1 -0
  77. package/frontend/dist/js/LanguageSwitcher-DjCF4n-n.js +1 -0
  78. package/frontend/dist/js/{LibreClawPage-OD6iZtiy.js → LibreClawPage-BgWhUlqz.js} +1 -1
  79. package/frontend/dist/js/{NotesPage-rqL0zS8z.js → NotesPage-Di2Bg-aA.js} +1 -1
  80. package/frontend/dist/js/{PersonasPage-Babix8IA.js → PersonasPage-BdJO364O.js} +1 -1
  81. package/frontend/dist/js/PluginUsagePage-Cg8eqMsE.js +1 -0
  82. package/frontend/dist/js/RichMessageContent-C8qt0Aa7.js +1 -0
  83. package/frontend/dist/js/{RichMessageContent-CcKn_kcQ.js → RichMessageContent-CUbm43PQ.js} +1 -1
  84. package/frontend/dist/js/{SettingsModal-CXU60RIf.js → SettingsModal-BxEuHSvE.js} +3 -3
  85. package/frontend/dist/js/{ShareDialog-CnU4ptx7.js → ShareDialog-DTGlwdvx.js} +1 -1
  86. package/frontend/dist/js/{SystemPage-BzpTjdQY.js → SystemPage-wOjktp6W.js} +1 -1
  87. package/frontend/dist/js/UserManagementPanel-KLgquEZv.js +1 -0
  88. package/frontend/dist/js/{WhatsNewModal-TuDrBWKj.js → WhatsNewModal-B-8T7RFf.js} +1 -1
  89. package/frontend/dist/js/{WorkPage-DCeqm0BN.js → WorkPage-5YiyDil1.js} +2 -2
  90. package/frontend/dist/js/api-C4tAvZc2.js +14 -0
  91. package/frontend/dist/js/api-vKAlaBw8.js +1 -0
  92. package/frontend/dist/js/{appNavigation-DySHcEGS.js → appNavigation-DXgSn83Q.js} +1 -1
  93. package/frontend/dist/js/{appStore-DrTsJPfh.js → appStore-CmY86Gzn.js} +2 -2
  94. package/frontend/dist/js/appVersion-Nzg0IWED.js +1 -0
  95. package/frontend/dist/js/ar-DtoEKcvZ.js +2 -0
  96. package/frontend/dist/js/authStore-Cq6ASMHJ.js +1 -0
  97. package/frontend/dist/js/{authStore-CieFdk4S.js → authStore-DzKajX63.js} +3 -3
  98. package/frontend/dist/js/bn-DP2AKHj6.js +2 -0
  99. package/frontend/dist/js/chatStore-Bp-tan20.js +3 -0
  100. package/frontend/dist/js/{composerStyles-BjJm_BgC.js → composerStyles-nggBKICR.js} +1 -1
  101. package/frontend/dist/js/{config-D7WLbWrW.js → config-Cg4OZeHO.js} +1 -1
  102. package/frontend/dist/js/cs-BYiysC42.js +2 -0
  103. package/frontend/dist/js/da-CjvZwl21.js +2 -0
  104. package/frontend/dist/js/de-BKI2vbyb.js +2 -0
  105. package/frontend/dist/js/es-Bd_rGARS.js +2 -0
  106. package/frontend/dist/js/{evaluationsApi-Dn-WNzzH.js → evaluationsApi-BKkwm4WQ.js} +1 -1
  107. package/frontend/dist/js/fr-MJPX-cfk.js +2 -0
  108. package/frontend/dist/js/hi-i1pFIKuq.js +2 -0
  109. package/frontend/dist/js/id-Cx2UmvDs.js +2 -0
  110. package/frontend/dist/js/is-BhoLtzfO.js +2 -0
  111. package/frontend/dist/js/it-DBSOFUQF.js +2 -0
  112. package/frontend/dist/js/ja-tt90GfPo.js +2 -0
  113. package/frontend/dist/js/ko-CuQjGSbu.js +2 -0
  114. package/frontend/dist/js/{messageCodeStyles-C0pbLr0L.js → messageCodeStyles-CNMdqZf-.js} +1 -1
  115. package/frontend/dist/js/ms-B1IgAOxc.js +2 -0
  116. package/frontend/dist/js/nl-KC1T6ODd.js +2 -0
  117. package/frontend/dist/js/pl-BELaieBr.js +2 -0
  118. package/frontend/dist/js/pt-BcNdTKuY.js +2 -0
  119. package/frontend/dist/js/ru-BY36Y8EF.js +2 -0
  120. package/frontend/dist/js/sv-Df0qJdhZ.js +2 -0
  121. package/frontend/dist/js/{teamEventStream-CI_GSbae.js → teamEventStream-CjWlYJh3.js} +1 -1
  122. package/frontend/dist/js/th-BQogE70C.js +2 -0
  123. package/frontend/dist/js/tr-CE2ShLd6.js +2 -0
  124. package/frontend/dist/js/ui-DzVF9vZ5.js +2 -0
  125. package/frontend/dist/js/uk-DuVduqlS.js +2 -0
  126. package/frontend/dist/js/useChat-DubO9MWm.js +10 -0
  127. package/frontend/dist/js/vi-DABvOoXL.js +2 -0
  128. package/frontend/dist/js/workApi-mPLHmuyT.js +1 -0
  129. package/frontend/dist/js/{workApi-C-WfyZSs.js → workApi-oO8srJWT.js} +3 -3
  130. package/frontend/dist/js/zh-D2B1N9vW.js +2 -0
  131. package/package.json +2 -2
  132. package/frontend/dist/assets/index-C59a0tht.css +0 -1
  133. package/frontend/dist/assets/index-Cyi10ekV.js +0 -43
  134. package/frontend/dist/js/ChatPage-wSRfAOeh.js +0 -14
  135. package/frontend/dist/js/HomePage-BljB9ZMN.js +0 -1
  136. package/frontend/dist/js/LanguageSwitcher-BuS3i6u5.js +0 -1
  137. package/frontend/dist/js/PluginUsagePage-CudDkMxy.js +0 -1
  138. package/frontend/dist/js/RichMessageContent-B-U0EcyW.js +0 -1
  139. package/frontend/dist/js/UserManagementPanel-pbtLqF8X.js +0 -1
  140. package/frontend/dist/js/api-BIVGtaZy.js +0 -1
  141. package/frontend/dist/js/api-CgnEj5Jc.js +0 -14
  142. package/frontend/dist/js/appVersion-CAidQlBP.js +0 -1
  143. package/frontend/dist/js/ar-DNI77Stn.js +0 -2
  144. package/frontend/dist/js/authStore-GaOHAAsM.js +0 -1
  145. package/frontend/dist/js/bn-u6oyZr4U.js +0 -2
  146. package/frontend/dist/js/chatStore-BvZkd8Un.js +0 -3
  147. package/frontend/dist/js/cs-BIkJ6jwb.js +0 -2
  148. package/frontend/dist/js/da-DV3V6XJ_.js +0 -2
  149. package/frontend/dist/js/de-DdcTQ-vn.js +0 -2
  150. package/frontend/dist/js/es-Cw-ozFaX.js +0 -2
  151. package/frontend/dist/js/fr-Y2NfnlYR.js +0 -2
  152. package/frontend/dist/js/hi-BKU62_1Y.js +0 -2
  153. package/frontend/dist/js/id-q6wo4InR.js +0 -2
  154. package/frontend/dist/js/is-_B6QblCu.js +0 -2
  155. package/frontend/dist/js/it-NUupXhzK.js +0 -2
  156. package/frontend/dist/js/ja-BUvl9RXq.js +0 -2
  157. package/frontend/dist/js/ko-df4leR83.js +0 -2
  158. package/frontend/dist/js/ms-CN-7Q9S2.js +0 -2
  159. package/frontend/dist/js/nl-OEm4uNIo.js +0 -2
  160. package/frontend/dist/js/pl-B9pHpjg7.js +0 -2
  161. package/frontend/dist/js/pt-D3uaEKud.js +0 -2
  162. package/frontend/dist/js/ru-z9H07lhi.js +0 -2
  163. package/frontend/dist/js/sv-GkQDA4wx.js +0 -2
  164. package/frontend/dist/js/th-0hzCkDzt.js +0 -2
  165. package/frontend/dist/js/tr-CZDobfHQ.js +0 -2
  166. package/frontend/dist/js/ui-CgokQU6I.js +0 -2
  167. package/frontend/dist/js/uk-BwspIPCI.js +0 -2
  168. package/frontend/dist/js/useChat-DIGuMg5j.js +0 -10
  169. package/frontend/dist/js/vi-Dipdv5ta.js +0 -2
  170. package/frontend/dist/js/workApi-CApikuye.js +0 -1
  171. package/frontend/dist/js/zh-CgdWmtP_.js +0 -2
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-vendor-D0Ec-185.js";import{t as r}from"./logger-DnuT4jgB.js";import{t as i}from"./useTranslation-rdLmo6zV.js";import{B as a,Ft as o,n as s,s as c,xr as l}from"./ui-vendor-Dt9hfsGD.js";import{k as u}from"./api-CgnEj5Jc.js";import{t as d}from"./Button-BxwbQ5xw.js";import{n as f,r as p}from"./ui-CgokQU6I.js";var m=e(t(),1),h=n(),g=r(`share-dialog`),_=({resourceType:e,resourceId:t,resourceLabel:n,onClose:r})=>{let{t:_}=i(),[v,y]=(0,m.useState)(null),[b,x]=(0,m.useState)(`user`),[S,C]=(0,m.useState)(``),[w,T]=(0,m.useState)(`read`),[E,D]=(0,m.useState)(!1),O=(0,m.useCallback)(()=>{u.listGrants(e,t).then(e=>{e.success&&Array.isArray(e.data)&&y(e.data)}).catch(e=>g.error(`Failed to load shares:`,e))},[e,t]);(0,m.useEffect)(()=>{O()},[O]);let k=async()=>{let n=S.trim();if(n){D(!0);try{let r=b===`user`?await u.resolvePrincipal(n):await u.resolveGroup(n);if(!r.success||!r.data){l.error(_(b===`user`?`share.userNotFound`:`share.groupNotFound`));return}let i=await u.createGrant({resourceType:e,resourceId:t,principalType:b,principalId:r.data.id,permission:w});i.success?(C(``),O(),l.success(_(`share.added`,{name:n}))):l.error(i.error||_(`share.failed`))}catch(e){g.error(`Failed to share resource:`,e),l.error(_(`share.failed`))}finally{D(!1)}}},A=async e=>{try{(await u.deleteGrant(e)).success&&O()}catch(e){g.error(`Failed to revoke share:`,e)}};return(0,h.jsxs)(f,{titleId:`share-dialog-title`,title:_(`share.title`,{name:n}),subtitle:_(`share.subtitle`),onClose:r,testId:`share-dialog`,children:[(0,h.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,h.jsxs)(`select`,{value:b,onChange:e=>x(e.target.value),className:`${p} w-auto`,"data-testid":`share-principal-kind`,children:[(0,h.jsx)(`option`,{value:`user`,children:_(`share.kindUser`)}),(0,h.jsx)(`option`,{value:`group`,children:_(`share.kindGroup`)})]}),(0,h.jsx)(`input`,{type:`text`,value:S,onChange:e=>C(e.target.value),onKeyDown:e=>{e.key===`Enter`&&k()},placeholder:_(b===`user`?`share.usernamePlaceholder`:`share.groupPlaceholder`),className:`${p} min-w-0 flex-1`,"data-testid":`share-principal-name`}),(0,h.jsxs)(`select`,{value:w,onChange:e=>T(e.target.value),className:`${p} w-auto`,"data-testid":`share-permission`,children:[(0,h.jsx)(`option`,{value:`read`,children:_(`share.permissionRead`)}),(0,h.jsx)(`option`,{value:`write`,children:_(`share.permissionWrite`)})]}),(0,h.jsx)(d,{size:`sm`,disabled:E||!S.trim(),onClick:()=>void k(),"data-testid":`share-submit`,children:E?(0,h.jsx)(o,{className:`h-3.5 w-3.5 animate-spin`}):_(`share.action`)})]}),v===null?(0,h.jsx)(o,{className:`mx-auto h-4 w-4 animate-spin text-gray-400`}):v.length===0?(0,h.jsx)(`p`,{className:`text-center text-xs text-gray-400 dark:text-dark-500`,children:_(`share.empty`)}):(0,h.jsx)(`div`,{className:`space-y-2`,children:v.map(e=>(0,h.jsxs)(`div`,{className:`flex items-center gap-2 rounded-lg border border-black/[0.06] px-2.5 py-2 dark:border-white/[0.08]`,"data-testid":`share-item`,children:[e.principalType===`group`?(0,h.jsx)(c,{className:`h-3.5 w-3.5 shrink-0 text-gray-400 dark:text-dark-500`}):(0,h.jsx)(a,{className:`h-3.5 w-3.5 shrink-0 text-gray-400 dark:text-dark-500`}),(0,h.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-[13px] text-gray-800 dark:text-dark-800`,children:e.principalName??e.principalId}),(0,h.jsx)(`span`,{className:`shrink-0 text-[11px] uppercase text-gray-400 dark:text-dark-500`,children:e.permission}),(0,h.jsx)(`button`,{type:`button`,onClick:()=>void A(e.id),className:`rounded-md p-1 text-red-500 hover:bg-red-50 dark:hover:bg-red-900/20`,title:_(`share.revoke`),children:(0,h.jsx)(s,{className:`h-3.5 w-3.5`})})]},e.id))}),(0,h.jsx)(`p`,{className:`text-[11px] leading-relaxed text-gray-400 dark:text-dark-500`,children:_(`share.hint`)})]})};export{_ as t};
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-vendor-D0Ec-185.js";import{t as r}from"./logger-DnuT4jgB.js";import{t as i}from"./useTranslation-rdLmo6zV.js";import{B as a,Ft as o,n as s,s as c,xr as l}from"./ui-vendor-Dt9hfsGD.js";import{k as u}from"./api-C4tAvZc2.js";import{t as d}from"./Button-BxwbQ5xw.js";import{n as f,r as p}from"./ui-DzVF9vZ5.js";var m=e(t(),1),h=n(),g=r(`share-dialog`),_=({resourceType:e,resourceId:t,resourceLabel:n,onClose:r})=>{let{t:_}=i(),[v,y]=(0,m.useState)(null),[b,x]=(0,m.useState)(`user`),[S,C]=(0,m.useState)(``),[w,T]=(0,m.useState)(`read`),[E,D]=(0,m.useState)(!1),O=(0,m.useCallback)(()=>{u.listGrants(e,t).then(e=>{e.success&&Array.isArray(e.data)&&y(e.data)}).catch(e=>g.error(`Failed to load shares:`,e))},[e,t]);(0,m.useEffect)(()=>{O()},[O]);let k=async()=>{let n=S.trim();if(n){D(!0);try{let r=b===`user`?await u.resolvePrincipal(n):await u.resolveGroup(n);if(!r.success||!r.data){l.error(_(b===`user`?`share.userNotFound`:`share.groupNotFound`));return}let i=await u.createGrant({resourceType:e,resourceId:t,principalType:b,principalId:r.data.id,permission:w});i.success?(C(``),O(),l.success(_(`share.added`,{name:n}))):l.error(i.error||_(`share.failed`))}catch(e){g.error(`Failed to share resource:`,e),l.error(_(`share.failed`))}finally{D(!1)}}},A=async e=>{try{(await u.deleteGrant(e)).success&&O()}catch(e){g.error(`Failed to revoke share:`,e)}};return(0,h.jsxs)(f,{titleId:`share-dialog-title`,title:_(`share.title`,{name:n}),subtitle:_(`share.subtitle`),onClose:r,testId:`share-dialog`,children:[(0,h.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,h.jsxs)(`select`,{value:b,onChange:e=>x(e.target.value),className:`${p} w-auto`,"data-testid":`share-principal-kind`,children:[(0,h.jsx)(`option`,{value:`user`,children:_(`share.kindUser`)}),(0,h.jsx)(`option`,{value:`group`,children:_(`share.kindGroup`)})]}),(0,h.jsx)(`input`,{type:`text`,value:S,onChange:e=>C(e.target.value),onKeyDown:e=>{e.key===`Enter`&&k()},placeholder:_(b===`user`?`share.usernamePlaceholder`:`share.groupPlaceholder`),className:`${p} min-w-0 flex-1`,"data-testid":`share-principal-name`}),(0,h.jsxs)(`select`,{value:w,onChange:e=>T(e.target.value),className:`${p} w-auto`,"data-testid":`share-permission`,children:[(0,h.jsx)(`option`,{value:`read`,children:_(`share.permissionRead`)}),(0,h.jsx)(`option`,{value:`write`,children:_(`share.permissionWrite`)})]}),(0,h.jsx)(d,{size:`sm`,disabled:E||!S.trim(),onClick:()=>void k(),"data-testid":`share-submit`,children:E?(0,h.jsx)(o,{className:`h-3.5 w-3.5 animate-spin`}):_(`share.action`)})]}),v===null?(0,h.jsx)(o,{className:`mx-auto h-4 w-4 animate-spin text-gray-400`}):v.length===0?(0,h.jsx)(`p`,{className:`text-center text-xs text-gray-400 dark:text-dark-500`,children:_(`share.empty`)}):(0,h.jsx)(`div`,{className:`space-y-2`,children:v.map(e=>(0,h.jsxs)(`div`,{className:`flex items-center gap-2 rounded-lg border border-black/[0.06] px-2.5 py-2 dark:border-white/[0.08]`,"data-testid":`share-item`,children:[e.principalType===`group`?(0,h.jsx)(c,{className:`h-3.5 w-3.5 shrink-0 text-gray-400 dark:text-dark-500`}):(0,h.jsx)(a,{className:`h-3.5 w-3.5 shrink-0 text-gray-400 dark:text-dark-500`}),(0,h.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-[13px] text-gray-800 dark:text-dark-800`,children:e.principalName??e.principalId}),(0,h.jsx)(`span`,{className:`shrink-0 text-[11px] uppercase text-gray-400 dark:text-dark-500`,children:e.permission}),(0,h.jsx)(`button`,{type:`button`,onClick:()=>void A(e.id),className:`rounded-md p-1 text-red-500 hover:bg-red-50 dark:hover:bg-red-900/20`,title:_(`share.revoke`),children:(0,h.jsx)(s,{className:`h-3.5 w-3.5`})})]},e.id))}),(0,h.jsx)(`p`,{className:`text-[11px] leading-relaxed text-gray-400 dark:text-dark-500`,children:_(`share.hint`)})]})};export{_ as t};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-vendor-D0Ec-185.js";import{t as r}from"./useQuery-BKulzCS7.js";import{t as i}from"./useTranslation-rdLmo6zV.js";import{t as a}from"./utils-CKWltgs8.js";import{Ft as o,In as s,Jt as c,U as l,Z as u,_r as d,ar as f,br as p,g as m,ht as h,ir as g,kn as _,kt as v,z as y}from"./ui-vendor-Dt9hfsGD.js";import{n as b,t as x}from"./workApi-C-WfyZSs.js";import{o as S}from"./api-CgnEj5Jc.js";import{t as C}from"./authStore-CieFdk4S.js";import{t as w}from"./Button-BxwbQ5xw.js";import{a as T,o as E}from"./ui-CgokQU6I.js";var D=e(t(),1),O={getDrills:()=>b.get(`/recovery/drills`).then(e=>e.data),runDrill:()=>b.post(`/recovery/drills/run`).then(e=>e.data)},k=n(),A=e=>e===null?`—`:e>=1048576?`${(e/1048576).toFixed(1)} MB`:e>=1024?`${(e/1024).toFixed(1)} KB`:`${e} B`,j=e=>e===null?`—`:e>=3600?`${(e/3600).toFixed(1)} h`:e>=60?`${Math.round(e/60)} min`:`${e} s`,M=()=>{let{t:e}=i(),{user:t}=C(),[n,r]=(0,D.useState)(null),[a,s]=(0,D.useState)(!1),c=(0,D.useCallback)(async()=>{try{let e=await O.getDrills();e.success&&e.data&&r(e.data)}catch{}},[]);if((0,D.useEffect)(()=>{if(t?.role!==`admin`)return;let e=setTimeout(()=>void c(),0);return()=>clearTimeout(e)},[t?.role,c]),t?.role!==`admin`||!n)return null;let l=n.drills[0],u=n.drills.find(e=>e.status===`passed`),f=async()=>{s(!0);try{let t=await O.runDrill();t.success&&t.data?t.data.status===`passed`?p.success(e(`systemPage.recovery.passed`)):p.error(t.data.error||e(`systemPage.recovery.failed`)):p.error(t.message||e(`systemPage.recovery.failed`))}catch(t){let n=t;p.error(n.response?.data?.message||e(`systemPage.recovery.failed`))}finally{s(!1),await c()}};return(0,k.jsxs)(`section`,{"data-testid":`recovery-drills-panel`,className:`rounded-2xl border border-gray-200 bg-white p-4 dark:border-dark-200 dark:bg-dark-25`,children:[(0,k.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,k.jsxs)(`div`,{children:[(0,k.jsxs)(`h3`,{className:`flex items-center gap-2 text-sm font-semibold text-gray-900 dark:text-gray-100`,children:[(0,k.jsx)(d,{className:`h-4 w-4 text-primary-500`}),e(`systemPage.recovery.title`)]}),(0,k.jsx)(`p`,{className:`mt-0.5 text-xs text-gray-500 dark:text-dark-500`,children:n.supported?n.intervalHours?e(`systemPage.recovery.scheduleOn`,{hours:n.intervalHours}):e(`systemPage.recovery.scheduleOff`):e(`systemPage.recovery.teamUnsupported`)})]}),n.supported&&(0,k.jsx)(w,{size:`sm`,onClick:()=>void f(),disabled:a,children:a?(0,k.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,k.jsx)(o,{className:`h-4 w-4 animate-spin`}),e(`systemPage.recovery.running`)]}):e(`systemPage.recovery.runNow`)})]}),u&&(0,k.jsxs)(`div`,{className:`mt-3 grid grid-cols-2 gap-3 sm:grid-cols-4`,children:[(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-dark-500`,children:e(`systemPage.recovery.lastPassed`)}),(0,k.jsx)(`p`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:new Date(u.startedAt).toLocaleString()})]}),(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-dark-500`,children:e(`systemPage.recovery.restoreTime`)}),(0,k.jsx)(`p`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:u.restoreMs===null?`—`:`${(u.restoreMs/1e3).toFixed(1)} s`})]}),(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-dark-500`,children:e(`systemPage.recovery.drillSpacing`)}),(0,k.jsx)(`p`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:j(u.rpoSeconds)})]}),(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-dark-500`,children:e(`systemPage.recovery.archiveSize`)}),(0,k.jsx)(`p`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:A(u.snapshotBytes)})]})]}),l&&l.status===`failed`&&(0,k.jsxs)(`p`,{className:`mt-3 rounded-lg bg-red-50 px-3 py-2 text-xs text-red-700 dark:bg-red-950/30 dark:text-red-300`,children:[e(`systemPage.recovery.lastFailed`,{date:new Date(l.startedAt).toLocaleString()}),l.error?` — ${l.error}`:``]}),n.drills.length>0&&(0,k.jsx)(`div`,{className:`mt-3 max-h-48 overflow-y-auto`,children:(0,k.jsxs)(`table`,{className:`w-full text-xs`,children:[(0,k.jsx)(`thead`,{children:(0,k.jsxs)(`tr`,{className:`text-left text-gray-500 dark:text-dark-500`,children:[(0,k.jsx)(`th`,{className:`py-1 pe-3 font-medium`,children:e(`systemPage.recovery.columns.when`)}),(0,k.jsx)(`th`,{className:`py-1 pe-3 font-medium`,children:e(`systemPage.recovery.columns.origin`)}),(0,k.jsx)(`th`,{className:`py-1 pe-3 font-medium`,children:e(`systemPage.recovery.columns.status`)}),(0,k.jsx)(`th`,{className:`py-1 font-medium`,children:e(`systemPage.recovery.columns.restore`)})]})}),(0,k.jsx)(`tbody`,{children:n.drills.slice(0,10).map(t=>(0,k.jsxs)(`tr`,{className:`border-t border-gray-100 text-gray-700 dark:border-dark-200 dark:text-dark-800`,children:[(0,k.jsx)(`td`,{className:`py-1 pe-3`,children:new Date(t.startedAt).toLocaleString()}),(0,k.jsx)(`td`,{className:`py-1 pe-3`,children:t.origin===`manual`?e(`systemPage.recovery.originManual`):e(`systemPage.recovery.originScheduled`)}),(0,k.jsx)(`td`,{className:`py-1 pe-3`,children:(0,k.jsx)(`span`,{className:t.status===`passed`?`text-green-600 dark:text-green-400`:t.status===`failed`?`text-red-600 dark:text-red-400`:`text-gray-500 dark:text-dark-500`,children:e(`systemPage.recovery.status.${t.status}`)})}),(0,k.jsx)(`td`,{className:`py-1`,children:t.restoreMs===null?`—`:`${(t.restoreMs/1e3).toFixed(1)} s`})]},t.id))})]})})]})},N=new Intl.NumberFormat(void 0,{maximumFractionDigits:1}),P=new Intl.NumberFormat(void 0,{maximumFractionDigits:1}),F=new Intl.DateTimeFormat(void 0,{dateStyle:`medium`,timeStyle:`short`}),I=e=>{if(!Number.isFinite(e)||e<0)return`—`;if(e===0)return`0 B`;let t=[`B`,`KB`,`MB`,`GB`,`TB`,`PB`],n=Math.min(t.length-1,Math.floor(Math.log(e)/Math.log(1024)));return`${N.format(e/1024**n)} ${t[n]}`},L=e=>{if(!Number.isFinite(e)||e<0)return`—`;let t=Math.floor(e/60),n=Math.floor(t/1440),r=Math.floor(t%1440/60),i=t%60;return n>0?`${n}d ${r}h`:r>0?`${r}h ${i}m`:i>0?`${i}m`:`${Math.floor(e)}s`},R=e=>Math.min(100,Math.max(0,Number.isFinite(e)?e:0)),z=e=>{switch(e.toLowerCase()){case`running`:return`bg-emerald-500/10 text-emerald-700 dark:text-emerald-300`;case`paused`:return`bg-amber-500/10 text-amber-700 dark:text-amber-300`;case`exited`:case`dead`:return`bg-gray-500/10 text-gray-600 dark:text-dark-600`;default:return`bg-primary-500/10 text-primary-700 dark:text-primary-300`}},B=({title:e,description:t,icon:n,className:r,action:i,children:o})=>(0,k.jsxs)(`section`,{className:a(`overflow-hidden rounded-2xl border border-gray-200/80 bg-white/80 shadow-subtle backdrop-blur-md dark:border-white/[0.08] dark:bg-dark-100/75`,r),children:[(0,k.jsxs)(`div`,{className:`flex items-start justify-between gap-4 border-b border-gray-200/70 px-4 py-3 dark:border-white/[0.07] sm:px-5`,children:[(0,k.jsxs)(`div`,{className:`flex min-w-0 items-start gap-3`,children:[(0,k.jsx)(`div`,{className:`mt-0.5 rounded-xl bg-primary-500/10 p-1.5 text-primary-600 dark:text-primary-300`,children:(0,k.jsx)(n,{className:`h-4 w-4`})}),(0,k.jsxs)(`div`,{className:`min-w-0`,children:[(0,k.jsx)(`h2`,{className:`text-sm font-medium text-gray-950 dark:text-dark-950`,children:e}),t&&(0,k.jsx)(`p`,{className:`mt-1 text-xs leading-5 text-gray-500 dark:text-dark-500`,children:t})]})]}),i]}),o]}),V=({label:e,value:t,mono:n})=>(0,k.jsxs)(`div`,{className:`flex min-w-0 items-start justify-between gap-5 border-b border-gray-100 py-2 last:border-0 dark:border-white/[0.05]`,children:[(0,k.jsx)(`dt`,{className:`shrink-0 text-xs text-gray-500 dark:text-dark-500`,children:e}),(0,k.jsx)(`dd`,{className:a(`min-w-0 break-words text-end text-xs font-medium text-gray-800 dark:text-dark-800`,n&&`font-mono text-[11px]`),children:t})]}),H=({value:e,tone:t=`primary`})=>(0,k.jsx)(`div`,{className:`h-2 overflow-hidden rounded-full bg-gray-100 dark:bg-dark-300`,role:`progressbar`,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":Math.round(R(e)),children:(0,k.jsx)(`div`,{className:a(`h-full rounded-full transition-[width] duration-300`,t===`warning`?`bg-amber-500 dark:bg-amber-400`:`bg-primary-500 dark:bg-primary-400`),style:{width:`${R(e)}%`}})}),U=()=>{let{t:e}=i(),{data:t,error:n,isFetching:o,refetch:s}=r({queryKey:[`work-admin-overview`],queryFn:async()=>{let t=await x.adminOverview();if(!t.success||!t.data)throw Error(t.error||e(`systemPage.loadFailed`));return t.data},refetchInterval:3e4,refetchIntervalInBackground:!1});if(!t)return n?(0,k.jsx)(B,{title:e(`systemPage.work.title`),description:e(`systemPage.work.description`),icon:g,children:(0,k.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3 px-4 py-4 sm:px-5`,children:[(0,k.jsxs)(`div`,{className:`flex items-start gap-3 text-sm text-red-700 dark:text-red-300`,children:[(0,k.jsx)(m,{className:`mt-0.5 h-4 w-4 shrink-0`}),(0,k.jsx)(`p`,{children:n instanceof Error&&n.message?n.message:e(`systemPage.loadFailed`)})]}),(0,k.jsx)(w,{variant:`outline`,size:`sm`,onClick:()=>void s(),disabled:o,children:e(`common.retry`)})]})}):null;let c=t=>e(t===null?`systemPage.work.stateUnknown`:t?`systemPage.work.stateRunning`:`systemPage.work.stateStopped`),l=t=>t===`running`?e(`systemPage.work.stateRunning`):t===`starting`?e(`systemPage.work.stateStarting`):`—`;return(0,k.jsxs)(B,{title:e(`systemPage.work.title`),description:e(`systemPage.work.description`),icon:g,action:(0,k.jsxs)(`span`,{className:a(`inline-flex items-center gap-1.5 rounded-full px-2.5 py-1 text-[10px] font-medium uppercase tracking-[0.1em]`,t.runtimeAvailable?`bg-emerald-500/10 text-emerald-700 dark:text-emerald-300`:`bg-gray-500/10 text-gray-600 dark:text-dark-600`),children:[(0,k.jsx)(`span`,{className:a(`h-1.5 w-1.5 rounded-full`,t.runtimeAvailable?`bg-emerald-500`:`bg-gray-400`)}),t.runtimeAvailable?e(`systemPage.work.runtimeAvailable`):e(`systemPage.work.runtimeUnavailable`)]}),children:[(0,k.jsx)(`div`,{className:`grid gap-3 border-b border-gray-200/70 p-4 dark:border-white/[0.07] sm:grid-cols-2 sm:p-5 lg:grid-cols-4`,children:[[e(`systemPage.work.access`),t.accessMode===`all-users`?e(`systemPage.work.accessAllUsers`):e(`systemPage.work.accessAdmins`)],[e(`systemPage.work.activeRuntimes`),`${t.admission.activeGlobal} / ${t.admission.maxGlobal}`],[e(`systemPage.work.pendingCleanups`),t.recoveryPending],[e(`systemPage.work.orphans`),t.orphanContainers.length]].map(([e,t])=>(0,k.jsxs)(`div`,{className:`rounded-xl bg-gray-50 px-3 py-2.5 dark:bg-dark-200/70`,children:[(0,k.jsx)(`div`,{className:`text-[11px] text-gray-500 dark:text-dark-500`,children:e}),(0,k.jsx)(`div`,{className:`mt-1 text-xl text-gray-950 dark:text-dark-950`,children:t})]},String(e)))}),!t.runtimeAvailable&&t.runtimeReason&&(0,k.jsxs)(`div`,{className:`mx-4 mt-4 flex items-start gap-3 rounded-xl border border-gray-200 bg-gray-50 px-4 py-3 text-sm text-gray-600 dark:border-white/[0.07] dark:bg-dark-200/60 dark:text-dark-600 sm:mx-5`,children:[(0,k.jsx)(m,{className:`mt-0.5 h-4 w-4 shrink-0`}),(0,k.jsx)(`p`,{children:t.runtimeReason})]}),t.tasks.length===0?(0,k.jsx)(`p`,{className:`px-4 py-4 text-sm text-gray-500 dark:text-dark-500 sm:px-5`,children:e(`systemPage.work.noTasks`)}):(0,k.jsx)(`div`,{className:`overflow-x-auto`,children:(0,k.jsxs)(`table`,{"data-testid":`system-work-table`,className:`w-full min-w-[760px] text-sm`,children:[(0,k.jsx)(`thead`,{className:`text-[11px] uppercase tracking-[0.1em] text-gray-400 dark:text-dark-500`,children:(0,k.jsxs)(`tr`,{children:[(0,k.jsx)(`th`,{className:`px-5 py-2 text-start font-medium`,children:e(`systemPage.work.owner`)}),(0,k.jsx)(`th`,{className:`px-4 py-2 text-start font-medium`,children:e(`systemPage.work.task`)}),(0,k.jsx)(`th`,{className:`px-4 py-2 text-start font-medium`,children:e(`systemPage.work.state`)}),(0,k.jsx)(`th`,{className:`px-4 py-2 text-start font-medium`,children:e(`systemPage.work.preview`)}),(0,k.jsx)(`th`,{className:`px-4 py-2 text-start font-medium`,children:e(`systemPage.work.terminals`)}),(0,k.jsx)(`th`,{className:`px-5 py-2 text-end font-medium`,children:e(`systemPage.work.updated`)})]})}),(0,k.jsx)(`tbody`,{className:`divide-y divide-gray-100 dark:divide-white/[0.06]`,children:t.tasks.map(e=>(0,k.jsxs)(`tr`,{children:[(0,k.jsx)(`td`,{className:`px-5 py-2.5 text-gray-800 dark:text-dark-800`,children:e.ownerUsername}),(0,k.jsxs)(`td`,{className:`px-4 py-2.5`,children:[(0,k.jsx)(`div`,{className:`font-medium text-gray-900 dark:text-dark-900`,children:e.title}),(0,k.jsx)(`div`,{className:`mt-0.5 font-mono text-[10px] text-gray-500 dark:text-dark-500`,children:e.model})]}),(0,k.jsx)(`td`,{className:`px-4 py-2.5`,children:(0,k.jsxs)(`span`,{className:a(`inline-flex items-center gap-1.5 text-xs`,e.running?`text-emerald-700 dark:text-emerald-300`:`text-gray-600 dark:text-dark-600`),children:[(0,k.jsx)(`span`,{className:a(`h-1.5 w-1.5 rounded-full`,e.running===null?`bg-amber-400`:e.running?`bg-emerald-500`:`bg-gray-400`)}),c(e.running)]})}),(0,k.jsx)(`td`,{className:`px-4 py-2.5 text-xs text-gray-600 dark:text-dark-600`,children:l(e.previewStatus)}),(0,k.jsx)(`td`,{className:`px-4 py-2.5 text-xs text-gray-600 dark:text-dark-600`,children:e.terminalSessions}),(0,k.jsx)(`td`,{className:`px-5 py-2.5 text-end text-xs text-gray-600 dark:text-dark-600`,children:F.format(e.updatedAt)})]},e.id))})]})})]})},W=()=>{let{t:e}=i(),{data:t,error:n,isLoading:s,isFetching:c,refetch:l}=r({queryKey:[`system-diagnostics`],queryFn:async()=>{let t=await S.getDiagnostics();if(!t.success||!t.data)throw Error(t.error||e(`systemPage.loadFailed`));return t.data},refetchInterval:3e4,refetchIntervalInBackground:!1}),d=n?n instanceof Error?n.message:e(`systemPage.loadFailed`):null;return s&&!t?(0,k.jsx)(E,{width:`wide`,children:(0,k.jsx)(`div`,{className:`flex min-h-[50vh] items-center justify-center`,children:(0,k.jsx)(o,{className:`h-7 w-7 animate-spin text-primary-500`})})}):(0,k.jsxs)(E,{width:`wide`,children:[(0,k.jsx)(T,{eyebrow:e(`systemPage.eyebrow`),title:e(`systemPage.title`),description:e(`systemPage.description`),actions:(0,k.jsxs)(`div`,{className:`flex items-center gap-3`,children:[t&&(0,k.jsx)(`span`,{className:`hidden text-xs text-gray-500 dark:text-dark-500 sm:inline`,children:e(`systemPage.updated`,{date:F.format(t.generatedAt)})}),(0,k.jsxs)(w,{variant:`outline`,size:`sm`,onClick:()=>void l(),disabled:c,children:[(0,k.jsx)(u,{className:a(`h-4 w-4`,c&&`animate-spin`)}),(0,k.jsx)(`span`,{className:`sr-only`,children:e(`systemPage.refresh`)})]})]})}),d&&(0,k.jsxs)(`div`,{className:`mb-6 flex items-center gap-3 rounded-2xl border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-700 dark:border-red-900/40 dark:bg-red-950/30 dark:text-red-300`,children:[(0,k.jsx)(m,{className:`h-4 w-4 shrink-0`}),(0,k.jsx)(`span`,{children:d})]}),t&&(0,k.jsxs)(`div`,{"data-testid":`system-dashboard`,className:`space-y-4`,children:[(0,k.jsx)(G,{diagnostics:t}),(0,k.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-2`,children:[(0,k.jsx)(K,{diagnostics:t}),(0,k.jsx)(q,{diagnostics:t})]}),(0,k.jsx)(J,{diagnostics:t}),(0,k.jsx)(Y,{diagnostics:t}),(0,k.jsx)(U,{}),(0,k.jsx)(M,{}),(0,k.jsx)(Z,{diagnostics:t}),(0,k.jsxs)(`div`,{className:`flex items-start gap-2 px-1 text-xs leading-5 text-gray-500 dark:text-dark-500`,children:[(0,k.jsx)(y,{className:`mt-0.5 h-4 w-4 shrink-0 text-primary-500`}),(0,k.jsx)(`p`,{children:e(`systemPage.securityNote`)})]})]})]})},G=({diagnostics:e})=>{let{t}=i(),n=e.filesystems.find(e=>e.label===`Data directory`)??e.filesystems[0],r=[{label:t(`systemPage.cards.uptime`),value:L(e.host.uptimeSeconds),detail:t(`systemPage.cards.uptimeDetail`,{date:F.format(e.host.bootedAt)}),icon:s},{label:t(`systemPage.cards.memory`),value:`${P.format(e.memory.usedPercent)}%`,detail:t(`systemPage.cards.memoryDetail`,{used:I(e.memory.usedBytes),total:I(e.memory.totalBytes)}),icon:v},{label:t(`systemPage.cards.freeSpace`),value:n?I(n.freeBytes):`—`,detail:n?t(`systemPage.cards.freeSpaceDetail`,{label:n.label,total:I(n.totalBytes)}):t(`systemPage.cards.unavailable`),icon:c},{label:t(`systemPage.cards.containers`),value:e.docker.available?String(e.docker.runningContainers):`—`,detail:e.docker.available?t(`systemPage.cards.containersDetail`,{total:e.docker.totalContainers}):t(`systemPage.cards.dockerUnavailable`),icon:_}];return(0,k.jsx)(`div`,{className:`grid gap-3 sm:grid-cols-2 xl:grid-cols-4`,children:r.map(e=>{let t=e.icon;return(0,k.jsxs)(`section`,{className:`rounded-2xl border border-gray-200/80 bg-white/75 p-4 shadow-subtle backdrop-blur-md dark:border-white/[0.08] dark:bg-dark-100/70`,children:[(0,k.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,k.jsx)(`span`,{className:`text-xs font-medium uppercase tracking-[0.12em] text-gray-500 dark:text-dark-500`,children:e.label}),(0,k.jsx)(t,{className:`h-4 w-4 text-primary-500 dark:text-primary-400`})]}),(0,k.jsx)(`div`,{className:`mt-2 text-2xl font-normal tracking-[-0.04em] text-gray-950 dark:text-dark-950`,children:e.value}),(0,k.jsx)(`p`,{className:`mt-1.5 text-xs text-gray-500 dark:text-dark-500`,children:e.detail})]},e.label)})})},K=({diagnostics:e})=>{let{t}=i(),{host:n,runtime:r}=e;return(0,k.jsx)(B,{title:t(`systemPage.host.title`),description:t(`systemPage.host.description`),icon:l,action:(0,k.jsx)(`span`,{className:`rounded-full bg-primary-500/10 px-2.5 py-1 text-[10px] font-medium uppercase tracking-[0.1em] text-primary-700 dark:text-primary-300`,children:n.containerized?t(`systemPage.host.container`):t(`systemPage.host.native`)}),children:(0,k.jsxs)(`dl`,{className:`px-4 py-2 sm:px-5`,children:[(0,k.jsx)(V,{label:t(`systemPage.host.hostname`),value:n.hostname}),(0,k.jsx)(V,{label:t(`systemPage.host.operatingSystem`),value:`${n.platform} ${n.release} · ${n.architecture}`}),(0,k.jsx)(V,{label:t(`systemPage.host.processor`),value:`${n.cpuModel} · ${n.logicalCpus} ${t(`systemPage.host.logicalCpus`)}`}),(0,k.jsx)(V,{label:t(`systemPage.host.loadAverage`),value:n.loadAverage.map(e=>P.format(e)).join(` · `)}),(0,k.jsx)(V,{label:t(`systemPage.host.libreVersion`),value:r.appVersion}),(0,k.jsx)(V,{label:t(`systemPage.host.nodeVersion`),value:r.nodeVersion}),(0,k.jsx)(V,{label:t(`systemPage.host.process`),value:`PID ${r.processId} · ${L(r.processUptimeSeconds)}`}),(0,k.jsx)(V,{label:t(`systemPage.host.workingDirectory`),value:r.workingDirectory,mono:!0})]})})},q=({diagnostics:e})=>{let{t}=i(),{memory:n}=e;return(0,k.jsx)(B,{title:t(`systemPage.memory.title`),description:t(`systemPage.memory.description`),icon:v,children:(0,k.jsxs)(`div`,{className:`space-y-4 p-4 sm:p-5`,children:[(0,k.jsxs)(`div`,{children:[(0,k.jsxs)(`div`,{className:`mb-2 flex items-end justify-between gap-4`,children:[(0,k.jsxs)(`div`,{children:[(0,k.jsxs)(`div`,{className:`text-2xl tracking-[-0.04em] text-gray-950 dark:text-dark-950`,children:[P.format(n.usedPercent),`%`]}),(0,k.jsx)(`div`,{className:`mt-1 text-xs text-gray-500 dark:text-dark-500`,children:t(`systemPage.memory.usedOf`,{used:I(n.usedBytes),total:I(n.totalBytes)})})]}),(0,k.jsx)(`span`,{className:`text-xs tabular-nums text-gray-500 dark:text-dark-500`,children:t(`systemPage.memory.free`,{value:I(n.freeBytes)})})]}),(0,k.jsx)(H,{value:n.usedPercent,tone:n.usedPercent>=85?`warning`:`primary`})]}),(0,k.jsx)(`div`,{className:`grid grid-cols-2 gap-3`,children:[[t(`systemPage.memory.processRss`),n.processRssBytes],[t(`systemPage.memory.heapUsed`),n.heapUsedBytes],[t(`systemPage.memory.heapTotal`),n.heapTotalBytes],[t(`systemPage.memory.external`),n.externalBytes]].map(([e,t])=>(0,k.jsxs)(`div`,{className:`rounded-xl bg-gray-50 px-3 py-2.5 dark:bg-dark-200/70`,children:[(0,k.jsx)(`div`,{className:`text-[11px] text-gray-500 dark:text-dark-500`,children:e}),(0,k.jsx)(`div`,{className:`mt-1 text-lg text-gray-950 dark:text-dark-950`,children:I(Number(t))})]},String(e)))})]})})},J=({diagnostics:e})=>{let{t}=i();return(0,k.jsx)(B,{title:t(`systemPage.storage.title`),description:t(`systemPage.storage.description`),icon:c,children:e.filesystems.length===0?(0,k.jsx)(`p`,{className:`p-5 text-sm text-gray-500 dark:text-dark-500`,children:t(`systemPage.storage.empty`)}):(0,k.jsx)(`div`,{className:`grid gap-3 p-4 sm:grid-cols-2 sm:p-5`,children:e.filesystems.map(e=>(0,k.jsxs)(`div`,{className:`rounded-xl border border-gray-200/80 bg-gray-50/70 p-4 dark:border-white/[0.06] dark:bg-dark-200/55`,children:[(0,k.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,k.jsxs)(`div`,{className:`min-w-0`,children:[(0,k.jsx)(`h3`,{className:`text-sm font-medium text-gray-900 dark:text-dark-900`,children:e.label}),(0,k.jsx)(`p`,{className:`mt-1 truncate font-mono text-[10px] text-gray-500 dark:text-dark-500`,children:e.path})]}),(0,k.jsxs)(`span`,{className:`shrink-0 text-sm tabular-nums text-gray-700 dark:text-dark-700`,children:[P.format(e.usedPercent),`%`]})]}),(0,k.jsx)(`div`,{className:`mt-4`,children:(0,k.jsx)(H,{value:e.usedPercent,tone:e.usedPercent>=85?`warning`:`primary`})}),(0,k.jsxs)(`div`,{className:`mt-3 flex justify-between gap-4 text-[11px] text-gray-500 dark:text-dark-500`,children:[(0,k.jsx)(`span`,{children:t(`systemPage.storage.used`,{value:I(e.usedBytes)})}),(0,k.jsx)(`span`,{children:t(`systemPage.storage.free`,{value:I(e.freeBytes)})})]})]},`${e.label}:${e.path}`))})})},Y=({diagnostics:e})=>{let{t}=i(),{docker:n}=e;return(0,k.jsx)(B,{title:t(`systemPage.docker.title`),description:t(`systemPage.docker.description`),icon:_,action:(0,k.jsxs)(`span`,{className:a(`inline-flex items-center gap-1.5 rounded-full px-2.5 py-1 text-[10px] font-medium uppercase tracking-[0.1em]`,n.available?`bg-emerald-500/10 text-emerald-700 dark:text-emerald-300`:`bg-gray-500/10 text-gray-600 dark:text-dark-600`),children:[(0,k.jsx)(`span`,{className:a(`h-1.5 w-1.5 rounded-full`,n.available?`bg-emerald-500`:`bg-gray-400`)}),n.available?t(`systemPage.docker.connected`):t(`systemPage.docker.unavailable`)]}),children:n.available?(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`div`,{className:`grid gap-3 border-b border-gray-200/70 p-4 dark:border-white/[0.07] sm:grid-cols-2 sm:p-5 lg:grid-cols-4`,children:[[t(`systemPage.docker.running`),n.runningContainers],[t(`systemPage.docker.stopped`),n.stoppedContainers],[t(`systemPage.docker.paused`),n.pausedContainers],[t(`systemPage.docker.total`),n.totalContainers]].map(([e,t])=>(0,k.jsxs)(`div`,{className:`rounded-xl bg-gray-50 px-3 py-2.5 dark:bg-dark-200/70`,children:[(0,k.jsx)(`div`,{className:`text-[11px] text-gray-500 dark:text-dark-500`,children:e}),(0,k.jsx)(`div`,{className:`mt-1 text-xl text-gray-950 dark:text-dark-950`,children:t})]},String(e)))}),(0,k.jsxs)(`div`,{className:`flex flex-wrap gap-2 px-4 py-4 sm:px-5`,children:[n.serverVersion&&(0,k.jsx)(X,{label:t(`systemPage.docker.version`),value:n.serverVersion}),n.operatingSystem&&(0,k.jsx)(X,{label:t(`systemPage.docker.host`),value:n.operatingSystem}),n.architecture&&(0,k.jsx)(X,{label:t(`systemPage.docker.architecture`),value:n.architecture}),n.logicalCpus!==void 0&&(0,k.jsx)(X,{label:t(`systemPage.docker.cpus`),value:String(n.logicalCpus)}),n.memoryBytes!==void 0&&(0,k.jsx)(X,{label:t(`systemPage.docker.memory`),value:I(n.memoryBytes)})]}),n.containers.length===0?(0,k.jsx)(`p`,{className:`px-5 pb-5 text-sm text-gray-500 dark:text-dark-500`,children:t(`systemPage.docker.empty`)}):(0,k.jsx)(`div`,{className:`overflow-x-auto border-t border-gray-200/70 dark:border-white/[0.07]`,children:(0,k.jsxs)(`table`,{"data-testid":`system-docker-table`,className:`w-full min-w-[760px] text-sm`,children:[(0,k.jsx)(`thead`,{className:`text-[11px] uppercase tracking-[0.1em] text-gray-400 dark:text-dark-500`,children:(0,k.jsxs)(`tr`,{children:[(0,k.jsx)(`th`,{className:`px-5 py-2 text-start font-medium`,children:t(`systemPage.docker.container`)}),(0,k.jsx)(`th`,{className:`px-4 py-2 text-start font-medium`,children:t(`systemPage.docker.image`)}),(0,k.jsx)(`th`,{className:`px-4 py-2 text-start font-medium`,children:t(`systemPage.docker.state`)}),(0,k.jsx)(`th`,{className:`px-5 py-2 text-end font-medium`,children:t(`systemPage.docker.created`)})]})}),(0,k.jsx)(`tbody`,{className:`divide-y divide-gray-100 dark:divide-white/[0.06]`,children:n.containers.map(e=>(0,k.jsxs)(`tr`,{children:[(0,k.jsxs)(`td`,{className:`px-5 py-2.5`,children:[(0,k.jsx)(`div`,{className:`font-medium text-gray-900 dark:text-dark-900`,children:e.name}),(0,k.jsx)(`div`,{className:`mt-0.5 font-mono text-[10px] text-gray-500 dark:text-dark-500`,children:e.id})]}),(0,k.jsx)(`td`,{className:`max-w-[280px] px-4 py-2.5`,children:(0,k.jsx)(`div`,{className:`truncate font-mono text-[11px] text-gray-600 dark:text-dark-600`,title:e.image,children:e.image})}),(0,k.jsxs)(`td`,{className:`px-4 py-2.5`,children:[(0,k.jsx)(`span`,{className:a(`inline-flex rounded-full px-2.5 py-1 text-[10px] font-medium uppercase tracking-[0.08em]`,z(e.state)),children:e.state}),(0,k.jsx)(`div`,{className:`mt-1.5 text-[11px] text-gray-500 dark:text-dark-500`,children:e.status})]}),(0,k.jsx)(`td`,{className:`px-5 py-2.5 text-end text-xs text-gray-500 dark:text-dark-500`,children:e.createdAt?F.format(e.createdAt):`—`})]},e.id))})]})})]}):(0,k.jsxs)(`div`,{className:`m-4 flex items-start gap-3 rounded-xl border border-gray-200 bg-gray-50 px-4 py-4 text-sm text-gray-600 dark:border-white/[0.07] dark:bg-dark-200/60 dark:text-dark-600 sm:m-5`,children:[(0,k.jsx)(m,{className:`mt-0.5 h-4 w-4 shrink-0`}),(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`p`,{children:n.reason||t(`systemPage.docker.unavailableDetail`)}),(0,k.jsx)(`p`,{className:`mt-2 text-xs text-gray-500 dark:text-dark-500`,children:t(`systemPage.docker.socketStatus`,{status:n.socketMounted?t(`systemPage.docker.mounted`):t(`systemPage.docker.notMounted`)})})]})]})})},X=({label:e,value:t})=>(0,k.jsxs)(`span`,{className:`rounded-full border border-gray-200 bg-white px-3 py-1.5 text-[11px] text-gray-600 dark:border-white/[0.07] dark:bg-dark-200/70 dark:text-dark-600`,children:[(0,k.jsx)(`span`,{className:`text-gray-400 dark:text-dark-500`,children:e}),` `,t]}),Z=({diagnostics:e})=>{let{t}=i();return(0,k.jsx)(B,{title:t(`systemPage.network.title`),description:t(`systemPage.network.description`),icon:h,children:e.network.interfaces.length===0?(0,k.jsx)(`p`,{className:`p-5 text-sm text-gray-500 dark:text-dark-500`,children:t(`systemPage.network.empty`)}):(0,k.jsx)(`div`,{className:`grid gap-3 p-4 sm:grid-cols-2 sm:p-5 xl:grid-cols-3`,children:e.network.interfaces.map(e=>(0,k.jsxs)(`div`,{className:`rounded-xl border border-gray-200/80 bg-gray-50/70 p-4 dark:border-white/[0.06] dark:bg-dark-200/55`,children:[(0,k.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,k.jsx)(f,{className:`h-4 w-4 text-primary-500`}),(0,k.jsx)(`h3`,{className:`font-mono text-xs font-medium text-gray-900 dark:text-dark-900`,children:e.name})]}),(0,k.jsx)(`div`,{className:`mt-3 space-y-2`,children:e.addresses.map(e=>(0,k.jsxs)(`div`,{className:`min-w-0 rounded-xl bg-white px-3 py-2 dark:bg-dark-100/80`,children:[(0,k.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,k.jsx)(`span`,{className:`text-[10px] font-medium uppercase tracking-[0.08em] text-gray-400 dark:text-dark-500`,children:e.family}),e.internal&&(0,k.jsx)(`span`,{className:`text-[10px] text-gray-400 dark:text-dark-500`,children:t(`systemPage.network.internal`)})]}),(0,k.jsx)(`div`,{className:`mt-1 break-all font-mono text-[11px] text-gray-700 dark:text-dark-700`,children:e.cidr||e.address})]},`${e.family}:${e.address}`))}),(e.receivedBytes!==void 0||e.transmittedBytes!==void 0)&&(0,k.jsxs)(`div`,{className:`mt-3 flex justify-between gap-4 text-[10px] text-gray-500 dark:text-dark-500`,children:[(0,k.jsxs)(`span`,{children:[`↓ `,I(e.receivedBytes??0)]}),(0,k.jsxs)(`span`,{children:[`↑ `,I(e.transmittedBytes??0)]})]})]},e.name))})})};export{W as default};
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-vendor-D0Ec-185.js";import{t as r}from"./useQuery-BKulzCS7.js";import{t as i}from"./useTranslation-rdLmo6zV.js";import{t as a}from"./utils-CKWltgs8.js";import{Ft as o,In as s,Jt as c,U as l,Z as u,_r as d,ar as f,br as p,g as m,ht as h,ir as g,kn as _,kt as v,z as y}from"./ui-vendor-Dt9hfsGD.js";import{n as b,t as x}from"./workApi-oO8srJWT.js";import{o as S}from"./api-C4tAvZc2.js";import{t as C}from"./authStore-DzKajX63.js";import{t as w}from"./Button-BxwbQ5xw.js";import{a as T,o as E}from"./ui-DzVF9vZ5.js";var D=e(t(),1),O={getDrills:()=>b.get(`/recovery/drills`).then(e=>e.data),runDrill:()=>b.post(`/recovery/drills/run`).then(e=>e.data)},k=n(),A=e=>e===null?`—`:e>=1048576?`${(e/1048576).toFixed(1)} MB`:e>=1024?`${(e/1024).toFixed(1)} KB`:`${e} B`,j=e=>e===null?`—`:e>=3600?`${(e/3600).toFixed(1)} h`:e>=60?`${Math.round(e/60)} min`:`${e} s`,M=()=>{let{t:e}=i(),{user:t}=C(),[n,r]=(0,D.useState)(null),[a,s]=(0,D.useState)(!1),c=(0,D.useCallback)(async()=>{try{let e=await O.getDrills();e.success&&e.data&&r(e.data)}catch{}},[]);if((0,D.useEffect)(()=>{if(t?.role!==`admin`)return;let e=setTimeout(()=>void c(),0);return()=>clearTimeout(e)},[t?.role,c]),t?.role!==`admin`||!n)return null;let l=n.drills[0],u=n.drills.find(e=>e.status===`passed`),f=async()=>{s(!0);try{let t=await O.runDrill();t.success&&t.data?t.data.status===`passed`?p.success(e(`systemPage.recovery.passed`)):p.error(t.data.error||e(`systemPage.recovery.failed`)):p.error(t.message||e(`systemPage.recovery.failed`))}catch(t){let n=t;p.error(n.response?.data?.message||e(`systemPage.recovery.failed`))}finally{s(!1),await c()}};return(0,k.jsxs)(`section`,{"data-testid":`recovery-drills-panel`,className:`rounded-2xl border border-gray-200 bg-white p-4 dark:border-dark-200 dark:bg-dark-25`,children:[(0,k.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,k.jsxs)(`div`,{children:[(0,k.jsxs)(`h3`,{className:`flex items-center gap-2 text-sm font-semibold text-gray-900 dark:text-gray-100`,children:[(0,k.jsx)(d,{className:`h-4 w-4 text-primary-500`}),e(`systemPage.recovery.title`)]}),(0,k.jsx)(`p`,{className:`mt-0.5 text-xs text-gray-500 dark:text-dark-500`,children:n.supported?n.intervalHours?e(`systemPage.recovery.scheduleOn`,{hours:n.intervalHours}):e(`systemPage.recovery.scheduleOff`):e(`systemPage.recovery.teamUnsupported`)})]}),n.supported&&(0,k.jsx)(w,{size:`sm`,onClick:()=>void f(),disabled:a,children:a?(0,k.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,k.jsx)(o,{className:`h-4 w-4 animate-spin`}),e(`systemPage.recovery.running`)]}):e(`systemPage.recovery.runNow`)})]}),u&&(0,k.jsxs)(`div`,{className:`mt-3 grid grid-cols-2 gap-3 sm:grid-cols-4`,children:[(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-dark-500`,children:e(`systemPage.recovery.lastPassed`)}),(0,k.jsx)(`p`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:new Date(u.startedAt).toLocaleString()})]}),(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-dark-500`,children:e(`systemPage.recovery.restoreTime`)}),(0,k.jsx)(`p`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:u.restoreMs===null?`—`:`${(u.restoreMs/1e3).toFixed(1)} s`})]}),(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-dark-500`,children:e(`systemPage.recovery.drillSpacing`)}),(0,k.jsx)(`p`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:j(u.rpoSeconds)})]}),(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-dark-500`,children:e(`systemPage.recovery.archiveSize`)}),(0,k.jsx)(`p`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:A(u.snapshotBytes)})]})]}),l&&l.status===`failed`&&(0,k.jsxs)(`p`,{className:`mt-3 rounded-lg bg-red-50 px-3 py-2 text-xs text-red-700 dark:bg-red-950/30 dark:text-red-300`,children:[e(`systemPage.recovery.lastFailed`,{date:new Date(l.startedAt).toLocaleString()}),l.error?` — ${l.error}`:``]}),n.drills.length>0&&(0,k.jsx)(`div`,{className:`mt-3 max-h-48 overflow-y-auto`,children:(0,k.jsxs)(`table`,{className:`w-full text-xs`,children:[(0,k.jsx)(`thead`,{children:(0,k.jsxs)(`tr`,{className:`text-left text-gray-500 dark:text-dark-500`,children:[(0,k.jsx)(`th`,{className:`py-1 pe-3 font-medium`,children:e(`systemPage.recovery.columns.when`)}),(0,k.jsx)(`th`,{className:`py-1 pe-3 font-medium`,children:e(`systemPage.recovery.columns.origin`)}),(0,k.jsx)(`th`,{className:`py-1 pe-3 font-medium`,children:e(`systemPage.recovery.columns.status`)}),(0,k.jsx)(`th`,{className:`py-1 font-medium`,children:e(`systemPage.recovery.columns.restore`)})]})}),(0,k.jsx)(`tbody`,{children:n.drills.slice(0,10).map(t=>(0,k.jsxs)(`tr`,{className:`border-t border-gray-100 text-gray-700 dark:border-dark-200 dark:text-dark-800`,children:[(0,k.jsx)(`td`,{className:`py-1 pe-3`,children:new Date(t.startedAt).toLocaleString()}),(0,k.jsx)(`td`,{className:`py-1 pe-3`,children:t.origin===`manual`?e(`systemPage.recovery.originManual`):e(`systemPage.recovery.originScheduled`)}),(0,k.jsx)(`td`,{className:`py-1 pe-3`,children:(0,k.jsx)(`span`,{className:t.status===`passed`?`text-green-600 dark:text-green-400`:t.status===`failed`?`text-red-600 dark:text-red-400`:`text-gray-500 dark:text-dark-500`,children:e(`systemPage.recovery.status.${t.status}`)})}),(0,k.jsx)(`td`,{className:`py-1`,children:t.restoreMs===null?`—`:`${(t.restoreMs/1e3).toFixed(1)} s`})]},t.id))})]})})]})},N=new Intl.NumberFormat(void 0,{maximumFractionDigits:1}),P=new Intl.NumberFormat(void 0,{maximumFractionDigits:1}),F=new Intl.DateTimeFormat(void 0,{dateStyle:`medium`,timeStyle:`short`}),I=e=>{if(!Number.isFinite(e)||e<0)return`—`;if(e===0)return`0 B`;let t=[`B`,`KB`,`MB`,`GB`,`TB`,`PB`],n=Math.min(t.length-1,Math.floor(Math.log(e)/Math.log(1024)));return`${N.format(e/1024**n)} ${t[n]}`},L=e=>{if(!Number.isFinite(e)||e<0)return`—`;let t=Math.floor(e/60),n=Math.floor(t/1440),r=Math.floor(t%1440/60),i=t%60;return n>0?`${n}d ${r}h`:r>0?`${r}h ${i}m`:i>0?`${i}m`:`${Math.floor(e)}s`},R=e=>Math.min(100,Math.max(0,Number.isFinite(e)?e:0)),z=e=>{switch(e.toLowerCase()){case`running`:return`bg-emerald-500/10 text-emerald-700 dark:text-emerald-300`;case`paused`:return`bg-amber-500/10 text-amber-700 dark:text-amber-300`;case`exited`:case`dead`:return`bg-gray-500/10 text-gray-600 dark:text-dark-600`;default:return`bg-primary-500/10 text-primary-700 dark:text-primary-300`}},B=({title:e,description:t,icon:n,className:r,action:i,children:o})=>(0,k.jsxs)(`section`,{className:a(`overflow-hidden rounded-2xl border border-gray-200/80 bg-white/80 shadow-subtle backdrop-blur-md dark:border-white/[0.08] dark:bg-dark-100/75`,r),children:[(0,k.jsxs)(`div`,{className:`flex items-start justify-between gap-4 border-b border-gray-200/70 px-4 py-3 dark:border-white/[0.07] sm:px-5`,children:[(0,k.jsxs)(`div`,{className:`flex min-w-0 items-start gap-3`,children:[(0,k.jsx)(`div`,{className:`mt-0.5 rounded-xl bg-primary-500/10 p-1.5 text-primary-600 dark:text-primary-300`,children:(0,k.jsx)(n,{className:`h-4 w-4`})}),(0,k.jsxs)(`div`,{className:`min-w-0`,children:[(0,k.jsx)(`h2`,{className:`text-sm font-medium text-gray-950 dark:text-dark-950`,children:e}),t&&(0,k.jsx)(`p`,{className:`mt-1 text-xs leading-5 text-gray-500 dark:text-dark-500`,children:t})]})]}),i]}),o]}),V=({label:e,value:t,mono:n})=>(0,k.jsxs)(`div`,{className:`flex min-w-0 items-start justify-between gap-5 border-b border-gray-100 py-2 last:border-0 dark:border-white/[0.05]`,children:[(0,k.jsx)(`dt`,{className:`shrink-0 text-xs text-gray-500 dark:text-dark-500`,children:e}),(0,k.jsx)(`dd`,{className:a(`min-w-0 break-words text-end text-xs font-medium text-gray-800 dark:text-dark-800`,n&&`font-mono text-[11px]`),children:t})]}),H=({value:e,tone:t=`primary`})=>(0,k.jsx)(`div`,{className:`h-2 overflow-hidden rounded-full bg-gray-100 dark:bg-dark-300`,role:`progressbar`,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":Math.round(R(e)),children:(0,k.jsx)(`div`,{className:a(`h-full rounded-full transition-[width] duration-300`,t===`warning`?`bg-amber-500 dark:bg-amber-400`:`bg-primary-500 dark:bg-primary-400`),style:{width:`${R(e)}%`}})}),U=()=>{let{t:e}=i(),{data:t,error:n,isFetching:o,refetch:s}=r({queryKey:[`work-admin-overview`],queryFn:async()=>{let t=await x.adminOverview();if(!t.success||!t.data)throw Error(t.error||e(`systemPage.loadFailed`));return t.data},refetchInterval:3e4,refetchIntervalInBackground:!1});if(!t)return n?(0,k.jsx)(B,{title:e(`systemPage.work.title`),description:e(`systemPage.work.description`),icon:g,children:(0,k.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3 px-4 py-4 sm:px-5`,children:[(0,k.jsxs)(`div`,{className:`flex items-start gap-3 text-sm text-red-700 dark:text-red-300`,children:[(0,k.jsx)(m,{className:`mt-0.5 h-4 w-4 shrink-0`}),(0,k.jsx)(`p`,{children:n instanceof Error&&n.message?n.message:e(`systemPage.loadFailed`)})]}),(0,k.jsx)(w,{variant:`outline`,size:`sm`,onClick:()=>void s(),disabled:o,children:e(`common.retry`)})]})}):null;let c=t=>e(t===null?`systemPage.work.stateUnknown`:t?`systemPage.work.stateRunning`:`systemPage.work.stateStopped`),l=t=>t===`running`?e(`systemPage.work.stateRunning`):t===`starting`?e(`systemPage.work.stateStarting`):`—`;return(0,k.jsxs)(B,{title:e(`systemPage.work.title`),description:e(`systemPage.work.description`),icon:g,action:(0,k.jsxs)(`span`,{className:a(`inline-flex items-center gap-1.5 rounded-full px-2.5 py-1 text-[10px] font-medium uppercase tracking-[0.1em]`,t.runtimeAvailable?`bg-emerald-500/10 text-emerald-700 dark:text-emerald-300`:`bg-gray-500/10 text-gray-600 dark:text-dark-600`),children:[(0,k.jsx)(`span`,{className:a(`h-1.5 w-1.5 rounded-full`,t.runtimeAvailable?`bg-emerald-500`:`bg-gray-400`)}),t.runtimeAvailable?e(`systemPage.work.runtimeAvailable`):e(`systemPage.work.runtimeUnavailable`)]}),children:[(0,k.jsx)(`div`,{className:`grid gap-3 border-b border-gray-200/70 p-4 dark:border-white/[0.07] sm:grid-cols-2 sm:p-5 lg:grid-cols-4`,children:[[e(`systemPage.work.access`),t.accessMode===`all-users`?e(`systemPage.work.accessAllUsers`):e(`systemPage.work.accessAdmins`)],[e(`systemPage.work.activeRuntimes`),`${t.admission.activeGlobal} / ${t.admission.maxGlobal}`],[e(`systemPage.work.pendingCleanups`),t.recoveryPending],[e(`systemPage.work.orphans`),t.orphanContainers.length]].map(([e,t])=>(0,k.jsxs)(`div`,{className:`rounded-xl bg-gray-50 px-3 py-2.5 dark:bg-dark-200/70`,children:[(0,k.jsx)(`div`,{className:`text-[11px] text-gray-500 dark:text-dark-500`,children:e}),(0,k.jsx)(`div`,{className:`mt-1 text-xl text-gray-950 dark:text-dark-950`,children:t})]},String(e)))}),!t.runtimeAvailable&&t.runtimeReason&&(0,k.jsxs)(`div`,{className:`mx-4 mt-4 flex items-start gap-3 rounded-xl border border-gray-200 bg-gray-50 px-4 py-3 text-sm text-gray-600 dark:border-white/[0.07] dark:bg-dark-200/60 dark:text-dark-600 sm:mx-5`,children:[(0,k.jsx)(m,{className:`mt-0.5 h-4 w-4 shrink-0`}),(0,k.jsx)(`p`,{children:t.runtimeReason})]}),t.tasks.length===0?(0,k.jsx)(`p`,{className:`px-4 py-4 text-sm text-gray-500 dark:text-dark-500 sm:px-5`,children:e(`systemPage.work.noTasks`)}):(0,k.jsx)(`div`,{className:`overflow-x-auto`,children:(0,k.jsxs)(`table`,{"data-testid":`system-work-table`,className:`w-full min-w-[760px] text-sm`,children:[(0,k.jsx)(`thead`,{className:`text-[11px] uppercase tracking-[0.1em] text-gray-400 dark:text-dark-500`,children:(0,k.jsxs)(`tr`,{children:[(0,k.jsx)(`th`,{className:`px-5 py-2 text-start font-medium`,children:e(`systemPage.work.owner`)}),(0,k.jsx)(`th`,{className:`px-4 py-2 text-start font-medium`,children:e(`systemPage.work.task`)}),(0,k.jsx)(`th`,{className:`px-4 py-2 text-start font-medium`,children:e(`systemPage.work.state`)}),(0,k.jsx)(`th`,{className:`px-4 py-2 text-start font-medium`,children:e(`systemPage.work.preview`)}),(0,k.jsx)(`th`,{className:`px-4 py-2 text-start font-medium`,children:e(`systemPage.work.terminals`)}),(0,k.jsx)(`th`,{className:`px-5 py-2 text-end font-medium`,children:e(`systemPage.work.updated`)})]})}),(0,k.jsx)(`tbody`,{className:`divide-y divide-gray-100 dark:divide-white/[0.06]`,children:t.tasks.map(e=>(0,k.jsxs)(`tr`,{children:[(0,k.jsx)(`td`,{className:`px-5 py-2.5 text-gray-800 dark:text-dark-800`,children:e.ownerUsername}),(0,k.jsxs)(`td`,{className:`px-4 py-2.5`,children:[(0,k.jsx)(`div`,{className:`font-medium text-gray-900 dark:text-dark-900`,children:e.title}),(0,k.jsx)(`div`,{className:`mt-0.5 font-mono text-[10px] text-gray-500 dark:text-dark-500`,children:e.model})]}),(0,k.jsx)(`td`,{className:`px-4 py-2.5`,children:(0,k.jsxs)(`span`,{className:a(`inline-flex items-center gap-1.5 text-xs`,e.running?`text-emerald-700 dark:text-emerald-300`:`text-gray-600 dark:text-dark-600`),children:[(0,k.jsx)(`span`,{className:a(`h-1.5 w-1.5 rounded-full`,e.running===null?`bg-amber-400`:e.running?`bg-emerald-500`:`bg-gray-400`)}),c(e.running)]})}),(0,k.jsx)(`td`,{className:`px-4 py-2.5 text-xs text-gray-600 dark:text-dark-600`,children:l(e.previewStatus)}),(0,k.jsx)(`td`,{className:`px-4 py-2.5 text-xs text-gray-600 dark:text-dark-600`,children:e.terminalSessions}),(0,k.jsx)(`td`,{className:`px-5 py-2.5 text-end text-xs text-gray-600 dark:text-dark-600`,children:F.format(e.updatedAt)})]},e.id))})]})})]})},W=()=>{let{t:e}=i(),{data:t,error:n,isLoading:s,isFetching:c,refetch:l}=r({queryKey:[`system-diagnostics`],queryFn:async()=>{let t=await S.getDiagnostics();if(!t.success||!t.data)throw Error(t.error||e(`systemPage.loadFailed`));return t.data},refetchInterval:3e4,refetchIntervalInBackground:!1}),d=n?n instanceof Error?n.message:e(`systemPage.loadFailed`):null;return s&&!t?(0,k.jsx)(E,{width:`wide`,children:(0,k.jsx)(`div`,{className:`flex min-h-[50vh] items-center justify-center`,children:(0,k.jsx)(o,{className:`h-7 w-7 animate-spin text-primary-500`})})}):(0,k.jsxs)(E,{width:`wide`,children:[(0,k.jsx)(T,{eyebrow:e(`systemPage.eyebrow`),title:e(`systemPage.title`),description:e(`systemPage.description`),actions:(0,k.jsxs)(`div`,{className:`flex items-center gap-3`,children:[t&&(0,k.jsx)(`span`,{className:`hidden text-xs text-gray-500 dark:text-dark-500 sm:inline`,children:e(`systemPage.updated`,{date:F.format(t.generatedAt)})}),(0,k.jsxs)(w,{variant:`outline`,size:`sm`,onClick:()=>void l(),disabled:c,children:[(0,k.jsx)(u,{className:a(`h-4 w-4`,c&&`animate-spin`)}),(0,k.jsx)(`span`,{className:`sr-only`,children:e(`systemPage.refresh`)})]})]})}),d&&(0,k.jsxs)(`div`,{className:`mb-6 flex items-center gap-3 rounded-2xl border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-700 dark:border-red-900/40 dark:bg-red-950/30 dark:text-red-300`,children:[(0,k.jsx)(m,{className:`h-4 w-4 shrink-0`}),(0,k.jsx)(`span`,{children:d})]}),t&&(0,k.jsxs)(`div`,{"data-testid":`system-dashboard`,className:`space-y-4`,children:[(0,k.jsx)(G,{diagnostics:t}),(0,k.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-2`,children:[(0,k.jsx)(K,{diagnostics:t}),(0,k.jsx)(q,{diagnostics:t})]}),(0,k.jsx)(J,{diagnostics:t}),(0,k.jsx)(Y,{diagnostics:t}),(0,k.jsx)(U,{}),(0,k.jsx)(M,{}),(0,k.jsx)(Z,{diagnostics:t}),(0,k.jsxs)(`div`,{className:`flex items-start gap-2 px-1 text-xs leading-5 text-gray-500 dark:text-dark-500`,children:[(0,k.jsx)(y,{className:`mt-0.5 h-4 w-4 shrink-0 text-primary-500`}),(0,k.jsx)(`p`,{children:e(`systemPage.securityNote`)})]})]})]})},G=({diagnostics:e})=>{let{t}=i(),n=e.filesystems.find(e=>e.label===`Data directory`)??e.filesystems[0],r=[{label:t(`systemPage.cards.uptime`),value:L(e.host.uptimeSeconds),detail:t(`systemPage.cards.uptimeDetail`,{date:F.format(e.host.bootedAt)}),icon:s},{label:t(`systemPage.cards.memory`),value:`${P.format(e.memory.usedPercent)}%`,detail:t(`systemPage.cards.memoryDetail`,{used:I(e.memory.usedBytes),total:I(e.memory.totalBytes)}),icon:v},{label:t(`systemPage.cards.freeSpace`),value:n?I(n.freeBytes):`—`,detail:n?t(`systemPage.cards.freeSpaceDetail`,{label:n.label,total:I(n.totalBytes)}):t(`systemPage.cards.unavailable`),icon:c},{label:t(`systemPage.cards.containers`),value:e.docker.available?String(e.docker.runningContainers):`—`,detail:e.docker.available?t(`systemPage.cards.containersDetail`,{total:e.docker.totalContainers}):t(`systemPage.cards.dockerUnavailable`),icon:_}];return(0,k.jsx)(`div`,{className:`grid gap-3 sm:grid-cols-2 xl:grid-cols-4`,children:r.map(e=>{let t=e.icon;return(0,k.jsxs)(`section`,{className:`rounded-2xl border border-gray-200/80 bg-white/75 p-4 shadow-subtle backdrop-blur-md dark:border-white/[0.08] dark:bg-dark-100/70`,children:[(0,k.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,k.jsx)(`span`,{className:`text-xs font-medium uppercase tracking-[0.12em] text-gray-500 dark:text-dark-500`,children:e.label}),(0,k.jsx)(t,{className:`h-4 w-4 text-primary-500 dark:text-primary-400`})]}),(0,k.jsx)(`div`,{className:`mt-2 text-2xl font-normal tracking-[-0.04em] text-gray-950 dark:text-dark-950`,children:e.value}),(0,k.jsx)(`p`,{className:`mt-1.5 text-xs text-gray-500 dark:text-dark-500`,children:e.detail})]},e.label)})})},K=({diagnostics:e})=>{let{t}=i(),{host:n,runtime:r}=e;return(0,k.jsx)(B,{title:t(`systemPage.host.title`),description:t(`systemPage.host.description`),icon:l,action:(0,k.jsx)(`span`,{className:`rounded-full bg-primary-500/10 px-2.5 py-1 text-[10px] font-medium uppercase tracking-[0.1em] text-primary-700 dark:text-primary-300`,children:n.containerized?t(`systemPage.host.container`):t(`systemPage.host.native`)}),children:(0,k.jsxs)(`dl`,{className:`px-4 py-2 sm:px-5`,children:[(0,k.jsx)(V,{label:t(`systemPage.host.hostname`),value:n.hostname}),(0,k.jsx)(V,{label:t(`systemPage.host.operatingSystem`),value:`${n.platform} ${n.release} · ${n.architecture}`}),(0,k.jsx)(V,{label:t(`systemPage.host.processor`),value:`${n.cpuModel} · ${n.logicalCpus} ${t(`systemPage.host.logicalCpus`)}`}),(0,k.jsx)(V,{label:t(`systemPage.host.loadAverage`),value:n.loadAverage.map(e=>P.format(e)).join(` · `)}),(0,k.jsx)(V,{label:t(`systemPage.host.libreVersion`),value:r.appVersion}),(0,k.jsx)(V,{label:t(`systemPage.host.nodeVersion`),value:r.nodeVersion}),(0,k.jsx)(V,{label:t(`systemPage.host.process`),value:`PID ${r.processId} · ${L(r.processUptimeSeconds)}`}),(0,k.jsx)(V,{label:t(`systemPage.host.workingDirectory`),value:r.workingDirectory,mono:!0})]})})},q=({diagnostics:e})=>{let{t}=i(),{memory:n}=e;return(0,k.jsx)(B,{title:t(`systemPage.memory.title`),description:t(`systemPage.memory.description`),icon:v,children:(0,k.jsxs)(`div`,{className:`space-y-4 p-4 sm:p-5`,children:[(0,k.jsxs)(`div`,{children:[(0,k.jsxs)(`div`,{className:`mb-2 flex items-end justify-between gap-4`,children:[(0,k.jsxs)(`div`,{children:[(0,k.jsxs)(`div`,{className:`text-2xl tracking-[-0.04em] text-gray-950 dark:text-dark-950`,children:[P.format(n.usedPercent),`%`]}),(0,k.jsx)(`div`,{className:`mt-1 text-xs text-gray-500 dark:text-dark-500`,children:t(`systemPage.memory.usedOf`,{used:I(n.usedBytes),total:I(n.totalBytes)})})]}),(0,k.jsx)(`span`,{className:`text-xs tabular-nums text-gray-500 dark:text-dark-500`,children:t(`systemPage.memory.free`,{value:I(n.freeBytes)})})]}),(0,k.jsx)(H,{value:n.usedPercent,tone:n.usedPercent>=85?`warning`:`primary`})]}),(0,k.jsx)(`div`,{className:`grid grid-cols-2 gap-3`,children:[[t(`systemPage.memory.processRss`),n.processRssBytes],[t(`systemPage.memory.heapUsed`),n.heapUsedBytes],[t(`systemPage.memory.heapTotal`),n.heapTotalBytes],[t(`systemPage.memory.external`),n.externalBytes]].map(([e,t])=>(0,k.jsxs)(`div`,{className:`rounded-xl bg-gray-50 px-3 py-2.5 dark:bg-dark-200/70`,children:[(0,k.jsx)(`div`,{className:`text-[11px] text-gray-500 dark:text-dark-500`,children:e}),(0,k.jsx)(`div`,{className:`mt-1 text-lg text-gray-950 dark:text-dark-950`,children:I(Number(t))})]},String(e)))})]})})},J=({diagnostics:e})=>{let{t}=i();return(0,k.jsx)(B,{title:t(`systemPage.storage.title`),description:t(`systemPage.storage.description`),icon:c,children:e.filesystems.length===0?(0,k.jsx)(`p`,{className:`p-5 text-sm text-gray-500 dark:text-dark-500`,children:t(`systemPage.storage.empty`)}):(0,k.jsx)(`div`,{className:`grid gap-3 p-4 sm:grid-cols-2 sm:p-5`,children:e.filesystems.map(e=>(0,k.jsxs)(`div`,{className:`rounded-xl border border-gray-200/80 bg-gray-50/70 p-4 dark:border-white/[0.06] dark:bg-dark-200/55`,children:[(0,k.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,k.jsxs)(`div`,{className:`min-w-0`,children:[(0,k.jsx)(`h3`,{className:`text-sm font-medium text-gray-900 dark:text-dark-900`,children:e.label}),(0,k.jsx)(`p`,{className:`mt-1 truncate font-mono text-[10px] text-gray-500 dark:text-dark-500`,children:e.path})]}),(0,k.jsxs)(`span`,{className:`shrink-0 text-sm tabular-nums text-gray-700 dark:text-dark-700`,children:[P.format(e.usedPercent),`%`]})]}),(0,k.jsx)(`div`,{className:`mt-4`,children:(0,k.jsx)(H,{value:e.usedPercent,tone:e.usedPercent>=85?`warning`:`primary`})}),(0,k.jsxs)(`div`,{className:`mt-3 flex justify-between gap-4 text-[11px] text-gray-500 dark:text-dark-500`,children:[(0,k.jsx)(`span`,{children:t(`systemPage.storage.used`,{value:I(e.usedBytes)})}),(0,k.jsx)(`span`,{children:t(`systemPage.storage.free`,{value:I(e.freeBytes)})})]})]},`${e.label}:${e.path}`))})})},Y=({diagnostics:e})=>{let{t}=i(),{docker:n}=e;return(0,k.jsx)(B,{title:t(`systemPage.docker.title`),description:t(`systemPage.docker.description`),icon:_,action:(0,k.jsxs)(`span`,{className:a(`inline-flex items-center gap-1.5 rounded-full px-2.5 py-1 text-[10px] font-medium uppercase tracking-[0.1em]`,n.available?`bg-emerald-500/10 text-emerald-700 dark:text-emerald-300`:`bg-gray-500/10 text-gray-600 dark:text-dark-600`),children:[(0,k.jsx)(`span`,{className:a(`h-1.5 w-1.5 rounded-full`,n.available?`bg-emerald-500`:`bg-gray-400`)}),n.available?t(`systemPage.docker.connected`):t(`systemPage.docker.unavailable`)]}),children:n.available?(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`div`,{className:`grid gap-3 border-b border-gray-200/70 p-4 dark:border-white/[0.07] sm:grid-cols-2 sm:p-5 lg:grid-cols-4`,children:[[t(`systemPage.docker.running`),n.runningContainers],[t(`systemPage.docker.stopped`),n.stoppedContainers],[t(`systemPage.docker.paused`),n.pausedContainers],[t(`systemPage.docker.total`),n.totalContainers]].map(([e,t])=>(0,k.jsxs)(`div`,{className:`rounded-xl bg-gray-50 px-3 py-2.5 dark:bg-dark-200/70`,children:[(0,k.jsx)(`div`,{className:`text-[11px] text-gray-500 dark:text-dark-500`,children:e}),(0,k.jsx)(`div`,{className:`mt-1 text-xl text-gray-950 dark:text-dark-950`,children:t})]},String(e)))}),(0,k.jsxs)(`div`,{className:`flex flex-wrap gap-2 px-4 py-4 sm:px-5`,children:[n.serverVersion&&(0,k.jsx)(X,{label:t(`systemPage.docker.version`),value:n.serverVersion}),n.operatingSystem&&(0,k.jsx)(X,{label:t(`systemPage.docker.host`),value:n.operatingSystem}),n.architecture&&(0,k.jsx)(X,{label:t(`systemPage.docker.architecture`),value:n.architecture}),n.logicalCpus!==void 0&&(0,k.jsx)(X,{label:t(`systemPage.docker.cpus`),value:String(n.logicalCpus)}),n.memoryBytes!==void 0&&(0,k.jsx)(X,{label:t(`systemPage.docker.memory`),value:I(n.memoryBytes)})]}),n.containers.length===0?(0,k.jsx)(`p`,{className:`px-5 pb-5 text-sm text-gray-500 dark:text-dark-500`,children:t(`systemPage.docker.empty`)}):(0,k.jsx)(`div`,{className:`overflow-x-auto border-t border-gray-200/70 dark:border-white/[0.07]`,children:(0,k.jsxs)(`table`,{"data-testid":`system-docker-table`,className:`w-full min-w-[760px] text-sm`,children:[(0,k.jsx)(`thead`,{className:`text-[11px] uppercase tracking-[0.1em] text-gray-400 dark:text-dark-500`,children:(0,k.jsxs)(`tr`,{children:[(0,k.jsx)(`th`,{className:`px-5 py-2 text-start font-medium`,children:t(`systemPage.docker.container`)}),(0,k.jsx)(`th`,{className:`px-4 py-2 text-start font-medium`,children:t(`systemPage.docker.image`)}),(0,k.jsx)(`th`,{className:`px-4 py-2 text-start font-medium`,children:t(`systemPage.docker.state`)}),(0,k.jsx)(`th`,{className:`px-5 py-2 text-end font-medium`,children:t(`systemPage.docker.created`)})]})}),(0,k.jsx)(`tbody`,{className:`divide-y divide-gray-100 dark:divide-white/[0.06]`,children:n.containers.map(e=>(0,k.jsxs)(`tr`,{children:[(0,k.jsxs)(`td`,{className:`px-5 py-2.5`,children:[(0,k.jsx)(`div`,{className:`font-medium text-gray-900 dark:text-dark-900`,children:e.name}),(0,k.jsx)(`div`,{className:`mt-0.5 font-mono text-[10px] text-gray-500 dark:text-dark-500`,children:e.id})]}),(0,k.jsx)(`td`,{className:`max-w-[280px] px-4 py-2.5`,children:(0,k.jsx)(`div`,{className:`truncate font-mono text-[11px] text-gray-600 dark:text-dark-600`,title:e.image,children:e.image})}),(0,k.jsxs)(`td`,{className:`px-4 py-2.5`,children:[(0,k.jsx)(`span`,{className:a(`inline-flex rounded-full px-2.5 py-1 text-[10px] font-medium uppercase tracking-[0.08em]`,z(e.state)),children:e.state}),(0,k.jsx)(`div`,{className:`mt-1.5 text-[11px] text-gray-500 dark:text-dark-500`,children:e.status})]}),(0,k.jsx)(`td`,{className:`px-5 py-2.5 text-end text-xs text-gray-500 dark:text-dark-500`,children:e.createdAt?F.format(e.createdAt):`—`})]},e.id))})]})})]}):(0,k.jsxs)(`div`,{className:`m-4 flex items-start gap-3 rounded-xl border border-gray-200 bg-gray-50 px-4 py-4 text-sm text-gray-600 dark:border-white/[0.07] dark:bg-dark-200/60 dark:text-dark-600 sm:m-5`,children:[(0,k.jsx)(m,{className:`mt-0.5 h-4 w-4 shrink-0`}),(0,k.jsxs)(`div`,{children:[(0,k.jsx)(`p`,{children:n.reason||t(`systemPage.docker.unavailableDetail`)}),(0,k.jsx)(`p`,{className:`mt-2 text-xs text-gray-500 dark:text-dark-500`,children:t(`systemPage.docker.socketStatus`,{status:n.socketMounted?t(`systemPage.docker.mounted`):t(`systemPage.docker.notMounted`)})})]})]})})},X=({label:e,value:t})=>(0,k.jsxs)(`span`,{className:`rounded-full border border-gray-200 bg-white px-3 py-1.5 text-[11px] text-gray-600 dark:border-white/[0.07] dark:bg-dark-200/70 dark:text-dark-600`,children:[(0,k.jsx)(`span`,{className:`text-gray-400 dark:text-dark-500`,children:e}),` `,t]}),Z=({diagnostics:e})=>{let{t}=i();return(0,k.jsx)(B,{title:t(`systemPage.network.title`),description:t(`systemPage.network.description`),icon:h,children:e.network.interfaces.length===0?(0,k.jsx)(`p`,{className:`p-5 text-sm text-gray-500 dark:text-dark-500`,children:t(`systemPage.network.empty`)}):(0,k.jsx)(`div`,{className:`grid gap-3 p-4 sm:grid-cols-2 sm:p-5 xl:grid-cols-3`,children:e.network.interfaces.map(e=>(0,k.jsxs)(`div`,{className:`rounded-xl border border-gray-200/80 bg-gray-50/70 p-4 dark:border-white/[0.06] dark:bg-dark-200/55`,children:[(0,k.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,k.jsx)(f,{className:`h-4 w-4 text-primary-500`}),(0,k.jsx)(`h3`,{className:`font-mono text-xs font-medium text-gray-900 dark:text-dark-900`,children:e.name})]}),(0,k.jsx)(`div`,{className:`mt-3 space-y-2`,children:e.addresses.map(e=>(0,k.jsxs)(`div`,{className:`min-w-0 rounded-xl bg-white px-3 py-2 dark:bg-dark-100/80`,children:[(0,k.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,k.jsx)(`span`,{className:`text-[10px] font-medium uppercase tracking-[0.08em] text-gray-400 dark:text-dark-500`,children:e.family}),e.internal&&(0,k.jsx)(`span`,{className:`text-[10px] text-gray-400 dark:text-dark-500`,children:t(`systemPage.network.internal`)})]}),(0,k.jsx)(`div`,{className:`mt-1 break-all font-mono text-[11px] text-gray-700 dark:text-dark-700`,children:e.cidr||e.address})]},`${e.family}:${e.address}`))}),(e.receivedBytes!==void 0||e.transmittedBytes!==void 0)&&(0,k.jsxs)(`div`,{className:`mt-3 flex justify-between gap-4 text-[10px] text-gray-500 dark:text-dark-500`,children:[(0,k.jsxs)(`span`,{children:[`↓ `,I(e.receivedBytes??0)]}),(0,k.jsxs)(`span`,{children:[`↑ `,I(e.transmittedBytes??0)]})]})]},e.name))})})};export{W as default};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-vendor-D0Ec-185.js";import{C as r,t as i}from"./useQuery-BKulzCS7.js";import{a}from"./logger-DnuT4jgB.js";import{t as o}from"./useTranslation-rdLmo6zV.js";import{t as s}from"./utils-CKWltgs8.js";import{E as c,G as l,I as u,In as d,Jn as f,K as p,Kn as m,R as h,T as g,Z as _,_t as v,br as y,c as b,d as x,f as S,j as C,ot as w,s as ee,tt as te,v as T,vt as E,xt as D}from"./ui-vendor-Dt9hfsGD.js";import{n as O,r as k,t as A}from"./workApi-oO8srJWT.js";import{I as j,P as M,R as N,d as P,s as F,w as I,x as L,y as R}from"./api-C4tAvZc2.js";import{t as z}from"./authStore-DzKajX63.js";import{c as B,t as V}from"./appStore-CmY86Gzn.js";import{t as H}from"./Button-BxwbQ5xw.js";import{c as ne,f as U,m as W,n as re}from"./ui-DzVF9vZ5.js";import{t as G}from"./PasswordStrengthMeter-H0Os6XbX.js";import{t as K}from"./SettingsToggle-DdhWCK7-.js";var q=e(t(),1),J=n(),ie=`h-11 w-full rounded-xl border border-line bg-surface-raised px-3 text-sm text-ink focus:outline-none focus:ring-2 focus:ring-primary-500 disabled:cursor-not-allowed disabled:opacity-60`;function Y(e,t){return e?.response?.data?.message||(e instanceof Error?e.message:t)||t}function ae({user:e,currentUserId:t,onClose:n,onSaved:r}){let{t:i}=o(),[a,s]=(0,q.useState)({username:e?.username??``,email:e?.email??``,password:``,role:e?.role??`user`}),[c,l]=(0,q.useState)(!1),u=(0,q.useRef)(!1),[d,f]=(0,q.useState)(``),p=e?.id===t,m=()=>{u.current||n()};return(0,J.jsx)(re,{titleId:`user-form-title`,title:i(e?`userManager.form.title.edit`:`userManager.form.title.create`),subtitle:e?(0,J.jsx)(`span`,{className:`break-all`,children:e.username}):i(`userManager.subtitle`),onClose:m,testId:`user-form-dialog`,children:(0,J.jsxs)(`form`,{onSubmit:async t=>{if(t.preventDefault(),u.current)return;u.current=!0,l(!0),f(``);let n=i(e?`userManager.form.updateFailed`:`userManager.form.createFailed`);try{let t={username:a.username.trim(),email:a.email.trim()||null,role:p?e.role:a.role};a.password&&(t.password=a.password);let o=e?await N.updateUser(e.id,t):await N.createUser({...a,username:a.username.trim(),email:a.email.trim()});if(!o.success||!o.data)throw Error(o.message||n);r(o.data),y.success(i(e?`userManager.form.updateSuccess`:`userManager.form.createSuccess`))}catch(e){f(Y(e,n))}finally{u.current=!1,l(!1)}},className:`space-y-5`,"aria-busy":c,children:[(0,J.jsxs)(`fieldset`,{disabled:c,className:`min-w-0 space-y-4`,children:[(0,J.jsx)(W,{id:`user-form-username`,label:i(`userManager.form.username`),autoFocus:!0,autoComplete:`off`,value:a.username,onChange:e=>s({...a,username:e.target.value}),required:!0}),(0,J.jsx)(W,{id:`user-form-email`,label:`${i(`userManager.form.email`)}${e?` (${i(`common.optional`)})`:``}`,type:`email`,dir:`ltr`,autoComplete:`off`,value:a.email,onChange:e=>s({...a,email:e.target.value}),required:!e}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(W,{id:`user-form-password`,label:`${i(`userManager.form.password`)}${e?` (${i(`common.optional`)})`:``}`,type:`password`,autoComplete:`new-password`,value:a.password,onChange:e=>s({...a,password:e.target.value}),required:!e,helper:e?i(`userManager.form.passwordHint`):void 0}),(0,J.jsx)(G,{password:a.password})]}),(0,J.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,J.jsx)(ne,{htmlFor:`user-form-role`,children:i(`userManager.form.role`)}),(0,J.jsxs)(`select`,{id:`user-form-role`,value:a.role,onChange:e=>s({...a,role:e.target.value}),disabled:p,"aria-describedby":p?`user-form-role-hint`:void 0,className:ie,children:[(0,J.jsx)(`option`,{value:`user`,children:i(`userManager.roles.user`)}),(0,J.jsx)(`option`,{value:`admin`,children:i(`userManager.roles.admin`)})]}),p&&(0,J.jsx)(`p`,{id:`user-form-role-hint`,className:`text-xs text-ink-muted`,children:i(`userManager.directory.editSelfRole`)})]})]}),d&&(0,J.jsx)(`p`,{role:`alert`,className:`text-sm text-error-600 dark:text-error-400`,children:d}),(0,J.jsxs)(`div`,{className:`flex flex-wrap justify-end gap-2 border-t border-line pt-4`,children:[(0,J.jsx)(H,{type:`button`,variant:`outline`,onClick:m,disabled:c,className:`min-h-11`,children:i(`common.cancel`)}),(0,J.jsx)(H,{type:`submit`,loading:c,disabled:!a.username.trim(),className:`min-h-11`,children:i(c?e?`userManager.form.updating`:`userManager.form.creating`:e?`userManager.form.updateButton`:`userManager.form.createButton`)})]})]})})}var oe=()=>{let{t:e,i18n:t}=o(),n=r(),a=z(e=>e.user),s=z(e=>e.setUser),[c,f]=(0,q.useState)(null),[p,m]=(0,q.useState)(``),[g,v]=(0,q.useState)(`all`),[x,w]=(0,q.useState)(null),[E,D]=(0,q.useState)(``),[O,k]=(0,q.useState)(null),A=(0,q.useRef)(!1),{data:j=[],isLoading:M,isError:P,isFetching:F,refetch:I}=i({queryKey:[`users`],queryFn:async()=>{let t=await N.getUsers();if(!t.success||!t.data)throw Error(e(`userManager.directory.loadFailed`));return t.data}}),L=()=>{n.invalidateQueries({queryKey:[`users`]})},R=e=>{n.setQueryData([`users`],(t=[])=>t.some(t=>t.id===e.id)?t.map(t=>t.id===e.id?e:t):[...t,e]),e.id===a?.id&&s(e),f(null),L()},B=p.trim().toLocaleLowerCase(t.language),V=j.filter(e=>(g===`all`||e.role===g)&&`${e.username} ${e.email??``}`.toLocaleLowerCase(t.language).includes(B)),U=V.filter(e=>e.status===`pending`),G=V.filter(e=>e.status!==`pending`),K=j.filter(e=>e.status===`pending`).length,oe=j.length-K,se=!!(p||g!==`all`),ce=()=>{m(``),v(`all`)},le=async t=>{if(!A.current){A.current=!0,k(t.id);try{let n=await N.approveUser(t.id);if(!n.success||!n.data)throw Error(n.message||e(`userManager.approval.failed`));R(n.data),y.success(e(`userManager.approval.approved`,{name:t.username}))}catch(t){y.error(Y(t,e(`userManager.approval.failed`)))}finally{A.current=!1,k(null)}}},ue=async()=>{if(!x||A.current||x.kind===`delete`&&x.user.id===a?.id)return;A.current=!0,k(x.user.id),D(``);let t=e(x.kind===`delete`?`userManager.deleteFailed`:`userManager.mfaResetFailed`);try{if(x.kind===`delete`){let r=await N.deleteUser(x.user.id);if(!r.success)throw Error(r.message||t);n.setQueryData([`users`],(e=[])=>e.filter(e=>e.id!==x.user.id)),L(),y.success(e(`userManager.deleteSuccess`))}else{let n=await N.resetUserMfa(x.user.id);if(!n.success)throw Error(n.message||t);y.success(e(n.data?.removed?`userManager.mfaResetSuccess`:`userManager.mfaResetNothing`,{name:x.user.username}))}w(null)}catch(e){D(Y(e,t))}finally{A.current=!1,k(null)}},X=(e,t)=>{D(``),w({kind:e,user:t})},Z=n=>(0,J.jsxs)(`div`,{className:`flex min-w-0 items-start gap-3`,children:[(0,J.jsx)(`div`,{className:`flex h-10 w-10 shrink-0 items-center justify-center rounded-xl bg-surface-subtle text-ink-muted`,"aria-hidden":`true`,children:n.status===`pending`?(0,J.jsx)(d,{size:18}):n.role===`admin`?(0,J.jsx)(u,{size:18}):(0,J.jsx)(b,{size:18})}),(0,J.jsxs)(`div`,{className:`min-w-0`,children:[(0,J.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-1`,children:[(0,J.jsx)(`h3`,{className:`min-w-0 break-all text-sm font-medium text-ink`,children:(0,J.jsx)(`bdi`,{children:n.username})}),n.id===a?.id&&(0,J.jsxs)(`span`,{className:`text-xs text-ink-muted`,children:[`(`,e(`chatMessage.you`),`)`]}),(0,J.jsx)(`span`,{className:`rounded-md border border-line px-1.5 py-0.5 text-xs text-ink-muted`,children:e(n.role===`admin`?`userManager.roles.admin`:`userManager.roles.user`)})]}),(0,J.jsx)(`p`,{className:`mt-1 break-all text-sm text-ink-muted`,children:(0,J.jsx)(`bdi`,{children:n.email||e(`userManager.noEmail`)})}),(0,J.jsxs)(`p`,{className:`mt-1 text-xs text-ink-subtle`,children:[e(n.status===`pending`?`userManager.approval.registered`:`userManager.columns.created`),`: `,new Date(n.createdAt).toLocaleDateString(t.language)]})]})]}),de=e=>(0,J.jsxs)(`div`,{className:`px-4 py-8 text-center`,children:[(0,J.jsx)(ee,{size:24,className:`mx-auto mb-3 text-ink-subtle`,"aria-hidden":`true`}),(0,J.jsx)(`p`,{className:`text-sm text-ink-muted`,children:e})]});return(0,J.jsxs)(`div`,{className:`min-w-0 space-y-5`,"data-testid":`user-directory`,children:[(0,J.jsxs)(`div`,{className:`rounded-2xl border border-line bg-surface p-4`,children:[(0,J.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,J.jsxs)(`div`,{className:`relative min-w-0 basis-full sm:flex-1 sm:basis-48`,children:[(0,J.jsx)(l,{size:16,"aria-hidden":`true`,className:`pointer-events-none absolute start-3.5 top-3.5 text-ink-subtle`}),(0,J.jsx)(W,{type:`search`,"aria-label":e(`userManager.search`),placeholder:e(`userManager.search`),value:p,onChange:e=>m(e.target.value),className:`ps-10`})]}),(0,J.jsxs)(`div`,{className:`min-w-0 flex-1 sm:max-w-36`,children:[(0,J.jsx)(ne,{htmlFor:`user-role-filter`,className:`sr-only`,children:e(`userManager.columns.role`)}),(0,J.jsxs)(`select`,{id:`user-role-filter`,value:g,onChange:e=>v(e.target.value),className:ie,children:[(0,J.jsx)(`option`,{value:`all`,children:e(`userManager.directory.allRoles`)}),(0,J.jsx)(`option`,{value:`admin`,children:e(`userManager.roles.admin`)}),(0,J.jsx)(`option`,{value:`user`,children:e(`userManager.roles.user`)})]})]}),(0,J.jsx)(H,{type:`button`,variant:`outline`,onClick:()=>void I(),disabled:F,className:`min-h-11 min-w-11 px-3`,"aria-label":e(`common.refresh`),title:e(`common.refresh`),children:(0,J.jsx)(_,{size:16,"aria-hidden":`true`,className:F?`animate-spin motion-reduce:animate-none`:void 0})}),(0,J.jsxs)(H,{type:`button`,onClick:()=>f(`create`),disabled:!!O,className:`min-h-11`,children:[(0,J.jsx)(te,{size:16,"aria-hidden":`true`}),e(`userManager.createUser`)]})]}),(0,J.jsxs)(`div`,{className:`mt-3 flex min-h-5 flex-wrap items-center justify-between gap-2`,children:[(0,J.jsx)(`p`,{role:`status`,className:`text-xs text-ink-muted`,children:M?e(`userManager.loading`):e(`userManager.directory.results`,{visible:V.length,total:j.length})}),se&&(0,J.jsx)(H,{type:`button`,size:`sm`,variant:`ghost`,onClick:ce,className:`min-h-11 sm:min-h-8`,children:e(`userManager.directory.clearFilters`)})]})]}),P&&(0,J.jsxs)(`div`,{role:`alert`,className:`flex flex-wrap items-center justify-between gap-3 rounded-xl border border-error-500/30 p-4`,children:[(0,J.jsx)(`p`,{className:`text-sm text-ink`,children:e(`userManager.directory.loadFailed`)}),(0,J.jsx)(H,{type:`button`,variant:`outline`,onClick:()=>void I(),disabled:F,children:e(`common.retry`)})]}),!M&&(!P||j.length>0)&&(0,J.jsxs)(J.Fragment,{children:[K>0&&(0,J.jsxs)(`section`,{"data-testid":`pending-user-approvals`,"aria-labelledby":`pending-users-title`,className:`overflow-hidden rounded-2xl border border-warning-500/30 bg-surface`,children:[(0,J.jsxs)(`div`,{className:`border-b border-line bg-warning-500/[0.06] p-4`,children:[(0,J.jsxs)(`h3`,{id:`pending-users-title`,className:`flex items-center gap-2 text-sm font-semibold text-ink`,children:[(0,J.jsx)(d,{size:16,"aria-hidden":`true`,className:`text-warning-700 dark:text-warning-400`}),e(`userManager.approval.title`),` `,(0,J.jsxs)(`span`,{className:`text-ink-muted`,children:[`(`,K,`)`]})]}),(0,J.jsx)(`p`,{className:`mt-1 text-xs leading-relaxed text-ink-muted`,children:e(`userManager.approval.description`)})]}),(0,J.jsxs)(`div`,{className:`divide-y divide-line`,children:[U.map(t=>(0,J.jsxs)(`div`,{"data-testid":`pending-user-row`,className:`flex flex-col gap-3 p-4 xl:flex-row xl:items-center xl:justify-between`,children:[Z(t),(0,J.jsxs)(`div`,{className:`flex shrink-0 flex-wrap gap-2`,children:[(0,J.jsxs)(H,{type:`button`,size:`sm`,"data-testid":`approve-user-button`,onClick:()=>void le(t),disabled:!!O,loading:O===t.id,className:`min-h-11 sm:min-h-9`,children:[(0,J.jsx)(S,{size:16,"aria-hidden":`true`}),e(`userManager.approval.activate`)]}),(0,J.jsx)(H,{type:`button`,size:`sm`,variant:`outline`,onClick:()=>X(`delete`,t),disabled:!!O,className:`min-h-11 sm:min-h-9`,children:e(`userManager.approval.reject`)})]})]},t.id)),U.length===0&&de(e(`userManager.noUsersMatching`))]})]}),(0,J.jsxs)(`section`,{"aria-labelledby":`active-users-title`,className:`overflow-hidden rounded-2xl border border-line bg-surface`,children:[(0,J.jsx)(`div`,{className:`border-b border-line px-4 py-3`,children:(0,J.jsxs)(`h3`,{id:`active-users-title`,className:`text-sm font-semibold text-ink`,children:[e(`userManager.directory.title`),` `,(0,J.jsxs)(`span`,{className:`text-ink-muted`,children:[`(`,oe,`)`]})]})}),(0,J.jsxs)(`div`,{className:`divide-y divide-line`,children:[G.map(t=>(0,J.jsxs)(`div`,{"data-testid":`user-row`,className:`flex flex-col gap-3 p-4 sm:flex-row sm:items-center sm:justify-between`,children:[Z(t),(0,J.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1.5`,children:[(0,J.jsxs)(H,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>f(t),disabled:!!O,"aria-label":`${e(`common.edit`)}: ${t.username}`,className:`min-h-11 sm:min-h-9`,children:[(0,J.jsx)(C,{size:15,"aria-hidden":`true`}),e(`common.edit`)]}),(0,J.jsx)(H,{type:`button`,variant:`ghost`,size:`sm`,"data-testid":`reset-mfa-button`,"aria-label":`${e(`userManager.mfaReset`)}: ${t.username}`,title:e(`userManager.mfaReset`),onClick:()=>X(`reset`,t),disabled:!!O,className:`min-h-11 min-w-11 sm:min-h-9 sm:min-w-9 px-2`,children:(0,J.jsx)(h,{size:16,"aria-hidden":`true`})}),(0,J.jsx)(H,{type:`button`,variant:`ghost`,size:`sm`,"aria-label":`${e(`common.delete`)}: ${t.username}`,title:t.id===a?.id?e(`userManager.cannotDeleteSelf`):e(`common.delete`),onClick:()=>X(`delete`,t),disabled:t.id===a?.id||!!O,className:`min-h-11 min-w-11 sm:min-h-9 sm:min-w-9 px-2 text-error-600 dark:text-error-400`,children:(0,J.jsx)(T,{size:16,"aria-hidden":`true`})})]})]},t.id)),G.length===0&&de(e(se?`userManager.noUsersMatching`:`userManager.directory.empty`))]})]})]}),c&&(0,J.jsx)(ae,{user:c===`create`?null:c,currentUserId:a?.id,onClose:()=>f(null),onSaved:R},c===`create`?`create`:c.id),x&&(0,J.jsxs)(re,{titleId:`user-action-title`,title:e(x.kind===`reset`?`userManager.mfaReset`:x.user.status===`pending`?`userManager.approval.reject`:`userManager.directory.deleteTitle`),onClose:()=>{A.current||w(null)},testId:`user-action-dialog`,children:[(0,J.jsx)(`p`,{className:`break-words text-sm leading-relaxed text-ink-muted`,children:e(x.kind===`delete`?`userManager.deleteConfirm`:`userManager.mfaResetConfirm`,{name:x.user.username})}),E&&(0,J.jsx)(`p`,{role:`alert`,className:`text-sm text-error-600 dark:text-error-400`,children:E}),(0,J.jsxs)(`div`,{className:`flex flex-wrap justify-end gap-2 border-t border-line pt-4`,children:[(0,J.jsx)(H,{type:`button`,variant:`outline`,onClick:()=>w(null),disabled:!!O,className:`min-h-11`,children:e(`common.cancel`)}),(0,J.jsx)(H,{type:`button`,variant:`danger`,loading:!!O,onClick:()=>void ue(),className:`min-h-11`,children:e(x.kind===`delete`?`common.delete`:`userManager.mfaReset`)})]})]})]})},se=()=>{let{t:e}=o(),t=z(e=>e.systemInfo),n=z(e=>e.setSystemInfo),[r,i]=(0,q.useState)(null),[a,s]=(0,q.useState)(!1),[c,l]=(0,q.useState)(!1),[u,d]=(0,q.useState)(!1),[f,p]=(0,q.useState)(0);return(0,q.useEffect)(()=>{let e=!1;return L.access().then(t=>{e||(t.success&&t.data?(i(t.data.enabled),s(t.data.lockedByEnv)):d(!0))}).catch(()=>{e||d(!0)}),()=>{e=!0}},[f]),(0,J.jsx)(`div`,{className:`rounded-lg border border-gray-200 dark:border-dark-300 bg-white dark:bg-dark-100 p-4`,children:(0,J.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`h4`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:e(`userManager.agentAccess.title`)}),(0,J.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400 mt-1`,children:e(`userManager.agentAccess.description`)}),a&&(0,J.jsx)(`p`,{className:`text-xs text-amber-600 dark:text-amber-400 mt-1`,children:e(`userManager.agentAccess.lockedByEnv`)})]}),r===null&&u?(0,J.jsx)(H,{size:`sm`,variant:`outline`,onClick:()=>{d(!1),p(e=>e+1)},children:e(`common.retry`)}):(0,J.jsx)(K,{checked:r===!0,onChange:async r=>{l(!0);try{let a=await L.setAccess(r);if(!a.success||!a.data)throw Error(a.error||`Agent access update failed.`);i(a.data.enabled),t&&n({...t,agentsEnabled:a.data.enabled}),y.success(e(`userManager.agentAccess.saved`))}catch{y.error(e(`userManager.agentAccess.saveFailed`))}finally{l(!1)}},disabled:c||r===null||a})]})})},ce=[{mode:`light`,icon:c,key:`settings.appearance.theme.light`},{mode:`dark`,icon:v,key:`settings.appearance.theme.dark`},{mode:`amoled`,icon:E,key:`settings.appearance.theme.amoled`},{mode:`celestial`,icon:g,key:`settings.appearance.theme.celestial`}],le=()=>{let{t:e}=o(),t=z(e=>e.systemInfo),n=z(e=>e.setSystemInfo),r=V(e=>e.applyInstanceTheme),[i,a]=(0,q.useState)(null),[c,l]=(0,q.useState)(!1),[u,d]=(0,q.useState)(!1),[f,p]=(0,q.useState)(0);(0,q.useEffect)(()=>{let e=!1;return F.getDefaultTheme().then(t=>{e||(t.success&&t.data?a(B(t.data.theme)):d(!0))}).catch(()=>{e||d(!0)}),()=>{e=!0}},[f]);let m=async o=>{if(!(!i||i.mode===o)){l(!0);try{let s=await F.setDefaultTheme({...i,mode:o});if(!s.success||!s.data)throw Error(s.error||`Default theme update failed.`);let c=B(s.data.theme);a(c),t&&n({...t,defaultTheme:c}),r(c),y.success(e(`userManager.defaultTheme.saved`))}catch{y.error(e(`userManager.defaultTheme.saveFailed`))}finally{l(!1)}}};return(0,J.jsx)(`div`,{className:`rounded-lg border border-gray-200 dark:border-dark-300 bg-white dark:bg-dark-100 p-4`,children:(0,J.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-4`,children:[(0,J.jsxs)(`div`,{className:`min-w-0 flex-[1_1_18rem]`,children:[(0,J.jsx)(`h4`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:e(`userManager.defaultTheme.title`)}),(0,J.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400 mt-1`,children:e(`userManager.defaultTheme.description`)})]}),i===null&&u?(0,J.jsx)(H,{size:`sm`,variant:`outline`,onClick:()=>{d(!1),p(e=>e+1)},children:e(`common.retry`)}):(0,J.jsx)(`div`,{role:`radiogroup`,"aria-label":e(`userManager.defaultTheme.title`),className:`flex max-w-full flex-wrap gap-2`,children:ce.map(({mode:t,icon:n,key:r})=>{let a=i?.mode===t;return(0,J.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":a,disabled:c||i===null,onClick:()=>void m(t),className:s(`flex min-h-11 max-w-full items-center gap-2 rounded-lg border px-3 py-2 text-sm text-ink transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-500/40 disabled:cursor-not-allowed disabled:opacity-60`,a?`border-line-strong bg-surface-subtle`:`border-line hover:bg-interactive-hover`),children:[(0,J.jsx)(n,{className:`h-4 w-4`,"aria-hidden":`true`}),e(r)]},t)})})]})})},ue=()=>{let{t:e}=o(),[t,n]=(0,q.useState)(null),[r,i]=(0,q.useState)(!1),[a,s]=(0,q.useState)(!1),[c,l]=(0,q.useState)(!1),[u,d]=(0,q.useState)(0);return(0,q.useEffect)(()=>{let e=!1;return P.getAccessMode().then(t=>{e||(t.success&&t.data?(n(t.data.mode),i(t.data.lockedByEnv)):l(!0))}).catch(()=>{e||l(!0)}),()=>{e=!0}},[u]),(0,J.jsx)(`div`,{className:`rounded-lg border border-gray-200 dark:border-dark-300 bg-white dark:bg-dark-100 p-4`,children:(0,J.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`h4`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:e(`userManager.tools.title`)}),(0,J.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400 mt-1`,children:e(`userManager.tools.description`)}),r&&(0,J.jsx)(`p`,{className:`text-xs text-amber-600 dark:text-amber-400 mt-1`,children:e(`userManager.tools.lockedByEnv`)})]}),t===null&&c?(0,J.jsx)(H,{size:`sm`,variant:`outline`,onClick:()=>{l(!1),d(e=>e+1)},children:e(`common.retry`)}):(0,J.jsx)(K,{checked:t===`all-users`,onChange:async t=>{let r=t?`all-users`:`admins`;s(!0);try{let t=await P.setAccessMode(r);if(!t.success)throw Error(t.error||`Tool access update failed.`);n(r),y.success(e(`userManager.tools.saved`))}catch{y.error(e(`userManager.tools.saveFailed`))}finally{s(!1)}},disabled:a||t===null||r})]})})},X={stt:{mode:`all-users`,lockedByEnv:!1},tts:{mode:`all-users`,lockedByEnv:!1},"voice-mode":{mode:`all-users`,lockedByEnv:!1},"voice-cloning":{mode:`all-users`,lockedByEnv:!1}},Z={getModes:async()=>a()?k(X):(await O.get(`/voice-access`)).data,setMode:async(e,t)=>a()?k({feature:e,mode:t}):(await O.put(`/voice-access/${encodeURIComponent(e)}`,{mode:t})).data},de=[{key:`stt`,labelKey:`userManager.voice.features.stt`},{key:`tts`,labelKey:`userManager.voice.features.tts`},{key:`voice-mode`,labelKey:`userManager.voice.features.voiceMode`},{key:`voice-cloning`,labelKey:`userManager.voice.features.voiceCloning`}],fe=()=>{let{t:e}=o(),[t,n]=(0,q.useState)(null),[r,i]=(0,q.useState)(null),[a,s]=(0,q.useState)(!1),[c,l]=(0,q.useState)(0);(0,q.useEffect)(()=>{let e=!1;return Z.getModes().then(t=>{e||(t.success&&t.data?n(t.data):s(!0))}).catch(()=>{e||s(!0)}),()=>{e=!0}},[c]);let u=async(t,r)=>{let a=r?`all-users`:`admins`;i(t);try{let r=await Z.setMode(t,a);if(!r.success)throw Error(r.error||`Voice access update failed.`);n(e=>e&&{...e,[t]:{...e[t],mode:a}}),y.success(e(`userManager.voice.saved`))}catch{y.error(e(`userManager.voice.saveFailed`))}finally{i(null)}};return(0,J.jsxs)(`div`,{className:`rounded-lg border border-gray-200 dark:border-dark-300 bg-white dark:bg-dark-100 p-4`,children:[(0,J.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`h4`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:e(`userManager.voice.title`)}),(0,J.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400 mt-1`,children:e(`userManager.voice.description`)})]}),t===null&&a&&(0,J.jsx)(H,{size:`sm`,variant:`outline`,onClick:()=>{s(!1),l(e=>e+1)},children:e(`common.retry`)})]}),(0,J.jsx)(`div`,{className:`mt-3 space-y-2`,children:de.map(n=>{let i=t?.[n.key];return(0,J.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`p`,{className:`text-xs text-gray-700 dark:text-gray-300`,children:e(n.labelKey)}),i?.lockedByEnv&&(0,J.jsx)(`p`,{className:`text-xs text-amber-600 dark:text-amber-400`,children:e(`userManager.voice.lockedByEnv`)})]}),(0,J.jsx)(K,{checked:i?.mode===`all-users`,onChange:e=>u(n.key,e),disabled:i===void 0||r===n.key||i.lockedByEnv})]},n.key)})})]})},pe=()=>{let{t:e}=o(),[t,n]=(0,q.useState)(null),[r,i]=(0,q.useState)(!1),[a,s]=(0,q.useState)(!1),[c,l]=(0,q.useState)(0);return(0,q.useEffect)(()=>{let e=!1;return j.getMfaPolicy().then(t=>{e||(t.success&&t.data?n(t.data):s(!0))}).catch(()=>{e||s(!0)}),()=>{e=!0}},[c]),(0,J.jsxs)(`div`,{className:`rounded-lg border border-gray-200 dark:border-dark-300 bg-white dark:bg-dark-100 p-4`,children:[(0,J.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`h4`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:e(`userManager.mfaPolicy.title`)}),(0,J.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400 mt-1`,children:e(`userManager.mfaPolicy.description`)})]}),t===null&&a&&(0,J.jsx)(H,{size:`sm`,variant:`outline`,onClick:()=>{s(!1),l(e=>e+1)},children:e(`common.retry`)})]}),(0,J.jsxs)(`div`,{className:`mt-3 flex items-center justify-between gap-4`,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`p`,{className:`text-sm text-gray-900 dark:text-gray-100`,children:e(`userManager.mfaPolicy.requireAll`)}),(0,J.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400`,children:t?.locked?e(`userManager.mfaPolicy.lockedByEnv`):e(`userManager.mfaPolicy.requireAllHint`)})]}),(0,J.jsx)(K,{checked:t?.mode===`required`,disabled:t===null||t.locked||r,onChange:async t=>{let r=t?`required`:`optional`;i(!0);try{let t=await j.setMfaPolicy(r);if(!t.success||!t.data)throw Error(t.error||`MFA policy update failed.`);n(t.data),y.success(e(`userManager.mfaPolicy.saved`))}catch{y.error(e(`userManager.mfaPolicy.saveFailed`))}finally{i(!1)}}})]})]})},me=()=>{let{t:e}=o(),[t,n]=(0,q.useState)([]),[r,i]=(0,q.useState)([]),[a,s]=(0,q.useState)(!1),[c,l]=(0,q.useState)(!0),[u,d]=(0,q.useState)(!1),[p,h]=(0,q.useState)(``),[g,_]=(0,q.useState)(``),[v,b]=(0,q.useState)(!1),[S,C]=(0,q.useState)(null),[w,E]=(0,q.useState)(``),[D,O]=(0,q.useState)(null),[k,A]=(0,q.useState)(``),[j,P]=(0,q.useState)(null),[F,I]=(0,q.useState)(!1),L=(0,q.useMemo)(()=>{let e=new Map;return r.forEach(t=>e.set(t.id,t.username)),e},[r]),R=(0,q.useCallback)(async()=>{l(!0),s(!1);try{let[e,t]=await Promise.all([M.getGroups(),N.getUsers()]);if(!e.success||!e.data)throw Error(e.error||`Failed to load groups.`);n(e.data),t.success&&t.data&&i(t.data)}catch{s(!0)}finally{l(!1)}},[]);(0,q.useEffect)(()=>{let e=setTimeout(()=>void R(),0);return()=>clearTimeout(e)},[R]);let z=async t=>{if(t.preventDefault(),!p.trim()){y.error(e(`userManager.groups.nameRequired`,`Give the group a name.`));return}b(!0);try{let t=await M.createGroup({name:p.trim(),description:g.trim()||void 0});if(!t.success)throw Error(t.error||`Group creation failed.`);h(``),_(``),d(!1),y.success(e(`userManager.groups.created`,`Group created.`)),await R()}catch(t){y.error(t instanceof Error&&t.message?t.message:e(`userManager.groups.createFailed`,`The group could not be created.`))}finally{b(!1)}},B=async t=>{O(t.id);try{let n=await M.deleteGroup(t.id);if(!n.success)throw Error(n.error||`Group delete failed.`);y.success(e(`userManager.groups.deleted`,`Group deleted.`)),S===t.id&&C(null),await R()}catch(t){y.error(t instanceof Error&&t.message?t.message:e(`userManager.groups.deleteFailed`,`The group could not be deleted.`))}finally{O(null)}},V=async t=>{if(w){O(t.id);try{let n=await M.addGroupMember(t.id,w);if(!n.success)throw Error(n.error||`Member add failed.`);E(``),y.success(e(`userManager.groups.memberAdded`,`Member added.`)),await R()}catch(t){y.error(t instanceof Error&&t.message?t.message:e(`userManager.groups.memberAddFailed`,`The member could not be added.`))}finally{O(null)}}},ne=async(t,n)=>{O(t.id);try{let r=await M.removeGroupMember(t.id,n);if(!r.success)throw Error(r.error||`Member remove failed.`);y.success(e(`userManager.groups.memberRemoved`,`Member removed.`)),await R()}catch(t){y.error(t instanceof Error&&t.message?t.message:e(`userManager.groups.memberRemoveFailed`,`The member could not be removed.`))}finally{O(null)}},re=async t=>{if(A(t),P(null),t){I(!0);try{let e=await M.getEffectiveAccess(t);if(!e.success||!e.data)throw Error(e.error||`Access lookup failed.`);P(e.data)}catch(t){y.error(t instanceof Error&&t.message?t.message:e(`userManager.groups.accessLookupFailed`,`The effective access could not be loaded.`))}finally{I(!1)}}},G=e=>e.map(e=>({value:e.id,label:e.username}));return(0,J.jsxs)(`div`,{className:`rounded-lg border border-gray-200 dark:border-dark-300 bg-white dark:bg-dark-100 p-4`,children:[(0,J.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsxs)(`h4`,{className:`flex items-center gap-2 text-sm font-medium text-gray-900 dark:text-gray-100`,children:[(0,J.jsx)(ee,{className:`h-4 w-4 text-primary-500`}),e(`userManager.groups.title`,`Groups`)]}),(0,J.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400 mt-1`,children:e(`userManager.groups.description`,`Group accounts to manage shared access, and inspect what any account can effectively do.`)})]}),a?(0,J.jsx)(H,{size:`sm`,variant:`outline`,onClick:()=>void R(),children:e(`common.retry`)}):(0,J.jsxs)(H,{size:`sm`,variant:`outline`,onClick:()=>d(e=>!e),className:`gap-1.5`,children:[(0,J.jsx)(te,{size:14}),e(`userManager.groups.newGroup`,`New group`)]})]}),u&&(0,J.jsxs)(`form`,{onSubmit:z,className:`mt-4 rounded-lg border border-gray-200 dark:border-dark-300 bg-gray-50 dark:bg-dark-50 p-4 space-y-3`,children:[(0,J.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,J.jsxs)(`label`,{className:`block`,children:[(0,J.jsx)(`span`,{className:`mb-1 block text-sm font-medium text-gray-900 dark:text-gray-100`,children:e(`userManager.groups.nameLabel`,`Name`)}),(0,J.jsx)(W,{value:p,onChange:e=>h(e.target.value)})]}),(0,J.jsxs)(`label`,{className:`block`,children:[(0,J.jsx)(`span`,{className:`mb-1 block text-sm font-medium text-gray-900 dark:text-gray-100`,children:e(`userManager.groups.descriptionLabel`,`Description (optional)`)}),(0,J.jsx)(W,{value:g,onChange:e=>_(e.target.value)})]})]}),(0,J.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,J.jsx)(H,{type:`button`,size:`sm`,variant:`outline`,onClick:()=>d(!1),children:e(`common.cancel`)}),(0,J.jsx)(H,{type:`submit`,size:`sm`,disabled:v,children:v?e(`userManager.groups.creating`,`Creating…`):e(`userManager.groups.create`,`Create group`)})]})]}),(0,J.jsx)(`div`,{className:`mt-4 space-y-3`,children:c?(0,J.jsx)(`p`,{className:`text-sm text-gray-500 dark:text-gray-400`,children:e(`common.loading`)}):a?(0,J.jsx)(`p`,{className:`text-sm text-gray-500 dark:text-gray-400`,children:e(`userManager.groups.loadFailed`,`The groups could not be loaded.`)}):t.length===0?(0,J.jsx)(`p`,{className:`text-sm text-gray-500 dark:text-gray-400`,children:e(`userManager.groups.empty`,`No groups yet.`)}):t.map(t=>{let n=S===t.id,i=new Set(t.members.map(e=>e.user_id)),a=r.filter(e=>!i.has(e.id));return(0,J.jsxs)(`div`,{className:`rounded-lg border border-gray-200 dark:border-dark-300 bg-gray-50 dark:bg-dark-100`,children:[(0,J.jsxs)(`div`,{className:`flex items-center justify-between gap-3 p-4`,children:[(0,J.jsxs)(`button`,{type:`button`,className:`flex min-w-0 flex-1 items-center gap-2 text-start`,onClick:()=>{C(n?null:t.id),E(``)},"aria-expanded":n,children:[n?(0,J.jsx)(f,{className:`h-4 w-4 shrink-0 text-gray-500 dark:text-gray-400`}):(0,J.jsx)(m,{className:`h-4 w-4 shrink-0 text-gray-500 dark:text-gray-400`}),(0,J.jsxs)(`span`,{className:`min-w-0`,children:[(0,J.jsxs)(`span`,{className:`block truncate text-sm font-medium text-gray-900 dark:text-gray-100`,children:[t.name,(0,J.jsx)(`span`,{className:`ms-2 text-xs font-normal text-gray-500 dark:text-gray-400`,children:e(`userManager.groups.memberCount`,{count:t.members.length,defaultValue:`Members: {{count}}`})})]}),t.description&&(0,J.jsx)(`span`,{className:`block truncate text-xs text-gray-500 dark:text-gray-400`,children:t.description})]})]}),(0,J.jsx)(H,{size:`sm`,variant:`outline`,onClick:()=>void B(t),disabled:D===t.id,"aria-label":e(`userManager.groups.deleteGroup`,`Delete group`),className:`text-red-600 dark:text-red-400 hover:text-red-700 dark:hover:text-red-300 hover:bg-red-50 dark:hover:bg-red-900/20`,children:(0,J.jsx)(T,{size:16})})]}),n&&(0,J.jsxs)(`div`,{className:`border-t border-gray-200 dark:border-dark-300 p-4 space-y-3`,children:[t.members.length===0?(0,J.jsx)(`p`,{className:`text-sm text-gray-500 dark:text-gray-400`,children:e(`userManager.groups.noMembers`,`No members yet.`)}):(0,J.jsx)(`div`,{className:`space-y-2`,children:t.members.map(n=>(0,J.jsxs)(`div`,{className:`flex items-center justify-between gap-3 rounded-lg border border-gray-200 dark:border-dark-300 bg-white dark:bg-dark-50 px-3 py-2`,children:[(0,J.jsxs)(`div`,{className:`min-w-0`,children:[(0,J.jsx)(`p`,{className:`truncate text-sm text-gray-900 dark:text-gray-100`,children:L.get(n.user_id)||n.user_id}),(0,J.jsxs)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400`,children:[e(`userManager.groups.addedAt`,`Added`),`:`,` `,new Date(n.added_at).toLocaleDateString()]})]}),(0,J.jsx)(H,{size:`sm`,variant:`outline`,onClick:()=>void ne(t,n.user_id),disabled:D===t.id,"aria-label":e(`userManager.groups.removeMember`,`Remove member`),children:(0,J.jsx)(x,{size:16})})]},n.user_id))}),a.length>0&&(0,J.jsxs)(`div`,{className:`flex items-end gap-2`,children:[(0,J.jsx)(`div`,{className:`flex-1`,children:(0,J.jsx)(U,{label:e(`userManager.groups.addMember`,`Add member`),value:w,onChange:e=>E(e.target.value),options:[{value:``,label:e(`userManager.groups.selectUser`,`Select a user…`)},...G(a)]})}),(0,J.jsx)(H,{size:`sm`,onClick:()=>void V(t),disabled:!w||D===t.id,className:`mb-0.5`,children:e(`userManager.groups.add`,`Add`)})]})]})]},t.id)})}),(0,J.jsxs)(`div`,{className:`mt-6 border-t border-gray-200 dark:border-dark-300 pt-4 space-y-3`,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`h4`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:e(`userManager.groups.effectiveTitle`,`Effective access`)}),(0,J.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400 mt-1`,children:e(`userManager.groups.effectiveDescription`,`Pick an account to see the access it ends up with across role, groups, and grants.`)})]}),(0,J.jsx)(U,{value:k,onChange:e=>void re(e.target.value),options:[{value:``,label:e(`userManager.groups.selectUser`,`Select a user…`)},...G(r)]}),F&&(0,J.jsx)(`p`,{className:`text-sm text-gray-500 dark:text-gray-400`,children:e(`common.loading`)}),j&&!F&&(0,J.jsxs)(`div`,{className:`rounded-lg border border-gray-200 dark:border-dark-300 bg-gray-50 dark:bg-dark-50 p-4 space-y-3`,children:[(0,J.jsxs)(`p`,{className:`text-sm text-gray-900 dark:text-gray-100`,children:[(0,J.jsx)(`span`,{className:`font-medium`,children:j.username}),(0,J.jsxs)(`span`,{className:`text-gray-500 dark:text-gray-400`,children:[` · `,e(`userManager.groups.roleLabel`,`Role`),`: `,j.role,` · `,e(`userManager.groups.statusLabel`,`Status`),`: `,j.status]})]}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`p`,{className:`mb-1 text-xs font-medium text-gray-500 dark:text-gray-400`,children:e(`userManager.groups.memberOf`,`Groups`)}),j.groups.length===0?(0,J.jsx)(`p`,{className:`text-sm text-gray-500 dark:text-gray-400`,children:e(`common.none`)}):(0,J.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:j.groups.map(e=>(0,J.jsx)(`span`,{className:`rounded-full bg-primary-100 dark:bg-primary-900/30 px-2 py-0.5 text-xs text-primary-700 dark:text-primary-300`,children:e.name},e.id))})]}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`p`,{className:`mb-1 text-xs font-medium text-gray-500 dark:text-gray-400`,children:e(`userManager.groups.featuresLabel`,`Feature access`)}),(0,J.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:Object.entries(j.features).map(([t,n])=>(0,J.jsxs)(`span`,{className:n?`rounded-full bg-green-100 dark:bg-green-900/30 px-2 py-0.5 text-xs text-green-700 dark:text-green-300`:`rounded-full bg-gray-100 dark:bg-dark-200 px-2 py-0.5 text-xs text-gray-500 dark:text-gray-400`,children:[t,`: `,e(n?`common.yes`:`common.no`)]},t))})]}),(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`p`,{className:`mb-1 text-xs font-medium text-gray-500 dark:text-gray-400`,children:e(`userManager.groups.grantsLabel`,`Grants`)}),j.grants.length===0?(0,J.jsx)(`p`,{className:`text-sm text-gray-500 dark:text-gray-400`,children:e(`common.none`)}):(0,J.jsx)(`div`,{className:`space-y-1`,children:j.grants.map(t=>(0,J.jsxs)(`p`,{className:`text-xs text-gray-700 dark:text-gray-300`,children:[t.resourceType,`/`,t.resourceId,` ·`,` `,t.permission,` `,(0,J.jsxs)(`span`,{className:`text-gray-500 dark:text-gray-400`,children:[`(`,e(`userManager.groups.grantVia`,`via`),` `,t.via,`)`]})]},t.id))})]})]})]})]})},he={success:`bg-green-100 dark:bg-green-900/30 text-green-700 dark:text-green-300`,denied:`bg-amber-100 dark:bg-amber-900/30 text-amber-700 dark:text-amber-300`,failure:`bg-red-100 dark:bg-red-900/30 text-red-700 dark:text-red-300`},ge=()=>{let{t:e}=o(),[t,n]=(0,q.useState)([]),[r,i]=(0,q.useState)(!0),[a,s]=(0,q.useState)(!1),[c,l]=(0,q.useState)(null),[u,d]=(0,q.useState)(``),[h,g]=(0,q.useState)(``),[v,y]=(0,q.useState)(`50`),b=(0,q.useCallback)(async()=>{i(!0),s(!1);try{let e=Number(v),t=await M.getAuditEvents({action:u.trim()||void 0,result:h||void 0,limit:Number.isInteger(e)&&e>0?e:void 0});if(!t.success||!t.data)throw Error(t.error||`Failed to load audit events.`);n(t.data)}catch{s(!0)}finally{i(!1)}},[u,h,v]);(0,q.useEffect)(()=>{let e=setTimeout(()=>void b(),0);return()=>clearTimeout(e)},[]);let x=t=>{switch(t){case`success`:return e(`userManager.audit.resultSuccess`,`Success`);case`denied`:return e(`userManager.audit.resultDenied`,`Denied`);case`failure`:return e(`userManager.audit.resultFailure`,`Failure`);default:return t}};return(0,J.jsxs)(`div`,{className:`rounded-lg border border-gray-200 dark:border-dark-300 bg-white dark:bg-dark-100 p-4`,children:[(0,J.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsxs)(`h4`,{className:`flex items-center gap-2 text-sm font-medium text-gray-900 dark:text-gray-100`,children:[(0,J.jsx)(p,{className:`h-4 w-4 text-primary-500`}),e(`userManager.audit.title`,`Security audit log`)]}),(0,J.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400 mt-1`,children:e(`userManager.audit.description`,`Recent sign-ins, permission checks, and administrative changes on this instance.`)})]}),(0,J.jsxs)(H,{size:`sm`,variant:`outline`,onClick:()=>void b(),disabled:r,className:`gap-1.5`,children:[(0,J.jsx)(_,{size:14,className:r?`animate-spin`:void 0}),e(`common.refresh`)]})]}),(0,J.jsxs)(`div`,{className:`mt-4 grid gap-3 sm:grid-cols-3`,children:[(0,J.jsxs)(`label`,{className:`block`,children:[(0,J.jsx)(`span`,{className:`mb-1 block text-xs font-medium text-gray-500 dark:text-gray-400`,children:e(`userManager.audit.actionFilter`,`Action`)}),(0,J.jsx)(W,{value:u,onChange:e=>d(e.target.value),placeholder:e(`userManager.audit.actionPlaceholder`,`e.g. auth.login`),spellCheck:!1,dir:`ltr`})]}),(0,J.jsxs)(`label`,{className:`block`,children:[(0,J.jsx)(`span`,{className:`mb-1 block text-xs font-medium text-gray-500 dark:text-gray-400`,children:e(`userManager.audit.resultFilter`,`Result`)}),(0,J.jsx)(U,{value:h,onChange:e=>g(e.target.value),options:[{value:``,label:e(`common.all`)},{value:`success`,label:e(`userManager.audit.resultSuccess`,`Success`)},{value:`denied`,label:e(`userManager.audit.resultDenied`,`Denied`)},{value:`failure`,label:e(`userManager.audit.resultFailure`,`Failure`)}]})]}),(0,J.jsxs)(`label`,{className:`block`,children:[(0,J.jsx)(`span`,{className:`mb-1 block text-xs font-medium text-gray-500 dark:text-gray-400`,children:e(`userManager.audit.limitFilter`,`Limit`)}),(0,J.jsx)(W,{type:`number`,min:1,max:500,value:v,onChange:e=>y(e.target.value),dir:`ltr`})]})]}),(0,J.jsx)(`div`,{className:`mt-4 space-y-2`,children:r?(0,J.jsx)(`p`,{className:`text-sm text-gray-500 dark:text-gray-400`,children:e(`common.loading`)}):a?(0,J.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,J.jsx)(`p`,{className:`text-sm text-gray-500 dark:text-gray-400`,children:e(`userManager.audit.loadFailed`,`The audit log could not be loaded.`)}),(0,J.jsx)(H,{size:`sm`,variant:`outline`,onClick:()=>void b(),children:e(`common.retry`)})]}):t.length===0?(0,J.jsx)(`p`,{className:`text-sm text-gray-500 dark:text-gray-400`,children:e(`userManager.audit.empty`,`No audit events recorded yet.`)}):t.map(t=>{let n=c===t.id,r=t.details&&Object.keys(t.details).length>0;return(0,J.jsxs)(`div`,{className:`rounded-lg border border-gray-200 dark:border-dark-300 bg-gray-50 dark:bg-dark-50`,children:[(0,J.jsxs)(`button`,{type:`button`,className:`flex w-full items-center gap-3 px-3 py-2 text-start`,onClick:()=>l(n?null:t.id),"aria-expanded":n,children:[r?n?(0,J.jsx)(f,{className:`h-4 w-4 shrink-0 text-gray-500 dark:text-gray-400`}):(0,J.jsx)(m,{className:`h-4 w-4 shrink-0 text-gray-500 dark:text-gray-400`}):(0,J.jsx)(`span`,{className:`h-4 w-4 shrink-0`}),(0,J.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,J.jsxs)(`span`,{className:`flex flex-wrap items-center gap-2`,children:[(0,J.jsx)(`span`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:t.action}),(0,J.jsx)(`span`,{className:`rounded-full px-2 py-0.5 text-xs font-medium ${he[t.result]||`bg-gray-100 dark:bg-dark-200 text-gray-600 dark:text-gray-300`}`,children:x(t.result)})]}),(0,J.jsxs)(`span`,{className:`mt-0.5 block truncate text-xs text-gray-500 dark:text-gray-400`,children:[new Date(t.occurredAt).toLocaleString(),` · `,e(`userManager.audit.actor`,`Actor`),`:`,` `,t.actorUserId||t.actorKind,t.targetType&&(0,J.jsxs)(J.Fragment,{children:[` · `,e(`userManager.audit.target`,`Target`),`:`,` `,t.targetType,t.targetId?`/${t.targetId}`:``]})]})]})]}),n&&r&&(0,J.jsx)(`pre`,{dir:`ltr`,className:`mx-3 mb-3 overflow-x-auto rounded-md bg-white dark:bg-dark-100 border border-gray-200 dark:border-dark-300 p-3 text-xs text-gray-700 dark:text-gray-300`,children:JSON.stringify(t.details,null,2)})]},t.id)})})]})},_e=()=>{let{t:e}=o(),[t,n]=(0,q.useState)(null),[r,i]=(0,q.useState)(!1),[a,s]=(0,q.useState)(!1),[c,l]=(0,q.useState)(0);return(0,q.useEffect)(()=>{let e=!1;return R.getModelAccess().then(t=>{e||(t.success&&t.data?n(t.data.mode):s(!0))}).catch(()=>{e||s(!0)}),()=>{e=!0}},[c]),(0,J.jsx)(`div`,{className:`rounded-lg border border-gray-200 dark:border-dark-300 bg-white dark:bg-dark-100 p-4`,children:(0,J.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`h4`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:e(`userManager.modelAccess.title`)}),(0,J.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400 mt-1`,children:e(`userManager.modelAccess.description`)})]}),t===null&&a?(0,J.jsx)(H,{size:`sm`,variant:`outline`,onClick:()=>{s(!1),l(e=>e+1)},children:e(`common.retry`)}):(0,J.jsx)(K,{checked:t===`all-users`,onChange:async t=>{let r=t?`all-users`:`admins`;i(!0);try{if(!(await R.setModelAccess(r)).success)throw Error(`Model download access update failed.`);n(r),y.success(e(`userManager.modelAccess.saved`))}catch{y.error(e(`userManager.modelAccess.saveFailed`))}finally{i(!1)}},disabled:r||t===null})]})})},ve=()=>{let{t:e}=o(),[t,n]=(0,q.useState)(null),[r,i]=(0,q.useState)(``),[a,s]=(0,q.useState)(!1),[c,l]=(0,q.useState)(!1),[u,d]=(0,q.useState)(0);(0,q.useEffect)(()=>{let e=!1;return R.getSettings().then(t=>{e||(t.success&&t.data?(n(t.data),i(t.data.baseUrl)):l(!0))}).catch(()=>{e||l(!0)}),()=>{e=!0}},[u]);let f=async t=>{s(!0);try{let r=await R.updateSettings(t);if(!r.success||!r.data)throw Error(r.message||`update failed`);n(r.data),i(r.data.baseUrl),y.success(e(`userManager.ollamaProvider.saved`))}catch{y.error(e(`userManager.ollamaProvider.saveFailed`))}finally{s(!1)}},p=t!==null&&r.trim()!==t.baseUrl;return(0,J.jsxs)(`div`,{className:`rounded-lg border border-gray-200 dark:border-dark-300 bg-white dark:bg-dark-100 p-4`,children:[(0,J.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`h4`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:e(`userManager.ollamaProvider.title`)}),(0,J.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400 mt-1`,children:e(`userManager.ollamaProvider.description`)})]}),t===null&&c?(0,J.jsx)(H,{size:`sm`,variant:`outline`,onClick:()=>{l(!1),d(e=>e+1)},children:e(`common.retry`)}):(0,J.jsx)(K,{checked:t?.enabled===!0,onChange:e=>void f({enabled:e}),disabled:a||t===null})]}),t!==null&&(0,J.jsxs)(`div`,{className:`mt-3 flex items-center gap-2`,children:[(0,J.jsx)(`input`,{className:`min-w-0 flex-1 rounded-lg border border-gray-200 bg-white px-3 py-1.5 font-mono text-xs text-gray-900 focus:border-primary-400 focus:outline-none dark:border-dark-300 dark:bg-dark-50 dark:text-gray-100`,value:r,onChange:e=>i(e.target.value),placeholder:`http://localhost:11434`,spellCheck:!1,"aria-label":e(`userManager.ollamaProvider.baseUrlLabel`)}),(0,J.jsx)(H,{size:`sm`,variant:`outline`,onClick:()=>void f({baseUrl:r.trim()}),disabled:a||!p||!r.trim(),children:e(`common.save`)})]})]})},ye=()=>{let{t:e}=o(),[t,n]=(0,q.useState)(null),[r,i]=(0,q.useState)(!1),[a,s]=(0,q.useState)(!1),[c,l]=(0,q.useState)(0);return(0,q.useEffect)(()=>{let e=!1;return I.getAccess().then(t=>{e||(t.success&&t.data?n(t.data.mode):s(!0))}).catch(()=>{e||s(!0)}),()=>{e=!0}},[c]),(0,J.jsx)(`div`,{className:`rounded-lg border border-gray-200 dark:border-dark-300 bg-white dark:bg-dark-100 p-4`,children:(0,J.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`h4`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:e(`userManager.webSearchAccess.title`)}),(0,J.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400 mt-1`,children:e(`userManager.webSearchAccess.description`)})]}),t===null&&a?(0,J.jsx)(H,{size:`sm`,variant:`outline`,onClick:()=>{s(!1),l(e=>e+1)},children:e(`common.retry`)}):(0,J.jsx)(K,{checked:t===`all-users`,onChange:async t=>{let r=t?`all-users`:`admins`;i(!0);try{if(!(await I.setAccess(r)).success)throw Error(`Web search access update failed.`);n(r),y.success(e(`userManager.webSearchAccess.saved`))}catch{y.error(e(`userManager.webSearchAccess.saveFailed`))}finally{i(!1)}},disabled:r||t===null})]})})},be=()=>{let{t:e}=o(),t=z(e=>e.refreshWorkAccess),[n,r]=(0,q.useState)(null),[i,a]=(0,q.useState)(!1),[s,c]=(0,q.useState)(!1),[l,u]=(0,q.useState)(0);return(0,q.useEffect)(()=>{let e=!1;return A.access().then(t=>{e||(t.success&&t.data?r(t.data.mode):c(!0))}).catch(()=>{e||c(!0)}),()=>{e=!0}},[l]),(0,J.jsx)(`div`,{className:`rounded-lg border border-gray-200 dark:border-dark-300 bg-white dark:bg-dark-100 p-4`,children:(0,J.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`h4`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:e(`userManager.workAccess.title`)}),(0,J.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400 mt-1`,children:e(`userManager.workAccess.description`)})]}),n===null&&s?(0,J.jsx)(H,{size:`sm`,variant:`outline`,onClick:()=>{c(!1),u(e=>e+1)},children:e(`common.retry`)}):(0,J.jsx)(K,{checked:n===`all-users`,onChange:async n=>{let i=n?`all-users`:`admins`;a(!0);try{if(!(await A.setAccess(i)).success)throw Error(`Work access update failed.`);r(i),await t(),y.success(e(`userManager.workAccess.saved`))}catch{y.error(e(`userManager.workAccess.saveFailed`))}finally{a(!1)}},disabled:i||n===null})]})})},Q={name:``,image:``,memoryLimit:``,cpuLimit:``,pidsLimit:``,workspaceSize:``,idleMinutes:``,networkDefault:`inherit`,guiEnabled:!1,takeoverEnabled:!0,approvalsRequired:!1},xe={...Q,name:`Work Computer`,image:`libre-work-computer:latest`,memoryLimit:`4g`,networkDefault:`on`,guiEnabled:!0},Se=e=>({name:e.name,guiEnabled:e.guiEnabled===!0,takeoverEnabled:e.takeoverEnabled!==!1,approvalsRequired:e.approvalsRequired===!0,image:e.image??``,memoryLimit:e.memoryLimit??``,cpuLimit:e.cpuLimit??``,pidsLimit:e.pidsLimit===void 0?``:String(e.pidsLimit),workspaceSize:e.workspaceSize??``,idleMinutes:e.idleTimeoutMs===void 0?``:String(e.idleTimeoutMs/6e4),networkDefault:e.networkDefault===void 0?`inherit`:e.networkDefault?`on`:`off`}),Ce=e=>[e.pidsLimit,e.idleMinutes].some(e=>e.trim()!==``&&!Number.isFinite(Number(e))),we=e=>({name:e.name.trim(),image:e.image.trim()||null,memoryLimit:e.memoryLimit.trim()||null,cpuLimit:e.cpuLimit.trim()||null,pidsLimit:e.pidsLimit.trim()?Number(e.pidsLimit):null,workspaceSize:e.workspaceSize.trim()||null,idleTimeoutMs:e.idleMinutes.trim()?Math.round(Number(e.idleMinutes)*6e4):null,networkDefault:e.networkDefault===`inherit`?null:e.networkDefault===`on`,guiEnabled:e.guiEnabled?!0:null,takeoverEnabled:e.takeoverEnabled?null:!1,approvalsRequired:e.approvalsRequired?!0:null}),Te=()=>{let{t:e}=o(),[t,n]=(0,q.useState)([]),[r,i]=(0,q.useState)(null),[a,s]=(0,q.useState)(Q),[c,l]=(0,q.useState)(!1),u=async()=>{try{let e=await A.listPolicies();e.success&&e.data&&n(e.data)}catch{}};(0,q.useEffect)(()=>{let e=!1;return A.listPolicies().then(t=>{!e&&t.success&&t.data&&n(t.data)}).catch(()=>{}),()=>{e=!0}},[]);let d=e=>({value:a[e],onChange:t=>s(n=>({...n,[e]:t.target.value}))}),f=async()=>{if(Ce(a)){y.error(e(`userManager.workPolicies.invalidNumber`));return}l(!0);try{let t=we(a),n=r===`new`?await A.createPolicy(t):await A.updatePolicy(r,t);if(!n.success)throw Error(n.error||`Policy save failed.`);y.success(e(`userManager.workPolicies.saved`)),i(null),s(Q),await u()}catch(t){y.error(t instanceof Error&&t.message?t.message:e(`userManager.workPolicies.failed`))}finally{l(!1)}},p=async t=>{if(window.confirm(e(`userManager.workPolicies.deleteConfirm`)))try{let n=await A.deletePolicy(t.id);if(!n.success)throw Error(n.error||`Policy delete failed.`);y.success(e(`userManager.workPolicies.deleted`)),await u()}catch(t){y.error(t instanceof Error&&t.message?t.message:e(`userManager.workPolicies.failed`))}},m=(e,t,n)=>(0,J.jsxs)(`label`,{className:`block text-xs`,children:[(0,J.jsx)(`span`,{className:`mb-1 block font-medium text-gray-700 dark:text-gray-300`,children:t}),(0,J.jsx)(`input`,{...d(e),placeholder:n,spellCheck:!1,className:`w-full rounded-lg border border-gray-200 bg-white px-2.5 py-1.5 text-sm text-gray-900 outline-none focus:border-primary-500 dark:border-dark-300 dark:bg-dark-50 dark:text-gray-100`})]});return(0,J.jsxs)(`div`,{className:`rounded-lg border border-gray-200 dark:border-dark-300 bg-white dark:bg-dark-100 p-4`,children:[(0,J.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,J.jsxs)(`div`,{children:[(0,J.jsx)(`h4`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:e(`userManager.workPolicies.title`)}),(0,J.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400 mt-1`,children:e(`userManager.workPolicies.description`)})]}),r===null&&(0,J.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[(0,J.jsxs)(H,{size:`sm`,variant:`outline`,className:`whitespace-nowrap`,"data-testid":`work-policy-computer-preset`,onClick:()=>{s(xe),i(`new`)},children:[(0,J.jsx)(D,{size:14,className:`shrink-0`}),(0,J.jsx)(`span`,{className:`ms-1.5`,children:e(`userManager.workPolicies.computerPreset`)})]}),(0,J.jsxs)(H,{size:`sm`,variant:`outline`,className:`whitespace-nowrap`,onClick:()=>{s(Q),i(`new`)},children:[(0,J.jsx)(te,{size:14,className:`shrink-0`}),(0,J.jsx)(`span`,{className:`ms-1.5`,children:e(`userManager.workPolicies.add`)})]})]})]}),t.length===0&&r===null&&(0,J.jsx)(`p`,{className:`mt-3 text-xs text-gray-500 dark:text-gray-400`,children:e(`userManager.workPolicies.empty`)}),t.length>0&&(0,J.jsx)(`ul`,{className:`mt-3 divide-y divide-gray-100 dark:divide-dark-300`,children:t.map(t=>(0,J.jsxs)(`li`,{className:`flex items-center justify-between gap-3 py-2`,children:[(0,J.jsxs)(`div`,{className:`min-w-0`,children:[(0,J.jsx)(`div`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:t.name}),(0,J.jsx)(`div`,{className:`mt-0.5 truncate font-mono text-[11px] text-gray-500 dark:text-gray-400`,children:[t.memoryLimit,t.cpuLimit&&`cpu ${t.cpuLimit}`,t.pidsLimit&&`pids ${t.pidsLimit}`,t.workspaceSize,t.idleTimeoutMs!==void 0&&`idle ${Math.round(t.idleTimeoutMs/6e4)}m`,t.networkDefault!==void 0&&`net ${t.networkDefault?`on`:`off`}`,t.image].filter(Boolean).join(` · `)||`—`})]}),(0,J.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,children:[(0,J.jsx)(H,{size:`sm`,variant:`ghost`,"aria-label":e(`userManager.workPolicies.edit`),onClick:()=>{s(Se(t)),i(t.id)},children:(0,J.jsx)(w,{size:14})}),(0,J.jsx)(H,{size:`sm`,variant:`ghost`,"aria-label":e(`userManager.workPolicies.delete`),onClick:()=>void p(t),children:(0,J.jsx)(T,{size:14})})]})]},t.id))}),r!==null&&(0,J.jsxs)(`div`,{className:`mt-4 rounded-lg border border-gray-200 p-3 dark:border-dark-300`,children:[(0,J.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2 lg:grid-cols-4`,children:[m(`name`,e(`userManager.workPolicies.name`),`heavy`),m(`memoryLimit`,e(`userManager.workPolicies.memory`),`4g`),m(`cpuLimit`,e(`userManager.workPolicies.cpu`),`4`),m(`pidsLimit`,e(`userManager.workPolicies.pids`),`512`),m(`workspaceSize`,e(`userManager.workPolicies.workspaceSize`),`20Gi`),m(`idleMinutes`,e(`userManager.workPolicies.idleMinutes`),`30`),(0,J.jsxs)(`label`,{className:`block text-xs`,children:[(0,J.jsx)(`span`,{className:`mb-1 block font-medium text-gray-700 dark:text-gray-300`,children:e(`userManager.workPolicies.networkDefault`)}),(0,J.jsxs)(`select`,{...d(`networkDefault`),className:`w-full rounded-lg border border-gray-200 bg-white px-2.5 py-1.5 text-sm text-gray-900 outline-none focus:border-primary-500 dark:border-dark-300 dark:bg-dark-50 dark:text-gray-100`,children:[(0,J.jsx)(`option`,{value:`inherit`,children:e(`userManager.workPolicies.networkInherit`)}),(0,J.jsx)(`option`,{value:`on`,children:e(`userManager.workPolicies.networkOn`)}),(0,J.jsx)(`option`,{value:`off`,children:e(`userManager.workPolicies.networkOff`)})]})]}),(0,J.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,J.jsx)(`input`,{type:`checkbox`,"data-testid":`work-policy-gui`,checked:a.guiEnabled,onChange:e=>s(t=>({...t,guiEnabled:e.target.checked})),className:`h-3.5 w-3.5 rounded border-gray-300 text-primary-600 focus:ring-primary-500`}),(0,J.jsx)(`span`,{className:`font-medium text-gray-700 dark:text-gray-300`,children:e(`userManager.workPolicies.guiEnabled`)})]}),a.guiEnabled&&(0,J.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,J.jsx)(`input`,{type:`checkbox`,"data-testid":`work-policy-takeover`,checked:a.takeoverEnabled,onChange:e=>s(t=>({...t,takeoverEnabled:e.target.checked})),className:`h-3.5 w-3.5 rounded border-gray-300 text-primary-600 focus:ring-primary-500`}),(0,J.jsx)(`span`,{className:`font-medium text-gray-700 dark:text-gray-300`,children:e(`userManager.workPolicies.takeoverEnabled`)})]}),(0,J.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,J.jsx)(`input`,{type:`checkbox`,"data-testid":`work-policy-approvals`,checked:a.approvalsRequired,onChange:e=>s(t=>({...t,approvalsRequired:e.target.checked})),className:`h-3.5 w-3.5 rounded border-gray-300 text-primary-600 focus:ring-primary-500`}),(0,J.jsx)(`span`,{className:`font-medium text-gray-700 dark:text-gray-300`,children:e(`userManager.workPolicies.approvalsRequired`)})]}),m(`image`,e(`userManager.workPolicies.image`),`node:22-bookworm@sha256:…`)]}),a.guiEnabled&&(0,J.jsx)(`p`,{className:`mt-2 text-[11px] text-gray-500 dark:text-gray-400`,children:e(`userManager.workPolicies.computerPresetHint`)}),(0,J.jsxs)(`div`,{className:`mt-3 flex justify-end gap-2`,children:[(0,J.jsx)(H,{size:`sm`,variant:`ghost`,disabled:c,onClick:()=>{i(null),s(Q)},children:e(`userManager.workPolicies.cancel`)}),(0,J.jsx)(H,{size:`sm`,disabled:c||!a.name.trim(),onClick:()=>void f(),children:e(`userManager.workPolicies.save`)})]})]})]})},$=[{id:`users`,label:`userManager.sections.users`},{id:`groups`,label:`userManager.groups.title`},{id:`access`,label:`userManager.sections.access`},{id:`security`,label:`userManager.sections.security`},{id:`defaults`,label:`userManager.sections.defaults`}],Ee=e=>{switch(e){case`users`:return(0,J.jsx)(oe,{});case`groups`:return(0,J.jsx)(me,{});case`access`:return(0,J.jsxs)(`div`,{className:`space-y-4`,children:[(0,J.jsx)(be,{}),(0,J.jsx)(Te,{}),(0,J.jsx)(ve,{}),(0,J.jsx)(_e,{}),(0,J.jsx)(ye,{}),(0,J.jsx)(se,{}),(0,J.jsx)(ue,{}),(0,J.jsx)(fe,{})]});case`security`:return(0,J.jsxs)(`div`,{className:`space-y-4`,children:[(0,J.jsx)(pe,{}),(0,J.jsx)(ge,{})]});case`defaults`:return(0,J.jsx)(le,{})}},De=()=>{let{t:e}=o(),t=(0,q.useId)(),n=(0,q.useRef)({}),[r,i]=(0,q.useState)(`users`),[a,c]=(0,q.useState)([`users`]),l=e=>{i(e),c(t=>t.includes(e)?t:[...t,e])},u=(e,t)=>{let r=getComputedStyle(e.currentTarget).direction===`rtl`,i=$.findIndex(e=>e.id===t),a;switch(e.key){case`Home`:a=0;break;case`End`:a=$.length-1;break;case`ArrowRight`:a=i+(r?-1:1);break;case`ArrowLeft`:a=i+(r?1:-1);break;default:return}e.preventDefault();let o=$[(a+$.length)%$.length].id;l(o),n.current[o]?.focus()};return(0,J.jsxs)(`div`,{className:`min-w-0 space-y-5`,children:[(0,J.jsx)(`div`,{role:`tablist`,"aria-label":e(`userManager.title`),"aria-orientation":`horizontal`,className:`-mx-1 flex gap-1 overflow-x-auto border-b border-line px-1 pb-3 pt-1 scrollbar-thin`,children:$.map(i=>(0,J.jsx)(`button`,{ref:e=>{n.current[i.id]=e},type:`button`,role:`tab`,id:`${t}-tab-${i.id}`,"aria-controls":`${t}-panel-${i.id}`,"aria-selected":r===i.id,tabIndex:r===i.id?0:-1,onClick:()=>l(i.id),onKeyDown:e=>u(e,i.id),className:s(`min-h-11 shrink-0 rounded-xl border px-3 py-2 text-sm font-medium outline-none transition-colors duration-150 focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 focus-visible:ring-offset-surface motion-reduce:transition-none`,r===i.id?`border-line bg-nav-active text-ink`:`border-transparent text-ink-muted hover:bg-hover-solid hover:text-ink`),children:e(i.label)},i.id))}),$.map(e=>(0,J.jsx)(`div`,{id:`${t}-panel-${e.id}`,role:`tabpanel`,"aria-labelledby":`${t}-tab-${e.id}`,hidden:r!==e.id,children:a.includes(e.id)&&Ee(e.id)},e.id))]})};export{De as UserManagementPanel,De as default};
@@ -1 +1 @@
1
- import"./rolldown-runtime-hePW80VL.js";import{i as e,t}from"./react-vendor-D0Ec-185.js";import{t as n}from"./useTranslation-rdLmo6zV.js";import{D as r,n as i}from"./ui-vendor-Dt9hfsGD.js";import{t as a}from"./Button-BxwbQ5xw.js";import"./ui-CgokQU6I.js";import{s as o}from"./markdown-core-D067gSd8.js";e();var s=t(),c=({notes:e,onDismiss:t})=>{let{t:c}=n();return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(`div`,{className:`fixed inset-0 z-[60] bg-black/55 backdrop-blur-sm transition-opacity duration-200`,onClick:t}),(0,s.jsx)(`div`,{className:`fixed inset-0 z-[60] flex items-center justify-center p-4`,role:`dialog`,"aria-modal":`true`,"aria-label":c(`whatsNew.title`),onMouseDown:e=>{e.target===e.currentTarget&&t()},children:(0,s.jsxs)(`div`,{className:`flex max-h-[82vh] w-full max-w-2xl flex-col rounded-3xl border border-gray-200/80 bg-surface/95 shadow-2xl backdrop-blur-xl animate-scale-in dark:border-white/10 dark:bg-dark-25/95`,children:[(0,s.jsxs)(`div`,{className:`flex items-start justify-between px-6 pb-3 pt-6`,children:[(0,s.jsxs)(`div`,{children:[(0,s.jsx)(`h2`,{className:`text-xl font-semibold tracking-[-0.02em] text-gray-950 dark:text-dark-950`,children:c(`whatsNew.title`)}),(0,s.jsxs)(`p`,{className:`mt-1 text-xs text-gray-500 dark:text-dark-500`,children:[c(`whatsNew.releaseNotes`),` · v`,e.version,` · `,e.date]})]}),(0,s.jsx)(`button`,{onClick:t,className:`rounded-full p-2 text-gray-500 transition-colors hover:bg-gray-100 hover:text-gray-900 dark:text-dark-600 dark:hover:bg-white/[0.06] dark:hover:text-dark-900`,title:c(`common.close`),children:(0,s.jsx)(i,{className:`h-4 w-4`})})]}),(0,s.jsx)(`div`,{className:`scroll-region min-h-0 flex-1 overflow-y-auto px-6 py-3 scrollbar-thin`,children:(0,s.jsx)(o,{components:{h3:({children:e})=>(0,s.jsx)(`h3`,{className:`mb-2 mt-5 text-[11px] font-semibold uppercase tracking-[0.1em] text-primary-600 first:mt-0 dark:text-primary-400`,children:e}),ul:({children:e})=>(0,s.jsx)(`ul`,{className:`space-y-2.5`,children:e}),li:({children:e})=>(0,s.jsxs)(`li`,{className:`flex gap-2 text-[13.5px] leading-relaxed text-gray-700 dark:text-dark-700`,children:[(0,s.jsx)(`span`,{className:`mt-[7px] h-1 w-1 shrink-0 rounded-full bg-gray-300 dark:bg-dark-400`}),(0,s.jsx)(`span`,{className:`min-w-0`,children:e})]}),strong:({children:e})=>(0,s.jsx)(`strong`,{className:`font-semibold text-gray-900 dark:text-dark-900`,children:e}),a:({children:e,href:t})=>(0,s.jsx)(`a`,{href:t,target:`_blank`,rel:`noreferrer`,className:`text-primary-600 underline decoration-primary-300 underline-offset-2 hover:text-primary-700 dark:text-primary-400`,children:e}),code:({children:e})=>(0,s.jsx)(`code`,{className:`rounded-md border border-gray-200 bg-gray-100 px-1 py-0.5 font-mono text-[0.85em] text-gray-800 dark:border-dark-300 dark:bg-dark-200 dark:text-dark-800`,children:e}),p:({children:e})=>(0,s.jsx)(`p`,{className:`mb-2 text-[13.5px] leading-relaxed text-gray-700 dark:text-dark-700`,children:e})},children:e.body})}),(0,s.jsxs)(`div`,{className:`flex items-center justify-between gap-3 border-t border-gray-200/70 px-6 py-4 dark:border-white/[0.08]`,children:[(0,s.jsxs)(`a`,{href:`https://github.com/libre-webui/libre-webui`,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex min-w-0 items-center gap-1.5 text-xs text-gray-500 transition-colors hover:text-gray-900 dark:text-dark-500 dark:hover:text-dark-900`,children:[(0,s.jsx)(r,{className:`h-3.5 w-3.5 shrink-0`}),(0,s.jsx)(`span`,{className:`truncate`,children:c(`whatsNew.starAsk`)})]}),(0,s.jsx)(a,{onClick:t,size:`sm`,children:c(`whatsNew.cta`)})]})]})})]})};export{c as WhatsNewModal};
1
+ import"./rolldown-runtime-hePW80VL.js";import{i as e,t}from"./react-vendor-D0Ec-185.js";import{t as n}from"./useTranslation-rdLmo6zV.js";import{D as r,n as i}from"./ui-vendor-Dt9hfsGD.js";import{t as a}from"./Button-BxwbQ5xw.js";import"./ui-DzVF9vZ5.js";import{s as o}from"./markdown-core-D067gSd8.js";e();var s=t(),c=({notes:e,onDismiss:t})=>{let{t:c}=n();return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(`div`,{className:`fixed inset-0 z-[60] bg-black/55 backdrop-blur-sm transition-opacity duration-200`,onClick:t}),(0,s.jsx)(`div`,{className:`fixed inset-0 z-[60] flex items-center justify-center p-4`,role:`dialog`,"aria-modal":`true`,"aria-label":c(`whatsNew.title`),onMouseDown:e=>{e.target===e.currentTarget&&t()},children:(0,s.jsxs)(`div`,{className:`flex max-h-[82vh] w-full max-w-2xl flex-col rounded-3xl border border-gray-200/80 bg-surface/95 shadow-2xl backdrop-blur-xl animate-scale-in dark:border-white/10 dark:bg-dark-25/95`,children:[(0,s.jsxs)(`div`,{className:`flex items-start justify-between px-6 pb-3 pt-6`,children:[(0,s.jsxs)(`div`,{children:[(0,s.jsx)(`h2`,{className:`text-xl font-semibold tracking-[-0.02em] text-gray-950 dark:text-dark-950`,children:c(`whatsNew.title`)}),(0,s.jsxs)(`p`,{className:`mt-1 text-xs text-gray-500 dark:text-dark-500`,children:[c(`whatsNew.releaseNotes`),` · v`,e.version,` · `,e.date]})]}),(0,s.jsx)(`button`,{onClick:t,className:`rounded-full p-2 text-gray-500 transition-colors hover:bg-gray-100 hover:text-gray-900 dark:text-dark-600 dark:hover:bg-white/[0.06] dark:hover:text-dark-900`,title:c(`common.close`),children:(0,s.jsx)(i,{className:`h-4 w-4`})})]}),(0,s.jsx)(`div`,{className:`scroll-region min-h-0 flex-1 overflow-y-auto px-6 py-3 scrollbar-thin`,children:(0,s.jsx)(o,{components:{h3:({children:e})=>(0,s.jsx)(`h3`,{className:`mb-2 mt-5 text-[11px] font-semibold uppercase tracking-[0.1em] text-primary-600 first:mt-0 dark:text-primary-400`,children:e}),ul:({children:e})=>(0,s.jsx)(`ul`,{className:`space-y-2.5`,children:e}),li:({children:e})=>(0,s.jsxs)(`li`,{className:`flex gap-2 text-[13.5px] leading-relaxed text-gray-700 dark:text-dark-700`,children:[(0,s.jsx)(`span`,{className:`mt-[7px] h-1 w-1 shrink-0 rounded-full bg-gray-300 dark:bg-dark-400`}),(0,s.jsx)(`span`,{className:`min-w-0`,children:e})]}),strong:({children:e})=>(0,s.jsx)(`strong`,{className:`font-semibold text-gray-900 dark:text-dark-900`,children:e}),a:({children:e,href:t})=>(0,s.jsx)(`a`,{href:t,target:`_blank`,rel:`noreferrer`,className:`text-primary-600 underline decoration-primary-300 underline-offset-2 hover:text-primary-700 dark:text-primary-400`,children:e}),code:({children:e})=>(0,s.jsx)(`code`,{className:`rounded-md border border-gray-200 bg-gray-100 px-1 py-0.5 font-mono text-[0.85em] text-gray-800 dark:border-dark-300 dark:bg-dark-200 dark:text-dark-800`,children:e}),p:({children:e})=>(0,s.jsx)(`p`,{className:`mb-2 text-[13.5px] leading-relaxed text-gray-700 dark:text-dark-700`,children:e})},children:e.body})}),(0,s.jsxs)(`div`,{className:`flex items-center justify-between gap-3 border-t border-gray-200/70 px-6 py-4 dark:border-white/[0.08]`,children:[(0,s.jsxs)(`a`,{href:`https://github.com/libre-webui/libre-webui`,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex min-w-0 items-center gap-1.5 text-xs text-gray-500 transition-colors hover:text-gray-900 dark:text-dark-500 dark:hover:text-dark-900`,children:[(0,s.jsx)(r,{className:`h-3.5 w-3.5 shrink-0`}),(0,s.jsx)(`span`,{className:`truncate`,children:c(`whatsNew.starAsk`)})]}),(0,s.jsx)(a,{onClick:t,size:`sm`,children:c(`whatsNew.cta`)})]})]})})]})};export{c as WhatsNewModal};