libre-webui 0.27.0 → 0.28.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.
- package/README.md +57 -29
- package/backend/dist/persistence/postgresAutomationWorkTargetMigration.d.ts +9 -0
- package/backend/dist/persistence/postgresAutomationWorkTargetMigration.d.ts.map +1 -0
- package/backend/dist/persistence/postgresAutomationWorkTargetMigration.js +44 -0
- package/backend/dist/persistence/postgresAutomationWorkTargetMigration.js.map +1 -0
- package/backend/dist/persistence/postgresMfaPushRecoveryMigration.d.ts.map +1 -1
- package/backend/dist/persistence/postgresMfaPushRecoveryMigration.js +4 -4
- package/backend/dist/persistence/postgresMfaPushRecoveryMigration.js.map +1 -1
- package/backend/dist/persistence/postgresMigrationRegistry.d.ts.map +1 -1
- package/backend/dist/persistence/postgresMigrationRegistry.js +6 -0
- package/backend/dist/persistence/postgresMigrationRegistry.js.map +1 -1
- package/backend/dist/persistence/postgresResourceRepositories.d.ts.map +1 -1
- package/backend/dist/persistence/postgresResourceRepositories.js +17 -4
- package/backend/dist/persistence/postgresResourceRepositories.js.map +1 -1
- package/backend/dist/persistence/postgresSecurityRepositories.d.ts.map +1 -1
- package/backend/dist/persistence/postgresSecurityRepositories.js +4 -0
- package/backend/dist/persistence/postgresSecurityRepositories.js.map +1 -1
- package/backend/dist/persistence/postgresWorkComputerMigration.d.ts +8 -0
- package/backend/dist/persistence/postgresWorkComputerMigration.d.ts.map +1 -0
- package/backend/dist/persistence/postgresWorkComputerMigration.js +37 -0
- package/backend/dist/persistence/postgresWorkComputerMigration.js.map +1 -0
- package/backend/dist/persistence/postgresWorkTakeoverMigration.d.ts +9 -0
- package/backend/dist/persistence/postgresWorkTakeoverMigration.d.ts.map +1 -0
- package/backend/dist/persistence/postgresWorkTakeoverMigration.js +38 -0
- package/backend/dist/persistence/postgresWorkTakeoverMigration.js.map +1 -0
- package/backend/dist/persistence/resourceTypes.d.ts +5 -0
- package/backend/dist/persistence/resourceTypes.d.ts.map +1 -1
- package/backend/dist/persistence/resourceTypes.js.map +1 -1
- package/backend/dist/persistence/securityTypes.d.ts +1 -0
- package/backend/dist/persistence/securityTypes.d.ts.map +1 -1
- package/backend/dist/persistence/sqliteMigrations.d.ts +3 -0
- package/backend/dist/persistence/sqliteMigrations.d.ts.map +1 -1
- package/backend/dist/persistence/sqliteMigrations.js +73 -0
- package/backend/dist/persistence/sqliteMigrations.js.map +1 -1
- package/backend/dist/persistence/sqliteResourceRepositories.d.ts.map +1 -1
- package/backend/dist/persistence/sqliteResourceRepositories.js +17 -7
- package/backend/dist/persistence/sqliteResourceRepositories.js.map +1 -1
- package/backend/dist/persistence/sqliteSecurityRepositories.d.ts.map +1 -1
- package/backend/dist/persistence/sqliteSecurityRepositories.js +6 -0
- package/backend/dist/persistence/sqliteSecurityRepositories.js.map +1 -1
- package/backend/dist/platform/jobs/domainJobHandlers.d.ts.map +1 -1
- package/backend/dist/platform/jobs/domainJobHandlers.js +87 -0
- package/backend/dist/platform/jobs/domainJobHandlers.js.map +1 -1
- package/backend/dist/platform/workPersistence/postgresWorkPersistence.d.ts.map +1 -1
- package/backend/dist/platform/workPersistence/postgresWorkPersistence.js +7 -3
- package/backend/dist/platform/workPersistence/postgresWorkPersistence.js.map +1 -1
- package/backend/dist/platform/workPersistence/sqliteWorkPersistence.d.ts.map +1 -1
- package/backend/dist/platform/workPersistence/sqliteWorkPersistence.js +8 -4
- package/backend/dist/platform/workPersistence/sqliteWorkPersistence.js.map +1 -1
- package/backend/dist/platform/workPersistence/types.d.ts +2 -0
- package/backend/dist/platform/workPersistence/types.d.ts.map +1 -1
- package/backend/dist/platform/workPersistence/types.js.map +1 -1
- package/backend/dist/routes/auth.d.ts.map +1 -1
- package/backend/dist/routes/auth.js +8 -4
- package/backend/dist/routes/auth.js.map +1 -1
- package/backend/dist/routes/automations.d.ts.map +1 -1
- package/backend/dist/routes/automations.js +5 -0
- package/backend/dist/routes/automations.js.map +1 -1
- package/backend/dist/routes/work.d.ts.map +1 -1
- package/backend/dist/routes/work.js +205 -1
- package/backend/dist/routes/work.js.map +1 -1
- package/backend/dist/services/authService.d.ts +2 -0
- package/backend/dist/services/authService.d.ts.map +1 -1
- package/backend/dist/services/authService.js +20 -0
- package/backend/dist/services/authService.js.map +1 -1
- package/backend/dist/services/automationSchedulerService.d.ts.map +1 -1
- package/backend/dist/services/automationSchedulerService.js +24 -0
- package/backend/dist/services/automationSchedulerService.js.map +1 -1
- package/backend/dist/services/automationService.d.ts +4 -1
- package/backend/dist/services/automationService.d.ts.map +1 -1
- package/backend/dist/services/automationService.js +27 -0
- package/backend/dist/services/automationService.js.map +1 -1
- package/backend/dist/services/mfaService.d.ts.map +1 -1
- package/backend/dist/services/mfaService.js +2 -3
- package/backend/dist/services/mfaService.js.map +1 -1
- package/backend/dist/services/webauthnService.d.ts.map +1 -1
- package/backend/dist/services/webauthnService.js +1 -0
- package/backend/dist/services/webauthnService.js.map +1 -1
- package/backend/dist/services/websocketTicketService.d.ts +1 -1
- package/backend/dist/services/websocketTicketService.d.ts.map +1 -1
- package/backend/dist/services/websocketTicketService.js +3 -1
- package/backend/dist/services/websocketTicketService.js.map +1 -1
- package/backend/dist/services/workAgentGuidance.d.ts +14 -0
- package/backend/dist/services/workAgentGuidance.d.ts.map +1 -1
- package/backend/dist/services/workAgentGuidance.js +38 -2
- package/backend/dist/services/workAgentGuidance.js.map +1 -1
- package/backend/dist/services/workAgentService.d.ts +9 -0
- package/backend/dist/services/workAgentService.d.ts.map +1 -1
- package/backend/dist/services/workAgentService.js +503 -13
- package/backend/dist/services/workAgentService.js.map +1 -1
- package/backend/dist/services/workComputerSetupService.d.ts +33 -0
- package/backend/dist/services/workComputerSetupService.d.ts.map +1 -0
- package/backend/dist/services/workComputerSetupService.js +164 -0
- package/backend/dist/services/workComputerSetupService.js.map +1 -0
- package/backend/dist/services/workComputerTeachService.d.ts +105 -0
- package/backend/dist/services/workComputerTeachService.d.ts.map +1 -0
- package/backend/dist/services/workComputerTeachService.js +513 -0
- package/backend/dist/services/workComputerTeachService.js.map +1 -0
- package/backend/dist/services/workKubernetesDriver.d.ts +8 -0
- package/backend/dist/services/workKubernetesDriver.d.ts.map +1 -1
- package/backend/dist/services/workKubernetesDriver.js +22 -0
- package/backend/dist/services/workKubernetesDriver.js.map +1 -1
- package/backend/dist/services/workModelProviderService.d.ts.map +1 -1
- package/backend/dist/services/workModelProviderService.js +102 -8
- package/backend/dist/services/workModelProviderService.js.map +1 -1
- package/backend/dist/services/workPolicyService.d.ts +8 -0
- package/backend/dist/services/workPolicyService.d.ts.map +1 -1
- package/backend/dist/services/workPolicyService.js +25 -0
- package/backend/dist/services/workPolicyService.js.map +1 -1
- package/backend/dist/services/workRuntimeDriver.d.ts +32 -0
- package/backend/dist/services/workRuntimeDriver.d.ts.map +1 -1
- package/backend/dist/services/workRuntimeDriver.js +54 -8
- package/backend/dist/services/workRuntimeDriver.js.map +1 -1
- package/backend/dist/services/workRuntimeService.d.ts +212 -1
- package/backend/dist/services/workRuntimeService.d.ts.map +1 -1
- package/backend/dist/services/workRuntimeService.js +1184 -9
- package/backend/dist/services/workRuntimeService.js.map +1 -1
- package/backend/dist/services/workRuntimeShared.d.ts +11 -1
- package/backend/dist/services/workRuntimeShared.d.ts.map +1 -1
- package/backend/dist/services/workRuntimeShared.js +24 -1
- package/backend/dist/services/workRuntimeShared.js.map +1 -1
- package/backend/dist/services/workScreenControlService.d.ts +60 -0
- package/backend/dist/services/workScreenControlService.d.ts.map +1 -0
- package/backend/dist/services/workScreenControlService.js +201 -0
- package/backend/dist/services/workScreenControlService.js.map +1 -0
- package/backend/dist/services/workTaskService.d.ts +11 -0
- package/backend/dist/services/workTaskService.d.ts.map +1 -1
- package/backend/dist/services/workTaskService.js +31 -0
- package/backend/dist/services/workTaskService.js.map +1 -1
- package/backend/dist/types/index.d.ts +7 -0
- package/backend/dist/types/index.d.ts.map +1 -1
- package/backend/dist/types/index.js.map +1 -1
- package/backend/dist/types/work.d.ts +13 -0
- package/backend/dist/types/work.d.ts.map +1 -1
- package/backend/dist/utils/webauthn.d.ts +6 -2
- package/backend/dist/utils/webauthn.d.ts.map +1 -1
- package/backend/dist/utils/webauthn.js +32 -3
- package/backend/dist/utils/webauthn.js.map +1 -1
- package/backend/dist/websocketServer.d.ts.map +1 -1
- package/backend/dist/websocketServer.js +9 -0
- package/backend/dist/websocketServer.js.map +1 -1
- package/backend/dist/workScreenServer.d.ts +12 -0
- package/backend/dist/workScreenServer.d.ts.map +1 -0
- package/backend/dist/workScreenServer.js +291 -0
- package/backend/dist/workScreenServer.js.map +1 -0
- package/backend/package.json +1 -1
- package/deploy/work-computer/Dockerfile +48 -0
- package/deploy/work-computer/README.md +93 -0
- package/deploy/work-computer/fonts/fonts.css +335 -0
- package/deploy/work-computer/fonts/v16-aFTR7PB1QTsUX8KYvumzEY2tbYf-Vlh3uA.woff2 +0 -0
- package/deploy/work-computer/fonts/v16-aFTR7PB1QTsUX8KYvumzEYOtbYf-Vlg.woff2 +0 -0
- package/deploy/work-computer/fonts/v16-aFTU7PB1QTsUX8KYthSQBK6PYK3EXw.woff2 +0 -0
- package/deploy/work-computer/fonts/v16-aFTU7PB1QTsUX8KYthqQBK6PYK0.woff2 +0 -0
- package/deploy/work-computer/fonts/v20-xn7gYHE41ni1AdIRggOxSvfedN62Zw.woff2 +0 -0
- package/deploy/work-computer/fonts/v20-xn7gYHE41ni1AdIRggSxSvfedN62Zw.woff2 +0 -0
- package/deploy/work-computer/fonts/v20-xn7gYHE41ni1AdIRggexSvfedN4.woff2 +0 -0
- package/deploy/work-computer/fonts/v20-xn7gYHE41ni1AdIRggixSvfedN62Zw.woff2 +0 -0
- package/deploy/work-computer/fonts/v20-xn7gYHE41ni1AdIRggmxSvfedN62Zw.woff2 +0 -0
- package/deploy/work-computer/fonts/v20-xn7gYHE41ni1AdIRggqxSvfedN62Zw.woff2 +0 -0
- package/deploy/work-computer/fonts/v22-V8mDoQDjQSkFtoMM3T6r8E7mPb54C_k3HqUtEw.woff2 +0 -0
- package/deploy/work-computer/fonts/v22-V8mDoQDjQSkFtoMM3T6r8E7mPb94C_k3HqUtEw.woff2 +0 -0
- package/deploy/work-computer/fonts/v22-V8mDoQDjQSkFtoMM3T6r8E7mPbF4C_k3HqU.woff2 +0 -0
- package/deploy/work-computer/start-computer.sh +155 -0
- package/deploy/work-computer/start-page.html +251 -0
- package/deploy/work-computer/tint2rc +76 -0
- package/deploy/work-computer/wallpaper.png +0 -0
- package/frontend/dist/artifact-runtime/.build-fingerprint +1 -1
- package/frontend/dist/assets/index-DGy6mo0B.js +33 -0
- package/frontend/dist/assets/index-DqLJKWF-.css +1 -0
- package/frontend/dist/index.html +31 -16
- package/frontend/dist/js/{ArtifactContainer-C9zNtCay.js → ArtifactContainer-DvIMxleC.js} +1 -1
- package/frontend/dist/js/{ArtifactDemoPage-C-EBFBCt.js → ArtifactDemoPage-BqYskFqc.js} +1 -1
- package/frontend/dist/js/{ArtifactSandboxFrame-CTA1j_d1.js → ArtifactSandboxFrame-9wuufHn6.js} +1 -1
- package/frontend/dist/js/ArtifactSlideOutPanel-DXESMtPh.js +1 -0
- package/frontend/dist/js/AutomationsPage-DByxhIKj.js +1 -0
- package/frontend/dist/js/AvatarUpload-DnCGQ46o.js +1 -0
- package/frontend/dist/js/{Button-C0r3J9G_.js → Button-CpobxJ2P.js} +1 -1
- package/frontend/dist/js/CalendarPage-JywVP-9y.js +1 -0
- package/frontend/dist/js/ChannelsPage-B31rcARd.js +1 -0
- package/frontend/dist/js/ChatPage-CHXJY8m3.js +14 -0
- package/frontend/dist/js/{EvaluationsPage-FWIJu2fI.js → EvaluationsPage-CcmB5wdF.js} +1 -1
- package/frontend/dist/js/FirstTimeSetup-DDU7SowM.js +1 -0
- package/frontend/dist/js/GalleryPage-XfX_7iCf.js +1 -0
- package/frontend/dist/js/HomePage-DAZAkoAV.js +1 -0
- package/frontend/dist/js/LibreClawPage-De0gZmbF.js +1 -0
- package/frontend/dist/js/Logo-yKM43xGa.js +1 -0
- package/frontend/dist/js/LogoMark-PmpKQOre.js +1 -0
- package/frontend/dist/js/{ModelManagerModals-BY5TK38_.js → ModelManagerModals-hz2cZZ4a.js} +1 -1
- package/frontend/dist/js/ModelSelector-BoFehQy-.js +1 -0
- package/frontend/dist/js/NotesPage-BGPI3gG6.js +3 -0
- package/frontend/dist/js/OptimizedSyntaxHighlighter-DrejdNUm.js +1 -0
- package/frontend/dist/js/OptimizedSyntaxHighlighter-hNqZPLiB.js +1 -0
- package/frontend/dist/js/PasswordStrengthMeter-RwModpZ1.js +1 -0
- package/frontend/dist/js/PersonasPage-BkNRD2wO.js +13 -0
- package/frontend/dist/js/PluginUsagePage-Cqt7V2SQ.js +1 -0
- package/frontend/dist/js/RichMessageContent-B2QSyX-l.js +1 -0
- package/frontend/dist/js/RichMessageContent-CYEhT6uU.js +3 -0
- package/frontend/dist/js/SettingsModal-IbIvVyss.js +19 -0
- package/frontend/dist/js/{SettingsToggle-BIVyfGjl.js → SettingsToggle-3GxA96E0.js} +1 -1
- package/frontend/dist/js/ShareDialog-BoE4OVhV.js +1 -0
- package/frontend/dist/js/{SystemPage-BT07dTMT.js → SystemPage-B5ecz5H3.js} +1 -1
- package/frontend/dist/js/TurnstileWidget-DHU9IUM1.js +1 -0
- package/frontend/dist/js/UserManagementPage-C0VUfbMk.js +1 -0
- package/frontend/dist/js/WorkPage-EweYI5Dx.js +74 -0
- package/frontend/dist/js/api-Bbh2AHHN.js +1 -0
- package/frontend/dist/js/api-F0CnlVH8.js +14 -0
- package/frontend/dist/js/appNavigation-DqV69ohR.js +1 -0
- package/frontend/dist/js/appStore-SLLBamo2.js +2 -0
- package/frontend/dist/js/appVersion-46bF9UkF.js +1 -0
- package/frontend/dist/js/ar-C4yo7x5J.js +2 -0
- package/frontend/dist/js/authStore-CcfL8T6T.js +1 -0
- package/frontend/dist/js/authStore-DlSQ1TcP.js +4 -0
- package/frontend/dist/js/axios-_ZpUYd3e.js +1 -0
- package/frontend/dist/js/bn-BeZ6d2qF.js +2 -0
- package/frontend/dist/js/chatStore-DI79tEJ-.js +3 -0
- package/frontend/dist/js/classPrivateMethodInitSpec-B31Q4d2M.js +1 -0
- package/frontend/dist/js/{config-BqZ5304Q.js → config-0QgGZCrI.js} +1 -1
- package/frontend/dist/js/cs-9K5LILI5.js +2 -0
- package/frontend/dist/js/da-BWbBhLK8.js +2 -0
- package/frontend/dist/js/de-BXD9t2uY.js +2 -0
- package/frontend/dist/js/es-Dv4wZKlU.js +2 -0
- package/frontend/dist/js/{estree-DPkpBuOU.js → estree-WDwviHUZ.js} +1 -1
- package/frontend/dist/js/evaluationsApi-wjf0nh5J.js +1 -0
- package/frontend/dist/js/fr-BkXGyEei.js +2 -0
- package/frontend/dist/js/hi-BS1ldbWk.js +2 -0
- package/frontend/dist/js/{html-BpGUXG8E.js → html-Cj0HNcRt.js} +1 -1
- package/frontend/dist/js/id-Cr1njx5M.js +2 -0
- package/frontend/dist/js/is-BqpNCtDd.js +2 -0
- package/frontend/dist/js/{it-AxEMG8Jg.js → it-Dp-iwH27.js} +1 -1
- package/frontend/dist/js/ja-_e4v_6Mn.js +2 -0
- package/frontend/dist/js/ko-CjXf2pIX.js +2 -0
- package/frontend/dist/js/{logger-DSXjF4ye.js → logger-CpCQz3Vi.js} +1 -1
- package/frontend/dist/js/{markdown-DCBRWJSK.js → markdown-DTahdtRF.js} +1 -1
- package/frontend/dist/js/{messageCodeStyles-BQwf7sSz.js → messageCodeStyles-COJFoq4P.js} +2 -2
- package/frontend/dist/js/{ms-BhEwb4b7.js → ms-xpn-zACj.js} +1 -1
- package/frontend/dist/js/nl-Baf0a2X0.js +2 -0
- package/frontend/dist/js/pl-BEOTrcUv.js +2 -0
- package/frontend/dist/js/pt-B5FUaihM.js +2 -0
- package/frontend/dist/js/rfb-bJaPz33m.js +5 -0
- package/frontend/dist/js/ru-BjzgMmkJ.js +2 -0
- package/frontend/dist/js/{standalone-BFrK0R2A.js → standalone-C04jT26m.js} +1 -1
- package/frontend/dist/js/sv-DDX_gP1z.js +2 -0
- package/frontend/dist/js/teamEventStream-CgUkgjFC.js +8 -0
- package/frontend/dist/js/{th-DVnW2yyh.js → th-BXr3KovE.js} +1 -1
- package/frontend/dist/js/tr-CdqxHEM8.js +2 -0
- package/frontend/dist/js/ttsBatching-BfhNT3c5.js +2 -0
- package/frontend/dist/js/{typescript-DYVyvmm_.js → typescript-FtGI7Y5P.js} +1 -1
- package/frontend/dist/js/ui-DFa2W4QC.js +2 -0
- package/frontend/dist/js/ui-vendor-CRZXLK0Q.js +177 -0
- package/frontend/dist/js/{uk-BNPKIZga.js → uk-CotKDP2Q.js} +1 -1
- package/frontend/dist/js/useChat-BawGm7ua.js +10 -0
- package/frontend/dist/js/useQuery-BboI5V5G.js +1 -0
- package/frontend/dist/js/{useTranslation-5b5UhAc9.js → useTranslation-D7uLySn1.js} +1 -1
- package/frontend/dist/js/{utils-BGrdX9ie.js → utils-sD-qFh8D.js} +1 -1
- package/frontend/dist/js/utils-vendor-DTLgmsuc.js +9 -0
- package/frontend/dist/js/vi-F2NC1HaJ.js +2 -0
- package/frontend/dist/js/webauthnClient-CPSq528Q.js +1 -0
- package/frontend/dist/js/workApi-8mBuh_-J.js +6 -0
- package/frontend/dist/js/workApi-DJtLOslf.js +1 -0
- package/frontend/dist/js/workStatus-CcO9Fg41.js +1 -0
- package/frontend/dist/js/zh-DZ-kpEEA.js +2 -0
- package/package.json +4 -2
- package/frontend/dist/assets/index-DBAf_VaS.js +0 -47
- package/frontend/dist/assets/index-kn_Axjts.css +0 -1
- package/frontend/dist/js/ArtifactSlideOutPanel-BOENbOiv.js +0 -1
- package/frontend/dist/js/AutomationsPage-C58MQ4te.js +0 -1
- package/frontend/dist/js/CalendarPage-BcdAZ292.js +0 -1
- package/frontend/dist/js/ChannelsPage-DPr9Yajs.js +0 -1
- package/frontend/dist/js/ChatPage-DsbB748s.js +0 -14
- package/frontend/dist/js/FirstTimeSetup-Cy-w6xko.js +0 -1
- package/frontend/dist/js/GalleryPage-DDAtxM-x.js +0 -1
- package/frontend/dist/js/HomePage-DLKwmE7n.js +0 -1
- package/frontend/dist/js/LibreClawPage-vKOj-9w9.js +0 -1
- package/frontend/dist/js/ModelSelector-CoCS6MZ9.js +0 -1
- package/frontend/dist/js/NotesPage-BElIpXgA.js +0 -3
- package/frontend/dist/js/OptimizedSyntaxHighlighter-xgyE3dRA.js +0 -1
- package/frontend/dist/js/PersonasPage-P40jVbfU.js +0 -13
- package/frontend/dist/js/PluginUsagePage-CKUEPCJN.js +0 -1
- package/frontend/dist/js/RichMessageContent-Bm2WaEGi.js +0 -3
- package/frontend/dist/js/SettingsModal-DxSGzx9A.js +0 -19
- package/frontend/dist/js/UserManagementPage-B9Vz5cm3.js +0 -1
- package/frontend/dist/js/WorkPage-qoN_e_jK.js +0 -6
- package/frontend/dist/js/api-D7Ff5M2Q.js +0 -14
- package/frontend/dist/js/appStore-DmV5wqDz.js +0 -2
- package/frontend/dist/js/ar-YHHTVP8f.js +0 -2
- package/frontend/dist/js/authStore-BYW8-kP6.js +0 -4
- package/frontend/dist/js/bn-C8VTxBVl.js +0 -2
- package/frontend/dist/js/chatStore-D-NTlArO.js +0 -3
- package/frontend/dist/js/cs-CCngB5fC.js +0 -2
- package/frontend/dist/js/da-CM2PP2ma.js +0 -2
- package/frontend/dist/js/de-BqVkD-dw.js +0 -2
- package/frontend/dist/js/es-BtWsWBjZ.js +0 -2
- package/frontend/dist/js/evaluationsApi-Dnf2dTd-.js +0 -1
- package/frontend/dist/js/fr-C68w9abT.js +0 -2
- package/frontend/dist/js/hi-DtBlcyXZ.js +0 -2
- package/frontend/dist/js/id-BWzIu8tn.js +0 -2
- package/frontend/dist/js/is-yeFwu4dJ.js +0 -2
- package/frontend/dist/js/ja-B-VyokB8.js +0 -2
- package/frontend/dist/js/ko-CvwzYr9k.js +0 -2
- package/frontend/dist/js/nl-Dq-QRx1L.js +0 -2
- package/frontend/dist/js/pl-BNEy8mQm.js +0 -2
- package/frontend/dist/js/pt-_3Jl3FdY.js +0 -2
- package/frontend/dist/js/ru-IhQiJ8ta.js +0 -2
- package/frontend/dist/js/sv-DWunXUNz.js +0 -2
- package/frontend/dist/js/tr-Do8CFmhR.js +0 -2
- package/frontend/dist/js/ui-db9meqAB.js +0 -2
- package/frontend/dist/js/ui-vendor-C0DZ8-Cm.js +0 -177
- package/frontend/dist/js/utils-vendor-9bQ62WeD.js +0 -9
- package/frontend/dist/js/vi-CZMFo9je.js +0 -2
- package/frontend/dist/js/workApi-CcprMH_1.js +0 -6
- package/frontend/dist/js/zh-Pg0881v0.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as e}from"./markdown-core-BK7WVOb7.js";import{t}from"./utils-
|
|
1
|
+
import{g as e}from"./markdown-core-BK7WVOb7.js";import{t}from"./utils-sD-qFh8D.js";var n=e();function r({checked:e,onChange:r,disabled:i=!1}){return(0,n.jsxs)(`label`,{className:`flex items-center cursor-pointer`,children:[(0,n.jsx)(`input`,{type:`checkbox`,checked:e,onChange:e=>r(e.target.checked),disabled:i,className:`sr-only`}),(0,n.jsx)(`div`,{className:t(`relative inline-flex h-6 w-11 items-center rounded-full transition-colors focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2`,i?`bg-gray-100 dark:bg-dark-200 opacity-50 cursor-not-allowed`:e?`bg-primary-600 dark:bg-primary-500`:`bg-gray-200 dark:bg-dark-300`),children:(0,n.jsx)(`span`,{className:t(`inline-block h-4 w-4 transform rounded-full bg-white transition-transform`,e?`translate-x-6 rtl:-translate-x-6`:`translate-x-1 rtl:-translate-x-1`)})})]})}export{r as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{_ as t,g as n}from"./markdown-core-BK7WVOb7.js";import{t as r}from"./useTranslation-D7uLySn1.js";import{At as i,L as a,gr as o,n as s,s as c}from"./ui-vendor-CRZXLK0Q.js";import{t as l}from"./logger-CpCQz3Vi.js";import{D as u}from"./api-F0CnlVH8.js";import{t as d}from"./Button-CpobxJ2P.js";import{n as f,r as p}from"./ui-DFa2W4QC.js";var m=e(t(),1),h=n(),g=l(`share-dialog`),_=({resourceType:e,resourceId:t,resourceLabel:n,onClose:l})=>{let{t:_}=r(),[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){o.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(),o.success(_(`share.added`,{name:n}))):o.error(i.error||_(`share.failed`))}catch(e){g.error(`Failed to share resource:`,e),o.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:l,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)(i,{className:`h-3.5 w-3.5 animate-spin`}):_(`share.action`)})]}),v===null?(0,h.jsx)(i,{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{_ as t,g as n}from"./markdown-core-BK7WVOb7.js";import{t as r}from"./useTranslation-5b5UhAc9.js";import{t as i}from"./utils-BGrdX9ie.js";import{I as a,J as o,On as s,Ot as c,St as l,Vt as u,Xn as d,Yn as f,cr as p,dr as m,h,ut as g,xn as _,z as v}from"./ui-vendor-C0DZ8-Cm.js";import{r as y,t as b}from"./workApi-CcprMH_1.js";import{s as x}from"./api-D7Ff5M2Q.js";import{n as S}from"./authStore-BYW8-kP6.js";import{t as C}from"./Button-C0r3J9G_.js";import{a as w,o as T}from"./ui-db9meqAB.js";import{D as E}from"../assets/index-DBAf_VaS.js";var D=e(t(),1),O={getDrills:()=>y.get(`/recovery/drills`).then(e=>e.data),runDrill:()=>y.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}=r(),{user:t}=S(),[n,i]=(0,D.useState)(null),[a,o]=(0,D.useState)(!1),s=(0,D.useCallback)(async()=>{try{let e=await O.getDrills();e.success&&e.data&&i(e.data)}catch{}},[]);if((0,D.useEffect)(()=>{if(t?.role!==`admin`)return;let e=setTimeout(()=>void s(),0);return()=>clearTimeout(e)},[t?.role,s]),t?.role!==`admin`||!n)return null;let l=n.drills[0],u=n.drills.find(e=>e.status===`passed`),d=async()=>{o(!0);try{let t=await O.runDrill();t.success&&t.data?t.data.status===`passed`?m.success(e(`systemPage.recovery.passed`)):m.error(t.data.error||e(`systemPage.recovery.failed`)):m.error(t.message||e(`systemPage.recovery.failed`))}catch(t){let n=t;m.error(n.response?.data?.message||e(`systemPage.recovery.failed`))}finally{o(!1),await s()}};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)(p,{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)(C,{size:`sm`,onClick:()=>void d(),disabled:a,children:a?(0,k.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,k.jsx)(c,{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:a,children:o})=>(0,k.jsxs)(`section`,{className:i(`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})]})]}),a]}),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:i(`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:i(`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}=r(),{data:t,error:n,isFetching:a,refetch:o}=E({queryKey:[`work-admin-overview`],queryFn:async()=>{let t=await b.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:f,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)(h,{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)(C,{variant:`outline`,size:`sm`,onClick:()=>void o(),disabled:a,children:e(`common.retry`)})]})}):null;let s=t=>e(t===null?`systemPage.work.stateUnknown`:t?`systemPage.work.stateRunning`:`systemPage.work.stateStopped`),c=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:f,action:(0,k.jsxs)(`span`,{className:i(`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:i(`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)(h,{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:i(`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:i(`h-1.5 w-1.5 rounded-full`,e.running===null?`bg-amber-400`:e.running?`bg-emerald-500`:`bg-gray-400`)}),s(e.running)]})}),(0,k.jsx)(`td`,{className:`px-4 py-2.5 text-xs text-gray-600 dark:text-dark-600`,children:c(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}=r(),{data:t,error:n,isLoading:s,isFetching:l,refetch:u}=E({queryKey:[`system-diagnostics`],queryFn:async()=>{let t=await x.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)(T,{width:`wide`,children:(0,k.jsx)(`div`,{className:`flex min-h-[50vh] items-center justify-center`,children:(0,k.jsx)(c,{className:`h-7 w-7 animate-spin text-primary-500`})})}):(0,k.jsxs)(T,{width:`wide`,children:[(0,k.jsx)(w,{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)(C,{variant:`outline`,size:`sm`,onClick:()=>void u(),disabled:l,children:[(0,k.jsx)(o,{className:i(`h-4 w-4`,l&&`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)(h,{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)(a,{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}=r(),n=e.filesystems.find(e=>e.label===`Data directory`)??e.filesystems[0],i=[{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:l},{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:u},{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:i.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}=r(),{host:n,runtime:i}=e;return(0,k.jsx)(B,{title:t(`systemPage.host.title`),description:t(`systemPage.host.description`),icon:v,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:i.appVersion}),(0,k.jsx)(V,{label:t(`systemPage.host.nodeVersion`),value:i.nodeVersion}),(0,k.jsx)(V,{label:t(`systemPage.host.process`),value:`PID ${i.processId} · ${L(i.processUptimeSeconds)}`}),(0,k.jsx)(V,{label:t(`systemPage.host.workingDirectory`),value:i.workingDirectory,mono:!0})]})})},q=({diagnostics:e})=>{let{t}=r(),{memory:n}=e;return(0,k.jsx)(B,{title:t(`systemPage.memory.title`),description:t(`systemPage.memory.description`),icon:l,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}=r();return(0,k.jsx)(B,{title:t(`systemPage.storage.title`),description:t(`systemPage.storage.description`),icon:u,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}=r(),{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:i(`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:i(`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:i(`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)(h,{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}=r();return(0,k.jsx)(B,{title:t(`systemPage.network.title`),description:t(`systemPage.network.description`),icon:g,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)(d,{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{_ as t,g as n}from"./markdown-core-BK7WVOb7.js";import{t as r}from"./useQuery-BboI5V5G.js";import{t as i}from"./useTranslation-D7uLySn1.js";import{t as a}from"./utils-sD-qFh8D.js";import{$n as o,At as s,I as c,J as l,Ut as u,er as d,fr as f,h as p,hr as m,jn as h,ut as g,wn as _,wt as v,z as y}from"./ui-vendor-CRZXLK0Q.js";import{n as b,t as x}from"./workApi-8mBuh_-J.js";import{o as S}from"./api-F0CnlVH8.js";import{t as C}from"./authStore-DlSQ1TcP.js";import{t as w}from"./Button-CpobxJ2P.js";import{a as T,o as E}from"./ui-DFa2W4QC.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,o]=(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`),d=async()=>{o(!0);try{let t=await O.runDrill();t.success&&t.data?t.data.status===`passed`?m.success(e(`systemPage.recovery.passed`)):m.error(t.data.error||e(`systemPage.recovery.failed`)):m.error(t.message||e(`systemPage.recovery.failed`))}catch(t){let n=t;m.error(n.response?.data?.message||e(`systemPage.recovery.failed`))}finally{o(!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)(f,{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 d(),disabled:a,children:a?(0,k.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,k.jsx)(s,{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:s,refetch:c}=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:o,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)(p,{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 c(),disabled:s,children:e(`common.retry`)})]})}):null;let l=t=>e(t===null?`systemPage.work.stateUnknown`:t?`systemPage.work.stateRunning`:`systemPage.work.stateStopped`),u=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:o,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)(p,{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`)}),l(e.running)]})}),(0,k.jsx)(`td`,{className:`px-4 py-2.5 text-xs text-gray-600 dark:text-dark-600`,children:u(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:o,isFetching:u,refetch:d}=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}),f=n?n instanceof Error?n.message:e(`systemPage.loadFailed`):null;return o&&!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)(s,{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 d(),disabled:u,children:[(0,k.jsx)(l,{className:a(`h-4 w-4`,u&&`animate-spin`)}),(0,k.jsx)(`span`,{className:`sr-only`,children:e(`systemPage.refresh`)})]})]})}),f&&(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)(p,{className:`h-4 w-4 shrink-0`}),(0,k.jsx)(`span`,{children:f})]}),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)(c,{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:h},{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:u},{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:y,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:u,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)(p,{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:g,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)(d,{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{_ as t,g as n}from"./markdown-core-BK7WVOb7.js";import{t as r}from"./logger-CpCQz3Vi.js";var i=e(t(),1),a=n(),o=r(`components:turnstile-widget`),s=`https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit`,c=null,l=()=>window.turnstile?Promise.resolve():c||(c=new Promise((e,t)=>{let n=document.querySelector(`script[src="${s}"]`);if(n){n.addEventListener(`load`,()=>e(),{once:!0}),n.addEventListener(`error`,t,{once:!0});return}let r=document.createElement(`script`);r.src=s,r.async=!0,r.defer=!0,r.onload=()=>e(),r.onerror=t,document.head.appendChild(r)}),c),u=({siteKey:e,action:t,disabled:n=!1,errorMessage:r,onTokenChange:s})=>{let c=(0,i.useRef)(null),u=(0,i.useRef)(null),[d,f]=(0,i.useState)(!1);return(0,i.useEffect)(()=>{let n=!1,r=c.current;return s(``),l().then(()=>{n||!r||!window.turnstile||(r.innerHTML=``,u.current=window.turnstile.render(r,{sitekey:e,theme:`auto`,size:`flexible`,action:t,callback:e=>s(e),"expired-callback":()=>s(``),"error-callback":()=>s(``)}))}).catch(e=>{o.error(`Turnstile script failed to load:`,e),n||f(!0)}),()=>{n=!0,s(``),u.current&&window.turnstile?.remove?window.turnstile.remove(u.current):r&&(r.innerHTML=``),u.current=null}},[t,s,e]),(0,i.useEffect)(()=>{n&&u.current&&(window.turnstile?.reset(u.current),s(``))},[n,s]),d?(0,a.jsx)(`div`,{className:`rounded-lg border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-700 dark:border-red-900/50 dark:bg-red-950/30 dark:text-red-300`,children:r}):(0,a.jsx)(`div`,{className:`rounded-lg border border-accent-200 bg-accent-50/40 p-3 transition-opacity dark:border-accent-800/70 dark:bg-accent-950/20 ${n?`pointer-events-none opacity-60`:``}`,"aria-label":`Security verification`,children:(0,a.jsx)(`div`,{ref:c,className:`min-h-[65px]`})})};export{u as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{_ as t,g as n}from"./markdown-core-BK7WVOb7.js";import{i as r,t as i}from"./useQuery-BboI5V5G.js";import{t as a}from"./useTranslation-D7uLySn1.js";import{F as o,J as s,N as c,O as l,U as u,Un as d,Vn as f,X as p,_ as m,c as h,d as g,gt as _,hr as v,jn as y,s as b,tt as x,u as S}from"./ui-vendor-CRZXLK0Q.js";import{a as C,t as w}from"./logger-CpCQz3Vi.js";import{n as T,r as E,t as D}from"./workApi-8mBuh_-J.js";import{I as O,M as k,P as A,S as j,_ as M,u as N,y as P}from"./api-F0CnlVH8.js";import{t as F}from"./authStore-DlSQ1TcP.js";import{t as I}from"./Button-CpobxJ2P.js";import{a as L,c as R,d as z,f as B,g as V,l as H,o as U,p as W,u as G,v as K}from"./ui-DFa2W4QC.js";import{t as q}from"./PasswordStrengthMeter-RwModpZ1.js";import{t as J}from"./SettingsToggle-3GxA96E0.js";var Y=e(t(),1),X=n(),Z=w(`components:user-manager`),ee=()=>{let{t:e}=a(),t=r(),[n,s]=(0,Y.useState)(!1),[u,d]=(0,Y.useState)(null),[f,_]=(0,Y.useState)({username:``,email:``,password:``,role:`user`}),{user:b}=F(),{data:x=[],isLoading:S}=i({queryKey:[`users`],queryFn:async()=>{let t=await O.getUsers();if(!t.success||!t.data)throw Error(e(`errors.generic`));return t.data}}),C=()=>t.invalidateQueries({queryKey:[`users`]}),w=x.filter(e=>e.status===`pending`),T=x.filter(e=>e.status!==`pending`),E=async t=>{t.preventDefault();try{let t=await O.createUser(f);t.success&&t.data&&(await C(),_({username:``,email:``,password:``,role:`user`}),s(!1),v.success(e(`userManager.form.createSuccess`)))}catch(t){Z.error(`Error creating user:`,t);let n=e(`userManager.form.createFailed`);t instanceof Error&&`response`in t&&(n=t.response?.data?.message||e(`userManager.form.createFailed`)),v.error(n)}},D=async t=>{if(t.preventDefault(),u)try{let t={username:f.username,email:f.email,role:f.role};f.password&&f.password.trim()!==``&&(t.password=f.password);let n=await O.updateUser(u.id,t);n.success&&n.data&&(await C(),d(null),_({username:``,email:``,password:``,role:`user`}),v.success(e(`userManager.form.updateSuccess`)))}catch(t){Z.error(`Error updating user:`,t);let n=e(`userManager.form.updateFailed`);t instanceof Error&&`response`in t&&(n=t.response?.data?.message||e(`userManager.form.updateFailed`)),v.error(n)}},k=async(t,n)=>{if(confirm(e(`userManager.deleteConfirm`,{name:n})))try{(await O.deleteUser(t)).success&&(await C(),v.success(e(`userManager.deleteSuccess`)))}catch(t){Z.error(`Error deleting user:`,t);let n=e(`userManager.deleteFailed`);t instanceof Error&&`response`in t&&(n=t.response?.data?.message||e(`userManager.deleteFailed`)),v.error(n)}},A=async(t,n)=>{if(confirm(e(`userManager.mfaResetConfirm`,{name:n})))try{let r=await O.resetUserMfa(t);r.success&&r.data?.removed?v.success(e(`userManager.mfaResetSuccess`,{name:n})):r.success?v.success(e(`userManager.mfaResetNothing`,{name:n})):v.error(r.message||e(`userManager.mfaResetFailed`))}catch(t){Z.error(`Error resetting MFA:`,t);let n=t;v.error(n.response?.data?.message||e(`userManager.mfaResetFailed`))}},j=async t=>{try{let n=await O.approveUser(t.id);n.success&&n.data&&(await C(),v.success(e(`userManager.approval.approved`,{name:t.username,defaultValue:`{{name}} can now sign in.`})))}catch(t){Z.error(`Error approving user:`,t);let n=t;v.error(n.response?.data?.message||e(`userManager.approval.failed`,`The account could not be approved.`))}},M=e=>{d(e),_({username:e.username,email:e.email||``,password:``,role:e.role})};return S?(0,X.jsx)(`div`,{className:`flex items-center justify-center p-8`,children:(0,X.jsx)(`div`,{className:`w-8 h-8 border-4 border-gray-200 dark:border-gray-600 border-t-primary-500 rounded-full animate-spin`})}):(0,X.jsxs)(`div`,{className:`space-y-4`,children:[(0,X.jsxs)(`div`,{className:`flex justify-between items-center`,children:[(0,X.jsx)(`div`,{}),(0,X.jsxs)(I,{onClick:()=>s(!n),className:`flex items-center space-x-2 bg-primary-600 hover:bg-primary-700 dark:bg-primary-500 dark:hover:bg-primary-600`,children:[(0,X.jsx)(p,{size:16}),(0,X.jsx)(`span`,{children:e(`userManager.createUser`)})]})]}),n&&(0,X.jsxs)(R,{className:`bg-white dark:bg-dark-25 border border-gray-200 dark:border-dark-200 shadow-lg`,children:[(0,X.jsxs)(z,{children:[(0,X.jsx)(B,{className:`text-gray-900 dark:text-gray-100`,children:e(`userManager.form.title.create`)}),(0,X.jsx)(G,{className:`text-gray-600 dark:text-gray-400`,children:e(`userManager.subtitle`)})]}),(0,X.jsx)(H,{children:(0,X.jsxs)(`form`,{onSubmit:E,className:`space-y-4`,children:[(0,X.jsxs)(`div`,{className:`grid grid-cols-2 gap-4`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(W,{htmlFor:`username`,className:`text-gray-700 dark:text-gray-300`,children:e(`userManager.form.username`)}),(0,X.jsx)(K,{id:`username`,value:f.username,onChange:e=>_({...f,username:e.target.value}),required:!0,className:`bg-white dark:bg-dark-100 border-gray-300 dark:border-dark-300 text-gray-900 dark:text-gray-100`})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(W,{htmlFor:`email`,className:`text-gray-700 dark:text-gray-300`,children:e(`userManager.form.email`)}),(0,X.jsx)(K,{id:`email`,type:`email`,value:f.email,onChange:e=>_({...f,email:e.target.value}),required:!0,className:`bg-white dark:bg-dark-100 border-gray-300 dark:border-dark-300 text-gray-900 dark:text-gray-100`})]})]}),(0,X.jsxs)(`div`,{className:`grid grid-cols-2 gap-4`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(W,{htmlFor:`password`,className:`text-gray-700 dark:text-gray-300`,children:e(`userManager.form.password`)}),(0,X.jsx)(K,{id:`password`,type:`password`,value:f.password,onChange:e=>_({...f,password:e.target.value}),required:!0,className:`bg-white dark:bg-dark-100 border-gray-300 dark:border-dark-300 text-gray-900 dark:text-gray-100`}),(0,X.jsx)(q,{password:f.password})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(W,{htmlFor:`role`,className:`text-gray-700 dark:text-gray-300`,children:e(`userManager.form.role`)}),(0,X.jsxs)(`select`,{id:`role`,value:f.role,onChange:e=>_({...f,role:e.target.value}),className:`w-full px-3 py-2 border border-gray-300 dark:border-dark-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 bg-white dark:bg-dark-100 text-gray-900 dark:text-gray-100 transition-colors duration-200`,children:[(0,X.jsx)(`option`,{value:`user`,children:e(`userManager.roles.user`)}),(0,X.jsx)(`option`,{value:`admin`,children:e(`userManager.roles.admin`)})]})]})]}),(0,X.jsxs)(`div`,{className:`flex space-x-2`,children:[(0,X.jsx)(I,{type:`submit`,children:e(`userManager.form.createButton`)}),(0,X.jsx)(I,{type:`button`,variant:`outline`,onClick:()=>{_({username:``,email:``,password:``,role:`user`}),s(!1)},children:e(`common.cancel`)})]})]})})]}),u&&(0,X.jsxs)(R,{className:`bg-white dark:bg-dark-25 border border-gray-200 dark:border-dark-200 shadow-lg`,children:[(0,X.jsxs)(z,{children:[(0,X.jsxs)(B,{className:`text-gray-900 dark:text-gray-100`,children:[e(`userManager.form.title.edit`),`: `,u.username]}),(0,X.jsx)(G,{className:`text-gray-600 dark:text-gray-400`,children:e(`userManager.subtitle`)})]}),(0,X.jsx)(H,{children:(0,X.jsxs)(`form`,{onSubmit:D,className:`space-y-4`,children:[(0,X.jsxs)(`div`,{className:`grid grid-cols-2 gap-4`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(W,{htmlFor:`edit-username`,className:`text-gray-700 dark:text-gray-300`,children:e(`userManager.form.username`)}),(0,X.jsx)(K,{id:`edit-username`,value:f.username,onChange:e=>_({...f,username:e.target.value}),required:!0,className:`bg-white dark:bg-dark-100 border-gray-300 dark:border-dark-300 text-gray-900 dark:text-gray-100`})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(W,{htmlFor:`edit-email`,className:`text-gray-700 dark:text-gray-300`,children:e(`userManager.form.email`)}),(0,X.jsx)(K,{id:`edit-email`,type:`email`,value:f.email,onChange:e=>_({...f,email:e.target.value}),required:!0,className:`bg-white dark:bg-dark-100 border-gray-300 dark:border-dark-300 text-gray-900 dark:text-gray-100`})]})]}),(0,X.jsxs)(`div`,{className:`grid grid-cols-2 gap-4`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsxs)(W,{htmlFor:`edit-password`,className:`text-gray-700 dark:text-gray-300`,children:[e(`userManager.form.password`),` (`,e(`common.optional`),`)`]}),(0,X.jsx)(K,{id:`edit-password`,type:`password`,value:f.password,onChange:e=>_({...f,password:e.target.value}),placeholder:e(`userManager.form.passwordHint`),className:`bg-white dark:bg-dark-100 border-gray-300 dark:border-dark-300 text-gray-900 dark:text-gray-100`}),(0,X.jsx)(q,{password:f.password})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(W,{htmlFor:`edit-role`,className:`text-gray-700 dark:text-gray-300`,children:e(`userManager.form.role`)}),(0,X.jsxs)(`select`,{id:`edit-role`,value:f.role,onChange:e=>_({...f,role:e.target.value}),disabled:u?.id===b?.id&&b?.role===`admin`,className:`w-full px-3 py-2 border border-gray-300 dark:border-dark-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 bg-white dark:bg-dark-100 text-gray-900 dark:text-gray-100 transition-colors duration-200 disabled:opacity-50 disabled:cursor-not-allowed`,children:[(0,X.jsx)(`option`,{value:`user`,children:e(`userManager.roles.user`)}),(0,X.jsx)(`option`,{value:`admin`,children:e(`userManager.roles.admin`)})]}),u?.id===b?.id&&b?.role===`admin`&&(0,X.jsx)(`p`,{className:`mt-1 text-xs text-ink-muted`,children:e(`userManager.cannotDeleteSelf`)})]})]}),(0,X.jsxs)(`div`,{className:`flex space-x-2`,children:[(0,X.jsx)(I,{type:`submit`,children:e(`userManager.form.updateButton`)}),(0,X.jsx)(I,{type:`button`,variant:`outline`,onClick:()=>{d(null),_({username:``,email:``,password:``,role:`user`})},children:e(`common.cancel`)})]})]})})]}),w.length>0&&(0,X.jsxs)(R,{"data-testid":`pending-user-approvals`,className:`border border-warning-500/30 bg-warning-500/[0.06] shadow-lg`,children:[(0,X.jsxs)(z,{children:[(0,X.jsxs)(B,{className:`flex items-center gap-2 text-gray-900 dark:text-gray-100`,children:[(0,X.jsx)(y,{className:`h-5 w-5 text-warning-700 dark:text-warning-400`}),e(`userManager.approval.title`,`Pending approvals`),` (`,w.length,`)`]}),(0,X.jsx)(G,{className:`text-gray-600 dark:text-gray-400`,children:e(`userManager.approval.description`,`Review new registrations before allowing them into this instance.`)})]}),(0,X.jsx)(H,{children:(0,X.jsx)(`div`,{className:`space-y-3`,children:w.map(t=>(0,X.jsxs)(`div`,{"data-testid":`pending-user-row`,className:`flex flex-col gap-4 rounded-xl border border-warning-500/25 bg-surface p-4 sm:flex-row sm:items-center sm:justify-between`,children:[(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`h3`,{className:`truncate font-medium text-ink`,children:t.username}),(0,X.jsx)(`p`,{className:`truncate text-sm text-ink-muted`,children:t.email||e(`userManager.noEmail`)}),(0,X.jsxs)(`p`,{className:`mt-1 text-xs text-ink-subtle`,children:[e(`userManager.approval.registered`,`Registered`),`:`,` `,new Date(t.createdAt).toLocaleString()]})]}),(0,X.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[(0,X.jsxs)(I,{type:`button`,size:`sm`,"data-testid":`approve-user-button`,onClick:()=>void j(t),className:`gap-2`,children:[(0,X.jsx)(g,{size:16}),e(`userManager.approval.activate`,`Activate account`)]}),(0,X.jsx)(I,{type:`button`,variant:`outline`,size:`sm`,"aria-label":e(`userManager.approval.reject`,`Reject registration`),onClick:()=>void k(t.id,t.username),className:`text-red-600 hover:bg-red-50 hover:text-red-700 dark:text-red-400 dark:hover:bg-red-900/20 dark:hover:text-red-300`,children:(0,X.jsx)(m,{size:16})})]})]},t.id))})})]}),(0,X.jsxs)(R,{className:`bg-white dark:bg-dark-25 border border-gray-200 dark:border-dark-200 shadow-lg`,children:[(0,X.jsxs)(z,{children:[(0,X.jsxs)(B,{className:`text-gray-900 dark:text-gray-100`,children:[e(`userManager.title`),` (`,T.length,`)`]}),(0,X.jsx)(G,{className:`text-gray-600 dark:text-gray-400`,children:e(`userManager.subtitle`)})]}),(0,X.jsx)(H,{children:(0,X.jsx)(`div`,{className:`space-y-3`,children:T.map(t=>(0,X.jsxs)(`div`,{className:`flex items-center justify-between p-4 bg-gray-50 dark:bg-dark-100 rounded-lg border border-gray-200 dark:border-dark-300`,children:[(0,X.jsxs)(`div`,{className:`flex items-center space-x-3`,children:[(0,X.jsx)(`div`,{className:`p-2 bg-primary-100 dark:bg-primary-900/20 rounded-lg`,children:t.role===`admin`?(0,X.jsx)(c,{className:`h-5 w-5 text-primary-600 dark:text-primary-400`}):(0,X.jsx)(h,{className:`h-5 w-5 text-primary-600 dark:text-primary-400`})}),(0,X.jsxs)(`div`,{children:[(0,X.jsxs)(`h3`,{className:`font-medium text-gray-900 dark:text-gray-100`,children:[t.username,t.id===b?.id&&(0,X.jsxs)(`span`,{className:`ml-2 text-xs text-primary-600 dark:text-primary-400 font-normal`,children:[`(`,e(`chatMessage.you`),`)`]})]}),(0,X.jsxs)(`p`,{className:`text-sm text-gray-600 dark:text-gray-400`,children:[t.email||e(`userManager.noEmail`),` •`,` `,t.role===`admin`?e(`userManager.roles.admin`):e(`userManager.roles.user`)]}),(0,X.jsxs)(`p`,{className:`text-xs text-gray-500 dark:text-gray-500`,children:[e(`userManager.columns.created`),`:`,` `,new Date(t.createdAt).toLocaleDateString()]})]})]}),(0,X.jsxs)(`div`,{className:`flex space-x-2`,children:[(0,X.jsx)(I,{variant:`outline`,size:`sm`,onClick:()=>M(t),className:`text-gray-600 dark:text-gray-400 hover:text-primary-600 dark:hover:text-primary-400`,children:(0,X.jsx)(l,{size:16})}),(0,X.jsx)(I,{variant:`outline`,size:`sm`,"data-testid":`reset-mfa-button`,"aria-label":e(`userManager.mfaReset`),title:e(`userManager.mfaReset`),onClick:()=>A(t.id,t.username),className:`text-gray-600 dark:text-gray-400 hover:text-primary-600 dark:hover:text-primary-400`,children:(0,X.jsx)(o,{size:16})}),(0,X.jsx)(I,{variant:`outline`,size:`sm`,onClick:()=>k(t.id,t.username),disabled:t.id===b?.id,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,X.jsx)(m,{size:16})})]})]},t.id))})})]})]})},te=()=>{let{t:e}=a(),t=F(e=>e.systemInfo),n=F(e=>e.setSystemInfo),[r,i]=(0,Y.useState)(null),[o,s]=(0,Y.useState)(!1),[c,l]=(0,Y.useState)(!1),[u,d]=(0,Y.useState)(!1),[f,p]=(0,Y.useState)(0);return(0,Y.useEffect)(()=>{let e=!1;return P.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,X.jsx)(`div`,{className:`rounded-lg border border-gray-200 dark:border-dark-300 bg-white dark:bg-dark-100 p-4`,children:(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`h4`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:e(`userManager.agentAccess.title`)}),(0,X.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400 mt-1`,children:e(`userManager.agentAccess.description`)}),o&&(0,X.jsx)(`p`,{className:`text-xs text-amber-600 dark:text-amber-400 mt-1`,children:e(`userManager.agentAccess.lockedByEnv`)})]}),r===null&&u?(0,X.jsx)(I,{size:`sm`,variant:`outline`,onClick:()=>{d(!1),p(e=>e+1)},children:e(`common.retry`)}):(0,X.jsx)(J,{checked:r===!0,onChange:async r=>{l(!0);try{let a=await P.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}),v.success(e(`userManager.agentAccess.saved`))}catch{v.error(e(`userManager.agentAccess.saveFailed`))}finally{l(!1)}},disabled:c||r===null||o})]})})},ne=()=>{let{t:e}=a(),[t,n]=(0,Y.useState)(null),[r,i]=(0,Y.useState)(!1),[o,s]=(0,Y.useState)(!1),[c,l]=(0,Y.useState)(!1),[u,d]=(0,Y.useState)(0);return(0,Y.useEffect)(()=>{let e=!1;return N.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,X.jsx)(`div`,{className:`rounded-lg border border-gray-200 dark:border-dark-300 bg-white dark:bg-dark-100 p-4`,children:(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`h4`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:e(`userManager.tools.title`)}),(0,X.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400 mt-1`,children:e(`userManager.tools.description`)}),r&&(0,X.jsx)(`p`,{className:`text-xs text-amber-600 dark:text-amber-400 mt-1`,children:e(`userManager.tools.lockedByEnv`)})]}),t===null&&c?(0,X.jsx)(I,{size:`sm`,variant:`outline`,onClick:()=>{l(!1),d(e=>e+1)},children:e(`common.retry`)}):(0,X.jsx)(J,{checked:t===`all-users`,onChange:async t=>{let r=t?`all-users`:`admins`;s(!0);try{let t=await N.setAccessMode(r);if(!t.success)throw Error(t.error||`Tool access update failed.`);n(r),v.success(e(`userManager.tools.saved`))}catch{v.error(e(`userManager.tools.saveFailed`))}finally{s(!1)}},disabled:o||t===null||r})]})})},re={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}},Q={getModes:async()=>C()?E(re):(await T.get(`/voice-access`)).data,setMode:async(e,t)=>C()?E({feature:e,mode:t}):(await T.put(`/voice-access/${encodeURIComponent(e)}`,{mode:t})).data},ie=[{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`}],ae=()=>{let{t:e}=a(),[t,n]=(0,Y.useState)(null),[r,i]=(0,Y.useState)(null),[o,s]=(0,Y.useState)(!1),[c,l]=(0,Y.useState)(0);(0,Y.useEffect)(()=>{let e=!1;return Q.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 Q.setMode(t,a);if(!r.success)throw Error(r.error||`Voice access update failed.`);n(e=>e&&{...e,[t]:{...e[t],mode:a}}),v.success(e(`userManager.voice.saved`))}catch{v.error(e(`userManager.voice.saveFailed`))}finally{i(null)}};return(0,X.jsxs)(`div`,{className:`rounded-lg border border-gray-200 dark:border-dark-300 bg-white dark:bg-dark-100 p-4`,children:[(0,X.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`h4`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:e(`userManager.voice.title`)}),(0,X.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400 mt-1`,children:e(`userManager.voice.description`)})]}),t===null&&o&&(0,X.jsx)(I,{size:`sm`,variant:`outline`,onClick:()=>{s(!1),l(e=>e+1)},children:e(`common.retry`)})]}),(0,X.jsx)(`div`,{className:`mt-3 space-y-2`,children:ie.map(n=>{let i=t?.[n.key];return(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`p`,{className:`text-xs text-gray-700 dark:text-gray-300`,children:e(n.labelKey)}),i?.lockedByEnv&&(0,X.jsx)(`p`,{className:`text-xs text-amber-600 dark:text-amber-400`,children:e(`userManager.voice.lockedByEnv`)})]}),(0,X.jsx)(J,{checked:i?.mode===`all-users`,onChange:e=>u(n.key,e),disabled:i===void 0||r===n.key||i.lockedByEnv})]},n.key)})})]})},oe=()=>{let{t:e}=a(),[t,n]=(0,Y.useState)(null),[r,i]=(0,Y.useState)(!1),[o,s]=(0,Y.useState)(!1),[c,l]=(0,Y.useState)(0);return(0,Y.useEffect)(()=>{let e=!1;return A.getMfaPolicy().then(t=>{e||(t.success&&t.data?n(t.data):s(!0))}).catch(()=>{e||s(!0)}),()=>{e=!0}},[c]),(0,X.jsxs)(`div`,{className:`rounded-lg border border-gray-200 dark:border-dark-300 bg-white dark:bg-dark-100 p-4`,children:[(0,X.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`h4`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:e(`userManager.mfaPolicy.title`)}),(0,X.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400 mt-1`,children:e(`userManager.mfaPolicy.description`)})]}),t===null&&o&&(0,X.jsx)(I,{size:`sm`,variant:`outline`,onClick:()=>{s(!1),l(e=>e+1)},children:e(`common.retry`)})]}),(0,X.jsxs)(`div`,{className:`mt-3 flex items-center justify-between gap-4`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`p`,{className:`text-sm text-gray-900 dark:text-gray-100`,children:e(`userManager.mfaPolicy.requireAll`)}),(0,X.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400`,children:t?.locked?e(`userManager.mfaPolicy.lockedByEnv`):e(`userManager.mfaPolicy.requireAllHint`)})]}),(0,X.jsx)(J,{checked:t?.mode===`required`,disabled:t===null||t.locked||r,onChange:async t=>{let r=t?`required`:`optional`;i(!0);try{let t=await A.setMfaPolicy(r);if(!t.success||!t.data)throw Error(t.error||`MFA policy update failed.`);n(t.data),v.success(e(`userManager.mfaPolicy.saved`))}catch{v.error(e(`userManager.mfaPolicy.saveFailed`))}finally{i(!1)}}})]})]})},se=()=>{let{t:e}=a(),[t,n]=(0,Y.useState)([]),[r,i]=(0,Y.useState)([]),[o,s]=(0,Y.useState)(!1),[c,l]=(0,Y.useState)(!0),[u,h]=(0,Y.useState)(!1),[g,_]=(0,Y.useState)(``),[y,x]=(0,Y.useState)(``),[C,w]=(0,Y.useState)(!1),[T,E]=(0,Y.useState)(null),[D,A]=(0,Y.useState)(``),[j,M]=(0,Y.useState)(null),[N,P]=(0,Y.useState)(``),[F,L]=(0,Y.useState)(null),[R,z]=(0,Y.useState)(!1),B=(0,Y.useMemo)(()=>{let e=new Map;return r.forEach(t=>e.set(t.id,t.username)),e},[r]),H=(0,Y.useCallback)(async()=>{l(!0),s(!1);try{let[e,t]=await Promise.all([k.getGroups(),O.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,Y.useEffect)(()=>{let e=setTimeout(()=>void H(),0);return()=>clearTimeout(e)},[H]);let U=async t=>{if(t.preventDefault(),!g.trim()){v.error(e(`userManager.groups.nameRequired`,`Give the group a name.`));return}w(!0);try{let t=await k.createGroup({name:g.trim(),description:y.trim()||void 0});if(!t.success)throw Error(t.error||`Group creation failed.`);_(``),x(``),h(!1),v.success(e(`userManager.groups.created`,`Group created.`)),await H()}catch(t){v.error(t instanceof Error&&t.message?t.message:e(`userManager.groups.createFailed`,`The group could not be created.`))}finally{w(!1)}},W=async t=>{M(t.id);try{let n=await k.deleteGroup(t.id);if(!n.success)throw Error(n.error||`Group delete failed.`);v.success(e(`userManager.groups.deleted`,`Group deleted.`)),T===t.id&&E(null),await H()}catch(t){v.error(t instanceof Error&&t.message?t.message:e(`userManager.groups.deleteFailed`,`The group could not be deleted.`))}finally{M(null)}},G=async t=>{if(D){M(t.id);try{let n=await k.addGroupMember(t.id,D);if(!n.success)throw Error(n.error||`Member add failed.`);A(``),v.success(e(`userManager.groups.memberAdded`,`Member added.`)),await H()}catch(t){v.error(t instanceof Error&&t.message?t.message:e(`userManager.groups.memberAddFailed`,`The member could not be added.`))}finally{M(null)}}},q=async(t,n)=>{M(t.id);try{let r=await k.removeGroupMember(t.id,n);if(!r.success)throw Error(r.error||`Member remove failed.`);v.success(e(`userManager.groups.memberRemoved`,`Member removed.`)),await H()}catch(t){v.error(t instanceof Error&&t.message?t.message:e(`userManager.groups.memberRemoveFailed`,`The member could not be removed.`))}finally{M(null)}},J=async t=>{if(P(t),L(null),t){z(!0);try{let e=await k.getEffectiveAccess(t);if(!e.success||!e.data)throw Error(e.error||`Access lookup failed.`);L(e.data)}catch(t){v.error(t instanceof Error&&t.message?t.message:e(`userManager.groups.accessLookupFailed`,`The effective access could not be loaded.`))}finally{z(!1)}}},Z=e=>e.map(e=>({value:e.id,label:e.username}));return(0,X.jsxs)(`div`,{className:`rounded-lg border border-gray-200 dark:border-dark-300 bg-white dark:bg-dark-100 p-4`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsxs)(`h4`,{className:`flex items-center gap-2 text-sm font-medium text-gray-900 dark:text-gray-100`,children:[(0,X.jsx)(b,{className:`h-4 w-4 text-primary-500`}),e(`userManager.groups.title`,`Groups`)]}),(0,X.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.`)})]}),o?(0,X.jsx)(I,{size:`sm`,variant:`outline`,onClick:()=>void H(),children:e(`common.retry`)}):(0,X.jsxs)(I,{size:`sm`,variant:`outline`,onClick:()=>h(e=>!e),className:`gap-1.5`,children:[(0,X.jsx)(p,{size:14}),e(`userManager.groups.newGroup`,`New group`)]})]}),u&&(0,X.jsxs)(`form`,{onSubmit:U,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,X.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,X.jsxs)(`label`,{className:`block`,children:[(0,X.jsx)(`span`,{className:`mb-1 block text-sm font-medium text-gray-900 dark:text-gray-100`,children:e(`userManager.groups.nameLabel`,`Name`)}),(0,X.jsx)(K,{value:g,onChange:e=>_(e.target.value)})]}),(0,X.jsxs)(`label`,{className:`block`,children:[(0,X.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,X.jsx)(K,{value:y,onChange:e=>x(e.target.value)})]})]}),(0,X.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,X.jsx)(I,{type:`button`,size:`sm`,variant:`outline`,onClick:()=>h(!1),children:e(`common.cancel`)}),(0,X.jsx)(I,{type:`submit`,size:`sm`,disabled:C,children:C?e(`userManager.groups.creating`,`Creating…`):e(`userManager.groups.create`,`Create group`)})]})]}),(0,X.jsx)(`div`,{className:`mt-4 space-y-3`,children:c?(0,X.jsx)(`p`,{className:`text-sm text-gray-500 dark:text-gray-400`,children:e(`common.loading`)}):o?(0,X.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,X.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=T===t.id,i=new Set(t.members.map(e=>e.user_id)),a=r.filter(e=>!i.has(e.id));return(0,X.jsxs)(`div`,{className:`rounded-lg border border-gray-200 dark:border-dark-300 bg-gray-50 dark:bg-dark-100`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-3 p-4`,children:[(0,X.jsxs)(`button`,{type:`button`,className:`flex min-w-0 flex-1 items-center gap-2 text-start`,onClick:()=>{E(n?null:t.id),A(``)},"aria-expanded":n,children:[n?(0,X.jsx)(d,{className:`h-4 w-4 shrink-0 text-gray-500 dark:text-gray-400`}):(0,X.jsx)(f,{className:`h-4 w-4 shrink-0 text-gray-500 dark:text-gray-400`}),(0,X.jsxs)(`span`,{className:`min-w-0`,children:[(0,X.jsxs)(`span`,{className:`block truncate text-sm font-medium text-gray-900 dark:text-gray-100`,children:[t.name,(0,X.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,X.jsx)(`span`,{className:`block truncate text-xs text-gray-500 dark:text-gray-400`,children:t.description})]})]}),(0,X.jsx)(I,{size:`sm`,variant:`outline`,onClick:()=>void W(t),disabled:j===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,X.jsx)(m,{size:16})})]}),n&&(0,X.jsxs)(`div`,{className:`border-t border-gray-200 dark:border-dark-300 p-4 space-y-3`,children:[t.members.length===0?(0,X.jsx)(`p`,{className:`text-sm text-gray-500 dark:text-gray-400`,children:e(`userManager.groups.noMembers`,`No members yet.`)}):(0,X.jsx)(`div`,{className:`space-y-2`,children:t.members.map(n=>(0,X.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,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`p`,{className:`truncate text-sm text-gray-900 dark:text-gray-100`,children:B.get(n.user_id)||n.user_id}),(0,X.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,X.jsx)(I,{size:`sm`,variant:`outline`,onClick:()=>void q(t,n.user_id),disabled:j===t.id,"aria-label":e(`userManager.groups.removeMember`,`Remove member`),children:(0,X.jsx)(S,{size:16})})]},n.user_id))}),a.length>0&&(0,X.jsxs)(`div`,{className:`flex items-end gap-2`,children:[(0,X.jsx)(`div`,{className:`flex-1`,children:(0,X.jsx)(V,{label:e(`userManager.groups.addMember`,`Add member`),value:D,onChange:e=>A(e.target.value),options:[{value:``,label:e(`userManager.groups.selectUser`,`Select a user…`)},...Z(a)]})}),(0,X.jsx)(I,{size:`sm`,onClick:()=>void G(t),disabled:!D||j===t.id,className:`mb-0.5`,children:e(`userManager.groups.add`,`Add`)})]})]})]},t.id)})}),(0,X.jsxs)(`div`,{className:`mt-6 border-t border-gray-200 dark:border-dark-300 pt-4 space-y-3`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`h4`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:e(`userManager.groups.effectiveTitle`,`Effective access`)}),(0,X.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,X.jsx)(V,{value:N,onChange:e=>void J(e.target.value),options:[{value:``,label:e(`userManager.groups.selectUser`,`Select a user…`)},...Z(r)]}),R&&(0,X.jsx)(`p`,{className:`text-sm text-gray-500 dark:text-gray-400`,children:e(`common.loading`)}),F&&!R&&(0,X.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,X.jsxs)(`p`,{className:`text-sm text-gray-900 dark:text-gray-100`,children:[(0,X.jsx)(`span`,{className:`font-medium`,children:F.username}),(0,X.jsxs)(`span`,{className:`text-gray-500 dark:text-gray-400`,children:[` · `,e(`userManager.groups.roleLabel`,`Role`),`: `,F.role,` · `,e(`userManager.groups.statusLabel`,`Status`),`: `,F.status]})]}),(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`p`,{className:`mb-1 text-xs font-medium text-gray-500 dark:text-gray-400`,children:e(`userManager.groups.memberOf`,`Groups`)}),F.groups.length===0?(0,X.jsx)(`p`,{className:`text-sm text-gray-500 dark:text-gray-400`,children:e(`common.none`)}):(0,X.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:F.groups.map(e=>(0,X.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,X.jsxs)(`div`,{children:[(0,X.jsx)(`p`,{className:`mb-1 text-xs font-medium text-gray-500 dark:text-gray-400`,children:e(`userManager.groups.featuresLabel`,`Feature access`)}),(0,X.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:Object.entries(F.features).map(([t,n])=>(0,X.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,X.jsxs)(`div`,{children:[(0,X.jsx)(`p`,{className:`mb-1 text-xs font-medium text-gray-500 dark:text-gray-400`,children:e(`userManager.groups.grantsLabel`,`Grants`)}),F.grants.length===0?(0,X.jsx)(`p`,{className:`text-sm text-gray-500 dark:text-gray-400`,children:e(`common.none`)}):(0,X.jsx)(`div`,{className:`space-y-1`,children:F.grants.map(t=>(0,X.jsxs)(`p`,{className:`text-xs text-gray-700 dark:text-gray-300`,children:[t.resourceType,`/`,t.resourceId,` ·`,` `,t.permission,` `,(0,X.jsxs)(`span`,{className:`text-gray-500 dark:text-gray-400`,children:[`(`,e(`userManager.groups.grantVia`,`via`),` `,t.via,`)`]})]},t.id))})]})]})]})]})},ce={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`},le=()=>{let{t:e}=a(),[t,n]=(0,Y.useState)([]),[r,i]=(0,Y.useState)(!0),[o,c]=(0,Y.useState)(!1),[l,p]=(0,Y.useState)(null),[m,h]=(0,Y.useState)(``),[g,_]=(0,Y.useState)(``),[v,y]=(0,Y.useState)(`50`),b=(0,Y.useCallback)(async()=>{i(!0),c(!1);try{let e=Number(v),t=await k.getAuditEvents({action:m.trim()||void 0,result:g||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{c(!0)}finally{i(!1)}},[m,g,v]);(0,Y.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,X.jsxs)(`div`,{className:`rounded-lg border border-gray-200 dark:border-dark-300 bg-white dark:bg-dark-100 p-4`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsxs)(`h4`,{className:`flex items-center gap-2 text-sm font-medium text-gray-900 dark:text-gray-100`,children:[(0,X.jsx)(u,{className:`h-4 w-4 text-primary-500`}),e(`userManager.audit.title`,`Security audit log`)]}),(0,X.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,X.jsxs)(I,{size:`sm`,variant:`outline`,onClick:()=>void b(),disabled:r,className:`gap-1.5`,children:[(0,X.jsx)(s,{size:14,className:r?`animate-spin`:void 0}),e(`common.refresh`)]})]}),(0,X.jsxs)(`div`,{className:`mt-4 grid gap-3 sm:grid-cols-3`,children:[(0,X.jsxs)(`label`,{className:`block`,children:[(0,X.jsx)(`span`,{className:`mb-1 block text-xs font-medium text-gray-500 dark:text-gray-400`,children:e(`userManager.audit.actionFilter`,`Action`)}),(0,X.jsx)(K,{value:m,onChange:e=>h(e.target.value),placeholder:e(`userManager.audit.actionPlaceholder`,`e.g. auth.login`),spellCheck:!1,dir:`ltr`})]}),(0,X.jsxs)(`label`,{className:`block`,children:[(0,X.jsx)(`span`,{className:`mb-1 block text-xs font-medium text-gray-500 dark:text-gray-400`,children:e(`userManager.audit.resultFilter`,`Result`)}),(0,X.jsx)(V,{value:g,onChange:e=>_(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,X.jsxs)(`label`,{className:`block`,children:[(0,X.jsx)(`span`,{className:`mb-1 block text-xs font-medium text-gray-500 dark:text-gray-400`,children:e(`userManager.audit.limitFilter`,`Limit`)}),(0,X.jsx)(K,{type:`number`,min:1,max:500,value:v,onChange:e=>y(e.target.value),dir:`ltr`})]})]}),(0,X.jsx)(`div`,{className:`mt-4 space-y-2`,children:r?(0,X.jsx)(`p`,{className:`text-sm text-gray-500 dark:text-gray-400`,children:e(`common.loading`)}):o?(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,X.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,X.jsx)(I,{size:`sm`,variant:`outline`,onClick:()=>void b(),children:e(`common.retry`)})]}):t.length===0?(0,X.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=l===t.id,r=t.details&&Object.keys(t.details).length>0;return(0,X.jsxs)(`div`,{className:`rounded-lg border border-gray-200 dark:border-dark-300 bg-gray-50 dark:bg-dark-50`,children:[(0,X.jsxs)(`button`,{type:`button`,className:`flex w-full items-center gap-3 px-3 py-2 text-start`,onClick:()=>p(n?null:t.id),"aria-expanded":n,children:[r?n?(0,X.jsx)(d,{className:`h-4 w-4 shrink-0 text-gray-500 dark:text-gray-400`}):(0,X.jsx)(f,{className:`h-4 w-4 shrink-0 text-gray-500 dark:text-gray-400`}):(0,X.jsx)(`span`,{className:`h-4 w-4 shrink-0`}),(0,X.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,X.jsxs)(`span`,{className:`flex flex-wrap items-center gap-2`,children:[(0,X.jsx)(`span`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:t.action}),(0,X.jsx)(`span`,{className:`rounded-full px-2 py-0.5 text-xs font-medium ${ce[t.result]||`bg-gray-100 dark:bg-dark-200 text-gray-600 dark:text-gray-300`}`,children:x(t.result)})]}),(0,X.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,X.jsxs)(X.Fragment,{children:[` · `,e(`userManager.audit.target`,`Target`),`:`,` `,t.targetType,t.targetId?`/${t.targetId}`:``]})]})]})]}),n&&r&&(0,X.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)})})]})},ue=()=>{let{t:e}=a(),[t,n]=(0,Y.useState)(null),[r,i]=(0,Y.useState)(!1),[o,s]=(0,Y.useState)(!1),[c,l]=(0,Y.useState)(0);return(0,Y.useEffect)(()=>{let e=!1;return M.getModelAccess().then(t=>{e||(t.success&&t.data?n(t.data.mode):s(!0))}).catch(()=>{e||s(!0)}),()=>{e=!0}},[c]),(0,X.jsx)(`div`,{className:`rounded-lg border border-gray-200 dark:border-dark-300 bg-white dark:bg-dark-100 p-4`,children:(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`h4`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:e(`userManager.modelAccess.title`)}),(0,X.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400 mt-1`,children:e(`userManager.modelAccess.description`)})]}),t===null&&o?(0,X.jsx)(I,{size:`sm`,variant:`outline`,onClick:()=>{s(!1),l(e=>e+1)},children:e(`common.retry`)}):(0,X.jsx)(J,{checked:t===`all-users`,onChange:async t=>{let r=t?`all-users`:`admins`;i(!0);try{if(!(await M.setModelAccess(r)).success)throw Error(`Model download access update failed.`);n(r),v.success(e(`userManager.modelAccess.saved`))}catch{v.error(e(`userManager.modelAccess.saveFailed`))}finally{i(!1)}},disabled:r||t===null})]})})},de=()=>{let{t:e}=a(),[t,n]=(0,Y.useState)(null),[r,i]=(0,Y.useState)(!1),[o,s]=(0,Y.useState)(!1),[c,l]=(0,Y.useState)(0);return(0,Y.useEffect)(()=>{let e=!1;return j.getAccess().then(t=>{e||(t.success&&t.data?n(t.data.mode):s(!0))}).catch(()=>{e||s(!0)}),()=>{e=!0}},[c]),(0,X.jsx)(`div`,{className:`rounded-lg border border-gray-200 dark:border-dark-300 bg-white dark:bg-dark-100 p-4`,children:(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`h4`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:e(`userManager.webSearchAccess.title`)}),(0,X.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400 mt-1`,children:e(`userManager.webSearchAccess.description`)})]}),t===null&&o?(0,X.jsx)(I,{size:`sm`,variant:`outline`,onClick:()=>{s(!1),l(e=>e+1)},children:e(`common.retry`)}):(0,X.jsx)(J,{checked:t===`all-users`,onChange:async t=>{let r=t?`all-users`:`admins`;i(!0);try{if(!(await j.setAccess(r)).success)throw Error(`Web search access update failed.`);n(r),v.success(e(`userManager.webSearchAccess.saved`))}catch{v.error(e(`userManager.webSearchAccess.saveFailed`))}finally{i(!1)}},disabled:r||t===null})]})})},fe=()=>{let{t:e}=a(),t=F(e=>e.refreshWorkAccess),[n,r]=(0,Y.useState)(null),[i,o]=(0,Y.useState)(!1),[s,c]=(0,Y.useState)(!1),[l,u]=(0,Y.useState)(0);return(0,Y.useEffect)(()=>{let e=!1;return D.access().then(t=>{e||(t.success&&t.data?r(t.data.mode):c(!0))}).catch(()=>{e||c(!0)}),()=>{e=!0}},[l]),(0,X.jsx)(`div`,{className:`rounded-lg border border-gray-200 dark:border-dark-300 bg-white dark:bg-dark-100 p-4`,children:(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`h4`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:e(`userManager.workAccess.title`)}),(0,X.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400 mt-1`,children:e(`userManager.workAccess.description`)})]}),n===null&&s?(0,X.jsx)(I,{size:`sm`,variant:`outline`,onClick:()=>{c(!1),u(e=>e+1)},children:e(`common.retry`)}):(0,X.jsx)(J,{checked:n===`all-users`,onChange:async n=>{let i=n?`all-users`:`admins`;o(!0);try{if(!(await D.setAccess(i)).success)throw Error(`Work access update failed.`);r(i),await t(),v.success(e(`userManager.workAccess.saved`))}catch{v.error(e(`userManager.workAccess.saveFailed`))}finally{o(!1)}},disabled:i||n===null})]})})},$={name:``,image:``,memoryLimit:``,cpuLimit:``,pidsLimit:``,workspaceSize:``,idleMinutes:``,networkDefault:`inherit`,guiEnabled:!1,takeoverEnabled:!0},pe={...$,name:`Work Computer`,image:`libre-work-computer:latest`,memoryLimit:`4g`,networkDefault:`on`,guiEnabled:!0},me=e=>({name:e.name,guiEnabled:e.guiEnabled===!0,takeoverEnabled:e.takeoverEnabled!==!1,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`}),he=e=>[e.pidsLimit,e.idleMinutes].some(e=>e.trim()!==``&&!Number.isFinite(Number(e))),ge=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}),_e=()=>{let{t:e}=a(),[t,n]=(0,Y.useState)([]),[r,i]=(0,Y.useState)(null),[o,s]=(0,Y.useState)($),[c,l]=(0,Y.useState)(!1),u=async()=>{try{let e=await D.listPolicies();e.success&&e.data&&n(e.data)}catch{}};(0,Y.useEffect)(()=>{let e=!1;return D.listPolicies().then(t=>{!e&&t.success&&t.data&&n(t.data)}).catch(()=>{}),()=>{e=!0}},[]);let d=e=>({value:o[e],onChange:t=>s(n=>({...n,[e]:t.target.value}))}),f=async()=>{if(he(o)){v.error(e(`userManager.workPolicies.invalidNumber`));return}l(!0);try{let t=ge(o),n=r===`new`?await D.createPolicy(t):await D.updatePolicy(r,t);if(!n.success)throw Error(n.error||`Policy save failed.`);v.success(e(`userManager.workPolicies.saved`)),i(null),s($),await u()}catch(t){v.error(t instanceof Error&&t.message?t.message:e(`userManager.workPolicies.failed`))}finally{l(!1)}},h=async t=>{if(window.confirm(e(`userManager.workPolicies.deleteConfirm`)))try{let n=await D.deletePolicy(t.id);if(!n.success)throw Error(n.error||`Policy delete failed.`);v.success(e(`userManager.workPolicies.deleted`)),await u()}catch(t){v.error(t instanceof Error&&t.message?t.message:e(`userManager.workPolicies.failed`))}},g=(e,t,n)=>(0,X.jsxs)(`label`,{className:`block text-xs`,children:[(0,X.jsx)(`span`,{className:`mb-1 block font-medium text-gray-700 dark:text-gray-300`,children:t}),(0,X.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,X.jsxs)(`div`,{className:`rounded-lg border border-gray-200 dark:border-dark-300 bg-white dark:bg-dark-100 p-4`,children:[(0,X.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`h4`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:e(`userManager.workPolicies.title`)}),(0,X.jsx)(`p`,{className:`text-xs text-gray-500 dark:text-gray-400 mt-1`,children:e(`userManager.workPolicies.description`)})]}),r===null&&(0,X.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[(0,X.jsxs)(I,{size:`sm`,variant:`outline`,className:`whitespace-nowrap`,"data-testid":`work-policy-computer-preset`,onClick:()=>{s(pe),i(`new`)},children:[(0,X.jsx)(_,{size:14,className:`shrink-0`}),(0,X.jsx)(`span`,{className:`ms-1.5`,children:e(`userManager.workPolicies.computerPreset`)})]}),(0,X.jsxs)(I,{size:`sm`,variant:`outline`,className:`whitespace-nowrap`,onClick:()=>{s($),i(`new`)},children:[(0,X.jsx)(p,{size:14,className:`shrink-0`}),(0,X.jsx)(`span`,{className:`ms-1.5`,children:e(`userManager.workPolicies.add`)})]})]})]}),t.length===0&&r===null&&(0,X.jsx)(`p`,{className:`mt-3 text-xs text-gray-500 dark:text-gray-400`,children:e(`userManager.workPolicies.empty`)}),t.length>0&&(0,X.jsx)(`ul`,{className:`mt-3 divide-y divide-gray-100 dark:divide-dark-300`,children:t.map(t=>(0,X.jsxs)(`li`,{className:`flex items-center justify-between gap-3 py-2`,children:[(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`div`,{className:`text-sm font-medium text-gray-900 dark:text-gray-100`,children:t.name}),(0,X.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,X.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,children:[(0,X.jsx)(I,{size:`sm`,variant:`ghost`,"aria-label":e(`userManager.workPolicies.edit`),onClick:()=>{s(me(t)),i(t.id)},children:(0,X.jsx)(x,{size:14})}),(0,X.jsx)(I,{size:`sm`,variant:`ghost`,"aria-label":e(`userManager.workPolicies.delete`),onClick:()=>void h(t),children:(0,X.jsx)(m,{size:14})})]})]},t.id))}),r!==null&&(0,X.jsxs)(`div`,{className:`mt-4 rounded-lg border border-gray-200 p-3 dark:border-dark-300`,children:[(0,X.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2 lg:grid-cols-4`,children:[g(`name`,e(`userManager.workPolicies.name`),`heavy`),g(`memoryLimit`,e(`userManager.workPolicies.memory`),`4g`),g(`cpuLimit`,e(`userManager.workPolicies.cpu`),`4`),g(`pidsLimit`,e(`userManager.workPolicies.pids`),`512`),g(`workspaceSize`,e(`userManager.workPolicies.workspaceSize`),`20Gi`),g(`idleMinutes`,e(`userManager.workPolicies.idleMinutes`),`30`),(0,X.jsxs)(`label`,{className:`block text-xs`,children:[(0,X.jsx)(`span`,{className:`mb-1 block font-medium text-gray-700 dark:text-gray-300`,children:e(`userManager.workPolicies.networkDefault`)}),(0,X.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,X.jsx)(`option`,{value:`inherit`,children:e(`userManager.workPolicies.networkInherit`)}),(0,X.jsx)(`option`,{value:`on`,children:e(`userManager.workPolicies.networkOn`)}),(0,X.jsx)(`option`,{value:`off`,children:e(`userManager.workPolicies.networkOff`)})]})]}),(0,X.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,X.jsx)(`input`,{type:`checkbox`,"data-testid":`work-policy-gui`,checked:o.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,X.jsx)(`span`,{className:`font-medium text-gray-700 dark:text-gray-300`,children:e(`userManager.workPolicies.guiEnabled`)})]}),o.guiEnabled&&(0,X.jsxs)(`label`,{className:`flex items-center gap-2 text-xs`,children:[(0,X.jsx)(`input`,{type:`checkbox`,"data-testid":`work-policy-takeover`,checked:o.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,X.jsx)(`span`,{className:`font-medium text-gray-700 dark:text-gray-300`,children:e(`userManager.workPolicies.takeoverEnabled`)})]}),g(`image`,e(`userManager.workPolicies.image`),`node:22-bookworm@sha256:…`)]}),o.guiEnabled&&(0,X.jsx)(`p`,{className:`mt-2 text-[11px] text-gray-500 dark:text-gray-400`,children:e(`userManager.workPolicies.computerPresetHint`)}),(0,X.jsxs)(`div`,{className:`mt-3 flex justify-end gap-2`,children:[(0,X.jsx)(I,{size:`sm`,variant:`ghost`,disabled:c,onClick:()=>{i(null),s($)},children:e(`userManager.workPolicies.cancel`)}),(0,X.jsx)(I,{size:`sm`,disabled:c||!o.name.trim(),onClick:()=>void f(),children:e(`userManager.workPolicies.save`)})]})]})]})},ve=()=>{let{t:e}=a();return(0,X.jsxs)(U,{children:[(0,X.jsx)(L,{title:e(`userManager.title`),description:e(`userManager.pageDescription`)}),(0,X.jsxs)(`div`,{className:`mb-4 space-y-4`,children:[(0,X.jsx)(fe,{}),(0,X.jsx)(_e,{}),(0,X.jsx)(ue,{}),(0,X.jsx)(de,{}),(0,X.jsx)(te,{}),(0,X.jsx)(ne,{}),(0,X.jsx)(ae,{}),(0,X.jsx)(oe,{}),(0,X.jsx)(se,{}),(0,X.jsx)(le,{})]}),(0,X.jsx)(ee,{})]})};export{ve as UserManagementPage,ve as default};
|