From 4a17f0106e3e0031924d842ed783418a289829de Mon Sep 17 00:00:00 2001 From: liumangmang Date: Wed, 10 Jun 2026 14:33:47 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=BB=E9=A2=98=E5=88=87=E6=8D=A2=20?= =?UTF-8?q?+=20=E6=B5=85=E8=89=B2=E6=A8=A1=E5=BC=8F=E9=80=82=E9=85=8D?= =?UTF-8?q?=EF=BC=8CSFTP/=E6=89=B9=E9=87=8F=E5=91=BD=E4=BB=A4/Webhook/?= =?UTF-8?q?=E4=BB=AA=E8=A1=A8=E7=9B=98=E5=85=A8=E9=9D=A2=E5=8D=87=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sshmanager/SshManagerApplication.java | 2 + .../config/TerminalHandshakeInterceptor.java | 120 ++++---- .../controller/CommandSnippetController.java | 67 +++++ .../controller/ConnectionController.java | 190 ++++++++----- .../sshmanager/controller/SftpController.java | 112 ++++++++ .../controller/TerminalControlMessage.java | 35 +-- .../controller/TerminalWebSocketHandler.java | 35 ++- .../controller/WebhookController.java | 59 ++++ .../com/sshmanager/dto/CommandSnippetDto.java | 25 ++ .../dto/ConnectionCreateRequest.java | 13 +- .../com/sshmanager/dto/ConnectionDto.java | 2 + .../com/sshmanager/entity/CommandSnippet.java | 38 +++ .../com/sshmanager/entity/Connection.java | 3 + .../com/sshmanager/entity/WebhookConfig.java | 35 +++ .../repository/CommandSnippetRepository.java | 12 + .../repository/WebhookConfigRepository.java | 10 + .../service/CommandSnippetService.java | 65 +++++ .../sshmanager/service/ConnectionService.java | 57 +++- .../service/QuickConnectionRegistry.java | 60 ++++ .../service/QuickCredentialRegistry.java | 87 ++++++ .../com/sshmanager/service/SftpService.java | 108 +++++++ .../sshmanager/service/WebhookService.java | 97 +++++++ .../java/com/sshmanager/util/JschUtil.java | 14 +- .../static/assets/DashboardPage-BQqMAlQh.js | 1 + .../resources/static/assets/Modal-DTj05goU.js | 1 + .../assets/UserManagementPage-CpLFrodx.js | 1 + .../static/assets/WorkspacePage-B8Ud6Ns4.js | 17 ++ .../static/assets/WorkspacePage-DXOU9pbP.css | 1 + .../static/assets/index-B4Duc4SL.css | 1 + .../resources/static/assets/index-Z2D8CQl5.js | 17 ++ .../static/assets/monitor-D01QXMh7.js | 1 + backend/src/main/resources/static/index.html | 20 ++ .../src/main/resources/static/ssh-manager.svg | 38 +++ .../TerminalWebSocketHandlerTest.java | 6 + .../service/ConnectionServiceTest.java | 6 + .../sshmanager/service/SftpServiceTest.java | 22 +- .../com/sshmanager/util/JschUtilTest.java | 29 ++ docker/Dockerfile | 8 +- frontend/package-lock.json | 7 + frontend/package.json | 1 + frontend/src/App.tsx | 101 ++++--- frontend/src/components/BatchCommandModal.tsx | 159 ++++++++--- .../src/components/ChangePasswordModal.tsx | 16 +- frontend/src/components/ConnectionModal.tsx | 54 ++-- frontend/src/components/FileEditorModal.tsx | 85 ++++++ frontend/src/components/FolderModal.tsx | 10 +- frontend/src/components/Modal.tsx | 10 +- frontend/src/components/RenameFolderModal.tsx | 6 +- frontend/src/components/SessionTree.tsx | 33 ++- frontend/src/components/SettingsModal.tsx | 172 +++++++++--- .../components/SftpCreateDirectoryModal.tsx | 12 +- .../src/components/SftpFileSelectorModal.tsx | 10 +- frontend/src/components/SftpFileTable.tsx | 199 +++++++++++++ frontend/src/components/SftpPane.tsx | 243 ++++++++++------ frontend/src/components/SftpToolbar.tsx | 145 ++++++++++ frontend/src/components/TerminalPane.tsx | 149 +++++++++- .../src/components/TransferCenterModal.tsx | 114 ++++---- frontend/src/lib/utils.ts | 12 +- frontend/src/pages/DashboardPage.tsx | 264 ++++++++++++++++++ frontend/src/pages/LoginPage.tsx | 66 ++--- frontend/src/pages/UserManagementPage.tsx | 94 +++---- frontend/src/pages/WorkspacePage.tsx | 241 +++++++++++----- frontend/src/services/connections.ts | 8 + frontend/src/services/sftp.ts | 20 ++ frontend/src/services/snippets.ts | 26 ++ frontend/src/services/webhooks.ts | 25 ++ frontend/src/style.css | 63 ++++- frontend/src/types.ts | 2 + frontend/tailwind.config.js | 16 ++ 69 files changed, 3105 insertions(+), 673 deletions(-) create mode 100644 backend/src/main/java/com/sshmanager/controller/CommandSnippetController.java create mode 100644 backend/src/main/java/com/sshmanager/controller/WebhookController.java create mode 100644 backend/src/main/java/com/sshmanager/dto/CommandSnippetDto.java create mode 100644 backend/src/main/java/com/sshmanager/entity/CommandSnippet.java create mode 100644 backend/src/main/java/com/sshmanager/entity/WebhookConfig.java create mode 100644 backend/src/main/java/com/sshmanager/repository/CommandSnippetRepository.java create mode 100644 backend/src/main/java/com/sshmanager/repository/WebhookConfigRepository.java create mode 100644 backend/src/main/java/com/sshmanager/service/CommandSnippetService.java create mode 100644 backend/src/main/java/com/sshmanager/service/QuickConnectionRegistry.java create mode 100644 backend/src/main/java/com/sshmanager/service/QuickCredentialRegistry.java create mode 100644 backend/src/main/java/com/sshmanager/service/WebhookService.java create mode 100644 backend/src/main/resources/static/assets/DashboardPage-BQqMAlQh.js create mode 100644 backend/src/main/resources/static/assets/Modal-DTj05goU.js create mode 100644 backend/src/main/resources/static/assets/UserManagementPage-CpLFrodx.js create mode 100644 backend/src/main/resources/static/assets/WorkspacePage-B8Ud6Ns4.js create mode 100644 backend/src/main/resources/static/assets/WorkspacePage-DXOU9pbP.css create mode 100644 backend/src/main/resources/static/assets/index-B4Duc4SL.css create mode 100644 backend/src/main/resources/static/assets/index-Z2D8CQl5.js create mode 100644 backend/src/main/resources/static/assets/monitor-D01QXMh7.js create mode 100644 backend/src/main/resources/static/index.html create mode 100644 backend/src/main/resources/static/ssh-manager.svg create mode 100644 frontend/src/components/FileEditorModal.tsx create mode 100644 frontend/src/components/SftpFileTable.tsx create mode 100644 frontend/src/components/SftpToolbar.tsx create mode 100644 frontend/src/pages/DashboardPage.tsx create mode 100644 frontend/src/services/snippets.ts create mode 100644 frontend/src/services/webhooks.ts diff --git a/backend/src/main/java/com/sshmanager/SshManagerApplication.java b/backend/src/main/java/com/sshmanager/SshManagerApplication.java index 3f97a8b..02d4390 100644 --- a/backend/src/main/java/com/sshmanager/SshManagerApplication.java +++ b/backend/src/main/java/com/sshmanager/SshManagerApplication.java @@ -2,8 +2,10 @@ package com.sshmanager; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication +@EnableScheduling public class SshManagerApplication { public static void main(String[] args) { diff --git a/backend/src/main/java/com/sshmanager/config/TerminalHandshakeInterceptor.java b/backend/src/main/java/com/sshmanager/config/TerminalHandshakeInterceptor.java index e12e402..f3c0365 100644 --- a/backend/src/main/java/com/sshmanager/config/TerminalHandshakeInterceptor.java +++ b/backend/src/main/java/com/sshmanager/config/TerminalHandshakeInterceptor.java @@ -1,58 +1,62 @@ -package com.sshmanager.config; - -import com.sshmanager.security.JwtTokenProvider; -import org.springframework.http.server.ServerHttpRequest; -import org.springframework.http.server.ServerHttpResponse; -import org.springframework.http.server.ServletServerHttpRequest; -import org.springframework.stereotype.Component; -import org.springframework.web.socket.WebSocketHandler; -import org.springframework.web.socket.server.HandshakeInterceptor; - -import javax.servlet.http.HttpServletRequest; -import org.springframework.lang.NonNull; -import org.springframework.lang.Nullable; -import java.util.Map; - -@Component -public class TerminalHandshakeInterceptor implements HandshakeInterceptor { - - private final JwtTokenProvider jwtTokenProvider; - - public TerminalHandshakeInterceptor(JwtTokenProvider jwtTokenProvider) { - this.jwtTokenProvider = jwtTokenProvider; - } - - @Override - public boolean beforeHandshake(@NonNull ServerHttpRequest request, @NonNull ServerHttpResponse response, - @NonNull WebSocketHandler wsHandler, @NonNull Map attributes) throws Exception { - if (!(request instanceof ServletServerHttpRequest)) { - return false; - } - HttpServletRequest servletRequest = ((ServletServerHttpRequest) request).getServletRequest(); - - String token = servletRequest.getParameter("token"); - String connectionIdStr = servletRequest.getParameter("connectionId"); - - if (token == null || token.isEmpty() || connectionIdStr == null || connectionIdStr.isEmpty()) { - return false; - } - if (!jwtTokenProvider.validateToken(token)) { - return false; - } - - try { - long connectionId = Long.parseLong(connectionIdStr); - String username = jwtTokenProvider.getUsernameFromToken(token); - attributes.put("connectionId", connectionId); - attributes.put("username", username); - return true; - } catch (NumberFormatException e) { - return false; - } - } - - @Override - public void afterHandshake(@NonNull ServerHttpRequest request, @NonNull ServerHttpResponse response, - @NonNull WebSocketHandler wsHandler, @Nullable Exception exception) { - } -} +package com.sshmanager.config; + +import com.sshmanager.security.JwtTokenProvider; +import org.springframework.http.server.ServerHttpRequest; +import org.springframework.http.server.ServerHttpResponse; +import org.springframework.http.server.ServletServerHttpRequest; +import org.springframework.stereotype.Component; +import org.springframework.web.socket.WebSocketHandler; +import org.springframework.web.socket.server.HandshakeInterceptor; + +import javax.servlet.http.HttpServletRequest; +import org.springframework.lang.NonNull; +import org.springframework.lang.Nullable; +import java.util.Map; + +@Component +public class TerminalHandshakeInterceptor implements HandshakeInterceptor { + + private final JwtTokenProvider jwtTokenProvider; + + public TerminalHandshakeInterceptor(JwtTokenProvider jwtTokenProvider) { + this.jwtTokenProvider = jwtTokenProvider; + } + + @Override + public boolean beforeHandshake(@NonNull ServerHttpRequest request, @NonNull ServerHttpResponse response, + @NonNull WebSocketHandler wsHandler, @NonNull Map attributes) throws Exception { + if (!(request instanceof ServletServerHttpRequest)) { + return false; + } + HttpServletRequest servletRequest = ((ServletServerHttpRequest) request).getServletRequest(); + + String token = servletRequest.getParameter("token"); + String connectionIdStr = servletRequest.getParameter("connectionId"); + String credentialToken = servletRequest.getParameter("credentialToken"); + + if (token == null || token.isEmpty() || connectionIdStr == null || connectionIdStr.isEmpty()) { + return false; + } + if (!jwtTokenProvider.validateToken(token)) { + return false; + } + + try { + long connectionId = Long.parseLong(connectionIdStr); + String username = jwtTokenProvider.getUsernameFromToken(token); + attributes.put("connectionId", connectionId); + attributes.put("username", username); + if (credentialToken != null && !credentialToken.isEmpty()) { + attributes.put("credentialToken", credentialToken); + } + return true; + } catch (NumberFormatException e) { + return false; + } + } + + @Override + public void afterHandshake(@NonNull ServerHttpRequest request, @NonNull ServerHttpResponse response, + @NonNull WebSocketHandler wsHandler, @Nullable Exception exception) { + } +} diff --git a/backend/src/main/java/com/sshmanager/controller/CommandSnippetController.java b/backend/src/main/java/com/sshmanager/controller/CommandSnippetController.java new file mode 100644 index 0000000..fc9b89b --- /dev/null +++ b/backend/src/main/java/com/sshmanager/controller/CommandSnippetController.java @@ -0,0 +1,67 @@ +package com.sshmanager.controller; + +import com.sshmanager.dto.CommandSnippetDto; +import com.sshmanager.entity.User; +import com.sshmanager.repository.UserRepository; +import com.sshmanager.service.CommandSnippetService; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.Authentication; + +import java.util.HashMap; +import java.util.Map; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/api/snippets") +public class CommandSnippetController { + + private final CommandSnippetService snippetService; + private final UserRepository userRepository; + + public CommandSnippetController(CommandSnippetService snippetService, UserRepository userRepository) { + this.snippetService = snippetService; + this.userRepository = userRepository; + } + + private Long getCurrentUserId(Authentication auth) { + User user = userRepository.findByUsername(auth.getName()) + .orElseThrow(() -> new IllegalStateException("User not found")); + return user.getId(); + } + + @GetMapping + public ResponseEntity> list(Authentication auth) { + return ResponseEntity.ok(snippetService.listByUserId(getCurrentUserId(auth))); + } + + @PostMapping + public ResponseEntity create(@RequestBody Map body, Authentication auth) { + return ResponseEntity.ok(snippetService.create( + getCurrentUserId(auth), + body.get("name"), + body.get("command"), + body.get("description"))); + } + + @PutMapping("/{id}") + public ResponseEntity update(@PathVariable Long id, + @RequestBody Map body, + Authentication auth) { + return ResponseEntity.ok(snippetService.update( + id, getCurrentUserId(auth), + body.get("name"), + body.get("command"), + body.get("description"))); + } + + @DeleteMapping("/{id}") + public ResponseEntity> delete(@PathVariable Long id, Authentication auth) { + snippetService.delete(id, getCurrentUserId(auth)); + Map result = new java.util.HashMap<>(); + result.put("message", "Deleted"); + return ResponseEntity.ok(result); + } +} diff --git a/backend/src/main/java/com/sshmanager/controller/ConnectionController.java b/backend/src/main/java/com/sshmanager/controller/ConnectionController.java index 5b32339..53b84b1 100644 --- a/backend/src/main/java/com/sshmanager/controller/ConnectionController.java +++ b/backend/src/main/java/com/sshmanager/controller/ConnectionController.java @@ -1,20 +1,21 @@ package com.sshmanager.controller; -import com.sshmanager.dto.ConnectionCreateRequest; -import com.sshmanager.dto.ConnectionDto; -import com.sshmanager.dto.BackupImportResponseDto; -import com.sshmanager.dto.BackupPackageDto; -import com.sshmanager.dto.BatchCommandRequest; -import com.sshmanager.dto.BatchCommandResponseDto; -import com.sshmanager.dto.ConnectionStatusCheckRequest; -import com.sshmanager.dto.ConnectionStatusResponseDto; -import com.sshmanager.entity.Connection; -import com.sshmanager.entity.User; -import com.sshmanager.repository.UserRepository; -import com.sshmanager.service.BackupService; -import com.sshmanager.service.BatchCommandService; -import com.sshmanager.service.ConnectionService; -import com.sshmanager.service.ConnectionStatusService; +import com.sshmanager.dto.ConnectionCreateRequest; +import com.sshmanager.dto.ConnectionDto; +import com.sshmanager.dto.BackupImportResponseDto; +import com.sshmanager.dto.BackupPackageDto; +import com.sshmanager.dto.BatchCommandRequest; +import com.sshmanager.dto.BatchCommandResponseDto; +import com.sshmanager.dto.ConnectionStatusCheckRequest; +import com.sshmanager.dto.ConnectionStatusResponseDto; +import com.sshmanager.entity.Connection; +import com.sshmanager.entity.User; +import com.sshmanager.repository.UserRepository; +import com.sshmanager.service.BackupService; +import com.sshmanager.service.BatchCommandService; +import com.sshmanager.service.ConnectionService; +import com.sshmanager.service.ConnectionStatusService; +import com.sshmanager.service.QuickCredentialRegistry; import org.springframework.http.ResponseEntity; import org.springframework.security.core.Authentication; import org.springframework.web.bind.annotation.*; @@ -27,23 +28,27 @@ import java.util.Map; @RequestMapping("/api/connections") public class ConnectionController { - private final ConnectionService connectionService; - private final BackupService backupService; - private final BatchCommandService batchCommandService; - private final ConnectionStatusService connectionStatusService; - private final UserRepository userRepository; - - public ConnectionController(ConnectionService connectionService, - BackupService backupService, - BatchCommandService batchCommandService, - ConnectionStatusService connectionStatusService, - UserRepository userRepository) { - this.connectionService = connectionService; - this.backupService = backupService; - this.batchCommandService = batchCommandService; - this.connectionStatusService = connectionStatusService; - this.userRepository = userRepository; - } + private final ConnectionService connectionService; + private final BackupService backupService; + private final BatchCommandService batchCommandService; + private final ConnectionStatusService connectionStatusService; + private final UserRepository userRepository; + + private final QuickCredentialRegistry quickCredentials; + + public ConnectionController(ConnectionService connectionService, + BackupService backupService, + BatchCommandService batchCommandService, + ConnectionStatusService connectionStatusService, + UserRepository userRepository, + QuickCredentialRegistry quickCredentials) { + this.connectionService = connectionService; + this.backupService = backupService; + this.batchCommandService = batchCommandService; + this.connectionStatusService = connectionStatusService; + this.userRepository = userRepository; + this.quickCredentials = quickCredentials; + } private Long getCurrentUserId(Authentication auth) { User user = userRepository.findByUsername(auth.getName()).orElseThrow(() -> new IllegalStateException("User not found")); @@ -77,46 +82,53 @@ public class ConnectionController { return ResponseEntity.ok(connectionService.update(id, request, userId)); } - @DeleteMapping("/{id}") - public ResponseEntity> delete(@PathVariable Long id, - Authentication authentication) { + @DeleteMapping("/{id}") + public ResponseEntity> delete(@PathVariable Long id, + Authentication authentication) { Long userId = getCurrentUserId(authentication); connectionService.delete(id, userId); Map result = new HashMap<>(); - result.put("message", "Deleted"); - return ResponseEntity.ok(result); - } - - @GetMapping("/backup/export") - public ResponseEntity exportBackup(Authentication authentication) { - Long userId = getCurrentUserId(authentication); - return ResponseEntity.ok(backupService.exportBackup(userId)); - } - - @PostMapping("/backup/import") - public ResponseEntity importBackup(@RequestBody BackupPackageDto request, - Authentication authentication) { - Long userId = getCurrentUserId(authentication); - return ResponseEntity.ok(backupService.importBackup(userId, request)); - } - - @PostMapping("/batch-command") - public ResponseEntity executeBatchCommand(@RequestBody BatchCommandRequest request, - Authentication authentication) { - Long userId = getCurrentUserId(authentication); - return ResponseEntity.ok(batchCommandService.execute(userId, request)); - } - - @PostMapping("/status") - public ResponseEntity checkStatuses(@RequestBody ConnectionStatusCheckRequest request, - Authentication authentication) { - Long userId = getCurrentUserId(authentication); - return ResponseEntity.ok(connectionStatusService.checkStatuses(userId, request)); - } - - @PostMapping("/test") - public ResponseEntity> connectivity(@RequestBody Connection connection, - Authentication authentication) { + result.put("message", "Deleted"); + return ResponseEntity.ok(result); + } + + @PutMapping("/{id}/pin") + public ResponseEntity togglePin(@PathVariable Long id, + Authentication authentication) { + Long userId = getCurrentUserId(authentication); + return ResponseEntity.ok(connectionService.togglePin(id, userId)); + } + + @GetMapping("/backup/export") + public ResponseEntity exportBackup(Authentication authentication) { + Long userId = getCurrentUserId(authentication); + return ResponseEntity.ok(backupService.exportBackup(userId)); + } + + @PostMapping("/backup/import") + public ResponseEntity importBackup(@RequestBody BackupPackageDto request, + Authentication authentication) { + Long userId = getCurrentUserId(authentication); + return ResponseEntity.ok(backupService.importBackup(userId, request)); + } + + @PostMapping("/batch-command") + public ResponseEntity executeBatchCommand(@RequestBody BatchCommandRequest request, + Authentication authentication) { + Long userId = getCurrentUserId(authentication); + return ResponseEntity.ok(batchCommandService.execute(userId, request)); + } + + @PostMapping("/status") + public ResponseEntity checkStatuses(@RequestBody ConnectionStatusCheckRequest request, + Authentication authentication) { + Long userId = getCurrentUserId(authentication); + return ResponseEntity.ok(connectionStatusService.checkStatuses(userId, request)); + } + + @PostMapping("/test") + public ResponseEntity> connectivity(@RequestBody Connection connection, + Authentication authentication) { try { Long userId = getCurrentUserId(authentication); Connection fullConn = connectionService.getConnectionForSsh(connection.getId(), userId); @@ -136,4 +148,44 @@ public class ConnectionController { return ResponseEntity.ok(result); } } + + @GetMapping("/export/config") + public ResponseEntity exportSshConfig(Authentication authentication) { + Long userId = getCurrentUserId(authentication); + String config = connectionService.exportSshConfig(userId); + return ResponseEntity.ok() + .header("Content-Type", "text/plain;charset=UTF-8") + .header("Content-Disposition", "attachment; filename=ssh-config.txt") + .body(config); + } + + /** + * Quick-connect: ephemeral SSH connection for `ssh user@host` in terminal. + * Returns a credentialToken (one-time, TTL 60s) instead of passing password directly. + * The connection is stored in memory only, never persisted to the database. + */ + @PostMapping("/quick-connect") + public ResponseEntity> quickConnect(@RequestBody Map body, + Authentication authentication) { + Long userId = getCurrentUserId(authentication); + String host = (String) body.getOrDefault("host", ""); + String username = (String) body.getOrDefault("username", "root"); + String password = (String) body.getOrDefault("password", ""); + int port = body.containsKey("port") ? Integer.parseInt(body.get("port").toString()) : 22; + + ConnectionCreateRequest req = new ConnectionCreateRequest(); + req.setName(host + "-quick"); + req.setHost(host); + req.setPort(port); + req.setUsername(username); + req.setAuthType(Connection.AuthType.PASSWORD); + + ConnectionDto conn = connectionService.quickCreate(req, userId); + String credentialToken = quickCredentials.create(userId, conn.getId(), password); + + Map result = new HashMap<>(); + result.put("connection", conn); + result.put("credentialToken", credentialToken); + return ResponseEntity.ok(result); + } } diff --git a/backend/src/main/java/com/sshmanager/controller/SftpController.java b/backend/src/main/java/com/sshmanager/controller/SftpController.java index d603e0e..3cb8fb5 100644 --- a/backend/src/main/java/com/sshmanager/controller/SftpController.java +++ b/backend/src/main/java/com/sshmanager/controller/SftpController.java @@ -1087,4 +1087,116 @@ public class SftpController { return now - endTime > timeoutMillis; } } + + // ── Online file editor: read file content ── + @GetMapping("/read") + public ResponseEntity readFile(@RequestParam Long connectionId, + @RequestParam String path, + Authentication auth) { + try { + Long userId = getCurrentUserId(auth); + Connection conn = connectionService.getConnectionForSsh(connectionId, userId); + + // Limit file size to 5MB + long maxSize = 5 * 1024 * 1024L; + String content = sftpService.readFileContent(conn, + connectionService.getDecryptedPassword(conn), + connectionService.getDecryptedPrivateKey(conn), + connectionService.getDecryptedPassphrase(conn), + path, maxSize); + + Map result = new HashMap<>(); + result.put("content", content); + result.put("path", path); + return ResponseEntity.ok(result); + } catch (Exception e) { + Map err = new HashMap<>(); + err.put("error", "READ_ERROR"); + err.put("message", e.getMessage()); + return ResponseEntity.badRequest().body(err); + } + } + + // ── Online file editor: save file ── + @PostMapping("/write") + public ResponseEntity writeFile(@RequestParam Long connectionId, + @RequestParam String path, + @RequestBody Map body, + Authentication auth) { + try { + Long userId = getCurrentUserId(auth); + Connection conn = connectionService.getConnectionForSsh(connectionId, userId); + String content = body.get("content"); + if (content == null) { + Map err = new HashMap<>(); + err.put("message", "Content is required"); + return ResponseEntity.badRequest().body(err); + } + sftpService.writeFileContent(conn, + connectionService.getDecryptedPassword(conn), + connectionService.getDecryptedPrivateKey(conn), + connectionService.getDecryptedPassphrase(conn), + path, content); + Map ok = new HashMap<>(); + ok.put("message", "File saved"); + return ResponseEntity.ok(ok); + } catch (Exception e) { + Map err = new HashMap<>(); + err.put("error", "WRITE_ERROR"); + err.put("message", e.getMessage()); + return ResponseEntity.badRequest().body(err); + } + } + + private Map makeResult(String message) { + Map m = new HashMap<>(); + m.put("message", message); + return m; + } + + // ── Remote compress ── + @PostMapping("/compress") + public ResponseEntity compress(@RequestParam Long connectionId, + @RequestParam String path, + @RequestParam(defaultValue = "tar.gz") String format, + Authentication auth) { + try { + Long userId = getCurrentUserId(auth); + Connection conn = connectionService.getConnectionForSsh(connectionId, userId); + String result = sftpService.compressRemote(conn, + connectionService.getDecryptedPassword(conn), + connectionService.getDecryptedPrivateKey(conn), + connectionService.getDecryptedPassphrase(conn), + path, format); + return ResponseEntity.ok(makeResult(result)); + } catch (Exception e) { + Map err = new HashMap<>(); + err.put("error", "COMPRESS_ERROR"); + err.put("message", e.getMessage()); + return ResponseEntity.badRequest().body(err); + } + } + + // ── Remote decompress ── + @PostMapping("/decompress") + public ResponseEntity decompress(@RequestParam Long connectionId, + @RequestParam String path, + @RequestParam(defaultValue = "/tmp") String targetDir, + Authentication auth) { + try { + Long userId = getCurrentUserId(auth); + Connection conn = connectionService.getConnectionForSsh(connectionId, userId); + String result = sftpService.decompressRemote(conn, + connectionService.getDecryptedPassword(conn), + connectionService.getDecryptedPrivateKey(conn), + connectionService.getDecryptedPassphrase(conn), + path, targetDir); + return ResponseEntity.ok(makeResult(result)); + } catch (Exception e) { + Map err = new HashMap<>(); + err.put("error", "DECOMPRESS_ERROR"); + err.put("message", e.getMessage()); + return ResponseEntity.badRequest().body(err); + } + } } diff --git a/backend/src/main/java/com/sshmanager/controller/TerminalControlMessage.java b/backend/src/main/java/com/sshmanager/controller/TerminalControlMessage.java index 7457aa2..069f9f0 100644 --- a/backend/src/main/java/com/sshmanager/controller/TerminalControlMessage.java +++ b/backend/src/main/java/com/sshmanager/controller/TerminalControlMessage.java @@ -13,30 +13,19 @@ public class TerminalControlMessage { private String type; private Integer cols; private Integer rows; + private String token; + private String password; - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public Integer getCols() { - return cols; - } - - public void setCols(Integer cols) { - this.cols = cols; - } - - public Integer getRows() { - return rows; - } - - public void setRows(Integer rows) { - this.rows = rows; - } + public String getType() { return type; } + public void setType(String type) { this.type = type; } + public Integer getCols() { return cols; } + public void setCols(Integer cols) { this.cols = cols; } + public Integer getRows() { return rows; } + public void setRows(Integer rows) { this.rows = rows; } + public String getToken() { return token; } + public void setToken(String token) { this.token = token; } + public String getPassword() { return password; } + public void setPassword(String password) { this.password = password; } public static Optional parse(String payload) { if (payload == null || !payload.startsWith(CONTROL_PREFIX)) { diff --git a/backend/src/main/java/com/sshmanager/controller/TerminalWebSocketHandler.java b/backend/src/main/java/com/sshmanager/controller/TerminalWebSocketHandler.java index 4f57093..1ec433b 100644 --- a/backend/src/main/java/com/sshmanager/controller/TerminalWebSocketHandler.java +++ b/backend/src/main/java/com/sshmanager/controller/TerminalWebSocketHandler.java @@ -5,6 +5,8 @@ import com.sshmanager.entity.User; import com.sshmanager.repository.ConnectionRepository; import com.sshmanager.repository.UserRepository; import com.sshmanager.service.ConnectionService; +import com.sshmanager.service.QuickConnectionRegistry; +import com.sshmanager.service.QuickCredentialRegistry; import com.sshmanager.service.SshService; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; @@ -28,6 +30,8 @@ public class TerminalWebSocketHandler extends TextWebSocketHandler { private final UserRepository userRepository; private final ConnectionService connectionService; private final SshService sshService; + private final QuickConnectionRegistry quickConnections; + private final QuickCredentialRegistry quickCredentials; private final ExecutorService executor; private final AtomicInteger sessionCount = new AtomicInteger(0); @@ -38,11 +42,15 @@ public class TerminalWebSocketHandler extends TextWebSocketHandler { UserRepository userRepository, ConnectionService connectionService, SshService sshService, + QuickConnectionRegistry quickConnections, + QuickCredentialRegistry quickCredentials, @Qualifier("terminalWebSocketExecutor") ExecutorService executor) { this.connectionRepository = connectionRepository; this.userRepository = userRepository; this.connectionService = connectionService; this.sshService = sshService; + this.quickConnections = quickConnections; + this.quickCredentials = quickCredentials; this.executor = executor; } @@ -63,13 +71,29 @@ public class TerminalWebSocketHandler extends TextWebSocketHandler { return; } + // Check persistent DB first, then in-memory quick-connect registry Connection conn = connectionRepository.findById(connectionId).orElse(null); + if (conn == null) { + conn = quickConnections.get(connectionId); + } if (conn == null || !conn.getUserId().equals(user.getId())) { webSocketSession.close(CloseStatus.BAD_DATA); return; } - String password = connectionService.getDecryptedPassword(conn); + // Resolve password: credentialToken (one-time) > stored DB password + String credentialToken = (String) webSocketSession.getAttributes().get("credentialToken"); + String password; + if (credentialToken != null) { + password = quickCredentials.consume(credentialToken, user.getId(), connectionId); + if (password == null) { + webSocketSession.sendMessage(new TextMessage("\r\n[Credential token expired or invalid]\r\n")); + webSocketSession.close(CloseStatus.BAD_DATA); + return; + } + } else { + password = connectionService.getDecryptedPassword(conn); + } String privateKey = connectionService.getDecryptedPrivateKey(conn); String passphrase = connectionService.getDecryptedPassphrase(conn); @@ -130,6 +154,15 @@ public class TerminalWebSocketHandler extends TextWebSocketHandler { if (sshSession != null) { sshSession.disconnect(); sessionCount.decrementAndGet(); + // Clean up ephemeral quick-connect connections + credential tokens + Long connectionId = (Long) webSocketSession.getAttributes().get("connectionId"); + if (connectionId != null && quickConnections.get(connectionId) != null) { + quickConnections.remove(connectionId); + } + String credentialToken = (String) webSocketSession.getAttributes().get("credentialToken"); + if (credentialToken != null) { + quickCredentials.invalidate(credentialToken); + } } } } diff --git a/backend/src/main/java/com/sshmanager/controller/WebhookController.java b/backend/src/main/java/com/sshmanager/controller/WebhookController.java new file mode 100644 index 0000000..2add2a6 --- /dev/null +++ b/backend/src/main/java/com/sshmanager/controller/WebhookController.java @@ -0,0 +1,59 @@ +package com.sshmanager.controller; + +import com.sshmanager.entity.User; +import com.sshmanager.entity.WebhookConfig; +import com.sshmanager.repository.UserRepository; +import com.sshmanager.service.WebhookService; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.Authentication; +import org.springframework.web.bind.annotation.*; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/api/webhooks") +public class WebhookController { + + private final WebhookService webhookService; + private final UserRepository userRepository; + + public WebhookController(WebhookService webhookService, UserRepository userRepository) { + this.webhookService = webhookService; + this.userRepository = userRepository; + } + + private Long getCurrentUserId(Authentication auth) { + User user = userRepository.findByUsername(auth.getName()) + .orElseThrow(() -> new IllegalStateException("User not found")); + return user.getId(); + } + + @GetMapping + public ResponseEntity> list(Authentication auth) { + return ResponseEntity.ok(webhookService.listByUser(getCurrentUserId(auth))); + } + + @PostMapping + public ResponseEntity create(@RequestBody Map body, Authentication auth) { + return ResponseEntity.ok(webhookService.create( + getCurrentUserId(auth), body.get("url"), body.get("eventType"))); + } + + @DeleteMapping("/{id}") + public ResponseEntity> delete(@PathVariable Long id, Authentication auth) { + webhookService.delete(id, getCurrentUserId(auth)); + Map result = new HashMap<>(); + result.put("message", "Deleted"); + return ResponseEntity.ok(result); + } + + @PostMapping("/test") + public ResponseEntity> test(@RequestBody Map body) { + webhookService.fireEvent("test", "测试通知", body.getOrDefault("message", "这是一条测试消息")); + Map result = new HashMap<>(); + result.put("message", "Test event fired"); + return ResponseEntity.ok(result); + } +} diff --git a/backend/src/main/java/com/sshmanager/dto/CommandSnippetDto.java b/backend/src/main/java/com/sshmanager/dto/CommandSnippetDto.java new file mode 100644 index 0000000..9e0e55f --- /dev/null +++ b/backend/src/main/java/com/sshmanager/dto/CommandSnippetDto.java @@ -0,0 +1,25 @@ +package com.sshmanager.dto; + +import com.sshmanager.entity.CommandSnippet; +import lombok.Data; + +@Data +public class CommandSnippetDto { + private Long id; + private String name; + private String command; + private String description; + private String createdAt; + private String updatedAt; + + public static CommandSnippetDto fromEntity(CommandSnippet snippet) { + CommandSnippetDto dto = new CommandSnippetDto(); + dto.setId(snippet.getId()); + dto.setName(snippet.getName()); + dto.setCommand(snippet.getCommand()); + dto.setDescription(snippet.getDescription()); + dto.setCreatedAt(snippet.getCreatedAt().toString()); + dto.setUpdatedAt(snippet.getUpdatedAt().toString()); + return dto; + } +} diff --git a/backend/src/main/java/com/sshmanager/dto/ConnectionCreateRequest.java b/backend/src/main/java/com/sshmanager/dto/ConnectionCreateRequest.java index 0878e93..edea1c0 100644 --- a/backend/src/main/java/com/sshmanager/dto/ConnectionCreateRequest.java +++ b/backend/src/main/java/com/sshmanager/dto/ConnectionCreateRequest.java @@ -1,9 +1,9 @@ -package com.sshmanager.dto; - -import com.sshmanager.entity.Connection; -import lombok.Data; - -@Data +package com.sshmanager.dto; + +import com.sshmanager.entity.Connection; +import lombok.Data; + +@Data public class ConnectionCreateRequest { public enum SetupMode { NONE, @@ -20,4 +20,5 @@ public class ConnectionCreateRequest { private String passphrase; private SetupMode setupMode = SetupMode.NONE; private String bootstrapPassword; + private Boolean pinned; } diff --git a/backend/src/main/java/com/sshmanager/dto/ConnectionDto.java b/backend/src/main/java/com/sshmanager/dto/ConnectionDto.java index 1f27d80..dda916c 100644 --- a/backend/src/main/java/com/sshmanager/dto/ConnectionDto.java +++ b/backend/src/main/java/com/sshmanager/dto/ConnectionDto.java @@ -11,6 +11,7 @@ public class ConnectionDto { private Integer port; private String username; private Connection.AuthType authType; + private Boolean pinned; private String createdAt; private String updatedAt; @@ -22,6 +23,7 @@ public class ConnectionDto { dto.setPort(conn.getPort()); dto.setUsername(conn.getUsername()); dto.setAuthType(conn.getAuthType()); + dto.setPinned(conn.getIsPinned()); dto.setCreatedAt(conn.getCreatedAt().toString()); dto.setUpdatedAt(conn.getUpdatedAt().toString()); return dto; diff --git a/backend/src/main/java/com/sshmanager/entity/CommandSnippet.java b/backend/src/main/java/com/sshmanager/entity/CommandSnippet.java new file mode 100644 index 0000000..84259a9 --- /dev/null +++ b/backend/src/main/java/com/sshmanager/entity/CommandSnippet.java @@ -0,0 +1,38 @@ +package com.sshmanager.entity; + +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; + +import javax.persistence.*; +import java.time.Instant; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "command_snippets") +public class CommandSnippet { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false) + private Long userId; + + @Column(nullable = false, length = 100) + private String name; + + @Column(nullable = false, columnDefinition = "TEXT") + private String command; + + @Column(length = 255) + private String description; + + @Column(nullable = false) + private Instant createdAt = Instant.now(); + + @Column(nullable = false) + private Instant updatedAt = Instant.now(); +} diff --git a/backend/src/main/java/com/sshmanager/entity/Connection.java b/backend/src/main/java/com/sshmanager/entity/Connection.java index 72382ff..9bd26a9 100644 --- a/backend/src/main/java/com/sshmanager/entity/Connection.java +++ b/backend/src/main/java/com/sshmanager/entity/Connection.java @@ -56,4 +56,7 @@ public class Connection { @Column(nullable = false) private Instant updatedAt = Instant.now(); + + @Column(columnDefinition = "BOOLEAN DEFAULT FALSE") + private Boolean isPinned = false; } diff --git a/backend/src/main/java/com/sshmanager/entity/WebhookConfig.java b/backend/src/main/java/com/sshmanager/entity/WebhookConfig.java new file mode 100644 index 0000000..b8f37da --- /dev/null +++ b/backend/src/main/java/com/sshmanager/entity/WebhookConfig.java @@ -0,0 +1,35 @@ +package com.sshmanager.entity; + +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; + +import javax.persistence.*; +import java.time.Instant; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "webhook_configs") +public class WebhookConfig { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false) + private Long userId; + + @Column(nullable = false, length = 255) + private String url; + + @Column(length = 50) + private String eventType; + + @Column(nullable = false) + private Boolean enabled = true; + + @Column(nullable = false) + private Instant createdAt = Instant.now(); +} diff --git a/backend/src/main/java/com/sshmanager/repository/CommandSnippetRepository.java b/backend/src/main/java/com/sshmanager/repository/CommandSnippetRepository.java new file mode 100644 index 0000000..4577235 --- /dev/null +++ b/backend/src/main/java/com/sshmanager/repository/CommandSnippetRepository.java @@ -0,0 +1,12 @@ +package com.sshmanager.repository; + +import com.sshmanager.entity.CommandSnippet; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface CommandSnippetRepository extends JpaRepository { + List findByUserIdOrderByUpdatedAtDesc(Long userId); +} diff --git a/backend/src/main/java/com/sshmanager/repository/WebhookConfigRepository.java b/backend/src/main/java/com/sshmanager/repository/WebhookConfigRepository.java new file mode 100644 index 0000000..7c75eff --- /dev/null +++ b/backend/src/main/java/com/sshmanager/repository/WebhookConfigRepository.java @@ -0,0 +1,10 @@ +package com.sshmanager.repository; + +import com.sshmanager.entity.WebhookConfig; +import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; + +public interface WebhookConfigRepository extends JpaRepository { + List findByUserIdAndEnabledTrue(Long userId); + List findByEventTypeAndEnabledTrue(String eventType); +} diff --git a/backend/src/main/java/com/sshmanager/service/CommandSnippetService.java b/backend/src/main/java/com/sshmanager/service/CommandSnippetService.java new file mode 100644 index 0000000..81bffae --- /dev/null +++ b/backend/src/main/java/com/sshmanager/service/CommandSnippetService.java @@ -0,0 +1,65 @@ +package com.sshmanager.service; + +import com.sshmanager.dto.CommandSnippetDto; +import com.sshmanager.entity.CommandSnippet; +import com.sshmanager.exception.AccessDeniedException; +import com.sshmanager.exception.NotFoundException; +import com.sshmanager.repository.CommandSnippetRepository; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.Instant; +import java.util.List; +import java.util.stream.Collectors; + +@Service +public class CommandSnippetService { + + private final CommandSnippetRepository repository; + + public CommandSnippetService(CommandSnippetRepository repository) { + this.repository = repository; + } + + public List listByUserId(Long userId) { + return repository.findByUserIdOrderByUpdatedAtDesc(userId).stream() + .map(CommandSnippetDto::fromEntity) + .collect(Collectors.toList()); + } + + @Transactional + public CommandSnippetDto create(Long userId, String name, String command, String description) { + CommandSnippet snippet = new CommandSnippet(); + snippet.setUserId(userId); + snippet.setName(name.trim()); + snippet.setCommand(command.trim()); + snippet.setDescription(description != null ? description.trim() : null); + snippet.setCreatedAt(Instant.now()); + snippet.setUpdatedAt(Instant.now()); + return CommandSnippetDto.fromEntity(repository.save(snippet)); + } + + @Transactional + public CommandSnippetDto update(Long id, Long userId, String name, String command, String description) { + CommandSnippet snippet = repository.findById(id) + .orElseThrow(() -> new NotFoundException("Snippet not found: " + id)); + if (!snippet.getUserId().equals(userId)) { + throw new AccessDeniedException("Access denied"); + } + snippet.setName(name.trim()); + snippet.setCommand(command.trim()); + snippet.setDescription(description != null ? description.trim() : null); + snippet.setUpdatedAt(Instant.now()); + return CommandSnippetDto.fromEntity(repository.save(snippet)); + } + + @Transactional + public void delete(Long id, Long userId) { + CommandSnippet snippet = repository.findById(id).orElse(null); + if (snippet == null) return; + if (!snippet.getUserId().equals(userId)) { + throw new AccessDeniedException("Access denied"); + } + repository.delete(snippet); + } +} diff --git a/backend/src/main/java/com/sshmanager/service/ConnectionService.java b/backend/src/main/java/com/sshmanager/service/ConnectionService.java index 18e40c6..916395f 100644 --- a/backend/src/main/java/com/sshmanager/service/ConnectionService.java +++ b/backend/src/main/java/com/sshmanager/service/ConnectionService.java @@ -22,15 +22,21 @@ public class ConnectionService { private final EncryptionService encryptionService; private final SshService sshService; private final SshBootstrapService sshBootstrapService; + private final WebhookService webhookService; + private final QuickConnectionRegistry quickConnections; public ConnectionService(ConnectionRepository connectionRepository, EncryptionService encryptionService, SshService sshService, - SshBootstrapService sshBootstrapService) { + SshBootstrapService sshBootstrapService, + WebhookService webhookService, + QuickConnectionRegistry quickConnections) { this.connectionRepository = connectionRepository; this.encryptionService = encryptionService; this.sshService = sshService; this.sshBootstrapService = sshBootstrapService; + this.webhookService = webhookService; + this.quickConnections = quickConnections; } public List listByUserId(Long userId) { @@ -58,6 +64,7 @@ public class ConnectionService { conn.setHost(trimToNull(request.getHost())); conn.setPort(request.getPort() != null ? request.getPort() : 22); conn.setUsername(trimToNull(request.getUsername())); + if (request.getPinned() != null) conn.setIsPinned(request.getPinned()); if (getSetupMode(request) == ConnectionCreateRequest.SetupMode.PASSWORD_BOOTSTRAP) { SshBootstrapService.BootstrapResult bootstrapResult = sshBootstrapService.bootstrapWithPassword(request, userId); @@ -71,6 +78,19 @@ public class ConnectionService { } conn = connectionRepository.save(conn); + webhookService.fireEventForUser(userId, "connection.create", "连接已创建", conn.getName() + "@" + conn.getHost()); + return ConnectionDto.fromEntity(conn); + } + + public ConnectionDto quickCreate(ConnectionCreateRequest request, Long userId) { + // Ephemeral — stored in memory, NOT persisted to database. + // Cleans up automatically when the WebSocket session closes. + Connection conn = quickConnections.create( + trimToNull(request.getHost()), + trimToNull(request.getUsername()), + request.getPort() != null ? request.getPort() : 22, + userId + ); return ConnectionDto.fromEntity(conn); } @@ -93,6 +113,7 @@ public class ConnectionService { } if (request.getUsername() != null) conn.setUsername(trimToNull(request.getUsername())); if (request.getAuthType() != null) conn.setAuthType(request.getAuthType()); + if (request.getPinned() != null) conn.setIsPinned(request.getPinned()); validatePersistedFields(conn); applyCredentialUpdate(conn, request); @@ -112,7 +133,41 @@ public class ConnectionService { if (!conn.getUserId().equals(userId)) { throw new AccessDeniedException("Access denied"); } + String connName = conn.getName(); + String connHost = conn.getHost(); connectionRepository.delete(conn); + webhookService.fireEventForUser(userId, "connection.delete", "连接已删除", connName + "@" + connHost); + } + + @Transactional + public ConnectionDto togglePin(Long id, Long userId) { + Connection conn = connectionRepository.findById(id).orElseThrow( + () -> new NotFoundException("Connection not found: " + id)); + if (!conn.getUserId().equals(userId)) { + throw new AccessDeniedException("Access denied"); + } + conn.setIsPinned(!Boolean.TRUE.equals(conn.getIsPinned())); + conn.setUpdatedAt(Instant.now()); + conn = connectionRepository.save(conn); + return ConnectionDto.fromEntity(conn); + } + + public String exportSshConfig(Long userId) { + List conns = connectionRepository.findByUserIdOrderByUpdatedAtDesc(userId); + StringBuilder sb = new StringBuilder(); + sb.append("# SSH Manager - Exported Config\n"); + sb.append("# Generated: ").append(java.time.Instant.now()).append("\n\n"); + for (Connection c : conns) { + sb.append("Host ").append(c.getName()).append("\n"); + sb.append(" HostName ").append(c.getHost()).append("\n"); + sb.append(" Port ").append(c.getPort()).append("\n"); + sb.append(" User ").append(c.getUsername()).append("\n"); + if (c.getAuthType() == Connection.AuthType.PRIVATE_KEY) { + sb.append(" IdentityFile ~/.ssh/id_rsa\n"); + } + sb.append("\n"); + } + return sb.toString(); } public Connection getConnectionForSsh(Long id, Long userId) { diff --git a/backend/src/main/java/com/sshmanager/service/QuickConnectionRegistry.java b/backend/src/main/java/com/sshmanager/service/QuickConnectionRegistry.java new file mode 100644 index 0000000..1f4b4fd --- /dev/null +++ b/backend/src/main/java/com/sshmanager/service/QuickConnectionRegistry.java @@ -0,0 +1,60 @@ +package com.sshmanager.service; + +import com.sshmanager.entity.Connection; +import org.springframework.stereotype.Component; + +import java.time.Instant; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicLong; + +/** + * In-memory registry for quick-connect (ephemeral) SSH connections. + * Entries are NOT persisted to the database and are cleaned up + * when the WebSocket session closes. + */ +@Component +public class QuickConnectionRegistry { + + private final AtomicLong idGen = new AtomicLong(10_000_000); + private final Map entries = new ConcurrentHashMap<>(); + + public Connection create(String host, String username, int port, Long userId) { + long id = idGen.incrementAndGet(); + Connection conn = new Connection(); + conn.setId(id); + conn.setUserId(userId); + conn.setName(host + "-quick"); + conn.setHost(host); + conn.setPort(port); + conn.setUsername(username); + conn.setAuthType(Connection.AuthType.PASSWORD); + conn.setEncryptedPassword(null); + conn.setCreatedAt(Instant.now()); + conn.setUpdatedAt(Instant.now()); + entries.put(id, new Entry(conn)); + return conn; + } + + public Connection get(Long id) { + Entry entry = entries.get(id); + return entry != null ? entry.connection : null; + } + + public void remove(Long id) { + entries.remove(id); + } + + public int size() { + return entries.size(); + } + + private static class Entry { + final Connection connection; + final long createdAt = System.currentTimeMillis(); + + Entry(Connection connection) { + this.connection = connection; + } + } +} diff --git a/backend/src/main/java/com/sshmanager/service/QuickCredentialRegistry.java b/backend/src/main/java/com/sshmanager/service/QuickCredentialRegistry.java new file mode 100644 index 0000000..7132f57 --- /dev/null +++ b/backend/src/main/java/com/sshmanager/service/QuickCredentialRegistry.java @@ -0,0 +1,87 @@ +package com.sshmanager.service; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +/** + * One-time credential tokens for quick-connect SSH passwords. + * + * A token is generated per quick-connect request, bound to a specific + * (userId, connectionId) pair, and can be consumed exactly once. + * Tokens expire after TTL seconds to limit the window of exposure. + */ +@Component +public class QuickCredentialRegistry { + + private static final Logger log = LoggerFactory.getLogger(QuickCredentialRegistry.class); + private static final long TTL_MILLIS = 60_000; // 60 seconds + + private final Map tokens = new ConcurrentHashMap<>(); + + /** + * Create a token for the given credentials. + * Returns the token string. + */ + public String create(Long userId, Long connectionId, String password) { + String token = UUID.randomUUID().toString().replace("-", ""); + tokens.put(token, new Entry(userId, connectionId, password)); + return token; + } + + /** + * Consume (read-once + delete) a credential token. + * Returns null if token is invalid, expired, or already consumed. + * Validates that userId and connectionId match. + */ + public String consume(String token, Long userId, Long connectionId) { + Entry entry = tokens.remove(token); + if (entry == null) { + log.warn("Credential token not found or already consumed"); + return null; + } + if (!entry.userId.equals(userId) || !entry.connectionId.equals(connectionId)) { + log.warn("Credential token userId/connectionId mismatch"); + return null; + } + if (System.currentTimeMillis() - entry.createdAt > TTL_MILLIS) { + log.warn("Credential token expired"); + return null; + } + return entry.password; + } + + /** + * Force-invalidate a token (used on connection failure). + */ + public void invalidate(String token) { + tokens.remove(token); + } + + @Scheduled(fixedDelay = 30_000) + public void evictExpired() { + long now = System.currentTimeMillis(); + tokens.entrySet().removeIf(e -> now - e.getValue().createdAt > TTL_MILLIS); + if (!tokens.isEmpty()) { + log.debug("Credential pool: {} active tokens", tokens.size()); + } + } + + private static class Entry { + final Long userId; + final Long connectionId; + final String password; + final long createdAt = System.currentTimeMillis(); + + Entry(Long userId, Long connectionId, String password) { + this.userId = userId; + this.connectionId = connectionId; + this.password = password; + } + } +} diff --git a/backend/src/main/java/com/sshmanager/service/SftpService.java b/backend/src/main/java/com/sshmanager/service/SftpService.java index 92ef06c..322cc45 100644 --- a/backend/src/main/java/com/sshmanager/service/SftpService.java +++ b/backend/src/main/java/com/sshmanager/service/SftpService.java @@ -1,5 +1,6 @@ package com.sshmanager.service; +import com.jcraft.jsch.ChannelExec; import com.jcraft.jsch.ChannelSftp; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; @@ -10,7 +11,10 @@ import com.sshmanager.entity.Connection; import com.sshmanager.util.JschUtil; import org.springframework.stereotype.Service; +import java.io.BufferedReader; +import java.io.ByteArrayOutputStream; import java.io.InputStream; +import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PipedInputStream; import java.io.PipedOutputStream; @@ -439,4 +443,108 @@ public class SftpService { throw e; } } + + // ── Online file editor: read file content (maxSize limit) ── + public String readFileContent(Connection conn, String password, String privateKey, + String passphrase, String path, long maxSize) throws Exception { + SftpSession sftpSession = connect(conn, password, privateKey, passphrase); + try { + SftpATTRS attrs = sftpSession.getChannel().stat(path); + if (attrs.getSize() > maxSize) { + throw new IllegalArgumentException("File too large (max " + (maxSize / 1024 / 1024) + "MB)"); + } + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + sftpSession.getChannel().get(path, baos); + return baos.toString("UTF-8"); + } finally { + sftpSession.disconnect(); + } + } + + // ── Online file editor: write file content ── + public void writeFileContent(Connection conn, String password, String privateKey, + String passphrase, String path, String content) throws Exception { + SftpSession sftpSession = connect(conn, password, privateKey, passphrase); + try { + sftpSession.getChannel().put( + new java.io.ByteArrayInputStream(content.getBytes("UTF-8")), path, ChannelSftp.OVERWRITE); + } finally { + sftpSession.disconnect(); + } + } + + // ── Remote compress via SSH exec ── + public String compressRemote(Connection conn, String password, String privateKey, + String passphrase, String path, String format) throws Exception { + String outputName = path.replaceAll("/+$", "") + (".zip".equalsIgnoreCase(format) ? ".zip" : ".tar.gz"); + String cmd; + if ("zip".equalsIgnoreCase(format)) { + cmd = "cd /tmp && zip -r " + shellQuote(outputName) + " " + shellQuote(path) + " 2>&1"; + } else { + cmd = "tar -czf " + shellQuote(outputName) + " -C $(dirname " + shellQuote(path) + ") $(basename " + shellQuote(path) + ") 2>&1"; + } + Session session = JschUtil.createSession(conn, password, privateKey, passphrase); + try { + ChannelExec channel = (ChannelExec) session.openChannel("exec"); + channel.setCommand(cmd); + InputStream in = channel.getInputStream(); + ByteArrayOutputStream err = new ByteArrayOutputStream(); + channel.setErrStream(err, true); + channel.connect(10000); + String output = readStreamFully(in); + channel.disconnect(); + if (channel.getExitStatus() != 0) { + throw new RuntimeException("Compression failed: " + err.toString("UTF-8")); + } + return output.trim(); + } finally { + session.disconnect(); + } + } + + // ── Remote decompress via SSH exec ── + public String decompressRemote(Connection conn, String password, String privateKey, + String passphrase, String path, String targetDir) throws Exception { + String lower = path.toLowerCase(); + String cmd; + if (lower.endsWith(".tar.gz") || lower.endsWith(".tgz")) { + cmd = "mkdir -p " + shellQuote(targetDir) + " && tar -xzf " + shellQuote(path) + " -C " + shellQuote(targetDir) + " 2>&1"; + } else if (lower.endsWith(".zip")) { + cmd = "mkdir -p " + shellQuote(targetDir) + " && unzip -o " + shellQuote(path) + " -d " + shellQuote(targetDir) + " 2>&1"; + } else { + throw new IllegalArgumentException("Unsupported format (supported: .tar.gz, .tgz, .zip)"); + } + Session session = JschUtil.createSession(conn, password, privateKey, passphrase); + try { + ChannelExec channel = (ChannelExec) session.openChannel("exec"); + channel.setCommand(cmd); + InputStream in = channel.getInputStream(); + ByteArrayOutputStream err = new ByteArrayOutputStream(); + channel.setErrStream(err, true); + channel.connect(10000); + String output = readStreamFully(in); + channel.disconnect(); + if (channel.getExitStatus() != 0) { + throw new RuntimeException("Decompression failed: " + err.toString("UTF-8")); + } + return output.trim(); + } finally { + session.disconnect(); + } + } + + private String readStreamFully(InputStream in) throws Exception { + BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8")); + StringBuilder sb = new StringBuilder(); + String line; + while ((line = reader.readLine()) != null) { + if (sb.length() > 0) sb.append("\n"); + sb.append(line); + } + return sb.toString(); + } + + private String shellQuote(String value) { + return "'" + value.replace("'", "'\"'\"'") + "'"; + } } diff --git a/backend/src/main/java/com/sshmanager/service/WebhookService.java b/backend/src/main/java/com/sshmanager/service/WebhookService.java new file mode 100644 index 0000000..ee45330 --- /dev/null +++ b/backend/src/main/java/com/sshmanager/service/WebhookService.java @@ -0,0 +1,97 @@ +package com.sshmanager.service; + +import com.sshmanager.entity.WebhookConfig; +import com.sshmanager.repository.WebhookConfigRepository; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.stream.Collectors; + +@Service +public class WebhookService { + + private static final Logger log = LoggerFactory.getLogger(WebhookService.class); + private final WebhookConfigRepository repository; + + public WebhookService(WebhookConfigRepository repository) { + this.repository = repository; + } + + public List listByUser(Long userId) { + return repository.findByUserIdAndEnabledTrue(userId); + } + + public WebhookConfig create(Long userId, String url, String eventType) { + WebhookConfig wc = new WebhookConfig(); + wc.setUserId(userId); + wc.setUrl(url); + wc.setEventType(eventType); + wc.setEnabled(true); + return repository.save(wc); + } + + public void delete(Long id, Long userId) { + repository.findById(id).ifPresent(wc -> { + if (wc.getUserId().equals(userId)) repository.delete(wc); + }); + } + + /** + * Check if a webhook's configured event type matches the fired event. + * Supports "*" for all events, or exact match. + */ + static boolean matchesEventType(String configType, String firedType) { + if (configType == null || firedType == null) return false; + if ("*".equals(configType.trim())) return true; + return configType.trim().equals(firedType); + } + + @Async + public void fireEvent(String eventType, String title, String message) { + fireEventForUser(null, eventType, title, message); + } + + @Async + public void fireEventForUser(Long userId, String eventType, String title, String message) { + List hooks = repository.findAll().stream() + .filter(w -> Boolean.TRUE.equals(w.getEnabled())) + .filter(w -> matchesEventType(w.getEventType(), eventType)) + .filter(w -> userId == null || userId.equals(w.getUserId())) + .collect(Collectors.toList()); + + if (hooks.isEmpty()) { + log.debug("No webhooks configured for event type: {}", eventType); + return; + } + + for (WebhookConfig hook : hooks) { + try { + URL url = new URL(hook.getUrl()); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setRequestProperty("Content-Type", "application/json"); + conn.setDoOutput(true); + + String json = String.format( + "{\"msgtype\":\"text\",\"text\":{\"content\":\"[SSH Manager] %s\\n%s\"}}", + title, message + ); + + try (OutputStream os = conn.getOutputStream()) { + os.write(json.getBytes(StandardCharsets.UTF_8)); + } + conn.getResponseCode(); + conn.disconnect(); + } catch (Exception e) { + log.warn("Webhook call failed for {}: {}", hook.getUrl(), e.getMessage()); + } + } + } +} diff --git a/backend/src/main/java/com/sshmanager/util/JschUtil.java b/backend/src/main/java/com/sshmanager/util/JschUtil.java index 05c4b6d..6911392 100644 --- a/backend/src/main/java/com/sshmanager/util/JschUtil.java +++ b/backend/src/main/java/com/sshmanager/util/JschUtil.java @@ -62,13 +62,15 @@ public final class JschUtil { + "diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1"); if (conn.getAuthType() == Connection.AuthType.PASSWORD) { - if (password == null || password.isEmpty()) { - throw new IllegalArgumentException( - "SSH authentication failed: password is empty. Please check the connection password configuration."); + if (password == null || password.isEmpty() || "__quick__".equals(password)) { + // No stored password — use keyboard-interactive so the user is prompted + session.setConfig("PreferredAuthentications", "keyboard-interactive"); + session.setUserInfo(new PasswordAuth("")); + } else { + session.setConfig("PreferredAuthentications", "password,keyboard-interactive"); + session.setPassword(password); + session.setUserInfo(new PasswordAuth(password)); } - session.setConfig("PreferredAuthentications", "password,keyboard-interactive"); - session.setPassword(password); - session.setUserInfo(new PasswordAuth(password)); } else { session.setConfig("PreferredAuthentications", "publickey"); } diff --git a/backend/src/main/resources/static/assets/DashboardPage-BQqMAlQh.js b/backend/src/main/resources/static/assets/DashboardPage-BQqMAlQh.js new file mode 100644 index 0000000..9c08276 --- /dev/null +++ b/backend/src/main/resources/static/assets/DashboardPage-BQqMAlQh.js @@ -0,0 +1 @@ +import{c as B,r as o,j as e}from"./index-Z2D8CQl5.js";import{l as L,M as $,S as P,A as I,c as _,g as A}from"./monitor-D01QXMh7.js";const D=[["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M17 20v2",key:"1rnc9c"}],["path",{d:"M17 2v2",key:"11trls"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M2 17h2",key:"7oei6x"}],["path",{d:"M2 7h2",key:"asdhe0"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"M20 17h2",key:"1fpfkl"}],["path",{d:"M20 7h2",key:"1o8tra"}],["path",{d:"M7 20v2",key:"4gnj0m"}],["path",{d:"M7 2v2",key:"1i4yhu"}],["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2",key:"1vbyd7"}],["rect",{x:"8",y:"8",width:"8",height:"8",rx:"1",key:"z9xiuo"}]],F=B("cpu",D);const R=[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M2 8.82a15 15 0 0 1 20 0",key:"dnpr2z"}],["path",{d:"M5 12.859a10 10 0 0 1 14 0",key:"1x1e6c"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}]],z=B("wifi",R);function G({data:s,color:r}){if(s.length<2)return null;const g=Math.max(...s,1),m=Math.min(...s,0),f=g-m||1,u=120,i=32,p=s.map((N,v)=>`${v/(s.length-1)*u},${i-(N-m)/f*(i-4)-2}`).join(" ");return e.jsx("svg",{width:u,height:i,className:"shrink-0",children:e.jsx("polyline",{fill:"none",stroke:r,strokeWidth:"1.5",points:p})})}function k({value:s,label:r,color:g}){const i=2*Math.PI*28,p=i-s/100*i;return e.jsxs("div",{className:"flex flex-col items-center",children:[e.jsxs("svg",{width:"64",height:"64",viewBox:"0 0 64 64",children:[e.jsx("circle",{cx:32,cy:32,r:28,fill:"none",stroke:"rgba(148,163,184,0.1)",strokeWidth:"5"}),e.jsx("circle",{cx:32,cy:32,r:28,fill:"none",stroke:g,strokeWidth:"5",strokeDasharray:i,strokeDashoffset:p,strokeLinecap:"round",transform:"rotate(-90 32 32)"}),e.jsxs("text",{x:32,y:32,textAnchor:"middle",dominantBaseline:"central",fill:"#e2e8f0",fontSize:"11",fontWeight:"600",children:[Math.round(s),"%"]})]}),e.jsx("span",{className:"mt-1 text-[10px] text-content-dim",children:r})]})}function K({onBack:s}){const[r,g]=o.useState([]),[m,f]=o.useState({}),[u,i]=o.useState({}),[p,N]=o.useState({}),[v,E]=o.useState(!0),[W,b]=o.useState(!1),[n,y]=o.useState(null);o.useEffect(()=>{let t=!1;return(async()=>{try{const h=await L();if(t)return;const c=h.data;g(c),c.length>0&&!n&&y(c[0].id)}catch{}finally{t||E(!1)}})(),()=>{t=!0}},[]),o.useEffect(()=>{if(!n)return;let t=!1;const h=async()=>{b(!0),f(l=>({...l,[n]:"checking"}));try{const l=await _([n]);if(t)return;const d=l.data.results[0]?.status??"unknown";if(f(x=>({...x,[n]:d})),d!=="online"){i(x=>{const C={...x};return delete C[n],C});return}const M=await A(n);if(t)return;i(x=>({...x,[n]:M.data}));const S=M.data.cpuUsage;S!=null&&N(x=>({...x,[n]:[...(x[n]||[]).slice(-29),S]}))}catch{t||(f(l=>({...l,[n]:"unknown"})),i(l=>{const d={...l};return delete d[n],d}))}finally{t||b(!1)}};h();const c=window.setInterval(h,5e3);return()=>{t=!0,window.clearInterval(c)}},[n]);const w=o.useMemo(()=>{const t={online:0,offline:0,unknown:0};return r.forEach(h=>{const c=m[h.id];c==="online"?t.online++:c==="offline"?t.offline++:t.unknown++}),t},[r,m]),j=r.find(t=>t.id===n),a=n?u[n]:null;return e.jsxs("div",{className:"flex h-screen flex-col overflow-hidden bg-surface-app",children:[e.jsxs("header",{className:"flex h-12 items-center justify-between shrink-0 px-4 border-b border-border-main bg-surface-panel/60",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("button",{onClick:s,className:"flex items-center gap-1.5 text-xs font-medium transition hover:brightness-150 text-cyan-500",children:[e.jsx("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:e.jsx("path",{d:"m15 18-6-6 6-6"})}),"返回工作台"]}),e.jsx("div",{className:"h-4 w-px bg-border-main"}),e.jsx($,{size:16,className:"text-cyan-500"}),e.jsx("h1",{className:"text-sm font-semibold text-content-main",children:"监控仪表盘"})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("span",{className:"flex items-center gap-1.5 text-xs text-content-main",children:[e.jsx("span",{className:"h-2 w-2 rounded-full bg-emerald-500"}),"在线 ",w.online]}),e.jsxs("span",{className:"flex items-center gap-1.5 text-xs text-content-main",children:[e.jsx("span",{className:"h-2 w-2 rounded-full bg-red-500"}),"离线 ",w.offline]}),e.jsxs("span",{className:"flex items-center gap-1.5 text-xs text-content-dim",children:["共 ",r.length," 台"]})]})]}),v?e.jsx("div",{className:"flex flex-1 items-center justify-center text-xs text-content-dim",children:"加载中..."}):r.length===0?e.jsxs("div",{className:"flex flex-1 flex-col items-center justify-center",children:[e.jsx($,{size:48,className:"text-cyan-500/15"}),e.jsx("p",{className:"mt-3 text-sm text-content-dim",children:"暂无连接,请先创建 SSH 连接"})]}):e.jsxs("div",{className:"flex flex-1 overflow-hidden",children:[e.jsx("aside",{className:"w-56 shrink-0 overflow-auto p-2 border-r border-border-main",children:r.map(t=>{const c=m[t.id]==="online",l=u[t.id],d=n===t.id;return e.jsxs("button",{onClick:()=>y(t.id),className:`w-full rounded-lg px-3 py-2 text-left text-xs transition-all mb-0.5 ${d?"bg-cyan-500/5 border border-cyan-500/20":"border border-transparent hover:bg-surface-muted"}`,children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:`h-1.5 w-1.5 shrink-0 rounded-full ${c?"bg-emerald-500":"bg-content-dim"}`}),e.jsx("span",{className:`truncate font-medium ${d?"text-content-main":"text-content-muted"}`,children:t.name})]}),c&&l?e.jsxs("div",{className:"mt-1 flex gap-2 text-[10px] text-content-dim",children:[e.jsxs("span",{children:["CPU ",l.cpuUsage??"-","%"]}),e.jsxs("span",{children:["MEM ",l.memUsage??"-","%"]})]}):null]},t.id)})}),e.jsx("main",{className:"flex-1 overflow-auto p-5",children:j&&a?e.jsxs("div",{className:"space-y-5",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-base font-semibold text-content-main",children:j.name}),e.jsxs("p",{className:"text-xs mt-0.5 text-content-dim",children:[j.host,":",j.port]})]}),e.jsxs("div",{className:"flex gap-6 flex-wrap",children:[e.jsx(k,{value:a.cpuUsage??0,label:"CPU",color:"#22d3ee"}),e.jsx(k,{value:a.memUsage??0,label:"内存",color:"#818cf8"}),e.jsx(k,{value:a.diskUsage??0,label:"磁盘",color:"#34d399"})]}),e.jsxs("div",{className:"rounded-xl p-4 bg-surface-panel/40 border border-border-main",children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("span",{className:"text-xs font-medium text-content-muted",children:"CPU 历史 (最近30s)"}),e.jsxs("div",{className:"flex gap-4 text-[10px] text-content-dim",children:[e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(F,{size:10})," 负载: ",a.load1??"-"]}),e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(P,{size:10})," 核数: ",a.cpuCores??"-"]}),e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(I,{size:10})," 运行: ",a.uptime??"-"]})]})]}),(p[n]?.length??0)>=2?e.jsx(G,{data:p[n],color:"#22d3ee"}):e.jsx("div",{className:"h-8 flex items-center text-[10px] text-content-dim",children:"采集数据中..."})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"rounded-xl p-4 bg-surface-panel/40 border border-border-main",children:[e.jsx("div",{className:"text-xs font-medium mb-2 text-content-muted",children:"内存详情"}),e.jsxs("div",{className:"text-lg font-semibold text-content-main",children:[U(a.memUsed??0)," / ",U(a.memTotal??0)]}),e.jsx("div",{className:"text-[10px] mt-0.5 text-content-dim",children:"已用 / 总量"})]}),e.jsxs("div",{className:"rounded-xl p-4 bg-surface-panel/40 border border-border-main",children:[e.jsx("div",{className:"text-xs font-medium mb-2 text-content-muted",children:"磁盘使用"}),e.jsx("div",{className:"text-lg font-semibold text-content-main",children:a.diskUsage!=null?`${a.diskUsage}%`:"-"}),e.jsx("div",{className:"text-[10px] mt-0.5 text-content-dim",children:"根分区"})]})]})]}):j&&W?e.jsxs("div",{className:"flex flex-1 items-center justify-center h-full text-xs text-content-dim",children:[e.jsx(z,{size:32,className:"mr-3 animate-pulse text-cyan-500/30"}),"正在采集当前主机数据..."]}):j&&!a?e.jsxs("div",{className:"flex flex-1 items-center justify-center h-full text-xs text-content-dim",children:[e.jsx(z,{size:32,className:"mr-3 text-red-500/30"}),"该主机处于离线或无法获取监控数据"]}):null})]})]})}function U(s){return s==null||Number.isNaN(s)?"-":s<1024?`${s} B`:s<1024*1024?`${(s/1024).toFixed(0)} KB`:s<1024*1024*1024?`${(s/(1024*1024)).toFixed(0)} MB`:`${(s/(1024*1024*1024)).toFixed(1)} GB`}export{K as default}; diff --git a/backend/src/main/resources/static/assets/Modal-DTj05goU.js b/backend/src/main/resources/static/assets/Modal-DTj05goU.js new file mode 100644 index 0000000..afc06ad --- /dev/null +++ b/backend/src/main/resources/static/assets/Modal-DTj05goU.js @@ -0,0 +1 @@ +import{c as r,j as e}from"./index-Z2D8CQl5.js";const l=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]],m=r("circle-alert",l);const o=[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],b=r("trash-2",o);const i=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],x=r("x",i);function h({title:c,onClose:t,children:d,footer:a,maxWidth:s="max-w-3xl",open:n=!0}){return n?e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/70 p-4 backdrop-blur-sm",children:e.jsxs("div",{className:`flex max-h-[92vh] w-full flex-col overflow-hidden rounded-3xl border border-border-main bg-surface-card ${s}`,children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-border-subtle bg-surface-card/90 px-5 py-4",children:[e.jsx("h3",{className:"text-lg font-medium text-content-main",children:c}),t?e.jsx("button",{onClick:t,className:"rounded-xl border border-border-main bg-surface-muted p-2 text-content-muted transition hover:text-content-main",children:e.jsx(x,{size:18})}):null]}),e.jsx("div",{className:"flex-1 overflow-y-auto p-6",children:d}),a?e.jsx("div",{className:"flex justify-end gap-3 border-t border-border-subtle bg-surface-card/90 px-5 py-4",children:a}):null]})}):null}export{m as C,h as M,b as T,x as X}; diff --git a/backend/src/main/resources/static/assets/UserManagementPage-CpLFrodx.js b/backend/src/main/resources/static/assets/UserManagementPage-CpLFrodx.js new file mode 100644 index 0000000..f8b3152 --- /dev/null +++ b/backend/src/main/resources/static/assets/UserManagementPage-CpLFrodx.js @@ -0,0 +1 @@ +import{c as i,h as m,u as H,r as s,j as e,U as J}from"./index-Z2D8CQl5.js";import{C as Q,T as X,M as N}from"./Modal-DTj05goU.js";const Y=[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]],Z=i("chevron-left",Y);const ee=[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]],te=i("key-round",ee);const se=[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]],ne=i("pencil",se);const ae=[["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M5 5a1 1 0 0 0-1 1v7c0 5 3.5 7.5 7.67 8.94a1 1 0 0 0 .67.01c2.35-.82 4.48-1.97 5.9-3.71",key:"1jlk70"}],["path",{d:"M9.309 3.652A12.252 12.252 0 0 0 11.24 2.28a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1v7a9.784 9.784 0 0 1-.08 1.264",key:"18rp1v"}]],re=i("shield-off",ae);const oe=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]],le=i("shield",oe);function ce(){return m.get("/users")}function de(a){return m.post("/users",a)}function ie(a,d){return m.put(`/users/${a}`,d)}function me(a){return m.delete(`/users/${a}`)}function xe(a,d){return m.post(`/users/${a}/reset-password`,{newPassword:d})}function pe({onBack:a}){const{user:d}=H(),[U,P]=s.useState([]),[F,E]=s.useState(!0),[R,_]=s.useState(null),[$,v]=s.useState(!1),[x,w]=s.useState(null),[u,k]=s.useState(null),[h,p]=s.useState(null),[C,M]=s.useState(""),[S,z]=s.useState(""),[b,f]=s.useState(""),[y,g]=s.useState("ROLE_USER"),[L,D]=s.useState(!0),[j,A]=s.useState(""),[r,o]=s.useState(!1),[l,n]=s.useState(null),c=s.useCallback(async()=>{E(!0),_(null);try{const t=await ce();P(t.data)}catch(t){_(t.response?.data?.message||"加载用户列表失败")}finally{E(!1)}},[]);s.useEffect(()=>{c()},[c]);function I(){M(""),z(""),f(""),g("ROLE_USER"),n(null),v(!0)}function W(t){w(t),f(t.displayName||""),g(t.role),D(t.enabled),n(null)}function T(t){k(t),A(""),n(null)}async function V(){o(!0),n(null);try{const t={username:C.trim(),password:S,displayName:b.trim()||void 0,role:y};await de(t),v(!1),await c()}catch(t){n(t.response?.data?.message||"创建用户失败")}finally{o(!1)}}async function K(){if(x){o(!0),n(null);try{const t={displayName:b.trim()||void 0,role:y,enabled:L};await ie(x.id,t),w(null),await c()}catch(t){n(t.response?.data?.message||"更新用户失败")}finally{o(!1)}}}async function q(){if(h){o(!0),n(null);try{await me(h.id),p(null),await c()}catch(t){n(t.response?.data?.message||"删除用户失败")}finally{o(!1)}}}async function B(){if(u){if(j.length<8){n("密码至少需要 8 个字符");return}o(!0),n(null);try{await xe(u.id,j),k(null)}catch(t){n(t.response?.data?.message||"重置密码失败")}finally{o(!1)}}}function G(t){try{return new Date(t).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return"-"}}return e.jsxs("div",{className:"flex h-screen flex-col bg-surface-app text-content-main",children:[e.jsxs("header",{className:"flex h-14 items-center justify-between border-b border-border-main bg-surface-panel px-4",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("button",{className:"flex items-center gap-1 rounded-md px-2 py-1 text-sm text-content-muted transition hover:text-content-main",onClick:a,children:[e.jsx(Z,{size:18}),"返回"]}),e.jsx("div",{className:"h-6 w-px bg-border-main"}),e.jsx("h1",{className:"text-lg font-semibold tracking-wide text-blue-400",children:"用户管理"})]}),e.jsxs("button",{className:"flex items-center gap-2 rounded-xl bg-gradient-to-r from-cyan-500 to-blue-600 px-4 py-2 text-sm font-medium text-white shadow-lg shadow-cyan-900/30 transition hover:from-cyan-400 hover:to-blue-500",onClick:I,children:[e.jsx(J,{size:16}),"新建用户"]})]}),e.jsx("div",{className:"flex-1 overflow-auto p-6",children:F?e.jsx("div",{className:"flex items-center justify-center py-20 text-content-dim",children:"加载中..."}):R?e.jsxs("div",{className:"flex items-center justify-center gap-2 py-20 text-red-400",children:[e.jsx(Q,{size:18}),R,e.jsx("button",{className:"ml-2 underline hover:text-red-300",onClick:()=>{c()},children:"重试"})]}):e.jsx("div",{className:"overflow-hidden rounded-2xl border border-border-main bg-surface-panel/60",children:e.jsxs("table",{className:"w-full text-left text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b border-border-main bg-surface-panel/80",children:[e.jsx("th",{className:"px-5 py-3.5 font-medium text-content-muted",children:"ID"}),e.jsx("th",{className:"px-5 py-3.5 font-medium text-content-muted",children:"用户名"}),e.jsx("th",{className:"px-5 py-3.5 font-medium text-content-muted",children:"显示名"}),e.jsx("th",{className:"px-5 py-3.5 font-medium text-content-muted",children:"角色"}),e.jsx("th",{className:"px-5 py-3.5 font-medium text-content-muted",children:"状态"}),e.jsx("th",{className:"px-5 py-3.5 font-medium text-content-muted",children:"创建时间"}),e.jsx("th",{className:"px-5 py-3.5 font-medium text-content-muted",children:"操作"})]})}),e.jsx("tbody",{children:U.length===0?e.jsx("tr",{children:e.jsx("td",{colSpan:7,className:"px-5 py-16 text-center text-content-dim",children:"暂无用户"})}):U.map(t=>{const O=d?.username===t.username;return e.jsxs("tr",{className:"border-b border-border-subtle transition hover:bg-surface-muted",children:[e.jsx("td",{className:"px-5 py-3.5 text-content-dim",children:t.id}),e.jsxs("td",{className:"px-5 py-3.5 font-medium text-content-main",children:[t.username,O&&e.jsx("span",{className:"ml-2 rounded bg-blue-500/15 px-1.5 py-0.5 text-xs text-blue-400",children:"当前"})]}),e.jsx("td",{className:"px-5 py-3.5 text-content-muted",children:t.displayName||"-"}),e.jsx("td",{className:"px-5 py-3.5",children:e.jsx("span",{className:`inline-block rounded-full px-2.5 py-0.5 text-xs font-medium ${t.role==="ROLE_ADMIN"?"bg-amber-500/15 text-amber-400":"bg-surface-muted text-content-muted"}`,children:t.role==="ROLE_ADMIN"?"管理员":"普通用户"})}),e.jsx("td",{className:"px-5 py-3.5",children:t.enabled?e.jsxs("span",{className:"flex items-center gap-1.5 text-emerald-400",children:[e.jsx(le,{size:14}),"启用"]}):e.jsxs("span",{className:"flex items-center gap-1.5 text-red-400",children:[e.jsx(re,{size:14}),"禁用"]})}),e.jsx("td",{className:"px-5 py-3.5 text-content-dim",children:G(t.createdAt)}),e.jsx("td",{className:"px-5 py-3.5",children:e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx("button",{className:"rounded-lg p-1.5 text-content-muted transition hover:bg-surface-muted hover:text-content-main",title:"编辑",onClick:()=>W(t),children:e.jsx(ne,{size:15})}),e.jsx("button",{className:"rounded-lg p-1.5 text-content-muted transition hover:bg-surface-muted hover:text-amber-400",title:"重置密码",onClick:()=>T(t),children:e.jsx(te,{size:15})}),!O&&e.jsx("button",{className:"rounded-lg p-1.5 text-content-muted transition hover:bg-surface-muted hover:text-red-400",title:"删除",onClick:()=>{n(null),p(t)},children:e.jsx(X,{size:15})})]})})]},t.id)})})]})})}),e.jsx(N,{title:"新建用户",open:$,onClose:()=>v(!1),maxWidth:"max-w-md",children:e.jsxs("div",{className:"space-y-4",children:[e.jsxs("label",{className:"block space-y-1.5",children:[e.jsx("span",{className:"text-sm text-content-muted",children:"用户名 *"}),e.jsx("input",{className:"w-full rounded-xl border border-border-main bg-surface-control px-4 py-2.5 text-sm text-content-main outline-none transition focus:border-cyan-500 focus:ring-2 focus:ring-cyan-500/20",value:C,onChange:t=>M(t.target.value),placeholder:"登录用户名"})]}),e.jsxs("label",{className:"block space-y-1.5",children:[e.jsx("span",{className:"text-sm text-content-muted",children:"密码 *"}),e.jsx("input",{type:"password",className:"w-full rounded-xl border border-border-main bg-surface-control px-4 py-2.5 text-sm text-content-main outline-none transition focus:border-cyan-500 focus:ring-2 focus:ring-cyan-500/20",value:S,onChange:t=>z(t.target.value),placeholder:"至少 8 个字符"})]}),e.jsxs("label",{className:"block space-y-1.5",children:[e.jsx("span",{className:"text-sm text-content-muted",children:"显示名"}),e.jsx("input",{className:"w-full rounded-xl border border-border-main bg-surface-control px-4 py-2.5 text-sm text-content-main outline-none transition focus:border-cyan-500 focus:ring-2 focus:ring-cyan-500/20",value:b,onChange:t=>f(t.target.value),placeholder:"用户显示名称(选填)"})]}),e.jsxs("label",{className:"block space-y-1.5",children:[e.jsx("span",{className:"text-sm text-content-muted",children:"角色"}),e.jsxs("select",{className:"w-full rounded-xl border border-border-main bg-surface-control px-4 py-2.5 text-sm text-content-main outline-none transition focus:border-cyan-500 focus:ring-2 focus:ring-cyan-500/20",value:y,onChange:t=>g(t.target.value),children:[e.jsx("option",{value:"ROLE_USER",children:"普通用户"}),e.jsx("option",{value:"ROLE_ADMIN",children:"管理员"})]})]}),l&&e.jsx("div",{className:"rounded-xl border border-red-500/25 bg-red-500/10 px-4 py-3 text-sm text-red-300",children:l}),e.jsx("button",{className:"w-full rounded-xl bg-gradient-to-r from-cyan-500 to-blue-600 px-4 py-2.5 text-sm font-medium text-white shadow-lg shadow-cyan-900/30 transition hover:from-cyan-400 hover:to-blue-500 disabled:cursor-not-allowed disabled:opacity-60",disabled:r||!C.trim()||S.length<8,onClick:()=>{V()},children:r?"创建中...":"创建"})]})}),e.jsx(N,{title:"编辑用户",open:!!x,onClose:()=>w(null),maxWidth:"max-w-md",children:e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"rounded-xl border border-border-main bg-surface-muted px-4 py-2.5 text-sm text-content-muted",children:["用户名: ",e.jsx("span",{className:"text-content-main",children:x?.username})]}),e.jsxs("label",{className:"block space-y-1.5",children:[e.jsx("span",{className:"text-sm text-content-muted",children:"显示名"}),e.jsx("input",{className:"w-full rounded-xl border border-border-main bg-surface-control px-4 py-2.5 text-sm text-content-main outline-none transition focus:border-cyan-500 focus:ring-2 focus:ring-cyan-500/20",value:b,onChange:t=>f(t.target.value)})]}),e.jsxs("label",{className:"block space-y-1.5",children:[e.jsx("span",{className:"text-sm text-content-muted",children:"角色"}),e.jsxs("select",{className:"w-full rounded-xl border border-border-main bg-surface-control px-4 py-2.5 text-sm text-content-main outline-none transition focus:border-cyan-500 focus:ring-2 focus:ring-cyan-500/20",value:y,onChange:t=>g(t.target.value),children:[e.jsx("option",{value:"ROLE_USER",children:"普通用户"}),e.jsx("option",{value:"ROLE_ADMIN",children:"管理员"})]})]}),e.jsxs("label",{className:"flex items-center gap-3",children:[e.jsx("input",{type:"checkbox",className:"h-4 w-4 rounded border-border-main bg-surface-control text-cyan-500 focus:ring-cyan-500/30",checked:L,onChange:t=>D(t.target.checked)}),e.jsx("span",{className:"text-sm text-content-muted",children:"账号已启用"})]}),l&&e.jsx("div",{className:"rounded-xl border border-red-500/25 bg-red-500/10 px-4 py-3 text-sm text-red-300",children:l}),e.jsx("button",{className:"w-full rounded-xl bg-gradient-to-r from-cyan-500 to-blue-600 px-4 py-2.5 text-sm font-medium text-white shadow-lg shadow-cyan-900/30 transition hover:from-cyan-400 hover:to-blue-500 disabled:cursor-not-allowed disabled:opacity-60",disabled:r,onClick:()=>{K()},children:r?"保存中...":"保存"})]})}),e.jsx(N,{title:"重置密码",open:!!u,onClose:()=>k(null),maxWidth:"max-w-md",children:e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"rounded-xl border border-border-main bg-surface-muted px-4 py-2.5 text-sm text-content-muted",children:["用户: ",e.jsx("span",{className:"text-content-main",children:u?.username})]}),e.jsx("p",{className:"text-xs text-amber-400",children:"重置后该用户下次登录将被要求修改密码。"}),e.jsxs("label",{className:"block space-y-1.5",children:[e.jsx("span",{className:"text-sm text-content-muted",children:"新密码 *"}),e.jsx("input",{type:"password",className:"w-full rounded-xl border border-border-main bg-surface-control px-4 py-2.5 text-sm text-content-main outline-none transition focus:border-cyan-500 focus:ring-2 focus:ring-cyan-500/20",value:j,onChange:t=>A(t.target.value),placeholder:"至少 8 个字符"})]}),l&&e.jsx("div",{className:"rounded-xl border border-red-500/25 bg-red-500/10 px-4 py-3 text-sm text-red-300",children:l}),e.jsx("button",{className:"w-full rounded-xl bg-gradient-to-r from-amber-500 to-orange-600 px-4 py-2.5 text-sm font-medium text-white shadow-lg shadow-amber-900/30 transition hover:from-amber-400 hover:to-orange-500 disabled:cursor-not-allowed disabled:opacity-60",disabled:r||j.length<8,onClick:()=>{B()},children:r?"重置中...":"确认重置"})]})}),e.jsx(N,{title:"确认删除",open:!!h,onClose:()=>p(null),maxWidth:"max-w-sm",children:e.jsxs("div",{className:"space-y-4",children:[e.jsxs("p",{className:"text-sm text-content-muted",children:["确定要删除用户 ",e.jsx("span",{className:"font-medium text-content-main",children:h?.username})," 吗?此操作不可撤销。"]}),l&&e.jsx("div",{className:"rounded-xl border border-red-500/25 bg-red-500/10 px-4 py-3 text-sm text-red-300",children:l}),e.jsxs("div",{className:"flex justify-end gap-3",children:[e.jsx("button",{className:"rounded-xl border border-border-main px-4 py-2 text-sm text-content-muted transition hover:bg-surface-muted",onClick:()=>p(null),children:"取消"}),e.jsx("button",{className:"rounded-xl bg-red-600 px-4 py-2 text-sm font-medium text-white transition hover:bg-red-500 disabled:cursor-not-allowed disabled:opacity-60",disabled:r,onClick:()=>{q()},children:r?"删除中...":"删除"})]})]})})]})}export{pe as default}; diff --git a/backend/src/main/resources/static/assets/WorkspacePage-B8Ud6Ns4.js b/backend/src/main/resources/static/assets/WorkspacePage-B8Ud6Ns4.js new file mode 100644 index 0000000..5d04ba0 --- /dev/null +++ b/backend/src/main/resources/static/assets/WorkspacePage-B8Ud6Ns4.js @@ -0,0 +1,17 @@ +import{c as ae,r as W,h as _e,j as a,T as lt,u as gs,a as er}from"./index-Z2D8CQl5.js";import{S as Ot,e as tr,M as ft,l as Kt,c as sr,A as rr,q as ir,g as nr,d as Vt,u as or,a as ar,t as lr}from"./monitor-D01QXMh7.js";import{M as Fe,T as _t,X as At,C as Gt}from"./Modal-DTj05goU.js";const cr=[["path",{d:"M17 3a2 2 0 0 1 2 2v15a1 1 0 0 1-1.496.868l-4.512-2.578a2 2 0 0 0-1.984 0l-4.512 2.578A1 1 0 0 1 5 20V5a2 2 0 0 1 2-2z",key:"oz39mx"}]],hr=ae("bookmark",cr);const dr=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],ct=ae("chevron-down",dr);const ur=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],bs=ae("chevron-right",ur);const fr=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],bt=ae("circle-check",fr);const _r=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]],mr=ae("circle-x",_r);const pr=[["path",{d:"M12 6v6l4 2",key:"mmk7yg"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]],vr=ae("clock",pr);const gr=[["path",{d:"M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3",key:"11bfej"}]],xs=ae("command",gr);const br=[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]],xr=ae("copy",br);const Sr=[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]],Xt=ae("download",Sr);const Cr=[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]],yr=ae("eye-off",Cr);const wr=[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],kr=ae("eye",wr);const Er=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]],Lr=ae("file-text",Er);const Dr=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M12 12v6",key:"3ahymv"}],["path",{d:"m15 15-3-3-3 3",key:"15xj92"}]],Mt=ae("file-up",Dr);const Rr=[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2",key:"usdka0"}]],Tr=ae("folder-open",Rr);const Ar=[["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"M9 13h6",key:"1uhe8q"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]],Mr=ae("folder-plus",Ar);const Nr=[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]],Qe=ae("folder",Nr);const Ir=[["line",{x1:"22",x2:"2",y1:"12",y2:"12",key:"1y58io"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}],["line",{x1:"6",x2:"6.01",y1:"16",y2:"16",key:"sgf278"}],["line",{x1:"10",x2:"10.01",y1:"16",y2:"16",key:"1l4acy"}]],jr=ae("hard-drive",Ir);const Br=[["path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71",key:"1cjeqo"}],["path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71",key:"19qd67"}]],Or=ae("link",Br);const Pr=[["path",{d:"M8 5h13",key:"1pao27"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 19h8",key:"c3s6r1"}],["path",{d:"M3 10a2 2 0 0 0 2 2h3",key:"1npucw"}],["path",{d:"M3 5v12a2 2 0 0 0 2 2h3",key:"x1gjn2"}]],Ss=ae("list-tree",Pr);const Hr=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],Cs=ae("loader-circle",Hr);const Fr=[["path",{d:"m16 17 5-5-5-5",key:"1bji2h"}],["path",{d:"M21 12H9",key:"dn1m92"}],["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}]],Wr=ae("log-out",Fr);const $r=[["path",{d:"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",key:"kfwtm"}]],zr=ae("moon",$r);const Ur=[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",key:"10ikf1"}]],qr=ae("play",Ur);const Kr=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]],mt=ae("plus",Kr);const Vr=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]],pt=ae("refresh-cw",Vr);const Gr=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],ys=ae("search",Gr);const Xr=[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],Yr=ae("settings",Xr);const Jr=[["path",{d:"M8 19H5c-1 0-2-1-2-2V7c0-1 1-2 2-2h3",key:"lubmu8"}],["path",{d:"M16 5h3c1 0 2 1 2 2v10c0 1-1 2-2 2h-3",key:"1ag34g"}],["line",{x1:"12",x2:"12",y1:"4",y2:"20",key:"1tx1rr"}]],Qr=ae("square-split-horizontal",Jr);const Zr=[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]],ei=ae("star",Zr);const ti=[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]],si=ae("sun",ti);const ri=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"6",key:"1vlfrh"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]],Yt=ae("target",ri);const ii=[["path",{d:"M12 3v12",key:"1x0j5s"}],["path",{d:"m17 8-5-5-5 5",key:"7q97r8"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}]],ht=ae("upload",ii);const ni=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],oi=ae("users",ni);const ai=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],Jt=ae("zap",ai);function wt(c,_){const[k,T]=W.useState(()=>{const O=localStorage.getItem(c);if(!O)return _;try{return JSON.parse(O)}catch{return _}});return W.useEffect(()=>{localStorage.setItem(c,JSON.stringify(k))},[c,k]),[k,T]}function de(...c){return c.filter(Boolean).join(" ")}function st(c){return c==null||Number.isNaN(c)?"-":c<1024?`${c} B`:c<1024*1024?`${(c/1024).toFixed(1)} KB`:c<1024*1024*1024?`${(c/(1024*1024)).toFixed(1)} MB`:`${(c/(1024*1024*1024)).toFixed(1)} GB`}function li(c){if(c==null||Number.isNaN(c))return"-";const _=new Date(c);if(Number.isNaN(_.getTime()))return"-";const k=String(_.getFullYear()),T=String(_.getMonth()+1).padStart(2,"0"),O=String(_.getDate()).padStart(2,"0"),H=String(_.getHours()).padStart(2,"0"),A=String(_.getMinutes()).padStart(2,"0"),r=String(_.getSeconds()).padStart(2,"0");return`${k}-${T}-${O} ${H}:${A}:${r}`}function ci(c){return c.directory?"drwxr-xr-x":"-rw-r--r--"}function ws(c){c.sort((_,k)=>{const T=_.connection?.pinned??!1,O=k.connection?.pinned??!1;return T!==O?T?-1:1:_.order-k.order||_.name.localeCompare(k.name)}),c.forEach(_=>ws(_.children))}function Pt(c){return c.slice().sort((_,k)=>_.pinned!==k.pinned?_.pinned?-1:1:_.name.localeCompare(k.name))}function ks(c,_){return`${c}-${_}`}function Ht(c,_,k,T){return{id:ks("connection",String(c.id)),type:"connection",name:c.name,parentId:_,order:k,connectionId:c.id,createdAt:T,updatedAt:T}}function Es(c,_){return!_||!c?!1:c.nodes.some(k=>k.id===_&&k.type==="folder")}function xt(c,_){return Es(c,_)?_:null}function vt(c,_,k){const T=c.filter(O=>O.id!==k&&(O.parentId??null)===_).map(O=>O.order);return(T.length?Math.max(...T):-1)+1}function Ft(c,_){return c?.nodes.find(k=>k.type==="connection"&&k.connectionId===_)??null}function Ls(c,_){const k=new Map(_.map(A=>[A.id,A])),T=c?.nodes??[];if(T.length===0)return Pt(_).map((A,r)=>({id:`connection-${A.id}`,type:"connection",name:A.name,order:r,parentId:null,connection:A,children:[]}));const O=new Map;for(const A of T)O.set(A.id,{id:A.id,type:A.type,name:A.type==="connection"&&A.connectionId?k.get(A.connectionId)?.name??A.name:A.name,order:A.order,parentId:A.parentId,expanded:A.expanded,connection:A.connectionId?k.get(A.connectionId):void 0,children:[]});const H=[];for(const A of T){const r=O.get(A.id);r&&(A.type==="connection"&&A.connectionId&&!r.connection||(A.parentId&&O.has(A.parentId)?O.get(A.parentId).children.push(r):H.push(r)))}return ws(H),H}function dt(c){const _=Date.now();return{nodes:Pt(c).map((k,T)=>Ht(k,null,T,_)),sortMode:"manual"}}function Qt(c,_){if(!c)return dt(_);const k=new Map(_.map(h=>[h.id,h])),T=new Set,O=[];for(const h of c.nodes){if(h.type==="folder"){O.push(h);continue}if(!h.connectionId||T.has(h.connectionId))continue;const p=k.get(h.connectionId);p&&(O.push({...h,name:p.name}),T.add(h.connectionId))}const H={nodes:O.map(h=>({...h,parentId:h.parentId&&Es({nodes:O},h.parentId)?h.parentId:null})),sortMode:c.sortMode??"manual"},A=Pt(_).filter(h=>!T.has(h.id));if(A.length===0)return H;const r=Date.now(),n=H.nodes.slice();return A.forEach(h=>{n.push(Ht(h,null,vt(n,null),r))}),{...H,nodes:n}}function hi(c,_){return c&&{...c,nodes:c.nodes.map(k=>k.id===_&&k.type==="folder"?{...k,expanded:!k.expanded,updatedAt:Date.now()}:k)}}function di(c,_){if(!c)return c;const k=Date.now();return{...c,nodes:c.nodes.map(T=>T.type==="folder"?{...T,expanded:_,updatedAt:k}:T)}}function ui(c,_){const k=[],T=(O,H)=>{O.forEach(A=>{A.type==="folder"&&(k.push({id:A.id,name:A.name,depth:H}),T(A.children,H+1))})};return T(Ls(c,_),0),k}function Zt(c,_){if(!c||!_)return null;const k=c.nodes.find(T=>T.id===_);return k?k.type==="folder"?k.id:xt(c,k.parentId??null):null}function fi(c,_){return Ft(c,_)?.id??null}function _i(c,_){return xt(c,Ft(c,_)?.parentId??null)}function mi(c,_,k){const T=Date.now(),O=xt(c,k),H=ks("folder",globalThis.crypto?.randomUUID?.()??String(T)),A={id:H,type:"folder",name:_,parentId:O,order:vt(c.nodes,O),expanded:!0,createdAt:T,updatedAt:T};return{layout:{...c,nodes:[...c.nodes,A],sortMode:c.sortMode??"manual"},nodeId:H}}function pi(c,_,k){const T=Date.now(),O=xt(c,k),H=Ft(c,_.id);if(!H)return{...c,nodes:[...c.nodes,Ht(_,O,vt(c.nodes,O),T)],sortMode:c.sortMode??"manual"};const A=H.parentId===O?H.order:vt(c.nodes,O,H.id);return{...c,nodes:c.nodes.map(r=>r.id===H.id?{...r,name:_.name,parentId:O,order:A,updatedAt:T}:r),sortMode:c.sortMode??"manual"}}function vi(c,_,k){if(!c)return c;const T=k.trim();if(!T)return c;const O=Date.now();return{...c,nodes:c.nodes.map(H=>H.id===_?{...H,name:T,updatedAt:O}:H),sortMode:c.sortMode??"manual"}}function gi(c,_){if(!c)return null;if(!c.nodes.some(r=>r.id===_))return{layout:c,deletedConnectionIds:[],deletedNodeIds:[]};const T=new Map;c.nodes.forEach(r=>{if(!r.parentId)return;const n=T.get(r.parentId)??[];n.push(r.id),T.set(r.parentId,n)});const O=new Set,H=[_];for(;H.length>0;){const r=H.pop();if(!r||O.has(r))continue;O.add(r),(T.get(r)??[]).forEach(h=>H.push(h))}const A=c.nodes.flatMap(r=>O.has(r.id)&&r.type==="connection"&&r.connectionId?[r.connectionId]:[]);return{layout:{...c,nodes:c.nodes.filter(r=>!O.has(r.id)),sortMode:c.sortMode??"manual"},deletedConnectionIds:A,deletedNodeIds:Array.from(O)}}function bi(c){return _e.get("/sftp/pwd",{params:{connectionId:c}})}function xi(c,_){return _e.get("/sftp/list",{params:{connectionId:c,path:_||"."}})}async function es(c,_,k){const T=localStorage.getItem("token"),O=new URLSearchParams({connectionId:String(c),path:_}),H=await fetch(`/api/sftp/download?${O.toString()}`,{headers:T?{Authorization:`Bearer ${T}`}:{}});if(!H.ok)throw new Error("Download failed");const A=await H.blob(),r=URL.createObjectURL(A),n=document.createElement("a");n.href=r,n.download=k||_.split("/").pop()||"download",document.body.appendChild(n),n.click(),document.body.removeChild(n),URL.revokeObjectURL(r)}function Ds(c,_,k,T){const O=new FormData;return O.append("file",k,k.name),_e.post("/sftp/upload",O,{params:{connectionId:c,path:_,overwrite:T?.overwrite??!1}})}function Rs(c,_){const k=localStorage.getItem("token"),T=new EventSource(`/api/sftp/upload/tasks/${encodeURIComponent(c)}/progress?token=${encodeURIComponent(k||"")}`);return T.addEventListener("progress",O=>{_(JSON.parse(O.data))}),T.addEventListener("error",()=>{T.close()}),()=>T.close()}function Si(c,_){return _e.post("/sftp/mkdir",null,{params:{connectionId:c,path:_}})}function ts(c,_,k){return _e.delete("/sftp/delete",{params:{connectionId:c,path:_,directory:k}})}function Ci(c,_,k,T){return _e.post("/sftp/transfer-remote/tasks",null,{params:{sourceConnectionId:c,sourcePath:_,targetConnectionId:k,targetPath:T}})}function yi(c,_){const k=localStorage.getItem("token"),T=new EventSource(`/api/sftp/transfer-remote/tasks/${encodeURIComponent(c)}/progress?token=${encodeURIComponent(k||"")}`);return T.addEventListener("progress",O=>{_(JSON.parse(O.data))}),T.addEventListener("error",()=>{T.close()}),()=>T.close()}function wi(c){return _e.delete(`/sftp/transfer-remote/tasks/${encodeURIComponent(c)}`)}function ki(c,_){return _e.get("/sftp/read",{params:{connectionId:c,path:_}})}function Ei(c,_,k){return _e.post("/sftp/write",{content:k},{params:{connectionId:c,path:_}})}function Li(c,_,k){return _e.post("/sftp/compress",null,{params:{connectionId:c,path:_,format:k}})}function Di(c,_,k){return _e.post("/sftp/decompress",null,{params:{connectionId:c,path:_,targetDir:"/tmp"}})}function Ri(){return _e.get("/connections/export/config",{responseType:"text"})}function Ti(){return _e.get("/session-tree")}function ss(c){return _e.put("/session-tree",c)}function Ai(){return _e.get("/snippets")}function Mi(c,_,k){return _e.post("/snippets",{name:c,command:_,description:k})}function Ni(c){return _e.delete(`/snippets/${c}`)}const Ii={unknown:{dot:"bg-content-dim",label:"未检测",text:"text-content-dim"},checking:{dot:"bg-amber-400",label:"检测中",text:"text-amber-300"},online:{dot:"bg-emerald-500 shadow-[0_0_4px_rgba(16,185,129,0.5)]",label:"在线",text:"text-emerald-500/80"},offline:{dot:"bg-content-dim",label:"离线",text:"text-content-dim"}};function ji({open:c,connections:_,connectionStatuses:k,connectionStatusDetails:T,onRefreshStatuses:O,statusError:H,statusLoading:A,onClose:r}){const[n,h]=W.useState(()=>_.slice(0,2).map(j=>j.id)),[p,o]=W.useState(`df -h +free -m`),[f,g]=W.useState(!1),[v,m]=W.useState([]),[e,s]=W.useState(null),[t,i]=W.useState([]),[l,u]=W.useState(!1),[b,x]=W.useState(""),[d,S]=W.useState(!1);W.useEffect(()=>{c&&Ai().then(j=>i(j.data)).catch(()=>{})},[c]);async function R(){if(!(!p.trim()||!b.trim())){S(!0);try{const j=await Mi(b.trim(),p);i(P=>[j.data,...P]),x(""),S(!1)}catch{S(!1)}}}async function N(j){try{await Ni(j),i(P=>P.filter(C=>C.id!==j))}catch{}}const y=W.useMemo(()=>({total:n.length,success:v.filter(j=>j.success).length,failure:v.filter(j=>!j.success).length}),[v,n.length]),E=W.useMemo(()=>_.filter(j=>k[j.id]==="online").map(j=>j.id),[k,_]),D=W.useMemo(()=>_.filter(j=>k[j.id]==="offline").length,[k,_]);if(W.useEffect(()=>{h(j=>j.filter(P=>_.some(C=>C.id===P)&&k[P]==="online"))},[k,_]),!c)return null;async function B(){const j=n.filter(P=>k[P]==="online");if(!(!j.length||!p.trim())){g(!0),s(null);try{const P=await tr(j,p);m(P.data.results)}catch(P){const C=P.response?.data?.message||"批量执行失败";s(C)}finally{g(!1)}}}return a.jsx(Fe,{title:"批量执行命令",onClose:r,maxWidth:"max-w-6xl",children:a.jsxs("div",{className:"flex h-[70vh] overflow-hidden rounded-2xl border border-border-main bg-surface-app",children:[a.jsxs("div",{className:"flex w-72 shrink-0 flex-col border-r border-border-main bg-surface-panel/70",children:[a.jsxs("div",{className:"flex items-center justify-between border-b border-border-main px-4 py-3 text-sm text-content-muted",children:[a.jsxs("span",{children:["目标主机 (",n.length,")"]}),a.jsxs("div",{className:"flex gap-3 text-xs",children:[a.jsx("button",{className:"text-blue-400 disabled:text-content-dim",disabled:A,onClick:()=>h(E),children:"全选"}),a.jsx("button",{className:"text-content-muted hover:text-content-main transition",onClick:()=>h([]),children:"清空"}),a.jsxs("button",{className:"flex items-center gap-1 text-content-muted transition hover:text-content-main disabled:text-content-dim",disabled:A||_.length===0,onClick:()=>{O().catch(()=>{})},children:[a.jsx(pt,{size:12,className:A?"animate-spin":""}),"刷新"]})]})]}),a.jsxs("div",{className:"border-b border-border-main px-4 py-2 text-xs text-content-dim",children:["在线 ",E.length," / 离线 ",D," / 总数 ",_.length]}),a.jsx("div",{className:"flex-1 space-y-1 overflow-auto p-2",children:_.map(j=>{const P=n.includes(j.id),C=k[j.id]??"unknown",L=Ii[C],M=T[j.id],I=C!=="online";return a.jsxs("label",{title:M?.message||L.label,className:`flex items-center gap-2 rounded-xl px-3 py-2 transition ${I?"cursor-not-allowed opacity-60":"cursor-pointer hover:bg-surface-muted"}`,children:[a.jsx("input",{type:"checkbox",disabled:I,checked:P,onChange:()=>h(z=>P?z.filter(K=>K!==j.id):[...z,j.id])}),a.jsxs("div",{className:"relative shrink-0",children:[a.jsx(Ot,{size:14,className:P&&!I?"text-blue-400":"text-content-dim"}),a.jsx("span",{className:`absolute -bottom-0.5 -right-0.5 h-2 w-2 rounded-full border border-surface-app ${L.dot}`})]}),a.jsxs("div",{className:"min-w-0",children:[a.jsx("div",{className:"truncate text-sm text-content-muted",children:j.name}),a.jsx("div",{className:`text-[10px] ${L.text}`,children:L.label})]})]},j.id)})})]}),a.jsxs("div",{className:"flex flex-1 flex-col",children:[a.jsx("div",{className:"border-b border-border-main bg-surface-panel px-4 py-4",children:a.jsxs("div",{className:"flex items-end gap-4",children:[a.jsxs("div",{className:"flex-1 space-y-2",children:[a.jsxs("label",{className:"flex items-center gap-2 text-sm text-content-muted",children:[a.jsx(lt,{size:14,className:"text-emerald-400"}),"批量执行脚本",t.length>0?a.jsx("span",{className:"ml-2 flex items-center gap-1",children:a.jsxs("button",{onClick:()=>u(!l),className:"inline-flex items-center gap-1 rounded-md px-2 py-0.5 text-[10px] text-content-muted transition hover:text-content-main",style:{background:"rgba(148,163,184,0.06)"},children:[a.jsx(hr,{size:10}),"片段库"]})}):null]}),a.jsxs("div",{className:"relative",children:[a.jsx("textarea",{rows:5,className:"w-full resize-none rounded-2xl border border-border-main bg-surface-muted px-4 py-3 font-mono text-sm text-emerald-300 outline-none focus:border-blue-500",value:p,onChange:j=>o(j.target.value)}),l&&t.length>0&&a.jsx("div",{className:"absolute bottom-1 left-1 right-1 z-10 max-h-32 overflow-auto rounded-xl border border-border-main bg-surface-panel p-1 shadow-xl",style:{top:"auto",transform:"translateY(-105%)"},children:t.map(j=>a.jsxs("div",{className:"group flex items-center rounded-lg px-2 py-1.5 text-xs transition hover:bg-surface-muted",children:[a.jsxs("button",{className:"flex-1 text-left text-content-muted truncate",onClick:()=>{o(j.command),u(!1)},children:[a.jsx("span",{className:"font-medium text-content-main",children:j.name}),j.description?a.jsx("span",{className:"ml-2 text-content-dim",children:j.description}):null]}),a.jsx("button",{onClick:()=>{N(j.id)},className:"ml-1 rounded p-0.5 text-content-dim opacity-0 transition hover:text-red-400 group-hover:opacity-100",children:a.jsx(_t,{size:10})})]},j.id))})]})]}),a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsxs("div",{className:"relative",children:[a.jsx("input",{placeholder:"保存为片段...",className:"w-36 rounded-lg border border-border-main bg-surface-muted px-3 py-2.5 text-xs text-content-main outline-none placeholder:text-content-dim",value:b,onChange:j=>x(j.target.value),onKeyDown:j=>{j.key==="Enter"&&R()}}),b.trim()&&p.trim()?a.jsx("button",{onClick:()=>{R()},className:"absolute right-1 top-1/2 -translate-y-1/2 rounded p-1 text-cyan-400 hover:text-cyan-300",children:a.jsx(mt,{size:14})}):null]}),a.jsxs("button",{className:"flex h-[46px] items-center gap-2 rounded-xl bg-blue-600 px-6 text-white transition hover:bg-blue-500 disabled:opacity-60",disabled:f||A||n.filter(j=>k[j]==="online").length===0,onClick:()=>{B()},children:[f?a.jsx(pt,{size:16,className:"animate-spin"}):a.jsx(qr,{size:16,fill:"currentColor"}),f?"执行中...":"开始执行"]})]})]})}),a.jsxs("div",{className:"flex gap-6 border-b border-border-main bg-surface-muted/60 px-4 py-2 text-sm",children:[a.jsxs("span",{className:"text-content-muted",children:["总数: ",y.total]}),a.jsxs("span",{className:"font-medium text-emerald-400",children:["成功: ",y.success]}),a.jsxs("span",{className:"font-medium text-red-400",children:["失败: ",y.failure]})]}),a.jsxs("div",{className:"flex-1 space-y-4 overflow-auto p-4",children:[H?a.jsx("div",{className:"rounded-xl border border-amber-500/20 bg-amber-500/10 px-4 py-3 text-sm text-amber-200",children:H}):null,e?a.jsx("div",{className:"rounded-xl border border-red-500/20 bg-red-500/10 px-4 py-3 text-sm text-red-300",children:e}):null,!v.length&&!e?a.jsxs("div",{className:"flex h-full flex-col items-center justify-center text-content-dim",children:[a.jsx(xs,{size:48,className:"mb-3 text-border-main"}),a.jsx("p",{children:A?"正在检测主机状态...":"请在上方输入命令并点击执行"})]}):null,v.map(j=>a.jsxs("div",{className:"overflow-hidden rounded-2xl border border-border-main bg-surface-panel",children:[a.jsxs("div",{className:"flex items-center justify-between border-b border-border-subtle bg-surface-panel/80 px-4 py-3",children:[a.jsxs("div",{className:"flex items-center gap-3",children:[j.success?a.jsx(bt,{size:16,className:"text-emerald-500"}):a.jsx(mr,{size:16,className:"text-red-500"}),a.jsx("span",{className:"text-sm font-medium text-content-main",children:j.connectionName})]}),a.jsxs("div",{className:"flex items-center gap-4 text-xs text-content-dim",children:[a.jsxs("span",{className:"flex items-center gap-1",children:[a.jsx(vr,{size:12}),j.durationMs,"ms"]}),a.jsxs("button",{className:"flex items-center gap-1 transition hover:text-content-muted",onClick:()=>navigator.clipboard.writeText(j.output||j.error||""),children:[a.jsx(xr,{size:12}),"复制输出"]})]})]}),a.jsx("pre",{className:`overflow-auto bg-surface-muted/20 p-4 text-xs leading-relaxed ${j.success?"text-content-muted":"text-red-400"}`,children:j.output||j.error||""})]},j.connectionId))]})]})]})})}function Bi({force:c,onClose:_}){const{changePassword:k}=gs(),[T,O]=W.useState(""),[H,A]=W.useState(""),[r,n]=W.useState(""),[h,p]=W.useState(!1),[o,f]=W.useState(null);async function g(){if(H!==r){f("两次输入的新密码不一致");return}p(!0),f(null);try{await k(T,H),_()}catch(v){const m=v.response?.data?.message||"修改密码失败";f(m)}finally{p(!1)}}return a.jsx(Fe,{title:"首次登录 - 请修改密码",onClose:c?void 0:_,maxWidth:"max-w-lg",footer:a.jsxs(a.Fragment,{children:[c?null:a.jsx("button",{className:"rounded-xl bg-surface-muted px-4 py-2 text-sm text-content-muted transition hover:bg-surface-panel hover:text-content-main",onClick:_,children:"取消"}),a.jsx("button",{className:"rounded-xl bg-blue-600 px-4 py-2 text-sm text-white transition hover:bg-blue-500 disabled:opacity-60",disabled:h,onClick:g,children:h?"提交中...":"确认修改"})]}),children:a.jsxs("div",{className:"space-y-4",children:[a.jsx("div",{className:"rounded-2xl border border-blue-500/25 bg-blue-500/10 p-4 text-sm text-blue-400",children:"为了您的资产安全,系统要求首次登录的管理员必须修改默认密码。"}),a.jsxs("label",{className:"block space-y-2",children:[a.jsx("span",{className:"text-sm text-content-muted",children:"原密码"}),a.jsx("input",{type:"password",className:"w-full rounded-xl border border-border-main bg-surface-muted px-4 py-3 text-content-main outline-none focus:border-blue-500",value:T,onChange:v=>O(v.target.value)})]}),a.jsxs("label",{className:"block space-y-2",children:[a.jsx("span",{className:"text-sm text-content-muted",children:"新密码"}),a.jsx("input",{type:"password",className:"w-full rounded-xl border border-border-main bg-surface-muted px-4 py-3 text-content-main outline-none focus:border-blue-500",value:H,onChange:v=>A(v.target.value)})]}),a.jsxs("label",{className:"block space-y-2",children:[a.jsx("span",{className:"text-sm text-content-muted",children:"确认新密码"}),a.jsx("input",{type:"password",className:"w-full rounded-xl border border-border-main bg-surface-muted px-4 py-3 text-content-main outline-none focus:border-blue-500",value:r,onChange:v=>n(v.target.value)})]}),o?a.jsx("div",{className:"rounded-xl border border-red-500/20 bg-red-500/10 px-4 py-3 text-sm text-red-300",children:o}):null]})})}const rs={name:"",host:"",port:22,username:"root",authType:"PASSWORD",password:"",privateKey:"",passphrase:"",setupMode:"NONE",bootstrapPassword:""};function Oi({open:c,connection:_,folderOptions:k,initialTargetFolderId:T,onClose:O,onSubmit:H}){const[A,r]=W.useState(rs),[n,h]=W.useState(null),[p,o]=W.useState(!1),[f,g]=W.useState(null);if(W.useEffect(()=>{c&&(r(_?{name:_.name,host:_.host,port:_.port,username:_.username,authType:_.authType,password:"",privateKey:"",passphrase:"",setupMode:"NONE",bootstrapPassword:""}:rs),h(T),g(null))},[_,T,c]),!c)return null;const v=A.setupMode==="PASSWORD_BOOTSTRAP",m=A.authType==="PASSWORD";async function e(){o(!0),g(null);try{await H({...A,port:Number(A.port||22),targetFolderId:n})}catch(s){const t=s.response?.data?.message||"保存连接失败";g(t)}finally{o(!1)}}return a.jsxs(Fe,{title:_?"编辑 SSH 连接":"新建 SSH 连接",onClose:O,maxWidth:"max-w-2xl",footer:a.jsxs(a.Fragment,{children:[a.jsx("button",{className:"rounded-xl bg-surface-muted px-4 py-2 text-sm text-content-muted transition hover:bg-surface-panel hover:text-content-main",onClick:O,children:"取消"}),a.jsx("button",{className:"rounded-xl bg-blue-600 px-4 py-2 text-sm text-white transition hover:bg-blue-500 disabled:opacity-60",disabled:p,onClick:e,children:p?"保存中...":_?"保存修改":"保存并连接"})]}),children:[a.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[a.jsxs("label",{className:"space-y-2",children:[a.jsx("span",{className:"text-sm text-content-muted",children:"连接名称"}),a.jsx("input",{className:"w-full rounded-2xl border border-border-main bg-surface-muted px-4 py-3 text-content-main outline-none focus:border-blue-500",placeholder:"例如:prod-web-01",value:A.name,onChange:s=>r(t=>({...t,name:s.target.value}))})]}),a.jsxs("label",{className:"space-y-2",children:[a.jsx("span",{className:"text-sm text-content-muted",children:"分组 / 父文件夹"}),a.jsxs("select",{className:"w-full rounded-2xl border border-border-main bg-surface-muted px-4 py-3 text-content-main outline-none focus:border-blue-500",value:n??"__ROOT__",onChange:s=>h(s.target.value==="__ROOT__"?null:s.target.value),children:[a.jsx("option",{value:"__ROOT__",children:"根目录"}),k.map(s=>a.jsx("option",{value:s.id,children:`${"— ".repeat(s.depth)}${s.name}`},s.id))]})]})]}),a.jsxs("div",{className:"mt-4 grid gap-4 md:grid-cols-[minmax(0,1.4fr)_120px_minmax(0,1fr)]",children:[a.jsxs("label",{className:"space-y-2",children:[a.jsx("span",{className:"text-sm text-content-muted",children:"主机 IP"}),a.jsx("input",{className:"w-full rounded-2xl border border-border-main bg-surface-muted px-4 py-3 text-content-main outline-none focus:border-blue-500",value:A.host,onChange:s=>r(t=>({...t,host:s.target.value}))})]}),a.jsxs("label",{className:"space-y-2",children:[a.jsx("span",{className:"text-sm text-content-muted",children:"端口"}),a.jsx("input",{type:"number",className:"w-full rounded-2xl border border-border-main bg-surface-muted px-4 py-3 text-content-main outline-none focus:border-blue-500",value:A.port??22,onChange:s=>r(t=>({...t,port:Number(s.target.value)}))})]}),a.jsxs("label",{className:"space-y-2",children:[a.jsx("span",{className:"text-sm text-content-muted",children:"用户名"}),a.jsx("input",{className:"w-full rounded-2xl border border-border-main bg-surface-muted px-4 py-3 text-content-main outline-none focus:border-blue-500",value:A.username,onChange:s=>r(t=>({...t,username:s.target.value}))})]})]}),a.jsxs("div",{className:"mt-6 rounded-[28px] border border-border-main bg-surface-muted/30 p-5",children:[a.jsxs("div",{className:"mb-4",children:[a.jsx("div",{className:"text-sm font-medium text-content-main",children:"认证方式"}),a.jsx("div",{className:"mt-1 text-xs text-content-dim",children:"保留现有密码、私钥和一键免密部署能力。"})]}),a.jsxs("div",{className:"flex flex-wrap gap-3",children:[a.jsx("button",{className:`rounded-2xl border px-4 py-2 text-sm ${m?"border-blue-500 bg-blue-500/10 text-blue-400":"border-border-main bg-surface-panel text-content-muted"}`,onClick:()=>r(s=>({...s,authType:"PASSWORD",setupMode:s.setupMode==="PASSWORD_BOOTSTRAP"?"PASSWORD_BOOTSTRAP":"NONE"})),children:"密码认证"}),a.jsx("button",{className:`rounded-2xl border px-4 py-2 text-sm ${A.authType==="PRIVATE_KEY"?"border-blue-500 bg-blue-500/10 text-blue-400":"border-border-main bg-surface-panel text-content-muted"}`,onClick:()=>r(s=>({...s,authType:"PRIVATE_KEY",setupMode:"NONE"})),children:"私钥认证"}),a.jsx("button",{className:`rounded-2xl border px-4 py-2 text-sm ${v?"border-emerald-500 bg-emerald-500/10 text-emerald-400":"border-border-main bg-surface-panel text-content-muted"}`,onClick:()=>r(s=>({...s,authType:"PASSWORD",setupMode:s.setupMode==="PASSWORD_BOOTSTRAP"?"NONE":"PASSWORD_BOOTSTRAP"})),children:"一键免密部署"})]}),A.authType==="PASSWORD"?a.jsxs("label",{className:"block mt-4 space-y-2",children:[a.jsx("span",{className:"text-sm text-content-muted",children:v?"引导密码":"密码"}),a.jsx("input",{type:"password",className:"w-full rounded-2xl border border-border-main bg-surface-muted px-4 py-3 text-content-main outline-none focus:border-blue-500",value:v?A.bootstrapPassword??"":A.password??"",onChange:s=>r(t=>v?{...t,bootstrapPassword:s.target.value}:{...t,password:s.target.value})})]}):a.jsxs("div",{className:"mt-4 space-y-4",children:[a.jsxs("label",{className:"block space-y-2",children:[a.jsx("span",{className:"text-sm text-content-muted",children:"私钥内容"}),a.jsx("textarea",{rows:6,className:"w-full rounded-2xl border border-border-main bg-surface-muted px-4 py-3 font-mono text-sm text-content-main outline-none focus:border-blue-500",value:A.privateKey??"",onChange:s=>r(t=>({...t,privateKey:s.target.value}))})]}),a.jsxs("label",{className:"block space-y-2",children:[a.jsx("span",{className:"text-sm text-content-muted",children:"私钥口令"}),a.jsx("input",{type:"password",className:"w-full rounded-2xl border border-border-main bg-surface-muted px-4 py-3 text-content-main outline-none focus:border-blue-500",value:A.passphrase??"",onChange:s=>r(t=>({...t,passphrase:s.target.value}))})]})]})]}),f?a.jsx("div",{className:"mt-4 rounded-xl border border-red-500/20 bg-red-500/10 px-4 py-3 text-sm text-red-400",children:f}):null]})}function Pi({open:c,folderOptions:_,initialParentId:k,onClose:T,onSubmit:O}){const[H,A]=W.useState(""),[r,n]=W.useState(null),[h,p]=W.useState(!1),[o,f]=W.useState(null);if(W.useEffect(()=>{c&&(A(""),n(k),p(!1),f(null))},[k,c]),!c)return null;async function g(){const v=H.trim();if(!v){f("请输入文件夹名称");return}p(!0),f(null);try{await O({name:v,parentId:r}),T()}catch(m){const e=m.response?.data?.message||"创建文件夹失败";f(e)}finally{p(!1)}}return a.jsx(Fe,{title:"新建文件夹",onClose:T,maxWidth:"max-w-lg",footer:a.jsxs(a.Fragment,{children:[a.jsx("button",{className:"rounded-xl bg-surface-muted px-4 py-2 text-sm text-content-muted transition hover:bg-surface-panel hover:text-content-main",onClick:T,children:"取消"}),a.jsx("button",{className:"rounded-xl bg-blue-600 px-4 py-2 text-sm text-white transition hover:bg-blue-500 disabled:opacity-60",disabled:h,onClick:g,children:h?"创建中...":"创建文件夹"})]}),children:a.jsxs("div",{className:"space-y-5",children:[a.jsxs("label",{className:"block space-y-2",children:[a.jsx("span",{className:"text-sm text-content-muted",children:"文件夹名称"}),a.jsx("input",{className:"w-full rounded-xl border border-border-main bg-surface-muted px-4 py-3 text-content-main outline-none focus:border-blue-500",placeholder:"例如:生产环境",value:H,onChange:v=>A(v.target.value)})]}),a.jsxs("label",{className:"block space-y-2",children:[a.jsx("span",{className:"text-sm text-content-muted",children:"父级目录(可选)"}),a.jsxs("select",{className:"w-full rounded-xl border border-border-main bg-surface-muted px-4 py-3 text-content-main outline-none focus:border-blue-500",value:r??"__ROOT__",onChange:v=>n(v.target.value==="__ROOT__"?null:v.target.value),children:[a.jsx("option",{value:"__ROOT__",children:"根目录"}),_.map(v=>a.jsx("option",{value:v.id,children:`${"— ".repeat(v.depth)}${v.name}`},v.id))]})]}),o?a.jsx("div",{className:"rounded-xl border border-red-500/20 bg-red-500/10 px-4 py-3 text-sm text-red-300",children:o}):null]})})}function Hi({open:c,initialName:_,onClose:k,onSubmit:T}){const[O,H]=W.useState(""),[A,r]=W.useState(!1),[n,h]=W.useState(null);if(W.useEffect(()=>{c&&(H(_),r(!1),h(null))},[_,c]),!c)return null;async function p(){const o=O.trim();if(!o){h("请输入文件夹名称");return}if(o===_){k();return}r(!0),h(null);try{await T(o),k()}catch(f){const g=f.response?.data?.message||"重命名文件夹失败";h(g)}finally{r(!1)}}return a.jsx(Fe,{title:"重命名文件夹",onClose:k,maxWidth:"max-w-md",footer:a.jsxs(a.Fragment,{children:[a.jsx("button",{className:"rounded-xl bg-surface-muted px-4 py-2 text-sm text-content-muted transition hover:bg-surface-panel hover:text-content-main",onClick:k,children:"取消"}),a.jsx("button",{className:"rounded-xl bg-blue-600 px-4 py-2 text-sm text-white transition hover:bg-blue-500 disabled:opacity-60",disabled:A,onClick:p,children:A?"保存中...":"保存"})]}),children:a.jsxs("div",{className:"space-y-5",children:[a.jsxs("label",{className:"block space-y-2",children:[a.jsx("span",{className:"text-sm text-content-muted",children:"文件夹名称"}),a.jsx("input",{className:"w-full rounded-xl border border-border-main bg-surface-muted px-4 py-3 text-content-main outline-none focus:border-blue-500",placeholder:"例如:生产环境",value:O,onChange:o=>H(o.target.value),autoFocus:!0,onKeyDown:o=>{o.key==="Enter"&&(o.preventDefault(),p())}})]}),n?a.jsx("div",{className:"rounded-xl border border-red-500/20 bg-red-500/10 px-4 py-3 text-sm text-red-300",children:n}):null]})})}const Fi={unknown:{dot:"bg-content-dim",label:"未检测",text:"text-content-dim"},checking:{dot:"bg-amber-400",label:"检测中",text:"text-amber-300"},online:{dot:"bg-emerald-500",label:"在线",text:"text-emerald-400"},offline:{dot:"bg-red-500",label:"离线",text:"text-red-400"}};function Ts(c,_){if(!_)return!0;const k=_.toLowerCase();return c.name.toLowerCase().includes(k)?!0:c.children.some(T=>Ts(T,_))}function As({node:c,depth:_,activeConnectionId:k,connectionStatuses:T,openConnectionIds:O,selectedNodeId:H,search:A,onSelectNode:r,onToggleFolder:n,onOpenConnection:h,onContextMenu:p,onTogglePin:o}){function f(t,i){t.preventDefault(),t.stopPropagation(),p({nodeId:c.id,nodeType:i,x:t.clientX,y:t.clientY})}if(!Ts(c,A))return null;if(c.type==="folder"){const t=c.expanded??!0,i=H===c.id;return a.jsxs("div",{children:[a.jsxs("button",{className:de("flex w-full items-center gap-2 rounded-xl px-2 py-2 text-left text-sm transition",i?"bg-surface-muted text-content-main ring-1 ring-inset ring-border-main":"text-content-muted hover:bg-surface-muted"),onClick:()=>{r(c.id),n(c.id)},onContextMenu:l=>f(l,"folder"),style:{paddingLeft:8+_*16},children:[t?a.jsx(ct,{size:14,className:"text-content-dim"}):a.jsx(bs,{size:14,className:"text-content-dim"}),a.jsx(Qe,{size:15,className:t?"text-blue-400":"text-content-dim"}),a.jsx("span",{className:"truncate",children:c.name})]}),t?a.jsx("div",{className:"space-y-1",children:c.children.map(l=>a.jsx(As,{node:l,depth:_+1,activeConnectionId:k,connectionStatuses:T,openConnectionIds:O,selectedNodeId:H,search:A,onSelectNode:r,onToggleFolder:n,onOpenConnection:h,onContextMenu:p,onTogglePin:o},l.id))}):null]})}if(!c.connection)return null;const g=H===c.id,v=k===c.connection.id,m=O.includes(c.connection.id),e=T?.[c.connection.id]??"unknown",s=Fi[e];return a.jsxs("button",{className:de("group flex w-full items-center gap-2 rounded-xl px-2 py-2 text-left text-sm transition",v?"bg-blue-600/20 text-blue-200 ring-1 ring-inset ring-blue-500/40":g?"bg-surface-muted text-content-main ring-1 ring-inset ring-border-main":m?"text-emerald-200 hover:bg-surface-muted":"text-content-muted hover:bg-surface-muted hover:text-content-main"),onDoubleClick:()=>h(c.connection,c.id),onClick:()=>{r(c.id),m&&!v&&h(c.connection,c.id)},onContextMenu:t=>f(t,"connection"),style:{paddingLeft:24+_*16},children:[a.jsxs("div",{className:"relative shrink-0",children:[a.jsx(Ot,{size:14,className:v?"text-blue-300":m?"text-emerald-400":"text-content-dim"}),a.jsx("span",{className:de("absolute -bottom-0.5 -right-0.5 h-2 w-2 rounded-full border border-surface-panel",s.dot)})]}),a.jsxs("div",{className:"min-w-0 flex-1",children:[a.jsx("div",{className:"truncate",children:c.connection.name}),a.jsx("div",{className:de("text-[10px]",s.text),children:s.label})]}),a.jsx("button",{className:"shrink-0 rounded p-0.5 opacity-0 transition group-hover:opacity-100 hover:scale-110",onClick:t=>{t.stopPropagation(),o?.(c.connection.id)},title:c.connection.pinned?"取消置顶":"置顶",children:a.jsx(ei,{size:11,className:c.connection.pinned?"fill-amber-400 text-amber-400":"text-content-dim"})}),v?a.jsx("span",{className:"rounded-full border border-blue-500/30 bg-blue-500/10 px-2 py-0.5 text-[10px] text-blue-200",children:"当前"}):m?a.jsx("span",{className:"rounded-full border border-emerald-500/20 bg-emerald-500/10 px-2 py-0.5 text-[10px] text-emerald-200",children:"已打开"}):a.jsx("span",{className:"hidden rounded bg-surface-app px-1.5 py-0.5 text-[10px] text-content-dim group-hover:inline-block",children:"双击连接"})]})}function Wi(c){return a.jsx("div",{className:"space-y-1",children:c.nodes.map(_=>a.jsx(As,{node:_,depth:0,...c},_.id))})}function $i(){return _e.get("/webhooks")}function zi(c,_){return _e.post("/webhooks",{url:c,eventType:_})}function Ui(c){return _e.delete(`/webhooks/${c}`)}function qi(c){return _e.post("/webhooks/test",{message:c})}function Ki(c,_){const k=c?.response?.data;return k?.message||k?.error||_}const Vi=[{label:"IBM Plex Mono",value:'"IBM Plex Mono", ui-monospace, monospace'},{label:"JetBrains Mono",value:'"JetBrains Mono", "IBM Plex Mono", ui-monospace, monospace'},{label:"Fira Code",value:'"Fira Code", "IBM Plex Mono", ui-monospace, monospace'},{label:"Source Code Pro",value:'"Source Code Pro", "IBM Plex Mono", ui-monospace, monospace'}];function Gi({open:c,terminalFontSize:_,terminalFontFamily:k,darkMode:T,onClose:O,onFontSizeChange:H,onFontFamilyChange:A,onDarkModeChange:r}){const[n,h]=W.useState("appearance"),[p,o]=W.useState([]),[f,g]=W.useState(""),[v,m]=W.useState(!1),[e,s]=W.useState(null),[t,i]=W.useState("");W.useEffect(()=>{c&&($i().then(x=>o(x.data)).catch(()=>{}),i(""))},[c]);const l=W.useCallback(async()=>{if(f.trim()){m(!0);try{const x=await zi(f.trim(),"*");o(d=>[...d,x.data]),g(""),i("已添加")}catch(x){i(Ki(x,"添加失败"))}m(!1)}},[f]),u=W.useCallback(async x=>{try{await Ui(x),o(d=>d.filter(S=>S.id!==x))}catch{}},[]),b=W.useCallback(async x=>{s(x);try{const d=p.find(S=>S.id===x);await qi(d?.url||"test"),i("测试已发送")}catch{i("测试失败")}s(null)},[p]);return c?a.jsxs(Fe,{title:"系统设置",onClose:O,maxWidth:"max-w-xl",children:[a.jsxs("div",{className:"flex gap-4 mb-4 border-b pb-3 border-border-subtle",children:[a.jsx("button",{onClick:()=>h("appearance"),className:`text-xs font-medium pb-1 ${n==="appearance"?"text-cyan-400 border-b border-cyan-400":"text-content-muted"}`,children:"外观"}),a.jsx("button",{onClick:()=>h("webhooks"),className:`text-xs font-medium pb-1 ${n==="webhooks"?"text-cyan-400 border-b border-cyan-400":"text-content-muted"}`,children:"Webhook"})]}),n==="appearance"?a.jsxs("div",{className:"space-y-6",children:[r?a.jsxs("div",{children:[a.jsx("div",{className:"mb-3 text-sm font-medium text-content-muted",children:"界面主题"}),a.jsx("div",{className:"flex gap-3",children:[{mode:!1,label:"浅色",icon:si,desc:"亮色界面"},{mode:!0,label:"暗色",icon:zr,desc:"深色界面"}].map(x=>a.jsxs("button",{onClick:()=>r(x.mode),className:`flex flex-1 items-center gap-3 rounded-xl border px-4 py-3 text-sm transition ${T===x.mode?"border-cyan-500/40 bg-cyan-500/10 text-cyan-400":"border-border-main bg-surface-muted text-content-muted hover:border-border-subtle"}`,children:[a.jsx(x.icon,{size:18}),a.jsxs("div",{className:"text-left",children:[a.jsx("div",{className:"font-medium text-content-main",children:x.label}),a.jsx("div",{className:"text-[11px] text-content-dim",children:x.desc})]})]},x.label))})]}):null,a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{className:"flex justify-between text-sm",children:[a.jsx("span",{className:"text-content-muted",children:"终端字号"}),a.jsxs("span",{className:"text-content-dim",children:[_,"px"]})]}),a.jsx("input",{type:"range",min:11,max:22,value:_,onChange:x=>H(Number(x.target.value)),className:"w-full h-1.5 accent-cyan-500 bg-surface-muted rounded-lg appearance-none"})]}),a.jsxs("div",{className:"space-y-2",children:[a.jsx("div",{className:"text-sm font-medium text-content-muted",children:"终端字体"}),a.jsx("div",{className:"flex flex-wrap gap-2",children:Vi.map(x=>a.jsx("button",{onClick:()=>A(x.value),className:`rounded-lg px-3.5 py-2 text-xs transition ${k===x.value?"border border-cyan-400/30 bg-cyan-500/10 text-cyan-400":"border-border-main bg-surface-muted text-content-muted hover:border-border-subtle"}`,style:{fontFamily:x.value},children:x.label},x.label))})]})]}):a.jsxs("div",{className:"space-y-4",children:[a.jsx("div",{className:"text-xs text-content-dim",children:"Webhook URL 将在连接创建/删除等事件触发时发送通知(支持钉钉、飞书、Slack 等)"}),a.jsxs("div",{className:"flex gap-2",children:[a.jsx("input",{className:"input-cyber flex-1 bg-surface-muted border-border-main text-content-main",placeholder:"https://hooks.example.com/webhook",value:f,onChange:x=>g(x.target.value),onKeyDown:x=>{x.key==="Enter"&&l()}}),a.jsxs("button",{onClick:()=>{l()},disabled:v||!f.trim(),className:"btn-cyber-primary",children:[a.jsx(mt,{size:14}),"添加"]})]}),p.length===0?a.jsx("div",{className:"py-8 text-center text-xs text-content-muted",children:"暂无配置,输入 URL 后点击添加"}):a.jsx("div",{className:"space-y-2",children:p.map(x=>a.jsxs("div",{className:"flex items-center gap-2 rounded-lg px-3 py-2 bg-surface-muted/40 border border-border-subtle",children:[a.jsx(Or,{size:12,className:"text-cyan-400"}),a.jsx("span",{className:"flex-1 truncate text-xs text-content-muted",children:x.url}),a.jsx("button",{onClick:()=>{b(x.id)},className:"rounded p-1 text-content-dim hover:text-content-main transition",title:"发送测试",children:e===x.id?a.jsx(Cs,{size:12,className:"animate-spin"}):a.jsx(bt,{size:12})}),a.jsx("button",{onClick:()=>{u(x.id)},className:"rounded p-1 text-content-dim hover:text-red-400 transition",children:a.jsx(_t,{size:12})})]},x.id))}),t?a.jsx("div",{className:"text-xs text-cyan-400",children:t}):null]})]}):null}function is(c,_){const k=c?.response?.data;return k?.message||k?.error||_}function Xi({open:c,connectionId:_,filePath:k,onClose:T}){const[O,H]=W.useState(""),[A,r]=W.useState(!1),[n,h]=W.useState(!1),[p,o]=W.useState(null),[f,g]=W.useState(!1),[v,m]=W.useState(!1);W.useEffect(()=>{!c||!k||(r(!0),o(null),g(!1),m(!1),ki(_,k).then(t=>{H(t.data.content),r(!1)}).catch(t=>{o(is(t,"加载文件失败")),r(!1)}))},[_,k,c]);async function e(){h(!0),o(null),g(!1);try{await Ei(_,k,O),g(!0),m(!1),setTimeout(()=>g(!1),2e3)}catch(t){o(is(t,"保存失败"))}finally{h(!1)}}const s=k.split("/").pop()||k;return a.jsx(Fe,{title:`编辑: ${s}`,onClose:T,maxWidth:"max-w-5xl",footer:a.jsxs("div",{className:"flex items-center gap-3 w-full",children:[a.jsx("div",{className:"flex-1 text-xs",style:{color:"#475569"},children:k}),p?a.jsx("span",{className:"text-xs text-red-400",children:p}):null,f?a.jsx("span",{className:"text-xs text-emerald-400",children:"已保存 ✓"}):null,a.jsx("button",{onClick:T,className:"btn-cyber",children:"取消"}),a.jsx("button",{onClick:e,disabled:n||!v,className:"btn-cyber-primary",children:n?"保存中...":"保存"})]}),children:A?a.jsx("div",{className:"flex items-center justify-center py-20 text-sm",style:{color:"#64748b"},children:"加载中..."}):a.jsx("textarea",{className:"w-full h-[60vh] resize-none rounded-xl border p-4 font-mono text-sm outline-none",style:{background:"#0a0e1a",borderColor:"rgba(96, 165, 250, 0.12)",color:"#e2e8f0"},value:O,onChange:t=>{H(t.target.value),m(!0)},spellCheck:!1})})}function Yi({open:c,currentPath:_,onClose:k,onSubmit:T}){const O=W.useRef(null),[H,A]=W.useState(""),[r,n]=W.useState(!1),[h,p]=W.useState(null);if(W.useEffect(()=>{if(!c)return;A(""),n(!1),p(null);const g=window.setTimeout(()=>O.current?.focus(),0);return()=>window.clearTimeout(g)},[c]),!c)return null;async function o(){const g=H.trim();if(!g){p("请输入目录名称");return}n(!0),p(null);try{await T(g),k()}catch(v){const m=v.response?.data?.message||"创建目录失败";p(m)}finally{n(!1)}}function f(){r||k()}return a.jsx(Fe,{title:"新建目录",onClose:r?void 0:f,maxWidth:"max-w-md",footer:a.jsxs(a.Fragment,{children:[a.jsx("button",{className:"rounded-xl bg-surface-muted px-4 py-2 text-sm text-content-muted transition hover:bg-surface-panel hover:text-content-main disabled:cursor-not-allowed disabled:opacity-60",disabled:r,onClick:f,children:"取消"}),a.jsx("button",{className:"rounded-xl bg-blue-600 px-4 py-2 text-sm text-white transition hover:bg-blue-500 disabled:cursor-not-allowed disabled:opacity-60",disabled:r,onClick:o,children:r?"创建中...":"确定"})]}),children:a.jsxs("div",{className:"space-y-5",children:[a.jsxs("div",{className:"rounded-2xl border border-border-main bg-surface-muted/50 px-4 py-3",children:[a.jsx("div",{className:"text-xs uppercase tracking-[0.24em] text-content-dim",children:"当前路径"}),a.jsx("div",{className:"mt-2 break-all font-mono text-sm text-content-main",children:_})]}),a.jsxs("label",{className:"block space-y-2",children:[a.jsx("span",{className:"text-sm text-content-muted",children:"目录名称"}),a.jsx("input",{ref:O,className:"w-full rounded-2xl border border-border-main bg-surface-muted px-4 py-3 text-content-main outline-none transition focus:border-blue-500",placeholder:"例如:releases",value:H,onChange:g=>A(g.target.value),onKeyDown:g=>{g.key==="Enter"&&(g.preventDefault(),o())}})]}),h?a.jsx("div",{className:"rounded-xl border border-red-500/20 bg-red-500/10 px-4 py-3 text-sm text-red-300",children:h}):null]})})}function ns(c,_){const k=c?.response?.data;return k?.message||k?.error||_}const kt={visible:!1,fileName:"",fileType:"file",canOverwrite:!0,queueId:"",message:""};function Ms({connection:c,selectedFiles:_,onSelectedFilesChange:k,onRefreshSignal:T,selectionMode:O,onConfirmSelection:H}){const A=W.useRef(null),r=W.useRef(null),n=W.useRef(new Map),h=W.useRef(null),p=W.useRef(!1),[o,f]=W.useState("/"),[g,v]=W.useState([]),[m,e]=W.useState(!1),[s,t]=W.useState(null),[i,l]=W.useState(null),[u,b]=W.useState(""),[x,d]=W.useState(!1),[S,R]=W.useState(!1),[N,y]=W.useState([]),[E,D]=W.useState(!1),[B,j]=W.useState(null),[P,C]=W.useState(kt),[L,M]=W.useState(!1),[I,z]=W.useState("name"),[K,Y]=W.useState("asc"),[X,ne]=W.useState(null),[w,F]=W.useState(null),U=u.trim().toLowerCase(),q=W.useMemo(()=>g.filter($=>x||!$.name.startsWith(".")),[g,x]),ee=W.useMemo(()=>U?q.filter($=>$.name.toLowerCase().includes(U)):q,[q,U]),J=W.useMemo(()=>ee.slice().sort(($,G)=>{if($.directory!==G.directory)return $.directory?-1:1;const se=$.name.localeCompare(G.name,void 0,{numeric:!0,sensitivity:"base"});if(I==="name")return se!==0?K==="asc"?se:-se:K==="asc"?$.mtime-G.mtime:G.mtime-$.mtime;const ce=$.mtime-G.mtime;return ce!==0?K==="asc"?ce:-ce:se}),[ee,K,I]),oe=W.useMemo(()=>ee.filter($=>_.includes($.name)),[ee,_]),ue=W.useMemo(()=>ee.length>0&&oe.length===ee.length,[ee.length,oe.length]),he=W.useMemo(()=>N.filter($=>$.status==="queued"||$.status==="running").length,[N]),xe="sftp-upload-menu",ie=he>0?`上传,当前有 ${he} 个任务进行中`:"上传",ye=de("group flex h-9 min-w-0 shrink items-center overflow-hidden rounded-2xl border border-border-main bg-surface-control px-3 text-sm text-content-main shadow-[inset_0_1px_0_rgba(148,163,184,0.08)] transition-[flex-grow,flex-basis,border-color,box-shadow] duration-200 focus-within:border-blue-500/60 focus-within:shadow-[inset_0_1px_0_rgba(96,165,250,0.18)]",B==="path"?"basis-[70%] grow-[7]":B==="search"?"basis-[42%] grow-[21]":"basis-[60%] grow-[6]"),$e=de("group relative h-9 min-w-0 shrink overflow-hidden rounded-2xl border border-border-main bg-surface-control text-content-main shadow-[inset_0_1px_0_rgba(148,163,184,0.08)] transition-[flex-grow,flex-basis,border-color,box-shadow] duration-200 focus-within:border-blue-500/60 focus-within:shadow-[inset_0_1px_0_rgba(96,165,250,0.18)]",B==="search"?"basis-[58%] grow-[29]":B==="path"?"basis-[30%] grow-[3]":"basis-[40%] grow-[4]"),me=async $=>{e(!0),t(null);try{const G=$??o,se=await xi(c.id,G);v(se.data),f(G),k([])}catch(G){const se=G.response?.data?.error||"目录加载失败";t(se)}finally{e(!1)}};W.useEffect(()=>{let $=!1;return(async()=>{l(null),b(""),d(!1),y([]),D(!1),j(null),pe("cancel",!1),C(kt),M(!1),p.current=!1,z("name"),Y("asc"),n.current.forEach(G=>G()),n.current.clear();try{const G=await bi(c.id);$||(f(G.data.path),await me(G.data.path))}catch{$||await me("/")}})(),()=>{$=!0,pe("cancel",!1),p.current=!1,n.current.forEach(G=>G()),n.current.clear()}},[c.id]),W.useEffect(()=>{T?.(me)},[T]),W.useEffect(()=>{if(x)return;const $=new Set(g.filter(G=>G.name.startsWith(".")&&_.includes(G.name)).map(G=>G.name));$.size!==0&&k(_.filter(G=>!$.has(G)))},[g,k,_,x]),W.useEffect(()=>{if(!S)return;const $=G=>{r.current?.contains(G.target)||R(!1)};return document.addEventListener("mousedown",$),()=>document.removeEventListener("mousedown",$)},[S]);function Se($,G){return $==="/"?`/${G}`:`${$.replace(/\/$/,"")}/${G}`}function we($,G){y(se=>se.map(ce=>ce.id===$?G(ce):ce))}function Ce($){const G=`${Date.now()}-${$.name}-${Math.random().toString(36).slice(2,8)}`;return y(se=>[{id:G,filename:$.name,status:"queued",progress:0,transferredBytes:0,totalBytes:$.size,message:"等待上传",createdAt:Date.now()},...se]),G}function Ae($){const G=$.response;return G?.status!==409||G.data?.code!=="SFTP_UPLOAD_CONFLICT"?null:G.data}function pe($,G=L){const se=h.current;h.current=null,C(kt),M(!1),se?.({action:$,applyToAll:G})}function Me($,G){return M(!1),C({visible:!0,fileName:$.fileName,fileType:$.conflictType,canOverwrite:$.canOverwrite,queueId:G,message:$.message}),new Promise(se=>{h.current=se})}async function Ne($,G){F(null);try{const se=Se(o,$.name),ce=await Li(c.id,se,G);F(ce.data.message),setTimeout(()=>F(null),4e3),await me()}catch(se){F(ns(se,"压缩失败"))}}async function ke($){F(null);try{const G=Se(o,$.name),se=await Di(c.id,G);F(se.data.message),setTimeout(()=>F(null),4e3),await me()}catch(G){F(ns(G,"解压失败"))}}async function ze(){const $=g.filter(G=>_.includes(G.name));await Promise.all($.map(G=>ts(c.id,Se(o,G.name),G.directory))),await me()}async function Le($){await Si(c.id,Se(o,$)),await me()}async function Be($,G,se,ce){const ge=(await Ds(c.id,G,$,{overwrite:ce})).data.taskId;we(se,ve=>({...ve,remoteTaskId:ge,status:"running",message:ce?"正在覆盖上传...":"正在上传..."}));const Ue=Rs(ge,ve=>{we(se,Oe=>({...Oe,remoteTaskId:ve.taskId,status:ve.status,progress:ve.progress,transferredBytes:ve.transferredBytes,totalBytes:ve.totalBytes,message:ve.error||(ve.status==="success"?"上传完成":"正在上传...")})),ve.status==="success"&&me(),(ve.status==="success"||ve.status==="error")&&(n.current.get(ge)?.(),n.current.delete(ge))});n.current.set(ge,Ue)}async function le($){if($.length===0)return;if(p.current){l("当前上传批次仍在处理中,请先完成冲突选择。");return}const G=o,se={applyToAll:!1,action:null};p.current=!0,M(!1),l(`已开始上传到 ${G}`);try{for(const ce of $){const De=Ce(ce);let ge=se.applyToAll&&se.action==="overwrite";for(;;)try{await Be(ce,G,De,ge);break}catch(Ue){const ve=Ae(Ue);if(!ve){const je=Ue.response?.data?.message||Ue.response?.data?.error||"上传失败";we(De,Ct=>({...Ct,status:"error",message:je}));break}we(De,je=>({...je,status:"queued",message:ve.canOverwrite?"等待冲突处理":"检测到同名文件夹,等待处理"}));let Oe;if(se.applyToAll&&se.action&&(se.action!=="overwrite"||ve.canOverwrite)?Oe={action:se.action,applyToAll:!0}:Oe=await Me(ve,De),Oe.action==="cancel"){se.applyToAll=!1,se.action=null,we(De,je=>({...je,status:"cancelled",message:"已取消上传"})),l("已取消当前上传批次,剩余文件未开始上传。");return}if(Oe.applyToAll?(se.applyToAll=!0,se.action=Oe.action):(se.applyToAll=!1,se.action=null),Oe.action==="skip"){we(De,je=>({...je,status:"skipped",message:"已跳过冲突文件"}));break}ge=!0,we(De,je=>({...je,status:"queued",message:"准备覆盖上传"}))}}}finally{p.current=!1,M(!1)}}function Ie(){R(!1),l("后端暂未支持文件夹上传,后续实现。")}function it($,G){const se=G.relatedTarget;se instanceof Node&&G.currentTarget.contains(se)||j(ce=>ce===$?null:ce)}function Ve($){if($===I){Y(G=>G==="asc"?"desc":"asc");return}z($),Y($==="mtime"?"desc":"asc")}function et($){return I!==$?"none":K==="asc"?"ascending":"descending"}function St(){y($=>$.filter(G=>G.status==="queued"||G.status==="running"))}return a.jsxs("div",{className:"relative flex h-full flex-col bg-surface-app",children:[a.jsx("input",{ref:A,type:"file",multiple:!0,className:"hidden",onChange:$=>{const G=Array.from($.target.files??[]);le(G),$.currentTarget.value=""}}),a.jsxs("div",{className:"flex min-h-14 flex-nowrap items-center gap-2 border-b border-border-main bg-surface-panel px-3 py-2",children:[a.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-2 overflow-hidden",children:[a.jsx("button",{className:"inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-xl border border-border-subtle bg-surface-panel text-content-muted transition hover:border-border-main hover:bg-surface-muted hover:text-content-main disabled:cursor-not-allowed disabled:opacity-40",onClick:()=>{if(o==="/")return;const $=o.split("/").slice(0,-1).join("/")||"/";me($)},disabled:o==="/",title:"返回上级目录","aria-label":"返回上级目录",children:a.jsx(bs,{className:"rotate-180",size:16})}),a.jsxs("div",{className:ye,onFocusCapture:()=>j("path"),onBlurCapture:$=>it("path",$),children:[a.jsx(Qe,{size:14,className:"mr-2 shrink-0 text-blue-400 transition-colors group-focus-within:text-blue-300"}),a.jsx("input",{className:"min-w-0 flex-1 bg-transparent outline-none placeholder:text-content-dim",value:o,onChange:$=>f($.target.value),onKeyDown:$=>{$.key==="Enter"&&me(o)}})]}),a.jsxs("div",{className:$e,onFocusCapture:()=>j("search"),onBlurCapture:$=>it("search",$),children:[a.jsx(ys,{size:14,className:"absolute left-3 top-1/2 -translate-y-1/2 text-content-dim transition-colors group-focus-within:text-blue-400"}),a.jsx("input",{type:"text",placeholder:"搜索文件...",value:u,onChange:$=>b($.target.value),className:"h-full w-full min-w-0 bg-transparent py-2 pl-9 pr-8 text-xs text-content-main outline-none placeholder:text-content-dim"}),u?a.jsx("button",{onClick:()=>b(""),className:"absolute right-2 top-1/2 -translate-y-1/2 rounded-full p-1 text-content-dim transition hover:bg-surface-muted hover:text-content-muted",title:"清空搜索","aria-label":"清空搜索",children:a.jsx(At,{size:12})}):null]})]}),a.jsxs("div",{className:"ml-auto flex shrink-0 items-center gap-1.5 rounded-2xl border border-border-subtle bg-surface-control p-1",children:[a.jsxs("div",{className:"relative",ref:r,children:[a.jsxs("button",{className:de("relative inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-xl border border-border-subtle bg-surface-panel text-content-muted transition hover:border-border-main hover:bg-surface-muted hover:text-content-main",S||he>0?"border-blue-500/50 bg-blue-500/10 text-blue-200":void 0),onClick:()=>R($=>!$),title:"上传","aria-label":ie,"aria-haspopup":"menu","aria-controls":xe,"aria-expanded":S,children:[a.jsx(ht,{size:16}),a.jsx(ct,{size:11,"aria-hidden":"true",className:de("absolute bottom-1 right-1 text-content-dim transition",S||he>0?"text-blue-200":"text-content-dim",S&&"rotate-180")}),he>0?a.jsx("span",{"aria-hidden":"true",className:"absolute -right-1 -top-1 rounded-full bg-blue-500/20 px-1.5 py-0.5 text-[10px] leading-none text-blue-100",children:he}):null]}),S?a.jsxs("div",{id:xe,role:"menu",className:"absolute right-0 top-[calc(100%+8px)] z-20 w-44 overflow-hidden rounded-2xl border border-border-main bg-surface-card shadow-2xl shadow-black/40",children:[a.jsxs("button",{role:"menuitem",className:"flex w-full items-center gap-2 px-4 py-3 text-left text-sm text-content-main transition hover:bg-surface-muted",onClick:()=>{R(!1),A.current?.click()},children:[a.jsx(ht,{size:14,className:"text-blue-400"}),"上传文件..."]}),a.jsxs("button",{role:"menuitem",className:"flex w-full items-center gap-2 border-t border-border-subtle px-4 py-3 text-left text-sm text-content-main transition hover:bg-surface-muted",onClick:Ie,children:[a.jsx(Qe,{size:14,className:"text-amber-400"}),"上传文件夹..."]})]}):null]}),a.jsx("button",{className:"relative inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-xl border border-border-subtle bg-surface-panel text-content-muted transition hover:border-border-main hover:bg-surface-muted hover:text-content-main",onClick:()=>{me()},title:"刷新目录","aria-label":"刷新目录",children:a.jsx(pt,{size:16})}),a.jsx("button",{className:de("relative inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-xl border border-border-subtle bg-surface-panel text-content-muted transition hover:border-border-main hover:bg-surface-muted hover:text-content-main",x?"border-blue-500/50 bg-blue-500/10 text-blue-200":void 0),onClick:()=>d($=>!$),title:x?"关闭隐藏文件显示":"显示隐藏文件","aria-label":x?"关闭隐藏文件显示":"显示隐藏文件","aria-pressed":x,children:x?a.jsx(kr,{size:16}):a.jsx(yr,{size:16})}),a.jsx("button",{className:"relative inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-xl border border-border-subtle bg-surface-panel text-content-muted transition hover:border-border-main hover:bg-surface-muted hover:text-content-main",onClick:()=>D(!0),title:"新建目录","aria-label":"新建目录",children:a.jsx(Mr,{size:16})})]})]}),i?a.jsx("div",{className:"border-b border-blue-900/30 bg-blue-950/20 px-4 py-2 text-sm text-blue-200",children:i}):null,_.length>0?a.jsxs("div",{className:"flex h-10 items-center justify-between border-b border-blue-900/50 bg-blue-900/15 px-4 text-sm",children:[a.jsxs("span",{className:"text-blue-300",children:["已选择 ",_.length," 项"]}),a.jsxs("div",{className:"flex items-center gap-3 text-content-muted",children:[a.jsxs("button",{onClick:()=>g.filter($=>_.includes($.name)).forEach($=>{es(c.id,Se(o,$.name),$.name)}),className:"flex items-center gap-1 hover:text-content-main",children:[a.jsx(Xt,{size:14}),"下载"]}),a.jsxs("button",{onClick:()=>{ze()},className:"flex items-center gap-1 hover:text-red-400",children:[a.jsx(_t,{size:14}),"删除"]})]})]}):null,a.jsx("div",{className:"flex-1 overflow-auto isolate",children:a.jsxs("table",{className:"min-w-[48rem] w-full text-left text-sm text-content-muted",children:[a.jsx("thead",{className:"text-xs text-content-dim",children:a.jsxs("tr",{children:[a.jsx("th",{className:"sticky top-0 z-20 w-10 border-b border-border-main bg-surface-panel px-4 py-3",children:a.jsx("input",{type:"checkbox",checked:ue,onChange:()=>k(ue?_.filter($=>!ee.some(G=>G.name===$)):Array.from(new Set([..._,...ee.map($=>$.name)])))})}),a.jsx("th",{className:"sticky top-0 z-20 border-b border-border-main bg-surface-panel px-2 py-3","aria-sort":et("name"),children:a.jsxs("button",{type:"button",className:de("inline-flex items-center gap-1.5 rounded-md transition hover:text-content-main",I==="name"?"text-blue-400":void 0),onClick:()=>Ve("name"),title:I==="name"&&K==="asc"?"按文件名降序排序":"按文件名升序排序","aria-label":I==="name"&&K==="asc"?"按文件名降序排序":"按文件名升序排序",children:[a.jsx("span",{children:"文件名"}),I==="name"?a.jsx(ct,{size:13,className:de("transition",K==="asc"?"rotate-180":void 0)}):a.jsx("span",{"aria-hidden":"true",className:"text-[10px] text-content-dim",children:"⇅"})]})}),a.jsx("th",{className:"sticky top-0 z-20 w-24 border-b border-border-main bg-surface-panel px-4 py-3",children:"大小"}),a.jsx("th",{className:"sticky top-0 z-20 w-44 border-b border-border-main bg-surface-panel px-4 py-3","aria-sort":et("mtime"),children:a.jsxs("button",{type:"button",className:de("inline-flex items-center gap-1.5 rounded-md whitespace-nowrap transition hover:text-content-main",I==="mtime"?"text-blue-400":void 0),onClick:()=>Ve("mtime"),title:I==="mtime"&&K==="desc"?"按修改时间从旧到新排序":"按修改时间从新到旧排序","aria-label":I==="mtime"&&K==="desc"?"按修改时间从旧到新排序":"按修改时间从新到旧排序",children:[a.jsx("span",{children:"修改时间"}),I==="mtime"?a.jsx(ct,{size:13,className:de("transition",K==="asc"?"rotate-180":void 0)}):a.jsx("span",{"aria-hidden":"true",className:"text-[10px] text-content-dim",children:"⇅"})]})}),a.jsx("th",{className:"sticky top-0 z-20 w-28 border-b border-border-main bg-surface-panel px-4 py-3",children:"权限"})]})}),a.jsxs("tbody",{children:[m?a.jsx("tr",{children:a.jsx("td",{colSpan:5,className:"px-4 py-8 text-center text-content-dim",children:"正在加载目录..."})}):null,s?a.jsx("tr",{children:a.jsx("td",{colSpan:5,className:"px-4 py-8 text-center text-red-300",children:s})}):null,!m&&!s&&ee.length===0?a.jsx("tr",{children:a.jsx("td",{colSpan:5,className:"px-4 py-16 text-center text-content-dim",children:a.jsxs("div",{className:"mx-auto flex max-w-sm flex-col items-center gap-3 rounded-[28px] border border-dashed border-border-subtle bg-surface-muted/40 px-6 py-8",children:[a.jsx(ht,{size:22,className:"text-blue-400"}),a.jsx("div",{className:"text-sm text-content-muted",children:g.length===0?"当前目录为空":q.length===0&&!U?"当前目录暂无可见文件":"未找到匹配文件"}),a.jsx("div",{className:"text-xs text-content-dim",children:g.length===0?"拖拽文件到这里,或使用上方“上传文件...”入口开始传输。":q.length===0&&!U?"当前目录内容均为隐藏文件,可点击上方眼睛按钮临时显示。":"尝试更换关键词,或清空搜索后查看当前目录全部内容。"})]})})}):null,!m&&!s?J.map($=>{const G=_.includes($.name);return a.jsxs("tr",{className:`group border-b border-border-subtle ${G?"bg-blue-500/10":"hover:bg-surface-muted"}`,onDoubleClick:()=>{$.directory&&me(Se(o,$.name))},children:[a.jsx("td",{className:"px-4 py-3",children:a.jsx("input",{type:"checkbox",checked:G,onChange:()=>k(G?_.filter(se=>se!==$.name):[..._,$.name])})}),a.jsxs("td",{className:"relative px-2 py-3",children:[a.jsxs("div",{className:"flex items-center gap-2",children:[$.directory?a.jsx(Qe,{size:16,className:"text-blue-400"}):a.jsx(Lr,{size:16,className:"text-content-dim"}),a.jsx("span",{className:"truncate text-content-main",children:$.name})]}),a.jsxs("div",{className:"absolute right-2 top-1/2 hidden -translate-y-1/2 gap-1 rounded-lg border border-border-subtle bg-surface-card p-1 group-hover:flex",children:[$.directory?a.jsx("button",{className:"p-1 text-content-dim hover:text-blue-400",onClick:()=>{Ne($,"tar.gz")},title:`压缩 ${$.name}`,children:a.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[a.jsx("path",{d:"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"}),a.jsx("polyline",{points:"3.27 6.96 12 12.01 20.73 6.96"}),a.jsx("line",{x1:"12",y1:"22.08",x2:"12",y2:"12"})]})}):a.jsx("button",{className:"p-1 text-content-dim hover:text-cyan-400",onClick:()=>ne(Se(o,$.name)),title:`编辑 ${$.name}`,children:a.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[a.jsx("path",{d:"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"}),a.jsx("path",{d:"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"})]})}),$.name.endsWith(".tar.gz")||$.name.endsWith(".zip")||$.name.endsWith(".tgz")?a.jsx("button",{className:"p-1 text-content-dim hover:text-amber-400",onClick:()=>{ke($)},title:`解压 ${$.name}`,children:a.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[a.jsx("polyline",{points:"23 6 13.5 15.5 8.5 10.5 1 18"}),a.jsx("polyline",{points:"17 6 23 6 23 12"})]})}):null,a.jsx("button",{className:"p-1 text-content-dim hover:text-blue-300",onClick:()=>{es(c.id,Se(o,$.name),$.name)},title:`下载 ${$.name}`,children:a.jsx(Xt,{size:13})}),a.jsx("button",{className:"p-1 text-content-dim hover:text-red-400",onClick:()=>{ts(c.id,Se(o,$.name),$.directory).then(()=>me())},title:`删除 ${$.name}`,children:a.jsx(_t,{size:13})})]})]}),a.jsx("td",{className:"px-4 py-3 text-content-dim",children:$.directory?"-":st($.size)}),a.jsx("td",{className:"whitespace-nowrap px-4 py-3 font-mono text-[11px] tabular-nums text-content-dim",children:li($.mtime)}),a.jsx("td",{className:"px-4 py-3 font-mono text-xs text-content-dim",children:ci($)})]},$.name)}):null]})]})}),N.length>0?a.jsx("div",{className:"pointer-events-none absolute bottom-4 right-4 z-10 w-[min(360px,calc(100%-2rem))]",children:a.jsxs("div",{className:"pointer-events-auto overflow-hidden rounded-[28px] border border-border-main bg-surface-card shadow-2xl shadow-black/30 backdrop-blur",children:[a.jsxs("div",{className:"flex items-center justify-between border-b border-border-subtle px-4 py-3",children:[a.jsxs("div",{children:[a.jsx("div",{className:"text-sm font-medium text-content-main",children:"上传队列"}),a.jsx("div",{className:"text-xs text-content-dim",children:"单文件上传已接入现有接口与进度流。"})]}),a.jsx("button",{className:"text-xs text-content-dim transition hover:text-content-main",onClick:St,children:"清空已完成"})]}),a.jsx("div",{className:"max-h-72 space-y-3 overflow-auto p-3",children:N.map($=>a.jsxs("div",{className:"rounded-2xl border border-border-subtle bg-surface-panel p-3",children:[a.jsxs("div",{className:"flex items-start justify-between gap-3",children:[a.jsxs("div",{className:"min-w-0",children:[a.jsx("div",{className:"truncate text-sm text-content-main",children:$.filename}),a.jsxs("div",{className:"mt-1 flex items-center gap-2 text-xs text-content-dim",children:[$.status==="running"||$.status==="queued"?a.jsx(Cs,{size:12,className:"animate-spin text-blue-400"}):$.status==="success"?a.jsx(bt,{size:12,className:"text-emerald-400"}):$.status==="skipped"||$.status==="cancelled"?a.jsx(At,{size:12,className:"text-content-dim"}):a.jsx(Gt,{size:12,className:"text-red-400"}),a.jsx("span",{children:$.message})]})]}),a.jsxs("span",{className:"text-xs text-content-dim",children:[$.progress,"%"]})]}),a.jsx("div",{className:"mt-3 h-2 rounded-full bg-surface-muted",children:a.jsx("div",{className:de("h-2 rounded-full transition-all",$.status==="success"?"bg-emerald-500":$.status==="skipped"||$.status==="cancelled"?"bg-content-dim":$.status==="error"?"bg-red-500":"bg-blue-500"),style:{width:`${$.progress}%`}})}),a.jsxs("div",{className:"mt-2 text-[11px] text-content-dim",children:[st($.transferredBytes)," / ",st($.totalBytes)]})]},$.id))})]})}):null,P.visible?a.jsx(Fe,{title:"文件冲突",maxWidth:"max-w-lg",onClose:()=>pe("cancel",!1),footer:a.jsxs(a.Fragment,{children:[a.jsx("button",{onClick:()=>pe("cancel",!1),className:"rounded bg-surface-muted px-4 py-2 text-sm text-content-muted transition-colors hover:bg-surface-panel hover:text-content-main",children:"取消"}),a.jsx("button",{onClick:()=>pe("skip"),className:"rounded bg-surface-muted px-4 py-2 text-sm text-content-muted transition-colors hover:bg-surface-panel hover:text-content-main",children:"跳过"}),a.jsx("button",{onClick:()=>pe("overwrite"),disabled:!P.canOverwrite,className:de("rounded px-4 py-2 text-sm transition-colors",P.canOverwrite?"bg-blue-600 text-white hover:bg-blue-500 shadow-lg shadow-blue-500/20":"cursor-not-allowed bg-surface-muted text-content-dim shadow-none"),children:"覆盖"})]}),children:a.jsxs("div",{className:"flex items-start gap-3 text-content-muted",children:[a.jsx(Gt,{className:"mt-0.5 shrink-0 text-yellow-500",size:24}),a.jsxs("div",{children:[a.jsxs("p",{className:"mb-2",children:["目标目录中已存在名为 ",a.jsx("strong",{className:"text-content-main",children:P.fileName})," 的",P.fileType==="dir"?"文件夹":"文件","。"]}),a.jsx("p",{className:"text-sm text-content-dim",children:P.message}),P.canOverwrite?a.jsx("p",{className:"mt-2 text-sm text-content-dim",children:"请选择要执行的操作:覆盖原有文件,或者跳过该传输任务。"}):a.jsx("p",{className:"mt-2 text-sm text-content-dim",children:"同名文件夹无法直接覆盖,请选择跳过该文件或取消当前批次。"}),a.jsxs("label",{className:"group mt-5 flex w-max cursor-pointer items-center gap-2",children:[a.jsx("input",{type:"checkbox",checked:L,onChange:$=>M($.target.checked),className:"cursor-pointer rounded border-border-main bg-surface-control text-blue-500 transition-colors focus:ring-blue-500 focus:ring-offset-surface-app"}),a.jsx("span",{className:"text-sm text-content-muted transition-colors group-hover:text-content-main",children:"应用到之后的所有冲突文件"})]})]})]})}):null,a.jsx(Yi,{open:E,currentPath:o,onClose:()=>D(!1),onSubmit:Le}),w?a.jsx("div",{className:"absolute bottom-4 left-4 z-10 rounded-xl border border-blue-800/40 bg-blue-950/80 px-4 py-2 text-xs text-blue-200 shadow-xl backdrop-blur",children:w}):null,X&&a.jsx(Xi,{open:!!X,connectionId:c.id,filePath:X,onClose:()=>ne(null)}),O?(()=>{const $=_.length===1?_[0]:null,G=$?Se(o,$):o;return a.jsx("div",{className:"shrink-0 border-t border-purple-900/50 bg-purple-950/30 px-4 py-3",children:a.jsxs("div",{className:"flex items-center gap-3",children:[a.jsxs("div",{className:"min-w-0 flex-1",children:[a.jsx("p",{className:"text-xs text-content-dim",children:$?"已选择文件/文件夹":"将选择当前目录"}),a.jsx("p",{className:"mt-0.5 truncate font-mono text-xs text-purple-400",children:G})]}),a.jsx("button",{className:"shrink-0 rounded-xl bg-purple-600 px-4 py-2 text-sm font-medium text-white transition hover:bg-purple-500",onClick:()=>H?.(G),children:"确认选择"})]})})})():null]})}var Et={exports:{}},os;function Ji(){return os||(os=1,(function(c,_){(function(k,T){c.exports=T()})(self,(()=>(()=>{var k={};return(()=>{var T=k;Object.defineProperty(T,"__esModule",{value:!0}),T.FitAddon=void 0,T.FitAddon=class{activate(O){this._terminal=O}dispose(){}fit(){const O=this.proposeDimensions();if(!O||!this._terminal||isNaN(O.cols)||isNaN(O.rows))return;const H=this._terminal._core;this._terminal.rows===O.rows&&this._terminal.cols===O.cols||(H._renderService.clear(),this._terminal.resize(O.cols,O.rows))}proposeDimensions(){if(!this._terminal||!this._terminal.element||!this._terminal.element.parentElement)return;const O=this._terminal._core,H=O._renderService.dimensions;if(H.css.cell.width===0||H.css.cell.height===0)return;const A=this._terminal.options.scrollback===0?0:O.viewport.scrollBarWidth,r=window.getComputedStyle(this._terminal.element.parentElement),n=parseInt(r.getPropertyValue("height")),h=Math.max(0,parseInt(r.getPropertyValue("width"))),p=window.getComputedStyle(this._terminal.element),o=n-(parseInt(p.getPropertyValue("padding-top"))+parseInt(p.getPropertyValue("padding-bottom"))),f=h-(parseInt(p.getPropertyValue("padding-right"))+parseInt(p.getPropertyValue("padding-left")))-A;return{cols:Math.max(2,Math.floor(f/H.css.cell.width)),rows:Math.max(1,Math.floor(o/H.css.cell.height))}}}})(),k})()))})(Et)),Et.exports}var Qi=Ji();var Zi=class{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(c){setTimeout(()=>{throw c.stack?as.isErrorNoTelemetry(c)?new as(c.message+` + +`+c.stack):new Error(c.message+` + +`+c.stack):c},0)}}addListener(c){return this.listeners.push(c),()=>{this._removeListener(c)}}emit(c){this.listeners.forEach(_=>{_(c)})}_removeListener(c){this.listeners.splice(this.listeners.indexOf(c),1)}setUnexpectedErrorHandler(c){this.unexpectedErrorHandler=c}getUnexpectedErrorHandler(){return this.unexpectedErrorHandler}onUnexpectedError(c){this.unexpectedErrorHandler(c),this.emit(c)}onUnexpectedExternalError(c){this.unexpectedErrorHandler(c)}},en=new Zi;function Lt(c){tn(c)||en.onUnexpectedError(c)}var Nt="Canceled";function tn(c){return c instanceof sn?!0:c instanceof Error&&c.name===Nt&&c.message===Nt}var sn=class extends Error{constructor(){super(Nt),this.name=this.message}},as=class It extends Error{constructor(_){super(_),this.name="CodeExpectedError"}static fromError(_){if(_ instanceof It)return _;let k=new It;return k.message=_.message,k.stack=_.stack,k}static isErrorNoTelemetry(_){return _.name==="CodeExpectedError"}},rn;(c=>{function _(H){return H<0}c.isLessThan=_;function k(H){return H<=0}c.isLessThanOrEqual=k;function T(H){return H>0}c.isGreaterThan=T;function O(H){return H===0}c.isNeitherLessOrGreaterThan=O,c.greaterThan=1,c.lessThan=-1,c.neitherLessOrGreaterThan=0})(rn||={});function nn(c,_){let k=this,T=!1,O;return function(){return T||(T=!0,_||(O=c.apply(k,arguments))),O}}var Ns;(c=>{function _(l){return l&&typeof l=="object"&&typeof l[Symbol.iterator]=="function"}c.is=_;let k=Object.freeze([]);function T(){return k}c.empty=T;function*O(l){yield l}c.single=O;function H(l){return _(l)?l:O(l)}c.wrap=H;function A(l){return l||k}c.from=A;function*r(l){for(let u=l.length-1;u>=0;u--)yield l[u]}c.reverse=r;function n(l){return!l||l[Symbol.iterator]().next().done===!0}c.isEmpty=n;function h(l){return l[Symbol.iterator]().next().value}c.first=h;function p(l,u){let b=0;for(let x of l)if(u(x,b++))return!0;return!1}c.some=p;function o(l,u){for(let b of l)if(u(b))return b}c.find=o;function*f(l,u){for(let b of l)u(b)&&(yield b)}c.filter=f;function*g(l,u){let b=0;for(let x of l)yield u(x,b++)}c.map=g;function*v(l,u){let b=0;for(let x of l)yield*u(x,b++)}c.flatMap=v;function*m(...l){for(let u of l)yield*u}c.concat=m;function e(l,u,b){let x=b;for(let d of l)x=u(x,d);return x}c.reduce=e;function*s(l,u,b=l.length){for(u<0&&(u+=l.length),b<0?b+=l.length:b>l.length&&(b=l.length);u1)throw new AggregateError(_,"Encountered errors while disposing of store");return Array.isArray(c)?[]:c}else if(c)return c.dispose(),c}function Is(...c){return Ze(()=>rt(c))}function Ze(c){return{dispose:nn(()=>{c()})}}var js=class Bs{constructor(){this._toDispose=new Set,this._isDisposed=!1}dispose(){this._isDisposed||(this._isDisposed=!0,this.clear())}get isDisposed(){return this._isDisposed}clear(){if(this._toDispose.size!==0)try{rt(this._toDispose)}finally{this._toDispose.clear()}}add(_){if(!_)return _;if(_===this)throw new Error("Cannot register a disposable on itself!");return this._isDisposed?Bs.DISABLE_DISPOSED_WARNING||console.warn(new Error("Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!").stack):this._toDispose.add(_),_}delete(_){if(_){if(_===this)throw new Error("Cannot dispose a disposable on itself!");this._toDispose.delete(_),_.dispose()}}deleteAndLeak(_){_&&this._toDispose.has(_)&&(this._toDispose.delete(_),void 0)}};js.DISABLE_DISPOSED_WARNING=!1;var Wt=js,Ke=class{constructor(){this._store=new Wt,this._store}dispose(){this._store.dispose()}_register(c){if(c===this)throw new Error("Cannot register a disposable on itself!");return this._store.add(c)}};Ke.None=Object.freeze({dispose(){}});var gt=class{constructor(){this._isDisposed=!1}get value(){return this._isDisposed?void 0:this._value}set value(c){this._isDisposed||c===this._value||(this._value?.dispose(),this._value=c)}clear(){this.value=void 0}dispose(){this._isDisposed=!0,this._value?.dispose(),this._value=void 0}clearAndLeak(){let c=this._value;return this._value=void 0,c}},on=globalThis.performance&&typeof globalThis.performance.now=="function",an=class Os{static create(_){return new Os(_)}constructor(_){this._now=on&&_===!1?Date.now:globalThis.performance.now.bind(globalThis.performance),this._startTime=this._now(),this._stopTime=-1}stop(){this._stopTime=this._now()}reset(){this._startTime=this._now(),this._stopTime=-1}elapsed(){return this._stopTime!==-1?this._stopTime-this._startTime:this._now()-this._startTime}},$t;(c=>{c.None=()=>Ke.None;function _(y,E){return o(y,()=>{},0,void 0,!0,void 0,E)}c.defer=_;function k(y){return(E,D=null,B)=>{let j=!1,P;return P=y(C=>{if(!j)return P?P.dispose():j=!0,E.call(D,C)},null,B),j&&P.dispose(),P}}c.once=k;function T(y,E,D){return h((B,j=null,P)=>y(C=>B.call(j,E(C)),null,P),D)}c.map=T;function O(y,E,D){return h((B,j=null,P)=>y(C=>{E(C),B.call(j,C)},null,P),D)}c.forEach=O;function H(y,E,D){return h((B,j=null,P)=>y(C=>E(C)&&B.call(j,C),null,P),D)}c.filter=H;function A(y){return y}c.signal=A;function r(...y){return(E,D=null,B)=>{let j=Is(...y.map(P=>P(C=>E.call(D,C))));return p(j,B)}}c.any=r;function n(y,E,D,B){let j=D;return T(y,P=>(j=E(j,P),j),B)}c.reduce=n;function h(y,E){let D,B={onWillAddFirstListener(){D=y(j.fire,j)},onDidRemoveLastListener(){D?.dispose()}},j=new Pe(B);return E?.add(j),j.event}function p(y,E){return E instanceof Array?E.push(y):E&&E.add(y),y}function o(y,E,D=100,B=!1,j=!1,P,C){let L,M,I,z=0,K,Y={leakWarningThreshold:P,onWillAddFirstListener(){L=y(ne=>{z++,M=E(M,ne),B&&!I&&(X.fire(M),M=void 0),K=()=>{let w=M;M=void 0,I=void 0,(!B||z>1)&&X.fire(w),z=0},typeof D=="number"?(clearTimeout(I),I=setTimeout(K,D)):I===void 0&&(I=0,queueMicrotask(K))})},onWillRemoveListener(){j&&z>0&&K?.()},onDidRemoveLastListener(){K=void 0,L.dispose()}},X=new Pe(Y);return C?.add(X),X.event}c.debounce=o;function f(y,E=0,D){return c.debounce(y,(B,j)=>B?(B.push(j),B):[j],E,void 0,!0,void 0,D)}c.accumulate=f;function g(y,E=(B,j)=>B===j,D){let B=!0,j;return H(y,P=>{let C=B||!E(P,j);return B=!1,j=P,C},D)}c.latch=g;function v(y,E,D){return[c.filter(y,E,D),c.filter(y,B=>!E(B),D)]}c.split=v;function m(y,E=!1,D=[],B){let j=D.slice(),P=y(M=>{j?j.push(M):L.fire(M)});B&&B.add(P);let C=()=>{j?.forEach(M=>L.fire(M)),j=null},L=new Pe({onWillAddFirstListener(){P||(P=y(M=>L.fire(M)),B&&B.add(P))},onDidAddFirstListener(){j&&(E?setTimeout(C):C())},onDidRemoveLastListener(){P&&P.dispose(),P=null}});return B&&B.add(L),L.event}c.buffer=m;function e(y,E){return(D,B,j)=>{let P=E(new t);return y(function(C){let L=P.evaluate(C);L!==s&&D.call(B,L)},void 0,j)}}c.chain=e;let s=Symbol("HaltChainable");class t{constructor(){this.steps=[]}map(E){return this.steps.push(E),this}forEach(E){return this.steps.push(D=>(E(D),D)),this}filter(E){return this.steps.push(D=>E(D)?D:s),this}reduce(E,D){let B=D;return this.steps.push(j=>(B=E(B,j),B)),this}latch(E=(D,B)=>D===B){let D=!0,B;return this.steps.push(j=>{let P=D||!E(j,B);return D=!1,B=j,P?j:s}),this}evaluate(E){for(let D of this.steps)if(E=D(E),E===s)break;return E}}function i(y,E,D=B=>B){let B=(...L)=>C.fire(D(...L)),j=()=>y.on(E,B),P=()=>y.removeListener(E,B),C=new Pe({onWillAddFirstListener:j,onDidRemoveLastListener:P});return C.event}c.fromNodeEventEmitter=i;function l(y,E,D=B=>B){let B=(...L)=>C.fire(D(...L)),j=()=>y.addEventListener(E,B),P=()=>y.removeEventListener(E,B),C=new Pe({onWillAddFirstListener:j,onDidRemoveLastListener:P});return C.event}c.fromDOMEventEmitter=l;function u(y){return new Promise(E=>k(y)(E))}c.toPromise=u;function b(y){let E=new Pe;return y.then(D=>{E.fire(D)},()=>{E.fire(void 0)}).finally(()=>{E.dispose()}),E.event}c.fromPromise=b;function x(y,E){return y(D=>E.fire(D))}c.forward=x;function d(y,E,D){return E(D),y(B=>E(B))}c.runAndSubscribe=d;class S{constructor(E,D){this._observable=E,this._counter=0,this._hasChanged=!1;let B={onWillAddFirstListener:()=>{E.addObserver(this)},onDidRemoveLastListener:()=>{E.removeObserver(this)}};this.emitter=new Pe(B),D&&D.add(this.emitter)}beginUpdate(E){this._counter++}handlePossibleChange(E){}handleChange(E,D){this._hasChanged=!0}endUpdate(E){this._counter--,this._counter===0&&(this._observable.reportChanges(),this._hasChanged&&(this._hasChanged=!1,this.emitter.fire(this._observable.get())))}}function R(y,E){return new S(y,E).emitter.event}c.fromObservable=R;function N(y){return(E,D,B)=>{let j=0,P=!1,C={beginUpdate(){j++},endUpdate(){j--,j===0&&(y.reportChanges(),P&&(P=!1,E.call(D)))},handlePossibleChange(){},handleChange(){P=!0}};y.addObserver(C),y.reportChanges();let L={dispose(){y.removeObserver(C)}};return B instanceof Wt?B.add(L):Array.isArray(B)&&B.push(L),L}}c.fromObservableLight=N})($t||={});var jt=class Bt{constructor(_){this.listenerCount=0,this.invocationCount=0,this.elapsedOverall=0,this.durations=[],this.name=`${_}_${Bt._idPool++}`,Bt.all.add(this)}start(_){this._stopWatch=new an,this.listenerCount=_}stop(){if(this._stopWatch){let _=this._stopWatch.elapsed();this.durations.push(_),this.elapsedOverall+=_,this.invocationCount+=1,this._stopWatch=void 0}}};jt.all=new Set,jt._idPool=0;var ln=jt,cn=-1,Ps=class Hs{constructor(_,k,T=(Hs._idPool++).toString(16).padStart(3,"0")){this._errorHandler=_,this.threshold=k,this.name=T,this._warnCountdown=0}dispose(){this._stacks?.clear()}check(_,k){let T=this.threshold;if(T<=0||k{let H=this._stacks.get(_.value)||0;this._stacks.set(_.value,H-1)}}getMostFrequentStack(){if(!this._stacks)return;let _,k=0;for(let[T,O]of this._stacks)(!_||k{if(this._leakageMon&&this._size>this._leakageMon.threshold**2){let A=`[${this._leakageMon.name}] REFUSES to accept new listeners because it exceeded its threshold by far (${this._size} vs ${this._leakageMon.threshold})`;console.warn(A);let r=this._leakageMon.getMostFrequentStack()??["UNKNOWN stack",-1],n=new fn(`${A}. HINT: Stack shows most frequent listener (${r[1]}-times)`,r[0]);return(this._options?.onListenerError||Lt)(n),Ke.None}if(this._disposed)return Ke.None;_&&(c=c.bind(_));let T=new Dt(c),O;this._leakageMon&&this._size>=Math.ceil(this._leakageMon.threshold*.2)&&(T.stack=dn.create(),O=this._leakageMon.check(T.stack,this._size+1)),this._listeners?this._listeners instanceof Dt?(this._deliveryQueue??=new vn,this._listeners=[this._listeners,T]):this._listeners.push(T):(this._options?.onWillAddFirstListener?.(this),this._listeners=T,this._options?.onDidAddFirstListener?.(this)),this._size++;let H=Ze(()=>{O?.(),this._removeListener(T)});return k instanceof Wt?k.add(H):Array.isArray(k)&&k.push(H),H},this._event}_removeListener(c){if(this._options?.onWillRemoveListener?.(this),!this._listeners)return;if(this._size===1){this._listeners=void 0,this._options?.onDidRemoveLastListener?.(this),this._size=0;return}let _=this._listeners,k=_.indexOf(c);if(k===-1)throw console.log("disposed?",this._disposed),console.log("size?",this._size),console.log("arr?",JSON.stringify(this._listeners)),new Error("Attempted to dispose unknown listener");this._size--,_[k]=void 0;let T=this._deliveryQueue.current===this;if(this._size*mn<=_.length){let O=0;for(let H=0;H<_.length;H++)_[H]?_[O++]=_[H]:T&&(this._deliveryQueue.end--,O0}},vn=class{constructor(){this.i=-1,this.end=0}enqueue(c,_,k){this.i=0,this.end=k,this.current=c,this.value=_}reset(){this.i=this.end,this.current=void 0,this.value=void 0}},Ws=Object.freeze(function(c,_){let k=setTimeout(c.bind(_),0);return{dispose(){clearTimeout(k)}}}),gn;(c=>{function _(k){return k===c.None||k===c.Cancelled||k instanceof bn?!0:!k||typeof k!="object"?!1:typeof k.isCancellationRequested=="boolean"&&typeof k.onCancellationRequested=="function"}c.isCancellationToken=_,c.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:$t.None}),c.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:Ws})})(gn||={});var bn=class{constructor(){this._isCancelled=!1,this._emitter=null}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?Ws:(this._emitter||(this._emitter=new Pe),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=null)}},Je="en",Rt=!1,at,ut=Je,ls=Je,xn,We,Xe=globalThis,Ee;typeof Xe.vscode<"u"&&typeof Xe.vscode.process<"u"?Ee=Xe.vscode.process:typeof process<"u"&&typeof process?.versions?.node=="string"&&(Ee=process);var Sn=typeof Ee?.versions?.electron=="string",Cn=Sn&&Ee?.type==="renderer";if(typeof Ee=="object"){Ee.platform,Ee.platform,Rt=Ee.platform==="linux",Rt&&Ee.env.SNAP&&Ee.env.SNAP_REVISION,Ee.env.CI||Ee.env.BUILD_ARTIFACTSTAGINGDIRECTORY,at=Je,ut=Je;let c=Ee.env.VSCODE_NLS_CONFIG;if(c)try{let _=JSON.parse(c);at=_.userLocale,ls=_.osLocale,ut=_.resolvedLanguage||Je,xn=_.languagePack?.translationsConfigFile}catch{}}else typeof navigator=="object"&&!Cn?(We=navigator.userAgent,We.indexOf("Windows")>=0,We.indexOf("Macintosh")>=0,(We.indexOf("Macintosh")>=0||We.indexOf("iPad")>=0||We.indexOf("iPhone")>=0)&&navigator.maxTouchPoints&&navigator.maxTouchPoints>0,Rt=We.indexOf("Linux")>=0,We?.indexOf("Mobi")>=0,ut=globalThis._VSCODE_NLS_LANGUAGE||Je,at=navigator.language.toLowerCase(),ls=at):console.error("Unable to resolve platform.");var He=We,qe=ut,yn;(c=>{function _(){return qe}c.value=_;function k(){return qe.length===2?qe==="en":qe.length>=3?qe[0]==="e"&&qe[1]==="n"&&qe[2]==="-":!1}c.isDefaultVariant=k;function T(){return qe==="en"}c.isDefault=T})(yn||={});var wn=typeof Xe.postMessage=="function"&&!Xe.importScripts;(()=>{if(wn){let c=[];Xe.addEventListener("message",k=>{if(k.data&&k.data.vscodeScheduleAsyncWork)for(let T=0,O=c.length;T{let T=++_;c.push({id:T,callback:k}),Xe.postMessage({vscodeScheduleAsyncWork:T},"*")}}return c=>setTimeout(c)})();var kn=!!(He&&He.indexOf("Chrome")>=0);He&&He.indexOf("Firefox")>=0;!kn&&He&&He.indexOf("Safari")>=0;He&&He.indexOf("Edg/")>=0;He&&He.indexOf("Android")>=0;function $s(c,_=0,k){let T=setTimeout(()=>{c()},_);return Ze(()=>{clearTimeout(T)})}var En;(c=>{async function _(T){let O,H=await Promise.all(T.map(A=>A.then(r=>r,r=>{O||(O=r)})));if(typeof O<"u")throw O;return H}c.settled=_;function k(T){return new Promise(async(O,H)=>{try{await T(O,H)}catch(A){H(A)}})}c.withAsyncBody=k})(En||={});var cs=class Te{static fromArray(_){return new Te(k=>{k.emitMany(_)})}static fromPromise(_){return new Te(async k=>{k.emitMany(await _)})}static fromPromises(_){return new Te(async k=>{await Promise.all(_.map(async T=>k.emitOne(await T)))})}static merge(_){return new Te(async k=>{await Promise.all(_.map(async T=>{for await(let O of T)k.emitOne(O)}))})}constructor(_,k){this._state=0,this._results=[],this._error=null,this._onReturn=k,this._onStateChanged=new Pe,queueMicrotask(async()=>{let T={emitOne:O=>this.emitOne(O),emitMany:O=>this.emitMany(O),reject:O=>this.reject(O)};try{await Promise.resolve(_(T)),this.resolve()}catch(O){this.reject(O)}finally{T.emitOne=void 0,T.emitMany=void 0,T.reject=void 0}})}[Symbol.asyncIterator](){let _=0;return{next:async()=>{do{if(this._state===2)throw this._error;if(_(this._onReturn?.(),{done:!0,value:void 0})}}static map(_,k){return new Te(async T=>{for await(let O of _)T.emitOne(k(O))})}map(_){return Te.map(this,_)}static filter(_,k){return new Te(async T=>{for await(let O of _)k(O)&&T.emitOne(O)})}filter(_){return Te.filter(this,_)}static coalesce(_){return Te.filter(_,k=>!!k)}coalesce(){return Te.coalesce(this)}static async toPromise(_){let k=[];for await(let T of _)k.push(T);return k}toPromise(){return Te.toPromise(this)}emitOne(_){this._state===0&&(this._results.push(_),this._onStateChanged.fire())}emitMany(_){this._state===0&&(this._results=this._results.concat(_),this._onStateChanged.fire())}resolve(){this._state===0&&(this._state=1,this._onStateChanged.fire())}reject(_){this._state===0&&(this._state=2,this._error=_,this._onStateChanged.fire())}};cs.EMPTY=cs.fromArray([]);var Ln=class extends Ke{constructor(c){super(),this._terminal=c,this._linesCacheTimeout=this._register(new gt),this._linesCacheDisposables=this._register(new gt),this._register(Ze(()=>this._destroyLinesCache()))}initLinesCache(){this._linesCache||(this._linesCache=new Array(this._terminal.buffer.active.length),this._linesCacheDisposables.value=Is(this._terminal.onLineFeed(()=>this._destroyLinesCache()),this._terminal.onCursorMove(()=>this._destroyLinesCache()),this._terminal.onResize(()=>this._destroyLinesCache()))),this._linesCacheTimeout.value=$s(()=>this._destroyLinesCache(),15e3)}_destroyLinesCache(){this._linesCache=void 0,this._linesCacheDisposables.clear(),this._linesCacheTimeout.clear()}getLineFromCache(c){return this._linesCache?.[c]}setLineInCache(c,_){this._linesCache&&(this._linesCache[c]=_)}translateBufferLineToStringWithWrap(c,_){let k=[],T=[0],O=this._terminal.buffer.active.getLine(c);for(;O;){let H=this._terminal.buffer.active.getLine(c+1),A=H?H.isWrapped:!1,r=O.translateToString(!A&&_);if(A&&H){let n=O.getCell(O.length-1);n&&n.getCode()===0&&n.getWidth()===1&&H.getCell(0)?.getWidth()===2&&(r=r.slice(0,-1))}if(k.push(r),A)T.push(T[T.length-1]+r.length);else break;c++,O=H}return[k.join(""),T]}},Dn=class{get cachedSearchTerm(){return this._cachedSearchTerm}set cachedSearchTerm(c){this._cachedSearchTerm=c}get lastSearchOptions(){return this._lastSearchOptions}set lastSearchOptions(c){this._lastSearchOptions=c}isValidSearchTerm(c){return!!(c&&c.length>0)}didOptionsChange(c){return this._lastSearchOptions?c?this._lastSearchOptions.caseSensitive!==c.caseSensitive||this._lastSearchOptions.regex!==c.regex||this._lastSearchOptions.wholeWord!==c.wholeWord:!1:!0}shouldUpdateHighlighting(c,_){return _?.decorations?this._cachedSearchTerm===void 0||c!==this._cachedSearchTerm||this.didOptionsChange(_):!1}clearCachedTerm(){this._cachedSearchTerm=void 0}reset(){this._cachedSearchTerm=void 0,this._lastSearchOptions=void 0}},Rn=class{constructor(c,_){this._terminal=c,this._lineCache=_}find(c,_,k,T){if(!c||c.length===0){this._terminal.clearSelection();return}if(k>this._terminal.cols)throw new Error(`Invalid col: ${k} to search in terminal of ${this._terminal.cols} cols`);this._lineCache.initLinesCache();let O={startRow:_,startCol:k},H=this._findInLine(c,O,T);if(!H)for(let A=_+1;A=0&&(r.startRow=h,n=this._findInLine(c,r,_,A),!n);h--);}if(!n&&O!==this._terminal.buffer.active.baseY+this._terminal.rows-1)for(let h=this._terminal.buffer.active.baseY+this._terminal.rows-1;h>=O&&(r.startRow=h,n=this._findInLine(c,r,_,A),!n);h--);return n}_isWholeWord(c,_,k){return(c===0||" ~!@#$%^&*()+`-=[]{}|\\;:\"',./<>?".includes(_[c-1]))&&(c+k.length===_.length||" ~!@#$%^&*()+`-=[]{}|\\;:\"',./<>?".includes(_[c+k.length]))}_findInLine(c,_,k={},T=!1){let O=_.startRow,H=_.startCol;if(this._terminal.buffer.active.getLine(O)?.isWrapped){if(T){_.startCol+=this._terminal.cols;return}return _.startRow--,_.startCol+=this._terminal.cols,this._findInLine(c,_,k)}let A=this._lineCache.getLineFromCache(O);A||(A=this._lineCache.translateBufferLineToStringWithWrap(O,!0),this._lineCache.setLineInCache(O,A));let[r,n]=A,h=this._bufferColsToStringOffset(O,H),p=c,o=r;k.regex||(p=k.caseSensitive?c:c.toLowerCase(),o=k.caseSensitive?r:r.toLowerCase());let f=-1;if(k.regex){let g=RegExp(p,k.caseSensitive?"g":"gi"),v;if(T)for(;v=g.exec(o.slice(0,h));)f=g.lastIndex-v[0].length,c=v[0],g.lastIndex-=c.length-1;else v=g.exec(o.slice(h)),v&&v[0].length>0&&(f=h+(g.lastIndex-v[0].length),c=v[0])}else T?h-p.length>=0&&(f=o.lastIndexOf(p,h-p.length)):f=o.indexOf(p,h);if(f>=0){if(k.wholeWord&&!this._isWholeWord(f,o,c))return;let g=0;for(;g=n[g+1];)g++;let v=g;for(;v=n[v+1];)v++;let m=f-n[g],e=f+c.length-n[v],s=this._stringLengthToBufferSize(O+g,m),t=this._stringLengthToBufferSize(O+v,e)-s+this._terminal.cols*(v-g);return{term:c,col:s,row:O+g,size:t}}}_stringLengthToBufferSize(c,_){let k=this._terminal.buffer.active.getLine(c);if(!k)return 0;for(let T=0;T<_;T++){let O=k.getCell(T);if(!O)break;let H=O.getChars();H.length>1&&(_-=H.length-1);let A=k.getCell(T+1);A&&A.getWidth()===0&&_++}return _}_bufferColsToStringOffset(c,_){let k=c,T=0,O=this._terminal.buffer.active.getLine(k);for(;_>0&&O;){for(let H=0;H<_&&Hthis.clearHighlightDecorations()))}createHighlightDecorations(c,_){this.clearHighlightDecorations();for(let k of c){let T=this._createResultDecorations(k,_,!1);if(T)for(let O of T)this._storeDecoration(O,k)}}createActiveDecoration(c,_){let k=this._createResultDecorations(c,_,!0);if(k)return{decorations:k,match:c,dispose(){rt(k)}}}clearHighlightDecorations(){rt(this._highlightDecorations),this._highlightDecorations=[],this._highlightedLines.clear()}_storeDecoration(c,_){this._highlightedLines.add(c.marker.line),this._highlightDecorations.push({decoration:c,match:_,dispose(){c.dispose()}})}_applyStyles(c,_,k){c.classList.contains("xterm-find-result-decoration")||(c.classList.add("xterm-find-result-decoration"),_&&(c.style.outline=`1px solid ${_}`)),k&&c.classList.add("xterm-find-active-result-decoration")}_createResultDecorations(c,_,k){let T=[],O=c.col,H=c.size,A=-this._terminal.buffer.active.baseY-this._terminal.buffer.active.cursorY+c.row;for(;H>0;){let n=Math.min(this._terminal.cols-O,H);T.push([A,O,n]),O=0,H-=n,A++}let r=[];for(let n of T){let h=this._terminal.registerMarker(n[0]),p=this._terminal.registerDecoration({marker:h,x:n[1],width:n[2],backgroundColor:k?_.activeMatchBackground:_.matchBackground,overviewRulerOptions:this._highlightedLines.has(h.line)?void 0:{color:k?_.activeMatchColorOverviewRuler:_.matchOverviewRuler,position:"center"}});if(p){let o=[];o.push(h),o.push(p.onRender(f=>this._applyStyles(f,k?_.activeMatchBorder:_.matchBorder,!1))),o.push(p.onDispose(()=>rt(o))),r.push(p)}}return r.length===0?void 0:r}},An=class extends Ke{constructor(){super(...arguments),this._searchResults=[],this._onDidChangeResults=this._register(new Pe)}get onDidChangeResults(){return this._onDidChangeResults.event}get searchResults(){return this._searchResults}get selectedDecoration(){return this._selectedDecoration}set selectedDecoration(c){this._selectedDecoration=c}updateResults(c,_){this._searchResults=c.slice(0,_)}clearResults(){this._searchResults=[]}clearSelectedDecoration(){this._selectedDecoration&&(this._selectedDecoration.dispose(),this._selectedDecoration=void 0)}findResultIndex(c){for(let _=0;_this._updateMatches())),this._register(this._terminal.onResize(()=>this._updateMatches())),this._register(Ze(()=>this.clearDecorations()))}_updateMatches(){this._highlightTimeout.clear(),this._state.cachedSearchTerm&&this._state.lastSearchOptions?.decorations&&(this._highlightTimeout.value=$s(()=>{let c=this._state.cachedSearchTerm;this._state.clearCachedTerm(),this.findPrevious(c,{...this._state.lastSearchOptions,incremental:!0},{noScroll:!0})},200))}clearDecorations(c){this._resultTracker.clearSelectedDecoration(),this._decorationManager?.clearHighlightDecorations(),this._resultTracker.clearResults(),c||this._state.clearCachedTerm()}clearActiveDecoration(){this._resultTracker.clearSelectedDecoration()}findNext(c,_,k){if(!this._terminal||!this._engine)throw new Error("Cannot use addon until it has been loaded");this._state.lastSearchOptions=_,this._state.shouldUpdateHighlighting(c,_)&&this._highlightAllMatches(c,_);let T=this._findNextAndSelect(c,_,k);return this._fireResults(_),this._state.cachedSearchTerm=c,T}_highlightAllMatches(c,_){if(!this._terminal||!this._engine||!this._decorationManager)throw new Error("Cannot use addon until it has been loaded");if(!this._state.isValidSearchTerm(c)){this.clearDecorations();return}this.clearDecorations(!0);let k=[],T,O=this._engine.find(c,0,0,_);for(;O&&(T?.row!==O.row||T?.col!==O.col)&&!(k.length>=this._highlightLimit);)T=O,k.push(T),O=this._engine.find(c,T.col+T.term.length>=this._terminal.cols?T.row+1:T.row,T.col+T.term.length>=this._terminal.cols?0:T.col+1,_);this._resultTracker.updateResults(k,this._highlightLimit),_.decorations&&this._decorationManager.createHighlightDecorations(k,_.decorations)}_findNextAndSelect(c,_,k){if(!this._terminal||!this._engine)return!1;if(!this._state.isValidSearchTerm(c))return this._terminal.clearSelection(),this.clearDecorations(),!1;let T=this._engine.findNextWithSelection(c,_,this._state.cachedSearchTerm);return this._selectResult(T,_?.decorations,k?.noScroll)}findPrevious(c,_,k){if(!this._terminal||!this._engine)throw new Error("Cannot use addon until it has been loaded");this._state.lastSearchOptions=_,this._state.shouldUpdateHighlighting(c,_)&&this._highlightAllMatches(c,_);let T=this._findPreviousAndSelect(c,_,k);return this._fireResults(_),this._state.cachedSearchTerm=c,T}_fireResults(c){this._resultTracker.fireResultsChanged(!!c?.decorations)}_findPreviousAndSelect(c,_,k){if(!this._terminal||!this._engine)return!1;if(!this._state.isValidSearchTerm(c))return this._terminal.clearSelection(),this.clearDecorations(),!1;let T=this._engine.findPreviousWithSelection(c,_,this._state.cachedSearchTerm);return this._selectResult(T,_?.decorations,k?.noScroll)}_selectResult(c,_,k){if(!this._terminal||!this._decorationManager)return!1;if(this._resultTracker.clearSelectedDecoration(),!c)return this._terminal.clearSelection(),!1;if(this._terminal.select(c.col,c.row,c.size),_){let T=this._decorationManager.createActiveDecoration(c,_);T&&(this._resultTracker.selectedDecoration=T)}if(!k&&(c.row>=this._terminal.buffer.active.viewportY+this._terminal.rows||c.row(()=>{var k={4567:function(A,r,n){var h=this&&this.__decorate||function(i,l,u,b){var x,d=arguments.length,S=d<3?l:b===null?b=Object.getOwnPropertyDescriptor(l,u):b;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")S=Reflect.decorate(i,l,u,b);else for(var R=i.length-1;R>=0;R--)(x=i[R])&&(S=(d<3?x(S):d>3?x(l,u,S):x(l,u))||S);return d>3&&S&&Object.defineProperty(l,u,S),S},p=this&&this.__param||function(i,l){return function(u,b){l(u,b,i)}};Object.defineProperty(r,"__esModule",{value:!0}),r.AccessibilityManager=void 0;const o=n(9042),f=n(6114),g=n(9924),v=n(844),m=n(5596),e=n(4725),s=n(3656);let t=r.AccessibilityManager=class extends v.Disposable{constructor(i,l){super(),this._terminal=i,this._renderService=l,this._liveRegionLineCount=0,this._charsToConsume=[],this._charsToAnnounce="",this._accessibilityContainer=document.createElement("div"),this._accessibilityContainer.classList.add("xterm-accessibility"),this._rowContainer=document.createElement("div"),this._rowContainer.setAttribute("role","list"),this._rowContainer.classList.add("xterm-accessibility-tree"),this._rowElements=[];for(let u=0;uthis._handleBoundaryFocus(u,0),this._bottomBoundaryFocusListener=u=>this._handleBoundaryFocus(u,1),this._rowElements[0].addEventListener("focus",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._refreshRowsDimensions(),this._accessibilityContainer.appendChild(this._rowContainer),this._liveRegion=document.createElement("div"),this._liveRegion.classList.add("live-region"),this._liveRegion.setAttribute("aria-live","assertive"),this._accessibilityContainer.appendChild(this._liveRegion),this._liveRegionDebouncer=this.register(new g.TimeBasedDebouncer(this._renderRows.bind(this))),!this._terminal.element)throw new Error("Cannot enable accessibility before Terminal.open");this._terminal.element.insertAdjacentElement("afterbegin",this._accessibilityContainer),this.register(this._terminal.onResize((u=>this._handleResize(u.rows)))),this.register(this._terminal.onRender((u=>this._refreshRows(u.start,u.end)))),this.register(this._terminal.onScroll((()=>this._refreshRows()))),this.register(this._terminal.onA11yChar((u=>this._handleChar(u)))),this.register(this._terminal.onLineFeed((()=>this._handleChar(` +`)))),this.register(this._terminal.onA11yTab((u=>this._handleTab(u)))),this.register(this._terminal.onKey((u=>this._handleKey(u.key)))),this.register(this._terminal.onBlur((()=>this._clearLiveRegion()))),this.register(this._renderService.onDimensionsChange((()=>this._refreshRowsDimensions()))),this._screenDprMonitor=new m.ScreenDprMonitor(window),this.register(this._screenDprMonitor),this._screenDprMonitor.setListener((()=>this._refreshRowsDimensions())),this.register((0,s.addDisposableDomListener)(window,"resize",(()=>this._refreshRowsDimensions()))),this._refreshRows(),this.register((0,v.toDisposable)((()=>{this._accessibilityContainer.remove(),this._rowElements.length=0})))}_handleTab(i){for(let l=0;l0?this._charsToConsume.shift()!==i&&(this._charsToAnnounce+=i):this._charsToAnnounce+=i,i===` +`&&(this._liveRegionLineCount++,this._liveRegionLineCount===21&&(this._liveRegion.textContent+=o.tooMuchOutput)),f.isMac&&this._liveRegion.textContent&&this._liveRegion.textContent.length>0&&!this._liveRegion.parentNode&&setTimeout((()=>{this._accessibilityContainer.appendChild(this._liveRegion)}),0))}_clearLiveRegion(){this._liveRegion.textContent="",this._liveRegionLineCount=0,f.isMac&&this._liveRegion.remove()}_handleKey(i){this._clearLiveRegion(),new RegExp("\\p{Control}","u").test(i)||this._charsToConsume.push(i)}_refreshRows(i,l){this._liveRegionDebouncer.refresh(i,l,this._terminal.rows)}_renderRows(i,l){const u=this._terminal.buffer,b=u.lines.length.toString();for(let x=i;x<=l;x++){const d=u.translateBufferLineToString(u.ydisp+x,!0),S=(u.ydisp+x+1).toString(),R=this._rowElements[x];R&&(d.length===0?R.innerText=" ":R.textContent=d,R.setAttribute("aria-posinset",S),R.setAttribute("aria-setsize",b))}this._announceCharacters()}_announceCharacters(){this._charsToAnnounce.length!==0&&(this._liveRegion.textContent+=this._charsToAnnounce,this._charsToAnnounce="")}_handleBoundaryFocus(i,l){const u=i.target,b=this._rowElements[l===0?1:this._rowElements.length-2];if(u.getAttribute("aria-posinset")===(l===0?"1":`${this._terminal.buffer.lines.length}`)||i.relatedTarget!==b)return;let x,d;if(l===0?(x=u,d=this._rowElements.pop(),this._rowContainer.removeChild(d)):(x=this._rowElements.shift(),d=u,this._rowContainer.removeChild(x)),x.removeEventListener("focus",this._topBoundaryFocusListener),d.removeEventListener("focus",this._bottomBoundaryFocusListener),l===0){const S=this._createAccessibilityTreeNode();this._rowElements.unshift(S),this._rowContainer.insertAdjacentElement("afterbegin",S)}else{const S=this._createAccessibilityTreeNode();this._rowElements.push(S),this._rowContainer.appendChild(S)}this._rowElements[0].addEventListener("focus",this._topBoundaryFocusListener),this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._terminal.scrollLines(l===0?-1:1),this._rowElements[l===0?1:this._rowElements.length-2].focus(),i.preventDefault(),i.stopImmediatePropagation()}_handleResize(i){this._rowElements[this._rowElements.length-1].removeEventListener("focus",this._bottomBoundaryFocusListener);for(let l=this._rowContainer.children.length;li;)this._rowContainer.removeChild(this._rowElements.pop());this._rowElements[this._rowElements.length-1].addEventListener("focus",this._bottomBoundaryFocusListener),this._refreshRowsDimensions()}_createAccessibilityTreeNode(){const i=document.createElement("div");return i.setAttribute("role","listitem"),i.tabIndex=-1,this._refreshRowDimensions(i),i}_refreshRowsDimensions(){if(this._renderService.dimensions.css.cell.height){this._accessibilityContainer.style.width=`${this._renderService.dimensions.css.canvas.width}px`,this._rowElements.length!==this._terminal.rows&&this._handleResize(this._terminal.rows);for(let i=0;i{function n(f){return f.replace(/\r?\n/g,"\r")}function h(f,g){return g?"\x1B[200~"+f+"\x1B[201~":f}function p(f,g,v,m){f=h(f=n(f),v.decPrivateModes.bracketedPasteMode&&m.rawOptions.ignoreBracketedPasteMode!==!0),v.triggerDataEvent(f,!0),g.value=""}function o(f,g,v){const m=v.getBoundingClientRect(),e=f.clientX-m.left-10,s=f.clientY-m.top-10;g.style.width="20px",g.style.height="20px",g.style.left=`${e}px`,g.style.top=`${s}px`,g.style.zIndex="1000",g.focus()}Object.defineProperty(r,"__esModule",{value:!0}),r.rightClickHandler=r.moveTextAreaUnderMouseCursor=r.paste=r.handlePasteEvent=r.copyHandler=r.bracketTextForPaste=r.prepareTextForTerminal=void 0,r.prepareTextForTerminal=n,r.bracketTextForPaste=h,r.copyHandler=function(f,g){f.clipboardData&&f.clipboardData.setData("text/plain",g.selectionText),f.preventDefault()},r.handlePasteEvent=function(f,g,v,m){f.stopPropagation(),f.clipboardData&&p(f.clipboardData.getData("text/plain"),g,v,m)},r.paste=p,r.moveTextAreaUnderMouseCursor=o,r.rightClickHandler=function(f,g,v,m,e){o(f,g,v),e&&m.rightClickSelect(f),g.value=m.selectionText,g.select()}},7239:(A,r,n)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.ColorContrastCache=void 0;const h=n(1505);r.ColorContrastCache=class{constructor(){this._color=new h.TwoKeyMap,this._css=new h.TwoKeyMap}setCss(p,o,f){this._css.set(p,o,f)}getCss(p,o){return this._css.get(p,o)}setColor(p,o,f){this._color.set(p,o,f)}getColor(p,o){return this._color.get(p,o)}clear(){this._color.clear(),this._css.clear()}}},3656:(A,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.addDisposableDomListener=void 0,r.addDisposableDomListener=function(n,h,p,o){n.addEventListener(h,p,o);let f=!1;return{dispose:()=>{f||(f=!0,n.removeEventListener(h,p,o))}}}},6465:function(A,r,n){var h=this&&this.__decorate||function(e,s,t,i){var l,u=arguments.length,b=u<3?s:i===null?i=Object.getOwnPropertyDescriptor(s,t):i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")b=Reflect.decorate(e,s,t,i);else for(var x=e.length-1;x>=0;x--)(l=e[x])&&(b=(u<3?l(b):u>3?l(s,t,b):l(s,t))||b);return u>3&&b&&Object.defineProperty(s,t,b),b},p=this&&this.__param||function(e,s){return function(t,i){s(t,i,e)}};Object.defineProperty(r,"__esModule",{value:!0}),r.Linkifier2=void 0;const o=n(3656),f=n(8460),g=n(844),v=n(2585);let m=r.Linkifier2=class extends g.Disposable{get currentLink(){return this._currentLink}constructor(e){super(),this._bufferService=e,this._linkProviders=[],this._linkCacheDisposables=[],this._isMouseOut=!0,this._wasResized=!1,this._activeLine=-1,this._onShowLinkUnderline=this.register(new f.EventEmitter),this.onShowLinkUnderline=this._onShowLinkUnderline.event,this._onHideLinkUnderline=this.register(new f.EventEmitter),this.onHideLinkUnderline=this._onHideLinkUnderline.event,this.register((0,g.getDisposeArrayDisposable)(this._linkCacheDisposables)),this.register((0,g.toDisposable)((()=>{this._lastMouseEvent=void 0}))),this.register(this._bufferService.onResize((()=>{this._clearCurrentLink(),this._wasResized=!0})))}registerLinkProvider(e){return this._linkProviders.push(e),{dispose:()=>{const s=this._linkProviders.indexOf(e);s!==-1&&this._linkProviders.splice(s,1)}}}attachToDom(e,s,t){this._element=e,this._mouseService=s,this._renderService=t,this.register((0,o.addDisposableDomListener)(this._element,"mouseleave",(()=>{this._isMouseOut=!0,this._clearCurrentLink()}))),this.register((0,o.addDisposableDomListener)(this._element,"mousemove",this._handleMouseMove.bind(this))),this.register((0,o.addDisposableDomListener)(this._element,"mousedown",this._handleMouseDown.bind(this))),this.register((0,o.addDisposableDomListener)(this._element,"mouseup",this._handleMouseUp.bind(this)))}_handleMouseMove(e){if(this._lastMouseEvent=e,!this._element||!this._mouseService)return;const s=this._positionFromMouseEvent(e,this._element,this._mouseService);if(!s)return;this._isMouseOut=!1;const t=e.composedPath();for(let i=0;i{u?.forEach((b=>{b.link.dispose&&b.link.dispose()}))})),this._activeProviderReplies=new Map,this._activeLine=e.y);let l=!1;for(const[u,b]of this._linkProviders.entries())s?!((i=this._activeProviderReplies)===null||i===void 0)&&i.get(u)&&(l=this._checkLinkProviderResult(u,e,l)):b.provideLinks(e.y,(x=>{var d,S;if(this._isMouseOut)return;const R=x?.map((N=>({link:N})));(d=this._activeProviderReplies)===null||d===void 0||d.set(u,R),l=this._checkLinkProviderResult(u,e,l),((S=this._activeProviderReplies)===null||S===void 0?void 0:S.size)===this._linkProviders.length&&this._removeIntersectingLinks(e.y,this._activeProviderReplies)}))}_removeIntersectingLinks(e,s){const t=new Set;for(let i=0;ie?this._bufferService.cols:b.link.range.end.x;for(let S=x;S<=d;S++){if(t.has(S)){l.splice(u--,1);break}t.add(S)}}}}_checkLinkProviderResult(e,s,t){var i;if(!this._activeProviderReplies)return t;const l=this._activeProviderReplies.get(e);let u=!1;for(let b=0;bthis._linkAtPosition(x.link,s)));b&&(t=!0,this._handleNewLink(b))}if(this._activeProviderReplies.size===this._linkProviders.length&&!t)for(let b=0;bthis._linkAtPosition(d.link,s)));if(x){t=!0,this._handleNewLink(x);break}}return t}_handleMouseDown(){this._mouseDownLink=this._currentLink}_handleMouseUp(e){if(!this._element||!this._mouseService||!this._currentLink)return;const s=this._positionFromMouseEvent(e,this._element,this._mouseService);s&&this._mouseDownLink===this._currentLink&&this._linkAtPosition(this._currentLink.link,s)&&this._currentLink.link.activate(e,this._currentLink.link.text)}_clearCurrentLink(e,s){this._element&&this._currentLink&&this._lastMouseEvent&&(!e||!s||this._currentLink.link.range.start.y>=e&&this._currentLink.link.range.end.y<=s)&&(this._linkLeave(this._element,this._currentLink.link,this._lastMouseEvent),this._currentLink=void 0,(0,g.disposeArray)(this._linkCacheDisposables))}_handleNewLink(e){if(!this._element||!this._lastMouseEvent||!this._mouseService)return;const s=this._positionFromMouseEvent(this._lastMouseEvent,this._element,this._mouseService);s&&this._linkAtPosition(e.link,s)&&(this._currentLink=e,this._currentLink.state={decorations:{underline:e.link.decorations===void 0||e.link.decorations.underline,pointerCursor:e.link.decorations===void 0||e.link.decorations.pointerCursor},isHovered:!0},this._linkHover(this._element,e.link,this._lastMouseEvent),e.link.decorations={},Object.defineProperties(e.link.decorations,{pointerCursor:{get:()=>{var t,i;return(i=(t=this._currentLink)===null||t===void 0?void 0:t.state)===null||i===void 0?void 0:i.decorations.pointerCursor},set:t=>{var i,l;!((i=this._currentLink)===null||i===void 0)&&i.state&&this._currentLink.state.decorations.pointerCursor!==t&&(this._currentLink.state.decorations.pointerCursor=t,this._currentLink.state.isHovered&&((l=this._element)===null||l===void 0||l.classList.toggle("xterm-cursor-pointer",t)))}},underline:{get:()=>{var t,i;return(i=(t=this._currentLink)===null||t===void 0?void 0:t.state)===null||i===void 0?void 0:i.decorations.underline},set:t=>{var i,l,u;!((i=this._currentLink)===null||i===void 0)&&i.state&&((u=(l=this._currentLink)===null||l===void 0?void 0:l.state)===null||u===void 0?void 0:u.decorations.underline)!==t&&(this._currentLink.state.decorations.underline=t,this._currentLink.state.isHovered&&this._fireUnderlineEvent(e.link,t))}}}),this._renderService&&this._linkCacheDisposables.push(this._renderService.onRenderedViewportChange((t=>{if(!this._currentLink)return;const i=t.start===0?0:t.start+1+this._bufferService.buffer.ydisp,l=this._bufferService.buffer.ydisp+1+t.end;if(this._currentLink.link.range.start.y>=i&&this._currentLink.link.range.end.y<=l&&(this._clearCurrentLink(i,l),this._lastMouseEvent&&this._element)){const u=this._positionFromMouseEvent(this._lastMouseEvent,this._element,this._mouseService);u&&this._askForLink(u,!1)}}))))}_linkHover(e,s,t){var i;!((i=this._currentLink)===null||i===void 0)&&i.state&&(this._currentLink.state.isHovered=!0,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(s,!0),this._currentLink.state.decorations.pointerCursor&&e.classList.add("xterm-cursor-pointer")),s.hover&&s.hover(t,s.text)}_fireUnderlineEvent(e,s){const t=e.range,i=this._bufferService.buffer.ydisp,l=this._createLinkUnderlineEvent(t.start.x-1,t.start.y-i-1,t.end.x,t.end.y-i-1,void 0);(s?this._onShowLinkUnderline:this._onHideLinkUnderline).fire(l)}_linkLeave(e,s,t){var i;!((i=this._currentLink)===null||i===void 0)&&i.state&&(this._currentLink.state.isHovered=!1,this._currentLink.state.decorations.underline&&this._fireUnderlineEvent(s,!1),this._currentLink.state.decorations.pointerCursor&&e.classList.remove("xterm-cursor-pointer")),s.leave&&s.leave(t,s.text)}_linkAtPosition(e,s){const t=e.range.start.y*this._bufferService.cols+e.range.start.x,i=e.range.end.y*this._bufferService.cols+e.range.end.x,l=s.y*this._bufferService.cols+s.x;return t<=l&&l<=i}_positionFromMouseEvent(e,s,t){const i=t.getCoords(e,s,this._bufferService.cols,this._bufferService.rows);if(i)return{x:i[0],y:i[1]+this._bufferService.buffer.ydisp}}_createLinkUnderlineEvent(e,s,t,i,l){return{x1:e,y1:s,x2:t,y2:i,cols:this._bufferService.cols,fg:l}}};r.Linkifier2=m=h([p(0,v.IBufferService)],m)},9042:(A,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.tooMuchOutput=r.promptLabel=void 0,r.promptLabel="Terminal input",r.tooMuchOutput="Too much output to announce, navigate to rows manually to read"},3730:function(A,r,n){var h=this&&this.__decorate||function(m,e,s,t){var i,l=arguments.length,u=l<3?e:t===null?t=Object.getOwnPropertyDescriptor(e,s):t;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")u=Reflect.decorate(m,e,s,t);else for(var b=m.length-1;b>=0;b--)(i=m[b])&&(u=(l<3?i(u):l>3?i(e,s,u):i(e,s))||u);return l>3&&u&&Object.defineProperty(e,s,u),u},p=this&&this.__param||function(m,e){return function(s,t){e(s,t,m)}};Object.defineProperty(r,"__esModule",{value:!0}),r.OscLinkProvider=void 0;const o=n(511),f=n(2585);let g=r.OscLinkProvider=class{constructor(m,e,s){this._bufferService=m,this._optionsService=e,this._oscLinkService=s}provideLinks(m,e){var s;const t=this._bufferService.buffer.lines.get(m-1);if(!t)return void e(void 0);const i=[],l=this._optionsService.rawOptions.linkHandler,u=new o.CellData,b=t.getTrimmedLength();let x=-1,d=-1,S=!1;for(let R=0;Rl?l.activate(D,B,y):v(0,B),hover:(D,B)=>{var j;return(j=l?.hover)===null||j===void 0?void 0:j.call(l,D,B,y)},leave:(D,B)=>{var j;return(j=l?.leave)===null||j===void 0?void 0:j.call(l,D,B,y)}})}S=!1,u.hasExtendedAttrs()&&u.extended.urlId?(d=R,x=u.extended.urlId):(d=-1,x=-1)}}e(i)}};function v(m,e){if(confirm(`Do you want to navigate to ${e}? + +WARNING: This link could potentially be dangerous`)){const s=window.open();if(s){try{s.opener=null}catch{}s.location.href=e}else console.warn("Opening link blocked as opener could not be cleared")}}r.OscLinkProvider=g=h([p(0,f.IBufferService),p(1,f.IOptionsService),p(2,f.IOscLinkService)],g)},6193:(A,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.RenderDebouncer=void 0,r.RenderDebouncer=class{constructor(n,h){this._parentWindow=n,this._renderCallback=h,this._refreshCallbacks=[]}dispose(){this._animationFrame&&(this._parentWindow.cancelAnimationFrame(this._animationFrame),this._animationFrame=void 0)}addRefreshCallback(n){return this._refreshCallbacks.push(n),this._animationFrame||(this._animationFrame=this._parentWindow.requestAnimationFrame((()=>this._innerRefresh()))),this._animationFrame}refresh(n,h,p){this._rowCount=p,n=n!==void 0?n:0,h=h!==void 0?h:this._rowCount-1,this._rowStart=this._rowStart!==void 0?Math.min(this._rowStart,n):n,this._rowEnd=this._rowEnd!==void 0?Math.max(this._rowEnd,h):h,this._animationFrame||(this._animationFrame=this._parentWindow.requestAnimationFrame((()=>this._innerRefresh())))}_innerRefresh(){if(this._animationFrame=void 0,this._rowStart===void 0||this._rowEnd===void 0||this._rowCount===void 0)return void this._runRefreshCallbacks();const n=Math.max(this._rowStart,0),h=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(n,h),this._runRefreshCallbacks()}_runRefreshCallbacks(){for(const n of this._refreshCallbacks)n(0);this._refreshCallbacks=[]}}},5596:(A,r,n)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.ScreenDprMonitor=void 0;const h=n(844);class p extends h.Disposable{constructor(f){super(),this._parentWindow=f,this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this.register((0,h.toDisposable)((()=>{this.clearListener()})))}setListener(f){this._listener&&this.clearListener(),this._listener=f,this._outerListener=()=>{this._listener&&(this._listener(this._parentWindow.devicePixelRatio,this._currentDevicePixelRatio),this._updateDpr())},this._updateDpr()}_updateDpr(){var f;this._outerListener&&((f=this._resolutionMediaMatchList)===null||f===void 0||f.removeListener(this._outerListener),this._currentDevicePixelRatio=this._parentWindow.devicePixelRatio,this._resolutionMediaMatchList=this._parentWindow.matchMedia(`screen and (resolution: ${this._parentWindow.devicePixelRatio}dppx)`),this._resolutionMediaMatchList.addListener(this._outerListener))}clearListener(){this._resolutionMediaMatchList&&this._listener&&this._outerListener&&(this._resolutionMediaMatchList.removeListener(this._outerListener),this._resolutionMediaMatchList=void 0,this._listener=void 0,this._outerListener=void 0)}}r.ScreenDprMonitor=p},3236:(A,r,n)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.Terminal=void 0;const h=n(3614),p=n(3656),o=n(6465),f=n(9042),g=n(3730),v=n(1680),m=n(3107),e=n(5744),s=n(2950),t=n(1296),i=n(428),l=n(4269),u=n(5114),b=n(8934),x=n(3230),d=n(9312),S=n(4725),R=n(6731),N=n(8055),y=n(8969),E=n(8460),D=n(844),B=n(6114),j=n(8437),P=n(2584),C=n(7399),L=n(5941),M=n(9074),I=n(2585),z=n(5435),K=n(4567),Y=typeof window<"u"?window.document:null;class X extends y.CoreTerminal{get onFocus(){return this._onFocus.event}get onBlur(){return this._onBlur.event}get onA11yChar(){return this._onA11yCharEmitter.event}get onA11yTab(){return this._onA11yTabEmitter.event}get onWillOpen(){return this._onWillOpen.event}constructor(w={}){super(w),this.browser=B,this._keyDownHandled=!1,this._keyDownSeen=!1,this._keyPressHandled=!1,this._unprocessedDeadKey=!1,this._accessibilityManager=this.register(new D.MutableDisposable),this._onCursorMove=this.register(new E.EventEmitter),this.onCursorMove=this._onCursorMove.event,this._onKey=this.register(new E.EventEmitter),this.onKey=this._onKey.event,this._onRender=this.register(new E.EventEmitter),this.onRender=this._onRender.event,this._onSelectionChange=this.register(new E.EventEmitter),this.onSelectionChange=this._onSelectionChange.event,this._onTitleChange=this.register(new E.EventEmitter),this.onTitleChange=this._onTitleChange.event,this._onBell=this.register(new E.EventEmitter),this.onBell=this._onBell.event,this._onFocus=this.register(new E.EventEmitter),this._onBlur=this.register(new E.EventEmitter),this._onA11yCharEmitter=this.register(new E.EventEmitter),this._onA11yTabEmitter=this.register(new E.EventEmitter),this._onWillOpen=this.register(new E.EventEmitter),this._setup(),this.linkifier2=this.register(this._instantiationService.createInstance(o.Linkifier2)),this.linkifier2.registerLinkProvider(this._instantiationService.createInstance(g.OscLinkProvider)),this._decorationService=this._instantiationService.createInstance(M.DecorationService),this._instantiationService.setService(I.IDecorationService,this._decorationService),this.register(this._inputHandler.onRequestBell((()=>this._onBell.fire()))),this.register(this._inputHandler.onRequestRefreshRows(((F,U)=>this.refresh(F,U)))),this.register(this._inputHandler.onRequestSendFocus((()=>this._reportFocus()))),this.register(this._inputHandler.onRequestReset((()=>this.reset()))),this.register(this._inputHandler.onRequestWindowsOptionsReport((F=>this._reportWindowsOptions(F)))),this.register(this._inputHandler.onColor((F=>this._handleColorEvent(F)))),this.register((0,E.forwardEvent)(this._inputHandler.onCursorMove,this._onCursorMove)),this.register((0,E.forwardEvent)(this._inputHandler.onTitleChange,this._onTitleChange)),this.register((0,E.forwardEvent)(this._inputHandler.onA11yChar,this._onA11yCharEmitter)),this.register((0,E.forwardEvent)(this._inputHandler.onA11yTab,this._onA11yTabEmitter)),this.register(this._bufferService.onResize((F=>this._afterResize(F.cols,F.rows)))),this.register((0,D.toDisposable)((()=>{var F,U;this._customKeyEventHandler=void 0,(U=(F=this.element)===null||F===void 0?void 0:F.parentNode)===null||U===void 0||U.removeChild(this.element)})))}_handleColorEvent(w){if(this._themeService)for(const F of w){let U,q="";switch(F.index){case 256:U="foreground",q="10";break;case 257:U="background",q="11";break;case 258:U="cursor",q="12";break;default:U="ansi",q="4;"+F.index}switch(F.type){case 0:const ee=N.color.toColorRGB(U==="ansi"?this._themeService.colors.ansi[F.index]:this._themeService.colors[U]);this.coreService.triggerDataEvent(`${P.C0.ESC}]${q};${(0,L.toRgbString)(ee)}${P.C1_ESCAPED.ST}`);break;case 1:if(U==="ansi")this._themeService.modifyColors((J=>J.ansi[F.index]=N.rgba.toColor(...F.color)));else{const J=U;this._themeService.modifyColors((oe=>oe[J]=N.rgba.toColor(...F.color)))}break;case 2:this._themeService.restoreColor(F.index)}}}_setup(){super._setup(),this._customKeyEventHandler=void 0}get buffer(){return this.buffers.active}focus(){this.textarea&&this.textarea.focus({preventScroll:!0})}_handleScreenReaderModeOptionChange(w){w?!this._accessibilityManager.value&&this._renderService&&(this._accessibilityManager.value=this._instantiationService.createInstance(K.AccessibilityManager,this)):this._accessibilityManager.clear()}_handleTextAreaFocus(w){this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(P.C0.ESC+"[I"),this.updateCursorStyle(w),this.element.classList.add("focus"),this._showCursor(),this._onFocus.fire()}blur(){var w;return(w=this.textarea)===null||w===void 0?void 0:w.blur()}_handleTextAreaBlur(){this.textarea.value="",this.refresh(this.buffer.y,this.buffer.y),this.coreService.decPrivateModes.sendFocus&&this.coreService.triggerDataEvent(P.C0.ESC+"[O"),this.element.classList.remove("focus"),this._onBlur.fire()}_syncTextArea(){if(!this.textarea||!this.buffer.isCursorInViewport||this._compositionHelper.isComposing||!this._renderService)return;const w=this.buffer.ybase+this.buffer.y,F=this.buffer.lines.get(w);if(!F)return;const U=Math.min(this.buffer.x,this.cols-1),q=this._renderService.dimensions.css.cell.height,ee=F.getWidth(U),J=this._renderService.dimensions.css.cell.width*ee,oe=this.buffer.y*this._renderService.dimensions.css.cell.height,ue=U*this._renderService.dimensions.css.cell.width;this.textarea.style.left=ue+"px",this.textarea.style.top=oe+"px",this.textarea.style.width=J+"px",this.textarea.style.height=q+"px",this.textarea.style.lineHeight=q+"px",this.textarea.style.zIndex="-5"}_initGlobal(){this._bindKeys(),this.register((0,p.addDisposableDomListener)(this.element,"copy",(F=>{this.hasSelection()&&(0,h.copyHandler)(F,this._selectionService)})));const w=F=>(0,h.handlePasteEvent)(F,this.textarea,this.coreService,this.optionsService);this.register((0,p.addDisposableDomListener)(this.textarea,"paste",w)),this.register((0,p.addDisposableDomListener)(this.element,"paste",w)),B.isFirefox?this.register((0,p.addDisposableDomListener)(this.element,"mousedown",(F=>{F.button===2&&(0,h.rightClickHandler)(F,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)}))):this.register((0,p.addDisposableDomListener)(this.element,"contextmenu",(F=>{(0,h.rightClickHandler)(F,this.textarea,this.screenElement,this._selectionService,this.options.rightClickSelectsWord)}))),B.isLinux&&this.register((0,p.addDisposableDomListener)(this.element,"auxclick",(F=>{F.button===1&&(0,h.moveTextAreaUnderMouseCursor)(F,this.textarea,this.screenElement)})))}_bindKeys(){this.register((0,p.addDisposableDomListener)(this.textarea,"keyup",(w=>this._keyUp(w)),!0)),this.register((0,p.addDisposableDomListener)(this.textarea,"keydown",(w=>this._keyDown(w)),!0)),this.register((0,p.addDisposableDomListener)(this.textarea,"keypress",(w=>this._keyPress(w)),!0)),this.register((0,p.addDisposableDomListener)(this.textarea,"compositionstart",(()=>this._compositionHelper.compositionstart()))),this.register((0,p.addDisposableDomListener)(this.textarea,"compositionupdate",(w=>this._compositionHelper.compositionupdate(w)))),this.register((0,p.addDisposableDomListener)(this.textarea,"compositionend",(()=>this._compositionHelper.compositionend()))),this.register((0,p.addDisposableDomListener)(this.textarea,"input",(w=>this._inputEvent(w)),!0)),this.register(this.onRender((()=>this._compositionHelper.updateCompositionElements())))}open(w){var F;if(!w)throw new Error("Terminal requires a parent element.");w.isConnected||this._logService.debug("Terminal.open was called on an element that was not attached to the DOM"),this._document=w.ownerDocument,this.element=this._document.createElement("div"),this.element.dir="ltr",this.element.classList.add("terminal"),this.element.classList.add("xterm"),w.appendChild(this.element);const U=Y.createDocumentFragment();this._viewportElement=Y.createElement("div"),this._viewportElement.classList.add("xterm-viewport"),U.appendChild(this._viewportElement),this._viewportScrollArea=Y.createElement("div"),this._viewportScrollArea.classList.add("xterm-scroll-area"),this._viewportElement.appendChild(this._viewportScrollArea),this.screenElement=Y.createElement("div"),this.screenElement.classList.add("xterm-screen"),this._helperContainer=Y.createElement("div"),this._helperContainer.classList.add("xterm-helpers"),this.screenElement.appendChild(this._helperContainer),U.appendChild(this.screenElement),this.textarea=Y.createElement("textarea"),this.textarea.classList.add("xterm-helper-textarea"),this.textarea.setAttribute("aria-label",f.promptLabel),B.isChromeOS||this.textarea.setAttribute("aria-multiline","false"),this.textarea.setAttribute("autocorrect","off"),this.textarea.setAttribute("autocapitalize","off"),this.textarea.setAttribute("spellcheck","false"),this.textarea.tabIndex=0,this._coreBrowserService=this._instantiationService.createInstance(u.CoreBrowserService,this.textarea,(F=this._document.defaultView)!==null&&F!==void 0?F:window),this._instantiationService.setService(S.ICoreBrowserService,this._coreBrowserService),this.register((0,p.addDisposableDomListener)(this.textarea,"focus",(q=>this._handleTextAreaFocus(q)))),this.register((0,p.addDisposableDomListener)(this.textarea,"blur",(()=>this._handleTextAreaBlur()))),this._helperContainer.appendChild(this.textarea),this._charSizeService=this._instantiationService.createInstance(i.CharSizeService,this._document,this._helperContainer),this._instantiationService.setService(S.ICharSizeService,this._charSizeService),this._themeService=this._instantiationService.createInstance(R.ThemeService),this._instantiationService.setService(S.IThemeService,this._themeService),this._characterJoinerService=this._instantiationService.createInstance(l.CharacterJoinerService),this._instantiationService.setService(S.ICharacterJoinerService,this._characterJoinerService),this._renderService=this.register(this._instantiationService.createInstance(x.RenderService,this.rows,this.screenElement)),this._instantiationService.setService(S.IRenderService,this._renderService),this.register(this._renderService.onRenderedViewportChange((q=>this._onRender.fire(q)))),this.onResize((q=>this._renderService.resize(q.cols,q.rows))),this._compositionView=Y.createElement("div"),this._compositionView.classList.add("composition-view"),this._compositionHelper=this._instantiationService.createInstance(s.CompositionHelper,this.textarea,this._compositionView),this._helperContainer.appendChild(this._compositionView),this.element.appendChild(U);try{this._onWillOpen.fire(this.element)}catch{}this._renderService.hasRenderer()||this._renderService.setRenderer(this._createRenderer()),this._mouseService=this._instantiationService.createInstance(b.MouseService),this._instantiationService.setService(S.IMouseService,this._mouseService),this.viewport=this._instantiationService.createInstance(v.Viewport,this._viewportElement,this._viewportScrollArea),this.viewport.onRequestScrollLines((q=>this.scrollLines(q.amount,q.suppressScrollEvent,1))),this.register(this._inputHandler.onRequestSyncScrollBar((()=>this.viewport.syncScrollArea()))),this.register(this.viewport),this.register(this.onCursorMove((()=>{this._renderService.handleCursorMove(),this._syncTextArea()}))),this.register(this.onResize((()=>this._renderService.handleResize(this.cols,this.rows)))),this.register(this.onBlur((()=>this._renderService.handleBlur()))),this.register(this.onFocus((()=>this._renderService.handleFocus()))),this.register(this._renderService.onDimensionsChange((()=>this.viewport.syncScrollArea()))),this._selectionService=this.register(this._instantiationService.createInstance(d.SelectionService,this.element,this.screenElement,this.linkifier2)),this._instantiationService.setService(S.ISelectionService,this._selectionService),this.register(this._selectionService.onRequestScrollLines((q=>this.scrollLines(q.amount,q.suppressScrollEvent)))),this.register(this._selectionService.onSelectionChange((()=>this._onSelectionChange.fire()))),this.register(this._selectionService.onRequestRedraw((q=>this._renderService.handleSelectionChanged(q.start,q.end,q.columnSelectMode)))),this.register(this._selectionService.onLinuxMouseSelection((q=>{this.textarea.value=q,this.textarea.focus(),this.textarea.select()}))),this.register(this._onScroll.event((q=>{this.viewport.syncScrollArea(),this._selectionService.refresh()}))),this.register((0,p.addDisposableDomListener)(this._viewportElement,"scroll",(()=>this._selectionService.refresh()))),this.linkifier2.attachToDom(this.screenElement,this._mouseService,this._renderService),this.register(this._instantiationService.createInstance(m.BufferDecorationRenderer,this.screenElement)),this.register((0,p.addDisposableDomListener)(this.element,"mousedown",(q=>this._selectionService.handleMouseDown(q)))),this.coreMouseService.areMouseEventsActive?(this._selectionService.disable(),this.element.classList.add("enable-mouse-events")):this._selectionService.enable(),this.options.screenReaderMode&&(this._accessibilityManager.value=this._instantiationService.createInstance(K.AccessibilityManager,this)),this.register(this.optionsService.onSpecificOptionChange("screenReaderMode",(q=>this._handleScreenReaderModeOptionChange(q)))),this.options.overviewRulerWidth&&(this._overviewRulerRenderer=this.register(this._instantiationService.createInstance(e.OverviewRulerRenderer,this._viewportElement,this.screenElement))),this.optionsService.onSpecificOptionChange("overviewRulerWidth",(q=>{!this._overviewRulerRenderer&&q&&this._viewportElement&&this.screenElement&&(this._overviewRulerRenderer=this.register(this._instantiationService.createInstance(e.OverviewRulerRenderer,this._viewportElement,this.screenElement)))})),this._charSizeService.measure(),this.refresh(0,this.rows-1),this._initGlobal(),this.bindMouse()}_createRenderer(){return this._instantiationService.createInstance(t.DomRenderer,this.element,this.screenElement,this._viewportElement,this.linkifier2)}bindMouse(){const w=this,F=this.element;function U(J){const oe=w._mouseService.getMouseReportCoords(J,w.screenElement);if(!oe)return!1;let ue,he;switch(J.overrideType||J.type){case"mousemove":he=32,J.buttons===void 0?(ue=3,J.button!==void 0&&(ue=J.button<3?J.button:3)):ue=1&J.buttons?0:4&J.buttons?1:2&J.buttons?2:3;break;case"mouseup":he=0,ue=J.button<3?J.button:3;break;case"mousedown":he=1,ue=J.button<3?J.button:3;break;case"wheel":if(w.viewport.getLinesScrolled(J)===0)return!1;he=J.deltaY<0?0:1,ue=4;break;default:return!1}return!(he===void 0||ue===void 0||ue>4)&&w.coreMouseService.triggerMouseEvent({col:oe.col,row:oe.row,x:oe.x,y:oe.y,button:ue,action:he,ctrl:J.ctrlKey,alt:J.altKey,shift:J.shiftKey})}const q={mouseup:null,wheel:null,mousedrag:null,mousemove:null},ee={mouseup:J=>(U(J),J.buttons||(this._document.removeEventListener("mouseup",q.mouseup),q.mousedrag&&this._document.removeEventListener("mousemove",q.mousedrag)),this.cancel(J)),wheel:J=>(U(J),this.cancel(J,!0)),mousedrag:J=>{J.buttons&&U(J)},mousemove:J=>{J.buttons||U(J)}};this.register(this.coreMouseService.onProtocolChange((J=>{J?(this.optionsService.rawOptions.logLevel==="debug"&&this._logService.debug("Binding to mouse events:",this.coreMouseService.explainEvents(J)),this.element.classList.add("enable-mouse-events"),this._selectionService.disable()):(this._logService.debug("Unbinding from mouse events."),this.element.classList.remove("enable-mouse-events"),this._selectionService.enable()),8&J?q.mousemove||(F.addEventListener("mousemove",ee.mousemove),q.mousemove=ee.mousemove):(F.removeEventListener("mousemove",q.mousemove),q.mousemove=null),16&J?q.wheel||(F.addEventListener("wheel",ee.wheel,{passive:!1}),q.wheel=ee.wheel):(F.removeEventListener("wheel",q.wheel),q.wheel=null),2&J?q.mouseup||(F.addEventListener("mouseup",ee.mouseup),q.mouseup=ee.mouseup):(this._document.removeEventListener("mouseup",q.mouseup),F.removeEventListener("mouseup",q.mouseup),q.mouseup=null),4&J?q.mousedrag||(q.mousedrag=ee.mousedrag):(this._document.removeEventListener("mousemove",q.mousedrag),q.mousedrag=null)}))),this.coreMouseService.activeProtocol=this.coreMouseService.activeProtocol,this.register((0,p.addDisposableDomListener)(F,"mousedown",(J=>{if(J.preventDefault(),this.focus(),this.coreMouseService.areMouseEventsActive&&!this._selectionService.shouldForceSelection(J))return U(J),q.mouseup&&this._document.addEventListener("mouseup",q.mouseup),q.mousedrag&&this._document.addEventListener("mousemove",q.mousedrag),this.cancel(J)}))),this.register((0,p.addDisposableDomListener)(F,"wheel",(J=>{if(!q.wheel){if(!this.buffer.hasScrollback){const oe=this.viewport.getLinesScrolled(J);if(oe===0)return;const ue=P.C0.ESC+(this.coreService.decPrivateModes.applicationCursorKeys?"O":"[")+(J.deltaY<0?"A":"B");let he="";for(let xe=0;xe{if(!this.coreMouseService.areMouseEventsActive)return this.viewport.handleTouchStart(J),this.cancel(J)}),{passive:!0})),this.register((0,p.addDisposableDomListener)(F,"touchmove",(J=>{if(!this.coreMouseService.areMouseEventsActive)return this.viewport.handleTouchMove(J)?void 0:this.cancel(J)}),{passive:!1}))}refresh(w,F){var U;(U=this._renderService)===null||U===void 0||U.refreshRows(w,F)}updateCursorStyle(w){var F;!((F=this._selectionService)===null||F===void 0)&&F.shouldColumnSelect(w)?this.element.classList.add("column-select"):this.element.classList.remove("column-select")}_showCursor(){this.coreService.isCursorInitialized||(this.coreService.isCursorInitialized=!0,this.refresh(this.buffer.y,this.buffer.y))}scrollLines(w,F,U=0){var q;U===1?(super.scrollLines(w,F,U),this.refresh(0,this.rows-1)):(q=this.viewport)===null||q===void 0||q.scrollLines(w)}paste(w){(0,h.paste)(w,this.textarea,this.coreService,this.optionsService)}attachCustomKeyEventHandler(w){this._customKeyEventHandler=w}registerLinkProvider(w){return this.linkifier2.registerLinkProvider(w)}registerCharacterJoiner(w){if(!this._characterJoinerService)throw new Error("Terminal must be opened first");const F=this._characterJoinerService.register(w);return this.refresh(0,this.rows-1),F}deregisterCharacterJoiner(w){if(!this._characterJoinerService)throw new Error("Terminal must be opened first");this._characterJoinerService.deregister(w)&&this.refresh(0,this.rows-1)}get markers(){return this.buffer.markers}registerMarker(w){return this.buffer.addMarker(this.buffer.ybase+this.buffer.y+w)}registerDecoration(w){return this._decorationService.registerDecoration(w)}hasSelection(){return!!this._selectionService&&this._selectionService.hasSelection}select(w,F,U){this._selectionService.setSelection(w,F,U)}getSelection(){return this._selectionService?this._selectionService.selectionText:""}getSelectionPosition(){if(this._selectionService&&this._selectionService.hasSelection)return{start:{x:this._selectionService.selectionStart[0],y:this._selectionService.selectionStart[1]},end:{x:this._selectionService.selectionEnd[0],y:this._selectionService.selectionEnd[1]}}}clearSelection(){var w;(w=this._selectionService)===null||w===void 0||w.clearSelection()}selectAll(){var w;(w=this._selectionService)===null||w===void 0||w.selectAll()}selectLines(w,F){var U;(U=this._selectionService)===null||U===void 0||U.selectLines(w,F)}_keyDown(w){if(this._keyDownHandled=!1,this._keyDownSeen=!0,this._customKeyEventHandler&&this._customKeyEventHandler(w)===!1)return!1;const F=this.browser.isMac&&this.options.macOptionIsMeta&&w.altKey;if(!F&&!this._compositionHelper.keydown(w))return this.options.scrollOnUserInput&&this.buffer.ybase!==this.buffer.ydisp&&this.scrollToBottom(),!1;F||w.key!=="Dead"&&w.key!=="AltGraph"||(this._unprocessedDeadKey=!0);const U=(0,C.evaluateKeyboardEvent)(w,this.coreService.decPrivateModes.applicationCursorKeys,this.browser.isMac,this.options.macOptionIsMeta);if(this.updateCursorStyle(w),U.type===3||U.type===2){const q=this.rows-1;return this.scrollLines(U.type===2?-q:q),this.cancel(w,!0)}return U.type===1&&this.selectAll(),!!this._isThirdLevelShift(this.browser,w)||(U.cancel&&this.cancel(w,!0),!U.key||!!(w.key&&!w.ctrlKey&&!w.altKey&&!w.metaKey&&w.key.length===1&&w.key.charCodeAt(0)>=65&&w.key.charCodeAt(0)<=90)||(this._unprocessedDeadKey?(this._unprocessedDeadKey=!1,!0):(U.key!==P.C0.ETX&&U.key!==P.C0.CR||(this.textarea.value=""),this._onKey.fire({key:U.key,domEvent:w}),this._showCursor(),this.coreService.triggerDataEvent(U.key,!0),!this.optionsService.rawOptions.screenReaderMode||w.altKey||w.ctrlKey?this.cancel(w,!0):void(this._keyDownHandled=!0))))}_isThirdLevelShift(w,F){const U=w.isMac&&!this.options.macOptionIsMeta&&F.altKey&&!F.ctrlKey&&!F.metaKey||w.isWindows&&F.altKey&&F.ctrlKey&&!F.metaKey||w.isWindows&&F.getModifierState("AltGraph");return F.type==="keypress"?U:U&&(!F.keyCode||F.keyCode>47)}_keyUp(w){this._keyDownSeen=!1,this._customKeyEventHandler&&this._customKeyEventHandler(w)===!1||((function(F){return F.keyCode===16||F.keyCode===17||F.keyCode===18})(w)||this.focus(),this.updateCursorStyle(w),this._keyPressHandled=!1)}_keyPress(w){let F;if(this._keyPressHandled=!1,this._keyDownHandled||this._customKeyEventHandler&&this._customKeyEventHandler(w)===!1)return!1;if(this.cancel(w),w.charCode)F=w.charCode;else if(w.which===null||w.which===void 0)F=w.keyCode;else{if(w.which===0||w.charCode===0)return!1;F=w.which}return!(!F||(w.altKey||w.ctrlKey||w.metaKey)&&!this._isThirdLevelShift(this.browser,w)||(F=String.fromCharCode(F),this._onKey.fire({key:F,domEvent:w}),this._showCursor(),this.coreService.triggerDataEvent(F,!0),this._keyPressHandled=!0,this._unprocessedDeadKey=!1,0))}_inputEvent(w){if(w.data&&w.inputType==="insertText"&&(!w.composed||!this._keyDownSeen)&&!this.optionsService.rawOptions.screenReaderMode){if(this._keyPressHandled)return!1;this._unprocessedDeadKey=!1;const F=w.data;return this.coreService.triggerDataEvent(F,!0),this.cancel(w),!0}return!1}resize(w,F){w!==this.cols||F!==this.rows?super.resize(w,F):this._charSizeService&&!this._charSizeService.hasValidSize&&this._charSizeService.measure()}_afterResize(w,F){var U,q;(U=this._charSizeService)===null||U===void 0||U.measure(),(q=this.viewport)===null||q===void 0||q.syncScrollArea(!0)}clear(){var w;if(this.buffer.ybase!==0||this.buffer.y!==0){this.buffer.clearAllMarkers(),this.buffer.lines.set(0,this.buffer.lines.get(this.buffer.ybase+this.buffer.y)),this.buffer.lines.length=1,this.buffer.ydisp=0,this.buffer.ybase=0,this.buffer.y=0;for(let F=1;F{Object.defineProperty(r,"__esModule",{value:!0}),r.TimeBasedDebouncer=void 0,r.TimeBasedDebouncer=class{constructor(n,h=1e3){this._renderCallback=n,this._debounceThresholdMS=h,this._lastRefreshMs=0,this._additionalRefreshRequested=!1}dispose(){this._refreshTimeoutID&&clearTimeout(this._refreshTimeoutID)}refresh(n,h,p){this._rowCount=p,n=n!==void 0?n:0,h=h!==void 0?h:this._rowCount-1,this._rowStart=this._rowStart!==void 0?Math.min(this._rowStart,n):n,this._rowEnd=this._rowEnd!==void 0?Math.max(this._rowEnd,h):h;const o=Date.now();if(o-this._lastRefreshMs>=this._debounceThresholdMS)this._lastRefreshMs=o,this._innerRefresh();else if(!this._additionalRefreshRequested){const f=o-this._lastRefreshMs,g=this._debounceThresholdMS-f;this._additionalRefreshRequested=!0,this._refreshTimeoutID=window.setTimeout((()=>{this._lastRefreshMs=Date.now(),this._innerRefresh(),this._additionalRefreshRequested=!1,this._refreshTimeoutID=void 0}),g)}}_innerRefresh(){if(this._rowStart===void 0||this._rowEnd===void 0||this._rowCount===void 0)return;const n=Math.max(this._rowStart,0),h=Math.min(this._rowEnd,this._rowCount-1);this._rowStart=void 0,this._rowEnd=void 0,this._renderCallback(n,h)}}},1680:function(A,r,n){var h=this&&this.__decorate||function(s,t,i,l){var u,b=arguments.length,x=b<3?t:l===null?l=Object.getOwnPropertyDescriptor(t,i):l;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")x=Reflect.decorate(s,t,i,l);else for(var d=s.length-1;d>=0;d--)(u=s[d])&&(x=(b<3?u(x):b>3?u(t,i,x):u(t,i))||x);return b>3&&x&&Object.defineProperty(t,i,x),x},p=this&&this.__param||function(s,t){return function(i,l){t(i,l,s)}};Object.defineProperty(r,"__esModule",{value:!0}),r.Viewport=void 0;const o=n(3656),f=n(4725),g=n(8460),v=n(844),m=n(2585);let e=r.Viewport=class extends v.Disposable{constructor(s,t,i,l,u,b,x,d){super(),this._viewportElement=s,this._scrollArea=t,this._bufferService=i,this._optionsService=l,this._charSizeService=u,this._renderService=b,this._coreBrowserService=x,this.scrollBarWidth=0,this._currentRowHeight=0,this._currentDeviceCellHeight=0,this._lastRecordedBufferLength=0,this._lastRecordedViewportHeight=0,this._lastRecordedBufferHeight=0,this._lastTouchY=0,this._lastScrollTop=0,this._wheelPartialScroll=0,this._refreshAnimationFrame=null,this._ignoreNextScrollEvent=!1,this._smoothScrollState={startTime:0,origin:-1,target:-1},this._onRequestScrollLines=this.register(new g.EventEmitter),this.onRequestScrollLines=this._onRequestScrollLines.event,this.scrollBarWidth=this._viewportElement.offsetWidth-this._scrollArea.offsetWidth||15,this.register((0,o.addDisposableDomListener)(this._viewportElement,"scroll",this._handleScroll.bind(this))),this._activeBuffer=this._bufferService.buffer,this.register(this._bufferService.buffers.onBufferActivate((S=>this._activeBuffer=S.activeBuffer))),this._renderDimensions=this._renderService.dimensions,this.register(this._renderService.onDimensionsChange((S=>this._renderDimensions=S))),this._handleThemeChange(d.colors),this.register(d.onChangeColors((S=>this._handleThemeChange(S)))),this.register(this._optionsService.onSpecificOptionChange("scrollback",(()=>this.syncScrollArea()))),setTimeout((()=>this.syncScrollArea()))}_handleThemeChange(s){this._viewportElement.style.backgroundColor=s.background.css}reset(){this._currentRowHeight=0,this._currentDeviceCellHeight=0,this._lastRecordedBufferLength=0,this._lastRecordedViewportHeight=0,this._lastRecordedBufferHeight=0,this._lastTouchY=0,this._lastScrollTop=0,this._coreBrowserService.window.requestAnimationFrame((()=>this.syncScrollArea()))}_refresh(s){if(s)return this._innerRefresh(),void(this._refreshAnimationFrame!==null&&this._coreBrowserService.window.cancelAnimationFrame(this._refreshAnimationFrame));this._refreshAnimationFrame===null&&(this._refreshAnimationFrame=this._coreBrowserService.window.requestAnimationFrame((()=>this._innerRefresh())))}_innerRefresh(){if(this._charSizeService.height>0){this._currentRowHeight=this._renderService.dimensions.device.cell.height/this._coreBrowserService.dpr,this._currentDeviceCellHeight=this._renderService.dimensions.device.cell.height,this._lastRecordedViewportHeight=this._viewportElement.offsetHeight;const t=Math.round(this._currentRowHeight*this._lastRecordedBufferLength)+(this._lastRecordedViewportHeight-this._renderService.dimensions.css.canvas.height);this._lastRecordedBufferHeight!==t&&(this._lastRecordedBufferHeight=t,this._scrollArea.style.height=this._lastRecordedBufferHeight+"px")}const s=this._bufferService.buffer.ydisp*this._currentRowHeight;this._viewportElement.scrollTop!==s&&(this._ignoreNextScrollEvent=!0,this._viewportElement.scrollTop=s),this._refreshAnimationFrame=null}syncScrollArea(s=!1){if(this._lastRecordedBufferLength!==this._bufferService.buffer.lines.length)return this._lastRecordedBufferLength=this._bufferService.buffer.lines.length,void this._refresh(s);this._lastRecordedViewportHeight===this._renderService.dimensions.css.canvas.height&&this._lastScrollTop===this._activeBuffer.ydisp*this._currentRowHeight&&this._renderDimensions.device.cell.height===this._currentDeviceCellHeight||this._refresh(s)}_handleScroll(s){if(this._lastScrollTop=this._viewportElement.scrollTop,!this._viewportElement.offsetParent)return;if(this._ignoreNextScrollEvent)return this._ignoreNextScrollEvent=!1,void this._onRequestScrollLines.fire({amount:0,suppressScrollEvent:!0});const t=Math.round(this._lastScrollTop/this._currentRowHeight)-this._bufferService.buffer.ydisp;this._onRequestScrollLines.fire({amount:t,suppressScrollEvent:!0})}_smoothScroll(){if(this._isDisposed||this._smoothScrollState.origin===-1||this._smoothScrollState.target===-1)return;const s=this._smoothScrollPercent();this._viewportElement.scrollTop=this._smoothScrollState.origin+Math.round(s*(this._smoothScrollState.target-this._smoothScrollState.origin)),s<1?this._coreBrowserService.window.requestAnimationFrame((()=>this._smoothScroll())):this._clearSmoothScrollState()}_smoothScrollPercent(){return this._optionsService.rawOptions.smoothScrollDuration&&this._smoothScrollState.startTime?Math.max(Math.min((Date.now()-this._smoothScrollState.startTime)/this._optionsService.rawOptions.smoothScrollDuration,1),0):1}_clearSmoothScrollState(){this._smoothScrollState.startTime=0,this._smoothScrollState.origin=-1,this._smoothScrollState.target=-1}_bubbleScroll(s,t){const i=this._viewportElement.scrollTop+this._lastRecordedViewportHeight;return!(t<0&&this._viewportElement.scrollTop!==0||t>0&&i0&&(l=y),u=""}}return{bufferElements:b,cursorElement:l}}getLinesScrolled(s){if(s.deltaY===0||s.shiftKey)return 0;let t=this._applyScrollModifier(s.deltaY,s);return s.deltaMode===WheelEvent.DOM_DELTA_PIXEL?(t/=this._currentRowHeight+0,this._wheelPartialScroll+=t,t=Math.floor(Math.abs(this._wheelPartialScroll))*(this._wheelPartialScroll>0?1:-1),this._wheelPartialScroll%=1):s.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(t*=this._bufferService.rows),t}_applyScrollModifier(s,t){const i=this._optionsService.rawOptions.fastScrollModifier;return i==="alt"&&t.altKey||i==="ctrl"&&t.ctrlKey||i==="shift"&&t.shiftKey?s*this._optionsService.rawOptions.fastScrollSensitivity*this._optionsService.rawOptions.scrollSensitivity:s*this._optionsService.rawOptions.scrollSensitivity}handleTouchStart(s){this._lastTouchY=s.touches[0].pageY}handleTouchMove(s){const t=this._lastTouchY-s.touches[0].pageY;return this._lastTouchY=s.touches[0].pageY,t!==0&&(this._viewportElement.scrollTop+=t,this._bubbleScroll(s,t))}};r.Viewport=e=h([p(2,m.IBufferService),p(3,m.IOptionsService),p(4,f.ICharSizeService),p(5,f.IRenderService),p(6,f.ICoreBrowserService),p(7,f.IThemeService)],e)},3107:function(A,r,n){var h=this&&this.__decorate||function(e,s,t,i){var l,u=arguments.length,b=u<3?s:i===null?i=Object.getOwnPropertyDescriptor(s,t):i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")b=Reflect.decorate(e,s,t,i);else for(var x=e.length-1;x>=0;x--)(l=e[x])&&(b=(u<3?l(b):u>3?l(s,t,b):l(s,t))||b);return u>3&&b&&Object.defineProperty(s,t,b),b},p=this&&this.__param||function(e,s){return function(t,i){s(t,i,e)}};Object.defineProperty(r,"__esModule",{value:!0}),r.BufferDecorationRenderer=void 0;const o=n(3656),f=n(4725),g=n(844),v=n(2585);let m=r.BufferDecorationRenderer=class extends g.Disposable{constructor(e,s,t,i){super(),this._screenElement=e,this._bufferService=s,this._decorationService=t,this._renderService=i,this._decorationElements=new Map,this._altBufferIsActive=!1,this._dimensionsChanged=!1,this._container=document.createElement("div"),this._container.classList.add("xterm-decoration-container"),this._screenElement.appendChild(this._container),this.register(this._renderService.onRenderedViewportChange((()=>this._doRefreshDecorations()))),this.register(this._renderService.onDimensionsChange((()=>{this._dimensionsChanged=!0,this._queueRefresh()}))),this.register((0,o.addDisposableDomListener)(window,"resize",(()=>this._queueRefresh()))),this.register(this._bufferService.buffers.onBufferActivate((()=>{this._altBufferIsActive=this._bufferService.buffer===this._bufferService.buffers.alt}))),this.register(this._decorationService.onDecorationRegistered((()=>this._queueRefresh()))),this.register(this._decorationService.onDecorationRemoved((l=>this._removeDecoration(l)))),this.register((0,g.toDisposable)((()=>{this._container.remove(),this._decorationElements.clear()})))}_queueRefresh(){this._animationFrame===void 0&&(this._animationFrame=this._renderService.addRefreshCallback((()=>{this._doRefreshDecorations(),this._animationFrame=void 0})))}_doRefreshDecorations(){for(const e of this._decorationService.decorations)this._renderDecoration(e);this._dimensionsChanged=!1}_renderDecoration(e){this._refreshStyle(e),this._dimensionsChanged&&this._refreshXPosition(e)}_createElement(e){var s,t;const i=document.createElement("div");i.classList.add("xterm-decoration"),i.classList.toggle("xterm-decoration-top-layer",((s=e?.options)===null||s===void 0?void 0:s.layer)==="top"),i.style.width=`${Math.round((e.options.width||1)*this._renderService.dimensions.css.cell.width)}px`,i.style.height=(e.options.height||1)*this._renderService.dimensions.css.cell.height+"px",i.style.top=(e.marker.line-this._bufferService.buffers.active.ydisp)*this._renderService.dimensions.css.cell.height+"px",i.style.lineHeight=`${this._renderService.dimensions.css.cell.height}px`;const l=(t=e.options.x)!==null&&t!==void 0?t:0;return l&&l>this._bufferService.cols&&(i.style.display="none"),this._refreshXPosition(e,i),i}_refreshStyle(e){const s=e.marker.line-this._bufferService.buffers.active.ydisp;if(s<0||s>=this._bufferService.rows)e.element&&(e.element.style.display="none",e.onRenderEmitter.fire(e.element));else{let t=this._decorationElements.get(e);t||(t=this._createElement(e),e.element=t,this._decorationElements.set(e,t),this._container.appendChild(t),e.onDispose((()=>{this._decorationElements.delete(e),t.remove()}))),t.style.top=s*this._renderService.dimensions.css.cell.height+"px",t.style.display=this._altBufferIsActive?"none":"block",e.onRenderEmitter.fire(t)}}_refreshXPosition(e,s=e.element){var t;if(!s)return;const i=(t=e.options.x)!==null&&t!==void 0?t:0;(e.options.anchor||"left")==="right"?s.style.right=i?i*this._renderService.dimensions.css.cell.width+"px":"":s.style.left=i?i*this._renderService.dimensions.css.cell.width+"px":""}_removeDecoration(e){var s;(s=this._decorationElements.get(e))===null||s===void 0||s.remove(),this._decorationElements.delete(e),e.dispose()}};r.BufferDecorationRenderer=m=h([p(1,v.IBufferService),p(2,v.IDecorationService),p(3,f.IRenderService)],m)},5871:(A,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.ColorZoneStore=void 0,r.ColorZoneStore=class{constructor(){this._zones=[],this._zonePool=[],this._zonePoolIndex=0,this._linePadding={full:0,left:0,center:0,right:0}}get zones(){return this._zonePool.length=Math.min(this._zonePool.length,this._zones.length),this._zones}clear(){this._zones.length=0,this._zonePoolIndex=0}addDecoration(n){if(n.options.overviewRulerOptions){for(const h of this._zones)if(h.color===n.options.overviewRulerOptions.color&&h.position===n.options.overviewRulerOptions.position){if(this._lineIntersectsZone(h,n.marker.line))return;if(this._lineAdjacentToZone(h,n.marker.line,n.options.overviewRulerOptions.position))return void this._addLineToZone(h,n.marker.line)}if(this._zonePoolIndex=n.startBufferLine&&h<=n.endBufferLine}_lineAdjacentToZone(n,h,p){return h>=n.startBufferLine-this._linePadding[p||"full"]&&h<=n.endBufferLine+this._linePadding[p||"full"]}_addLineToZone(n,h){n.startBufferLine=Math.min(n.startBufferLine,h),n.endBufferLine=Math.max(n.endBufferLine,h)}}},5744:function(A,r,n){var h=this&&this.__decorate||function(l,u,b,x){var d,S=arguments.length,R=S<3?u:x===null?x=Object.getOwnPropertyDescriptor(u,b):x;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")R=Reflect.decorate(l,u,b,x);else for(var N=l.length-1;N>=0;N--)(d=l[N])&&(R=(S<3?d(R):S>3?d(u,b,R):d(u,b))||R);return S>3&&R&&Object.defineProperty(u,b,R),R},p=this&&this.__param||function(l,u){return function(b,x){u(b,x,l)}};Object.defineProperty(r,"__esModule",{value:!0}),r.OverviewRulerRenderer=void 0;const o=n(5871),f=n(3656),g=n(4725),v=n(844),m=n(2585),e={full:0,left:0,center:0,right:0},s={full:0,left:0,center:0,right:0},t={full:0,left:0,center:0,right:0};let i=r.OverviewRulerRenderer=class extends v.Disposable{get _width(){return this._optionsService.options.overviewRulerWidth||0}constructor(l,u,b,x,d,S,R){var N;super(),this._viewportElement=l,this._screenElement=u,this._bufferService=b,this._decorationService=x,this._renderService=d,this._optionsService=S,this._coreBrowseService=R,this._colorZoneStore=new o.ColorZoneStore,this._shouldUpdateDimensions=!0,this._shouldUpdateAnchor=!0,this._lastKnownBufferLength=0,this._canvas=document.createElement("canvas"),this._canvas.classList.add("xterm-decoration-overview-ruler"),this._refreshCanvasDimensions(),(N=this._viewportElement.parentElement)===null||N===void 0||N.insertBefore(this._canvas,this._viewportElement);const y=this._canvas.getContext("2d");if(!y)throw new Error("Ctx cannot be null");this._ctx=y,this._registerDecorationListeners(),this._registerBufferChangeListeners(),this._registerDimensionChangeListeners(),this.register((0,v.toDisposable)((()=>{var E;(E=this._canvas)===null||E===void 0||E.remove()})))}_registerDecorationListeners(){this.register(this._decorationService.onDecorationRegistered((()=>this._queueRefresh(void 0,!0)))),this.register(this._decorationService.onDecorationRemoved((()=>this._queueRefresh(void 0,!0))))}_registerBufferChangeListeners(){this.register(this._renderService.onRenderedViewportChange((()=>this._queueRefresh()))),this.register(this._bufferService.buffers.onBufferActivate((()=>{this._canvas.style.display=this._bufferService.buffer===this._bufferService.buffers.alt?"none":"block"}))),this.register(this._bufferService.onScroll((()=>{this._lastKnownBufferLength!==this._bufferService.buffers.normal.lines.length&&(this._refreshDrawHeightConstants(),this._refreshColorZonePadding())})))}_registerDimensionChangeListeners(){this.register(this._renderService.onRender((()=>{this._containerHeight&&this._containerHeight===this._screenElement.clientHeight||(this._queueRefresh(!0),this._containerHeight=this._screenElement.clientHeight)}))),this.register(this._optionsService.onSpecificOptionChange("overviewRulerWidth",(()=>this._queueRefresh(!0)))),this.register((0,f.addDisposableDomListener)(this._coreBrowseService.window,"resize",(()=>this._queueRefresh(!0)))),this._queueRefresh(!0)}_refreshDrawConstants(){const l=Math.floor(this._canvas.width/3),u=Math.ceil(this._canvas.width/3);s.full=this._canvas.width,s.left=l,s.center=u,s.right=l,this._refreshDrawHeightConstants(),t.full=0,t.left=0,t.center=s.left,t.right=s.left+s.center}_refreshDrawHeightConstants(){e.full=Math.round(2*this._coreBrowseService.dpr);const l=this._canvas.height/this._bufferService.buffer.lines.length,u=Math.round(Math.max(Math.min(l,12),6)*this._coreBrowseService.dpr);e.left=u,e.center=u,e.right=u}_refreshColorZonePadding(){this._colorZoneStore.setPadding({full:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*e.full),left:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*e.left),center:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*e.center),right:Math.floor(this._bufferService.buffers.active.lines.length/(this._canvas.height-1)*e.right)}),this._lastKnownBufferLength=this._bufferService.buffers.normal.lines.length}_refreshCanvasDimensions(){this._canvas.style.width=`${this._width}px`,this._canvas.width=Math.round(this._width*this._coreBrowseService.dpr),this._canvas.style.height=`${this._screenElement.clientHeight}px`,this._canvas.height=Math.round(this._screenElement.clientHeight*this._coreBrowseService.dpr),this._refreshDrawConstants(),this._refreshColorZonePadding()}_refreshDecorations(){this._shouldUpdateDimensions&&this._refreshCanvasDimensions(),this._ctx.clearRect(0,0,this._canvas.width,this._canvas.height),this._colorZoneStore.clear();for(const u of this._decorationService.decorations)this._colorZoneStore.addDecoration(u);this._ctx.lineWidth=1;const l=this._colorZoneStore.zones;for(const u of l)u.position!=="full"&&this._renderColorZone(u);for(const u of l)u.position==="full"&&this._renderColorZone(u);this._shouldUpdateDimensions=!1,this._shouldUpdateAnchor=!1}_renderColorZone(l){this._ctx.fillStyle=l.color,this._ctx.fillRect(t[l.position||"full"],Math.round((this._canvas.height-1)*(l.startBufferLine/this._bufferService.buffers.active.lines.length)-e[l.position||"full"]/2),s[l.position||"full"],Math.round((this._canvas.height-1)*((l.endBufferLine-l.startBufferLine)/this._bufferService.buffers.active.lines.length)+e[l.position||"full"]))}_queueRefresh(l,u){this._shouldUpdateDimensions=l||this._shouldUpdateDimensions,this._shouldUpdateAnchor=u||this._shouldUpdateAnchor,this._animationFrame===void 0&&(this._animationFrame=this._coreBrowseService.window.requestAnimationFrame((()=>{this._refreshDecorations(),this._animationFrame=void 0})))}};r.OverviewRulerRenderer=i=h([p(2,m.IBufferService),p(3,m.IDecorationService),p(4,g.IRenderService),p(5,m.IOptionsService),p(6,g.ICoreBrowserService)],i)},2950:function(A,r,n){var h=this&&this.__decorate||function(m,e,s,t){var i,l=arguments.length,u=l<3?e:t===null?t=Object.getOwnPropertyDescriptor(e,s):t;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")u=Reflect.decorate(m,e,s,t);else for(var b=m.length-1;b>=0;b--)(i=m[b])&&(u=(l<3?i(u):l>3?i(e,s,u):i(e,s))||u);return l>3&&u&&Object.defineProperty(e,s,u),u},p=this&&this.__param||function(m,e){return function(s,t){e(s,t,m)}};Object.defineProperty(r,"__esModule",{value:!0}),r.CompositionHelper=void 0;const o=n(4725),f=n(2585),g=n(2584);let v=r.CompositionHelper=class{get isComposing(){return this._isComposing}constructor(m,e,s,t,i,l){this._textarea=m,this._compositionView=e,this._bufferService=s,this._optionsService=t,this._coreService=i,this._renderService=l,this._isComposing=!1,this._isSendingComposition=!1,this._compositionPosition={start:0,end:0},this._dataAlreadySent=""}compositionstart(){this._isComposing=!0,this._compositionPosition.start=this._textarea.value.length,this._compositionView.textContent="",this._dataAlreadySent="",this._compositionView.classList.add("active")}compositionupdate(m){this._compositionView.textContent=m.data,this.updateCompositionElements(),setTimeout((()=>{this._compositionPosition.end=this._textarea.value.length}),0)}compositionend(){this._finalizeComposition(!0)}keydown(m){if(this._isComposing||this._isSendingComposition){if(m.keyCode===229||m.keyCode===16||m.keyCode===17||m.keyCode===18)return!1;this._finalizeComposition(!1)}return m.keyCode!==229||(this._handleAnyTextareaChanges(),!1)}_finalizeComposition(m){if(this._compositionView.classList.remove("active"),this._isComposing=!1,m){const e={start:this._compositionPosition.start,end:this._compositionPosition.end};this._isSendingComposition=!0,setTimeout((()=>{if(this._isSendingComposition){let s;this._isSendingComposition=!1,e.start+=this._dataAlreadySent.length,s=this._isComposing?this._textarea.value.substring(e.start,e.end):this._textarea.value.substring(e.start),s.length>0&&this._coreService.triggerDataEvent(s,!0)}}),0)}else{this._isSendingComposition=!1;const e=this._textarea.value.substring(this._compositionPosition.start,this._compositionPosition.end);this._coreService.triggerDataEvent(e,!0)}}_handleAnyTextareaChanges(){const m=this._textarea.value;setTimeout((()=>{if(!this._isComposing){const e=this._textarea.value,s=e.replace(m,"");this._dataAlreadySent=s,e.length>m.length?this._coreService.triggerDataEvent(s,!0):e.lengththis.updateCompositionElements(!0)),0)}}};r.CompositionHelper=v=h([p(2,f.IBufferService),p(3,f.IOptionsService),p(4,f.ICoreService),p(5,o.IRenderService)],v)},9806:(A,r)=>{function n(h,p,o){const f=o.getBoundingClientRect(),g=h.getComputedStyle(o),v=parseInt(g.getPropertyValue("padding-left")),m=parseInt(g.getPropertyValue("padding-top"));return[p.clientX-f.left-v,p.clientY-f.top-m]}Object.defineProperty(r,"__esModule",{value:!0}),r.getCoords=r.getCoordsRelativeToElement=void 0,r.getCoordsRelativeToElement=n,r.getCoords=function(h,p,o,f,g,v,m,e,s){if(!v)return;const t=n(h,p,o);return t?(t[0]=Math.ceil((t[0]+(s?m/2:0))/m),t[1]=Math.ceil(t[1]/e),t[0]=Math.min(Math.max(t[0],1),f+(s?1:0)),t[1]=Math.min(Math.max(t[1],1),g),t):void 0}},9504:(A,r,n)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.moveToCellSequence=void 0;const h=n(2584);function p(e,s,t,i){const l=e-o(e,t),u=s-o(s,t),b=Math.abs(l-u)-(function(x,d,S){let R=0;const N=x-o(x,S),y=d-o(d,S);for(let E=0;E=0&&es?"A":"B"}function g(e,s,t,i,l,u){let b=e,x=s,d="";for(;b!==t||x!==i;)b+=l?1:-1,l&&b>u.cols-1?(d+=u.buffer.translateBufferLineToString(x,!1,e,b),b=0,e=0,x++):!l&&b<0&&(d+=u.buffer.translateBufferLineToString(x,!1,0,e+1),b=u.cols-1,e=b,x--);return d+u.buffer.translateBufferLineToString(x,!1,e,b)}function v(e,s){const t=s?"O":"[";return h.C0.ESC+t+e}function m(e,s){e=Math.floor(e);let t="";for(let i=0;i0?N-o(N,y):S;const B=N,j=(function(P,C,L,M,I,z){let K;return K=p(L,M,I,z).length>0?M-o(M,I):C,P=L&&Ke?"D":"C",m(Math.abs(l-e),v(b,i));b=u>s?"D":"C";const x=Math.abs(u-s);return m((function(d,S){return S.cols-d})(u>s?e:l,t)+(x-1)*t.cols+1+((u>s?l:e)-1),v(b,i))}},1296:function(A,r,n){var h=this&&this.__decorate||function(y,E,D,B){var j,P=arguments.length,C=P<3?E:B===null?B=Object.getOwnPropertyDescriptor(E,D):B;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")C=Reflect.decorate(y,E,D,B);else for(var L=y.length-1;L>=0;L--)(j=y[L])&&(C=(P<3?j(C):P>3?j(E,D,C):j(E,D))||C);return P>3&&C&&Object.defineProperty(E,D,C),C},p=this&&this.__param||function(y,E){return function(D,B){E(D,B,y)}};Object.defineProperty(r,"__esModule",{value:!0}),r.DomRenderer=void 0;const o=n(3787),f=n(2550),g=n(2223),v=n(6171),m=n(4725),e=n(8055),s=n(8460),t=n(844),i=n(2585),l="xterm-dom-renderer-owner-",u="xterm-rows",b="xterm-fg-",x="xterm-bg-",d="xterm-focus",S="xterm-selection";let R=1,N=r.DomRenderer=class extends t.Disposable{constructor(y,E,D,B,j,P,C,L,M,I){super(),this._element=y,this._screenElement=E,this._viewportElement=D,this._linkifier2=B,this._charSizeService=P,this._optionsService=C,this._bufferService=L,this._coreBrowserService=M,this._themeService=I,this._terminalClass=R++,this._rowElements=[],this.onRequestRedraw=this.register(new s.EventEmitter).event,this._rowContainer=document.createElement("div"),this._rowContainer.classList.add(u),this._rowContainer.style.lineHeight="normal",this._rowContainer.setAttribute("aria-hidden","true"),this._refreshRowElements(this._bufferService.cols,this._bufferService.rows),this._selectionContainer=document.createElement("div"),this._selectionContainer.classList.add(S),this._selectionContainer.setAttribute("aria-hidden","true"),this.dimensions=(0,v.createRenderDimensions)(),this._updateDimensions(),this.register(this._optionsService.onOptionChange((()=>this._handleOptionsChanged()))),this.register(this._themeService.onChangeColors((z=>this._injectCss(z)))),this._injectCss(this._themeService.colors),this._rowFactory=j.createInstance(o.DomRendererRowFactory,document),this._element.classList.add(l+this._terminalClass),this._screenElement.appendChild(this._rowContainer),this._screenElement.appendChild(this._selectionContainer),this.register(this._linkifier2.onShowLinkUnderline((z=>this._handleLinkHover(z)))),this.register(this._linkifier2.onHideLinkUnderline((z=>this._handleLinkLeave(z)))),this.register((0,t.toDisposable)((()=>{this._element.classList.remove(l+this._terminalClass),this._rowContainer.remove(),this._selectionContainer.remove(),this._widthCache.dispose(),this._themeStyleElement.remove(),this._dimensionsStyleElement.remove()}))),this._widthCache=new f.WidthCache(document),this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}_updateDimensions(){const y=this._coreBrowserService.dpr;this.dimensions.device.char.width=this._charSizeService.width*y,this.dimensions.device.char.height=Math.ceil(this._charSizeService.height*y),this.dimensions.device.cell.width=this.dimensions.device.char.width+Math.round(this._optionsService.rawOptions.letterSpacing),this.dimensions.device.cell.height=Math.floor(this.dimensions.device.char.height*this._optionsService.rawOptions.lineHeight),this.dimensions.device.char.left=0,this.dimensions.device.char.top=0,this.dimensions.device.canvas.width=this.dimensions.device.cell.width*this._bufferService.cols,this.dimensions.device.canvas.height=this.dimensions.device.cell.height*this._bufferService.rows,this.dimensions.css.canvas.width=Math.round(this.dimensions.device.canvas.width/y),this.dimensions.css.canvas.height=Math.round(this.dimensions.device.canvas.height/y),this.dimensions.css.cell.width=this.dimensions.css.canvas.width/this._bufferService.cols,this.dimensions.css.cell.height=this.dimensions.css.canvas.height/this._bufferService.rows;for(const D of this._rowElements)D.style.width=`${this.dimensions.css.canvas.width}px`,D.style.height=`${this.dimensions.css.cell.height}px`,D.style.lineHeight=`${this.dimensions.css.cell.height}px`,D.style.overflow="hidden";this._dimensionsStyleElement||(this._dimensionsStyleElement=document.createElement("style"),this._screenElement.appendChild(this._dimensionsStyleElement));const E=`${this._terminalSelector} .${u} span { display: inline-block; height: 100%; vertical-align: top;}`;this._dimensionsStyleElement.textContent=E,this._selectionContainer.style.height=this._viewportElement.style.height,this._screenElement.style.width=`${this.dimensions.css.canvas.width}px`,this._screenElement.style.height=`${this.dimensions.css.canvas.height}px`}_injectCss(y){this._themeStyleElement||(this._themeStyleElement=document.createElement("style"),this._screenElement.appendChild(this._themeStyleElement));let E=`${this._terminalSelector} .${u} { color: ${y.foreground.css}; font-family: ${this._optionsService.rawOptions.fontFamily}; font-size: ${this._optionsService.rawOptions.fontSize}px; font-kerning: none; white-space: pre}`;E+=`${this._terminalSelector} .${u} .xterm-dim { color: ${e.color.multiplyOpacity(y.foreground,.5).css};}`,E+=`${this._terminalSelector} span:not(.xterm-bold) { font-weight: ${this._optionsService.rawOptions.fontWeight};}${this._terminalSelector} span.xterm-bold { font-weight: ${this._optionsService.rawOptions.fontWeightBold};}${this._terminalSelector} span.xterm-italic { font-style: italic;}`,E+="@keyframes blink_box_shadow_"+this._terminalClass+" { 50% { border-bottom-style: hidden; }}",E+="@keyframes blink_block_"+this._terminalClass+` { 0% { background-color: ${y.cursor.css}; color: ${y.cursorAccent.css}; } 50% { background-color: inherit; color: ${y.cursor.css}; }}`,E+=`${this._terminalSelector} .${u}.${d} .xterm-cursor.xterm-cursor-blink:not(.xterm-cursor-block) { animation: blink_box_shadow_`+this._terminalClass+` 1s step-end infinite;}${this._terminalSelector} .${u}.${d} .xterm-cursor.xterm-cursor-blink.xterm-cursor-block { animation: blink_block_`+this._terminalClass+` 1s step-end infinite;}${this._terminalSelector} .${u} .xterm-cursor.xterm-cursor-block { background-color: ${y.cursor.css}; color: ${y.cursorAccent.css};}${this._terminalSelector} .${u} .xterm-cursor.xterm-cursor-outline { outline: 1px solid ${y.cursor.css}; outline-offset: -1px;}${this._terminalSelector} .${u} .xterm-cursor.xterm-cursor-bar { box-shadow: ${this._optionsService.rawOptions.cursorWidth}px 0 0 ${y.cursor.css} inset;}${this._terminalSelector} .${u} .xterm-cursor.xterm-cursor-underline { border-bottom: 1px ${y.cursor.css}; border-bottom-style: solid; height: calc(100% - 1px);}`,E+=`${this._terminalSelector} .${S} { position: absolute; top: 0; left: 0; z-index: 1; pointer-events: none;}${this._terminalSelector}.focus .${S} div { position: absolute; background-color: ${y.selectionBackgroundOpaque.css};}${this._terminalSelector} .${S} div { position: absolute; background-color: ${y.selectionInactiveBackgroundOpaque.css};}`;for(const[D,B]of y.ansi.entries())E+=`${this._terminalSelector} .${b}${D} { color: ${B.css}; }${this._terminalSelector} .${b}${D}.xterm-dim { color: ${e.color.multiplyOpacity(B,.5).css}; }${this._terminalSelector} .${x}${D} { background-color: ${B.css}; }`;E+=`${this._terminalSelector} .${b}${g.INVERTED_DEFAULT_COLOR} { color: ${e.color.opaque(y.background).css}; }${this._terminalSelector} .${b}${g.INVERTED_DEFAULT_COLOR}.xterm-dim { color: ${e.color.multiplyOpacity(e.color.opaque(y.background),.5).css}; }${this._terminalSelector} .${x}${g.INVERTED_DEFAULT_COLOR} { background-color: ${y.foreground.css}; }`,this._themeStyleElement.textContent=E}_setDefaultSpacing(){const y=this.dimensions.css.cell.width-this._widthCache.get("W",!1,!1);this._rowContainer.style.letterSpacing=`${y}px`,this._rowFactory.defaultSpacing=y}handleDevicePixelRatioChange(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}_refreshRowElements(y,E){for(let D=this._rowElements.length;D<=E;D++){const B=document.createElement("div");this._rowContainer.appendChild(B),this._rowElements.push(B)}for(;this._rowElements.length>E;)this._rowContainer.removeChild(this._rowElements.pop())}handleResize(y,E){this._refreshRowElements(y,E),this._updateDimensions()}handleCharSizeChanged(){this._updateDimensions(),this._widthCache.clear(),this._setDefaultSpacing()}handleBlur(){this._rowContainer.classList.remove(d)}handleFocus(){this._rowContainer.classList.add(d),this.renderRows(this._bufferService.buffer.y,this._bufferService.buffer.y)}handleSelectionChanged(y,E,D){if(this._selectionContainer.replaceChildren(),this._rowFactory.handleSelectionChanged(y,E,D),this.renderRows(0,this._bufferService.rows-1),!y||!E)return;const B=y[1]-this._bufferService.buffer.ydisp,j=E[1]-this._bufferService.buffer.ydisp,P=Math.max(B,0),C=Math.min(j,this._bufferService.rows-1);if(P>=this._bufferService.rows||C<0)return;const L=document.createDocumentFragment();if(D){const M=y[0]>E[0];L.appendChild(this._createSelectionElement(P,M?E[0]:y[0],M?y[0]:E[0],C-P+1))}else{const M=B===P?y[0]:0,I=P===j?E[0]:this._bufferService.cols;L.appendChild(this._createSelectionElement(P,M,I));const z=C-P-1;if(L.appendChild(this._createSelectionElement(P+1,0,this._bufferService.cols,z)),P!==C){const K=j===C?E[0]:this._bufferService.cols;L.appendChild(this._createSelectionElement(C,0,K))}}this._selectionContainer.appendChild(L)}_createSelectionElement(y,E,D,B=1){const j=document.createElement("div");return j.style.height=B*this.dimensions.css.cell.height+"px",j.style.top=y*this.dimensions.css.cell.height+"px",j.style.left=E*this.dimensions.css.cell.width+"px",j.style.width=this.dimensions.css.cell.width*(D-E)+"px",j}handleCursorMove(){}_handleOptionsChanged(){this._updateDimensions(),this._injectCss(this._themeService.colors),this._widthCache.setFont(this._optionsService.rawOptions.fontFamily,this._optionsService.rawOptions.fontSize,this._optionsService.rawOptions.fontWeight,this._optionsService.rawOptions.fontWeightBold),this._setDefaultSpacing()}clear(){for(const y of this._rowElements)y.replaceChildren()}renderRows(y,E){const D=this._bufferService.buffer,B=D.ybase+D.y,j=Math.min(D.x,this._bufferService.cols-1),P=this._optionsService.rawOptions.cursorBlink,C=this._optionsService.rawOptions.cursorStyle,L=this._optionsService.rawOptions.cursorInactiveStyle;for(let M=y;M<=E;M++){const I=M+D.ydisp,z=this._rowElements[M],K=D.lines.get(I);if(!z||!K)break;z.replaceChildren(...this._rowFactory.createRow(K,I,I===B,C,L,j,P,this.dimensions.css.cell.width,this._widthCache,-1,-1))}}get _terminalSelector(){return`.${l}${this._terminalClass}`}_handleLinkHover(y){this._setCellUnderline(y.x1,y.x2,y.y1,y.y2,y.cols,!0)}_handleLinkLeave(y){this._setCellUnderline(y.x1,y.x2,y.y1,y.y2,y.cols,!1)}_setCellUnderline(y,E,D,B,j,P){D<0&&(y=0),B<0&&(E=0);const C=this._bufferService.rows-1;D=Math.max(Math.min(D,C),0),B=Math.max(Math.min(B,C),0),j=Math.min(j,this._bufferService.cols);const L=this._bufferService.buffer,M=L.ybase+L.y,I=Math.min(L.x,j-1),z=this._optionsService.rawOptions.cursorBlink,K=this._optionsService.rawOptions.cursorStyle,Y=this._optionsService.rawOptions.cursorInactiveStyle;for(let X=D;X<=B;++X){const ne=X+L.ydisp,w=this._rowElements[X],F=L.lines.get(ne);if(!w||!F)break;w.replaceChildren(...this._rowFactory.createRow(F,ne,ne===M,K,Y,I,z,this.dimensions.css.cell.width,this._widthCache,P?X===D?y:0:-1,P?(X===B?E:j)-1:-1))}}};r.DomRenderer=N=h([p(4,i.IInstantiationService),p(5,m.ICharSizeService),p(6,i.IOptionsService),p(7,i.IBufferService),p(8,m.ICoreBrowserService),p(9,m.IThemeService)],N)},3787:function(A,r,n){var h=this&&this.__decorate||function(b,x,d,S){var R,N=arguments.length,y=N<3?x:S===null?S=Object.getOwnPropertyDescriptor(x,d):S;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")y=Reflect.decorate(b,x,d,S);else for(var E=b.length-1;E>=0;E--)(R=b[E])&&(y=(N<3?R(y):N>3?R(x,d,y):R(x,d))||y);return N>3&&y&&Object.defineProperty(x,d,y),y},p=this&&this.__param||function(b,x){return function(d,S){x(d,S,b)}};Object.defineProperty(r,"__esModule",{value:!0}),r.DomRendererRowFactory=void 0;const o=n(2223),f=n(643),g=n(511),v=n(2585),m=n(8055),e=n(4725),s=n(4269),t=n(6171),i=n(3734);let l=r.DomRendererRowFactory=class{constructor(b,x,d,S,R,N,y){this._document=b,this._characterJoinerService=x,this._optionsService=d,this._coreBrowserService=S,this._coreService=R,this._decorationService=N,this._themeService=y,this._workCell=new g.CellData,this._columnSelectMode=!1,this.defaultSpacing=0}handleSelectionChanged(b,x,d){this._selectionStart=b,this._selectionEnd=x,this._columnSelectMode=d}createRow(b,x,d,S,R,N,y,E,D,B,j){const P=[],C=this._characterJoinerService.getJoinedCharacters(x),L=this._themeService.colors;let M,I=b.getNoBgTrimmedLength();d&&I0&&oe===C[0][0]){he=!0;const le=C.shift();ie=new s.JoinedCellData(this._workCell,b.translateToString(!0,le[0],le[1]),le[1]-le[0]),xe=le[1]-1,ue=ie.getWidth()}const ye=this._isCellInSelection(oe,x),$e=d&&oe===N,me=J&&oe>=B&&oe<=j;let Se=!1;this._decorationService.forEachDecorationAtCell(oe,x,void 0,(le=>{Se=!0}));let we=ie.getChars()||f.WHITESPACE_CELL_CHAR;if(we===" "&&(ie.isUnderline()||ie.isOverline())&&(we=" "),q=ue*E-D.get(we,ie.isBold(),ie.isItalic()),M){if(z&&(ye&&U||!ye&&!U&&ie.bg===Y)&&(ye&&U&&L.selectionForeground||ie.fg===X)&&ie.extended.ext===ne&&me===w&&q===F&&!$e&&!he&&!Se){K+=we,z++;continue}z&&(M.textContent=K),M=this._document.createElement("span"),z=0,K=""}else M=this._document.createElement("span");if(Y=ie.bg,X=ie.fg,ne=ie.extended.ext,w=me,F=q,U=ye,he&&N>=oe&&N<=xe&&(N=oe),!this._coreService.isCursorHidden&&$e){if(ee.push("xterm-cursor"),this._coreBrowserService.isFocused)y&&ee.push("xterm-cursor-blink"),ee.push(S==="bar"?"xterm-cursor-bar":S==="underline"?"xterm-cursor-underline":"xterm-cursor-block");else if(R)switch(R){case"outline":ee.push("xterm-cursor-outline");break;case"block":ee.push("xterm-cursor-block");break;case"bar":ee.push("xterm-cursor-bar");break;case"underline":ee.push("xterm-cursor-underline")}}if(ie.isBold()&&ee.push("xterm-bold"),ie.isItalic()&&ee.push("xterm-italic"),ie.isDim()&&ee.push("xterm-dim"),K=ie.isInvisible()?f.WHITESPACE_CELL_CHAR:ie.getChars()||f.WHITESPACE_CELL_CHAR,ie.isUnderline()&&(ee.push(`xterm-underline-${ie.extended.underlineStyle}`),K===" "&&(K=" "),!ie.isUnderlineColorDefault()))if(ie.isUnderlineColorRGB())M.style.textDecorationColor=`rgb(${i.AttributeData.toColorRGB(ie.getUnderlineColor()).join(",")})`;else{let le=ie.getUnderlineColor();this._optionsService.rawOptions.drawBoldTextInBrightColors&&ie.isBold()&&le<8&&(le+=8),M.style.textDecorationColor=L.ansi[le].css}ie.isOverline()&&(ee.push("xterm-overline"),K===" "&&(K=" ")),ie.isStrikethrough()&&ee.push("xterm-strikethrough"),me&&(M.style.textDecoration="underline");let Ce=ie.getFgColor(),Ae=ie.getFgColorMode(),pe=ie.getBgColor(),Me=ie.getBgColorMode();const Ne=!!ie.isInverse();if(Ne){const le=Ce;Ce=pe,pe=le;const Ie=Ae;Ae=Me,Me=Ie}let ke,ze,Le,Be=!1;switch(this._decorationService.forEachDecorationAtCell(oe,x,void 0,(le=>{le.options.layer!=="top"&&Be||(le.backgroundColorRGB&&(Me=50331648,pe=le.backgroundColorRGB.rgba>>8&16777215,ke=le.backgroundColorRGB),le.foregroundColorRGB&&(Ae=50331648,Ce=le.foregroundColorRGB.rgba>>8&16777215,ze=le.foregroundColorRGB),Be=le.options.layer==="top")})),!Be&&ye&&(ke=this._coreBrowserService.isFocused?L.selectionBackgroundOpaque:L.selectionInactiveBackgroundOpaque,pe=ke.rgba>>8&16777215,Me=50331648,Be=!0,L.selectionForeground&&(Ae=50331648,Ce=L.selectionForeground.rgba>>8&16777215,ze=L.selectionForeground)),Be&&ee.push("xterm-decoration-top"),Me){case 16777216:case 33554432:Le=L.ansi[pe],ee.push(`xterm-bg-${pe}`);break;case 50331648:Le=m.rgba.toColor(pe>>16,pe>>8&255,255&pe),this._addStyle(M,`background-color:#${u((pe>>>0).toString(16),"0",6)}`);break;default:Ne?(Le=L.foreground,ee.push(`xterm-bg-${o.INVERTED_DEFAULT_COLOR}`)):Le=L.background}switch(ke||ie.isDim()&&(ke=m.color.multiplyOpacity(Le,.5)),Ae){case 16777216:case 33554432:ie.isBold()&&Ce<8&&this._optionsService.rawOptions.drawBoldTextInBrightColors&&(Ce+=8),this._applyMinimumContrast(M,Le,L.ansi[Ce],ie,ke,void 0)||ee.push(`xterm-fg-${Ce}`);break;case 50331648:const le=m.rgba.toColor(Ce>>16&255,Ce>>8&255,255&Ce);this._applyMinimumContrast(M,Le,le,ie,ke,ze)||this._addStyle(M,`color:#${u(Ce.toString(16),"0",6)}`);break;default:this._applyMinimumContrast(M,Le,L.foreground,ie,ke,void 0)||Ne&&ee.push(`xterm-fg-${o.INVERTED_DEFAULT_COLOR}`)}ee.length&&(M.className=ee.join(" "),ee.length=0),$e||he||Se?M.textContent=K:z++,q!==this.defaultSpacing&&(M.style.letterSpacing=`${q}px`),P.push(M),oe=xe}return M&&z&&(M.textContent=K),P}_applyMinimumContrast(b,x,d,S,R,N){if(this._optionsService.rawOptions.minimumContrastRatio===1||(0,t.excludeFromContrastRatioDemands)(S.getCode()))return!1;const y=this._getContrastCache(S);let E;if(R||N||(E=y.getColor(x.rgba,d.rgba)),E===void 0){const D=this._optionsService.rawOptions.minimumContrastRatio/(S.isDim()?2:1);E=m.color.ensureContrastRatio(R||x,N||d,D),y.setColor((R||x).rgba,(N||d).rgba,E??null)}return!!E&&(this._addStyle(b,`color:${E.css}`),!0)}_getContrastCache(b){return b.isDim()?this._themeService.colors.halfContrastCache:this._themeService.colors.contrastCache}_addStyle(b,x){b.setAttribute("style",`${b.getAttribute("style")||""}${x};`)}_isCellInSelection(b,x){const d=this._selectionStart,S=this._selectionEnd;return!(!d||!S)&&(this._columnSelectMode?d[0]<=S[0]?b>=d[0]&&x>=d[1]&&b=d[1]&&b>=S[0]&&x<=S[1]:x>d[1]&&x=d[0]&&b=d[0])}};function u(b,x,d){for(;b.length{Object.defineProperty(r,"__esModule",{value:!0}),r.WidthCache=void 0,r.WidthCache=class{constructor(n){this._flat=new Float32Array(256),this._font="",this._fontSize=0,this._weight="normal",this._weightBold="bold",this._measureElements=[],this._container=n.createElement("div"),this._container.style.position="absolute",this._container.style.top="-50000px",this._container.style.width="50000px",this._container.style.whiteSpace="pre",this._container.style.fontKerning="none";const h=n.createElement("span"),p=n.createElement("span");p.style.fontWeight="bold";const o=n.createElement("span");o.style.fontStyle="italic";const f=n.createElement("span");f.style.fontWeight="bold",f.style.fontStyle="italic",this._measureElements=[h,p,o,f],this._container.appendChild(h),this._container.appendChild(p),this._container.appendChild(o),this._container.appendChild(f),n.body.appendChild(this._container),this.clear()}dispose(){this._container.remove(),this._measureElements.length=0,this._holey=void 0}clear(){this._flat.fill(-9999),this._holey=new Map}setFont(n,h,p,o){n===this._font&&h===this._fontSize&&p===this._weight&&o===this._weightBold||(this._font=n,this._fontSize=h,this._weight=p,this._weightBold=o,this._container.style.fontFamily=this._font,this._container.style.fontSize=`${this._fontSize}px`,this._measureElements[0].style.fontWeight=`${p}`,this._measureElements[1].style.fontWeight=`${o}`,this._measureElements[2].style.fontWeight=`${p}`,this._measureElements[3].style.fontWeight=`${o}`,this.clear())}get(n,h,p){let o=0;if(!h&&!p&&n.length===1&&(o=n.charCodeAt(0))<256)return this._flat[o]!==-9999?this._flat[o]:this._flat[o]=this._measure(n,0);let f=n;h&&(f+="B"),p&&(f+="I");let g=this._holey.get(f);if(g===void 0){let v=0;h&&(v|=1),p&&(v|=2),g=this._measure(n,v),this._holey.set(f,g)}return g}_measure(n,h){const p=this._measureElements[h];return p.textContent=n.repeat(32),p.offsetWidth/32}}},2223:(A,r,n)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.TEXT_BASELINE=r.DIM_OPACITY=r.INVERTED_DEFAULT_COLOR=void 0;const h=n(6114);r.INVERTED_DEFAULT_COLOR=257,r.DIM_OPACITY=.5,r.TEXT_BASELINE=h.isFirefox||h.isLegacyEdge?"bottom":"ideographic"},6171:(A,r)=>{function n(h){return 57508<=h&&h<=57558}Object.defineProperty(r,"__esModule",{value:!0}),r.createRenderDimensions=r.excludeFromContrastRatioDemands=r.isRestrictedPowerlineGlyph=r.isPowerlineGlyph=r.throwIfFalsy=void 0,r.throwIfFalsy=function(h){if(!h)throw new Error("value must not be falsy");return h},r.isPowerlineGlyph=n,r.isRestrictedPowerlineGlyph=function(h){return 57520<=h&&h<=57527},r.excludeFromContrastRatioDemands=function(h){return n(h)||(function(p){return 9472<=p&&p<=9631})(h)},r.createRenderDimensions=function(){return{css:{canvas:{width:0,height:0},cell:{width:0,height:0}},device:{canvas:{width:0,height:0},cell:{width:0,height:0},char:{width:0,height:0,left:0,top:0}}}}},456:(A,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.SelectionModel=void 0,r.SelectionModel=class{constructor(n){this._bufferService=n,this.isSelectAllActive=!1,this.selectionStartLength=0}clearSelection(){this.selectionStart=void 0,this.selectionEnd=void 0,this.isSelectAllActive=!1,this.selectionStartLength=0}get finalSelectionStart(){return this.isSelectAllActive?[0,0]:this.selectionEnd&&this.selectionStart&&this.areSelectionValuesReversed()?this.selectionEnd:this.selectionStart}get finalSelectionEnd(){if(this.isSelectAllActive)return[this._bufferService.cols,this._bufferService.buffer.ybase+this._bufferService.rows-1];if(this.selectionStart){if(!this.selectionEnd||this.areSelectionValuesReversed()){const n=this.selectionStart[0]+this.selectionStartLength;return n>this._bufferService.cols?n%this._bufferService.cols==0?[this._bufferService.cols,this.selectionStart[1]+Math.floor(n/this._bufferService.cols)-1]:[n%this._bufferService.cols,this.selectionStart[1]+Math.floor(n/this._bufferService.cols)]:[n,this.selectionStart[1]]}if(this.selectionStartLength&&this.selectionEnd[1]===this.selectionStart[1]){const n=this.selectionStart[0]+this.selectionStartLength;return n>this._bufferService.cols?[n%this._bufferService.cols,this.selectionStart[1]+Math.floor(n/this._bufferService.cols)]:[Math.max(n,this.selectionEnd[0]),this.selectionEnd[1]]}return this.selectionEnd}}areSelectionValuesReversed(){const n=this.selectionStart,h=this.selectionEnd;return!(!n||!h)&&(n[1]>h[1]||n[1]===h[1]&&n[0]>h[0])}handleTrim(n){return this.selectionStart&&(this.selectionStart[1]-=n),this.selectionEnd&&(this.selectionEnd[1]-=n),this.selectionEnd&&this.selectionEnd[1]<0?(this.clearSelection(),!0):(this.selectionStart&&this.selectionStart[1]<0&&(this.selectionStart[1]=0),!1)}}},428:function(A,r,n){var h=this&&this.__decorate||function(e,s,t,i){var l,u=arguments.length,b=u<3?s:i===null?i=Object.getOwnPropertyDescriptor(s,t):i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")b=Reflect.decorate(e,s,t,i);else for(var x=e.length-1;x>=0;x--)(l=e[x])&&(b=(u<3?l(b):u>3?l(s,t,b):l(s,t))||b);return u>3&&b&&Object.defineProperty(s,t,b),b},p=this&&this.__param||function(e,s){return function(t,i){s(t,i,e)}};Object.defineProperty(r,"__esModule",{value:!0}),r.CharSizeService=void 0;const o=n(2585),f=n(8460),g=n(844);let v=r.CharSizeService=class extends g.Disposable{get hasValidSize(){return this.width>0&&this.height>0}constructor(e,s,t){super(),this._optionsService=t,this.width=0,this.height=0,this._onCharSizeChange=this.register(new f.EventEmitter),this.onCharSizeChange=this._onCharSizeChange.event,this._measureStrategy=new m(e,s,this._optionsService),this.register(this._optionsService.onMultipleOptionChange(["fontFamily","fontSize"],(()=>this.measure())))}measure(){const e=this._measureStrategy.measure();e.width===this.width&&e.height===this.height||(this.width=e.width,this.height=e.height,this._onCharSizeChange.fire())}};r.CharSizeService=v=h([p(2,o.IOptionsService)],v);class m{constructor(s,t,i){this._document=s,this._parentElement=t,this._optionsService=i,this._result={width:0,height:0},this._measureElement=this._document.createElement("span"),this._measureElement.classList.add("xterm-char-measure-element"),this._measureElement.textContent="W".repeat(32),this._measureElement.setAttribute("aria-hidden","true"),this._measureElement.style.whiteSpace="pre",this._measureElement.style.fontKerning="none",this._parentElement.appendChild(this._measureElement)}measure(){this._measureElement.style.fontFamily=this._optionsService.rawOptions.fontFamily,this._measureElement.style.fontSize=`${this._optionsService.rawOptions.fontSize}px`;const s={height:Number(this._measureElement.offsetHeight),width:Number(this._measureElement.offsetWidth)};return s.width!==0&&s.height!==0&&(this._result.width=s.width/32,this._result.height=Math.ceil(s.height)),this._result}}},4269:function(A,r,n){var h=this&&this.__decorate||function(s,t,i,l){var u,b=arguments.length,x=b<3?t:l===null?l=Object.getOwnPropertyDescriptor(t,i):l;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")x=Reflect.decorate(s,t,i,l);else for(var d=s.length-1;d>=0;d--)(u=s[d])&&(x=(b<3?u(x):b>3?u(t,i,x):u(t,i))||x);return b>3&&x&&Object.defineProperty(t,i,x),x},p=this&&this.__param||function(s,t){return function(i,l){t(i,l,s)}};Object.defineProperty(r,"__esModule",{value:!0}),r.CharacterJoinerService=r.JoinedCellData=void 0;const o=n(3734),f=n(643),g=n(511),v=n(2585);class m extends o.AttributeData{constructor(t,i,l){super(),this.content=0,this.combinedData="",this.fg=t.fg,this.bg=t.bg,this.combinedData=i,this._width=l}isCombined(){return 2097152}getWidth(){return this._width}getChars(){return this.combinedData}getCode(){return 2097151}setFromCharData(t){throw new Error("not implemented")}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}}r.JoinedCellData=m;let e=r.CharacterJoinerService=class zs{constructor(t){this._bufferService=t,this._characterJoiners=[],this._nextCharacterJoinerId=0,this._workCell=new g.CellData}register(t){const i={id:this._nextCharacterJoinerId++,handler:t};return this._characterJoiners.push(i),i.id}deregister(t){for(let i=0;i1){const y=this._getJoinedRanges(u,d,x,i,b);for(let E=0;E1){const N=this._getJoinedRanges(u,d,x,i,b);for(let y=0;y{Object.defineProperty(r,"__esModule",{value:!0}),r.CoreBrowserService=void 0,r.CoreBrowserService=class{constructor(n,h){this._textarea=n,this.window=h,this._isFocused=!1,this._cachedIsFocused=void 0,this._textarea.addEventListener("focus",(()=>this._isFocused=!0)),this._textarea.addEventListener("blur",(()=>this._isFocused=!1))}get dpr(){return this.window.devicePixelRatio}get isFocused(){return this._cachedIsFocused===void 0&&(this._cachedIsFocused=this._isFocused&&this._textarea.ownerDocument.hasFocus(),queueMicrotask((()=>this._cachedIsFocused=void 0))),this._cachedIsFocused}}},8934:function(A,r,n){var h=this&&this.__decorate||function(v,m,e,s){var t,i=arguments.length,l=i<3?m:s===null?s=Object.getOwnPropertyDescriptor(m,e):s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")l=Reflect.decorate(v,m,e,s);else for(var u=v.length-1;u>=0;u--)(t=v[u])&&(l=(i<3?t(l):i>3?t(m,e,l):t(m,e))||l);return i>3&&l&&Object.defineProperty(m,e,l),l},p=this&&this.__param||function(v,m){return function(e,s){m(e,s,v)}};Object.defineProperty(r,"__esModule",{value:!0}),r.MouseService=void 0;const o=n(4725),f=n(9806);let g=r.MouseService=class{constructor(v,m){this._renderService=v,this._charSizeService=m}getCoords(v,m,e,s,t){return(0,f.getCoords)(window,v,m,e,s,this._charSizeService.hasValidSize,this._renderService.dimensions.css.cell.width,this._renderService.dimensions.css.cell.height,t)}getMouseReportCoords(v,m){const e=(0,f.getCoordsRelativeToElement)(window,v,m);if(this._charSizeService.hasValidSize)return e[0]=Math.min(Math.max(e[0],0),this._renderService.dimensions.css.canvas.width-1),e[1]=Math.min(Math.max(e[1],0),this._renderService.dimensions.css.canvas.height-1),{col:Math.floor(e[0]/this._renderService.dimensions.css.cell.width),row:Math.floor(e[1]/this._renderService.dimensions.css.cell.height),x:Math.floor(e[0]),y:Math.floor(e[1])}}};r.MouseService=g=h([p(0,o.IRenderService),p(1,o.ICharSizeService)],g)},3230:function(A,r,n){var h=this&&this.__decorate||function(l,u,b,x){var d,S=arguments.length,R=S<3?u:x===null?x=Object.getOwnPropertyDescriptor(u,b):x;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")R=Reflect.decorate(l,u,b,x);else for(var N=l.length-1;N>=0;N--)(d=l[N])&&(R=(S<3?d(R):S>3?d(u,b,R):d(u,b))||R);return S>3&&R&&Object.defineProperty(u,b,R),R},p=this&&this.__param||function(l,u){return function(b,x){u(b,x,l)}};Object.defineProperty(r,"__esModule",{value:!0}),r.RenderService=void 0;const o=n(3656),f=n(6193),g=n(5596),v=n(4725),m=n(8460),e=n(844),s=n(7226),t=n(2585);let i=r.RenderService=class extends e.Disposable{get dimensions(){return this._renderer.value.dimensions}constructor(l,u,b,x,d,S,R,N){if(super(),this._rowCount=l,this._charSizeService=x,this._renderer=this.register(new e.MutableDisposable),this._pausedResizeTask=new s.DebouncedIdleTask,this._isPaused=!1,this._needsFullRefresh=!1,this._isNextRenderRedrawOnly=!0,this._needsSelectionRefresh=!1,this._canvasWidth=0,this._canvasHeight=0,this._selectionState={start:void 0,end:void 0,columnSelectMode:!1},this._onDimensionsChange=this.register(new m.EventEmitter),this.onDimensionsChange=this._onDimensionsChange.event,this._onRenderedViewportChange=this.register(new m.EventEmitter),this.onRenderedViewportChange=this._onRenderedViewportChange.event,this._onRender=this.register(new m.EventEmitter),this.onRender=this._onRender.event,this._onRefreshRequest=this.register(new m.EventEmitter),this.onRefreshRequest=this._onRefreshRequest.event,this._renderDebouncer=new f.RenderDebouncer(R.window,((y,E)=>this._renderRows(y,E))),this.register(this._renderDebouncer),this._screenDprMonitor=new g.ScreenDprMonitor(R.window),this._screenDprMonitor.setListener((()=>this.handleDevicePixelRatioChange())),this.register(this._screenDprMonitor),this.register(S.onResize((()=>this._fullRefresh()))),this.register(S.buffers.onBufferActivate((()=>{var y;return(y=this._renderer.value)===null||y===void 0?void 0:y.clear()}))),this.register(b.onOptionChange((()=>this._handleOptionsChanged()))),this.register(this._charSizeService.onCharSizeChange((()=>this.handleCharSizeChanged()))),this.register(d.onDecorationRegistered((()=>this._fullRefresh()))),this.register(d.onDecorationRemoved((()=>this._fullRefresh()))),this.register(b.onMultipleOptionChange(["customGlyphs","drawBoldTextInBrightColors","letterSpacing","lineHeight","fontFamily","fontSize","fontWeight","fontWeightBold","minimumContrastRatio"],(()=>{this.clear(),this.handleResize(S.cols,S.rows),this._fullRefresh()}))),this.register(b.onMultipleOptionChange(["cursorBlink","cursorStyle"],(()=>this.refreshRows(S.buffer.y,S.buffer.y,!0)))),this.register((0,o.addDisposableDomListener)(R.window,"resize",(()=>this.handleDevicePixelRatioChange()))),this.register(N.onChangeColors((()=>this._fullRefresh()))),"IntersectionObserver"in R.window){const y=new R.window.IntersectionObserver((E=>this._handleIntersectionChange(E[E.length-1])),{threshold:0});y.observe(u),this.register({dispose:()=>y.disconnect()})}}_handleIntersectionChange(l){this._isPaused=l.isIntersecting===void 0?l.intersectionRatio===0:!l.isIntersecting,this._isPaused||this._charSizeService.hasValidSize||this._charSizeService.measure(),!this._isPaused&&this._needsFullRefresh&&(this._pausedResizeTask.flush(),this.refreshRows(0,this._rowCount-1),this._needsFullRefresh=!1)}refreshRows(l,u,b=!1){this._isPaused?this._needsFullRefresh=!0:(b||(this._isNextRenderRedrawOnly=!1),this._renderDebouncer.refresh(l,u,this._rowCount))}_renderRows(l,u){this._renderer.value&&(l=Math.min(l,this._rowCount-1),u=Math.min(u,this._rowCount-1),this._renderer.value.renderRows(l,u),this._needsSelectionRefresh&&(this._renderer.value.handleSelectionChanged(this._selectionState.start,this._selectionState.end,this._selectionState.columnSelectMode),this._needsSelectionRefresh=!1),this._isNextRenderRedrawOnly||this._onRenderedViewportChange.fire({start:l,end:u}),this._onRender.fire({start:l,end:u}),this._isNextRenderRedrawOnly=!0)}resize(l,u){this._rowCount=u,this._fireOnCanvasResize()}_handleOptionsChanged(){this._renderer.value&&(this.refreshRows(0,this._rowCount-1),this._fireOnCanvasResize())}_fireOnCanvasResize(){this._renderer.value&&(this._renderer.value.dimensions.css.canvas.width===this._canvasWidth&&this._renderer.value.dimensions.css.canvas.height===this._canvasHeight||this._onDimensionsChange.fire(this._renderer.value.dimensions))}hasRenderer(){return!!this._renderer.value}setRenderer(l){this._renderer.value=l,this._renderer.value.onRequestRedraw((u=>this.refreshRows(u.start,u.end,!0))),this._needsSelectionRefresh=!0,this._fullRefresh()}addRefreshCallback(l){return this._renderDebouncer.addRefreshCallback(l)}_fullRefresh(){this._isPaused?this._needsFullRefresh=!0:this.refreshRows(0,this._rowCount-1)}clearTextureAtlas(){var l,u;this._renderer.value&&((u=(l=this._renderer.value).clearTextureAtlas)===null||u===void 0||u.call(l),this._fullRefresh())}handleDevicePixelRatioChange(){this._charSizeService.measure(),this._renderer.value&&(this._renderer.value.handleDevicePixelRatioChange(),this.refreshRows(0,this._rowCount-1))}handleResize(l,u){this._renderer.value&&(this._isPaused?this._pausedResizeTask.set((()=>this._renderer.value.handleResize(l,u))):this._renderer.value.handleResize(l,u),this._fullRefresh())}handleCharSizeChanged(){var l;(l=this._renderer.value)===null||l===void 0||l.handleCharSizeChanged()}handleBlur(){var l;(l=this._renderer.value)===null||l===void 0||l.handleBlur()}handleFocus(){var l;(l=this._renderer.value)===null||l===void 0||l.handleFocus()}handleSelectionChanged(l,u,b){var x;this._selectionState.start=l,this._selectionState.end=u,this._selectionState.columnSelectMode=b,(x=this._renderer.value)===null||x===void 0||x.handleSelectionChanged(l,u,b)}handleCursorMove(){var l;(l=this._renderer.value)===null||l===void 0||l.handleCursorMove()}clear(){var l;(l=this._renderer.value)===null||l===void 0||l.clear()}};r.RenderService=i=h([p(2,t.IOptionsService),p(3,v.ICharSizeService),p(4,t.IDecorationService),p(5,t.IBufferService),p(6,v.ICoreBrowserService),p(7,v.IThemeService)],i)},9312:function(A,r,n){var h=this&&this.__decorate||function(d,S,R,N){var y,E=arguments.length,D=E<3?S:N===null?N=Object.getOwnPropertyDescriptor(S,R):N;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")D=Reflect.decorate(d,S,R,N);else for(var B=d.length-1;B>=0;B--)(y=d[B])&&(D=(E<3?y(D):E>3?y(S,R,D):y(S,R))||D);return E>3&&D&&Object.defineProperty(S,R,D),D},p=this&&this.__param||function(d,S){return function(R,N){S(R,N,d)}};Object.defineProperty(r,"__esModule",{value:!0}),r.SelectionService=void 0;const o=n(9806),f=n(9504),g=n(456),v=n(4725),m=n(8460),e=n(844),s=n(6114),t=n(4841),i=n(511),l=n(2585),u=" ",b=new RegExp(u,"g");let x=r.SelectionService=class extends e.Disposable{constructor(d,S,R,N,y,E,D,B,j){super(),this._element=d,this._screenElement=S,this._linkifier=R,this._bufferService=N,this._coreService=y,this._mouseService=E,this._optionsService=D,this._renderService=B,this._coreBrowserService=j,this._dragScrollAmount=0,this._enabled=!0,this._workCell=new i.CellData,this._mouseDownTimeStamp=0,this._oldHasSelection=!1,this._oldSelectionStart=void 0,this._oldSelectionEnd=void 0,this._onLinuxMouseSelection=this.register(new m.EventEmitter),this.onLinuxMouseSelection=this._onLinuxMouseSelection.event,this._onRedrawRequest=this.register(new m.EventEmitter),this.onRequestRedraw=this._onRedrawRequest.event,this._onSelectionChange=this.register(new m.EventEmitter),this.onSelectionChange=this._onSelectionChange.event,this._onRequestScrollLines=this.register(new m.EventEmitter),this.onRequestScrollLines=this._onRequestScrollLines.event,this._mouseMoveListener=P=>this._handleMouseMove(P),this._mouseUpListener=P=>this._handleMouseUp(P),this._coreService.onUserInput((()=>{this.hasSelection&&this.clearSelection()})),this._trimListener=this._bufferService.buffer.lines.onTrim((P=>this._handleTrim(P))),this.register(this._bufferService.buffers.onBufferActivate((P=>this._handleBufferActivate(P)))),this.enable(),this._model=new g.SelectionModel(this._bufferService),this._activeSelectionMode=0,this.register((0,e.toDisposable)((()=>{this._removeMouseDownListeners()})))}reset(){this.clearSelection()}disable(){this.clearSelection(),this._enabled=!1}enable(){this._enabled=!0}get selectionStart(){return this._model.finalSelectionStart}get selectionEnd(){return this._model.finalSelectionEnd}get hasSelection(){const d=this._model.finalSelectionStart,S=this._model.finalSelectionEnd;return!(!d||!S||d[0]===S[0]&&d[1]===S[1])}get selectionText(){const d=this._model.finalSelectionStart,S=this._model.finalSelectionEnd;if(!d||!S)return"";const R=this._bufferService.buffer,N=[];if(this._activeSelectionMode===3){if(d[0]===S[0])return"";const y=d[0]y.replace(b," "))).join(s.isWindows?`\r +`:` +`)}clearSelection(){this._model.clearSelection(),this._removeMouseDownListeners(),this.refresh(),this._onSelectionChange.fire()}refresh(d){this._refreshAnimationFrame||(this._refreshAnimationFrame=this._coreBrowserService.window.requestAnimationFrame((()=>this._refresh()))),s.isLinux&&d&&this.selectionText.length&&this._onLinuxMouseSelection.fire(this.selectionText)}_refresh(){this._refreshAnimationFrame=void 0,this._onRedrawRequest.fire({start:this._model.finalSelectionStart,end:this._model.finalSelectionEnd,columnSelectMode:this._activeSelectionMode===3})}_isClickInSelection(d){const S=this._getMouseBufferCoords(d),R=this._model.finalSelectionStart,N=this._model.finalSelectionEnd;return!!(R&&N&&S)&&this._areCoordsInSelection(S,R,N)}isCellInSelection(d,S){const R=this._model.finalSelectionStart,N=this._model.finalSelectionEnd;return!(!R||!N)&&this._areCoordsInSelection([d,S],R,N)}_areCoordsInSelection(d,S,R){return d[1]>S[1]&&d[1]=S[0]&&d[0]=S[0]}_selectWordAtCursor(d,S){var R,N;const y=(N=(R=this._linkifier.currentLink)===null||R===void 0?void 0:R.link)===null||N===void 0?void 0:N.range;if(y)return this._model.selectionStart=[y.start.x-1,y.start.y-1],this._model.selectionStartLength=(0,t.getRangeLength)(y,this._bufferService.cols),this._model.selectionEnd=void 0,!0;const E=this._getMouseBufferCoords(d);return!!E&&(this._selectWordAt(E,S),this._model.selectionEnd=void 0,!0)}selectAll(){this._model.isSelectAllActive=!0,this.refresh(),this._onSelectionChange.fire()}selectLines(d,S){this._model.clearSelection(),d=Math.max(d,0),S=Math.min(S,this._bufferService.buffer.lines.length-1),this._model.selectionStart=[0,d],this._model.selectionEnd=[this._bufferService.cols,S],this.refresh(),this._onSelectionChange.fire()}_handleTrim(d){this._model.handleTrim(d)&&this.refresh()}_getMouseBufferCoords(d){const S=this._mouseService.getCoords(d,this._screenElement,this._bufferService.cols,this._bufferService.rows,!0);if(S)return S[0]--,S[1]--,S[1]+=this._bufferService.buffer.ydisp,S}_getMouseEventScrollAmount(d){let S=(0,o.getCoordsRelativeToElement)(this._coreBrowserService.window,d,this._screenElement)[1];const R=this._renderService.dimensions.css.canvas.height;return S>=0&&S<=R?0:(S>R&&(S-=R),S=Math.min(Math.max(S,-50),50),S/=50,S/Math.abs(S)+Math.round(14*S))}shouldForceSelection(d){return s.isMac?d.altKey&&this._optionsService.rawOptions.macOptionClickForcesSelection:d.shiftKey}handleMouseDown(d){if(this._mouseDownTimeStamp=d.timeStamp,(d.button!==2||!this.hasSelection)&&d.button===0){if(!this._enabled){if(!this.shouldForceSelection(d))return;d.stopPropagation()}d.preventDefault(),this._dragScrollAmount=0,this._enabled&&d.shiftKey?this._handleIncrementalClick(d):d.detail===1?this._handleSingleClick(d):d.detail===2?this._handleDoubleClick(d):d.detail===3&&this._handleTripleClick(d),this._addMouseDownListeners(),this.refresh(!0)}}_addMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.addEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.addEventListener("mouseup",this._mouseUpListener)),this._dragScrollIntervalTimer=this._coreBrowserService.window.setInterval((()=>this._dragScroll()),50)}_removeMouseDownListeners(){this._screenElement.ownerDocument&&(this._screenElement.ownerDocument.removeEventListener("mousemove",this._mouseMoveListener),this._screenElement.ownerDocument.removeEventListener("mouseup",this._mouseUpListener)),this._coreBrowserService.window.clearInterval(this._dragScrollIntervalTimer),this._dragScrollIntervalTimer=void 0}_handleIncrementalClick(d){this._model.selectionStart&&(this._model.selectionEnd=this._getMouseBufferCoords(d))}_handleSingleClick(d){if(this._model.selectionStartLength=0,this._model.isSelectAllActive=!1,this._activeSelectionMode=this.shouldColumnSelect(d)?3:0,this._model.selectionStart=this._getMouseBufferCoords(d),!this._model.selectionStart)return;this._model.selectionEnd=void 0;const S=this._bufferService.buffer.lines.get(this._model.selectionStart[1]);S&&S.length!==this._model.selectionStart[0]&&S.hasWidth(this._model.selectionStart[0])===0&&this._model.selectionStart[0]++}_handleDoubleClick(d){this._selectWordAtCursor(d,!0)&&(this._activeSelectionMode=1)}_handleTripleClick(d){const S=this._getMouseBufferCoords(d);S&&(this._activeSelectionMode=2,this._selectLineAt(S[1]))}shouldColumnSelect(d){return d.altKey&&!(s.isMac&&this._optionsService.rawOptions.macOptionClickForcesSelection)}_handleMouseMove(d){if(d.stopImmediatePropagation(),!this._model.selectionStart)return;const S=this._model.selectionEnd?[this._model.selectionEnd[0],this._model.selectionEnd[1]]:null;if(this._model.selectionEnd=this._getMouseBufferCoords(d),!this._model.selectionEnd)return void this.refresh(!0);this._activeSelectionMode===2?this._model.selectionEnd[1]0?this._model.selectionEnd[0]=this._bufferService.cols:this._dragScrollAmount<0&&(this._model.selectionEnd[0]=0));const R=this._bufferService.buffer;if(this._model.selectionEnd[1]0?(this._activeSelectionMode!==3&&(this._model.selectionEnd[0]=this._bufferService.cols),this._model.selectionEnd[1]=Math.min(d.ydisp+this._bufferService.rows,d.lines.length-1)):(this._activeSelectionMode!==3&&(this._model.selectionEnd[0]=0),this._model.selectionEnd[1]=d.ydisp),this.refresh()}}_handleMouseUp(d){const S=d.timeStamp-this._mouseDownTimeStamp;if(this._removeMouseDownListeners(),this.selectionText.length<=1&&S<500&&d.altKey&&this._optionsService.rawOptions.altClickMovesCursor){if(this._bufferService.buffer.ybase===this._bufferService.buffer.ydisp){const R=this._mouseService.getCoords(d,this._element,this._bufferService.cols,this._bufferService.rows,!1);if(R&&R[0]!==void 0&&R[1]!==void 0){const N=(0,f.moveToCellSequence)(R[0]-1,R[1]-1,this._bufferService,this._coreService.decPrivateModes.applicationCursorKeys);this._coreService.triggerDataEvent(N,!0)}}}else this._fireEventIfSelectionChanged()}_fireEventIfSelectionChanged(){const d=this._model.finalSelectionStart,S=this._model.finalSelectionEnd,R=!(!d||!S||d[0]===S[0]&&d[1]===S[1]);R?d&&S&&(this._oldSelectionStart&&this._oldSelectionEnd&&d[0]===this._oldSelectionStart[0]&&d[1]===this._oldSelectionStart[1]&&S[0]===this._oldSelectionEnd[0]&&S[1]===this._oldSelectionEnd[1]||this._fireOnSelectionChange(d,S,R)):this._oldHasSelection&&this._fireOnSelectionChange(d,S,R)}_fireOnSelectionChange(d,S,R){this._oldSelectionStart=d,this._oldSelectionEnd=S,this._oldHasSelection=R,this._onSelectionChange.fire()}_handleBufferActivate(d){this.clearSelection(),this._trimListener.dispose(),this._trimListener=d.activeBuffer.lines.onTrim((S=>this._handleTrim(S)))}_convertViewportColToCharacterIndex(d,S){let R=S;for(let N=0;S>=N;N++){const y=d.loadCell(N,this._workCell).getChars().length;this._workCell.getWidth()===0?R--:y>1&&S!==N&&(R+=y-1)}return R}setSelection(d,S,R){this._model.clearSelection(),this._removeMouseDownListeners(),this._model.selectionStart=[d,S],this._model.selectionStartLength=R,this.refresh(),this._fireEventIfSelectionChanged()}rightClickSelect(d){this._isClickInSelection(d)||(this._selectWordAtCursor(d,!1)&&this.refresh(!0),this._fireEventIfSelectionChanged())}_getWordAt(d,S,R=!0,N=!0){if(d[0]>=this._bufferService.cols)return;const y=this._bufferService.buffer,E=y.lines.get(d[1]);if(!E)return;const D=y.translateBufferLineToString(d[1],!1);let B=this._convertViewportColToCharacterIndex(E,d[0]),j=B;const P=d[0]-B;let C=0,L=0,M=0,I=0;if(D.charAt(B)===" "){for(;B>0&&D.charAt(B-1)===" ";)B--;for(;j1&&(I+=ne-1,j+=ne-1);Y>0&&B>0&&!this._isCharWordSeparator(E.loadCell(Y-1,this._workCell));){E.loadCell(Y-1,this._workCell);const w=this._workCell.getChars().length;this._workCell.getWidth()===0?(C++,Y--):w>1&&(M+=w-1,B-=w-1),B--,Y--}for(;X1&&(I+=w-1,j+=w-1),j++,X++}}j++;let z=B+P-C+M,K=Math.min(this._bufferService.cols,j-B+C+L-M-I);if(S||D.slice(B,j).trim()!==""){if(R&&z===0&&E.getCodePoint(0)!==32){const Y=y.lines.get(d[1]-1);if(Y&&E.isWrapped&&Y.getCodePoint(this._bufferService.cols-1)!==32){const X=this._getWordAt([this._bufferService.cols-1,d[1]-1],!1,!0,!1);if(X){const ne=this._bufferService.cols-X.start;z-=ne,K+=ne}}}if(N&&z+K===this._bufferService.cols&&E.getCodePoint(this._bufferService.cols-1)!==32){const Y=y.lines.get(d[1]+1);if(Y?.isWrapped&&Y.getCodePoint(0)!==32){const X=this._getWordAt([0,d[1]+1],!1,!1,!0);X&&(K+=X.length)}}return{start:z,length:K}}}_selectWordAt(d,S){const R=this._getWordAt(d,S);if(R){for(;R.start<0;)R.start+=this._bufferService.cols,d[1]--;this._model.selectionStart=[R.start,d[1]],this._model.selectionStartLength=R.length}}_selectToWordAt(d){const S=this._getWordAt(d,!0);if(S){let R=d[1];for(;S.start<0;)S.start+=this._bufferService.cols,R--;if(!this._model.areSelectionValuesReversed())for(;S.start+S.length>this._bufferService.cols;)S.length-=this._bufferService.cols,R++;this._model.selectionEnd=[this._model.areSelectionValuesReversed()?S.start:S.start+S.length,R]}}_isCharWordSeparator(d){return d.getWidth()!==0&&this._optionsService.rawOptions.wordSeparator.indexOf(d.getChars())>=0}_selectLineAt(d){const S=this._bufferService.buffer.getWrappedRangeForLine(d),R={start:{x:0,y:S.first},end:{x:this._bufferService.cols-1,y:S.last}};this._model.selectionStart=[0,S.first],this._model.selectionEnd=void 0,this._model.selectionStartLength=(0,t.getRangeLength)(R,this._bufferService.cols)}};r.SelectionService=x=h([p(3,l.IBufferService),p(4,l.ICoreService),p(5,v.IMouseService),p(6,l.IOptionsService),p(7,v.IRenderService),p(8,v.ICoreBrowserService)],x)},4725:(A,r,n)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.IThemeService=r.ICharacterJoinerService=r.ISelectionService=r.IRenderService=r.IMouseService=r.ICoreBrowserService=r.ICharSizeService=void 0;const h=n(8343);r.ICharSizeService=(0,h.createDecorator)("CharSizeService"),r.ICoreBrowserService=(0,h.createDecorator)("CoreBrowserService"),r.IMouseService=(0,h.createDecorator)("MouseService"),r.IRenderService=(0,h.createDecorator)("RenderService"),r.ISelectionService=(0,h.createDecorator)("SelectionService"),r.ICharacterJoinerService=(0,h.createDecorator)("CharacterJoinerService"),r.IThemeService=(0,h.createDecorator)("ThemeService")},6731:function(A,r,n){var h=this&&this.__decorate||function(x,d,S,R){var N,y=arguments.length,E=y<3?d:R===null?R=Object.getOwnPropertyDescriptor(d,S):R;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")E=Reflect.decorate(x,d,S,R);else for(var D=x.length-1;D>=0;D--)(N=x[D])&&(E=(y<3?N(E):y>3?N(d,S,E):N(d,S))||E);return y>3&&E&&Object.defineProperty(d,S,E),E},p=this&&this.__param||function(x,d){return function(S,R){d(S,R,x)}};Object.defineProperty(r,"__esModule",{value:!0}),r.ThemeService=r.DEFAULT_ANSI_COLORS=void 0;const o=n(7239),f=n(8055),g=n(8460),v=n(844),m=n(2585),e=f.css.toColor("#ffffff"),s=f.css.toColor("#000000"),t=f.css.toColor("#ffffff"),i=f.css.toColor("#000000"),l={css:"rgba(255, 255, 255, 0.3)",rgba:4294967117};r.DEFAULT_ANSI_COLORS=Object.freeze((()=>{const x=[f.css.toColor("#2e3436"),f.css.toColor("#cc0000"),f.css.toColor("#4e9a06"),f.css.toColor("#c4a000"),f.css.toColor("#3465a4"),f.css.toColor("#75507b"),f.css.toColor("#06989a"),f.css.toColor("#d3d7cf"),f.css.toColor("#555753"),f.css.toColor("#ef2929"),f.css.toColor("#8ae234"),f.css.toColor("#fce94f"),f.css.toColor("#729fcf"),f.css.toColor("#ad7fa8"),f.css.toColor("#34e2e2"),f.css.toColor("#eeeeec")],d=[0,95,135,175,215,255];for(let S=0;S<216;S++){const R=d[S/36%6|0],N=d[S/6%6|0],y=d[S%6];x.push({css:f.channels.toCss(R,N,y),rgba:f.channels.toRgba(R,N,y)})}for(let S=0;S<24;S++){const R=8+10*S;x.push({css:f.channels.toCss(R,R,R),rgba:f.channels.toRgba(R,R,R)})}return x})());let u=r.ThemeService=class extends v.Disposable{get colors(){return this._colors}constructor(x){super(),this._optionsService=x,this._contrastCache=new o.ColorContrastCache,this._halfContrastCache=new o.ColorContrastCache,this._onChangeColors=this.register(new g.EventEmitter),this.onChangeColors=this._onChangeColors.event,this._colors={foreground:e,background:s,cursor:t,cursorAccent:i,selectionForeground:void 0,selectionBackgroundTransparent:l,selectionBackgroundOpaque:f.color.blend(s,l),selectionInactiveBackgroundTransparent:l,selectionInactiveBackgroundOpaque:f.color.blend(s,l),ansi:r.DEFAULT_ANSI_COLORS.slice(),contrastCache:this._contrastCache,halfContrastCache:this._halfContrastCache},this._updateRestoreColors(),this._setTheme(this._optionsService.rawOptions.theme),this.register(this._optionsService.onSpecificOptionChange("minimumContrastRatio",(()=>this._contrastCache.clear()))),this.register(this._optionsService.onSpecificOptionChange("theme",(()=>this._setTheme(this._optionsService.rawOptions.theme))))}_setTheme(x={}){const d=this._colors;if(d.foreground=b(x.foreground,e),d.background=b(x.background,s),d.cursor=b(x.cursor,t),d.cursorAccent=b(x.cursorAccent,i),d.selectionBackgroundTransparent=b(x.selectionBackground,l),d.selectionBackgroundOpaque=f.color.blend(d.background,d.selectionBackgroundTransparent),d.selectionInactiveBackgroundTransparent=b(x.selectionInactiveBackground,d.selectionBackgroundTransparent),d.selectionInactiveBackgroundOpaque=f.color.blend(d.background,d.selectionInactiveBackgroundTransparent),d.selectionForeground=x.selectionForeground?b(x.selectionForeground,f.NULL_COLOR):void 0,d.selectionForeground===f.NULL_COLOR&&(d.selectionForeground=void 0),f.color.isOpaque(d.selectionBackgroundTransparent)&&(d.selectionBackgroundTransparent=f.color.opacity(d.selectionBackgroundTransparent,.3)),f.color.isOpaque(d.selectionInactiveBackgroundTransparent)&&(d.selectionInactiveBackgroundTransparent=f.color.opacity(d.selectionInactiveBackgroundTransparent,.3)),d.ansi=r.DEFAULT_ANSI_COLORS.slice(),d.ansi[0]=b(x.black,r.DEFAULT_ANSI_COLORS[0]),d.ansi[1]=b(x.red,r.DEFAULT_ANSI_COLORS[1]),d.ansi[2]=b(x.green,r.DEFAULT_ANSI_COLORS[2]),d.ansi[3]=b(x.yellow,r.DEFAULT_ANSI_COLORS[3]),d.ansi[4]=b(x.blue,r.DEFAULT_ANSI_COLORS[4]),d.ansi[5]=b(x.magenta,r.DEFAULT_ANSI_COLORS[5]),d.ansi[6]=b(x.cyan,r.DEFAULT_ANSI_COLORS[6]),d.ansi[7]=b(x.white,r.DEFAULT_ANSI_COLORS[7]),d.ansi[8]=b(x.brightBlack,r.DEFAULT_ANSI_COLORS[8]),d.ansi[9]=b(x.brightRed,r.DEFAULT_ANSI_COLORS[9]),d.ansi[10]=b(x.brightGreen,r.DEFAULT_ANSI_COLORS[10]),d.ansi[11]=b(x.brightYellow,r.DEFAULT_ANSI_COLORS[11]),d.ansi[12]=b(x.brightBlue,r.DEFAULT_ANSI_COLORS[12]),d.ansi[13]=b(x.brightMagenta,r.DEFAULT_ANSI_COLORS[13]),d.ansi[14]=b(x.brightCyan,r.DEFAULT_ANSI_COLORS[14]),d.ansi[15]=b(x.brightWhite,r.DEFAULT_ANSI_COLORS[15]),x.extendedAnsi){const S=Math.min(d.ansi.length-16,x.extendedAnsi.length);for(let R=0;R{Object.defineProperty(r,"__esModule",{value:!0}),r.CircularList=void 0;const h=n(8460),p=n(844);class o extends p.Disposable{constructor(g){super(),this._maxLength=g,this.onDeleteEmitter=this.register(new h.EventEmitter),this.onDelete=this.onDeleteEmitter.event,this.onInsertEmitter=this.register(new h.EventEmitter),this.onInsert=this.onInsertEmitter.event,this.onTrimEmitter=this.register(new h.EventEmitter),this.onTrim=this.onTrimEmitter.event,this._array=new Array(this._maxLength),this._startIndex=0,this._length=0}get maxLength(){return this._maxLength}set maxLength(g){if(this._maxLength===g)return;const v=new Array(g);for(let m=0;mthis._length)for(let v=this._length;v=g;e--)this._array[this._getCyclicIndex(e+m.length)]=this._array[this._getCyclicIndex(e)];for(let e=0;ethis._maxLength){const e=this._length+m.length-this._maxLength;this._startIndex+=e,this._length=this._maxLength,this.onTrimEmitter.fire(e)}else this._length+=m.length}trimStart(g){g>this._length&&(g=this._length),this._startIndex+=g,this._length-=g,this.onTrimEmitter.fire(g)}shiftElements(g,v,m){if(!(v<=0)){if(g<0||g>=this._length)throw new Error("start argument out of range");if(g+m<0)throw new Error("Cannot shift elements in list beyond index 0");if(m>0){for(let s=v-1;s>=0;s--)this.set(g+s+m,this.get(g+s));const e=g+v+m-this._length;if(e>0)for(this._length+=e;this._length>this._maxLength;)this._length--,this._startIndex++,this.onTrimEmitter.fire(1)}else for(let e=0;e{Object.defineProperty(r,"__esModule",{value:!0}),r.clone=void 0,r.clone=function n(h,p=5){if(typeof h!="object")return h;const o=Array.isArray(h)?[]:{};for(const f in h)o[f]=p<=1?h[f]:h[f]&&n(h[f],p-1);return o}},8055:(A,r,n)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.contrastRatio=r.toPaddedHex=r.rgba=r.rgb=r.css=r.color=r.channels=r.NULL_COLOR=void 0;const h=n(6114);let p=0,o=0,f=0,g=0;var v,m,e,s,t;function i(u){const b=u.toString(16);return b.length<2?"0"+b:b}function l(u,b){return u>>0}})(v||(r.channels=v={})),(function(u){function b(x,d){return g=Math.round(255*d),[p,o,f]=t.toChannels(x.rgba),{css:v.toCss(p,o,f,g),rgba:v.toRgba(p,o,f,g)}}u.blend=function(x,d){if(g=(255&d.rgba)/255,g===1)return{css:d.css,rgba:d.rgba};const S=d.rgba>>24&255,R=d.rgba>>16&255,N=d.rgba>>8&255,y=x.rgba>>24&255,E=x.rgba>>16&255,D=x.rgba>>8&255;return p=y+Math.round((S-y)*g),o=E+Math.round((R-E)*g),f=D+Math.round((N-D)*g),{css:v.toCss(p,o,f),rgba:v.toRgba(p,o,f)}},u.isOpaque=function(x){return(255&x.rgba)==255},u.ensureContrastRatio=function(x,d,S){const R=t.ensureContrastRatio(x.rgba,d.rgba,S);if(R)return t.toColor(R>>24&255,R>>16&255,R>>8&255)},u.opaque=function(x){const d=(255|x.rgba)>>>0;return[p,o,f]=t.toChannels(d),{css:v.toCss(p,o,f),rgba:d}},u.opacity=b,u.multiplyOpacity=function(x,d){return g=255&x.rgba,b(x,g*d/255)},u.toColorRGB=function(x){return[x.rgba>>24&255,x.rgba>>16&255,x.rgba>>8&255]}})(m||(r.color=m={})),(function(u){let b,x;if(!h.isNode){const d=document.createElement("canvas");d.width=1,d.height=1;const S=d.getContext("2d",{willReadFrequently:!0});S&&(b=S,b.globalCompositeOperation="copy",x=b.createLinearGradient(0,0,1,1))}u.toColor=function(d){if(d.match(/#[\da-f]{3,8}/i))switch(d.length){case 4:return p=parseInt(d.slice(1,2).repeat(2),16),o=parseInt(d.slice(2,3).repeat(2),16),f=parseInt(d.slice(3,4).repeat(2),16),t.toColor(p,o,f);case 5:return p=parseInt(d.slice(1,2).repeat(2),16),o=parseInt(d.slice(2,3).repeat(2),16),f=parseInt(d.slice(3,4).repeat(2),16),g=parseInt(d.slice(4,5).repeat(2),16),t.toColor(p,o,f,g);case 7:return{css:d,rgba:(parseInt(d.slice(1),16)<<8|255)>>>0};case 9:return{css:d,rgba:parseInt(d.slice(1),16)>>>0}}const S=d.match(/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(,\s*(0|1|\d?\.(\d+))\s*)?\)/);if(S)return p=parseInt(S[1]),o=parseInt(S[2]),f=parseInt(S[3]),g=Math.round(255*(S[5]===void 0?1:parseFloat(S[5]))),t.toColor(p,o,f,g);if(!b||!x)throw new Error("css.toColor: Unsupported css format");if(b.fillStyle=x,b.fillStyle=d,typeof b.fillStyle!="string")throw new Error("css.toColor: Unsupported css format");if(b.fillRect(0,0,1,1),[p,o,f,g]=b.getImageData(0,0,1,1).data,g!==255)throw new Error("css.toColor: Unsupported css format");return{rgba:v.toRgba(p,o,f,g),css:d}}})(e||(r.css=e={})),(function(u){function b(x,d,S){const R=x/255,N=d/255,y=S/255;return .2126*(R<=.03928?R/12.92:Math.pow((R+.055)/1.055,2.4))+.7152*(N<=.03928?N/12.92:Math.pow((N+.055)/1.055,2.4))+.0722*(y<=.03928?y/12.92:Math.pow((y+.055)/1.055,2.4))}u.relativeLuminance=function(x){return b(x>>16&255,x>>8&255,255&x)},u.relativeLuminance2=b})(s||(r.rgb=s={})),(function(u){function b(d,S,R){const N=d>>24&255,y=d>>16&255,E=d>>8&255;let D=S>>24&255,B=S>>16&255,j=S>>8&255,P=l(s.relativeLuminance2(D,B,j),s.relativeLuminance2(N,y,E));for(;P0||B>0||j>0);)D-=Math.max(0,Math.ceil(.1*D)),B-=Math.max(0,Math.ceil(.1*B)),j-=Math.max(0,Math.ceil(.1*j)),P=l(s.relativeLuminance2(D,B,j),s.relativeLuminance2(N,y,E));return(D<<24|B<<16|j<<8|255)>>>0}function x(d,S,R){const N=d>>24&255,y=d>>16&255,E=d>>8&255;let D=S>>24&255,B=S>>16&255,j=S>>8&255,P=l(s.relativeLuminance2(D,B,j),s.relativeLuminance2(N,y,E));for(;P>>0}u.ensureContrastRatio=function(d,S,R){const N=s.relativeLuminance(d>>8),y=s.relativeLuminance(S>>8);if(l(N,y)>8));if(jl(N,s.relativeLuminance(P>>8))?B:P}return B}const E=x(d,S,R),D=l(N,s.relativeLuminance(E>>8));if(Dl(N,s.relativeLuminance(B>>8))?E:B}return E}},u.reduceLuminance=b,u.increaseLuminance=x,u.toChannels=function(d){return[d>>24&255,d>>16&255,d>>8&255,255&d]},u.toColor=function(d,S,R,N){return{css:v.toCss(d,S,R,N),rgba:v.toRgba(d,S,R,N)}}})(t||(r.rgba=t={})),r.toPaddedHex=i,r.contrastRatio=l},8969:(A,r,n)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.CoreTerminal=void 0;const h=n(844),p=n(2585),o=n(4348),f=n(7866),g=n(744),v=n(7302),m=n(6975),e=n(8460),s=n(1753),t=n(1480),i=n(7994),l=n(9282),u=n(5435),b=n(5981),x=n(2660);let d=!1;class S extends h.Disposable{get onScroll(){return this._onScrollApi||(this._onScrollApi=this.register(new e.EventEmitter),this._onScroll.event((N=>{var y;(y=this._onScrollApi)===null||y===void 0||y.fire(N.position)}))),this._onScrollApi.event}get cols(){return this._bufferService.cols}get rows(){return this._bufferService.rows}get buffers(){return this._bufferService.buffers}get options(){return this.optionsService.options}set options(N){for(const y in N)this.optionsService.options[y]=N[y]}constructor(N){super(),this._windowsWrappingHeuristics=this.register(new h.MutableDisposable),this._onBinary=this.register(new e.EventEmitter),this.onBinary=this._onBinary.event,this._onData=this.register(new e.EventEmitter),this.onData=this._onData.event,this._onLineFeed=this.register(new e.EventEmitter),this.onLineFeed=this._onLineFeed.event,this._onResize=this.register(new e.EventEmitter),this.onResize=this._onResize.event,this._onWriteParsed=this.register(new e.EventEmitter),this.onWriteParsed=this._onWriteParsed.event,this._onScroll=this.register(new e.EventEmitter),this._instantiationService=new o.InstantiationService,this.optionsService=this.register(new v.OptionsService(N)),this._instantiationService.setService(p.IOptionsService,this.optionsService),this._bufferService=this.register(this._instantiationService.createInstance(g.BufferService)),this._instantiationService.setService(p.IBufferService,this._bufferService),this._logService=this.register(this._instantiationService.createInstance(f.LogService)),this._instantiationService.setService(p.ILogService,this._logService),this.coreService=this.register(this._instantiationService.createInstance(m.CoreService)),this._instantiationService.setService(p.ICoreService,this.coreService),this.coreMouseService=this.register(this._instantiationService.createInstance(s.CoreMouseService)),this._instantiationService.setService(p.ICoreMouseService,this.coreMouseService),this.unicodeService=this.register(this._instantiationService.createInstance(t.UnicodeService)),this._instantiationService.setService(p.IUnicodeService,this.unicodeService),this._charsetService=this._instantiationService.createInstance(i.CharsetService),this._instantiationService.setService(p.ICharsetService,this._charsetService),this._oscLinkService=this._instantiationService.createInstance(x.OscLinkService),this._instantiationService.setService(p.IOscLinkService,this._oscLinkService),this._inputHandler=this.register(new u.InputHandler(this._bufferService,this._charsetService,this.coreService,this._logService,this.optionsService,this._oscLinkService,this.coreMouseService,this.unicodeService)),this.register((0,e.forwardEvent)(this._inputHandler.onLineFeed,this._onLineFeed)),this.register(this._inputHandler),this.register((0,e.forwardEvent)(this._bufferService.onResize,this._onResize)),this.register((0,e.forwardEvent)(this.coreService.onData,this._onData)),this.register((0,e.forwardEvent)(this.coreService.onBinary,this._onBinary)),this.register(this.coreService.onRequestScrollToBottom((()=>this.scrollToBottom()))),this.register(this.coreService.onUserInput((()=>this._writeBuffer.handleUserInput()))),this.register(this.optionsService.onMultipleOptionChange(["windowsMode","windowsPty"],(()=>this._handleWindowsPtyOptionChange()))),this.register(this._bufferService.onScroll((y=>{this._onScroll.fire({position:this._bufferService.buffer.ydisp,source:0}),this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop,this._bufferService.buffer.scrollBottom)}))),this.register(this._inputHandler.onScroll((y=>{this._onScroll.fire({position:this._bufferService.buffer.ydisp,source:0}),this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop,this._bufferService.buffer.scrollBottom)}))),this._writeBuffer=this.register(new b.WriteBuffer(((y,E)=>this._inputHandler.parse(y,E)))),this.register((0,e.forwardEvent)(this._writeBuffer.onWriteParsed,this._onWriteParsed))}write(N,y){this._writeBuffer.write(N,y)}writeSync(N,y){this._logService.logLevel<=p.LogLevelEnum.WARN&&!d&&(this._logService.warn("writeSync is unreliable and will be removed soon."),d=!0),this._writeBuffer.writeSync(N,y)}resize(N,y){isNaN(N)||isNaN(y)||(N=Math.max(N,g.MINIMUM_COLS),y=Math.max(y,g.MINIMUM_ROWS),this._bufferService.resize(N,y))}scroll(N,y=!1){this._bufferService.scroll(N,y)}scrollLines(N,y,E){this._bufferService.scrollLines(N,y,E)}scrollPages(N){this.scrollLines(N*(this.rows-1))}scrollToTop(){this.scrollLines(-this._bufferService.buffer.ydisp)}scrollToBottom(){this.scrollLines(this._bufferService.buffer.ybase-this._bufferService.buffer.ydisp)}scrollToLine(N){const y=N-this._bufferService.buffer.ydisp;y!==0&&this.scrollLines(y)}registerEscHandler(N,y){return this._inputHandler.registerEscHandler(N,y)}registerDcsHandler(N,y){return this._inputHandler.registerDcsHandler(N,y)}registerCsiHandler(N,y){return this._inputHandler.registerCsiHandler(N,y)}registerOscHandler(N,y){return this._inputHandler.registerOscHandler(N,y)}_setup(){this._handleWindowsPtyOptionChange()}reset(){this._inputHandler.reset(),this._bufferService.reset(),this._charsetService.reset(),this.coreService.reset(),this.coreMouseService.reset()}_handleWindowsPtyOptionChange(){let N=!1;const y=this.optionsService.rawOptions.windowsPty;y&&y.buildNumber!==void 0&&y.buildNumber!==void 0?N=y.backend==="conpty"&&y.buildNumber<21376:this.optionsService.rawOptions.windowsMode&&(N=!0),N?this._enableWindowsWrappingHeuristics():this._windowsWrappingHeuristics.clear()}_enableWindowsWrappingHeuristics(){if(!this._windowsWrappingHeuristics.value){const N=[];N.push(this.onLineFeed(l.updateWindowsModeWrappedState.bind(null,this._bufferService))),N.push(this.registerCsiHandler({final:"H"},(()=>((0,l.updateWindowsModeWrappedState)(this._bufferService),!1)))),this._windowsWrappingHeuristics.value=(0,h.toDisposable)((()=>{for(const y of N)y.dispose()}))}}}r.CoreTerminal=S},8460:(A,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.forwardEvent=r.EventEmitter=void 0,r.EventEmitter=class{constructor(){this._listeners=[],this._disposed=!1}get event(){return this._event||(this._event=n=>(this._listeners.push(n),{dispose:()=>{if(!this._disposed){for(let h=0;hh.fire(p)))}},5435:function(A,r,n){var h=this&&this.__decorate||function(P,C,L,M){var I,z=arguments.length,K=z<3?C:M===null?M=Object.getOwnPropertyDescriptor(C,L):M;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")K=Reflect.decorate(P,C,L,M);else for(var Y=P.length-1;Y>=0;Y--)(I=P[Y])&&(K=(z<3?I(K):z>3?I(C,L,K):I(C,L))||K);return z>3&&K&&Object.defineProperty(C,L,K),K},p=this&&this.__param||function(P,C){return function(L,M){C(L,M,P)}};Object.defineProperty(r,"__esModule",{value:!0}),r.InputHandler=r.WindowsOptionsReportType=void 0;const o=n(2584),f=n(7116),g=n(2015),v=n(844),m=n(482),e=n(8437),s=n(8460),t=n(643),i=n(511),l=n(3734),u=n(2585),b=n(6242),x=n(6351),d=n(5941),S={"(":0,")":1,"*":2,"+":3,"-":1,".":2},R=131072;function N(P,C){if(P>24)return C.setWinLines||!1;switch(P){case 1:return!!C.restoreWin;case 2:return!!C.minimizeWin;case 3:return!!C.setWinPosition;case 4:return!!C.setWinSizePixels;case 5:return!!C.raiseWin;case 6:return!!C.lowerWin;case 7:return!!C.refreshWin;case 8:return!!C.setWinSizeChars;case 9:return!!C.maximizeWin;case 10:return!!C.fullscreenWin;case 11:return!!C.getWinState;case 13:return!!C.getWinPosition;case 14:return!!C.getWinSizePixels;case 15:return!!C.getScreenSizePixels;case 16:return!!C.getCellSizePixels;case 18:return!!C.getWinSizeChars;case 19:return!!C.getScreenSizeChars;case 20:return!!C.getIconTitle;case 21:return!!C.getWinTitle;case 22:return!!C.pushTitle;case 23:return!!C.popTitle;case 24:return!!C.setWinLines}return!1}var y;(function(P){P[P.GET_WIN_SIZE_PIXELS=0]="GET_WIN_SIZE_PIXELS",P[P.GET_CELL_SIZE_PIXELS=1]="GET_CELL_SIZE_PIXELS"})(y||(r.WindowsOptionsReportType=y={}));let E=0;class D extends v.Disposable{getAttrData(){return this._curAttrData}constructor(C,L,M,I,z,K,Y,X,ne=new g.EscapeSequenceParser){super(),this._bufferService=C,this._charsetService=L,this._coreService=M,this._logService=I,this._optionsService=z,this._oscLinkService=K,this._coreMouseService=Y,this._unicodeService=X,this._parser=ne,this._parseBuffer=new Uint32Array(4096),this._stringDecoder=new m.StringToUtf32,this._utf8Decoder=new m.Utf8ToUtf32,this._workCell=new i.CellData,this._windowTitle="",this._iconName="",this._windowTitleStack=[],this._iconNameStack=[],this._curAttrData=e.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=e.DEFAULT_ATTR_DATA.clone(),this._onRequestBell=this.register(new s.EventEmitter),this.onRequestBell=this._onRequestBell.event,this._onRequestRefreshRows=this.register(new s.EventEmitter),this.onRequestRefreshRows=this._onRequestRefreshRows.event,this._onRequestReset=this.register(new s.EventEmitter),this.onRequestReset=this._onRequestReset.event,this._onRequestSendFocus=this.register(new s.EventEmitter),this.onRequestSendFocus=this._onRequestSendFocus.event,this._onRequestSyncScrollBar=this.register(new s.EventEmitter),this.onRequestSyncScrollBar=this._onRequestSyncScrollBar.event,this._onRequestWindowsOptionsReport=this.register(new s.EventEmitter),this.onRequestWindowsOptionsReport=this._onRequestWindowsOptionsReport.event,this._onA11yChar=this.register(new s.EventEmitter),this.onA11yChar=this._onA11yChar.event,this._onA11yTab=this.register(new s.EventEmitter),this.onA11yTab=this._onA11yTab.event,this._onCursorMove=this.register(new s.EventEmitter),this.onCursorMove=this._onCursorMove.event,this._onLineFeed=this.register(new s.EventEmitter),this.onLineFeed=this._onLineFeed.event,this._onScroll=this.register(new s.EventEmitter),this.onScroll=this._onScroll.event,this._onTitleChange=this.register(new s.EventEmitter),this.onTitleChange=this._onTitleChange.event,this._onColor=this.register(new s.EventEmitter),this.onColor=this._onColor.event,this._parseStack={paused:!1,cursorStartX:0,cursorStartY:0,decodedLength:0,position:0},this._specialColors=[256,257,258],this.register(this._parser),this._dirtyRowTracker=new B(this._bufferService),this._activeBuffer=this._bufferService.buffer,this.register(this._bufferService.buffers.onBufferActivate((w=>this._activeBuffer=w.activeBuffer))),this._parser.setCsiHandlerFallback(((w,F)=>{this._logService.debug("Unknown CSI code: ",{identifier:this._parser.identToString(w),params:F.toArray()})})),this._parser.setEscHandlerFallback((w=>{this._logService.debug("Unknown ESC code: ",{identifier:this._parser.identToString(w)})})),this._parser.setExecuteHandlerFallback((w=>{this._logService.debug("Unknown EXECUTE code: ",{code:w})})),this._parser.setOscHandlerFallback(((w,F,U)=>{this._logService.debug("Unknown OSC code: ",{identifier:w,action:F,data:U})})),this._parser.setDcsHandlerFallback(((w,F,U)=>{F==="HOOK"&&(U=U.toArray()),this._logService.debug("Unknown DCS code: ",{identifier:this._parser.identToString(w),action:F,payload:U})})),this._parser.setPrintHandler(((w,F,U)=>this.print(w,F,U))),this._parser.registerCsiHandler({final:"@"},(w=>this.insertChars(w))),this._parser.registerCsiHandler({intermediates:" ",final:"@"},(w=>this.scrollLeft(w))),this._parser.registerCsiHandler({final:"A"},(w=>this.cursorUp(w))),this._parser.registerCsiHandler({intermediates:" ",final:"A"},(w=>this.scrollRight(w))),this._parser.registerCsiHandler({final:"B"},(w=>this.cursorDown(w))),this._parser.registerCsiHandler({final:"C"},(w=>this.cursorForward(w))),this._parser.registerCsiHandler({final:"D"},(w=>this.cursorBackward(w))),this._parser.registerCsiHandler({final:"E"},(w=>this.cursorNextLine(w))),this._parser.registerCsiHandler({final:"F"},(w=>this.cursorPrecedingLine(w))),this._parser.registerCsiHandler({final:"G"},(w=>this.cursorCharAbsolute(w))),this._parser.registerCsiHandler({final:"H"},(w=>this.cursorPosition(w))),this._parser.registerCsiHandler({final:"I"},(w=>this.cursorForwardTab(w))),this._parser.registerCsiHandler({final:"J"},(w=>this.eraseInDisplay(w,!1))),this._parser.registerCsiHandler({prefix:"?",final:"J"},(w=>this.eraseInDisplay(w,!0))),this._parser.registerCsiHandler({final:"K"},(w=>this.eraseInLine(w,!1))),this._parser.registerCsiHandler({prefix:"?",final:"K"},(w=>this.eraseInLine(w,!0))),this._parser.registerCsiHandler({final:"L"},(w=>this.insertLines(w))),this._parser.registerCsiHandler({final:"M"},(w=>this.deleteLines(w))),this._parser.registerCsiHandler({final:"P"},(w=>this.deleteChars(w))),this._parser.registerCsiHandler({final:"S"},(w=>this.scrollUp(w))),this._parser.registerCsiHandler({final:"T"},(w=>this.scrollDown(w))),this._parser.registerCsiHandler({final:"X"},(w=>this.eraseChars(w))),this._parser.registerCsiHandler({final:"Z"},(w=>this.cursorBackwardTab(w))),this._parser.registerCsiHandler({final:"`"},(w=>this.charPosAbsolute(w))),this._parser.registerCsiHandler({final:"a"},(w=>this.hPositionRelative(w))),this._parser.registerCsiHandler({final:"b"},(w=>this.repeatPrecedingCharacter(w))),this._parser.registerCsiHandler({final:"c"},(w=>this.sendDeviceAttributesPrimary(w))),this._parser.registerCsiHandler({prefix:">",final:"c"},(w=>this.sendDeviceAttributesSecondary(w))),this._parser.registerCsiHandler({final:"d"},(w=>this.linePosAbsolute(w))),this._parser.registerCsiHandler({final:"e"},(w=>this.vPositionRelative(w))),this._parser.registerCsiHandler({final:"f"},(w=>this.hVPosition(w))),this._parser.registerCsiHandler({final:"g"},(w=>this.tabClear(w))),this._parser.registerCsiHandler({final:"h"},(w=>this.setMode(w))),this._parser.registerCsiHandler({prefix:"?",final:"h"},(w=>this.setModePrivate(w))),this._parser.registerCsiHandler({final:"l"},(w=>this.resetMode(w))),this._parser.registerCsiHandler({prefix:"?",final:"l"},(w=>this.resetModePrivate(w))),this._parser.registerCsiHandler({final:"m"},(w=>this.charAttributes(w))),this._parser.registerCsiHandler({final:"n"},(w=>this.deviceStatus(w))),this._parser.registerCsiHandler({prefix:"?",final:"n"},(w=>this.deviceStatusPrivate(w))),this._parser.registerCsiHandler({intermediates:"!",final:"p"},(w=>this.softReset(w))),this._parser.registerCsiHandler({intermediates:" ",final:"q"},(w=>this.setCursorStyle(w))),this._parser.registerCsiHandler({final:"r"},(w=>this.setScrollRegion(w))),this._parser.registerCsiHandler({final:"s"},(w=>this.saveCursor(w))),this._parser.registerCsiHandler({final:"t"},(w=>this.windowOptions(w))),this._parser.registerCsiHandler({final:"u"},(w=>this.restoreCursor(w))),this._parser.registerCsiHandler({intermediates:"'",final:"}"},(w=>this.insertColumns(w))),this._parser.registerCsiHandler({intermediates:"'",final:"~"},(w=>this.deleteColumns(w))),this._parser.registerCsiHandler({intermediates:'"',final:"q"},(w=>this.selectProtected(w))),this._parser.registerCsiHandler({intermediates:"$",final:"p"},(w=>this.requestMode(w,!0))),this._parser.registerCsiHandler({prefix:"?",intermediates:"$",final:"p"},(w=>this.requestMode(w,!1))),this._parser.setExecuteHandler(o.C0.BEL,(()=>this.bell())),this._parser.setExecuteHandler(o.C0.LF,(()=>this.lineFeed())),this._parser.setExecuteHandler(o.C0.VT,(()=>this.lineFeed())),this._parser.setExecuteHandler(o.C0.FF,(()=>this.lineFeed())),this._parser.setExecuteHandler(o.C0.CR,(()=>this.carriageReturn())),this._parser.setExecuteHandler(o.C0.BS,(()=>this.backspace())),this._parser.setExecuteHandler(o.C0.HT,(()=>this.tab())),this._parser.setExecuteHandler(o.C0.SO,(()=>this.shiftOut())),this._parser.setExecuteHandler(o.C0.SI,(()=>this.shiftIn())),this._parser.setExecuteHandler(o.C1.IND,(()=>this.index())),this._parser.setExecuteHandler(o.C1.NEL,(()=>this.nextLine())),this._parser.setExecuteHandler(o.C1.HTS,(()=>this.tabSet())),this._parser.registerOscHandler(0,new b.OscHandler((w=>(this.setTitle(w),this.setIconName(w),!0)))),this._parser.registerOscHandler(1,new b.OscHandler((w=>this.setIconName(w)))),this._parser.registerOscHandler(2,new b.OscHandler((w=>this.setTitle(w)))),this._parser.registerOscHandler(4,new b.OscHandler((w=>this.setOrReportIndexedColor(w)))),this._parser.registerOscHandler(8,new b.OscHandler((w=>this.setHyperlink(w)))),this._parser.registerOscHandler(10,new b.OscHandler((w=>this.setOrReportFgColor(w)))),this._parser.registerOscHandler(11,new b.OscHandler((w=>this.setOrReportBgColor(w)))),this._parser.registerOscHandler(12,new b.OscHandler((w=>this.setOrReportCursorColor(w)))),this._parser.registerOscHandler(104,new b.OscHandler((w=>this.restoreIndexedColor(w)))),this._parser.registerOscHandler(110,new b.OscHandler((w=>this.restoreFgColor(w)))),this._parser.registerOscHandler(111,new b.OscHandler((w=>this.restoreBgColor(w)))),this._parser.registerOscHandler(112,new b.OscHandler((w=>this.restoreCursorColor(w)))),this._parser.registerEscHandler({final:"7"},(()=>this.saveCursor())),this._parser.registerEscHandler({final:"8"},(()=>this.restoreCursor())),this._parser.registerEscHandler({final:"D"},(()=>this.index())),this._parser.registerEscHandler({final:"E"},(()=>this.nextLine())),this._parser.registerEscHandler({final:"H"},(()=>this.tabSet())),this._parser.registerEscHandler({final:"M"},(()=>this.reverseIndex())),this._parser.registerEscHandler({final:"="},(()=>this.keypadApplicationMode())),this._parser.registerEscHandler({final:">"},(()=>this.keypadNumericMode())),this._parser.registerEscHandler({final:"c"},(()=>this.fullReset())),this._parser.registerEscHandler({final:"n"},(()=>this.setgLevel(2))),this._parser.registerEscHandler({final:"o"},(()=>this.setgLevel(3))),this._parser.registerEscHandler({final:"|"},(()=>this.setgLevel(3))),this._parser.registerEscHandler({final:"}"},(()=>this.setgLevel(2))),this._parser.registerEscHandler({final:"~"},(()=>this.setgLevel(1))),this._parser.registerEscHandler({intermediates:"%",final:"@"},(()=>this.selectDefaultCharset())),this._parser.registerEscHandler({intermediates:"%",final:"G"},(()=>this.selectDefaultCharset()));for(const w in f.CHARSETS)this._parser.registerEscHandler({intermediates:"(",final:w},(()=>this.selectCharset("("+w))),this._parser.registerEscHandler({intermediates:")",final:w},(()=>this.selectCharset(")"+w))),this._parser.registerEscHandler({intermediates:"*",final:w},(()=>this.selectCharset("*"+w))),this._parser.registerEscHandler({intermediates:"+",final:w},(()=>this.selectCharset("+"+w))),this._parser.registerEscHandler({intermediates:"-",final:w},(()=>this.selectCharset("-"+w))),this._parser.registerEscHandler({intermediates:".",final:w},(()=>this.selectCharset("."+w))),this._parser.registerEscHandler({intermediates:"/",final:w},(()=>this.selectCharset("/"+w)));this._parser.registerEscHandler({intermediates:"#",final:"8"},(()=>this.screenAlignmentPattern())),this._parser.setErrorHandler((w=>(this._logService.error("Parsing error: ",w),w))),this._parser.registerDcsHandler({intermediates:"$",final:"q"},new x.DcsHandler(((w,F)=>this.requestStatusString(w,F))))}_preserveStack(C,L,M,I){this._parseStack.paused=!0,this._parseStack.cursorStartX=C,this._parseStack.cursorStartY=L,this._parseStack.decodedLength=M,this._parseStack.position=I}_logSlowResolvingAsync(C){this._logService.logLevel<=u.LogLevelEnum.WARN&&Promise.race([C,new Promise(((L,M)=>setTimeout((()=>M("#SLOW_TIMEOUT")),5e3)))]).catch((L=>{if(L!=="#SLOW_TIMEOUT")throw L;console.warn("async parser handler taking longer than 5000 ms")}))}_getCurrentLinkId(){return this._curAttrData.extended.urlId}parse(C,L){let M,I=this._activeBuffer.x,z=this._activeBuffer.y,K=0;const Y=this._parseStack.paused;if(Y){if(M=this._parser.parse(this._parseBuffer,this._parseStack.decodedLength,L))return this._logSlowResolvingAsync(M),M;I=this._parseStack.cursorStartX,z=this._parseStack.cursorStartY,this._parseStack.paused=!1,C.length>R&&(K=this._parseStack.position+R)}if(this._logService.logLevel<=u.LogLevelEnum.DEBUG&&this._logService.debug("parsing data"+(typeof C=="string"?` "${C}"`:` "${Array.prototype.map.call(C,(X=>String.fromCharCode(X))).join("")}"`),typeof C=="string"?C.split("").map((X=>X.charCodeAt(0))):C),this._parseBuffer.lengthR)for(let X=K;X0&&U.getWidth(this._activeBuffer.x-1)===2&&U.setCellFromCodePoint(this._activeBuffer.x-1,0,1,F.fg,F.bg,F.extended);for(let q=L;q=X){if(ne){for(;this._activeBuffer.x=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!0),U=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y)}else if(this._activeBuffer.x=X-1,z===2)continue}if(w&&(U.insertCells(this._activeBuffer.x,z,this._activeBuffer.getNullCell(F),F),U.getWidth(X-1)===2&&U.setCellFromCodePoint(X-1,t.NULL_CELL_CODE,t.NULL_CELL_WIDTH,F.fg,F.bg,F.extended)),U.setCellFromCodePoint(this._activeBuffer.x++,I,z,F.fg,F.bg,F.extended),z>0)for(;--z;)U.setCellFromCodePoint(this._activeBuffer.x++,0,0,F.fg,F.bg,F.extended)}else U.getWidth(this._activeBuffer.x-1)?U.addCodepointToCell(this._activeBuffer.x-1,I):U.addCodepointToCell(this._activeBuffer.x-2,I)}M-L>0&&(U.loadCell(this._activeBuffer.x-1,this._workCell),this._workCell.getWidth()===2||this._workCell.getCode()>65535?this._parser.precedingCodepoint=0:this._workCell.isCombined()?this._parser.precedingCodepoint=this._workCell.getChars().charCodeAt(0):this._parser.precedingCodepoint=this._workCell.content),this._activeBuffer.x0&&U.getWidth(this._activeBuffer.x)===0&&!U.hasContent(this._activeBuffer.x)&&U.setCellFromCodePoint(this._activeBuffer.x,0,1,F.fg,F.bg,F.extended),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}registerCsiHandler(C,L){return C.final!=="t"||C.prefix||C.intermediates?this._parser.registerCsiHandler(C,L):this._parser.registerCsiHandler(C,(M=>!N(M.params[0],this._optionsService.rawOptions.windowOptions)||L(M)))}registerDcsHandler(C,L){return this._parser.registerDcsHandler(C,new x.DcsHandler(L))}registerEscHandler(C,L){return this._parser.registerEscHandler(C,L)}registerOscHandler(C,L){return this._parser.registerOscHandler(C,new b.OscHandler(L))}bell(){return this._onRequestBell.fire(),!0}lineFeed(){return this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._optionsService.rawOptions.convertEol&&(this._activeBuffer.x=0),this._activeBuffer.y++,this._activeBuffer.y===this._activeBuffer.scrollBottom+1?(this._activeBuffer.y--,this._bufferService.scroll(this._eraseAttrData())):this._activeBuffer.y>=this._bufferService.rows?this._activeBuffer.y=this._bufferService.rows-1:this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.x>=this._bufferService.cols&&this._activeBuffer.x--,this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._onLineFeed.fire(),!0}carriageReturn(){return this._activeBuffer.x=0,!0}backspace(){var C;if(!this._coreService.decPrivateModes.reverseWraparound)return this._restrictCursor(),this._activeBuffer.x>0&&this._activeBuffer.x--,!0;if(this._restrictCursor(this._bufferService.cols),this._activeBuffer.x>0)this._activeBuffer.x--;else if(this._activeBuffer.x===0&&this._activeBuffer.y>this._activeBuffer.scrollTop&&this._activeBuffer.y<=this._activeBuffer.scrollBottom&&(!((C=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y))===null||C===void 0)&&C.isWrapped)){this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y).isWrapped=!1,this._activeBuffer.y--,this._activeBuffer.x=this._bufferService.cols-1;const L=this._activeBuffer.lines.get(this._activeBuffer.ybase+this._activeBuffer.y);L.hasWidth(this._activeBuffer.x)&&!L.hasContent(this._activeBuffer.x)&&this._activeBuffer.x--}return this._restrictCursor(),!0}tab(){if(this._activeBuffer.x>=this._bufferService.cols)return!0;const C=this._activeBuffer.x;return this._activeBuffer.x=this._activeBuffer.nextStop(),this._optionsService.rawOptions.screenReaderMode&&this._onA11yTab.fire(this._activeBuffer.x-C),!0}shiftOut(){return this._charsetService.setgLevel(1),!0}shiftIn(){return this._charsetService.setgLevel(0),!0}_restrictCursor(C=this._bufferService.cols-1){this._activeBuffer.x=Math.min(C,Math.max(0,this._activeBuffer.x)),this._activeBuffer.y=this._coreService.decPrivateModes.origin?Math.min(this._activeBuffer.scrollBottom,Math.max(this._activeBuffer.scrollTop,this._activeBuffer.y)):Math.min(this._bufferService.rows-1,Math.max(0,this._activeBuffer.y)),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_setCursor(C,L){this._dirtyRowTracker.markDirty(this._activeBuffer.y),this._coreService.decPrivateModes.origin?(this._activeBuffer.x=C,this._activeBuffer.y=this._activeBuffer.scrollTop+L):(this._activeBuffer.x=C,this._activeBuffer.y=L),this._restrictCursor(),this._dirtyRowTracker.markDirty(this._activeBuffer.y)}_moveCursor(C,L){this._restrictCursor(),this._setCursor(this._activeBuffer.x+C,this._activeBuffer.y+L)}cursorUp(C){const L=this._activeBuffer.y-this._activeBuffer.scrollTop;return L>=0?this._moveCursor(0,-Math.min(L,C.params[0]||1)):this._moveCursor(0,-(C.params[0]||1)),!0}cursorDown(C){const L=this._activeBuffer.scrollBottom-this._activeBuffer.y;return L>=0?this._moveCursor(0,Math.min(L,C.params[0]||1)):this._moveCursor(0,C.params[0]||1),!0}cursorForward(C){return this._moveCursor(C.params[0]||1,0),!0}cursorBackward(C){return this._moveCursor(-(C.params[0]||1),0),!0}cursorNextLine(C){return this.cursorDown(C),this._activeBuffer.x=0,!0}cursorPrecedingLine(C){return this.cursorUp(C),this._activeBuffer.x=0,!0}cursorCharAbsolute(C){return this._setCursor((C.params[0]||1)-1,this._activeBuffer.y),!0}cursorPosition(C){return this._setCursor(C.length>=2?(C.params[1]||1)-1:0,(C.params[0]||1)-1),!0}charPosAbsolute(C){return this._setCursor((C.params[0]||1)-1,this._activeBuffer.y),!0}hPositionRelative(C){return this._moveCursor(C.params[0]||1,0),!0}linePosAbsolute(C){return this._setCursor(this._activeBuffer.x,(C.params[0]||1)-1),!0}vPositionRelative(C){return this._moveCursor(0,C.params[0]||1),!0}hVPosition(C){return this.cursorPosition(C),!0}tabClear(C){const L=C.params[0];return L===0?delete this._activeBuffer.tabs[this._activeBuffer.x]:L===3&&(this._activeBuffer.tabs={}),!0}cursorForwardTab(C){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let L=C.params[0]||1;for(;L--;)this._activeBuffer.x=this._activeBuffer.nextStop();return!0}cursorBackwardTab(C){if(this._activeBuffer.x>=this._bufferService.cols)return!0;let L=C.params[0]||1;for(;L--;)this._activeBuffer.x=this._activeBuffer.prevStop();return!0}selectProtected(C){const L=C.params[0];return L===1&&(this._curAttrData.bg|=536870912),L!==2&&L!==0||(this._curAttrData.bg&=-536870913),!0}_eraseInBufferLine(C,L,M,I=!1,z=!1){const K=this._activeBuffer.lines.get(this._activeBuffer.ybase+C);K.replaceCells(L,M,this._activeBuffer.getNullCell(this._eraseAttrData()),this._eraseAttrData(),z),I&&(K.isWrapped=!1)}_resetBufferLine(C,L=!1){const M=this._activeBuffer.lines.get(this._activeBuffer.ybase+C);M&&(M.fill(this._activeBuffer.getNullCell(this._eraseAttrData()),L),this._bufferService.buffer.clearMarkers(this._activeBuffer.ybase+C),M.isWrapped=!1)}eraseInDisplay(C,L=!1){let M;switch(this._restrictCursor(this._bufferService.cols),C.params[0]){case 0:for(M=this._activeBuffer.y,this._dirtyRowTracker.markDirty(M),this._eraseInBufferLine(M++,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,L);M=this._bufferService.cols&&(this._activeBuffer.lines.get(M+1).isWrapped=!1);M--;)this._resetBufferLine(M,L);this._dirtyRowTracker.markDirty(0);break;case 2:for(M=this._bufferService.rows,this._dirtyRowTracker.markDirty(M-1);M--;)this._resetBufferLine(M,L);this._dirtyRowTracker.markDirty(0);break;case 3:const I=this._activeBuffer.lines.length-this._bufferService.rows;I>0&&(this._activeBuffer.lines.trimStart(I),this._activeBuffer.ybase=Math.max(this._activeBuffer.ybase-I,0),this._activeBuffer.ydisp=Math.max(this._activeBuffer.ydisp-I,0),this._onScroll.fire(0))}return!0}eraseInLine(C,L=!1){switch(this._restrictCursor(this._bufferService.cols),C.params[0]){case 0:this._eraseInBufferLine(this._activeBuffer.y,this._activeBuffer.x,this._bufferService.cols,this._activeBuffer.x===0,L);break;case 1:this._eraseInBufferLine(this._activeBuffer.y,0,this._activeBuffer.x+1,!1,L);break;case 2:this._eraseInBufferLine(this._activeBuffer.y,0,this._bufferService.cols,!0,L)}return this._dirtyRowTracker.markDirty(this._activeBuffer.y),!0}insertLines(C){this._restrictCursor();let L=C.params[0]||1;if(this._activeBuffer.y>this._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.ythis._activeBuffer.scrollBottom||this._activeBuffer.y0||(this._is("xterm")||this._is("rxvt-unicode")||this._is("screen")?this._coreService.triggerDataEvent(o.C0.ESC+"[?1;2c"):this._is("linux")&&this._coreService.triggerDataEvent(o.C0.ESC+"[?6c")),!0}sendDeviceAttributesSecondary(C){return C.params[0]>0||(this._is("xterm")?this._coreService.triggerDataEvent(o.C0.ESC+"[>0;276;0c"):this._is("rxvt-unicode")?this._coreService.triggerDataEvent(o.C0.ESC+"[>85;95;0c"):this._is("linux")?this._coreService.triggerDataEvent(C.params[0]+"c"):this._is("screen")&&this._coreService.triggerDataEvent(o.C0.ESC+"[>83;40003;0c")),!0}_is(C){return(this._optionsService.rawOptions.termName+"").indexOf(C)===0}setMode(C){for(let L=0;Loe?1:2,q=C.params[0];return ee=q,J=L?q===2?4:q===4?U(K.modes.insertMode):q===12?3:q===20?U(F.convertEol):0:q===1?U(M.applicationCursorKeys):q===3?F.windowOptions.setWinLines?X===80?2:X===132?1:0:0:q===6?U(M.origin):q===7?U(M.wraparound):q===8?3:q===9?U(I==="X10"):q===12?U(F.cursorBlink):q===25?U(!K.isCursorHidden):q===45?U(M.reverseWraparound):q===66?U(M.applicationKeypad):q===67?4:q===1e3?U(I==="VT200"):q===1002?U(I==="DRAG"):q===1003?U(I==="ANY"):q===1004?U(M.sendFocus):q===1005?4:q===1006?U(z==="SGR"):q===1015?4:q===1016?U(z==="SGR_PIXELS"):q===1048?1:q===47||q===1047||q===1049?U(ne===w):q===2004?U(M.bracketedPasteMode):0,K.triggerDataEvent(`${o.C0.ESC}[${L?"":"?"}${ee};${J}$y`),!0;var ee,J}_updateAttrColor(C,L,M,I,z){return L===2?(C|=50331648,C&=-16777216,C|=l.AttributeData.fromColorRGB([M,I,z])):L===5&&(C&=-50331904,C|=33554432|255&M),C}_extractColor(C,L,M){const I=[0,0,-1,0,0,0];let z=0,K=0;do{if(I[K+z]=C.params[L+K],C.hasSubParams(L+K)){const Y=C.getSubParams(L+K);let X=0;do I[1]===5&&(z=1),I[K+X+1+z]=Y[X];while(++X=2||I[1]===2&&K+z>=5)break;I[1]&&(z=1)}while(++K+L5)&&(C=1),L.extended.underlineStyle=C,L.fg|=268435456,C===0&&(L.fg&=-268435457),L.updateExtended()}_processSGR0(C){C.fg=e.DEFAULT_ATTR_DATA.fg,C.bg=e.DEFAULT_ATTR_DATA.bg,C.extended=C.extended.clone(),C.extended.underlineStyle=0,C.extended.underlineColor&=-67108864,C.updateExtended()}charAttributes(C){if(C.length===1&&C.params[0]===0)return this._processSGR0(this._curAttrData),!0;const L=C.length;let M;const I=this._curAttrData;for(let z=0;z=30&&M<=37?(I.fg&=-50331904,I.fg|=16777216|M-30):M>=40&&M<=47?(I.bg&=-50331904,I.bg|=16777216|M-40):M>=90&&M<=97?(I.fg&=-50331904,I.fg|=16777224|M-90):M>=100&&M<=107?(I.bg&=-50331904,I.bg|=16777224|M-100):M===0?this._processSGR0(I):M===1?I.fg|=134217728:M===3?I.bg|=67108864:M===4?(I.fg|=268435456,this._processUnderline(C.hasSubParams(z)?C.getSubParams(z)[0]:1,I)):M===5?I.fg|=536870912:M===7?I.fg|=67108864:M===8?I.fg|=1073741824:M===9?I.fg|=2147483648:M===2?I.bg|=134217728:M===21?this._processUnderline(2,I):M===22?(I.fg&=-134217729,I.bg&=-134217729):M===23?I.bg&=-67108865:M===24?(I.fg&=-268435457,this._processUnderline(0,I)):M===25?I.fg&=-536870913:M===27?I.fg&=-67108865:M===28?I.fg&=-1073741825:M===29?I.fg&=2147483647:M===39?(I.fg&=-67108864,I.fg|=16777215&e.DEFAULT_ATTR_DATA.fg):M===49?(I.bg&=-67108864,I.bg|=16777215&e.DEFAULT_ATTR_DATA.bg):M===38||M===48||M===58?z+=this._extractColor(C,z,I):M===53?I.bg|=1073741824:M===55?I.bg&=-1073741825:M===59?(I.extended=I.extended.clone(),I.extended.underlineColor=-1,I.updateExtended()):M===100?(I.fg&=-67108864,I.fg|=16777215&e.DEFAULT_ATTR_DATA.fg,I.bg&=-67108864,I.bg|=16777215&e.DEFAULT_ATTR_DATA.bg):this._logService.debug("Unknown SGR attribute: %d.",M);return!0}deviceStatus(C){switch(C.params[0]){case 5:this._coreService.triggerDataEvent(`${o.C0.ESC}[0n`);break;case 6:const L=this._activeBuffer.y+1,M=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${o.C0.ESC}[${L};${M}R`)}return!0}deviceStatusPrivate(C){if(C.params[0]===6){const L=this._activeBuffer.y+1,M=this._activeBuffer.x+1;this._coreService.triggerDataEvent(`${o.C0.ESC}[?${L};${M}R`)}return!0}softReset(C){return this._coreService.isCursorHidden=!1,this._onRequestSyncScrollBar.fire(),this._activeBuffer.scrollTop=0,this._activeBuffer.scrollBottom=this._bufferService.rows-1,this._curAttrData=e.DEFAULT_ATTR_DATA.clone(),this._coreService.reset(),this._charsetService.reset(),this._activeBuffer.savedX=0,this._activeBuffer.savedY=this._activeBuffer.ybase,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,this._coreService.decPrivateModes.origin=!1,!0}setCursorStyle(C){const L=C.params[0]||1;switch(L){case 1:case 2:this._optionsService.options.cursorStyle="block";break;case 3:case 4:this._optionsService.options.cursorStyle="underline";break;case 5:case 6:this._optionsService.options.cursorStyle="bar"}const M=L%2==1;return this._optionsService.options.cursorBlink=M,!0}setScrollRegion(C){const L=C.params[0]||1;let M;return(C.length<2||(M=C.params[1])>this._bufferService.rows||M===0)&&(M=this._bufferService.rows),M>L&&(this._activeBuffer.scrollTop=L-1,this._activeBuffer.scrollBottom=M-1,this._setCursor(0,0)),!0}windowOptions(C){if(!N(C.params[0],this._optionsService.rawOptions.windowOptions))return!0;const L=C.length>1?C.params[1]:0;switch(C.params[0]){case 14:L!==2&&this._onRequestWindowsOptionsReport.fire(y.GET_WIN_SIZE_PIXELS);break;case 16:this._onRequestWindowsOptionsReport.fire(y.GET_CELL_SIZE_PIXELS);break;case 18:this._bufferService&&this._coreService.triggerDataEvent(`${o.C0.ESC}[8;${this._bufferService.rows};${this._bufferService.cols}t`);break;case 22:L!==0&&L!==2||(this._windowTitleStack.push(this._windowTitle),this._windowTitleStack.length>10&&this._windowTitleStack.shift()),L!==0&&L!==1||(this._iconNameStack.push(this._iconName),this._iconNameStack.length>10&&this._iconNameStack.shift());break;case 23:L!==0&&L!==2||this._windowTitleStack.length&&this.setTitle(this._windowTitleStack.pop()),L!==0&&L!==1||this._iconNameStack.length&&this.setIconName(this._iconNameStack.pop())}return!0}saveCursor(C){return this._activeBuffer.savedX=this._activeBuffer.x,this._activeBuffer.savedY=this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.savedCurAttrData.fg=this._curAttrData.fg,this._activeBuffer.savedCurAttrData.bg=this._curAttrData.bg,this._activeBuffer.savedCharset=this._charsetService.charset,!0}restoreCursor(C){return this._activeBuffer.x=this._activeBuffer.savedX||0,this._activeBuffer.y=Math.max(this._activeBuffer.savedY-this._activeBuffer.ybase,0),this._curAttrData.fg=this._activeBuffer.savedCurAttrData.fg,this._curAttrData.bg=this._activeBuffer.savedCurAttrData.bg,this._charsetService.charset=this._savedCharset,this._activeBuffer.savedCharset&&(this._charsetService.charset=this._activeBuffer.savedCharset),this._restrictCursor(),!0}setTitle(C){return this._windowTitle=C,this._onTitleChange.fire(C),!0}setIconName(C){return this._iconName=C,!0}setOrReportIndexedColor(C){const L=[],M=C.split(";");for(;M.length>1;){const I=M.shift(),z=M.shift();if(/^\d+$/.exec(I)){const K=parseInt(I);if(j(K))if(z==="?")L.push({type:0,index:K});else{const Y=(0,d.parseColor)(z);Y&&L.push({type:1,index:K,color:Y})}}}return L.length&&this._onColor.fire(L),!0}setHyperlink(C){const L=C.split(";");return!(L.length<2)&&(L[1]?this._createHyperlink(L[0],L[1]):!L[0]&&this._finishHyperlink())}_createHyperlink(C,L){this._getCurrentLinkId()&&this._finishHyperlink();const M=C.split(":");let I;const z=M.findIndex((K=>K.startsWith("id=")));return z!==-1&&(I=M[z].slice(3)||void 0),this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=this._oscLinkService.registerLink({id:I,uri:L}),this._curAttrData.updateExtended(),!0}_finishHyperlink(){return this._curAttrData.extended=this._curAttrData.extended.clone(),this._curAttrData.extended.urlId=0,this._curAttrData.updateExtended(),!0}_setOrReportSpecialColor(C,L){const M=C.split(";");for(let I=0;I=this._specialColors.length);++I,++L)if(M[I]==="?")this._onColor.fire([{type:0,index:this._specialColors[L]}]);else{const z=(0,d.parseColor)(M[I]);z&&this._onColor.fire([{type:1,index:this._specialColors[L],color:z}])}return!0}setOrReportFgColor(C){return this._setOrReportSpecialColor(C,0)}setOrReportBgColor(C){return this._setOrReportSpecialColor(C,1)}setOrReportCursorColor(C){return this._setOrReportSpecialColor(C,2)}restoreIndexedColor(C){if(!C)return this._onColor.fire([{type:2}]),!0;const L=[],M=C.split(";");for(let I=0;I=this._bufferService.rows&&(this._activeBuffer.y=this._bufferService.rows-1),this._restrictCursor(),!0}tabSet(){return this._activeBuffer.tabs[this._activeBuffer.x]=!0,!0}reverseIndex(){if(this._restrictCursor(),this._activeBuffer.y===this._activeBuffer.scrollTop){const C=this._activeBuffer.scrollBottom-this._activeBuffer.scrollTop;this._activeBuffer.lines.shiftElements(this._activeBuffer.ybase+this._activeBuffer.y,C,1),this._activeBuffer.lines.set(this._activeBuffer.ybase+this._activeBuffer.y,this._activeBuffer.getBlankLine(this._eraseAttrData())),this._dirtyRowTracker.markRangeDirty(this._activeBuffer.scrollTop,this._activeBuffer.scrollBottom)}else this._activeBuffer.y--,this._restrictCursor();return!0}fullReset(){return this._parser.reset(),this._onRequestReset.fire(),!0}reset(){this._curAttrData=e.DEFAULT_ATTR_DATA.clone(),this._eraseAttrDataInternal=e.DEFAULT_ATTR_DATA.clone()}_eraseAttrData(){return this._eraseAttrDataInternal.bg&=-67108864,this._eraseAttrDataInternal.bg|=67108863&this._curAttrData.bg,this._eraseAttrDataInternal}setgLevel(C){return this._charsetService.setgLevel(C),!0}screenAlignmentPattern(){const C=new i.CellData;C.content=4194373,C.fg=this._curAttrData.fg,C.bg=this._curAttrData.bg,this._setCursor(0,0);for(let L=0;L(this._coreService.triggerDataEvent(`${o.C0.ESC}${z}${o.C0.ESC}\\`),!0))(C==='"q'?`P1$r${this._curAttrData.isProtected()?1:0}"q`:C==='"p'?'P1$r61;1"p':C==="r"?`P1$r${M.scrollTop+1};${M.scrollBottom+1}r`:C==="m"?"P1$r0m":C===" q"?`P1$r${{block:2,underline:4,bar:6}[I.cursorStyle]-(I.cursorBlink?1:0)} q`:"P0$r")}markRangeDirty(C,L){this._dirtyRowTracker.markRangeDirty(C,L)}}r.InputHandler=D;let B=class{constructor(P){this._bufferService=P,this.clearRange()}clearRange(){this.start=this._bufferService.buffer.y,this.end=this._bufferService.buffer.y}markDirty(P){Pthis.end&&(this.end=P)}markRangeDirty(P,C){P>C&&(E=P,P=C,C=E),Pthis.end&&(this.end=C)}markAllDirty(){this.markRangeDirty(0,this._bufferService.rows-1)}};function j(P){return 0<=P&&P<256}B=h([p(0,u.IBufferService)],B)},844:(A,r)=>{function n(h){for(const p of h)p.dispose();h.length=0}Object.defineProperty(r,"__esModule",{value:!0}),r.getDisposeArrayDisposable=r.disposeArray=r.toDisposable=r.MutableDisposable=r.Disposable=void 0,r.Disposable=class{constructor(){this._disposables=[],this._isDisposed=!1}dispose(){this._isDisposed=!0;for(const h of this._disposables)h.dispose();this._disposables.length=0}register(h){return this._disposables.push(h),h}unregister(h){const p=this._disposables.indexOf(h);p!==-1&&this._disposables.splice(p,1)}},r.MutableDisposable=class{constructor(){this._isDisposed=!1}get value(){return this._isDisposed?void 0:this._value}set value(h){var p;this._isDisposed||h===this._value||((p=this._value)===null||p===void 0||p.dispose(),this._value=h)}clear(){this.value=void 0}dispose(){var h;this._isDisposed=!0,(h=this._value)===null||h===void 0||h.dispose(),this._value=void 0}},r.toDisposable=function(h){return{dispose:h}},r.disposeArray=n,r.getDisposeArrayDisposable=function(h){return{dispose:()=>n(h)}}},1505:(A,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.FourKeyMap=r.TwoKeyMap=void 0;class n{constructor(){this._data={}}set(p,o,f){this._data[p]||(this._data[p]={}),this._data[p][o]=f}get(p,o){return this._data[p]?this._data[p][o]:void 0}clear(){this._data={}}}r.TwoKeyMap=n,r.FourKeyMap=class{constructor(){this._data=new n}set(h,p,o,f,g){this._data.get(h,p)||this._data.set(h,p,new n),this._data.get(h,p).set(o,f,g)}get(h,p,o,f){var g;return(g=this._data.get(h,p))===null||g===void 0?void 0:g.get(o,f)}clear(){this._data.clear()}}},6114:(A,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.isChromeOS=r.isLinux=r.isWindows=r.isIphone=r.isIpad=r.isMac=r.getSafariVersion=r.isSafari=r.isLegacyEdge=r.isFirefox=r.isNode=void 0,r.isNode=typeof navigator>"u";const n=r.isNode?"node":navigator.userAgent,h=r.isNode?"node":navigator.platform;r.isFirefox=n.includes("Firefox"),r.isLegacyEdge=n.includes("Edge"),r.isSafari=/^((?!chrome|android).)*safari/i.test(n),r.getSafariVersion=function(){if(!r.isSafari)return 0;const p=n.match(/Version\/(\d+)/);return p===null||p.length<2?0:parseInt(p[1])},r.isMac=["Macintosh","MacIntel","MacPPC","Mac68K"].includes(h),r.isIpad=h==="iPad",r.isIphone=h==="iPhone",r.isWindows=["Windows","Win16","Win32","WinCE"].includes(h),r.isLinux=h.indexOf("Linux")>=0,r.isChromeOS=/\bCrOS\b/.test(n)},6106:(A,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.SortedList=void 0;let n=0;r.SortedList=class{constructor(h){this._getKey=h,this._array=[]}clear(){this._array.length=0}insert(h){this._array.length!==0?(n=this._search(this._getKey(h)),this._array.splice(n,0,h)):this._array.push(h)}delete(h){if(this._array.length===0)return!1;const p=this._getKey(h);if(p===void 0||(n=this._search(p),n===-1)||this._getKey(this._array[n])!==p)return!1;do if(this._array[n]===h)return this._array.splice(n,1),!0;while(++n=this._array.length)&&this._getKey(this._array[n])===h))do yield this._array[n];while(++n=this._array.length)&&this._getKey(this._array[n])===h))do p(this._array[n]);while(++n=p;){let f=p+o>>1;const g=this._getKey(this._array[f]);if(g>h)o=f-1;else{if(!(g0&&this._getKey(this._array[f-1])===h;)f--;return f}p=f+1}}return p}}},7226:(A,r,n)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.DebouncedIdleTask=r.IdleTaskQueue=r.PriorityTaskQueue=void 0;const h=n(6114);class p{constructor(){this._tasks=[],this._i=0}enqueue(g){this._tasks.push(g),this._start()}flush(){for(;this._is)return e-v<-20&&console.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(e-v))}ms`),void this._start();e=s}this.clear()}}class o extends p{_requestCallback(g){return setTimeout((()=>g(this._createDeadline(16))))}_cancelCallback(g){clearTimeout(g)}_createDeadline(g){const v=Date.now()+g;return{timeRemaining:()=>Math.max(0,v-Date.now())}}}r.PriorityTaskQueue=o,r.IdleTaskQueue=!h.isNode&&"requestIdleCallback"in window?class extends p{_requestCallback(f){return requestIdleCallback(f)}_cancelCallback(f){cancelIdleCallback(f)}}:o,r.DebouncedIdleTask=class{constructor(){this._queue=new r.IdleTaskQueue}set(f){this._queue.clear(),this._queue.enqueue(f)}flush(){this._queue.flush()}}},9282:(A,r,n)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.updateWindowsModeWrappedState=void 0;const h=n(643);r.updateWindowsModeWrappedState=function(p){const o=p.buffer.lines.get(p.buffer.ybase+p.buffer.y-1),f=o?.get(p.cols-1),g=p.buffer.lines.get(p.buffer.ybase+p.buffer.y);g&&f&&(g.isWrapped=f[h.CHAR_DATA_CODE_INDEX]!==h.NULL_CELL_CODE&&f[h.CHAR_DATA_CODE_INDEX]!==h.WHITESPACE_CELL_CODE)}},3734:(A,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.ExtendedAttrs=r.AttributeData=void 0;class n{constructor(){this.fg=0,this.bg=0,this.extended=new h}static toColorRGB(o){return[o>>>16&255,o>>>8&255,255&o]}static fromColorRGB(o){return(255&o[0])<<16|(255&o[1])<<8|255&o[2]}clone(){const o=new n;return o.fg=this.fg,o.bg=this.bg,o.extended=this.extended.clone(),o}isInverse(){return 67108864&this.fg}isBold(){return 134217728&this.fg}isUnderline(){return this.hasExtendedAttrs()&&this.extended.underlineStyle!==0?1:268435456&this.fg}isBlink(){return 536870912&this.fg}isInvisible(){return 1073741824&this.fg}isItalic(){return 67108864&this.bg}isDim(){return 134217728&this.bg}isStrikethrough(){return 2147483648&this.fg}isProtected(){return 536870912&this.bg}isOverline(){return 1073741824&this.bg}getFgColorMode(){return 50331648&this.fg}getBgColorMode(){return 50331648&this.bg}isFgRGB(){return(50331648&this.fg)==50331648}isBgRGB(){return(50331648&this.bg)==50331648}isFgPalette(){return(50331648&this.fg)==16777216||(50331648&this.fg)==33554432}isBgPalette(){return(50331648&this.bg)==16777216||(50331648&this.bg)==33554432}isFgDefault(){return(50331648&this.fg)==0}isBgDefault(){return(50331648&this.bg)==0}isAttributeDefault(){return this.fg===0&&this.bg===0}getFgColor(){switch(50331648&this.fg){case 16777216:case 33554432:return 255&this.fg;case 50331648:return 16777215&this.fg;default:return-1}}getBgColor(){switch(50331648&this.bg){case 16777216:case 33554432:return 255&this.bg;case 50331648:return 16777215&this.bg;default:return-1}}hasExtendedAttrs(){return 268435456&this.bg}updateExtended(){this.extended.isEmpty()?this.bg&=-268435457:this.bg|=268435456}getUnderlineColor(){if(268435456&this.bg&&~this.extended.underlineColor)switch(50331648&this.extended.underlineColor){case 16777216:case 33554432:return 255&this.extended.underlineColor;case 50331648:return 16777215&this.extended.underlineColor;default:return this.getFgColor()}return this.getFgColor()}getUnderlineColorMode(){return 268435456&this.bg&&~this.extended.underlineColor?50331648&this.extended.underlineColor:this.getFgColorMode()}isUnderlineColorRGB(){return 268435456&this.bg&&~this.extended.underlineColor?(50331648&this.extended.underlineColor)==50331648:this.isFgRGB()}isUnderlineColorPalette(){return 268435456&this.bg&&~this.extended.underlineColor?(50331648&this.extended.underlineColor)==16777216||(50331648&this.extended.underlineColor)==33554432:this.isFgPalette()}isUnderlineColorDefault(){return 268435456&this.bg&&~this.extended.underlineColor?(50331648&this.extended.underlineColor)==0:this.isFgDefault()}getUnderlineStyle(){return 268435456&this.fg?268435456&this.bg?this.extended.underlineStyle:1:0}}r.AttributeData=n;class h{get ext(){return this._urlId?-469762049&this._ext|this.underlineStyle<<26:this._ext}set ext(o){this._ext=o}get underlineStyle(){return this._urlId?5:(469762048&this._ext)>>26}set underlineStyle(o){this._ext&=-469762049,this._ext|=o<<26&469762048}get underlineColor(){return 67108863&this._ext}set underlineColor(o){this._ext&=-67108864,this._ext|=67108863&o}get urlId(){return this._urlId}set urlId(o){this._urlId=o}constructor(o=0,f=0){this._ext=0,this._urlId=0,this._ext=o,this._urlId=f}clone(){return new h(this._ext,this._urlId)}isEmpty(){return this.underlineStyle===0&&this._urlId===0}}r.ExtendedAttrs=h},9092:(A,r,n)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.Buffer=r.MAX_BUFFER_SIZE=void 0;const h=n(6349),p=n(7226),o=n(3734),f=n(8437),g=n(4634),v=n(511),m=n(643),e=n(4863),s=n(7116);r.MAX_BUFFER_SIZE=4294967295,r.Buffer=class{constructor(t,i,l){this._hasScrollback=t,this._optionsService=i,this._bufferService=l,this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.tabs={},this.savedY=0,this.savedX=0,this.savedCurAttrData=f.DEFAULT_ATTR_DATA.clone(),this.savedCharset=s.DEFAULT_CHARSET,this.markers=[],this._nullCell=v.CellData.fromCharData([0,m.NULL_CELL_CHAR,m.NULL_CELL_WIDTH,m.NULL_CELL_CODE]),this._whitespaceCell=v.CellData.fromCharData([0,m.WHITESPACE_CELL_CHAR,m.WHITESPACE_CELL_WIDTH,m.WHITESPACE_CELL_CODE]),this._isClearing=!1,this._memoryCleanupQueue=new p.IdleTaskQueue,this._memoryCleanupPosition=0,this._cols=this._bufferService.cols,this._rows=this._bufferService.rows,this.lines=new h.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}getNullCell(t){return t?(this._nullCell.fg=t.fg,this._nullCell.bg=t.bg,this._nullCell.extended=t.extended):(this._nullCell.fg=0,this._nullCell.bg=0,this._nullCell.extended=new o.ExtendedAttrs),this._nullCell}getWhitespaceCell(t){return t?(this._whitespaceCell.fg=t.fg,this._whitespaceCell.bg=t.bg,this._whitespaceCell.extended=t.extended):(this._whitespaceCell.fg=0,this._whitespaceCell.bg=0,this._whitespaceCell.extended=new o.ExtendedAttrs),this._whitespaceCell}getBlankLine(t,i){return new f.BufferLine(this._bufferService.cols,this.getNullCell(t),i)}get hasScrollback(){return this._hasScrollback&&this.lines.maxLength>this._rows}get isCursorInViewport(){const t=this.ybase+this.y-this.ydisp;return t>=0&&tr.MAX_BUFFER_SIZE?r.MAX_BUFFER_SIZE:i}fillViewportRows(t){if(this.lines.length===0){t===void 0&&(t=f.DEFAULT_ATTR_DATA);let i=this._rows;for(;i--;)this.lines.push(this.getBlankLine(t))}}clear(){this.ydisp=0,this.ybase=0,this.y=0,this.x=0,this.lines=new h.CircularList(this._getCorrectBufferLength(this._rows)),this.scrollTop=0,this.scrollBottom=this._rows-1,this.setupTabStops()}resize(t,i){const l=this.getNullCell(f.DEFAULT_ATTR_DATA);let u=0;const b=this._getCorrectBufferLength(i);if(b>this.lines.maxLength&&(this.lines.maxLength=b),this.lines.length>0){if(this._cols0&&this.lines.length<=this.ybase+this.y+x+1?(this.ybase--,x++,this.ydisp>0&&this.ydisp--):this.lines.push(new f.BufferLine(t,l)));else for(let d=this._rows;d>i;d--)this.lines.length>i+this.ybase&&(this.lines.length>this.ybase+this.y+1?this.lines.pop():(this.ybase++,this.ydisp++));if(b0&&(this.lines.trimStart(d),this.ybase=Math.max(this.ybase-d,0),this.ydisp=Math.max(this.ydisp-d,0),this.savedY=Math.max(this.savedY-d,0)),this.lines.maxLength=b}this.x=Math.min(this.x,t-1),this.y=Math.min(this.y,i-1),x&&(this.y+=x),this.savedX=Math.min(this.savedX,t-1),this.scrollTop=0}if(this.scrollBottom=i-1,this._isReflowEnabled&&(this._reflow(t,i),this._cols>t))for(let x=0;x.1*this.lines.length&&(this._memoryCleanupPosition=0,this._memoryCleanupQueue.enqueue((()=>this._batchedMemoryCleanup())))}_batchedMemoryCleanup(){let t=!0;this._memoryCleanupPosition>=this.lines.length&&(this._memoryCleanupPosition=0,t=!1);let i=0;for(;this._memoryCleanupPosition100)return!0;return t}get _isReflowEnabled(){const t=this._optionsService.rawOptions.windowsPty;return t&&t.buildNumber?this._hasScrollback&&t.backend==="conpty"&&t.buildNumber>=21376:this._hasScrollback&&!this._optionsService.rawOptions.windowsMode}_reflow(t,i){this._cols!==t&&(t>this._cols?this._reflowLarger(t,i):this._reflowSmaller(t,i))}_reflowLarger(t,i){const l=(0,g.reflowLargerGetLinesToRemove)(this.lines,this._cols,t,this.ybase+this.y,this.getNullCell(f.DEFAULT_ATTR_DATA));if(l.length>0){const u=(0,g.reflowLargerCreateNewLayout)(this.lines,l);(0,g.reflowLargerApplyNewLayout)(this.lines,u.layout),this._reflowLargerAdjustViewport(t,i,u.countRemoved)}}_reflowLargerAdjustViewport(t,i,l){const u=this.getNullCell(f.DEFAULT_ATTR_DATA);let b=l;for(;b-- >0;)this.ybase===0?(this.y>0&&this.y--,this.lines.length=0;x--){let d=this.lines.get(x);if(!d||!d.isWrapped&&d.getTrimmedLength()<=t)continue;const S=[d];for(;d.isWrapped&&x>0;)d=this.lines.get(--x),S.unshift(d);const R=this.ybase+this.y;if(R>=x&&R0&&(u.push({start:x+S.length+b,newLines:B}),b+=B.length),S.push(...B);let j=y.length-1,P=y[j];P===0&&(j--,P=y[j]);let C=S.length-E-1,L=N;for(;C>=0;){const I=Math.min(L,P);if(S[j]===void 0)break;if(S[j].copyCellsFrom(S[C],L-I,P-I,I,!0),P-=I,P===0&&(j--,P=y[j]),L-=I,L===0){C--;const z=Math.max(C,0);L=(0,g.getWrappedLineTrimmedLength)(S,z,this._cols)}}for(let I=0;I0;)this.ybase===0?this.y0){const x=[],d=[];for(let j=0;j=0;j--)if(y&&y.start>R+E){for(let P=y.newLines.length-1;P>=0;P--)this.lines.set(j--,y.newLines[P]);j++,x.push({index:R+1,amount:y.newLines.length}),E+=y.newLines.length,y=u[++N]}else this.lines.set(j,d[R--]);let D=0;for(let j=x.length-1;j>=0;j--)x[j].index+=D,this.lines.onInsertEmitter.fire(x[j]),D+=x[j].amount;const B=Math.max(0,S+b-this.lines.maxLength);B>0&&this.lines.onTrimEmitter.fire(B)}}translateBufferLineToString(t,i,l=0,u){const b=this.lines.get(t);return b?b.translateToString(i,l,u):""}getWrappedRangeForLine(t){let i=t,l=t;for(;i>0&&this.lines.get(i).isWrapped;)i--;for(;l+10;);return t>=this._cols?this._cols-1:t<0?0:t}nextStop(t){for(t==null&&(t=this.x);!this.tabs[++t]&&t=this._cols?this._cols-1:t<0?0:t}clearMarkers(t){this._isClearing=!0;for(let i=0;i{i.line-=l,i.line<0&&i.dispose()}))),i.register(this.lines.onInsert((l=>{i.line>=l.index&&(i.line+=l.amount)}))),i.register(this.lines.onDelete((l=>{i.line>=l.index&&i.linel.index&&(i.line-=l.amount)}))),i.register(i.onDispose((()=>this._removeMarker(i)))),i}_removeMarker(t){this._isClearing||this.markers.splice(this.markers.indexOf(t),1)}}},8437:(A,r,n)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.BufferLine=r.DEFAULT_ATTR_DATA=void 0;const h=n(3734),p=n(511),o=n(643),f=n(482);r.DEFAULT_ATTR_DATA=Object.freeze(new h.AttributeData);let g=0;class v{constructor(e,s,t=!1){this.isWrapped=t,this._combined={},this._extendedAttrs={},this._data=new Uint32Array(3*e);const i=s||p.CellData.fromCharData([0,o.NULL_CELL_CHAR,o.NULL_CELL_WIDTH,o.NULL_CELL_CODE]);for(let l=0;l>22,2097152&s?this._combined[e].charCodeAt(this._combined[e].length-1):t]}set(e,s){this._data[3*e+1]=s[o.CHAR_DATA_ATTR_INDEX],s[o.CHAR_DATA_CHAR_INDEX].length>1?(this._combined[e]=s[1],this._data[3*e+0]=2097152|e|s[o.CHAR_DATA_WIDTH_INDEX]<<22):this._data[3*e+0]=s[o.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|s[o.CHAR_DATA_WIDTH_INDEX]<<22}getWidth(e){return this._data[3*e+0]>>22}hasWidth(e){return 12582912&this._data[3*e+0]}getFg(e){return this._data[3*e+1]}getBg(e){return this._data[3*e+2]}hasContent(e){return 4194303&this._data[3*e+0]}getCodePoint(e){const s=this._data[3*e+0];return 2097152&s?this._combined[e].charCodeAt(this._combined[e].length-1):2097151&s}isCombined(e){return 2097152&this._data[3*e+0]}getString(e){const s=this._data[3*e+0];return 2097152&s?this._combined[e]:2097151&s?(0,f.stringFromCodePoint)(2097151&s):""}isProtected(e){return 536870912&this._data[3*e+2]}loadCell(e,s){return g=3*e,s.content=this._data[g+0],s.fg=this._data[g+1],s.bg=this._data[g+2],2097152&s.content&&(s.combinedData=this._combined[e]),268435456&s.bg&&(s.extended=this._extendedAttrs[e]),s}setCell(e,s){2097152&s.content&&(this._combined[e]=s.combinedData),268435456&s.bg&&(this._extendedAttrs[e]=s.extended),this._data[3*e+0]=s.content,this._data[3*e+1]=s.fg,this._data[3*e+2]=s.bg}setCellFromCodePoint(e,s,t,i,l,u){268435456&l&&(this._extendedAttrs[e]=u),this._data[3*e+0]=s|t<<22,this._data[3*e+1]=i,this._data[3*e+2]=l}addCodepointToCell(e,s){let t=this._data[3*e+0];2097152&t?this._combined[e]+=(0,f.stringFromCodePoint)(s):(2097151&t?(this._combined[e]=(0,f.stringFromCodePoint)(2097151&t)+(0,f.stringFromCodePoint)(s),t&=-2097152,t|=2097152):t=s|4194304,this._data[3*e+0]=t)}insertCells(e,s,t,i){if((e%=this.length)&&this.getWidth(e-1)===2&&this.setCellFromCodePoint(e-1,0,1,i?.fg||0,i?.bg||0,i?.extended||new h.ExtendedAttrs),s=0;--u)this.setCell(e+s+u,this.loadCell(e+u,l));for(let u=0;uthis.length){if(this._data.buffer.byteLength>=4*t)this._data=new Uint32Array(this._data.buffer,0,t);else{const i=new Uint32Array(t);i.set(this._data),this._data=i}for(let i=this.length;i=e&&delete this._combined[b]}const l=Object.keys(this._extendedAttrs);for(let u=0;u=e&&delete this._extendedAttrs[b]}}return this.length=e,4*t*2=0;--e)if(4194303&this._data[3*e+0])return e+(this._data[3*e+0]>>22);return 0}getNoBgTrimmedLength(){for(let e=this.length-1;e>=0;--e)if(4194303&this._data[3*e+0]||50331648&this._data[3*e+2])return e+(this._data[3*e+0]>>22);return 0}copyCellsFrom(e,s,t,i,l){const u=e._data;if(l)for(let x=i-1;x>=0;x--){for(let d=0;d<3;d++)this._data[3*(t+x)+d]=u[3*(s+x)+d];268435456&u[3*(s+x)+2]&&(this._extendedAttrs[t+x]=e._extendedAttrs[s+x])}else for(let x=0;x=s&&(this._combined[d-s+t]=e._combined[d])}}translateToString(e=!1,s=0,t=this.length){e&&(t=Math.min(t,this.getTrimmedLength()));let i="";for(;s>22||1}return i}}r.BufferLine=v},4841:(A,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.getRangeLength=void 0,r.getRangeLength=function(n,h){if(n.start.y>n.end.y)throw new Error(`Buffer range end (${n.end.x}, ${n.end.y}) cannot be before start (${n.start.x}, ${n.start.y})`);return h*(n.end.y-n.start.y)+(n.end.x-n.start.x+1)}},4634:(A,r)=>{function n(h,p,o){if(p===h.length-1)return h[p].getTrimmedLength();const f=!h[p].hasContent(o-1)&&h[p].getWidth(o-1)===1,g=h[p+1].getWidth(0)===2;return f&&g?o-1:o}Object.defineProperty(r,"__esModule",{value:!0}),r.getWrappedLineTrimmedLength=r.reflowSmallerGetNewLineLengths=r.reflowLargerApplyNewLayout=r.reflowLargerCreateNewLayout=r.reflowLargerGetLinesToRemove=void 0,r.reflowLargerGetLinesToRemove=function(h,p,o,f,g){const v=[];for(let m=0;m=m&&f0&&(d>i||t[d].getTrimmedLength()===0);d--)x++;x>0&&(v.push(m+t.length-x),v.push(x)),m+=t.length-1}return v},r.reflowLargerCreateNewLayout=function(h,p){const o=[];let f=0,g=p[f],v=0;for(let m=0;mn(h,t,p))).reduce(((s,t)=>s+t));let v=0,m=0,e=0;for(;es&&(v-=s,m++);const t=h[m].getWidth(v-1)===2;t&&v--;const i=t?o-1:o;f.push(i),e+=i}return f},r.getWrappedLineTrimmedLength=n},5295:(A,r,n)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.BufferSet=void 0;const h=n(8460),p=n(844),o=n(9092);class f extends p.Disposable{constructor(v,m){super(),this._optionsService=v,this._bufferService=m,this._onBufferActivate=this.register(new h.EventEmitter),this.onBufferActivate=this._onBufferActivate.event,this.reset(),this.register(this._optionsService.onSpecificOptionChange("scrollback",(()=>this.resize(this._bufferService.cols,this._bufferService.rows)))),this.register(this._optionsService.onSpecificOptionChange("tabStopWidth",(()=>this.setupTabStops())))}reset(){this._normal=new o.Buffer(!0,this._optionsService,this._bufferService),this._normal.fillViewportRows(),this._alt=new o.Buffer(!1,this._optionsService,this._bufferService),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}),this.setupTabStops()}get alt(){return this._alt}get active(){return this._activeBuffer}get normal(){return this._normal}activateNormalBuffer(){this._activeBuffer!==this._normal&&(this._normal.x=this._alt.x,this._normal.y=this._alt.y,this._alt.clearAllMarkers(),this._alt.clear(),this._activeBuffer=this._normal,this._onBufferActivate.fire({activeBuffer:this._normal,inactiveBuffer:this._alt}))}activateAltBuffer(v){this._activeBuffer!==this._alt&&(this._alt.fillViewportRows(v),this._alt.x=this._normal.x,this._alt.y=this._normal.y,this._activeBuffer=this._alt,this._onBufferActivate.fire({activeBuffer:this._alt,inactiveBuffer:this._normal}))}resize(v,m){this._normal.resize(v,m),this._alt.resize(v,m),this.setupTabStops(v)}setupTabStops(v){this._normal.setupTabStops(v),this._alt.setupTabStops(v)}}r.BufferSet=f},511:(A,r,n)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.CellData=void 0;const h=n(482),p=n(643),o=n(3734);class f extends o.AttributeData{constructor(){super(...arguments),this.content=0,this.fg=0,this.bg=0,this.extended=new o.ExtendedAttrs,this.combinedData=""}static fromCharData(v){const m=new f;return m.setFromCharData(v),m}isCombined(){return 2097152&this.content}getWidth(){return this.content>>22}getChars(){return 2097152&this.content?this.combinedData:2097151&this.content?(0,h.stringFromCodePoint)(2097151&this.content):""}getCode(){return this.isCombined()?this.combinedData.charCodeAt(this.combinedData.length-1):2097151&this.content}setFromCharData(v){this.fg=v[p.CHAR_DATA_ATTR_INDEX],this.bg=0;let m=!1;if(v[p.CHAR_DATA_CHAR_INDEX].length>2)m=!0;else if(v[p.CHAR_DATA_CHAR_INDEX].length===2){const e=v[p.CHAR_DATA_CHAR_INDEX].charCodeAt(0);if(55296<=e&&e<=56319){const s=v[p.CHAR_DATA_CHAR_INDEX].charCodeAt(1);56320<=s&&s<=57343?this.content=1024*(e-55296)+s-56320+65536|v[p.CHAR_DATA_WIDTH_INDEX]<<22:m=!0}else m=!0}else this.content=v[p.CHAR_DATA_CHAR_INDEX].charCodeAt(0)|v[p.CHAR_DATA_WIDTH_INDEX]<<22;m&&(this.combinedData=v[p.CHAR_DATA_CHAR_INDEX],this.content=2097152|v[p.CHAR_DATA_WIDTH_INDEX]<<22)}getAsCharData(){return[this.fg,this.getChars(),this.getWidth(),this.getCode()]}}r.CellData=f},643:(A,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.WHITESPACE_CELL_CODE=r.WHITESPACE_CELL_WIDTH=r.WHITESPACE_CELL_CHAR=r.NULL_CELL_CODE=r.NULL_CELL_WIDTH=r.NULL_CELL_CHAR=r.CHAR_DATA_CODE_INDEX=r.CHAR_DATA_WIDTH_INDEX=r.CHAR_DATA_CHAR_INDEX=r.CHAR_DATA_ATTR_INDEX=r.DEFAULT_EXT=r.DEFAULT_ATTR=r.DEFAULT_COLOR=void 0,r.DEFAULT_COLOR=0,r.DEFAULT_ATTR=256|r.DEFAULT_COLOR<<9,r.DEFAULT_EXT=0,r.CHAR_DATA_ATTR_INDEX=0,r.CHAR_DATA_CHAR_INDEX=1,r.CHAR_DATA_WIDTH_INDEX=2,r.CHAR_DATA_CODE_INDEX=3,r.NULL_CELL_CHAR="",r.NULL_CELL_WIDTH=1,r.NULL_CELL_CODE=0,r.WHITESPACE_CELL_CHAR=" ",r.WHITESPACE_CELL_WIDTH=1,r.WHITESPACE_CELL_CODE=32},4863:(A,r,n)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.Marker=void 0;const h=n(8460),p=n(844);class o{get id(){return this._id}constructor(g){this.line=g,this.isDisposed=!1,this._disposables=[],this._id=o._nextId++,this._onDispose=this.register(new h.EventEmitter),this.onDispose=this._onDispose.event}dispose(){this.isDisposed||(this.isDisposed=!0,this.line=-1,this._onDispose.fire(),(0,p.disposeArray)(this._disposables),this._disposables.length=0)}register(g){return this._disposables.push(g),g}}r.Marker=o,o._nextId=1},7116:(A,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.DEFAULT_CHARSET=r.CHARSETS=void 0,r.CHARSETS={},r.DEFAULT_CHARSET=r.CHARSETS.B,r.CHARSETS[0]={"`":"◆",a:"▒",b:"␉",c:"␌",d:"␍",e:"␊",f:"°",g:"±",h:"␤",i:"␋",j:"┘",k:"┐",l:"┌",m:"└",n:"┼",o:"⎺",p:"⎻",q:"─",r:"⎼",s:"⎽",t:"├",u:"┤",v:"┴",w:"┬",x:"│",y:"≤",z:"≥","{":"π","|":"≠","}":"£","~":"·"},r.CHARSETS.A={"#":"£"},r.CHARSETS.B=void 0,r.CHARSETS[4]={"#":"£","@":"¾","[":"ij","\\":"½","]":"|","{":"¨","|":"f","}":"¼","~":"´"},r.CHARSETS.C=r.CHARSETS[5]={"[":"Ä","\\":"Ö","]":"Å","^":"Ü","`":"é","{":"ä","|":"ö","}":"å","~":"ü"},r.CHARSETS.R={"#":"£","@":"à","[":"°","\\":"ç","]":"§","{":"é","|":"ù","}":"è","~":"¨"},r.CHARSETS.Q={"@":"à","[":"â","\\":"ç","]":"ê","^":"î","`":"ô","{":"é","|":"ù","}":"è","~":"û"},r.CHARSETS.K={"@":"§","[":"Ä","\\":"Ö","]":"Ü","{":"ä","|":"ö","}":"ü","~":"ß"},r.CHARSETS.Y={"#":"£","@":"§","[":"°","\\":"ç","]":"é","`":"ù","{":"à","|":"ò","}":"è","~":"ì"},r.CHARSETS.E=r.CHARSETS[6]={"@":"Ä","[":"Æ","\\":"Ø","]":"Å","^":"Ü","`":"ä","{":"æ","|":"ø","}":"å","~":"ü"},r.CHARSETS.Z={"#":"£","@":"§","[":"¡","\\":"Ñ","]":"¿","{":"°","|":"ñ","}":"ç"},r.CHARSETS.H=r.CHARSETS[7]={"@":"É","[":"Ä","\\":"Ö","]":"Å","^":"Ü","`":"é","{":"ä","|":"ö","}":"å","~":"ü"},r.CHARSETS["="]={"#":"ù","@":"à","[":"é","\\":"ç","]":"ê","^":"î",_:"è","`":"ô","{":"ä","|":"ö","}":"ü","~":"û"}},2584:(A,r)=>{var n,h,p;Object.defineProperty(r,"__esModule",{value:!0}),r.C1_ESCAPED=r.C1=r.C0=void 0,(function(o){o.NUL="\0",o.SOH="",o.STX="",o.ETX="",o.EOT="",o.ENQ="",o.ACK="",o.BEL="\x07",o.BS="\b",o.HT=" ",o.LF=` +`,o.VT="\v",o.FF="\f",o.CR="\r",o.SO="",o.SI="",o.DLE="",o.DC1="",o.DC2="",o.DC3="",o.DC4="",o.NAK="",o.SYN="",o.ETB="",o.CAN="",o.EM="",o.SUB="",o.ESC="\x1B",o.FS="",o.GS="",o.RS="",o.US="",o.SP=" ",o.DEL=""})(n||(r.C0=n={})),(function(o){o.PAD="€",o.HOP="",o.BPH="‚",o.NBH="ƒ",o.IND="„",o.NEL="…",o.SSA="†",o.ESA="‡",o.HTS="ˆ",o.HTJ="‰",o.VTS="Š",o.PLD="‹",o.PLU="Œ",o.RI="",o.SS2="Ž",o.SS3="",o.DCS="",o.PU1="‘",o.PU2="’",o.STS="“",o.CCH="”",o.MW="•",o.SPA="–",o.EPA="—",o.SOS="˜",o.SGCI="™",o.SCI="š",o.CSI="›",o.ST="œ",o.OSC="",o.PM="ž",o.APC="Ÿ"})(h||(r.C1=h={})),(function(o){o.ST=`${n.ESC}\\`})(p||(r.C1_ESCAPED=p={}))},7399:(A,r,n)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.evaluateKeyboardEvent=void 0;const h=n(2584),p={48:["0",")"],49:["1","!"],50:["2","@"],51:["3","#"],52:["4","$"],53:["5","%"],54:["6","^"],55:["7","&"],56:["8","*"],57:["9","("],186:[";",":"],187:["=","+"],188:[",","<"],189:["-","_"],190:[".",">"],191:["/","?"],192:["`","~"],219:["[","{"],220:["\\","|"],221:["]","}"],222:["'",'"']};r.evaluateKeyboardEvent=function(o,f,g,v){const m={type:0,cancel:!1,key:void 0},e=(o.shiftKey?1:0)|(o.altKey?2:0)|(o.ctrlKey?4:0)|(o.metaKey?8:0);switch(o.keyCode){case 0:o.key==="UIKeyInputUpArrow"?m.key=f?h.C0.ESC+"OA":h.C0.ESC+"[A":o.key==="UIKeyInputLeftArrow"?m.key=f?h.C0.ESC+"OD":h.C0.ESC+"[D":o.key==="UIKeyInputRightArrow"?m.key=f?h.C0.ESC+"OC":h.C0.ESC+"[C":o.key==="UIKeyInputDownArrow"&&(m.key=f?h.C0.ESC+"OB":h.C0.ESC+"[B");break;case 8:if(o.altKey){m.key=h.C0.ESC+h.C0.DEL;break}m.key=h.C0.DEL;break;case 9:if(o.shiftKey){m.key=h.C0.ESC+"[Z";break}m.key=h.C0.HT,m.cancel=!0;break;case 13:m.key=o.altKey?h.C0.ESC+h.C0.CR:h.C0.CR,m.cancel=!0;break;case 27:m.key=h.C0.ESC,o.altKey&&(m.key=h.C0.ESC+h.C0.ESC),m.cancel=!0;break;case 37:if(o.metaKey)break;e?(m.key=h.C0.ESC+"[1;"+(e+1)+"D",m.key===h.C0.ESC+"[1;3D"&&(m.key=h.C0.ESC+(g?"b":"[1;5D"))):m.key=f?h.C0.ESC+"OD":h.C0.ESC+"[D";break;case 39:if(o.metaKey)break;e?(m.key=h.C0.ESC+"[1;"+(e+1)+"C",m.key===h.C0.ESC+"[1;3C"&&(m.key=h.C0.ESC+(g?"f":"[1;5C"))):m.key=f?h.C0.ESC+"OC":h.C0.ESC+"[C";break;case 38:if(o.metaKey)break;e?(m.key=h.C0.ESC+"[1;"+(e+1)+"A",g||m.key!==h.C0.ESC+"[1;3A"||(m.key=h.C0.ESC+"[1;5A")):m.key=f?h.C0.ESC+"OA":h.C0.ESC+"[A";break;case 40:if(o.metaKey)break;e?(m.key=h.C0.ESC+"[1;"+(e+1)+"B",g||m.key!==h.C0.ESC+"[1;3B"||(m.key=h.C0.ESC+"[1;5B")):m.key=f?h.C0.ESC+"OB":h.C0.ESC+"[B";break;case 45:o.shiftKey||o.ctrlKey||(m.key=h.C0.ESC+"[2~");break;case 46:m.key=e?h.C0.ESC+"[3;"+(e+1)+"~":h.C0.ESC+"[3~";break;case 36:m.key=e?h.C0.ESC+"[1;"+(e+1)+"H":f?h.C0.ESC+"OH":h.C0.ESC+"[H";break;case 35:m.key=e?h.C0.ESC+"[1;"+(e+1)+"F":f?h.C0.ESC+"OF":h.C0.ESC+"[F";break;case 33:o.shiftKey?m.type=2:o.ctrlKey?m.key=h.C0.ESC+"[5;"+(e+1)+"~":m.key=h.C0.ESC+"[5~";break;case 34:o.shiftKey?m.type=3:o.ctrlKey?m.key=h.C0.ESC+"[6;"+(e+1)+"~":m.key=h.C0.ESC+"[6~";break;case 112:m.key=e?h.C0.ESC+"[1;"+(e+1)+"P":h.C0.ESC+"OP";break;case 113:m.key=e?h.C0.ESC+"[1;"+(e+1)+"Q":h.C0.ESC+"OQ";break;case 114:m.key=e?h.C0.ESC+"[1;"+(e+1)+"R":h.C0.ESC+"OR";break;case 115:m.key=e?h.C0.ESC+"[1;"+(e+1)+"S":h.C0.ESC+"OS";break;case 116:m.key=e?h.C0.ESC+"[15;"+(e+1)+"~":h.C0.ESC+"[15~";break;case 117:m.key=e?h.C0.ESC+"[17;"+(e+1)+"~":h.C0.ESC+"[17~";break;case 118:m.key=e?h.C0.ESC+"[18;"+(e+1)+"~":h.C0.ESC+"[18~";break;case 119:m.key=e?h.C0.ESC+"[19;"+(e+1)+"~":h.C0.ESC+"[19~";break;case 120:m.key=e?h.C0.ESC+"[20;"+(e+1)+"~":h.C0.ESC+"[20~";break;case 121:m.key=e?h.C0.ESC+"[21;"+(e+1)+"~":h.C0.ESC+"[21~";break;case 122:m.key=e?h.C0.ESC+"[23;"+(e+1)+"~":h.C0.ESC+"[23~";break;case 123:m.key=e?h.C0.ESC+"[24;"+(e+1)+"~":h.C0.ESC+"[24~";break;default:if(!o.ctrlKey||o.shiftKey||o.altKey||o.metaKey)if(g&&!v||!o.altKey||o.metaKey)!g||o.altKey||o.ctrlKey||o.shiftKey||!o.metaKey?o.key&&!o.ctrlKey&&!o.altKey&&!o.metaKey&&o.keyCode>=48&&o.key.length===1?m.key=o.key:o.key&&o.ctrlKey&&(o.key==="_"&&(m.key=h.C0.US),o.key==="@"&&(m.key=h.C0.NUL)):o.keyCode===65&&(m.type=1);else{const s=p[o.keyCode],t=s?.[o.shiftKey?1:0];if(t)m.key=h.C0.ESC+t;else if(o.keyCode>=65&&o.keyCode<=90){const i=o.ctrlKey?o.keyCode-64:o.keyCode+32;let l=String.fromCharCode(i);o.shiftKey&&(l=l.toUpperCase()),m.key=h.C0.ESC+l}else if(o.keyCode===32)m.key=h.C0.ESC+(o.ctrlKey?h.C0.NUL:" ");else if(o.key==="Dead"&&o.code.startsWith("Key")){let i=o.code.slice(3,4);o.shiftKey||(i=i.toLowerCase()),m.key=h.C0.ESC+i,m.cancel=!0}}else o.keyCode>=65&&o.keyCode<=90?m.key=String.fromCharCode(o.keyCode-64):o.keyCode===32?m.key=h.C0.NUL:o.keyCode>=51&&o.keyCode<=55?m.key=String.fromCharCode(o.keyCode-51+27):o.keyCode===56?m.key=h.C0.DEL:o.keyCode===219?m.key=h.C0.ESC:o.keyCode===220?m.key=h.C0.FS:o.keyCode===221&&(m.key=h.C0.GS)}return m}},482:(A,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.Utf8ToUtf32=r.StringToUtf32=r.utf32ToString=r.stringFromCodePoint=void 0,r.stringFromCodePoint=function(n){return n>65535?(n-=65536,String.fromCharCode(55296+(n>>10))+String.fromCharCode(n%1024+56320)):String.fromCharCode(n)},r.utf32ToString=function(n,h=0,p=n.length){let o="";for(let f=h;f65535?(g-=65536,o+=String.fromCharCode(55296+(g>>10))+String.fromCharCode(g%1024+56320)):o+=String.fromCharCode(g)}return o},r.StringToUtf32=class{constructor(){this._interim=0}clear(){this._interim=0}decode(n,h){const p=n.length;if(!p)return 0;let o=0,f=0;if(this._interim){const g=n.charCodeAt(f++);56320<=g&&g<=57343?h[o++]=1024*(this._interim-55296)+g-56320+65536:(h[o++]=this._interim,h[o++]=g),this._interim=0}for(let g=f;g=p)return this._interim=v,o;const m=n.charCodeAt(g);56320<=m&&m<=57343?h[o++]=1024*(v-55296)+m-56320+65536:(h[o++]=v,h[o++]=m)}else v!==65279&&(h[o++]=v)}return o}},r.Utf8ToUtf32=class{constructor(){this.interim=new Uint8Array(3)}clear(){this.interim.fill(0)}decode(n,h){const p=n.length;if(!p)return 0;let o,f,g,v,m=0,e=0,s=0;if(this.interim[0]){let l=!1,u=this.interim[0];u&=(224&u)==192?31:(240&u)==224?15:7;let b,x=0;for(;(b=63&this.interim[++x])&&x<4;)u<<=6,u|=b;const d=(224&this.interim[0])==192?2:(240&this.interim[0])==224?3:4,S=d-x;for(;s=p)return 0;if(b=n[s++],(192&b)!=128){s--,l=!0;break}this.interim[x++]=b,u<<=6,u|=63&b}l||(d===2?u<128?s--:h[m++]=u:d===3?u<2048||u>=55296&&u<=57343||u===65279||(h[m++]=u):u<65536||u>1114111||(h[m++]=u)),this.interim.fill(0)}const t=p-4;let i=s;for(;i=p)return this.interim[0]=o,m;if(f=n[i++],(192&f)!=128){i--;continue}if(e=(31&o)<<6|63&f,e<128){i--;continue}h[m++]=e}else if((240&o)==224){if(i>=p)return this.interim[0]=o,m;if(f=n[i++],(192&f)!=128){i--;continue}if(i>=p)return this.interim[0]=o,this.interim[1]=f,m;if(g=n[i++],(192&g)!=128){i--;continue}if(e=(15&o)<<12|(63&f)<<6|63&g,e<2048||e>=55296&&e<=57343||e===65279)continue;h[m++]=e}else if((248&o)==240){if(i>=p)return this.interim[0]=o,m;if(f=n[i++],(192&f)!=128){i--;continue}if(i>=p)return this.interim[0]=o,this.interim[1]=f,m;if(g=n[i++],(192&g)!=128){i--;continue}if(i>=p)return this.interim[0]=o,this.interim[1]=f,this.interim[2]=g,m;if(v=n[i++],(192&v)!=128){i--;continue}if(e=(7&o)<<18|(63&f)<<12|(63&g)<<6|63&v,e<65536||e>1114111)continue;h[m++]=e}}return m}}},225:(A,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.UnicodeV6=void 0;const n=[[768,879],[1155,1158],[1160,1161],[1425,1469],[1471,1471],[1473,1474],[1476,1477],[1479,1479],[1536,1539],[1552,1557],[1611,1630],[1648,1648],[1750,1764],[1767,1768],[1770,1773],[1807,1807],[1809,1809],[1840,1866],[1958,1968],[2027,2035],[2305,2306],[2364,2364],[2369,2376],[2381,2381],[2385,2388],[2402,2403],[2433,2433],[2492,2492],[2497,2500],[2509,2509],[2530,2531],[2561,2562],[2620,2620],[2625,2626],[2631,2632],[2635,2637],[2672,2673],[2689,2690],[2748,2748],[2753,2757],[2759,2760],[2765,2765],[2786,2787],[2817,2817],[2876,2876],[2879,2879],[2881,2883],[2893,2893],[2902,2902],[2946,2946],[3008,3008],[3021,3021],[3134,3136],[3142,3144],[3146,3149],[3157,3158],[3260,3260],[3263,3263],[3270,3270],[3276,3277],[3298,3299],[3393,3395],[3405,3405],[3530,3530],[3538,3540],[3542,3542],[3633,3633],[3636,3642],[3655,3662],[3761,3761],[3764,3769],[3771,3772],[3784,3789],[3864,3865],[3893,3893],[3895,3895],[3897,3897],[3953,3966],[3968,3972],[3974,3975],[3984,3991],[3993,4028],[4038,4038],[4141,4144],[4146,4146],[4150,4151],[4153,4153],[4184,4185],[4448,4607],[4959,4959],[5906,5908],[5938,5940],[5970,5971],[6002,6003],[6068,6069],[6071,6077],[6086,6086],[6089,6099],[6109,6109],[6155,6157],[6313,6313],[6432,6434],[6439,6440],[6450,6450],[6457,6459],[6679,6680],[6912,6915],[6964,6964],[6966,6970],[6972,6972],[6978,6978],[7019,7027],[7616,7626],[7678,7679],[8203,8207],[8234,8238],[8288,8291],[8298,8303],[8400,8431],[12330,12335],[12441,12442],[43014,43014],[43019,43019],[43045,43046],[64286,64286],[65024,65039],[65056,65059],[65279,65279],[65529,65531]],h=[[68097,68099],[68101,68102],[68108,68111],[68152,68154],[68159,68159],[119143,119145],[119155,119170],[119173,119179],[119210,119213],[119362,119364],[917505,917505],[917536,917631],[917760,917999]];let p;r.UnicodeV6=class{constructor(){if(this.version="6",!p){p=new Uint8Array(65536),p.fill(1),p[0]=0,p.fill(0,1,32),p.fill(0,127,160),p.fill(2,4352,4448),p[9001]=2,p[9002]=2,p.fill(2,11904,42192),p[12351]=1,p.fill(2,44032,55204),p.fill(2,63744,64256),p.fill(2,65040,65050),p.fill(2,65072,65136),p.fill(2,65280,65377),p.fill(2,65504,65511);for(let o=0;og[e][1])return!1;for(;e>=m;)if(v=m+e>>1,f>g[v][1])m=v+1;else{if(!(f=131072&&o<=196605||o>=196608&&o<=262141?2:1}}},5981:(A,r,n)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.WriteBuffer=void 0;const h=n(8460),p=n(844);class o extends p.Disposable{constructor(g){super(),this._action=g,this._writeBuffer=[],this._callbacks=[],this._pendingData=0,this._bufferOffset=0,this._isSyncWriting=!1,this._syncCalls=0,this._didUserInput=!1,this._onWriteParsed=this.register(new h.EventEmitter),this.onWriteParsed=this._onWriteParsed.event}handleUserInput(){this._didUserInput=!0}writeSync(g,v){if(v!==void 0&&this._syncCalls>v)return void(this._syncCalls=0);if(this._pendingData+=g.length,this._writeBuffer.push(g),this._callbacks.push(void 0),this._syncCalls++,this._isSyncWriting)return;let m;for(this._isSyncWriting=!0;m=this._writeBuffer.shift();){this._action(m);const e=this._callbacks.shift();e&&e()}this._pendingData=0,this._bufferOffset=2147483647,this._isSyncWriting=!1,this._syncCalls=0}write(g,v){if(this._pendingData>5e7)throw new Error("write data discarded, use flow control to avoid losing data");if(!this._writeBuffer.length){if(this._bufferOffset=0,this._didUserInput)return this._didUserInput=!1,this._pendingData+=g.length,this._writeBuffer.push(g),this._callbacks.push(v),void this._innerWrite();setTimeout((()=>this._innerWrite()))}this._pendingData+=g.length,this._writeBuffer.push(g),this._callbacks.push(v)}_innerWrite(g=0,v=!0){const m=g||Date.now();for(;this._writeBuffer.length>this._bufferOffset;){const e=this._writeBuffer[this._bufferOffset],s=this._action(e,v);if(s){const i=l=>Date.now()-m>=12?setTimeout((()=>this._innerWrite(0,l))):this._innerWrite(m,l);return void s.catch((l=>(queueMicrotask((()=>{throw l})),Promise.resolve(!1)))).then(i)}const t=this._callbacks[this._bufferOffset];if(t&&t(),this._bufferOffset++,this._pendingData-=e.length,Date.now()-m>=12)break}this._writeBuffer.length>this._bufferOffset?(this._bufferOffset>50&&(this._writeBuffer=this._writeBuffer.slice(this._bufferOffset),this._callbacks=this._callbacks.slice(this._bufferOffset),this._bufferOffset=0),setTimeout((()=>this._innerWrite()))):(this._writeBuffer.length=0,this._callbacks.length=0,this._pendingData=0,this._bufferOffset=0),this._onWriteParsed.fire()}}r.WriteBuffer=o},5941:(A,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.toRgbString=r.parseColor=void 0;const n=/^([\da-f])\/([\da-f])\/([\da-f])$|^([\da-f]{2})\/([\da-f]{2})\/([\da-f]{2})$|^([\da-f]{3})\/([\da-f]{3})\/([\da-f]{3})$|^([\da-f]{4})\/([\da-f]{4})\/([\da-f]{4})$/,h=/^[\da-f]+$/;function p(o,f){const g=o.toString(16),v=g.length<2?"0"+g:g;switch(f){case 4:return g[0];case 8:return v;case 12:return(v+v).slice(0,3);default:return v+v}}r.parseColor=function(o){if(!o)return;let f=o.toLowerCase();if(f.indexOf("rgb:")===0){f=f.slice(4);const g=n.exec(f);if(g){const v=g[1]?15:g[4]?255:g[7]?4095:65535;return[Math.round(parseInt(g[1]||g[4]||g[7]||g[10],16)/v*255),Math.round(parseInt(g[2]||g[5]||g[8]||g[11],16)/v*255),Math.round(parseInt(g[3]||g[6]||g[9]||g[12],16)/v*255)]}}else if(f.indexOf("#")===0&&(f=f.slice(1),h.exec(f)&&[3,6,9,12].includes(f.length))){const g=f.length/3,v=[0,0,0];for(let m=0;m<3;++m){const e=parseInt(f.slice(g*m,g*m+g),16);v[m]=g===1?e<<4:g===2?e:g===3?e>>4:e>>8}return v}},r.toRgbString=function(o,f=16){const[g,v,m]=o;return`rgb:${p(g,f)}/${p(v,f)}/${p(m,f)}`}},5770:(A,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.PAYLOAD_LIMIT=void 0,r.PAYLOAD_LIMIT=1e7},6351:(A,r,n)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.DcsHandler=r.DcsParser=void 0;const h=n(482),p=n(8742),o=n(5770),f=[];r.DcsParser=class{constructor(){this._handlers=Object.create(null),this._active=f,this._ident=0,this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=f}registerHandler(v,m){this._handlers[v]===void 0&&(this._handlers[v]=[]);const e=this._handlers[v];return e.push(m),{dispose:()=>{const s=e.indexOf(m);s!==-1&&e.splice(s,1)}}}clearHandler(v){this._handlers[v]&&delete this._handlers[v]}setHandlerFallback(v){this._handlerFb=v}reset(){if(this._active.length)for(let v=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;v>=0;--v)this._active[v].unhook(!1);this._stack.paused=!1,this._active=f,this._ident=0}hook(v,m){if(this.reset(),this._ident=v,this._active=this._handlers[v]||f,this._active.length)for(let e=this._active.length-1;e>=0;e--)this._active[e].hook(m);else this._handlerFb(this._ident,"HOOK",m)}put(v,m,e){if(this._active.length)for(let s=this._active.length-1;s>=0;s--)this._active[s].put(v,m,e);else this._handlerFb(this._ident,"PUT",(0,h.utf32ToString)(v,m,e))}unhook(v,m=!0){if(this._active.length){let e=!1,s=this._active.length-1,t=!1;if(this._stack.paused&&(s=this._stack.loopPosition-1,e=m,t=this._stack.fallThrough,this._stack.paused=!1),!t&&e===!1){for(;s>=0&&(e=this._active[s].unhook(v),e!==!0);s--)if(e instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!1,e;s--}for(;s>=0;s--)if(e=this._active[s].unhook(!1),e instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=s,this._stack.fallThrough=!0,e}else this._handlerFb(this._ident,"UNHOOK",v);this._active=f,this._ident=0}};const g=new p.Params;g.addParam(0),r.DcsHandler=class{constructor(v){this._handler=v,this._data="",this._params=g,this._hitLimit=!1}hook(v){this._params=v.length>1||v.params[0]?v.clone():g,this._data="",this._hitLimit=!1}put(v,m,e){this._hitLimit||(this._data+=(0,h.utf32ToString)(v,m,e),this._data.length>o.PAYLOAD_LIMIT&&(this._data="",this._hitLimit=!0))}unhook(v){let m=!1;if(this._hitLimit)m=!1;else if(v&&(m=this._handler(this._data,this._params),m instanceof Promise))return m.then((e=>(this._params=g,this._data="",this._hitLimit=!1,e)));return this._params=g,this._data="",this._hitLimit=!1,m}}},2015:(A,r,n)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.EscapeSequenceParser=r.VT500_TRANSITION_TABLE=r.TransitionTable=void 0;const h=n(844),p=n(8742),o=n(6242),f=n(6351);class g{constructor(s){this.table=new Uint8Array(s)}setDefault(s,t){this.table.fill(s<<4|t)}add(s,t,i,l){this.table[t<<8|s]=i<<4|l}addMany(s,t,i,l){for(let u=0;ud)),t=(x,d)=>s.slice(x,d),i=t(32,127),l=t(0,24);l.push(25),l.push.apply(l,t(28,32));const u=t(0,14);let b;for(b in e.setDefault(1,0),e.addMany(i,0,2,0),u)e.addMany([24,26,153,154],b,3,0),e.addMany(t(128,144),b,3,0),e.addMany(t(144,152),b,3,0),e.add(156,b,0,0),e.add(27,b,11,1),e.add(157,b,4,8),e.addMany([152,158,159],b,0,7),e.add(155,b,11,3),e.add(144,b,11,9);return e.addMany(l,0,3,0),e.addMany(l,1,3,1),e.add(127,1,0,1),e.addMany(l,8,0,8),e.addMany(l,3,3,3),e.add(127,3,0,3),e.addMany(l,4,3,4),e.add(127,4,0,4),e.addMany(l,6,3,6),e.addMany(l,5,3,5),e.add(127,5,0,5),e.addMany(l,2,3,2),e.add(127,2,0,2),e.add(93,1,4,8),e.addMany(i,8,5,8),e.add(127,8,5,8),e.addMany([156,27,24,26,7],8,6,0),e.addMany(t(28,32),8,0,8),e.addMany([88,94,95],1,0,7),e.addMany(i,7,0,7),e.addMany(l,7,0,7),e.add(156,7,0,0),e.add(127,7,0,7),e.add(91,1,11,3),e.addMany(t(64,127),3,7,0),e.addMany(t(48,60),3,8,4),e.addMany([60,61,62,63],3,9,4),e.addMany(t(48,60),4,8,4),e.addMany(t(64,127),4,7,0),e.addMany([60,61,62,63],4,0,6),e.addMany(t(32,64),6,0,6),e.add(127,6,0,6),e.addMany(t(64,127),6,0,0),e.addMany(t(32,48),3,9,5),e.addMany(t(32,48),5,9,5),e.addMany(t(48,64),5,0,6),e.addMany(t(64,127),5,7,0),e.addMany(t(32,48),4,9,5),e.addMany(t(32,48),1,9,2),e.addMany(t(32,48),2,9,2),e.addMany(t(48,127),2,10,0),e.addMany(t(48,80),1,10,0),e.addMany(t(81,88),1,10,0),e.addMany([89,90,92],1,10,0),e.addMany(t(96,127),1,10,0),e.add(80,1,11,9),e.addMany(l,9,0,9),e.add(127,9,0,9),e.addMany(t(28,32),9,0,9),e.addMany(t(32,48),9,9,12),e.addMany(t(48,60),9,8,10),e.addMany([60,61,62,63],9,9,10),e.addMany(l,11,0,11),e.addMany(t(32,128),11,0,11),e.addMany(t(28,32),11,0,11),e.addMany(l,10,0,10),e.add(127,10,0,10),e.addMany(t(28,32),10,0,10),e.addMany(t(48,60),10,8,10),e.addMany([60,61,62,63],10,0,11),e.addMany(t(32,48),10,9,12),e.addMany(l,12,0,12),e.add(127,12,0,12),e.addMany(t(28,32),12,0,12),e.addMany(t(32,48),12,9,12),e.addMany(t(48,64),12,0,11),e.addMany(t(64,127),12,12,13),e.addMany(t(64,127),10,12,13),e.addMany(t(64,127),9,12,13),e.addMany(l,13,13,13),e.addMany(i,13,13,13),e.add(127,13,0,13),e.addMany([27,156,24,26],13,14,0),e.add(v,0,2,0),e.add(v,8,5,8),e.add(v,6,0,6),e.add(v,11,0,11),e.add(v,13,13,13),e})();class m extends h.Disposable{constructor(s=r.VT500_TRANSITION_TABLE){super(),this._transitions=s,this._parseStack={state:0,handlers:[],handlerPos:0,transition:0,chunkPos:0},this.initialState=0,this.currentState=this.initialState,this._params=new p.Params,this._params.addParam(0),this._collect=0,this.precedingCodepoint=0,this._printHandlerFb=(t,i,l)=>{},this._executeHandlerFb=t=>{},this._csiHandlerFb=(t,i)=>{},this._escHandlerFb=t=>{},this._errorHandlerFb=t=>t,this._printHandler=this._printHandlerFb,this._executeHandlers=Object.create(null),this._csiHandlers=Object.create(null),this._escHandlers=Object.create(null),this.register((0,h.toDisposable)((()=>{this._csiHandlers=Object.create(null),this._executeHandlers=Object.create(null),this._escHandlers=Object.create(null)}))),this._oscParser=this.register(new o.OscParser),this._dcsParser=this.register(new f.DcsParser),this._errorHandler=this._errorHandlerFb,this.registerEscHandler({final:"\\"},(()=>!0))}_identifier(s,t=[64,126]){let i=0;if(s.prefix){if(s.prefix.length>1)throw new Error("only one byte as prefix supported");if(i=s.prefix.charCodeAt(0),i&&60>i||i>63)throw new Error("prefix must be in range 0x3c .. 0x3f")}if(s.intermediates){if(s.intermediates.length>2)throw new Error("only two bytes as intermediates are supported");for(let u=0;ub||b>47)throw new Error("intermediate must be in range 0x20 .. 0x2f");i<<=8,i|=b}}if(s.final.length!==1)throw new Error("final must be a single byte");const l=s.final.charCodeAt(0);if(t[0]>l||l>t[1])throw new Error(`final must be in range ${t[0]} .. ${t[1]}`);return i<<=8,i|=l,i}identToString(s){const t=[];for(;s;)t.push(String.fromCharCode(255&s)),s>>=8;return t.reverse().join("")}setPrintHandler(s){this._printHandler=s}clearPrintHandler(){this._printHandler=this._printHandlerFb}registerEscHandler(s,t){const i=this._identifier(s,[48,126]);this._escHandlers[i]===void 0&&(this._escHandlers[i]=[]);const l=this._escHandlers[i];return l.push(t),{dispose:()=>{const u=l.indexOf(t);u!==-1&&l.splice(u,1)}}}clearEscHandler(s){this._escHandlers[this._identifier(s,[48,126])]&&delete this._escHandlers[this._identifier(s,[48,126])]}setEscHandlerFallback(s){this._escHandlerFb=s}setExecuteHandler(s,t){this._executeHandlers[s.charCodeAt(0)]=t}clearExecuteHandler(s){this._executeHandlers[s.charCodeAt(0)]&&delete this._executeHandlers[s.charCodeAt(0)]}setExecuteHandlerFallback(s){this._executeHandlerFb=s}registerCsiHandler(s,t){const i=this._identifier(s);this._csiHandlers[i]===void 0&&(this._csiHandlers[i]=[]);const l=this._csiHandlers[i];return l.push(t),{dispose:()=>{const u=l.indexOf(t);u!==-1&&l.splice(u,1)}}}clearCsiHandler(s){this._csiHandlers[this._identifier(s)]&&delete this._csiHandlers[this._identifier(s)]}setCsiHandlerFallback(s){this._csiHandlerFb=s}registerDcsHandler(s,t){return this._dcsParser.registerHandler(this._identifier(s),t)}clearDcsHandler(s){this._dcsParser.clearHandler(this._identifier(s))}setDcsHandlerFallback(s){this._dcsParser.setHandlerFallback(s)}registerOscHandler(s,t){return this._oscParser.registerHandler(s,t)}clearOscHandler(s){this._oscParser.clearHandler(s)}setOscHandlerFallback(s){this._oscParser.setHandlerFallback(s)}setErrorHandler(s){this._errorHandler=s}clearErrorHandler(){this._errorHandler=this._errorHandlerFb}reset(){this.currentState=this.initialState,this._oscParser.reset(),this._dcsParser.reset(),this._params.reset(),this._params.addParam(0),this._collect=0,this.precedingCodepoint=0,this._parseStack.state!==0&&(this._parseStack.state=2,this._parseStack.handlers=[])}_preserveStack(s,t,i,l,u){this._parseStack.state=s,this._parseStack.handlers=t,this._parseStack.handlerPos=i,this._parseStack.transition=l,this._parseStack.chunkPos=u}parse(s,t,i){let l,u=0,b=0,x=0;if(this._parseStack.state)if(this._parseStack.state===2)this._parseStack.state=0,x=this._parseStack.chunkPos+1;else{if(i===void 0||this._parseStack.state===1)throw this._parseStack.state=1,new Error("improper continuation due to previous async handler, giving up parsing");const d=this._parseStack.handlers;let S=this._parseStack.handlerPos-1;switch(this._parseStack.state){case 3:if(i===!1&&S>-1){for(;S>=0&&(l=d[S](this._params),l!==!0);S--)if(l instanceof Promise)return this._parseStack.handlerPos=S,l}this._parseStack.handlers=[];break;case 4:if(i===!1&&S>-1){for(;S>=0&&(l=d[S](),l!==!0);S--)if(l instanceof Promise)return this._parseStack.handlerPos=S,l}this._parseStack.handlers=[];break;case 6:if(u=s[this._parseStack.chunkPos],l=this._dcsParser.unhook(u!==24&&u!==26,i),l)return l;u===27&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0;break;case 5:if(u=s[this._parseStack.chunkPos],l=this._oscParser.end(u!==24&&u!==26,i),l)return l;u===27&&(this._parseStack.transition|=1),this._params.reset(),this._params.addParam(0),this._collect=0}this._parseStack.state=0,x=this._parseStack.chunkPos+1,this.precedingCodepoint=0,this.currentState=15&this._parseStack.transition}for(let d=x;d>4){case 2:for(let E=d+1;;++E){if(E>=t||(u=s[E])<32||u>126&&u=t||(u=s[E])<32||u>126&&u=t||(u=s[E])<32||u>126&&u=t||(u=s[E])<32||u>126&&u=0&&(l=S[R](this._params),l!==!0);R--)if(l instanceof Promise)return this._preserveStack(3,S,R,b,d),l;R<0&&this._csiHandlerFb(this._collect<<8|u,this._params),this.precedingCodepoint=0;break;case 8:do switch(u){case 59:this._params.addParam(0);break;case 58:this._params.addSubParam(-1);break;default:this._params.addDigit(u-48)}while(++d47&&u<60);d--;break;case 9:this._collect<<=8,this._collect|=u;break;case 10:const N=this._escHandlers[this._collect<<8|u];let y=N?N.length-1:-1;for(;y>=0&&(l=N[y](),l!==!0);y--)if(l instanceof Promise)return this._preserveStack(4,N,y,b,d),l;y<0&&this._escHandlerFb(this._collect<<8|u),this.precedingCodepoint=0;break;case 11:this._params.reset(),this._params.addParam(0),this._collect=0;break;case 12:this._dcsParser.hook(this._collect<<8|u,this._params);break;case 13:for(let E=d+1;;++E)if(E>=t||(u=s[E])===24||u===26||u===27||u>127&&u=t||(u=s[E])<32||u>127&&u{Object.defineProperty(r,"__esModule",{value:!0}),r.OscHandler=r.OscParser=void 0;const h=n(5770),p=n(482),o=[];r.OscParser=class{constructor(){this._state=0,this._active=o,this._id=-1,this._handlers=Object.create(null),this._handlerFb=()=>{},this._stack={paused:!1,loopPosition:0,fallThrough:!1}}registerHandler(f,g){this._handlers[f]===void 0&&(this._handlers[f]=[]);const v=this._handlers[f];return v.push(g),{dispose:()=>{const m=v.indexOf(g);m!==-1&&v.splice(m,1)}}}clearHandler(f){this._handlers[f]&&delete this._handlers[f]}setHandlerFallback(f){this._handlerFb=f}dispose(){this._handlers=Object.create(null),this._handlerFb=()=>{},this._active=o}reset(){if(this._state===2)for(let f=this._stack.paused?this._stack.loopPosition-1:this._active.length-1;f>=0;--f)this._active[f].end(!1);this._stack.paused=!1,this._active=o,this._id=-1,this._state=0}_start(){if(this._active=this._handlers[this._id]||o,this._active.length)for(let f=this._active.length-1;f>=0;f--)this._active[f].start();else this._handlerFb(this._id,"START")}_put(f,g,v){if(this._active.length)for(let m=this._active.length-1;m>=0;m--)this._active[m].put(f,g,v);else this._handlerFb(this._id,"PUT",(0,p.utf32ToString)(f,g,v))}start(){this.reset(),this._state=1}put(f,g,v){if(this._state!==3){if(this._state===1)for(;g0&&this._put(f,g,v)}}end(f,g=!0){if(this._state!==0){if(this._state!==3)if(this._state===1&&this._start(),this._active.length){let v=!1,m=this._active.length-1,e=!1;if(this._stack.paused&&(m=this._stack.loopPosition-1,v=g,e=this._stack.fallThrough,this._stack.paused=!1),!e&&v===!1){for(;m>=0&&(v=this._active[m].end(f),v!==!0);m--)if(v instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=m,this._stack.fallThrough=!1,v;m--}for(;m>=0;m--)if(v=this._active[m].end(!1),v instanceof Promise)return this._stack.paused=!0,this._stack.loopPosition=m,this._stack.fallThrough=!0,v}else this._handlerFb(this._id,"END",f);this._active=o,this._id=-1,this._state=0}}},r.OscHandler=class{constructor(f){this._handler=f,this._data="",this._hitLimit=!1}start(){this._data="",this._hitLimit=!1}put(f,g,v){this._hitLimit||(this._data+=(0,p.utf32ToString)(f,g,v),this._data.length>h.PAYLOAD_LIMIT&&(this._data="",this._hitLimit=!0))}end(f){let g=!1;if(this._hitLimit)g=!1;else if(f&&(g=this._handler(this._data),g instanceof Promise))return g.then((v=>(this._data="",this._hitLimit=!1,v)));return this._data="",this._hitLimit=!1,g}}},8742:(A,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.Params=void 0;const n=2147483647;class h{static fromArray(o){const f=new h;if(!o.length)return f;for(let g=Array.isArray(o[0])?1:0;g256)throw new Error("maxSubParamsLength must not be greater than 256");this.params=new Int32Array(o),this.length=0,this._subParams=new Int32Array(f),this._subParamsLength=0,this._subParamsIdx=new Uint16Array(o),this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}clone(){const o=new h(this.maxLength,this.maxSubParamsLength);return o.params.set(this.params),o.length=this.length,o._subParams.set(this._subParams),o._subParamsLength=this._subParamsLength,o._subParamsIdx.set(this._subParamsIdx),o._rejectDigits=this._rejectDigits,o._rejectSubDigits=this._rejectSubDigits,o._digitIsSub=this._digitIsSub,o}toArray(){const o=[];for(let f=0;f>8,v=255&this._subParamsIdx[f];v-g>0&&o.push(Array.prototype.slice.call(this._subParams,g,v))}return o}reset(){this.length=0,this._subParamsLength=0,this._rejectDigits=!1,this._rejectSubDigits=!1,this._digitIsSub=!1}addParam(o){if(this._digitIsSub=!1,this.length>=this.maxLength)this._rejectDigits=!0;else{if(o<-1)throw new Error("values lesser than -1 are not allowed");this._subParamsIdx[this.length]=this._subParamsLength<<8|this._subParamsLength,this.params[this.length++]=o>n?n:o}}addSubParam(o){if(this._digitIsSub=!0,this.length)if(this._rejectDigits||this._subParamsLength>=this.maxSubParamsLength)this._rejectSubDigits=!0;else{if(o<-1)throw new Error("values lesser than -1 are not allowed");this._subParams[this._subParamsLength++]=o>n?n:o,this._subParamsIdx[this.length-1]++}}hasSubParams(o){return(255&this._subParamsIdx[o])-(this._subParamsIdx[o]>>8)>0}getSubParams(o){const f=this._subParamsIdx[o]>>8,g=255&this._subParamsIdx[o];return g-f>0?this._subParams.subarray(f,g):null}getSubParamsAll(){const o={};for(let f=0;f>8,v=255&this._subParamsIdx[f];v-g>0&&(o[f]=this._subParams.slice(g,v))}return o}addDigit(o){let f;if(this._rejectDigits||!(f=this._digitIsSub?this._subParamsLength:this.length)||this._digitIsSub&&this._rejectSubDigits)return;const g=this._digitIsSub?this._subParams:this.params,v=g[f-1];g[f-1]=~v?Math.min(10*v+o,n):o}}r.Params=h},5741:(A,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.AddonManager=void 0,r.AddonManager=class{constructor(){this._addons=[]}dispose(){for(let n=this._addons.length-1;n>=0;n--)this._addons[n].instance.dispose()}loadAddon(n,h){const p={instance:h,dispose:h.dispose,isDisposed:!1};this._addons.push(p),h.dispose=()=>this._wrappedAddonDispose(p),h.activate(n)}_wrappedAddonDispose(n){if(n.isDisposed)return;let h=-1;for(let p=0;p{Object.defineProperty(r,"__esModule",{value:!0}),r.BufferApiView=void 0;const h=n(3785),p=n(511);r.BufferApiView=class{constructor(o,f){this._buffer=o,this.type=f}init(o){return this._buffer=o,this}get cursorY(){return this._buffer.y}get cursorX(){return this._buffer.x}get viewportY(){return this._buffer.ydisp}get baseY(){return this._buffer.ybase}get length(){return this._buffer.lines.length}getLine(o){const f=this._buffer.lines.get(o);if(f)return new h.BufferLineApiView(f)}getNullCell(){return new p.CellData}}},3785:(A,r,n)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.BufferLineApiView=void 0;const h=n(511);r.BufferLineApiView=class{constructor(p){this._line=p}get isWrapped(){return this._line.isWrapped}get length(){return this._line.length}getCell(p,o){if(!(p<0||p>=this._line.length))return o?(this._line.loadCell(p,o),o):this._line.loadCell(p,new h.CellData)}translateToString(p,o,f){return this._line.translateToString(p,o,f)}}},8285:(A,r,n)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.BufferNamespaceApi=void 0;const h=n(8771),p=n(8460),o=n(844);class f extends o.Disposable{constructor(v){super(),this._core=v,this._onBufferChange=this.register(new p.EventEmitter),this.onBufferChange=this._onBufferChange.event,this._normal=new h.BufferApiView(this._core.buffers.normal,"normal"),this._alternate=new h.BufferApiView(this._core.buffers.alt,"alternate"),this._core.buffers.onBufferActivate((()=>this._onBufferChange.fire(this.active)))}get active(){if(this._core.buffers.active===this._core.buffers.normal)return this.normal;if(this._core.buffers.active===this._core.buffers.alt)return this.alternate;throw new Error("Active buffer is neither normal nor alternate")}get normal(){return this._normal.init(this._core.buffers.normal)}get alternate(){return this._alternate.init(this._core.buffers.alt)}}r.BufferNamespaceApi=f},7975:(A,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.ParserApi=void 0,r.ParserApi=class{constructor(n){this._core=n}registerCsiHandler(n,h){return this._core.registerCsiHandler(n,(p=>h(p.toArray())))}addCsiHandler(n,h){return this.registerCsiHandler(n,h)}registerDcsHandler(n,h){return this._core.registerDcsHandler(n,((p,o)=>h(p,o.toArray())))}addDcsHandler(n,h){return this.registerDcsHandler(n,h)}registerEscHandler(n,h){return this._core.registerEscHandler(n,h)}addEscHandler(n,h){return this.registerEscHandler(n,h)}registerOscHandler(n,h){return this._core.registerOscHandler(n,h)}addOscHandler(n,h){return this.registerOscHandler(n,h)}}},7090:(A,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.UnicodeApi=void 0,r.UnicodeApi=class{constructor(n){this._core=n}register(n){this._core.unicodeService.register(n)}get versions(){return this._core.unicodeService.versions}get activeVersion(){return this._core.unicodeService.activeVersion}set activeVersion(n){this._core.unicodeService.activeVersion=n}}},744:function(A,r,n){var h=this&&this.__decorate||function(e,s,t,i){var l,u=arguments.length,b=u<3?s:i===null?i=Object.getOwnPropertyDescriptor(s,t):i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")b=Reflect.decorate(e,s,t,i);else for(var x=e.length-1;x>=0;x--)(l=e[x])&&(b=(u<3?l(b):u>3?l(s,t,b):l(s,t))||b);return u>3&&b&&Object.defineProperty(s,t,b),b},p=this&&this.__param||function(e,s){return function(t,i){s(t,i,e)}};Object.defineProperty(r,"__esModule",{value:!0}),r.BufferService=r.MINIMUM_ROWS=r.MINIMUM_COLS=void 0;const o=n(8460),f=n(844),g=n(5295),v=n(2585);r.MINIMUM_COLS=2,r.MINIMUM_ROWS=1;let m=r.BufferService=class extends f.Disposable{get buffer(){return this.buffers.active}constructor(e){super(),this.isUserScrolling=!1,this._onResize=this.register(new o.EventEmitter),this.onResize=this._onResize.event,this._onScroll=this.register(new o.EventEmitter),this.onScroll=this._onScroll.event,this.cols=Math.max(e.rawOptions.cols||0,r.MINIMUM_COLS),this.rows=Math.max(e.rawOptions.rows||0,r.MINIMUM_ROWS),this.buffers=this.register(new g.BufferSet(e,this))}resize(e,s){this.cols=e,this.rows=s,this.buffers.resize(e,s),this._onResize.fire({cols:e,rows:s})}reset(){this.buffers.reset(),this.isUserScrolling=!1}scroll(e,s=!1){const t=this.buffer;let i;i=this._cachedBlankLine,i&&i.length===this.cols&&i.getFg(0)===e.fg&&i.getBg(0)===e.bg||(i=t.getBlankLine(e,s),this._cachedBlankLine=i),i.isWrapped=s;const l=t.ybase+t.scrollTop,u=t.ybase+t.scrollBottom;if(t.scrollTop===0){const b=t.lines.isFull;u===t.lines.length-1?b?t.lines.recycle().copyFrom(i):t.lines.push(i.clone()):t.lines.splice(u+1,0,i.clone()),b?this.isUserScrolling&&(t.ydisp=Math.max(t.ydisp-1,0)):(t.ybase++,this.isUserScrolling||t.ydisp++)}else{const b=u-l+1;t.lines.shiftElements(l+1,b-1,-1),t.lines.set(u,i.clone())}this.isUserScrolling||(t.ydisp=t.ybase),this._onScroll.fire(t.ydisp)}scrollLines(e,s,t){const i=this.buffer;if(e<0){if(i.ydisp===0)return;this.isUserScrolling=!0}else e+i.ydisp>=i.ybase&&(this.isUserScrolling=!1);const l=i.ydisp;i.ydisp=Math.max(Math.min(i.ydisp+e,i.ybase),0),l!==i.ydisp&&(s||this._onScroll.fire(i.ydisp))}};r.BufferService=m=h([p(0,v.IOptionsService)],m)},7994:(A,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.CharsetService=void 0,r.CharsetService=class{constructor(){this.glevel=0,this._charsets=[]}reset(){this.charset=void 0,this._charsets=[],this.glevel=0}setgLevel(n){this.glevel=n,this.charset=this._charsets[n]}setgCharset(n,h){this._charsets[n]=h,this.glevel===n&&(this.charset=h)}}},1753:function(A,r,n){var h=this&&this.__decorate||function(i,l,u,b){var x,d=arguments.length,S=d<3?l:b===null?b=Object.getOwnPropertyDescriptor(l,u):b;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")S=Reflect.decorate(i,l,u,b);else for(var R=i.length-1;R>=0;R--)(x=i[R])&&(S=(d<3?x(S):d>3?x(l,u,S):x(l,u))||S);return d>3&&S&&Object.defineProperty(l,u,S),S},p=this&&this.__param||function(i,l){return function(u,b){l(u,b,i)}};Object.defineProperty(r,"__esModule",{value:!0}),r.CoreMouseService=void 0;const o=n(2585),f=n(8460),g=n(844),v={NONE:{events:0,restrict:()=>!1},X10:{events:1,restrict:i=>i.button!==4&&i.action===1&&(i.ctrl=!1,i.alt=!1,i.shift=!1,!0)},VT200:{events:19,restrict:i=>i.action!==32},DRAG:{events:23,restrict:i=>i.action!==32||i.button!==3},ANY:{events:31,restrict:i=>!0}};function m(i,l){let u=(i.ctrl?16:0)|(i.shift?4:0)|(i.alt?8:0);return i.button===4?(u|=64,u|=i.action):(u|=3&i.button,4&i.button&&(u|=64),8&i.button&&(u|=128),i.action===32?u|=32:i.action!==0||l||(u|=3)),u}const e=String.fromCharCode,s={DEFAULT:i=>{const l=[m(i,!1)+32,i.col+32,i.row+32];return l[0]>255||l[1]>255||l[2]>255?"":`\x1B[M${e(l[0])}${e(l[1])}${e(l[2])}`},SGR:i=>{const l=i.action===0&&i.button!==4?"m":"M";return`\x1B[<${m(i,!0)};${i.col};${i.row}${l}`},SGR_PIXELS:i=>{const l=i.action===0&&i.button!==4?"m":"M";return`\x1B[<${m(i,!0)};${i.x};${i.y}${l}`}};let t=r.CoreMouseService=class extends g.Disposable{constructor(i,l){super(),this._bufferService=i,this._coreService=l,this._protocols={},this._encodings={},this._activeProtocol="",this._activeEncoding="",this._lastEvent=null,this._onProtocolChange=this.register(new f.EventEmitter),this.onProtocolChange=this._onProtocolChange.event;for(const u of Object.keys(v))this.addProtocol(u,v[u]);for(const u of Object.keys(s))this.addEncoding(u,s[u]);this.reset()}addProtocol(i,l){this._protocols[i]=l}addEncoding(i,l){this._encodings[i]=l}get activeProtocol(){return this._activeProtocol}get areMouseEventsActive(){return this._protocols[this._activeProtocol].events!==0}set activeProtocol(i){if(!this._protocols[i])throw new Error(`unknown protocol "${i}"`);this._activeProtocol=i,this._onProtocolChange.fire(this._protocols[i].events)}get activeEncoding(){return this._activeEncoding}set activeEncoding(i){if(!this._encodings[i])throw new Error(`unknown encoding "${i}"`);this._activeEncoding=i}reset(){this.activeProtocol="NONE",this.activeEncoding="DEFAULT",this._lastEvent=null}triggerMouseEvent(i){if(i.col<0||i.col>=this._bufferService.cols||i.row<0||i.row>=this._bufferService.rows||i.button===4&&i.action===32||i.button===3&&i.action!==32||i.button!==4&&(i.action===2||i.action===3)||(i.col++,i.row++,i.action===32&&this._lastEvent&&this._equalEvents(this._lastEvent,i,this._activeEncoding==="SGR_PIXELS"))||!this._protocols[this._activeProtocol].restrict(i))return!1;const l=this._encodings[this._activeEncoding](i);return l&&(this._activeEncoding==="DEFAULT"?this._coreService.triggerBinaryEvent(l):this._coreService.triggerDataEvent(l,!0)),this._lastEvent=i,!0}explainEvents(i){return{down:!!(1&i),up:!!(2&i),drag:!!(4&i),move:!!(8&i),wheel:!!(16&i)}}_equalEvents(i,l,u){if(u){if(i.x!==l.x||i.y!==l.y)return!1}else if(i.col!==l.col||i.row!==l.row)return!1;return i.button===l.button&&i.action===l.action&&i.ctrl===l.ctrl&&i.alt===l.alt&&i.shift===l.shift}};r.CoreMouseService=t=h([p(0,o.IBufferService),p(1,o.ICoreService)],t)},6975:function(A,r,n){var h=this&&this.__decorate||function(t,i,l,u){var b,x=arguments.length,d=x<3?i:u===null?u=Object.getOwnPropertyDescriptor(i,l):u;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")d=Reflect.decorate(t,i,l,u);else for(var S=t.length-1;S>=0;S--)(b=t[S])&&(d=(x<3?b(d):x>3?b(i,l,d):b(i,l))||d);return x>3&&d&&Object.defineProperty(i,l,d),d},p=this&&this.__param||function(t,i){return function(l,u){i(l,u,t)}};Object.defineProperty(r,"__esModule",{value:!0}),r.CoreService=void 0;const o=n(1439),f=n(8460),g=n(844),v=n(2585),m=Object.freeze({insertMode:!1}),e=Object.freeze({applicationCursorKeys:!1,applicationKeypad:!1,bracketedPasteMode:!1,origin:!1,reverseWraparound:!1,sendFocus:!1,wraparound:!0});let s=r.CoreService=class extends g.Disposable{constructor(t,i,l){super(),this._bufferService=t,this._logService=i,this._optionsService=l,this.isCursorInitialized=!1,this.isCursorHidden=!1,this._onData=this.register(new f.EventEmitter),this.onData=this._onData.event,this._onUserInput=this.register(new f.EventEmitter),this.onUserInput=this._onUserInput.event,this._onBinary=this.register(new f.EventEmitter),this.onBinary=this._onBinary.event,this._onRequestScrollToBottom=this.register(new f.EventEmitter),this.onRequestScrollToBottom=this._onRequestScrollToBottom.event,this.modes=(0,o.clone)(m),this.decPrivateModes=(0,o.clone)(e)}reset(){this.modes=(0,o.clone)(m),this.decPrivateModes=(0,o.clone)(e)}triggerDataEvent(t,i=!1){if(this._optionsService.rawOptions.disableStdin)return;const l=this._bufferService.buffer;i&&this._optionsService.rawOptions.scrollOnUserInput&&l.ybase!==l.ydisp&&this._onRequestScrollToBottom.fire(),i&&this._onUserInput.fire(),this._logService.debug(`sending data "${t}"`,(()=>t.split("").map((u=>u.charCodeAt(0))))),this._onData.fire(t)}triggerBinaryEvent(t){this._optionsService.rawOptions.disableStdin||(this._logService.debug(`sending binary "${t}"`,(()=>t.split("").map((i=>i.charCodeAt(0))))),this._onBinary.fire(t))}};r.CoreService=s=h([p(0,v.IBufferService),p(1,v.ILogService),p(2,v.IOptionsService)],s)},9074:(A,r,n)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.DecorationService=void 0;const h=n(8055),p=n(8460),o=n(844),f=n(6106);let g=0,v=0;class m extends o.Disposable{get decorations(){return this._decorations.values()}constructor(){super(),this._decorations=new f.SortedList((t=>t?.marker.line)),this._onDecorationRegistered=this.register(new p.EventEmitter),this.onDecorationRegistered=this._onDecorationRegistered.event,this._onDecorationRemoved=this.register(new p.EventEmitter),this.onDecorationRemoved=this._onDecorationRemoved.event,this.register((0,o.toDisposable)((()=>this.reset())))}registerDecoration(t){if(t.marker.isDisposed)return;const i=new e(t);if(i){const l=i.marker.onDispose((()=>i.dispose()));i.onDispose((()=>{i&&(this._decorations.delete(i)&&this._onDecorationRemoved.fire(i),l.dispose())})),this._decorations.insert(i),this._onDecorationRegistered.fire(i)}return i}reset(){for(const t of this._decorations.values())t.dispose();this._decorations.clear()}*getDecorationsAtCell(t,i,l){var u,b,x;let d=0,S=0;for(const R of this._decorations.getKeyIterator(i))d=(u=R.options.x)!==null&&u!==void 0?u:0,S=d+((b=R.options.width)!==null&&b!==void 0?b:1),t>=d&&t{var x,d,S;g=(x=b.options.x)!==null&&x!==void 0?x:0,v=g+((d=b.options.width)!==null&&d!==void 0?d:1),t>=g&&t{Object.defineProperty(r,"__esModule",{value:!0}),r.InstantiationService=r.ServiceCollection=void 0;const h=n(2585),p=n(8343);class o{constructor(...g){this._entries=new Map;for(const[v,m]of g)this.set(v,m)}set(g,v){const m=this._entries.get(g);return this._entries.set(g,v),m}forEach(g){for(const[v,m]of this._entries.entries())g(v,m)}has(g){return this._entries.has(g)}get(g){return this._entries.get(g)}}r.ServiceCollection=o,r.InstantiationService=class{constructor(){this._services=new o,this._services.set(h.IInstantiationService,this)}setService(f,g){this._services.set(f,g)}getService(f){return this._services.get(f)}createInstance(f,...g){const v=(0,p.getServiceDependencies)(f).sort(((s,t)=>s.index-t.index)),m=[];for(const s of v){const t=this._services.get(s.id);if(!t)throw new Error(`[createInstance] ${f.name} depends on UNKNOWN service ${s.id}.`);m.push(t)}const e=v.length>0?v[0].index:g.length;if(g.length!==e)throw new Error(`[createInstance] First service dependency of ${f.name} at position ${e+1} conflicts with ${g.length} static arguments`);return new f(...g,...m)}}},7866:function(A,r,n){var h=this&&this.__decorate||function(e,s,t,i){var l,u=arguments.length,b=u<3?s:i===null?i=Object.getOwnPropertyDescriptor(s,t):i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")b=Reflect.decorate(e,s,t,i);else for(var x=e.length-1;x>=0;x--)(l=e[x])&&(b=(u<3?l(b):u>3?l(s,t,b):l(s,t))||b);return u>3&&b&&Object.defineProperty(s,t,b),b},p=this&&this.__param||function(e,s){return function(t,i){s(t,i,e)}};Object.defineProperty(r,"__esModule",{value:!0}),r.traceCall=r.setTraceLogger=r.LogService=void 0;const o=n(844),f=n(2585),g={trace:f.LogLevelEnum.TRACE,debug:f.LogLevelEnum.DEBUG,info:f.LogLevelEnum.INFO,warn:f.LogLevelEnum.WARN,error:f.LogLevelEnum.ERROR,off:f.LogLevelEnum.OFF};let v,m=r.LogService=class extends o.Disposable{get logLevel(){return this._logLevel}constructor(e){super(),this._optionsService=e,this._logLevel=f.LogLevelEnum.OFF,this._updateLogLevel(),this.register(this._optionsService.onSpecificOptionChange("logLevel",(()=>this._updateLogLevel()))),v=this}_updateLogLevel(){this._logLevel=g[this._optionsService.rawOptions.logLevel]}_evalLazyOptionalParams(e){for(let s=0;sJSON.stringify(b))).join(", ")})`);const u=i.apply(this,l);return v.trace(`GlyphRenderer#${i.name} return`,u),u}}},7302:(A,r,n)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.OptionsService=r.DEFAULT_OPTIONS=void 0;const h=n(8460),p=n(844),o=n(6114);r.DEFAULT_OPTIONS={cols:80,rows:24,cursorBlink:!1,cursorStyle:"block",cursorWidth:1,cursorInactiveStyle:"outline",customGlyphs:!0,drawBoldTextInBrightColors:!0,fastScrollModifier:"alt",fastScrollSensitivity:5,fontFamily:"courier-new, courier, monospace",fontSize:15,fontWeight:"normal",fontWeightBold:"bold",ignoreBracketedPasteMode:!1,lineHeight:1,letterSpacing:0,linkHandler:null,logLevel:"info",logger:null,scrollback:1e3,scrollOnUserInput:!0,scrollSensitivity:1,screenReaderMode:!1,smoothScrollDuration:0,macOptionIsMeta:!1,macOptionClickForcesSelection:!1,minimumContrastRatio:1,disableStdin:!1,allowProposedApi:!1,allowTransparency:!1,tabStopWidth:8,theme:{},rightClickSelectsWord:o.isMac,windowOptions:{},windowsMode:!1,windowsPty:{},wordSeparator:" ()[]{}',\"`",altClickMovesCursor:!0,convertEol:!1,termName:"xterm",cancelEvents:!1,overviewRulerWidth:0};const f=["normal","bold","100","200","300","400","500","600","700","800","900"];class g extends p.Disposable{constructor(m){super(),this._onOptionChange=this.register(new h.EventEmitter),this.onOptionChange=this._onOptionChange.event;const e=Object.assign({},r.DEFAULT_OPTIONS);for(const s in m)if(s in e)try{const t=m[s];e[s]=this._sanitizeAndValidateOption(s,t)}catch(t){console.error(t)}this.rawOptions=e,this.options=Object.assign({},e),this._setupOptions()}onSpecificOptionChange(m,e){return this.onOptionChange((s=>{s===m&&e(this.rawOptions[m])}))}onMultipleOptionChange(m,e){return this.onOptionChange((s=>{m.indexOf(s)!==-1&&e()}))}_setupOptions(){const m=s=>{if(!(s in r.DEFAULT_OPTIONS))throw new Error(`No option with key "${s}"`);return this.rawOptions[s]},e=(s,t)=>{if(!(s in r.DEFAULT_OPTIONS))throw new Error(`No option with key "${s}"`);t=this._sanitizeAndValidateOption(s,t),this.rawOptions[s]!==t&&(this.rawOptions[s]=t,this._onOptionChange.fire(s))};for(const s in this.rawOptions){const t={get:m.bind(this,s),set:e.bind(this,s)};Object.defineProperty(this.options,s,t)}}_sanitizeAndValidateOption(m,e){switch(m){case"cursorStyle":if(e||(e=r.DEFAULT_OPTIONS[m]),!(function(s){return s==="block"||s==="underline"||s==="bar"})(e))throw new Error(`"${e}" is not a valid value for ${m}`);break;case"wordSeparator":e||(e=r.DEFAULT_OPTIONS[m]);break;case"fontWeight":case"fontWeightBold":if(typeof e=="number"&&1<=e&&e<=1e3)break;e=f.includes(e)?e:r.DEFAULT_OPTIONS[m];break;case"cursorWidth":e=Math.floor(e);case"lineHeight":case"tabStopWidth":if(e<1)throw new Error(`${m} cannot be less than 1, value: ${e}`);break;case"minimumContrastRatio":e=Math.max(1,Math.min(21,Math.round(10*e)/10));break;case"scrollback":if((e=Math.min(e,4294967295))<0)throw new Error(`${m} cannot be less than 0, value: ${e}`);break;case"fastScrollSensitivity":case"scrollSensitivity":if(e<=0)throw new Error(`${m} cannot be less than or equal to 0, value: ${e}`);break;case"rows":case"cols":if(!e&&e!==0)throw new Error(`${m} must be numeric, value: ${e}`);break;case"windowsPty":e=e??{}}return e}}r.OptionsService=g},2660:function(A,r,n){var h=this&&this.__decorate||function(g,v,m,e){var s,t=arguments.length,i=t<3?v:e===null?e=Object.getOwnPropertyDescriptor(v,m):e;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(g,v,m,e);else for(var l=g.length-1;l>=0;l--)(s=g[l])&&(i=(t<3?s(i):t>3?s(v,m,i):s(v,m))||i);return t>3&&i&&Object.defineProperty(v,m,i),i},p=this&&this.__param||function(g,v){return function(m,e){v(m,e,g)}};Object.defineProperty(r,"__esModule",{value:!0}),r.OscLinkService=void 0;const o=n(2585);let f=r.OscLinkService=class{constructor(g){this._bufferService=g,this._nextId=1,this._entriesWithId=new Map,this._dataByLinkId=new Map}registerLink(g){const v=this._bufferService.buffer;if(g.id===void 0){const l=v.addMarker(v.ybase+v.y),u={data:g,id:this._nextId++,lines:[l]};return l.onDispose((()=>this._removeMarkerFromLink(u,l))),this._dataByLinkId.set(u.id,u),u.id}const m=g,e=this._getEntryIdKey(m),s=this._entriesWithId.get(e);if(s)return this.addLineToLink(s.id,v.ybase+v.y),s.id;const t=v.addMarker(v.ybase+v.y),i={id:this._nextId++,key:this._getEntryIdKey(m),data:m,lines:[t]};return t.onDispose((()=>this._removeMarkerFromLink(i,t))),this._entriesWithId.set(i.key,i),this._dataByLinkId.set(i.id,i),i.id}addLineToLink(g,v){const m=this._dataByLinkId.get(g);if(m&&m.lines.every((e=>e.line!==v))){const e=this._bufferService.buffer.addMarker(v);m.lines.push(e),e.onDispose((()=>this._removeMarkerFromLink(m,e)))}}getLinkData(g){var v;return(v=this._dataByLinkId.get(g))===null||v===void 0?void 0:v.data}_getEntryIdKey(g){return`${g.id};;${g.uri}`}_removeMarkerFromLink(g,v){const m=g.lines.indexOf(v);m!==-1&&(g.lines.splice(m,1),g.lines.length===0&&(g.data.id!==void 0&&this._entriesWithId.delete(g.key),this._dataByLinkId.delete(g.id)))}};r.OscLinkService=f=h([p(0,o.IBufferService)],f)},8343:(A,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.createDecorator=r.getServiceDependencies=r.serviceRegistry=void 0;const n="di$target",h="di$dependencies";r.serviceRegistry=new Map,r.getServiceDependencies=function(p){return p[h]||[]},r.createDecorator=function(p){if(r.serviceRegistry.has(p))return r.serviceRegistry.get(p);const o=function(f,g,v){if(arguments.length!==3)throw new Error("@IServiceName-decorator can only be used to decorate a parameter");(function(m,e,s){e[n]===e?e[h].push({id:m,index:s}):(e[h]=[{id:m,index:s}],e[n]=e)})(o,f,v)};return o.toString=()=>p,r.serviceRegistry.set(p,o),o}},2585:(A,r,n)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.IDecorationService=r.IUnicodeService=r.IOscLinkService=r.IOptionsService=r.ILogService=r.LogLevelEnum=r.IInstantiationService=r.ICharsetService=r.ICoreService=r.ICoreMouseService=r.IBufferService=void 0;const h=n(8343);var p;r.IBufferService=(0,h.createDecorator)("BufferService"),r.ICoreMouseService=(0,h.createDecorator)("CoreMouseService"),r.ICoreService=(0,h.createDecorator)("CoreService"),r.ICharsetService=(0,h.createDecorator)("CharsetService"),r.IInstantiationService=(0,h.createDecorator)("InstantiationService"),(function(o){o[o.TRACE=0]="TRACE",o[o.DEBUG=1]="DEBUG",o[o.INFO=2]="INFO",o[o.WARN=3]="WARN",o[o.ERROR=4]="ERROR",o[o.OFF=5]="OFF"})(p||(r.LogLevelEnum=p={})),r.ILogService=(0,h.createDecorator)("LogService"),r.IOptionsService=(0,h.createDecorator)("OptionsService"),r.IOscLinkService=(0,h.createDecorator)("OscLinkService"),r.IUnicodeService=(0,h.createDecorator)("UnicodeService"),r.IDecorationService=(0,h.createDecorator)("DecorationService")},1480:(A,r,n)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.UnicodeService=void 0;const h=n(8460),p=n(225);r.UnicodeService=class{constructor(){this._providers=Object.create(null),this._active="",this._onChange=new h.EventEmitter,this.onChange=this._onChange.event;const o=new p.UnicodeV6;this.register(o),this._active=o.version,this._activeProvider=o}dispose(){this._onChange.dispose()}get versions(){return Object.keys(this._providers)}get activeVersion(){return this._active}set activeVersion(o){if(!this._providers[o])throw new Error(`unknown Unicode version "${o}"`);this._active=o,this._activeProvider=this._providers[o],this._onChange.fire(o)}register(o){this._providers[o.version]=o}wcwidth(o){return this._activeProvider.wcwidth(o)}getStringCellWidth(o){let f=0;const g=o.length;for(let v=0;v=g)return f+this.wcwidth(m);const e=o.charCodeAt(v);56320<=e&&e<=57343?m=1024*(m-55296)+e-56320+65536:f+=this.wcwidth(e)}f+=this.wcwidth(m)}return f}}}},T={};function O(A){var r=T[A];if(r!==void 0)return r.exports;var n=T[A]={exports:{}};return k[A].call(n.exports,n,n.exports,O),n.exports}var H={};return(()=>{var A=H;Object.defineProperty(A,"__esModule",{value:!0}),A.Terminal=void 0;const r=O(9042),n=O(3236),h=O(844),p=O(5741),o=O(8285),f=O(7975),g=O(7090),v=["cols","rows"];class m extends h.Disposable{constructor(s){super(),this._core=this.register(new n.Terminal(s)),this._addonManager=this.register(new p.AddonManager),this._publicOptions=Object.assign({},this._core.options);const t=l=>this._core.options[l],i=(l,u)=>{this._checkReadonlyOptions(l),this._core.options[l]=u};for(const l in this._core.options){const u={get:t.bind(this,l),set:i.bind(this,l)};Object.defineProperty(this._publicOptions,l,u)}}_checkReadonlyOptions(s){if(v.includes(s))throw new Error(`Option "${s}" can only be set in the constructor`)}_checkProposedApi(){if(!this._core.optionsService.rawOptions.allowProposedApi)throw new Error("You must set the allowProposedApi option to true to use proposed API")}get onBell(){return this._core.onBell}get onBinary(){return this._core.onBinary}get onCursorMove(){return this._core.onCursorMove}get onData(){return this._core.onData}get onKey(){return this._core.onKey}get onLineFeed(){return this._core.onLineFeed}get onRender(){return this._core.onRender}get onResize(){return this._core.onResize}get onScroll(){return this._core.onScroll}get onSelectionChange(){return this._core.onSelectionChange}get onTitleChange(){return this._core.onTitleChange}get onWriteParsed(){return this._core.onWriteParsed}get element(){return this._core.element}get parser(){return this._parser||(this._parser=new f.ParserApi(this._core)),this._parser}get unicode(){return this._checkProposedApi(),new g.UnicodeApi(this._core)}get textarea(){return this._core.textarea}get rows(){return this._core.rows}get cols(){return this._core.cols}get buffer(){return this._buffer||(this._buffer=this.register(new o.BufferNamespaceApi(this._core))),this._buffer}get markers(){return this._checkProposedApi(),this._core.markers}get modes(){const s=this._core.coreService.decPrivateModes;let t="none";switch(this._core.coreMouseService.activeProtocol){case"X10":t="x10";break;case"VT200":t="vt200";break;case"DRAG":t="drag";break;case"ANY":t="any"}return{applicationCursorKeysMode:s.applicationCursorKeys,applicationKeypadMode:s.applicationKeypad,bracketedPasteMode:s.bracketedPasteMode,insertMode:this._core.coreService.modes.insertMode,mouseTrackingMode:t,originMode:s.origin,reverseWraparoundMode:s.reverseWraparound,sendFocusMode:s.sendFocus,wraparoundMode:s.wraparound}}get options(){return this._publicOptions}set options(s){for(const t in s)this._publicOptions[t]=s[t]}blur(){this._core.blur()}focus(){this._core.focus()}resize(s,t){this._verifyIntegers(s,t),this._core.resize(s,t)}open(s){this._core.open(s)}attachCustomKeyEventHandler(s){this._core.attachCustomKeyEventHandler(s)}registerLinkProvider(s){return this._core.registerLinkProvider(s)}registerCharacterJoiner(s){return this._checkProposedApi(),this._core.registerCharacterJoiner(s)}deregisterCharacterJoiner(s){this._checkProposedApi(),this._core.deregisterCharacterJoiner(s)}registerMarker(s=0){return this._verifyIntegers(s),this._core.registerMarker(s)}registerDecoration(s){var t,i,l;return this._checkProposedApi(),this._verifyPositiveIntegers((t=s.x)!==null&&t!==void 0?t:0,(i=s.width)!==null&&i!==void 0?i:0,(l=s.height)!==null&&l!==void 0?l:0),this._core.registerDecoration(s)}hasSelection(){return this._core.hasSelection()}select(s,t,i){this._verifyIntegers(s,t,i),this._core.select(s,t,i)}getSelection(){return this._core.getSelection()}getSelectionPosition(){return this._core.getSelectionPosition()}clearSelection(){this._core.clearSelection()}selectAll(){this._core.selectAll()}selectLines(s,t){this._verifyIntegers(s,t),this._core.selectLines(s,t)}dispose(){super.dispose()}scrollLines(s){this._verifyIntegers(s),this._core.scrollLines(s)}scrollPages(s){this._verifyIntegers(s),this._core.scrollPages(s)}scrollToTop(){this._core.scrollToTop()}scrollToBottom(){this._core.scrollToBottom()}scrollToLine(s){this._verifyIntegers(s),this._core.scrollToLine(s)}clear(){this._core.clear()}write(s,t){this._core.write(s,t)}writeln(s,t){this._core.write(s),this._core.write(`\r +`,t)}paste(s){this._core.paste(s)}refresh(s,t){this._verifyIntegers(s,t),this._core.refresh(s,t)}reset(){this._core.reset()}clearTextureAtlas(){this._core.clearTextureAtlas()}loadAddon(s){this._addonManager.loadAddon(this,s)}static get strings(){return r}_verifyIntegers(...s){for(const t of s)if(t===1/0||isNaN(t)||t%1!=0)throw new Error("This API only accepts integers")}_verifyPositiveIntegers(...s){for(const t of s)if(t&&(t===1/0||isNaN(t)||t%1!=0||t<0))throw new Error("This API only accepts positive integers")}}A.Terminal=m})(),H})()))})(Tt)),Tt.exports}var In=Nn();const ds="__SSHMANAGER__:",jn=/^ssh\s+(\S+)@(\S+)\s*$/i,Bn=/^ssh\s+-p\s+(\d+)\s+(\S+)@(\S+)\s*$/i,On=/^ssh\s+(\S+)\s*$/i;function Pn({connection:c,visible:_,fontSize:k,fontFamily:T,onStatusChange:O,onQuickConnect:H,credentialToken:A}){const r=W.useRef(null),n=W.useRef(null),h=W.useRef(null),p=W.useRef(null),o=W.useRef(null),f=W.useRef(null),g=W.useRef(null),v=W.useRef(_),m=W.useRef(()=>{}),[e,s]=W.useState("connecting"),[t,i]=W.useState(!1),l=W.useRef(null),u=W.useRef(""),b=W.useRef(""),x=W.useRef(H);x.current=H;const d=W.useRef(A);d.current=A,v.current=_,m.current=()=>{if(!v.current)return;const N=n.current;if(!N)return;h.current?.fit();const y=o.current;!y||y.readyState!==WebSocket.OPEN||y.send(ds+JSON.stringify({type:"resize",cols:N.cols,rows:N.rows}))},W.useEffect(()=>{O?.(e)},[O,e]),W.useEffect(()=>{const N=n.current;if(!N)return;N.options.fontSize=k,N.options.fontFamily=T,h.current?.fit();const y=o.current;!y||y.readyState!==WebSocket.OPEN||y.send(ds+JSON.stringify({type:"resize",cols:N.cols,rows:N.rows}))},[k,T]);const S=W.useCallback(N=>{const y=p.current,E=u.current;!y||!E||(N==="next"?y.findNext(E,{caseSensitive:!1}):y.findPrevious(E,{caseSensitive:!1}))},[]),R=W.useCallback(N=>{if(u.current=N,!N){p.current?.clearActiveDecoration();return}p.current?.findNext(N,{caseSensitive:!1,highlightAll:!0})},[]);return W.useEffect(()=>{let N=!1;const y=new In.Terminal({cursorBlink:!0,fontSize:k,fontFamily:T,theme:{background:"#050816",foreground:"#dbeafe",cursor:"#67e8f9",selectionBackground:"rgba(103, 232, 249, 0.24)"}}),E=new Qi.FitAddon,D=new Mn;y.loadAddon(E),y.loadAddon(D),n.current=y,h.current=E,p.current=D,y.open(r.current),_&&(m.current(),y.focus());const B=y.onData(L=>{const M=b.current;if(L==="\r"||L===` +`){const I=M.trim();let z;if(z=I.match(Bn)){const K=parseInt(z[1]),Y=z[2],X=z[3];b.current="",x.current?.(X,Y,K);return}else if(z=I.match(jn)){const K=z[1],Y=z[2];b.current="",x.current?.(Y,K,22);return}else if(z=I.match(On)){const K=z[1];b.current="",x.current?.(K,"root",22);return}b.current=""}else L===""?b.current=M.slice(0,-1):L.length===1&&L>=" "&&(b.current=M+L);o.current?.readyState===WebSocket.OPEN&&o.current.send(L)}),j=y.onResize(()=>{m.current()});f.current=new ResizeObserver(()=>{m.current()}),f.current.observe(r.current);const P=y.onKey(L=>{L.domEvent.ctrlKey&&L.domEvent.key==="f"&&(L.domEvent.preventDefault(),i(!0),setTimeout(()=>l.current?.focus(),50)),L.domEvent.key==="Escape"&&t&&(i(!1),D.clearActiveDecoration(),y.focus())}),C=()=>{const L=localStorage.getItem("token");if(!L){s("error");return}s("connecting");const M=window.location.protocol==="https:"?"wss:":"ws:",I=d.current;let z=`${M}//${window.location.host}/ws/terminal?connectionId=${c.id}&token=${encodeURIComponent(L)}`;I&&(z+=`&credentialToken=${encodeURIComponent(I)}`);const K=new WebSocket(z);o.current=K,K.onopen=()=>{s("connected"),m.current()},K.onmessage=Y=>{y.write(typeof Y.data=="string"?Y.data:"")},K.onclose=()=>{N||(s("reconnecting"),g.current=window.setTimeout(C,2e3))},K.onerror=()=>{s("error")}};return C(),()=>{N=!0,g.current&&window.clearTimeout(g.current),f.current?.disconnect(),o.current?.close(),B.dispose(),j.dispose(),P.dispose(),y.dispose()}},[c.id]),W.useEffect(()=>{if(!_)return;const N=window.requestAnimationFrame(()=>{m.current(),n.current?.focus()});return()=>window.cancelAnimationFrame(N)},[_]),a.jsxs("div",{className:"relative flex h-full flex-col overflow-hidden bg-black",children:[t?a.jsxs("div",{className:"absolute top-2 right-2 z-10 flex items-center gap-1.5 rounded-lg border border-border-main bg-surface-card px-2.5 py-1.5 shadow-xl animate-in",children:[a.jsx("input",{ref:l,type:"text",placeholder:"搜索...",className:"w-40 bg-transparent px-1.5 py-0.5 text-xs text-content-main outline-none placeholder:text-content-dim",onChange:N=>R(N.target.value),onKeyDown:N=>{N.key==="Enter"&&S("next"),N.key==="Escape"&&(i(!1),p.current?.clearActiveDecoration(),n.current?.focus())}}),a.jsxs("div",{className:"flex items-center gap-0.5",children:[a.jsx("button",{className:"rounded p-1 text-content-dim hover:text-content-main transition",onClick:()=>S("prev"),title:"上一个",children:a.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:a.jsx("path",{d:"m18 15-6-6-6 6"})})}),a.jsx("button",{className:"rounded p-1 text-content-dim hover:text-content-main transition",onClick:()=>S("next"),title:"下一个",children:a.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:a.jsx("path",{d:"m6 9 6 6 6-6"})})}),a.jsx("button",{className:"ml-1 rounded p-1 text-content-dim hover:text-content-main transition",onClick:()=>{i(!1),p.current?.clearActiveDecoration(),n.current?.focus()},title:"关闭",children:a.jsx("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:a.jsx("path",{d:"M18 6 6 18M6 6l12 12"})})})]})]}):null,a.jsx("div",{ref:r,className:"h-full w-full overflow-hidden"})]})}function Hn({open:c,connection:_,onSelect:k,onClose:T}){const[O,H]=W.useState([]);return c?a.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/70 backdrop-blur-sm",onClick:A=>{A.target===A.currentTarget&&T()},children:a.jsxs("div",{className:"flex h-[80vh] w-[80vw] max-w-5xl flex-col overflow-hidden rounded-2xl border border-border-main bg-surface-app shadow-2xl shadow-black/60",children:[a.jsxs("div",{className:"flex shrink-0 items-center justify-between border-b border-border-main bg-surface-panel px-5 py-3.5",children:[a.jsxs("div",{children:[a.jsx("h2",{className:"text-sm font-semibold text-content-main",children:"浏览远程文件"}),a.jsxs("p",{className:"mt-0.5 text-xs text-content-muted",children:["来源:",a.jsx("span",{className:"text-purple-400",children:_.name}),'· 单击选中,双击进入目录,点击底部"确认选择"完成']})]}),a.jsx("button",{className:"rounded-xl p-2 text-content-dim transition hover:bg-surface-muted hover:text-content-main",onClick:T,"aria-label":"关闭",children:a.jsx(At,{size:18})})]}),a.jsx("div",{className:"min-h-0 flex-1 overflow-hidden",children:a.jsx(Ms,{connection:_,selectedFiles:O,onSelectedFilesChange:H,selectionMode:!0,onConfirmSelection:A=>{k(A),T()}})})]})}):null}function us(c){const _=c.length||1,k=Math.round(c.reduce((r,n)=>r+n.progress,0)/_),T=c.every(r=>["success","error","cancelled"].includes(r.status)),O=c.some(r=>r.status==="error"),A=c.some(r=>r.status==="running"||r.status==="queued")?"running":O?"error":T?"success":"queued";return{progress:k,status:A}}function fs({status:c}){return c==="online"?a.jsx("span",{className:"h-2 w-2 shrink-0 rounded-full bg-emerald-500",title:"在线"}):c==="offline"?a.jsx("span",{className:"h-2 w-2 shrink-0 rounded-full bg-red-500",title:"离线"}):c==="checking"?a.jsx("span",{className:"h-2 w-2 shrink-0 animate-pulse rounded-full bg-yellow-400",title:"检测中"}):a.jsx("span",{className:"h-2 w-2 shrink-0 rounded-full bg-content-dim",title:"未知"})}function Fn({open:c,connections:_,connectionStatuses:k,tasks:T,onClose:O,onTasksChange:H}){const[A,r]=W.useState("local"),[n,h]=W.useState(_.length?[_[0].id]:[]),[p,o]=W.useState(null),[f,g]=W.useState("/usr/local/nginx/html"),[v,m]=W.useState(_[0]?.id??0),[e,s]=W.useState("/opt/app/build.tar.gz"),[t,i]=W.useState("/data/deploy/"),[l,u]=W.useState(!1);W.useEffect(()=>{_.length!==0&&m(D=>{if(D>0&&_.some(B=>B.id===D)){const B=k[D];return B==="online"||!B?D:_.find(P=>k[P.id]==="online")?.id??D}return _.find(B=>k[B.id]==="online")?.id??_[0]?.id??0})},[_,k]);const b=W.useMemo(()=>_.find(D=>D.id===v)??null,[_,v]),x=v>0&&b!==null,d=x&&k[v]==="online",S=A==="remote"?n.filter(D=>D!==v):n,R=!x||!d||S.length===0||!e.trim();if(!c)return null;function N(D,B){H(j=>j.map(P=>P.id===D?B(P):P))}async function y(){if(!p?.length||n.length===0)return;const D=p[0],B=String(Date.now()),j={id:B,mode:"LOCAL_TO_MANY",title:`本地文件批量分发 · ${D.name}`,status:"running",progress:0,createdAt:new Date().toLocaleTimeString(),items:n.map(P=>({id:`${B}-${P}`,label:_.find(C=>C.id===P)?.name||String(P),status:"queued",progress:0,message:"等待上传"}))};H(P=>[j,...P]),n.forEach(async P=>{const L=(await Ds(P,f,D,{overwrite:!0})).data.taskId;N(B,I=>({...I,items:I.items.map(z=>z.label===_.find(K=>K.id===P)?.name?{...z,status:"running",message:"正在传输...",taskId:L}:z)}));const M=Rs(L,I=>{N(B,z=>{const K=z.items.map(X=>X.taskId===I.taskId?{...X,progress:I.progress,status:I.status,message:I.error||(I.status==="success"?"上传完成":I.status==="error"?"上传失败":"正在传输...")}:X),Y=us(K);return{...z,items:K,progress:Y.progress,status:Y.status}}),["success","error"].includes(I.status)&&M()})})}async function E(){const D=S;if(!x||!d||D.length===0||!e.trim())return;const B=String(Date.now()),j=e.trim().split("/").filter(Boolean).pop()||e.trim(),P={id:B,mode:"REMOTE_TO_MANY",title:`跨主机分发 · ${j}`,status:"running",progress:0,createdAt:new Date().toLocaleTimeString(),items:D.map(C=>({id:`${B}-${C}`,label:_.find(L=>L.id===C)?.name||String(C),status:"queued",progress:0,message:"等待创建任务"}))};H(C=>[P,...C]),D.forEach(async C=>{const M=(await Ci(v,e,C,t)).data.taskId;N(B,z=>({...z,items:z.items.map(K=>K.label===_.find(Y=>Y.id===C)?.name?{...K,status:"running",message:"正在跨服同步...",taskId:M}:K)}));const I=yi(M,z=>{N(B,K=>{const Y=K.items.map(ne=>ne.taskId===z.taskId?{...ne,progress:z.progress,status:z.status,message:z.error||(z.status==="success"?"同步完成":z.status==="error"?"同步失败":z.status==="cancelled"?"已取消":"正在同步...")}:ne),X=us(Y);return{...K,items:Y,progress:X.progress,status:X.status}}),["success","error","cancelled"].includes(z.status)&&I()})})}return a.jsxs(a.Fragment,{children:[a.jsx(Fe,{title:"文件传输中心",onClose:O,maxWidth:"max-w-7xl",children:a.jsxs("div",{className:"flex h-[74vh] flex-col overflow-hidden rounded-2xl border border-border-main bg-surface-app",children:[a.jsxs("div",{className:"flex gap-8 border-b border-border-main bg-surface-panel px-6 pt-4",children:[a.jsx("button",{className:`border-b-2 pb-3 text-sm font-medium ${A==="local"?"border-blue-500 text-blue-400":"border-transparent text-content-muted"}`,onClick:()=>r("local"),children:a.jsxs("span",{className:"flex items-center gap-2",children:[a.jsx(ft,{size:16}),"本地分发到多台"]})}),a.jsx("button",{className:`border-b-2 pb-3 text-sm font-medium ${A==="remote"?"border-purple-500 text-purple-400":"border-transparent text-content-muted"}`,onClick:()=>{r("remote"),u(!1)},children:a.jsxs("span",{className:"flex items-center gap-2",children:[a.jsx(Ot,{size:16}),"远程分发到多台"]})})]}),a.jsxs("div",{className:"flex flex-1 overflow-hidden",children:[a.jsx("div",{className:"flex flex-1 overflow-hidden border-r border-border-main bg-surface-panel/70 p-6",children:A==="local"?a.jsxs("div",{className:"flex h-full flex-1 gap-6 overflow-hidden",children:[a.jsxs("div",{className:"flex w-1/2 shrink-0 flex-col gap-4 overflow-y-auto border-r border-border-main pr-6",children:[a.jsxs("h3",{className:"flex items-center gap-2 text-sm font-bold text-blue-400",children:[a.jsx(ft,{size:16}),"源配置"]}),a.jsxs("div",{className:"space-y-2",children:[a.jsx("span",{className:"text-sm text-content-muted",children:"选择本地文件"}),a.jsxs("label",{className:"group flex cursor-pointer flex-col items-center justify-center rounded-2xl border-2 border-dashed border-border-main bg-surface-muted/30 px-6 py-8 transition-all hover:border-blue-500 hover:bg-blue-500/5",children:[a.jsx("div",{className:"mb-3 rounded-full bg-surface-muted p-3 shadow-sm transition-colors group-hover:bg-blue-600",children:a.jsx(Mt,{size:24,className:"text-content-muted transition-colors group-hover:text-content-main"})}),a.jsx("span",{className:"text-sm font-medium text-content-main transition-colors group-hover:text-blue-400",children:p&&p.length>0?"重新选择文件":"点击选择本地文件"}),a.jsx("span",{className:"mt-1 max-w-full truncate text-xs text-content-dim",children:p&&p.length>0?a.jsx("span",{className:"text-emerald-400",children:p.length===1?p[0].name:`已选择 ${p.length} 个文件`}):"支持多选文件/文件夹"}),a.jsx("input",{type:"file",multiple:!0,className:"hidden",onChange:D=>o(D.target.files)})]})]}),a.jsxs("label",{className:"space-y-2",children:[a.jsx("span",{className:"text-sm text-content-muted",children:"目标路径"}),a.jsx("input",{className:"w-full rounded-xl border border-border-main bg-surface-muted px-4 py-3 text-sm text-content-main outline-none focus:border-blue-500",value:f,onChange:D=>g(D.target.value)})]}),a.jsxs("div",{className:"mt-auto rounded-xl border border-border-main bg-surface-muted/50 px-4 py-3 text-xs text-content-dim",children:[a.jsx("p",{className:"font-medium text-content-muted",children:"⚡ 并发执行"}),a.jsx("p",{className:"mt-1",children:"分发任务将按浏览器任务并行执行。"})]})]}),a.jsxs("div",{className:"flex min-w-0 flex-1 flex-col gap-4 overflow-hidden",children:[a.jsxs("h3",{className:"flex items-center gap-2 text-sm font-bold text-blue-400",children:[a.jsx(Yt,{size:16}),"目标配置"]}),a.jsxs("div",{className:"flex min-h-0 flex-1 flex-col space-y-2",children:[a.jsxs("div",{className:"flex shrink-0 items-center justify-between",children:[a.jsx("span",{className:"text-sm text-content-muted",children:"目标服务器"}),a.jsx("button",{className:"text-xs text-blue-400",onClick:()=>h(_.filter(D=>k[D.id]==="online").map(D=>D.id)),children:"全选在线"})]}),a.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto rounded-2xl border border-border-main bg-surface-muted p-2",children:_.map(D=>{const B=k[D.id],j=B==="online";return a.jsxs("label",{className:`flex items-center gap-2 rounded-xl px-3 py-2 ${j?"cursor-pointer hover:bg-surface-panel":"cursor-not-allowed opacity-40"}`,children:[a.jsx("input",{type:"checkbox",disabled:!j,checked:n.includes(D.id),onChange:()=>h(P=>P.includes(D.id)?P.filter(C=>C!==D.id):[...P,D.id])}),a.jsx(fs,{status:B}),a.jsx("span",{className:"text-sm text-content-muted",children:D.name})]},D.id)})})]}),a.jsxs("button",{className:`flex w-full items-center justify-center gap-2 rounded-xl py-3 font-medium transition ${!p?.length||n.length===0?"cursor-not-allowed bg-surface-muted text-content-dim":"bg-blue-600 text-white hover:bg-blue-500"}`,disabled:!p?.length||n.length===0,onClick:()=>{y()},children:[a.jsx(ht,{size:18}),p?.length?n.length===0?"请选择目标服务器":"开始分发":"请选择本地文件"]})]})]}):a.jsxs("div",{className:"flex h-full flex-1 gap-6 overflow-hidden",children:[a.jsxs("div",{className:"flex w-1/2 shrink-0 flex-col gap-4 overflow-y-auto border-r border-border-main pr-6",children:[a.jsxs("h3",{className:"flex items-center gap-2 text-sm font-bold text-purple-400",children:[a.jsx(Jt,{size:16}),"源配置"]}),a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx("span",{className:"text-sm text-content-muted",children:"源服务器"}),(()=>{const D=k[v];return D==="online"?a.jsxs("span",{className:"flex items-center gap-1 rounded-full bg-emerald-500/15 px-2 py-0.5 text-xs font-medium text-emerald-400",children:[a.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-400"}),"在线"]}):D==="offline"?a.jsxs("span",{className:"flex items-center gap-1 rounded-full bg-red-500/15 px-2 py-0.5 text-xs font-medium text-red-400",children:[a.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-red-400"}),"离线"]}):D==="checking"?a.jsxs("span",{className:"flex items-center gap-1 rounded-full bg-yellow-500/15 px-2 py-0.5 text-xs font-medium text-yellow-400",children:[a.jsx("span",{className:"h-1.5 w-1.5 animate-pulse rounded-full bg-yellow-400"}),"检测中"]}):a.jsxs("span",{className:"flex items-center gap-1 rounded-full bg-surface-muted/60 px-2 py-0.5 text-xs font-medium text-content-dim",children:[a.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-content-dim"}),"未知"]})})()]}),a.jsxs("select",{className:`w-full rounded-xl border bg-surface-muted px-4 py-3 text-sm text-content-main outline-none ${d?"border-emerald-700":x&&k[v]==="offline"?"border-red-800":"border-border-main"}`,value:v,onChange:D=>{m(Number(D.target.value)),u(!1)},children:[!x&&a.jsx("option",{value:0,disabled:!0,children:"请选择源服务器"}),_.map(D=>{const B=k[D.id],j=B==="online",P=B==="online"||B==="offline"?"● ":B==="checking"?"◔ ":"◦ ";return a.jsxs("option",{value:D.id,disabled:!j,children:[P,D.name,j?"":B==="offline"?" (离线)":" (未知)"]},D.id)})]})]}),a.jsxs("div",{className:"space-y-2",children:[a.jsxs("div",{className:"flex items-center justify-between",children:[a.jsx("span",{className:"text-sm text-content-muted",children:"源文件 / 文件夹路径"}),a.jsxs("button",{className:`flex items-center gap-1 rounded-lg px-2 py-1 text-xs transition ${l?"bg-purple-600 text-white":"border border-border-main text-content-muted hover:border-purple-500 hover:text-purple-400"}`,onClick:()=>u(D=>!D),children:[a.jsx(Tr,{size:12}),l?"收起":"浏览..."]})]}),a.jsx("input",{className:"w-full rounded-xl border border-border-main bg-surface-muted px-4 py-3 font-mono text-sm text-content-main outline-none focus:border-blue-500",value:e,onChange:D=>s(D.target.value),placeholder:"/opt/app"})]}),a.jsxs("div",{className:"mt-auto rounded-xl border border-border-main bg-surface-muted/50 px-4 py-3 text-xs text-content-dim",children:[a.jsx("p",{className:"font-medium text-content-muted",children:"📁 支持文件夹传输"}),a.jsx("p",{className:"mt-1",children:"选择文件夹时,将在目标路径下创建同名子目录并递归传输所有内容。"})]})]}),a.jsxs("div",{className:"flex min-w-0 flex-1 flex-col gap-4 overflow-hidden",children:[a.jsxs("h3",{className:"flex items-center gap-2 text-sm font-bold text-blue-400",children:[a.jsx(Yt,{size:16}),"目标配置"]}),a.jsxs("label",{className:"space-y-2",children:[a.jsx("span",{className:"text-sm text-content-muted",children:"目标目录"}),a.jsx("input",{className:"w-full rounded-xl border border-border-main bg-surface-muted px-4 py-3 text-sm text-content-main outline-none focus:border-blue-500",value:t,onChange:D=>i(D.target.value)})]}),a.jsxs("div",{className:"flex min-h-0 flex-1 flex-col space-y-2",children:[a.jsxs("div",{className:"flex shrink-0 items-center justify-between",children:[a.jsx("span",{className:"text-sm text-content-muted",children:"目标服务器"}),a.jsx("button",{className:"text-xs text-blue-400",onClick:()=>h(A==="remote"?_.filter(D=>D.id!==v&&k[D.id]==="online").map(D=>D.id):_.filter(D=>k[D.id]==="online").map(D=>D.id)),children:"全选在线"})]}),a.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto rounded-2xl border border-border-main bg-surface-muted p-2",children:(A==="remote"?_.filter(D=>D.id!==v):_).map(D=>{const B=k[D.id],j=B==="online";return a.jsxs("label",{className:`flex items-center gap-2 rounded-xl px-3 py-2 ${j?"cursor-pointer hover:bg-surface-panel":"cursor-not-allowed opacity-40"}`,children:[a.jsx("input",{type:"checkbox",disabled:!j,checked:n.includes(D.id),onChange:()=>h(P=>P.includes(D.id)?P.filter(C=>C!==D.id):[...P,D.id])}),a.jsx(fs,{status:B}),a.jsx("span",{className:"text-sm text-content-muted",children:D.name})]},D.id)})})]}),a.jsxs("button",{className:`flex w-full items-center justify-center gap-2 rounded-xl py-3 font-medium transition ${R?"cursor-not-allowed bg-surface-muted text-content-dim":"bg-purple-600 text-white hover:bg-purple-500"}`,disabled:R,onClick:()=>{E()},children:[a.jsx(Jt,{size:18,fill:"currentColor"}),!x||!v?"请选择源服务器":d?e.trim()?S.length===0?"请选择目标服务器":"跨服同步分发":"请填写源路径":"源服务器未在线"]})]})]})}),a.jsxs("div",{className:"flex w-[360px] shrink-0 flex-col bg-surface-app border-l border-border-main",children:[a.jsxs("div",{className:"flex items-center justify-between border-b border-border-main bg-surface-panel px-4 py-4",children:[a.jsxs("h4",{className:"flex items-center gap-2 text-sm font-medium text-content-main",children:[a.jsx(Ss,{size:16,className:"text-content-muted"}),"任务状态"]}),a.jsx("button",{className:"text-xs text-content-dim hover:text-content-muted",onClick:()=>H([]),children:"清空记录"})]}),a.jsx("div",{className:"flex-1 space-y-4 overflow-auto p-3",children:T.length===0?a.jsxs("div",{className:"flex h-full flex-col items-center justify-center text-content-dim",children:[a.jsx(Mt,{size:32,className:"mb-2 opacity-50"}),a.jsx("p",{className:"text-sm",children:"暂无传输任务"})]}):T.map(D=>a.jsxs("div",{className:"overflow-hidden rounded-2xl border border-border-main bg-surface-panel",children:[a.jsxs("div",{className:"border-b border-border-subtle bg-surface-panel/90 p-3",children:[a.jsxs("div",{className:"mb-2 flex items-start justify-between",children:[a.jsx("span",{className:"pr-2 text-sm font-medium text-content-main",children:D.title}),D.status==="running"?a.jsx("button",{className:"shrink-0 text-xs text-red-400 hover:text-red-300",onClick:()=>{D.items.forEach(B=>{B.taskId&&wi(B.taskId)})},children:"取消"}):null]}),a.jsx("div",{className:"text-xs text-content-dim",children:D.createdAt})]}),a.jsx("div",{className:"max-h-48 space-y-1 overflow-auto bg-surface-app/60 p-2",children:D.items.map(B=>a.jsxs("div",{className:"rounded-xl p-2 hover:bg-surface-muted",children:[a.jsxs("div",{className:"flex justify-between text-xs",children:[a.jsx("span",{className:"truncate text-content-muted",children:B.label}),a.jsxs("div",{className:"flex items-center gap-2",children:[a.jsx("span",{className:"text-content-dim",children:B.message}),a.jsxs("span",{className:B.status==="success"?"text-emerald-400":"text-blue-400",children:[B.progress,"%"]})]})]}),a.jsxs("div",{className:"mt-2 flex items-center gap-2",children:[a.jsx("div",{className:"h-1 flex-1 rounded-full bg-surface-muted",children:a.jsx("div",{className:`h-1 rounded-full ${B.status==="success"?"bg-emerald-500":B.status==="error"?"bg-red-500":"bg-blue-400"}`,style:{width:`${B.progress}%`}})}),B.status==="success"?a.jsx(bt,{size:12,className:"text-emerald-500"}):B.status==="running"?a.jsx(pt,{size:12,className:"animate-spin text-blue-400"}):null]})]},B.id))})]},D.id))})]})]})]})}),l&&a.jsx(Hn,{open:l,connection:_.find(D=>D.id===v)??_[0],onSelect:D=>{s(D),u(!1)},onClose:()=>u(!1)})]})}const Wn={idle:{label:"终端未打开",tone:"text-content-muted",dot:"bg-content-muted"},connecting:{label:"WebSocket 连接中",tone:"text-amber-300",dot:"bg-amber-400"},connected:{label:"WebSocket 已连接",tone:"text-emerald-300",dot:"bg-emerald-400"},reconnecting:{label:"连接中断,重试中",tone:"text-amber-300",dot:"bg-amber-400"},error:{label:"WebSocket 连接异常",tone:"text-red-300",dot:"bg-red-400"}},_s={visible:!1,x:0,y:0,targetId:null,targetType:null};function ms(c,_,k){const O=k*36+8,H=8;return{x:Math.max(H,Math.min(c,window.innerWidth-176-H)),y:Math.max(H,Math.min(_,window.innerHeight-O-H))}}function ps(c,_){return Object.fromEntries(Object.entries(c).filter(([k])=>!_.has(Number(k))))}function vs(c){return`${c}-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}const $n={tabs:[],currentTabKey:null,terminalStatuses:{}};function zn(c,_){switch(_.type){case"ACTIVATE_TAB":return c.currentTabKey===_.tabId?c:{...c,currentTabKey:_.tabId};case"OPEN_CONNECTION":{const k=c.tabs.find(T=>T.connection.id===_.connection.id);return k?{...c,currentTabKey:k.tabId,tabs:c.tabs.map(T=>T.tabId===k.tabId?{...T,name:_.connection.name,connection:_.connection}:T)}:{tabs:[...c.tabs,{tabId:_.tabId,name:_.connection.name,connection:_.connection}],currentTabKey:_.tabId,terminalStatuses:{...c.terminalStatuses,[_.tabId]:"connecting"}}}case"CLOSE_TAB":{const k=c.tabs.filter(O=>O.tabId!==_.tabId),T={...c.terminalStatuses};return delete T[_.tabId],{tabs:k,currentTabKey:c.currentTabKey===_.tabId?k[k.length-1]?.tabId??null:c.currentTabKey,terminalStatuses:T}}case"CLOSE_ALL":return{tabs:[],currentTabKey:null,terminalStatuses:{}};case"DUPLICATE_TAB":{const k=c.tabs.findIndex(A=>A.tabId===_.tabId);if(k===-1)return c;const T=c.tabs[k],O={tabId:_.newTabId,name:T.name,connection:T.connection},H=[...c.tabs];return H.splice(k+1,0,O),{tabs:H,currentTabKey:_.newTabId,terminalStatuses:{...c.terminalStatuses,[_.newTabId]:"connecting"}}}case"UPDATE_CONNECTION":return{...c,tabs:c.tabs.map(k=>k.connection.id===_.connectionId?{...k,name:_.name,connection:_.connection}:k)};case"REMOVE_CONNECTIONS":{const k=c.tabs.filter(H=>!_.connectionIds.has(H.connection.id)),T=new Set(c.tabs.filter(H=>_.connectionIds.has(H.connection.id)).map(H=>H.tabId)),O={...c.terminalStatuses};for(const H of T)delete O[H];return{tabs:k,currentTabKey:c.currentTabKey!=null&&T.has(c.currentTabKey)?k[k.length-1]?.tabId??null:c.currentTabKey,terminalStatuses:O}}case"SET_TERMINAL_STATUS":return c.terminalStatuses[_.tabId]===_.status?c:{...c,terminalStatuses:{...c.terminalStatuses,[_.tabId]:_.status}};default:return c}}function Vn({initialTool:c,onLogout:_}){const{user:k,logout:T}=gs(),O=er(),[H,A]=W.useState([]),[r,n]=W.useState("split"),[h,p]=W.useState(null),[o,f]=W.useState(""),[g,v]=W.useReducer(zn,$n),{tabs:m,currentTabKey:e,terminalStatuses:s}=g,[t,i]=W.useState(null),[l,u]=W.useState([]),[b,x]=W.useState(!1),[d,S]=W.useState(!1),[R,N]=W.useState(null),[y,E]=W.useState(null),[D,B]=W.useState(!1),[j,P]=W.useState(c==="transfers"),[C,L]=W.useState(!1),[M,I]=W.useState({}),[z,K]=W.useState(!!k?.passwordChangeRequired),[Y,X]=W.useState([]),[ne,w]=W.useState({}),[F,U]=W.useState({}),[q,ee]=W.useState({}),[J,oe]=W.useState(null),[ue,he]=W.useState(!1),[xe,ie]=W.useState(_s),[ye,$e]=W.useState({visible:!1,x:0,y:0,targetTabId:null}),[me,Se]=wt("ssh-manager.terminal-font-size",14),[we,Ce]=wt("ssh-manager.terminal-font-family",'"IBM Plex Mono", ui-monospace, SFMono-Regular, monospace'),[Ae,pe]=wt("ssh-manager.dark-mode",!0),[Me,Ne]=W.useState(null),[ke,ze]=W.useState("");W.useEffect(()=>{document.documentElement.classList.toggle("dark",Ae)},[Ae]),W.useEffect(()=>{K(!!k?.passwordChangeRequired)},[k?.passwordChangeRequired]),W.useEffect(()=>{const V=new Set(H.map(Q=>Q.id));U(Q=>Object.fromEntries(Object.entries(Q).filter(([Z])=>V.has(Number(Z))))),ee(Q=>Object.fromEntries(Object.entries(Q).filter(([Z])=>V.has(Number(Z)))))},[H]),W.useEffect(()=>{let V=!1;return(async()=>{const Q=await Kt();if(V)return;const Z=Q.data;A(Z);try{const te=await Ti();if(V)return;const re=te.data.nodes.length?te.data:dt(Z),fe=Qt(re,Z);p(fe),JSON.stringify(te.data)!==JSON.stringify(fe)&&await ss(fe)}catch{if(V)return;p(dt(Z))}})(),()=>{V=!0}},[]);const Le=W.useMemo(()=>Ls(h,H),[h,H]),Be=W.useMemo(()=>ui(h,H),[h,H]),le=W.useMemo(()=>[...new Set(m.map(V=>V.connection.id))],[m]),Ie=m.find(V=>V.tabId===e)?.connection??null,it=Ie?s[e??""]??"connecting":"idle",Ve=h?.nodes.some(V=>V.type==="folder")??!1,et=h?.nodes.some(V=>V.type==="folder"&&V.expanded===!1)??!1,St=W.useMemo(()=>y?_i(h,y.id):Zt(h,t),[y,t,h]);W.useEffect(()=>{if(!Ie){w({});return}let V=!1;const Q=async()=>{try{const te=await nr(Ie.id);V||w(te.data)}catch{V||w({})}};Q();const Z=window.setInterval(Q,5e3);return()=>{V=!0,window.clearInterval(Z)}},[Ie?.id]),W.useEffect(()=>{H.length===0||H.some(Q=>{const Z=F[Q.id];return Z==="online"||Z==="offline"||Z==="checking"})||G({connectionList:H})},[H]);function $(V=H){return Qt(h??dt(V),V)}async function G(V){const Q=V?.connectionList??H;if(Q.length===0){U({}),ee({}),oe(null);return}he(!0),oe(null);const Z=Q.map(te=>te.id);U(te=>({...te,...Object.fromEntries(Z.map(re=>[re,"checking"]))}));try{const te=await sr(Z),re=Object.fromEntries(te.data.results.map(be=>[be.connectionId,be])),fe=Object.fromEntries(te.data.results.map(be=>[be.connectionId,be.status]));ee(be=>({...be,...re})),U(be=>({...be,...fe}))}catch(te){if(oe(te.response?.data?.message||"主机状态检测失败"),U(re=>({...re,...Object.fromEntries(Z.map(fe=>[fe,re[fe]==="online"||re[fe]==="offline"?re[fe]:"unknown"]))})),V?.throwOnError)throw te}finally{he(!1)}}async function se(){await G({throwOnError:!0})}async function ce(V){p(V),await ss(V)}function De(V){return h?.nodes.find(Q=>Q.id===V)??null}function ge(){ie(_s)}function Ue(V,Q){W.startTransition(()=>{v({type:"OPEN_CONNECTION",connection:V,tabId:vs(V.id)}),u([]),Q&&i(Q)})}async function ve(V){const Q=hi(h,V);Q&&await ce(Q)}async function Oe(){const V=$();if(!V.nodes.some(re=>re.type==="folder"))return;const Z=V.nodes.some(re=>re.type==="folder"&&re.expanded===!1),te=di(V,Z);te&&await ce(te)}async function je(V){const Q=$(),{layout:Z,nodeId:te}=mi(Q,V.name,V.parentId);i(te),await ce(Z)}async function Ct(V){if(!R)return;const Q=vi($(),R,V);Q&&await ce(Q)}function Us(V){const Q=ms(V.x,V.y,V.nodeType==="folder"?4:2);i(V.nodeId),tt(),ie({visible:!0,x:Q.x,y:Q.y,targetId:V.nodeId,targetType:V.nodeType})}function qs(V,Q,Z){const te=new Map(V.nodes.map(fe=>[fe.id,fe]));let re=te.get(Z)??null;for(;re?.parentId;){if(re.parentId===Q)return!0;re=te.get(re.parentId)??null}return!1}function zt(V,Q,Z){const te=new Set(Z);i(re=>re&&(te.has(re)||qs(V,re,Q)?null:re))}function Ut(V){if(V.length===0)return;const Q=new Set(V);A(Z=>Z.filter(te=>!Q.has(te.id))),v({type:"REMOVE_CONNECTIONS",connectionIds:Q}),u([]),U(Z=>ps(Z,Q)),ee(Z=>ps(Z,Q))}async function Ks(){const{targetId:V,targetType:Q}=xe;if(ge(),!V||!Q)return;if(Q==="folder"){const re=De(V);if(!re||re.type!=="folder")return;N(V);return}const Z=De(V);if(Z?.type!=="connection"||!Z.connectionId)return;const te=H.find(re=>re.id===Z.connectionId)??null;te&&(E(te),x(!0))}async function Vs(){const{targetId:V,targetType:Q}=xe;if(ge(),!V||!Q)return;const Z=$(),te=Z.nodes.find(be=>be.id===V);if(!te)return;const re=gi(Z,V);if(!re)return;if(Q==="connection"){if(te.type!=="connection"||!te.connectionId||!window.confirm("确认永久删除该 SSH 连接?"))return;await Vt(te.connectionId),await ce(re.layout),Ut([te.connectionId]),zt(Z,V,re.deletedNodeIds);return}window.confirm("确认删除该文件夹?将同时删除其下所有子文件夹与连接。")&&te.type==="folder"&&(re.deletedConnectionIds.length>0&&await Promise.all(re.deletedConnectionIds.map(be=>Vt(be))),await ce(re.layout),Ut(re.deletedConnectionIds),zt(Z,V,re.deletedNodeIds))}async function Gs(V){const Q=y,{targetFolderId:Z,...te}=V,fe=(Q?await or(Q.id,te):await ar(te)).data,Ge=(await Kt()).data,Re=Ge.find(Ye=>Ye.id===fe.id)??fe;A(Ge);const nt=pi($(Ge),Re,Z),ot=fi(nt,Re.id);if(await ce(nt),x(!1),E(null),Q){i(ot),v({type:"UPDATE_CONNECTION",connectionId:Re.id,name:Re.name,connection:Re}),ee(Ye=>Ye[Re.id]?{...Ye,[Re.id]:{...Ye[Re.id],connectionName:Re.name}}:Ye);return}Ue(Re,ot)}function Xs(V){v({type:"CLOSE_TAB",tabId:V})}function tt(){$e({visible:!1,x:0,y:0,targetTabId:null})}function Ys(){v({type:"CLOSE_ALL"}),u([]),tt()}function Js(V){const Q=m.find(Z=>Z.tabId===V);Q&&(v({type:"DUPLICATE_TAB",tabId:V,newTabId:vs(Q.connection.id)}),u([]),tt())}function Qs(V){const Q=m.find(Z=>Z.tabId===V);Q&&(Ne(V),ze(Q.name),tt())}function qt(){if(!Me||!ke.trim()){Ne(null);return}const V=m.find(Q=>Q.tabId===Me);if(!V){Ne(null);return}v({type:"UPDATE_CONNECTION",connectionId:V.connection.id,name:ke.trim(),connection:V.connection}),Ne(null)}async function Zs(V){try{const Q=await lr(V);A(Z=>Z.map(te=>te.id===V?{...te,pinned:Q.data.pinned}:te))}catch{}}const yt=Wn[it];return a.jsxs("div",{className:"flex h-screen flex-col overflow-hidden bg-surface-app text-content-main",children:[a.jsxs("header",{className:"flex h-14 items-center justify-between border-b border-border-main bg-surface-panel px-4 shadow-sm",children:[a.jsxs("div",{className:"flex items-center gap-6",children:[a.jsxs("div",{className:"flex items-center gap-2 text-lg font-semibold tracking-wide text-blue-400",children:[a.jsx(lt,{size:22}),a.jsxs("span",{children:["SSH",a.jsx("span",{className:"text-content-main",children:"Manager"})]})]}),a.jsx("div",{className:"h-6 w-px bg-border-main"}),a.jsxs("nav",{className:"flex items-center gap-1",children:[a.jsxs("button",{className:"flex items-center gap-2 rounded-md px-3 py-1.5 text-sm text-content-muted transition hover:bg-surface-muted hover:text-content-main",onClick:()=>O("/dashboard"),children:[a.jsx(ft,{size:16,className:"text-cyan-400"}),"仪表盘"]}),a.jsxs("button",{className:"flex items-center gap-2 rounded-md px-3 py-1.5 text-sm text-content-muted transition hover:bg-surface-muted hover:text-content-main",onClick:()=>B(!0),children:[a.jsx(xs,{size:16,className:"text-purple-400"}),"批量执行"]}),a.jsxs("button",{className:"flex items-center gap-2 rounded-md px-3 py-1.5 text-sm text-content-muted transition hover:bg-surface-muted hover:text-content-main",onClick:()=>P(!0),children:[a.jsx(Mt,{size:16,className:"text-blue-400"}),"传输中心"]}),a.jsxs("button",{className:"flex items-center gap-2 rounded-md px-3 py-1.5 text-sm text-content-muted transition hover:bg-surface-muted hover:text-content-main",onClick:async()=>{try{const V=await Ri(),Q=new Blob([V.data],{type:"text/plain"}),Z=URL.createObjectURL(Q),te=document.createElement("a");te.href=Z,te.download="ssh-config.txt",document.body.appendChild(te),te.click(),document.body.removeChild(te),URL.revokeObjectURL(Z)}catch{}},title:"导出 SSH 配置",children:[a.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",className:"text-amber-400",children:[a.jsx("path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}),a.jsx("polyline",{points:"7 10 12 15 17 10"}),a.jsx("line",{x1:"12",y1:"15",x2:"12",y2:"3"})]}),"导出配置"]}),k?.role==="ROLE_ADMIN"&&a.jsxs("button",{className:"flex items-center gap-2 rounded-md px-3 py-1.5 text-sm text-content-muted transition hover:bg-surface-muted hover:text-content-main",onClick:()=>O("/users"),children:[a.jsx(oi,{size:16,className:"text-emerald-400"}),"用户管理"]})]})]}),a.jsxs("div",{className:"flex items-center gap-3",children:[a.jsx("button",{className:"rounded-full p-2 text-content-muted transition hover:bg-surface-muted hover:text-content-main",onClick:()=>L(!0),children:a.jsx(Yr,{size:18})}),a.jsx("div",{className:"rounded-full border border-border-main bg-surface-app px-3 py-1.5 text-sm text-content-muted",children:k?.displayName||k?.username}),a.jsxs("button",{className:"flex items-center gap-2 rounded-md px-2 py-1 text-sm text-content-muted transition hover:text-red-400",onClick:()=>{T(),_()},children:[a.jsx(Wr,{size:16}),"退出"]})]})]}),a.jsxs("div",{className:"flex flex-1 overflow-hidden",children:[a.jsxs("aside",{className:"flex w-72 shrink-0 flex-col border-r border-border-main bg-surface-panel",children:[a.jsxs("div",{className:"flex flex-col gap-3 border-b border-border-main px-4 py-3",children:[a.jsxs("div",{className:"flex items-center justify-between gap-3",children:[a.jsx("div",{className:"text-sm font-medium text-content-muted",children:"会话管理"}),a.jsxs("div",{className:"flex items-center gap-1",children:[a.jsx("button",{type:"button",className:de("rounded-md p-1.5 text-content-muted transition hover:bg-surface-muted hover:text-content-main",Ve?"":"cursor-not-allowed text-content-dim hover:bg-transparent hover:text-content-dim"),disabled:!Ve,onClick:()=>{Oe()},title:Ve?et?"全部展开":"全部折叠":"暂无文件夹","aria-label":Ve?et?"全部展开":"全部折叠":"暂无文件夹",children:a.jsx(Ss,{size:14})}),a.jsx("button",{type:"button",className:"rounded-md p-1.5 text-content-muted transition hover:bg-surface-muted hover:text-content-main",onClick:()=>{ge(),S(!0)},title:"新建文件夹","aria-label":"新建文件夹",children:a.jsx(Qe,{size:14})}),a.jsx("button",{type:"button",className:"rounded-md p-1.5 text-content-muted transition hover:bg-surface-muted hover:text-content-main",onClick:()=>{ge(),E(null),x(!0)},title:"新建连接","aria-label":"新建连接",children:a.jsx(mt,{size:14})})]})]}),a.jsxs("div",{className:"relative",children:[a.jsx(ys,{size:14,className:"pointer-events-none absolute left-2.5 top-1/2 -translate-y-1/2 text-content-dim"}),a.jsx("input",{className:"w-full rounded-md border border-border-main bg-surface-control py-1.5 pl-8 pr-3 text-xs text-content-main outline-none transition-colors placeholder:text-content-dim focus:border-border-subtle focus:bg-surface-panel",placeholder:"搜索主机...",value:o,onChange:V=>f(V.target.value)})]})]}),a.jsx("div",{className:"flex-1 overflow-auto p-2",onClick:V=>{V.target===V.currentTarget&&(ge(),i(null))},children:a.jsx(Wi,{nodes:Le,activeConnectionId:Ie?.id??null,connectionStatuses:F,openConnectionIds:le,selectedNodeId:t,search:o,onSelectNode:i,onToggleFolder:V=>{ve(V)},onOpenConnection:Ue,onContextMenu:Us,onTogglePin:Zs})})]}),a.jsxs("main",{className:"flex flex-1 flex-col overflow-hidden bg-surface-app",children:[a.jsxs("div",{className:"flex h-10 border-b border-border-main bg-surface-panel",children:[m.length===0?a.jsx("div",{className:"h-full flex-1"}):null,m.map(V=>{const Q=Me===V.tabId;return a.jsxs("button",{className:de("group flex h-full min-w-[160px] max-w-[220px] items-center gap-2 border-r border-border-main px-4 text-sm transition",e===V.tabId?"bg-surface-app text-content-main":"text-content-muted hover:bg-surface-muted hover:text-content-main"),onClick:()=>{Q||v({type:"ACTIVATE_TAB",tabId:V.tabId})},onContextMenu:Z=>{if(Z.preventDefault(),Q)return;ge();const te=ms(Z.clientX,Z.clientY,3);$e({visible:!0,x:te.x,y:te.y,targetTabId:V.tabId})},children:[a.jsx(lt,{size:14,className:e===V.tabId?"text-emerald-400":"text-content-dim"}),Q?a.jsx("input",{className:"flex-1 min-w-0 bg-transparent border-b border-cyan-400 text-sm text-content-main outline-none",value:ke,onChange:Z=>ze(Z.target.value),onBlur:qt,onKeyDown:Z=>{Z.key==="Enter"&&qt(),Z.key==="Escape"&&Ne(null)},onClick:Z=>Z.stopPropagation(),autoFocus:!0}):a.jsx("span",{className:"flex-1 truncate",children:V.name}),a.jsx("span",{className:"opacity-0 transition group-hover:opacity-100",onClick:Z=>{Z.stopPropagation(),Xs(V.tabId)},children:"×"})]},V.tabId)})]}),a.jsxs("div",{className:"flex h-11 items-center justify-between border-b border-border-main bg-surface-panel px-4",children:[a.jsxs("div",{className:"flex min-w-0 items-center gap-4 overflow-hidden text-xs",children:[a.jsxs("div",{className:"flex items-center gap-2 text-content-muted",children:[a.jsx(rr,{size:14,className:"text-emerald-400"}),"CPU: ",ne.cpuUsage??"-","%"]}),a.jsxs("div",{className:"flex items-center gap-2 text-content-muted",children:[a.jsx(jr,{size:14,className:"text-blue-400"}),"MEM: ",st(ne.memUsed??null)," / ",st(ne.memTotal??null)]}),a.jsxs("div",{className:de("flex items-center gap-2 truncate",yt.tone),children:[a.jsx("span",{className:de("h-2 w-2 rounded-full",yt.dot)}),yt.label]})]}),a.jsxs("div",{className:"ml-3 flex items-center rounded-lg border border-border-subtle bg-surface-panel p-1",children:[a.jsx("button",{className:de("rounded-md p-2 transition",r==="terminal"?"bg-surface-muted text-content-main":"text-content-muted hover:text-content-main"),onClick:()=>n("terminal"),title:"终端",children:a.jsx(lt,{size:15})}),a.jsx("button",{className:de("rounded-md p-2 transition",r==="sftp"?"bg-surface-muted text-content-main":"text-content-muted hover:text-content-main"),onClick:()=>n("sftp"),title:"SFTP",children:a.jsx(Qe,{size:15})}),a.jsx("button",{className:de("rounded-md p-2 transition",r==="split"?"bg-surface-muted text-content-main":"text-content-muted hover:text-content-main"),onClick:()=>n(r==="split"?"terminal":"split"),title:r==="split"?"切换到终端":"分屏",children:a.jsx(Qr,{size:15})})]})]}),a.jsx("div",{className:"relative flex-1 overflow-hidden",children:Ie?a.jsxs("div",{className:`flex h-full min-w-0 ${r==="split"?"flex-row":"flex-col"}`,children:[a.jsx("div",{className:de("relative min-w-0 flex-1 overflow-hidden",r==="split"&&"w-1/2 border-r border-border-main",r==="terminal"&&"w-full",r==="sftp"&&"hidden"),children:m.map(V=>{const Q=V.tabId===e&&r!=="sftp";return a.jsx("div",{className:de("absolute inset-0",!Q&&"hidden"),children:a.jsx(Pn,{connection:V.connection,visible:Q,fontSize:me,fontFamily:we,credentialToken:M[V.connection.id],onStatusChange:Z=>{v({type:"SET_TERMINAL_STATUS",tabId:V.tabId,status:Z})},onQuickConnect:async(Z,te,re)=>{try{const fe=window.prompt(`输入 ${te}@${Z} 的密码:`);if(!fe)return;const be=await ir(Z,te,re,fe),{connection:Ge,credentialToken:Re}=be.data,nt=`${Ge.id}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;I(ot=>({...ot,[Ge.id]:Re})),v({type:"OPEN_CONNECTION",connection:Ge,tabId:nt})}catch(fe){console.error("Quick connect failed",fe)}}})},V.tabId)})}),(r==="split"||r==="sftp")&&a.jsx("div",{className:`${r==="split"?"min-w-0 w-1/2":"w-full"} overflow-hidden`,children:a.jsx(Ms,{connection:Ie,selectedFiles:l,onSelectedFilesChange:u})})]}):a.jsxs("div",{className:"absolute inset-0 flex flex-col items-center justify-center text-content-dim",children:[a.jsx(ft,{size:64,className:"mb-4 text-surface-muted"}),a.jsx("h2",{className:"mb-2 text-xl font-medium text-content-muted",children:"欢迎使用 SSH Manager"}),a.jsx("p",{className:"text-sm",children:"请在左侧双击服务器节点建立连接,或先创建新的会话。"}),a.jsxs("button",{className:"mt-6 flex items-center gap-2 rounded-xl border border-blue-600/30 bg-blue-600/10 px-6 py-2 text-blue-300 transition hover:bg-blue-600/20",onClick:()=>{E(null),x(!0)},children:[a.jsx(mt,{size:16}),"创建新连接"]})]})})]})]}),a.jsx(Oi,{open:b,connection:y,folderOptions:Be,initialTargetFolderId:St,onClose:()=>{x(!1),E(null)},onSubmit:Gs}),a.jsx(Pi,{open:d,folderOptions:Be,initialParentId:Zt(h,t),onClose:()=>S(!1),onSubmit:je}),a.jsx(Hi,{open:!!R,initialName:R&&De(R)?.name||"",onClose:()=>N(null),onSubmit:Ct}),a.jsx(ji,{open:D,connections:H,connectionStatuses:F,connectionStatusDetails:q,statusError:J,statusLoading:ue,onRefreshStatuses:se,onClose:()=>B(!1)}),a.jsx(Fn,{open:j,connections:H,connectionStatuses:F,tasks:Y,onTasksChange:X,onClose:()=>P(!1)}),a.jsx(Gi,{open:C,onClose:()=>L(!1),terminalFontSize:me,terminalFontFamily:we,onFontSizeChange:Se,onFontFamilyChange:Ce,darkMode:Ae,onDarkModeChange:pe}),z?a.jsx(Bi,{force:!!k?.passwordChangeRequired,onClose:()=>K(!1)}):null,xe.visible?a.jsx("div",{className:"fixed inset-0 z-50",onClick:ge,children:a.jsxs("div",{className:"absolute min-w-44 rounded-xl border border-border-subtle bg-surface-panel p-1 shadow-2xl shadow-black/40",onClick:V=>V.stopPropagation(),style:{left:xe.x,top:xe.y},children:[xe.targetType==="folder"?a.jsxs(a.Fragment,{children:[a.jsx("button",{className:"flex w-full items-center rounded-lg px-3 py-2 text-left text-sm text-content-main transition hover:bg-surface-muted hover:text-content-main",onClick:()=>{ge(),E(null),x(!0)},children:"新建连接"}),a.jsx("button",{className:"flex w-full items-center rounded-lg px-3 py-2 text-left text-sm text-content-main transition hover:bg-surface-muted hover:text-content-main",onClick:()=>{ge(),S(!0)},children:"新建文件夹"})]}):null,a.jsx("button",{className:"flex w-full items-center rounded-lg px-3 py-2 text-left text-sm text-content-main transition hover:bg-surface-muted hover:text-content-main",onClick:()=>{Ks()},children:"编辑"}),a.jsx("button",{className:"flex w-full items-center rounded-lg px-3 py-2 text-left text-sm text-red-300 transition hover:bg-red-500/10 hover:text-red-200",onClick:()=>{Vs()},children:"删除"})]})}):null,ye.visible?a.jsx("div",{className:"fixed inset-0 z-50",onClick:tt,children:a.jsxs("div",{className:"absolute min-w-40 rounded-xl border border-border-subtle bg-surface-panel p-1 shadow-2xl shadow-black/40",onClick:V=>V.stopPropagation(),style:{left:ye.x,top:ye.y},children:[a.jsx("button",{className:"flex w-full items-center rounded-lg px-3 py-2 text-left text-sm text-content-main transition hover:bg-surface-muted hover:text-content-main",onClick:()=>{ye.targetTabId&&Qs(ye.targetTabId)},children:"重命名"}),a.jsx("button",{className:"flex w-full items-center rounded-lg px-3 py-2 text-left text-sm text-content-main transition hover:bg-surface-muted hover:text-content-main",onClick:()=>{ye.targetTabId&&Js(ye.targetTabId)},children:"复制标签"}),a.jsx("button",{className:"flex w-full items-center rounded-lg px-3 py-2 text-left text-sm text-content-main transition hover:bg-surface-muted hover:text-content-main",onClick:Ys,children:"关闭所有标签"})]})}):null]})}export{Vn as default}; diff --git a/backend/src/main/resources/static/assets/WorkspacePage-DXOU9pbP.css b/backend/src/main/resources/static/assets/WorkspacePage-DXOU9pbP.css new file mode 100644 index 0000000..e35c43f --- /dev/null +++ b/backend/src/main/resources/static/assets/WorkspacePage-DXOU9pbP.css @@ -0,0 +1 @@ +.xterm{cursor:text;position:relative;-moz-user-select:none;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;inset:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility,.xterm .xterm-message{position:absolute;inset:0;z-index:10;color:transparent;pointer-events:none}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:double underline;text-decoration:double underline}.xterm-underline-3{-webkit-text-decoration:wavy underline;text-decoration:wavy underline}.xterm-underline-4{-webkit-text-decoration:dotted underline;text-decoration:dotted underline}.xterm-underline-5{-webkit-text-decoration:dashed underline;text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative} diff --git a/backend/src/main/resources/static/assets/index-B4Duc4SL.css b/backend/src/main/resources/static/assets/index-B4Duc4SL.css new file mode 100644 index 0000000..90e5b9c --- /dev/null +++ b/backend/src/main/resources/static/assets/index-B4Duc4SL.css @@ -0,0 +1 @@ +*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--app-bg-0: #020617;--app-bg-1: #0a1626;--app-card: rgba(15, 23, 42, .72);--app-border: rgba(148, 163, 184, .16);--surface-app: #020617;--surface-panel: #0a1626;--surface-card: #0f172a;--surface-muted: rgba(30, 41, 59, .5);--surface-control: #020617;--border-main: rgba(148, 163, 184, .16);--border-subtle: rgba(148, 163, 184, .08);--text-main: #f1f5f9;--text-muted: #94a3b8;--text-dim: #64748b}html{color-scheme:dark;scrollbar-width:thin;scrollbar-color:rgba(103,232,249,.32) rgba(15,23,42,.72)}body{margin:0;min-width:320px;min-height:100vh;font-family:IBM Plex Sans,ui-sans-serif,system-ui,sans-serif;color:var(--text-main);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:radial-gradient(1200px 600px at 10% -10%,rgba(34,211,238,.16),transparent 60%),radial-gradient(900px 500px at 90% 0%,rgba(59,130,246,.1),transparent 55%),linear-gradient(180deg,var(--app-bg-0),var(--app-bg-1))}*{box-sizing:border-box;scrollbar-width:thin;scrollbar-color:rgba(103,232,249,.28) rgba(15,23,42,.4)}*::-webkit-scrollbar{width:10px;height:10px}*::-webkit-scrollbar-track{background:#0f172a73}*::-webkit-scrollbar-thumb{border:2px solid rgba(15,23,42,.4);border-radius:9999px;background:linear-gradient(180deg,#67e8f957,#22d3ee38)}code,kbd,samp,pre{font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Consolas,monospace}button,input,textarea,select{font:inherit}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.\!visible{visibility:visible!important}.visible{visibility:visible}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.-bottom-0\.5{bottom:-.125rem}.-right-0\.5{right:-.125rem}.-right-1{right:-.25rem}.-top-1{top:-.25rem}.bottom-0{bottom:0}.bottom-1{bottom:.25rem}.bottom-4{bottom:1rem}.bottom-\[14\%\]{bottom:14%}.left-1{left:.25rem}.left-2\.5{left:.625rem}.left-3{left:.75rem}.left-4{left:1rem}.left-\[12\%\]{left:12%}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-4{right:1rem}.right-\[10\%\]{right:10%}.top-0{top:0}.top-1\/2{top:50%}.top-2{top:.5rem}.top-\[18\%\]{top:18%}.top-\[calc\(100\%\+8px\)\]{top:calc(100% + 8px)}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.mx-auto{margin-left:auto;margin-right:auto}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-auto{margin-left:auto}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-auto{margin-top:auto}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-2{height:.5rem}.h-4{height:1rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-96{height:24rem}.h-\[46px\]{height:46px}.h-\[60vh\]{height:60vh}.h-\[70vh\]{height:70vh}.h-\[74vh\]{height:74vh}.h-\[80vh\]{height:80vh}.h-full{height:100%}.h-screen{height:100vh}.max-h-32{max-height:8rem}.max-h-48{max-height:12rem}.max-h-72{max-height:18rem}.max-h-\[92vh\]{max-height:92vh}.min-h-0{min-height:0px}.min-h-14{min-height:3.5rem}.min-h-screen{min-height:100vh}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-14{width:3.5rem}.w-2{width:.5rem}.w-24{width:6rem}.w-28{width:7rem}.w-36{width:9rem}.w-4{width:1rem}.w-40{width:10rem}.w-44{width:11rem}.w-48{width:12rem}.w-56{width:14rem}.w-72{width:18rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-96{width:24rem}.w-\[360px\]{width:360px}.w-\[80vw\]{width:80vw}.w-\[min\(360px\,calc\(100\%-2rem\)\)\]{width:min(360px,calc(100% - 2rem))}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-40{min-width:10rem}.min-w-44{min-width:11rem}.min-w-\[160px\]{min-width:160px}.min-w-\[48rem\]{min-width:48rem}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-\[220px\]{max-width:220px}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow-\[21\]{flex-grow:21}.grow-\[29\]{flex-grow:29}.grow-\[3\]{flex-grow:3}.grow-\[4\]{flex-grow:4}.grow-\[6\]{flex-grow:6}.grow-\[7\]{flex-grow:7}.basis-\[30\%\]{flex-basis:30%}.basis-\[40\%\]{flex-basis:40%}.basis-\[42\%\]{flex-basis:42%}.basis-\[58\%\]{flex-basis:58%}.basis-\[60\%\]{flex-basis:60%}.basis-\[70\%\]{flex-basis:70%}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.resize{resize:both}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.flex-nowrap{flex-wrap:nowrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-\[28px\]{border-radius:28px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-t-2{border-top-width:2px}.border-dashed{border-style:dashed}.border-amber-500\/20{border-color:#f59e0b33}.border-blue-500{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.border-blue-500\/25{border-color:#3b82f640}.border-blue-500\/30{border-color:#3b82f64d}.border-blue-500\/50{border-color:#3b82f680}.border-blue-600\/30{border-color:#2563eb4d}.border-blue-800\/40{border-color:#1e40af66}.border-blue-900\/30{border-color:#1e3a8a4d}.border-blue-900\/50{border-color:#1e3a8a80}.border-border-main{border-color:var(--border-main)}.border-border-subtle{border-color:var(--border-subtle)}.border-cyan-400{--tw-border-opacity: 1;border-color:rgb(34 211 238 / var(--tw-border-opacity, 1))}.border-cyan-400\/30{border-color:#22d3ee4d}.border-cyan-500\/20{border-color:#06b6d433}.border-cyan-500\/40{border-color:#06b6d466}.border-emerald-500{--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity, 1))}.border-emerald-500\/20{border-color:#10b98133}.border-emerald-500\/30{border-color:#10b9814d}.border-emerald-700{--tw-border-opacity: 1;border-color:rgb(4 120 87 / var(--tw-border-opacity, 1))}.border-purple-500{--tw-border-opacity: 1;border-color:rgb(168 85 247 / var(--tw-border-opacity, 1))}.border-purple-900\/50{border-color:#581c8780}.border-red-500\/20{border-color:#ef444433}.border-red-500\/25{border-color:#ef444440}.border-red-800{--tw-border-opacity: 1;border-color:rgb(153 27 27 / var(--tw-border-opacity, 1))}.border-surface-app{border-color:var(--surface-app)}.border-surface-panel{border-color:var(--surface-panel)}.border-transparent{border-color:transparent}.border-t-border-main{border-top-color:var(--border-main)}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-amber-500\/15{background-color:#f59e0b26}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-black\/70{background-color:#000000b3}.bg-blue-400{--tw-bg-opacity: 1;background-color:rgb(96 165 250 / var(--tw-bg-opacity, 1))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-blue-500\/10{background-color:#3b82f61a}.bg-blue-500\/15{background-color:#3b82f626}.bg-blue-500\/20{background-color:#3b82f633}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-blue-600\/10{background-color:#2563eb1a}.bg-blue-600\/20{background-color:#2563eb33}.bg-blue-900\/15{background-color:#1e3a8a26}.bg-blue-950\/20{background-color:#17255433}.bg-blue-950\/80{background-color:#172554cc}.bg-border-main{background-color:var(--border-main)}.bg-content-dim{background-color:var(--text-dim)}.bg-content-muted{background-color:var(--text-muted)}.bg-cyan-500\/10{background-color:#06b6d41a}.bg-cyan-500\/5{background-color:#06b6d40d}.bg-emerald-400{--tw-bg-opacity: 1;background-color:rgb(52 211 153 / var(--tw-bg-opacity, 1))}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-emerald-500\/10{background-color:#10b9811a}.bg-emerald-500\/15{background-color:#10b98126}.bg-emerald-500\/5{background-color:#10b9810d}.bg-purple-600{--tw-bg-opacity: 1;background-color:rgb(147 51 234 / var(--tw-bg-opacity, 1))}.bg-purple-950\/30{background-color:#3b07644d}.bg-red-400{--tw-bg-opacity: 1;background-color:rgb(248 113 113 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-500\/10{background-color:#ef44441a}.bg-red-500\/15{background-color:#ef444426}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-surface-app{background-color:var(--surface-app)}.bg-surface-card{background-color:var(--surface-card)}.bg-surface-control{background-color:var(--surface-control)}.bg-surface-muted{background-color:var(--surface-muted)}.bg-surface-panel{background-color:var(--surface-panel)}.bg-transparent{background-color:transparent}.bg-yellow-400{--tw-bg-opacity: 1;background-color:rgb(250 204 21 / var(--tw-bg-opacity, 1))}.bg-yellow-500\/15{background-color:#eab30826}.bg-\[radial-gradient\(circle_at_top\,rgba\(56\,189\,248\,0\.09\)\,transparent_35\%\)\]{background-image:radial-gradient(circle at top,rgba(56,189,248,.09),transparent 35%)}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-amber-500{--tw-gradient-from: #f59e0b var(--tw-gradient-from-position);--tw-gradient-to: rgb(245 158 11 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-400{--tw-gradient-from: #22d3ee var(--tw-gradient-from-position);--tw-gradient-to: rgb(34 211 238 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-500{--tw-gradient-from: #06b6d4 var(--tw-gradient-from-position);--tw-gradient-to: rgb(6 182 212 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-emerald-500{--tw-gradient-from: #10b981 var(--tw-gradient-from-position);--tw-gradient-to: rgb(16 185 129 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-blue-600{--tw-gradient-to: #2563eb var(--tw-gradient-to-position)}.to-orange-600{--tw-gradient-to: #ea580c var(--tw-gradient-to-position)}.to-teal-600{--tw-gradient-to: #0d9488 var(--tw-gradient-to-position)}.fill-amber-400{fill:#fbbf24}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-1{padding-bottom:.25rem}.pb-3{padding-bottom:.75rem}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-2{padding-right:.5rem}.pr-3{padding-right:.75rem}.pr-6{padding-right:1.5rem}.pr-8{padding-right:2rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.tracking-\[0\.24em\]{letter-spacing:.24em}.tracking-\[0\.4em\]{letter-spacing:.4em}.tracking-tight{letter-spacing:-.025em}.tracking-tighter{letter-spacing:-.05em}.tracking-wide{letter-spacing:.025em}.tracking-widest{letter-spacing:.1em}.text-amber-200{--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.text-amber-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-blue-100{--tw-text-opacity: 1;color:rgb(219 234 254 / var(--tw-text-opacity, 1))}.text-blue-200{--tw-text-opacity: 1;color:rgb(191 219 254 / var(--tw-text-opacity, 1))}.text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-border-main{color:var(--border-main)}.text-content-dim{color:var(--text-dim)}.text-content-main{color:var(--text-main)}.text-content-muted{color:var(--text-muted)}.text-cyan-400{--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.text-cyan-500{--tw-text-opacity: 1;color:rgb(6 182 212 / var(--tw-text-opacity, 1))}.text-cyan-500\/15{color:#06b6d426}.text-cyan-500\/30{color:#06b6d44d}.text-cyan-500\/70{color:#06b6d4b3}.text-cyan-600{--tw-text-opacity: 1;color:rgb(8 145 178 / var(--tw-text-opacity, 1))}.text-emerald-200{--tw-text-opacity: 1;color:rgb(167 243 208 / var(--tw-text-opacity, 1))}.text-emerald-300{--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-emerald-500\/80{color:#10b981cc}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-red-300{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-500\/30{color:#ef44444d}.text-surface-muted{color:var(--surface-muted)}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-400{--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.text-yellow-500{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.accent-cyan-500{accent-color:#06b6d4}.accent-emerald-500{accent-color:#10b981}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_4px_rgba\(16\,185\,129\,0\.5\)\]{--tw-shadow: 0 0 4px rgba(16,185,129,.5);--tw-shadow-colored: 0 0 4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_30px_80px_rgba\(2\,6\,23\,0\.3\)\]{--tw-shadow: 0 30px 80px rgba(2,6,23,.3);--tw-shadow-colored: 0 30px 80px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[inset_0_1px_0_rgba\(148\,163\,184\,0\.08\)\]{--tw-shadow: inset 0 1px 0 rgba(148,163,184,.08);--tw-shadow-colored: inset 0 1px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-amber-900\/30{--tw-shadow-color: rgb(120 53 15 / .3);--tw-shadow: var(--tw-shadow-colored)}.shadow-black\/30{--tw-shadow-color: rgb(0 0 0 / .3);--tw-shadow: var(--tw-shadow-colored)}.shadow-black\/40{--tw-shadow-color: rgb(0 0 0 / .4);--tw-shadow: var(--tw-shadow-colored)}.shadow-black\/60{--tw-shadow-color: rgb(0 0 0 / .6);--tw-shadow: var(--tw-shadow-colored)}.shadow-blue-500\/20{--tw-shadow-color: rgb(59 130 246 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-blue-900\/20{--tw-shadow-color: rgb(30 58 138 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-cyan-900\/20{--tw-shadow-color: rgb(22 78 99 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-cyan-900\/30{--tw-shadow-color: rgb(22 78 99 / .3);--tw-shadow: var(--tw-shadow-colored)}.shadow-emerald-900\/20{--tw-shadow-color: rgb(6 78 59 / .2);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-inset{--tw-ring-inset: inset}.ring-blue-500\/40{--tw-ring-color: rgb(59 130 246 / .4)}.ring-border-main{--tw-ring-color: var(--border-main)}.blur-3xl{--tw-blur: blur(64px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur{--tw-backdrop-blur: blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-xl{--tw-backdrop-blur: blur(24px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[flex-grow\,flex-basis\,border-color\,box-shadow\]{transition-property:flex-grow,flex-basis,border-color,box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}html:not(.dark){color-scheme:light;--app-bg-0: #f1f5f9;--app-bg-1: #e2e8f0;--app-card: rgba(255, 255, 255, .85);--app-border: rgba(148, 163, 184, .25);--surface-app: #f8fafc;--surface-panel: #f1f5f9;--surface-card: #ffffff;--surface-muted: #e2e8f0;--surface-control: #ffffff;--border-main: rgba(148, 163, 184, .3);--border-subtle: rgba(148, 163, 184, .15);--text-main: #1e293b;--text-muted: #475569;--text-dim: #64748b}html:not(.dark) body{color:var(--text-main);background:radial-gradient(1400px 700px at 5% -15%,rgba(34,211,238,.05),transparent 65%),radial-gradient(1000px 600px at 95% 5%,rgba(59,130,246,.04),transparent 55%),linear-gradient(185deg,#f8fafc,#f1f5f9)}html:not(.dark) *{scrollbar-color:rgba(148,163,184,.4) rgba(226,232,240,.6)}html:not(.dark) *::-webkit-scrollbar-track{background:#e2e8f080}html:not(.dark) *::-webkit-scrollbar-thumb{background:linear-gradient(180deg,#94a3b866,#cbd5e14d)}html:not(.dark) .glass-panel,html:not(.dark) .glass-panel-hover{background:#ffffffb3;border-color:#94a3b833}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}.placeholder\:text-content-dim::-moz-placeholder{color:var(--text-dim)}.placeholder\:text-content-dim::placeholder{color:var(--text-dim)}.focus-within\:border-blue-500\/60:focus-within{border-color:#3b82f699}.focus-within\:border-emerald-500\/40:focus-within{border-color:#10b98166}.focus-within\:bg-surface-muted:focus-within{background-color:var(--surface-muted)}.focus-within\:shadow-\[inset_0_1px_0_rgba\(96\,165\,250\,0\.18\)\]:focus-within{--tw-shadow: inset 0 1px 0 rgba(96,165,250,.18);--tw-shadow-colored: inset 0 1px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:scale-110:hover{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-blue-500:hover{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.hover\:border-border-main:hover{border-color:var(--border-main)}.hover\:border-border-subtle:hover{border-color:var(--border-subtle)}.hover\:border-purple-500:hover{--tw-border-opacity: 1;border-color:rgb(168 85 247 / var(--tw-border-opacity, 1))}.hover\:bg-blue-500:hover{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-500\/5:hover{background-color:#3b82f60d}.hover\:bg-blue-600\/20:hover{background-color:#2563eb33}.hover\:bg-purple-500:hover{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.hover\:bg-red-500:hover{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.hover\:bg-red-500\/10:hover{background-color:#ef44441a}.hover\:bg-surface-muted:hover{background-color:var(--surface-muted)}.hover\:bg-surface-panel:hover{background-color:var(--surface-panel)}.hover\:bg-transparent:hover{background-color:transparent}.hover\:from-amber-400:hover{--tw-gradient-from: #fbbf24 var(--tw-gradient-from-position);--tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:from-cyan-400:hover{--tw-gradient-from: #22d3ee var(--tw-gradient-from-position);--tw-gradient-to: rgb(34 211 238 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:from-emerald-400:hover{--tw-gradient-from: #34d399 var(--tw-gradient-from-position);--tw-gradient-to: rgb(52 211 153 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:to-blue-500:hover{--tw-gradient-to: #3b82f6 var(--tw-gradient-to-position)}.hover\:to-orange-500:hover{--tw-gradient-to: #f97316 var(--tw-gradient-to-position)}.hover\:to-teal-500:hover{--tw-gradient-to: #14b8a6 var(--tw-gradient-to-position)}.hover\:text-amber-400:hover{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.hover\:text-blue-300:hover{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.hover\:text-blue-400:hover{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.hover\:text-content-dim:hover{color:var(--text-dim)}.hover\:text-content-main:hover{color:var(--text-main)}.hover\:text-content-muted:hover{color:var(--text-muted)}.hover\:text-cyan-300:hover{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.hover\:text-cyan-400:hover{--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.hover\:text-cyan-500:hover{--tw-text-opacity: 1;color:rgb(6 182 212 / var(--tw-text-opacity, 1))}.hover\:text-emerald-500:hover{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.hover\:text-purple-400:hover{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.hover\:text-red-200:hover{--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.hover\:text-red-300:hover{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.hover\:text-red-400:hover{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.hover\:text-red-500:hover{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.hover\:brightness-150:hover{--tw-brightness: brightness(1.5);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.focus\:border-border-subtle:focus{border-color:var(--border-subtle)}.focus\:border-cyan-500:focus{--tw-border-opacity: 1;border-color:rgb(6 182 212 / var(--tw-border-opacity, 1))}.focus\:bg-surface-panel:focus{background-color:var(--surface-panel)}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.focus\:ring-cyan-500\/20:focus{--tw-ring-color: rgb(6 182 212 / .2)}.focus\:ring-cyan-500\/30:focus{--tw-ring-color: rgb(6 182 212 / .3)}.focus\:ring-offset-surface-app:focus{--tw-ring-offset-color: var(--surface-app)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:text-content-dim:disabled{color:var(--text-dim)}.disabled\:opacity-20:disabled{opacity:.2}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-60:disabled{opacity:.6}.group:focus-within .group-focus-within\:text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.group:focus-within .group-focus-within\:text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.group:focus-within .group-focus-within\:text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.group:hover .group-hover\:inline-block{display:inline-block}.group:hover .group-hover\:flex{display:flex}.group:hover .group-hover\:bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.group:hover .group-hover\:text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.group:hover .group-hover\:text-content-main{color:var(--text-main)}.group:hover .group-hover\:opacity-100{opacity:1}.dark\:bg-\[linear-gradient\(135deg\,rgba\(15\,23\,42\,0\.8\)\,rgba\(2\,6\,23\,1\)\)\]:is(.dark *){background-image:linear-gradient(135deg,#0f172acc,#020617)}.dark\:text-cyan-400:is(.dark *){--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}@media(min-width:768px){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-\[minmax\(0\,1\.4fr\)_120px_minmax\(0\,1fr\)\]{grid-template-columns:minmax(0,1.4fr) 120px minmax(0,1fr)}} diff --git a/backend/src/main/resources/static/assets/index-Z2D8CQl5.js b/backend/src/main/resources/static/assets/index-Z2D8CQl5.js new file mode 100644 index 0000000..546e51a --- /dev/null +++ b/backend/src/main/resources/static/assets/index-Z2D8CQl5.js @@ -0,0 +1,17 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/WorkspacePage-B8Ud6Ns4.js","assets/monitor-D01QXMh7.js","assets/Modal-DTj05goU.js","assets/WorkspacePage-DXOU9pbP.css","assets/UserManagementPage-CpLFrodx.js","assets/DashboardPage-BQqMAlQh.js"])))=>i.map(i=>d[i]); +(function(){const c=document.createElement("link").relList;if(c&&c.supports&&c.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const d of o)if(d.type==="childList")for(const m of d.addedNodes)m.tagName==="LINK"&&m.rel==="modulepreload"&&r(m)}).observe(document,{childList:!0,subtree:!0});function f(o){const d={};return o.integrity&&(d.integrity=o.integrity),o.referrerPolicy&&(d.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?d.credentials="include":o.crossOrigin==="anonymous"?d.credentials="omit":d.credentials="same-origin",d}function r(o){if(o.ep)return;o.ep=!0;const d=f(o);fetch(o.href,d)}})();function xm(u){return u&&u.__esModule&&Object.prototype.hasOwnProperty.call(u,"default")?u.default:u}var uf={exports:{}},Ka={};var Vh;function Gp(){if(Vh)return Ka;Vh=1;var u=Symbol.for("react.transitional.element"),c=Symbol.for("react.fragment");function f(r,o,d){var m=null;if(d!==void 0&&(m=""+d),o.key!==void 0&&(m=""+o.key),"key"in o){d={};for(var p in o)p!=="key"&&(d[p]=o[p])}else d=o;return o=d.ref,{$$typeof:u,type:r,key:m,ref:o!==void 0?o:null,props:d}}return Ka.Fragment=c,Ka.jsx=f,Ka.jsxs=f,Ka}var Zh;function Xp(){return Zh||(Zh=1,uf.exports=Gp()),uf.exports}var q=Xp(),cf={exports:{}},lt={};var Kh;function Qp(){if(Kh)return lt;Kh=1;var u=Symbol.for("react.transitional.element"),c=Symbol.for("react.portal"),f=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),o=Symbol.for("react.profiler"),d=Symbol.for("react.consumer"),m=Symbol.for("react.context"),p=Symbol.for("react.forward_ref"),v=Symbol.for("react.suspense"),y=Symbol.for("react.memo"),b=Symbol.for("react.lazy"),S=Symbol.for("react.activity"),L=Symbol.iterator;function Y(E){return E===null||typeof E!="object"?null:(E=L&&E[L]||E["@@iterator"],typeof E=="function"?E:null)}var _={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},M=Object.assign,C={};function Q(E,B,X){this.props=E,this.context=B,this.refs=C,this.updater=X||_}Q.prototype.isReactComponent={},Q.prototype.setState=function(E,B){if(typeof E!="object"&&typeof E!="function"&&E!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,E,B,"setState")},Q.prototype.forceUpdate=function(E){this.updater.enqueueForceUpdate(this,E,"forceUpdate")};function $(){}$.prototype=Q.prototype;function V(E,B,X){this.props=E,this.context=B,this.refs=C,this.updater=X||_}var I=V.prototype=new $;I.constructor=V,M(I,Q.prototype),I.isPureReactComponent=!0;var at=Array.isArray;function ht(){}var k={H:null,A:null,T:null,S:null},ut=Object.prototype.hasOwnProperty;function _t(E,B,X){var Z=X.ref;return{$$typeof:u,type:E,key:B,ref:Z!==void 0?Z:null,props:X}}function Jt(E,B){return _t(E.type,B,E.props)}function le(E){return typeof E=="object"&&E!==null&&E.$$typeof===u}function wt(E){var B={"=":"=0",":":"=2"};return"$"+E.replace(/[=:]/g,function(X){return B[X]})}var It=/\/+/g;function qt(E,B){return typeof E=="object"&&E!==null&&E.key!=null?wt(""+E.key):B.toString(36)}function Dt(E){switch(E.status){case"fulfilled":return E.value;case"rejected":throw E.reason;default:switch(typeof E.status=="string"?E.then(ht,ht):(E.status="pending",E.then(function(B){E.status==="pending"&&(E.status="fulfilled",E.value=B)},function(B){E.status==="pending"&&(E.status="rejected",E.reason=B)})),E.status){case"fulfilled":return E.value;case"rejected":throw E.reason}}throw E}function U(E,B,X,Z,et){var ct=typeof E;(ct==="undefined"||ct==="boolean")&&(E=null);var gt=!1;if(E===null)gt=!0;else switch(ct){case"bigint":case"string":case"number":gt=!0;break;case"object":switch(E.$$typeof){case u:case c:gt=!0;break;case b:return gt=E._init,U(gt(E._payload),B,X,Z,et)}}if(gt)return et=et(E),gt=Z===""?"."+qt(E,0):Z,at(et)?(X="",gt!=null&&(X=gt.replace(It,"$&/")+"/"),U(et,B,X,"",function(In){return In})):et!=null&&(le(et)&&(et=Jt(et,X+(et.key==null||E&&E.key===et.key?"":(""+et.key).replace(It,"$&/")+"/")+gt)),B.push(et)),1;gt=0;var ne=Z===""?".":Z+":";if(at(E))for(var Ht=0;Ht>>1,bt=U[pt];if(0>>1;pto(X,F))Zo(et,X)?(U[pt]=et,U[Z]=F,pt=Z):(U[pt]=X,U[B]=F,pt=B);else if(Zo(et,F))U[pt]=et,U[Z]=F,pt=Z;else break t}}return G}function o(U,G){var F=U.sortIndex-G.sortIndex;return F!==0?F:U.id-G.id}if(u.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var d=performance;u.unstable_now=function(){return d.now()}}else{var m=Date,p=m.now();u.unstable_now=function(){return m.now()-p}}var v=[],y=[],b=1,S=null,L=3,Y=!1,_=!1,M=!1,C=!1,Q=typeof setTimeout=="function"?setTimeout:null,$=typeof clearTimeout=="function"?clearTimeout:null,V=typeof setImmediate<"u"?setImmediate:null;function I(U){for(var G=f(y);G!==null;){if(G.callback===null)r(y);else if(G.startTime<=U)r(y),G.sortIndex=G.expirationTime,c(v,G);else break;G=f(y)}}function at(U){if(M=!1,I(U),!_)if(f(v)!==null)_=!0,ht||(ht=!0,wt());else{var G=f(y);G!==null&&Dt(at,G.startTime-U)}}var ht=!1,k=-1,ut=5,_t=-1;function Jt(){return C?!0:!(u.unstable_now()-_tU&&Jt());){var pt=S.callback;if(typeof pt=="function"){S.callback=null,L=S.priorityLevel;var bt=pt(S.expirationTime<=U);if(U=u.unstable_now(),typeof bt=="function"){S.callback=bt,I(U),G=!0;break e}S===f(v)&&r(v),I(U)}else r(v);S=f(v)}if(S!==null)G=!0;else{var E=f(y);E!==null&&Dt(at,E.startTime-U),G=!1}}break t}finally{S=null,L=F,Y=!1}G=void 0}}finally{G?wt():ht=!1}}}var wt;if(typeof V=="function")wt=function(){V(le)};else if(typeof MessageChannel<"u"){var It=new MessageChannel,qt=It.port2;It.port1.onmessage=le,wt=function(){qt.postMessage(null)}}else wt=function(){Q(le,0)};function Dt(U,G){k=Q(function(){U(u.unstable_now())},G)}u.unstable_IdlePriority=5,u.unstable_ImmediatePriority=1,u.unstable_LowPriority=4,u.unstable_NormalPriority=3,u.unstable_Profiling=null,u.unstable_UserBlockingPriority=2,u.unstable_cancelCallback=function(U){U.callback=null},u.unstable_forceFrameRate=function(U){0>U||125pt?(U.sortIndex=F,c(y,U),f(v)===null&&U===f(y)&&(M?($(k),k=-1):M=!0,Dt(at,F-pt))):(U.sortIndex=bt,c(v,U),_||Y||(_=!0,ht||(ht=!0,wt()))),U},u.unstable_shouldYield=Jt,u.unstable_wrapCallback=function(U){var G=L;return function(){var F=L;L=G;try{return U.apply(this,arguments)}finally{L=F}}}})(sf)),sf}var $h;function Kp(){return $h||($h=1,ff.exports=Zp()),ff.exports}var of={exports:{}},te={};var Fh;function Jp(){if(Fh)return te;Fh=1;var u=_f();function c(v){var y="https://react.dev/errors/"+v;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(u)}catch(c){console.error(c)}}return u(),of.exports=Jp(),of.exports}var Ph;function $p(){if(Ph)return Ja;Ph=1;var u=Kp(),c=_f(),f=kp();function r(t){var e="https://react.dev/errors/"+t;if(1bt||(t.current=pt[bt],pt[bt]=null,bt--)}function X(t,e){bt++,pt[bt]=t.current,t.current=e}var Z=E(null),et=E(null),ct=E(null),gt=E(null);function ne(t,e){switch(X(ct,e),X(et,t),X(Z,null),e.nodeType){case 9:case 11:t=(t=e.documentElement)&&(t=t.namespaceURI)?hh(t):0;break;default:if(t=e.tagName,e=e.namespaceURI)e=hh(e),t=mh(e,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}B(Z),X(Z,t)}function Ht(){B(Z),B(et),B(ct)}function In(t){t.memoizedState!==null&&X(gt,t);var e=Z.current,l=mh(e,t.type);e!==l&&(X(et,t),X(Z,l))}function au(t){et.current===t&&(B(Z),B(et)),gt.current===t&&(B(gt),Xa._currentValue=F)}var Gi,Xf;function Ll(t){if(Gi===void 0)try{throw Error()}catch(l){var e=l.stack.trim().match(/\n( *(at )?)/);Gi=e&&e[1]||"",Xf=-1)":-1a||g[n]!==O[a]){var w=` +`+g[n].replace(" at new "," at ");return t.displayName&&w.includes("")&&(w=w.replace("",t.displayName)),w}while(1<=n&&0<=a);break}}}finally{Xi=!1,Error.prepareStackTrace=l}return(l=t?t.displayName||t.name:"")?Ll(l):""}function gy(t,e){switch(t.tag){case 26:case 27:case 5:return Ll(t.type);case 16:return Ll("Lazy");case 13:return t.child!==e&&e!==null?Ll("Suspense Fallback"):Ll("Suspense");case 19:return Ll("SuspenseList");case 0:case 15:return Qi(t.type,!1);case 11:return Qi(t.type.render,!1);case 1:return Qi(t.type,!0);case 31:return Ll("Activity");default:return""}}function Qf(t){try{var e="",l=null;do e+=gy(t,l),l=t,t=t.return;while(t);return e}catch(n){return` +Error generating stack: `+n.message+` +`+n.stack}}var Vi=Object.prototype.hasOwnProperty,Zi=u.unstable_scheduleCallback,Ki=u.unstable_cancelCallback,by=u.unstable_shouldYield,Sy=u.unstable_requestPaint,me=u.unstable_now,Ey=u.unstable_getCurrentPriorityLevel,Vf=u.unstable_ImmediatePriority,Zf=u.unstable_UserBlockingPriority,uu=u.unstable_NormalPriority,Ry=u.unstable_LowPriority,Kf=u.unstable_IdlePriority,Ty=u.log,Ay=u.unstable_setDisableYieldValue,ta=null,ye=null;function hl(t){if(typeof Ty=="function"&&Ay(t),ye&&typeof ye.setStrictMode=="function")try{ye.setStrictMode(ta,t)}catch{}}var pe=Math.clz32?Math.clz32:xy,Oy=Math.log,_y=Math.LN2;function xy(t){return t>>>=0,t===0?32:31-(Oy(t)/_y|0)|0}var iu=256,cu=262144,ru=4194304;function ql(t){var e=t&42;if(e!==0)return e;switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return t&261888;case 262144:case 524288:case 1048576:case 2097152:return t&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function fu(t,e,l){var n=t.pendingLanes;if(n===0)return 0;var a=0,i=t.suspendedLanes,s=t.pingedLanes;t=t.warmLanes;var h=n&134217727;return h!==0?(n=h&~i,n!==0?a=ql(n):(s&=h,s!==0?a=ql(s):l||(l=h&~t,l!==0&&(a=ql(l))))):(h=n&~i,h!==0?a=ql(h):s!==0?a=ql(s):l||(l=n&~t,l!==0&&(a=ql(l)))),a===0?0:e!==0&&e!==a&&(e&i)===0&&(i=a&-a,l=e&-e,i>=l||i===32&&(l&4194048)!==0)?e:a}function ea(t,e){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&e)===0}function zy(t,e){switch(t){case 1:case 2:case 4:case 8:case 64:return e+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Jf(){var t=ru;return ru<<=1,(ru&62914560)===0&&(ru=4194304),t}function Ji(t){for(var e=[],l=0;31>l;l++)e.push(t);return e}function la(t,e){t.pendingLanes|=e,e!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function Cy(t,e,l,n,a,i){var s=t.pendingLanes;t.pendingLanes=l,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=l,t.entangledLanes&=l,t.errorRecoveryDisabledLanes&=l,t.shellSuspendCounter=0;var h=t.entanglements,g=t.expirationTimes,O=t.hiddenUpdates;for(l=s&~l;0"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var Hy=/[\n"\\]/g;function _e(t){return t.replace(Hy,function(e){return"\\"+e.charCodeAt(0).toString(16)+" "})}function Ii(t,e,l,n,a,i,s,h){t.name="",s!=null&&typeof s!="function"&&typeof s!="symbol"&&typeof s!="boolean"?t.type=s:t.removeAttribute("type"),e!=null?s==="number"?(e===0&&t.value===""||t.value!=e)&&(t.value=""+Oe(e)):t.value!==""+Oe(e)&&(t.value=""+Oe(e)):s!=="submit"&&s!=="reset"||t.removeAttribute("value"),e!=null?tc(t,s,Oe(e)):l!=null?tc(t,s,Oe(l)):n!=null&&t.removeAttribute("value"),a==null&&i!=null&&(t.defaultChecked=!!i),a!=null&&(t.checked=a&&typeof a!="function"&&typeof a!="symbol"),h!=null&&typeof h!="function"&&typeof h!="symbol"&&typeof h!="boolean"?t.name=""+Oe(h):t.removeAttribute("name")}function is(t,e,l,n,a,i,s,h){if(i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(t.type=i),e!=null||l!=null){if(!(i!=="submit"&&i!=="reset"||e!=null)){Pi(t);return}l=l!=null?""+Oe(l):"",e=e!=null?""+Oe(e):l,h||e===t.value||(t.value=e),t.defaultValue=e}n=n??a,n=typeof n!="function"&&typeof n!="symbol"&&!!n,t.checked=h?t.checked:!!n,t.defaultChecked=!!n,s!=null&&typeof s!="function"&&typeof s!="symbol"&&typeof s!="boolean"&&(t.name=s),Pi(t)}function tc(t,e,l){e==="number"&&du(t.ownerDocument)===t||t.defaultValue===""+l||(t.defaultValue=""+l)}function mn(t,e,l,n){if(t=t.options,e){e={};for(var a=0;a"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),uc=!1;if(Fe)try{var ia={};Object.defineProperty(ia,"passive",{get:function(){uc=!0}}),window.addEventListener("test",ia,ia),window.removeEventListener("test",ia,ia)}catch{uc=!1}var yl=null,ic=null,mu=null;function hs(){if(mu)return mu;var t,e=ic,l=e.length,n,a="value"in yl?yl.value:yl.textContent,i=a.length;for(t=0;t=fa),bs=" ",Ss=!1;function Es(t,e){switch(t){case"keyup":return f0.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Rs(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var gn=!1;function o0(t,e){switch(t){case"compositionend":return Rs(e);case"keypress":return e.which!==32?null:(Ss=!0,bs);case"textInput":return t=e.data,t===bs&&Ss?null:t;default:return null}}function d0(t,e){if(gn)return t==="compositionend"||!oc&&Es(t,e)?(t=hs(),mu=ic=yl=null,gn=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:l,offset:e-t};t=n}t:{for(;l;){if(l.nextSibling){l=l.nextSibling;break t}l=l.parentNode}l=void 0}l=Ns(l)}}function Us(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?Us(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function Ms(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var e=du(t.document);e instanceof t.HTMLIFrameElement;){try{var l=typeof e.contentWindow.location.href=="string"}catch{l=!1}if(l)t=e.contentWindow;else break;e=du(t.document)}return e}function mc(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e&&(e==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||e==="textarea"||t.contentEditable==="true")}var S0=Fe&&"documentMode"in document&&11>=document.documentMode,bn=null,yc=null,ha=null,pc=!1;function ws(t,e,l){var n=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;pc||bn==null||bn!==du(n)||(n=bn,"selectionStart"in n&&mc(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),ha&&da(ha,n)||(ha=n,n=ci(yc,"onSelect"),0>=s,a-=s,Qe=1<<32-pe(e)+a|l<it?(ot=J,J=null):ot=J.sibling;var yt=z(T,J,A[it],H);if(yt===null){J===null&&(J=ot);break}t&&J&&yt.alternate===null&&e(T,J),R=i(yt,R,it),mt===null?W=yt:mt.sibling=yt,mt=yt,J=ot}if(it===A.length)return l(T,J),dt&&Pe(T,it),W;if(J===null){for(;itit?(ot=J,J=null):ot=J.sibling;var jl=z(T,J,yt.value,H);if(jl===null){J===null&&(J=ot);break}t&&J&&jl.alternate===null&&e(T,J),R=i(jl,R,it),mt===null?W=jl:mt.sibling=jl,mt=jl,J=ot}if(yt.done)return l(T,J),dt&&Pe(T,it),W;if(J===null){for(;!yt.done;it++,yt=A.next())yt=j(T,yt.value,H),yt!==null&&(R=i(yt,R,it),mt===null?W=yt:mt.sibling=yt,mt=yt);return dt&&Pe(T,it),W}for(J=n(J);!yt.done;it++,yt=A.next())yt=D(J,T,it,yt.value,H),yt!==null&&(t&&yt.alternate!==null&&J.delete(yt.key===null?it:yt.key),R=i(yt,R,it),mt===null?W=yt:mt.sibling=yt,mt=yt);return t&&J.forEach(function(Yp){return e(T,Yp)}),dt&&Pe(T,it),W}function At(T,R,A,H){if(typeof A=="object"&&A!==null&&A.type===M&&A.key===null&&(A=A.props.children),typeof A=="object"&&A!==null){switch(A.$$typeof){case Y:t:{for(var W=A.key;R!==null;){if(R.key===W){if(W=A.type,W===M){if(R.tag===7){l(T,R.sibling),H=a(R,A.props.children),H.return=T,T=H;break t}}else if(R.elementType===W||typeof W=="object"&&W!==null&&W.$$typeof===ut&&Fl(W)===R.type){l(T,R.sibling),H=a(R,A.props),ba(H,A),H.return=T,T=H;break t}l(T,R);break}else e(T,R);R=R.sibling}A.type===M?(H=Zl(A.props.children,T.mode,H,A.key),H.return=T,T=H):(H=Au(A.type,A.key,A.props,null,T.mode,H),ba(H,A),H.return=T,T=H)}return s(T);case _:t:{for(W=A.key;R!==null;){if(R.key===W)if(R.tag===4&&R.stateNode.containerInfo===A.containerInfo&&R.stateNode.implementation===A.implementation){l(T,R.sibling),H=a(R,A.children||[]),H.return=T,T=H;break t}else{l(T,R);break}else e(T,R);R=R.sibling}H=Tc(A,T.mode,H),H.return=T,T=H}return s(T);case ut:return A=Fl(A),At(T,R,A,H)}if(Dt(A))return K(T,R,A,H);if(wt(A)){if(W=wt(A),typeof W!="function")throw Error(r(150));return A=W.call(A),P(T,R,A,H)}if(typeof A.then=="function")return At(T,R,Du(A),H);if(A.$$typeof===V)return At(T,R,xu(T,A),H);Uu(T,A)}return typeof A=="string"&&A!==""||typeof A=="number"||typeof A=="bigint"?(A=""+A,R!==null&&R.tag===6?(l(T,R.sibling),H=a(R,A),H.return=T,T=H):(l(T,R),H=Rc(A,T.mode,H),H.return=T,T=H),s(T)):l(T,R)}return function(T,R,A,H){try{ga=0;var W=At(T,R,A,H);return Nn=null,W}catch(J){if(J===Cn||J===Cu)throw J;var mt=ge(29,J,null,T.mode);return mt.lanes=H,mt.return=T,mt}}}var Pl=no(!0),ao=no(!1),Sl=!1;function Hc(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Bc(t,e){t=t.updateQueue,e.updateQueue===t&&(e.updateQueue={baseState:t.baseState,firstBaseUpdate:t.firstBaseUpdate,lastBaseUpdate:t.lastBaseUpdate,shared:t.shared,callbacks:null})}function El(t){return{lane:t,tag:0,payload:null,callback:null,next:null}}function Rl(t,e,l){var n=t.updateQueue;if(n===null)return null;if(n=n.shared,(vt&2)!==0){var a=n.pending;return a===null?e.next=e:(e.next=a.next,a.next=e),n.pending=e,e=Tu(t),Gs(t,null,l),e}return Ru(t,n,e,l),Tu(t)}function Sa(t,e,l){if(e=e.updateQueue,e!==null&&(e=e.shared,(l&4194048)!==0)){var n=e.lanes;n&=t.pendingLanes,l|=n,e.lanes=l,$f(t,l)}}function jc(t,e){var l=t.updateQueue,n=t.alternate;if(n!==null&&(n=n.updateQueue,l===n)){var a=null,i=null;if(l=l.firstBaseUpdate,l!==null){do{var s={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};i===null?a=i=s:i=i.next=s,l=l.next}while(l!==null);i===null?a=i=e:i=i.next=e}else a=i=e;l={baseState:n.baseState,firstBaseUpdate:a,lastBaseUpdate:i,shared:n.shared,callbacks:n.callbacks},t.updateQueue=l;return}t=l.lastBaseUpdate,t===null?l.firstBaseUpdate=e:t.next=e,l.lastBaseUpdate=e}var Lc=!1;function Ea(){if(Lc){var t=zn;if(t!==null)throw t}}function Ra(t,e,l,n){Lc=!1;var a=t.updateQueue;Sl=!1;var i=a.firstBaseUpdate,s=a.lastBaseUpdate,h=a.shared.pending;if(h!==null){a.shared.pending=null;var g=h,O=g.next;g.next=null,s===null?i=O:s.next=O,s=g;var w=t.alternate;w!==null&&(w=w.updateQueue,h=w.lastBaseUpdate,h!==s&&(h===null?w.firstBaseUpdate=O:h.next=O,w.lastBaseUpdate=g))}if(i!==null){var j=a.baseState;s=0,w=O=g=null,h=i;do{var z=h.lane&-536870913,D=z!==h.lane;if(D?(st&z)===z:(n&z)===z){z!==0&&z===xn&&(Lc=!0),w!==null&&(w=w.next={lane:0,tag:h.tag,payload:h.payload,callback:null,next:null});t:{var K=t,P=h;z=e;var At=l;switch(P.tag){case 1:if(K=P.payload,typeof K=="function"){j=K.call(At,j,z);break t}j=K;break t;case 3:K.flags=K.flags&-65537|128;case 0:if(K=P.payload,z=typeof K=="function"?K.call(At,j,z):K,z==null)break t;j=S({},j,z);break t;case 2:Sl=!0}}z=h.callback,z!==null&&(t.flags|=64,D&&(t.flags|=8192),D=a.callbacks,D===null?a.callbacks=[z]:D.push(z))}else D={lane:z,tag:h.tag,payload:h.payload,callback:h.callback,next:null},w===null?(O=w=D,g=j):w=w.next=D,s|=z;if(h=h.next,h===null){if(h=a.shared.pending,h===null)break;D=h,h=D.next,D.next=null,a.lastBaseUpdate=D,a.shared.pending=null}}while(!0);w===null&&(g=j),a.baseState=g,a.firstBaseUpdate=O,a.lastBaseUpdate=w,i===null&&(a.shared.lanes=0),xl|=s,t.lanes=s,t.memoizedState=j}}function uo(t,e){if(typeof t!="function")throw Error(r(191,t));t.call(e)}function io(t,e){var l=t.callbacks;if(l!==null)for(t.callbacks=null,t=0;ti?i:8;var s=U.T,h={};U.T=h,nr(t,!1,e,l);try{var g=a(),O=U.S;if(O!==null&&O(h,g),g!==null&&typeof g=="object"&&typeof g.then=="function"){var w=C0(g,n);Oa(t,e,w,Te(t))}else Oa(t,e,n,Te(t))}catch(j){Oa(t,e,{then:function(){},status:"rejected",reason:j},Te())}finally{G.p=i,s!==null&&h.types!==null&&(s.types=h.types),U.T=s}}function H0(){}function er(t,e,l,n){if(t.tag!==5)throw Error(r(476));var a=qo(t).queue;Lo(t,a,e,F,l===null?H0:function(){return Yo(t),l(n)})}function qo(t){var e=t.memoizedState;if(e!==null)return e;e={memoizedState:F,baseState:F,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ll,lastRenderedState:F},next:null};var l={};return e.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ll,lastRenderedState:l},next:null},t.memoizedState=e,t=t.alternate,t!==null&&(t.memoizedState=e),e}function Yo(t){var e=qo(t);e.next===null&&(e=t.alternate.memoizedState),Oa(t,e.next.queue,{},Te())}function lr(){return Ft(Xa)}function Go(){return jt().memoizedState}function Xo(){return jt().memoizedState}function B0(t){for(var e=t.return;e!==null;){switch(e.tag){case 24:case 3:var l=Te();t=El(l);var n=Rl(e,t,l);n!==null&&(oe(n,e,l),Sa(n,e,l)),e={cache:Dc()},t.payload=e;return}e=e.return}}function j0(t,e,l){var n=Te();l={lane:n,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},Xu(t)?Vo(e,l):(l=Sc(t,e,l,n),l!==null&&(oe(l,t,n),Zo(l,e,n)))}function Qo(t,e,l){var n=Te();Oa(t,e,l,n)}function Oa(t,e,l,n){var a={lane:n,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(Xu(t))Vo(e,a);else{var i=t.alternate;if(t.lanes===0&&(i===null||i.lanes===0)&&(i=e.lastRenderedReducer,i!==null))try{var s=e.lastRenderedState,h=i(s,l);if(a.hasEagerState=!0,a.eagerState=h,ve(h,s))return Ru(t,e,a,0),Ot===null&&Eu(),!1}catch{}if(l=Sc(t,e,a,n),l!==null)return oe(l,t,n),Zo(l,e,n),!0}return!1}function nr(t,e,l,n){if(n={lane:2,revertLane:Hr(),gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},Xu(t)){if(e)throw Error(r(479))}else e=Sc(t,l,n,2),e!==null&&oe(e,t,2)}function Xu(t){var e=t.alternate;return t===nt||e!==null&&e===nt}function Vo(t,e){Un=Hu=!0;var l=t.pending;l===null?e.next=e:(e.next=l.next,l.next=e),t.pending=e}function Zo(t,e,l){if((l&4194048)!==0){var n=e.lanes;n&=t.pendingLanes,l|=n,e.lanes=l,$f(t,l)}}var _a={readContext:Ft,use:Lu,useCallback:Ut,useContext:Ut,useEffect:Ut,useImperativeHandle:Ut,useLayoutEffect:Ut,useInsertionEffect:Ut,useMemo:Ut,useReducer:Ut,useRef:Ut,useState:Ut,useDebugValue:Ut,useDeferredValue:Ut,useTransition:Ut,useSyncExternalStore:Ut,useId:Ut,useHostTransitionStatus:Ut,useFormState:Ut,useActionState:Ut,useOptimistic:Ut,useMemoCache:Ut,useCacheRefresh:Ut};_a.useEffectEvent=Ut;var Ko={readContext:Ft,use:Lu,useCallback:function(t,e){return ae().memoizedState=[t,e===void 0?null:e],t},useContext:Ft,useEffect:Co,useImperativeHandle:function(t,e,l){l=l!=null?l.concat([t]):null,Yu(4194308,4,Mo.bind(null,e,t),l)},useLayoutEffect:function(t,e){return Yu(4194308,4,t,e)},useInsertionEffect:function(t,e){Yu(4,2,t,e)},useMemo:function(t,e){var l=ae();e=e===void 0?null:e;var n=t();if(Il){hl(!0);try{t()}finally{hl(!1)}}return l.memoizedState=[n,e],n},useReducer:function(t,e,l){var n=ae();if(l!==void 0){var a=l(e);if(Il){hl(!0);try{l(e)}finally{hl(!1)}}}else a=e;return n.memoizedState=n.baseState=a,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:a},n.queue=t,t=t.dispatch=j0.bind(null,nt,t),[n.memoizedState,t]},useRef:function(t){var e=ae();return t={current:t},e.memoizedState=t},useState:function(t){t=Fc(t);var e=t.queue,l=Qo.bind(null,nt,e);return e.dispatch=l,[t.memoizedState,l]},useDebugValue:Ic,useDeferredValue:function(t,e){var l=ae();return tr(l,t,e)},useTransition:function(){var t=Fc(!1);return t=Lo.bind(null,nt,t.queue,!0,!1),ae().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,e,l){var n=nt,a=ae();if(dt){if(l===void 0)throw Error(r(407));l=l()}else{if(l=e(),Ot===null)throw Error(r(349));(st&127)!==0||ho(n,e,l)}a.memoizedState=l;var i={value:l,getSnapshot:e};return a.queue=i,Co(yo.bind(null,n,i,t),[t]),n.flags|=2048,wn(9,{destroy:void 0},mo.bind(null,n,i,l,e),null),l},useId:function(){var t=ae(),e=Ot.identifierPrefix;if(dt){var l=Ve,n=Qe;l=(n&~(1<<32-pe(n)-1)).toString(32)+l,e="_"+e+"R_"+l,l=Bu++,0<\/script>",i=i.removeChild(i.firstChild);break;case"select":i=typeof n.is=="string"?s.createElement("select",{is:n.is}):s.createElement("select"),n.multiple?i.multiple=!0:n.size&&(i.size=n.size);break;default:i=typeof n.is=="string"?s.createElement(a,{is:n.is}):s.createElement(a)}}i[kt]=e,i[ue]=n;t:for(s=e.child;s!==null;){if(s.tag===5||s.tag===6)i.appendChild(s.stateNode);else if(s.tag!==4&&s.tag!==27&&s.child!==null){s.child.return=s,s=s.child;continue}if(s===e)break t;for(;s.sibling===null;){if(s.return===null||s.return===e)break t;s=s.return}s.sibling.return=s.return,s=s.sibling}e.stateNode=i;t:switch(Pt(i,a,n),a){case"button":case"input":case"select":case"textarea":n=!!n.autoFocus;break t;case"img":n=!0;break t;default:n=!1}n&&al(e)}}return zt(e),vr(e,e.type,t===null?null:t.memoizedProps,e.pendingProps,l),null;case 6:if(t&&e.stateNode!=null)t.memoizedProps!==n&&al(e);else{if(typeof n!="string"&&e.stateNode===null)throw Error(r(166));if(t=ct.current,On(e)){if(t=e.stateNode,l=e.memoizedProps,n=null,a=$t,a!==null)switch(a.tag){case 27:case 5:n=a.memoizedProps}t[kt]=e,t=!!(t.nodeValue===l||n!==null&&n.suppressHydrationWarning===!0||oh(t.nodeValue,l)),t||gl(e,!0)}else t=ri(t).createTextNode(n),t[kt]=e,e.stateNode=t}return zt(e),null;case 31:if(l=e.memoizedState,t===null||t.memoizedState!==null){if(n=On(e),l!==null){if(t===null){if(!n)throw Error(r(318));if(t=e.memoizedState,t=t!==null?t.dehydrated:null,!t)throw Error(r(557));t[kt]=e}else Kl(),(e.flags&128)===0&&(e.memoizedState=null),e.flags|=4;zt(e),t=!1}else l=xc(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=l),t=!0;if(!t)return e.flags&256?(Se(e),e):(Se(e),null);if((e.flags&128)!==0)throw Error(r(558))}return zt(e),null;case 13:if(n=e.memoizedState,t===null||t.memoizedState!==null&&t.memoizedState.dehydrated!==null){if(a=On(e),n!==null&&n.dehydrated!==null){if(t===null){if(!a)throw Error(r(318));if(a=e.memoizedState,a=a!==null?a.dehydrated:null,!a)throw Error(r(317));a[kt]=e}else Kl(),(e.flags&128)===0&&(e.memoizedState=null),e.flags|=4;zt(e),a=!1}else a=xc(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=a),a=!0;if(!a)return e.flags&256?(Se(e),e):(Se(e),null)}return Se(e),(e.flags&128)!==0?(e.lanes=l,e):(l=n!==null,t=t!==null&&t.memoizedState!==null,l&&(n=e.child,a=null,n.alternate!==null&&n.alternate.memoizedState!==null&&n.alternate.memoizedState.cachePool!==null&&(a=n.alternate.memoizedState.cachePool.pool),i=null,n.memoizedState!==null&&n.memoizedState.cachePool!==null&&(i=n.memoizedState.cachePool.pool),i!==a&&(n.flags|=2048)),l!==t&&l&&(e.child.flags|=8192),Ju(e,e.updateQueue),zt(e),null);case 4:return Ht(),t===null&&qr(e.stateNode.containerInfo),zt(e),null;case 10:return tl(e.type),zt(e),null;case 19:if(B(Bt),n=e.memoizedState,n===null)return zt(e),null;if(a=(e.flags&128)!==0,i=n.rendering,i===null)if(a)za(n,!1);else{if(Mt!==0||t!==null&&(t.flags&128)!==0)for(t=e.child;t!==null;){if(i=wu(t),i!==null){for(e.flags|=128,za(n,!1),t=i.updateQueue,e.updateQueue=t,Ju(e,t),e.subtreeFlags=0,t=l,l=e.child;l!==null;)Xs(l,t),l=l.sibling;return X(Bt,Bt.current&1|2),dt&&Pe(e,n.treeForkCount),e.child}t=t.sibling}n.tail!==null&&me()>Pu&&(e.flags|=128,a=!0,za(n,!1),e.lanes=4194304)}else{if(!a)if(t=wu(i),t!==null){if(e.flags|=128,a=!0,t=t.updateQueue,e.updateQueue=t,Ju(e,t),za(n,!0),n.tail===null&&n.tailMode==="hidden"&&!i.alternate&&!dt)return zt(e),null}else 2*me()-n.renderingStartTime>Pu&&l!==536870912&&(e.flags|=128,a=!0,za(n,!1),e.lanes=4194304);n.isBackwards?(i.sibling=e.child,e.child=i):(t=n.last,t!==null?t.sibling=i:e.child=i,n.last=i)}return n.tail!==null?(t=n.tail,n.rendering=t,n.tail=t.sibling,n.renderingStartTime=me(),t.sibling=null,l=Bt.current,X(Bt,a?l&1|2:l&1),dt&&Pe(e,n.treeForkCount),t):(zt(e),null);case 22:case 23:return Se(e),Yc(),n=e.memoizedState!==null,t!==null?t.memoizedState!==null!==n&&(e.flags|=8192):n&&(e.flags|=8192),n?(l&536870912)!==0&&(e.flags&128)===0&&(zt(e),e.subtreeFlags&6&&(e.flags|=8192)):zt(e),l=e.updateQueue,l!==null&&Ju(e,l.retryQueue),l=null,t!==null&&t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(l=t.memoizedState.cachePool.pool),n=null,e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),n!==l&&(e.flags|=2048),t!==null&&B($l),null;case 24:return l=null,t!==null&&(l=t.memoizedState.cache),e.memoizedState.cache!==l&&(e.flags|=2048),tl(Yt),zt(e),null;case 25:return null;case 30:return null}throw Error(r(156,e.tag))}function X0(t,e){switch(Oc(e),e.tag){case 1:return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 3:return tl(Yt),Ht(),t=e.flags,(t&65536)!==0&&(t&128)===0?(e.flags=t&-65537|128,e):null;case 26:case 27:case 5:return au(e),null;case 31:if(e.memoizedState!==null){if(Se(e),e.alternate===null)throw Error(r(340));Kl()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 13:if(Se(e),t=e.memoizedState,t!==null&&t.dehydrated!==null){if(e.alternate===null)throw Error(r(340));Kl()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 19:return B(Bt),null;case 4:return Ht(),null;case 10:return tl(e.type),null;case 22:case 23:return Se(e),Yc(),t!==null&&B($l),t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 24:return tl(Yt),null;case 25:return null;default:return null}}function pd(t,e){switch(Oc(e),e.tag){case 3:tl(Yt),Ht();break;case 26:case 27:case 5:au(e);break;case 4:Ht();break;case 31:e.memoizedState!==null&&Se(e);break;case 13:Se(e);break;case 19:B(Bt);break;case 10:tl(e.type);break;case 22:case 23:Se(e),Yc(),t!==null&&B($l);break;case 24:tl(Yt)}}function Ca(t,e){try{var l=e.updateQueue,n=l!==null?l.lastEffect:null;if(n!==null){var a=n.next;l=a;do{if((l.tag&t)===t){n=void 0;var i=l.create,s=l.inst;n=i(),s.destroy=n}l=l.next}while(l!==a)}}catch(h){Et(e,e.return,h)}}function Ol(t,e,l){try{var n=e.updateQueue,a=n!==null?n.lastEffect:null;if(a!==null){var i=a.next;n=i;do{if((n.tag&t)===t){var s=n.inst,h=s.destroy;if(h!==void 0){s.destroy=void 0,a=e;var g=l,O=h;try{O()}catch(w){Et(a,g,w)}}}n=n.next}while(n!==i)}}catch(w){Et(e,e.return,w)}}function vd(t){var e=t.updateQueue;if(e!==null){var l=t.stateNode;try{io(e,l)}catch(n){Et(t,t.return,n)}}}function gd(t,e,l){l.props=tn(t.type,t.memoizedProps),l.state=t.memoizedState;try{l.componentWillUnmount()}catch(n){Et(t,e,n)}}function Na(t,e){try{var l=t.ref;if(l!==null){switch(t.tag){case 26:case 27:case 5:var n=t.stateNode;break;case 30:n=t.stateNode;break;default:n=t.stateNode}typeof l=="function"?t.refCleanup=l(n):l.current=n}}catch(a){Et(t,e,a)}}function Ze(t,e){var l=t.ref,n=t.refCleanup;if(l!==null)if(typeof n=="function")try{n()}catch(a){Et(t,e,a)}finally{t.refCleanup=null,t=t.alternate,t!=null&&(t.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(a){Et(t,e,a)}else l.current=null}function bd(t){var e=t.type,l=t.memoizedProps,n=t.stateNode;try{t:switch(e){case"button":case"input":case"select":case"textarea":l.autoFocus&&n.focus();break t;case"img":l.src?n.src=l.src:l.srcSet&&(n.srcset=l.srcSet)}}catch(a){Et(t,t.return,a)}}function gr(t,e,l){try{var n=t.stateNode;sp(n,t.type,l,e),n[ue]=e}catch(a){Et(t,t.return,a)}}function Sd(t){return t.tag===5||t.tag===3||t.tag===26||t.tag===27&&Ul(t.type)||t.tag===4}function br(t){t:for(;;){for(;t.sibling===null;){if(t.return===null||Sd(t.return))return null;t=t.return}for(t.sibling.return=t.return,t=t.sibling;t.tag!==5&&t.tag!==6&&t.tag!==18;){if(t.tag===27&&Ul(t.type)||t.flags&2||t.child===null||t.tag===4)continue t;t.child.return=t,t=t.child}if(!(t.flags&2))return t.stateNode}}function Sr(t,e,l){var n=t.tag;if(n===5||n===6)t=t.stateNode,e?(l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l).insertBefore(t,e):(e=l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l,e.appendChild(t),l=l._reactRootContainer,l!=null||e.onclick!==null||(e.onclick=$e));else if(n!==4&&(n===27&&Ul(t.type)&&(l=t.stateNode,e=null),t=t.child,t!==null))for(Sr(t,e,l),t=t.sibling;t!==null;)Sr(t,e,l),t=t.sibling}function ku(t,e,l){var n=t.tag;if(n===5||n===6)t=t.stateNode,e?l.insertBefore(t,e):l.appendChild(t);else if(n!==4&&(n===27&&Ul(t.type)&&(l=t.stateNode),t=t.child,t!==null))for(ku(t,e,l),t=t.sibling;t!==null;)ku(t,e,l),t=t.sibling}function Ed(t){var e=t.stateNode,l=t.memoizedProps;try{for(var n=t.type,a=e.attributes;a.length;)e.removeAttributeNode(a[0]);Pt(e,n,l),e[kt]=t,e[ue]=l}catch(i){Et(t,t.return,i)}}var ul=!1,Qt=!1,Er=!1,Rd=typeof WeakSet=="function"?WeakSet:Set,Kt=null;function Q0(t,e){if(t=t.containerInfo,Xr=yi,t=Ms(t),mc(t)){if("selectionStart"in t)var l={start:t.selectionStart,end:t.selectionEnd};else t:{l=(l=t.ownerDocument)&&l.defaultView||window;var n=l.getSelection&&l.getSelection();if(n&&n.rangeCount!==0){l=n.anchorNode;var a=n.anchorOffset,i=n.focusNode;n=n.focusOffset;try{l.nodeType,i.nodeType}catch{l=null;break t}var s=0,h=-1,g=-1,O=0,w=0,j=t,z=null;e:for(;;){for(var D;j!==l||a!==0&&j.nodeType!==3||(h=s+a),j!==i||n!==0&&j.nodeType!==3||(g=s+n),j.nodeType===3&&(s+=j.nodeValue.length),(D=j.firstChild)!==null;)z=j,j=D;for(;;){if(j===t)break e;if(z===l&&++O===a&&(h=s),z===i&&++w===n&&(g=s),(D=j.nextSibling)!==null)break;j=z,z=j.parentNode}j=D}l=h===-1||g===-1?null:{start:h,end:g}}else l=null}l=l||{start:0,end:0}}else l=null;for(Qr={focusedElem:t,selectionRange:l},yi=!1,Kt=e;Kt!==null;)if(e=Kt,t=e.child,(e.subtreeFlags&1028)!==0&&t!==null)t.return=e,Kt=t;else for(;Kt!==null;){switch(e=Kt,i=e.alternate,t=e.flags,e.tag){case 0:if((t&4)!==0&&(t=e.updateQueue,t=t!==null?t.events:null,t!==null))for(l=0;l title"))),Pt(i,n,l),i[kt]=t,Zt(i),n=i;break t;case"link":var s=zh("link","href",a).get(n+(l.href||""));if(s){for(var h=0;hAt&&(s=At,At=P,P=s);var T=Ds(h,P),R=Ds(h,At);if(T&&R&&(D.rangeCount!==1||D.anchorNode!==T.node||D.anchorOffset!==T.offset||D.focusNode!==R.node||D.focusOffset!==R.offset)){var A=j.createRange();A.setStart(T.node,T.offset),D.removeAllRanges(),P>At?(D.addRange(A),D.extend(R.node,R.offset)):(A.setEnd(R.node,R.offset),D.addRange(A))}}}}for(j=[],D=h;D=D.parentNode;)D.nodeType===1&&j.push({element:D,left:D.scrollLeft,top:D.scrollTop});for(typeof h.focus=="function"&&h.focus(),h=0;hl?32:l,U.T=null,l=zr,zr=null;var i=Cl,s=sl;if(Vt=0,qn=Cl=null,sl=0,(vt&6)!==0)throw Error(r(331));var h=vt;if(vt|=4,Md(i.current),Nd(i,i.current,s,l),vt=h,Ba(0,!1),ye&&typeof ye.onPostCommitFiberRoot=="function")try{ye.onPostCommitFiberRoot(ta,i)}catch{}return!0}finally{G.p=a,U.T=n,Wd(t,e)}}function Id(t,e,l){e=ze(l,e),e=cr(t.stateNode,e,2),t=Rl(t,e,2),t!==null&&(la(t,2),Ke(t))}function Et(t,e,l){if(t.tag===3)Id(t,t,l);else for(;e!==null;){if(e.tag===3){Id(e,t,l);break}else if(e.tag===1){var n=e.stateNode;if(typeof e.type.getDerivedStateFromError=="function"||typeof n.componentDidCatch=="function"&&(zl===null||!zl.has(n))){t=ze(l,t),l=td(2),n=Rl(e,l,2),n!==null&&(ed(l,n,e,t),la(n,2),Ke(n));break}}e=e.return}}function Ur(t,e,l){var n=t.pingCache;if(n===null){n=t.pingCache=new K0;var a=new Set;n.set(e,a)}else a=n.get(e),a===void 0&&(a=new Set,n.set(e,a));a.has(l)||(Ar=!0,a.add(l),t=W0.bind(null,t,e,l),e.then(t,t))}function W0(t,e,l){var n=t.pingCache;n!==null&&n.delete(e),t.pingedLanes|=t.suspendedLanes&l,t.warmLanes&=~l,Ot===t&&(st&l)===l&&(Mt===4||Mt===3&&(st&62914560)===st&&300>me()-Wu?(vt&2)===0&&Yn(t,0):Or|=l,Ln===st&&(Ln=0)),Ke(t)}function th(t,e){e===0&&(e=Jf()),t=Vl(t,e),t!==null&&(la(t,e),Ke(t))}function P0(t){var e=t.memoizedState,l=0;e!==null&&(l=e.retryLane),th(t,l)}function I0(t,e){var l=0;switch(t.tag){case 31:case 13:var n=t.stateNode,a=t.memoizedState;a!==null&&(l=a.retryLane);break;case 19:n=t.stateNode;break;case 22:n=t.stateNode._retryCache;break;default:throw Error(r(314))}n!==null&&n.delete(e),th(t,l)}function tp(t,e){return Zi(t,e)}var ai=null,Xn=null,Mr=!1,ui=!1,wr=!1,Dl=0;function Ke(t){t!==Xn&&t.next===null&&(Xn===null?ai=Xn=t:Xn=Xn.next=t),ui=!0,Mr||(Mr=!0,lp())}function Ba(t,e){if(!wr&&ui){wr=!0;do for(var l=!1,n=ai;n!==null;){if(t!==0){var a=n.pendingLanes;if(a===0)var i=0;else{var s=n.suspendedLanes,h=n.pingedLanes;i=(1<<31-pe(42|t)+1)-1,i&=a&~(s&~h),i=i&201326741?i&201326741|1:i?i|2:0}i!==0&&(l=!0,ah(n,i))}else i=st,i=fu(n,n===Ot?i:0,n.cancelPendingCommit!==null||n.timeoutHandle!==-1),(i&3)===0||ea(n,i)||(l=!0,ah(n,i));n=n.next}while(l);wr=!1}}function ep(){eh()}function eh(){ui=Mr=!1;var t=0;Dl!==0&&dp()&&(t=Dl);for(var e=me(),l=null,n=ai;n!==null;){var a=n.next,i=lh(n,e);i===0?(n.next=null,l===null?ai=a:l.next=a,a===null&&(Xn=l)):(l=n,(t!==0||(i&3)!==0)&&(ui=!0)),n=a}Vt!==0&&Vt!==5||Ba(t),Dl!==0&&(Dl=0)}function lh(t,e){for(var l=t.suspendedLanes,n=t.pingedLanes,a=t.expirationTimes,i=t.pendingLanes&-62914561;0h)break;var w=g.transferSize,j=g.initiatorType;w&&dh(j)&&(g=g.responseEnd,s+=w*(g"u"?null:document;function Ah(t,e,l){var n=Qn;if(n&&typeof e=="string"&&e){var a=_e(e);a='link[rel="'+t+'"][href="'+a+'"]',typeof l=="string"&&(a+='[crossorigin="'+l+'"]'),Th.has(a)||(Th.add(a),t={rel:t,crossOrigin:l,href:e},n.querySelector(a)===null&&(e=n.createElement("link"),Pt(e,"link",t),Zt(e),n.head.appendChild(e)))}}function Ep(t){ol.D(t),Ah("dns-prefetch",t,null)}function Rp(t,e){ol.C(t,e),Ah("preconnect",t,e)}function Tp(t,e,l){ol.L(t,e,l);var n=Qn;if(n&&t&&e){var a='link[rel="preload"][as="'+_e(e)+'"]';e==="image"&&l&&l.imageSrcSet?(a+='[imagesrcset="'+_e(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(a+='[imagesizes="'+_e(l.imageSizes)+'"]')):a+='[href="'+_e(t)+'"]';var i=a;switch(e){case"style":i=Vn(t);break;case"script":i=Zn(t)}we.has(i)||(t=S({rel:"preload",href:e==="image"&&l&&l.imageSrcSet?void 0:t,as:e},l),we.set(i,t),n.querySelector(a)!==null||e==="style"&&n.querySelector(Ya(i))||e==="script"&&n.querySelector(Ga(i))||(e=n.createElement("link"),Pt(e,"link",t),Zt(e),n.head.appendChild(e)))}}function Ap(t,e){ol.m(t,e);var l=Qn;if(l&&t){var n=e&&typeof e.as=="string"?e.as:"script",a='link[rel="modulepreload"][as="'+_e(n)+'"][href="'+_e(t)+'"]',i=a;switch(n){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":i=Zn(t)}if(!we.has(i)&&(t=S({rel:"modulepreload",href:t},e),we.set(i,t),l.querySelector(a)===null)){switch(n){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(Ga(i)))return}n=l.createElement("link"),Pt(n,"link",t),Zt(n),l.head.appendChild(n)}}}function Op(t,e,l){ol.S(t,e,l);var n=Qn;if(n&&t){var a=dn(n).hoistableStyles,i=Vn(t);e=e||"default";var s=a.get(i);if(!s){var h={loading:0,preload:null};if(s=n.querySelector(Ya(i)))h.loading=5;else{t=S({rel:"stylesheet",href:t,"data-precedence":e},l),(l=we.get(i))&&Fr(t,l);var g=s=n.createElement("link");Zt(g),Pt(g,"link",t),g._p=new Promise(function(O,w){g.onload=O,g.onerror=w}),g.addEventListener("load",function(){h.loading|=1}),g.addEventListener("error",function(){h.loading|=2}),h.loading|=4,si(s,e,n)}s={type:"stylesheet",instance:s,count:1,state:h},a.set(i,s)}}}function _p(t,e){ol.X(t,e);var l=Qn;if(l&&t){var n=dn(l).hoistableScripts,a=Zn(t),i=n.get(a);i||(i=l.querySelector(Ga(a)),i||(t=S({src:t,async:!0},e),(e=we.get(a))&&Wr(t,e),i=l.createElement("script"),Zt(i),Pt(i,"link",t),l.head.appendChild(i)),i={type:"script",instance:i,count:1,state:null},n.set(a,i))}}function xp(t,e){ol.M(t,e);var l=Qn;if(l&&t){var n=dn(l).hoistableScripts,a=Zn(t),i=n.get(a);i||(i=l.querySelector(Ga(a)),i||(t=S({src:t,async:!0,type:"module"},e),(e=we.get(a))&&Wr(t,e),i=l.createElement("script"),Zt(i),Pt(i,"link",t),l.head.appendChild(i)),i={type:"script",instance:i,count:1,state:null},n.set(a,i))}}function Oh(t,e,l,n){var a=(a=ct.current)?fi(a):null;if(!a)throw Error(r(446));switch(t){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(e=Vn(l.href),l=dn(a).hoistableStyles,n=l.get(e),n||(n={type:"style",instance:null,count:0,state:null},l.set(e,n)),n):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){t=Vn(l.href);var i=dn(a).hoistableStyles,s=i.get(t);if(s||(a=a.ownerDocument||a,s={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},i.set(t,s),(i=a.querySelector(Ya(t)))&&!i._p&&(s.instance=i,s.state.loading=5),we.has(t)||(l={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},we.set(t,l),i||zp(a,t,l,s.state))),e&&n===null)throw Error(r(528,""));return s}if(e&&n!==null)throw Error(r(529,""));return null;case"script":return e=l.async,l=l.src,typeof l=="string"&&e&&typeof e!="function"&&typeof e!="symbol"?(e=Zn(l),l=dn(a).hoistableScripts,n=l.get(e),n||(n={type:"script",instance:null,count:0,state:null},l.set(e,n)),n):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,t))}}function Vn(t){return'href="'+_e(t)+'"'}function Ya(t){return'link[rel="stylesheet"]['+t+"]"}function _h(t){return S({},t,{"data-precedence":t.precedence,precedence:null})}function zp(t,e,l,n){t.querySelector('link[rel="preload"][as="style"]['+e+"]")?n.loading=1:(e=t.createElement("link"),n.preload=e,e.addEventListener("load",function(){return n.loading|=1}),e.addEventListener("error",function(){return n.loading|=2}),Pt(e,"link",l),Zt(e),t.head.appendChild(e))}function Zn(t){return'[src="'+_e(t)+'"]'}function Ga(t){return"script[async]"+t}function xh(t,e,l){if(e.count++,e.instance===null)switch(e.type){case"style":var n=t.querySelector('style[data-href~="'+_e(l.href)+'"]');if(n)return e.instance=n,Zt(n),n;var a=S({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return n=(t.ownerDocument||t).createElement("style"),Zt(n),Pt(n,"style",a),si(n,l.precedence,t),e.instance=n;case"stylesheet":a=Vn(l.href);var i=t.querySelector(Ya(a));if(i)return e.state.loading|=4,e.instance=i,Zt(i),i;n=_h(l),(a=we.get(a))&&Fr(n,a),i=(t.ownerDocument||t).createElement("link"),Zt(i);var s=i;return s._p=new Promise(function(h,g){s.onload=h,s.onerror=g}),Pt(i,"link",n),e.state.loading|=4,si(i,l.precedence,t),e.instance=i;case"script":return i=Zn(l.src),(a=t.querySelector(Ga(i)))?(e.instance=a,Zt(a),a):(n=l,(a=we.get(i))&&(n=S({},l),Wr(n,a)),t=t.ownerDocument||t,a=t.createElement("script"),Zt(a),Pt(a,"link",n),t.head.appendChild(a),e.instance=a);case"void":return null;default:throw Error(r(443,e.type))}else e.type==="stylesheet"&&(e.state.loading&4)===0&&(n=e.instance,e.state.loading|=4,si(n,l.precedence,t));return e.instance}function si(t,e,l){for(var n=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),a=n.length?n[n.length-1]:null,i=a,s=0;s title"):null)}function Cp(t,e,l){if(l===1||e.itemProp!=null)return!1;switch(t){case"meta":case"title":return!0;case"style":if(typeof e.precedence!="string"||typeof e.href!="string"||e.href==="")break;return!0;case"link":if(typeof e.rel!="string"||typeof e.href!="string"||e.href===""||e.onLoad||e.onError)break;return e.rel==="stylesheet"?(t=e.disabled,typeof e.precedence=="string"&&t==null):!0;case"script":if(e.async&&typeof e.async!="function"&&typeof e.async!="symbol"&&!e.onLoad&&!e.onError&&e.src&&typeof e.src=="string")return!0}return!1}function Nh(t){return!(t.type==="stylesheet"&&(t.state.loading&3)===0)}function Np(t,e,l,n){if(l.type==="stylesheet"&&(typeof n.media!="string"||matchMedia(n.media).matches!==!1)&&(l.state.loading&4)===0){if(l.instance===null){var a=Vn(n.href),i=e.querySelector(Ya(a));if(i){e=i._p,e!==null&&typeof e=="object"&&typeof e.then=="function"&&(t.count++,t=di.bind(t),e.then(t,t)),l.state.loading|=4,l.instance=i,Zt(i);return}i=e.ownerDocument||e,n=_h(n),(a=we.get(a))&&Fr(n,a),i=i.createElement("link"),Zt(i);var s=i;s._p=new Promise(function(h,g){s.onload=h,s.onerror=g}),Pt(i,"link",n),l.instance=i}t.stylesheets===null&&(t.stylesheets=new Map),t.stylesheets.set(l,e),(e=l.state.preload)&&(l.state.loading&3)===0&&(t.count++,l=di.bind(t),e.addEventListener("load",l),e.addEventListener("error",l))}}var Pr=0;function Dp(t,e){return t.stylesheets&&t.count===0&&mi(t,t.stylesheets),0Pr?50:800)+e);return t.unsuspend=l,function(){t.unsuspend=null,clearTimeout(n),clearTimeout(a)}}:null}function di(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)mi(this,this.stylesheets);else if(this.unsuspend){var t=this.unsuspend;this.unsuspend=null,t()}}}var hi=null;function mi(t,e){t.stylesheets=null,t.unsuspend!==null&&(t.count++,hi=new Map,e.forEach(Up,t),hi=null,di.call(t))}function Up(t,e){if(!(e.state.loading&4)){var l=hi.get(t);if(l)var n=l.get(null);else{l=new Map,hi.set(t,l);for(var a=t.querySelectorAll("link[data-precedence],style[data-precedence]"),i=0;i"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(u)}catch(c){console.error(c)}}return u(),rf.exports=$p(),rf.exports}var Wp=Fp();const Pp=xm(Wp);var tm="popstate";function em(u){return typeof u=="object"&&u!=null&&"pathname"in u&&"search"in u&&"hash"in u&&"state"in u&&"key"in u}function Ip(u={}){function c(r,o){let d=o.state?.masked,{pathname:m,search:p,hash:v}=d||r.location;return Sf("",{pathname:m,search:p,hash:v},o.state&&o.state.usr||null,o.state&&o.state.key||"default",d?{pathname:r.location.pathname,search:r.location.search,hash:r.location.hash}:void 0)}function f(r,o){return typeof o=="string"?o:Fa(o)}return ev(c,f,null,u)}function Nt(u,c){if(u===!1||u===null||typeof u>"u")throw new Error(c)}function Ye(u,c){if(!u){typeof console<"u"&&console.warn(c);try{throw new Error(c)}catch{}}}function tv(){return Math.random().toString(36).substring(2,10)}function lm(u,c){return{usr:u.state,key:u.key,idx:c,masked:u.unstable_mask?{pathname:u.pathname,search:u.search,hash:u.hash}:void 0}}function Sf(u,c,f=null,r,o){return{pathname:typeof u=="string"?u:u.pathname,search:"",hash:"",...typeof c=="string"?kn(c):c,state:f,key:c&&c.key||r||tv(),unstable_mask:o}}function Fa({pathname:u="/",search:c="",hash:f=""}){return c&&c!=="?"&&(u+=c.charAt(0)==="?"?c:"?"+c),f&&f!=="#"&&(u+=f.charAt(0)==="#"?f:"#"+f),u}function kn(u){let c={};if(u){let f=u.indexOf("#");f>=0&&(c.hash=u.substring(f),u=u.substring(0,f));let r=u.indexOf("?");r>=0&&(c.search=u.substring(r),u=u.substring(0,r)),u&&(c.pathname=u)}return c}function ev(u,c,f,r={}){let{window:o=document.defaultView,v5Compat:d=!1}=r,m=o.history,p="POP",v=null,y=b();y==null&&(y=0,m.replaceState({...m.state,idx:y},""));function b(){return(m.state||{idx:null}).idx}function S(){p="POP";let C=b(),Q=C==null?null:C-y;y=C,v&&v({action:p,location:M.location,delta:Q})}function L(C,Q){p="PUSH";let $=em(C)?C:Sf(M.location,C,Q);y=b()+1;let V=lm($,y),I=M.createHref($.unstable_mask||$);try{m.pushState(V,"",I)}catch(at){if(at instanceof DOMException&&at.name==="DataCloneError")throw at;o.location.assign(I)}d&&v&&v({action:p,location:M.location,delta:1})}function Y(C,Q){p="REPLACE";let $=em(C)?C:Sf(M.location,C,Q);y=b();let V=lm($,y),I=M.createHref($.unstable_mask||$);m.replaceState(V,"",I),d&&v&&v({action:p,location:M.location,delta:0})}function _(C){return lv(C)}let M={get action(){return p},get location(){return u(o,m)},listen(C){if(v)throw new Error("A history only accepts one active listener");return o.addEventListener(tm,S),v=C,()=>{o.removeEventListener(tm,S),v=null}},createHref(C){return c(o,C)},createURL:_,encodeLocation(C){let Q=_(C);return{pathname:Q.pathname,search:Q.search,hash:Q.hash}},push:L,replace:Y,go(C){return m.go(C)}};return M}function lv(u,c=!1){let f="http://localhost";typeof window<"u"&&(f=window.location.origin!=="null"?window.location.origin:window.location.href),Nt(f,"No window.location.(origin|href) available to create URL");let r=typeof u=="string"?u:Fa(u);return r=r.replace(/ $/,"%20"),!c&&r.startsWith("//")&&(r=f+r),new URL(r,f)}function zm(u,c,f="/"){return nv(u,c,f,!1)}function nv(u,c,f,r){let o=typeof c=="string"?kn(c):c,d=dl(o.pathname||"/",f);if(d==null)return null;let m=Cm(u);av(m);let p=null;for(let v=0;p==null&&v{let b={relativePath:y===void 0?m.path||"":y,caseSensitive:m.caseSensitive===!0,childrenIndex:p,route:m};if(b.relativePath.startsWith("/")){if(!b.relativePath.startsWith(r)&&v)return;Nt(b.relativePath.startsWith(r),`Absolute route path "${b.relativePath}" nested under path "${r}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),b.relativePath=b.relativePath.slice(r.length)}let S=qe([r,b.relativePath]),L=f.concat(b);m.children&&m.children.length>0&&(Nt(m.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${S}".`),Cm(m.children,c,L,S,v)),!(m.path==null&&!m.index)&&c.push({path:S,score:ov(S,m.index),routesMeta:L})};return u.forEach((m,p)=>{if(m.path===""||!m.path?.includes("?"))d(m,p);else for(let v of Nm(m.path))d(m,p,!0,v)}),c}function Nm(u){let c=u.split("/");if(c.length===0)return[];let[f,...r]=c,o=f.endsWith("?"),d=f.replace(/\?$/,"");if(r.length===0)return o?[d,""]:[d];let m=Nm(r.join("/")),p=[];return p.push(...m.map(v=>v===""?d:[d,v].join("/"))),o&&p.push(...m),p.map(v=>u.startsWith("/")&&v===""?"/":v)}function av(u){u.sort((c,f)=>c.score!==f.score?f.score-c.score:dv(c.routesMeta.map(r=>r.childrenIndex),f.routesMeta.map(r=>r.childrenIndex)))}var uv=/^:[\w-]+$/,iv=3,cv=2,rv=1,fv=10,sv=-2,nm=u=>u==="*";function ov(u,c){let f=u.split("/"),r=f.length;return f.some(nm)&&(r+=sv),c&&(r+=cv),f.filter(o=>!nm(o)).reduce((o,d)=>o+(uv.test(d)?iv:d===""?rv:fv),r)}function dv(u,c){return u.length===c.length&&u.slice(0,-1).every((r,o)=>r===c[o])?u[u.length-1]-c[c.length-1]:0}function hv(u,c,f=!1){let{routesMeta:r}=u,o={},d="/",m=[];for(let p=0;p{if(b==="*"){let _=p[L]||"";m=d.slice(0,d.length-_.length).replace(/(.)\/+$/,"$1")}const Y=p[L];return S&&!Y?y[b]=void 0:y[b]=(Y||"").replace(/%2F/g,"/"),y},{}),pathname:d,pathnameBase:m,pattern:u}}function mv(u,c=!1,f=!0){Ye(u==="*"||!u.endsWith("*")||u.endsWith("/*"),`Route path "${u}" will be treated as if it were "${u.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${u.replace(/\*$/,"/*")}".`);let r=[],o="^"+u.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(m,p,v,y,b)=>{if(r.push({paramName:p,isOptional:v!=null}),v){let S=b.charAt(y+m.length);return S&&S!=="/"?"/([^\\/]*)":"(?:/([^\\/]*))?"}return"/([^\\/]+)"}).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return u.endsWith("*")?(r.push({paramName:"*"}),o+=u==="*"||u==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):f?o+="\\/*$":u!==""&&u!=="/"&&(o+="(?:(?=\\/|$))"),[new RegExp(o,c?void 0:"i"),r]}function yv(u){try{return u.split("/").map(c=>decodeURIComponent(c).replace(/\//g,"%2F")).join("/")}catch(c){return Ye(!1,`The URL path "${u}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${c}).`),u}}function dl(u,c){if(c==="/")return u;if(!u.toLowerCase().startsWith(c.toLowerCase()))return null;let f=c.endsWith("/")?c.length-1:c.length,r=u.charAt(f);return r&&r!=="/"?null:u.slice(f)||"/"}var pv=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;function vv(u,c="/"){let{pathname:f,search:r="",hash:o=""}=typeof u=="string"?kn(u):u,d;return f?(f=Dm(f),f.startsWith("/")?d=am(f.substring(1),"/"):d=am(f,c)):d=c,{pathname:d,search:Sv(r),hash:Ev(o)}}function am(u,c){let f=Ni(c).split("/");return u.split("/").forEach(o=>{o===".."?f.length>1&&f.pop():o!=="."&&f.push(o)}),f.length>1?f.join("/"):"/"}function df(u,c,f,r){return`Cannot include a '${u}' character in a manually specified \`to.${c}\` field [${JSON.stringify(r)}]. Please separate it out to the \`to.${f}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function gv(u){return u.filter((c,f)=>f===0||c.route.path&&c.route.path.length>0)}function xf(u){let c=gv(u);return c.map((f,r)=>r===c.length-1?f.pathname:f.pathnameBase)}function Ui(u,c,f,r=!1){let o;typeof u=="string"?o=kn(u):(o={...u},Nt(!o.pathname||!o.pathname.includes("?"),df("?","pathname","search",o)),Nt(!o.pathname||!o.pathname.includes("#"),df("#","pathname","hash",o)),Nt(!o.search||!o.search.includes("#"),df("#","search","hash",o)));let d=u===""||o.pathname==="",m=d?"/":o.pathname,p;if(m==null)p=f;else{let S=c.length-1;if(!r&&m.startsWith("..")){let L=m.split("/");for(;L[0]==="..";)L.shift(),S-=1;o.pathname=L.join("/")}p=S>=0?c[S]:"/"}let v=vv(o,p),y=m&&m!=="/"&&m.endsWith("/"),b=(d||m===".")&&f.endsWith("/");return!v.pathname.endsWith("/")&&(y||b)&&(v.pathname+="/"),v}var Dm=u=>u.replace(/\/\/+/g,"/"),qe=u=>Dm(u.join("/")),Ni=u=>u.replace(/\/+$/,""),bv=u=>Ni(u).replace(/^\/*/,"/"),Sv=u=>!u||u==="?"?"":u.startsWith("?")?u:"?"+u,Ev=u=>!u||u==="#"?"":u.startsWith("#")?u:"#"+u,Rv=class{constructor(u,c,f,r=!1){this.status=u,this.statusText=c||"",this.internal=r,f instanceof Error?(this.data=f.toString(),this.error=f):this.data=f}};function Tv(u){return u!=null&&typeof u.status=="number"&&typeof u.statusText=="string"&&typeof u.internal=="boolean"&&"data"in u}function Av(u){let c=u.map(f=>f.route.path).filter(Boolean);return qe(c)||"/"}var Um=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function Mm(u,c){let f=u;if(typeof f!="string"||!pv.test(f))return{absoluteURL:void 0,isExternal:!1,to:f};let r=f,o=!1;if(Um)try{let d=new URL(window.location.href),m=f.startsWith("//")?new URL(d.protocol+f):new URL(f),p=dl(m.pathname,c);m.origin===d.origin&&p!=null?f=p+m.search+m.hash:o=!0}catch{Ye(!1,` contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:r,isExternal:o,to:f}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var wm=["POST","PUT","PATCH","DELETE"];new Set(wm);var Ov=["GET",...wm];new Set(Ov);var $n=x.createContext(null);$n.displayName="DataRouter";var Mi=x.createContext(null);Mi.displayName="DataRouterState";var Hm=x.createContext(!1);function _v(){return x.useContext(Hm)}var Bm=x.createContext({isTransitioning:!1});Bm.displayName="ViewTransition";var xv=x.createContext(new Map);xv.displayName="Fetchers";var zv=x.createContext(null);zv.displayName="Await";var Ae=x.createContext(null);Ae.displayName="Navigation";var Wa=x.createContext(null);Wa.displayName="Location";var Je=x.createContext({outlet:null,matches:[],isDataRoute:!1});Je.displayName="Route";var zf=x.createContext(null);zf.displayName="RouteError";var jm="REACT_ROUTER_ERROR",Cv="REDIRECT",Nv="ROUTE_ERROR_RESPONSE";function Dv(u){if(u.startsWith(`${jm}:${Cv}:{`))try{let c=JSON.parse(u.slice(28));if(typeof c=="object"&&c&&typeof c.status=="number"&&typeof c.statusText=="string"&&typeof c.location=="string"&&typeof c.reloadDocument=="boolean"&&typeof c.replace=="boolean")return c}catch{}}function Uv(u){if(u.startsWith(`${jm}:${Nv}:{`))try{let c=JSON.parse(u.slice(40));if(typeof c=="object"&&c&&typeof c.status=="number"&&typeof c.statusText=="string")return new Rv(c.status,c.statusText,c.data)}catch{}}function Mv(u,{relative:c}={}){Nt(Fn(),"useHref() may be used only in the context of a component.");let{basename:f,navigator:r}=x.useContext(Ae),{hash:o,pathname:d,search:m}=Pa(u,{relative:c}),p=d;return f!=="/"&&(p=d==="/"?f:qe([f,d])),r.createHref({pathname:p,search:m,hash:o})}function Fn(){return x.useContext(Wa)!=null}function Ge(){return Nt(Fn(),"useLocation() may be used only in the context of a component."),x.useContext(Wa).location}var Lm="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function qm(u){x.useContext(Ae).static||x.useLayoutEffect(u)}function Cf(){let{isDataRoute:u}=x.useContext(Je);return u?Kv():wv()}function wv(){Nt(Fn(),"useNavigate() may be used only in the context of a component.");let u=x.useContext($n),{basename:c,navigator:f}=x.useContext(Ae),{matches:r}=x.useContext(Je),{pathname:o}=Ge(),d=JSON.stringify(xf(r)),m=x.useRef(!1);return qm(()=>{m.current=!0}),x.useCallback((v,y={})=>{if(Ye(m.current,Lm),!m.current)return;if(typeof v=="number"){f.go(v);return}let b=Ui(v,JSON.parse(d),o,y.relative==="path");u==null&&c!=="/"&&(b.pathname=b.pathname==="/"?c:qe([c,b.pathname])),(y.replace?f.replace:f.push)(b,y.state,y)},[c,f,d,o,u])}x.createContext(null);function Pa(u,{relative:c}={}){let{matches:f}=x.useContext(Je),{pathname:r}=Ge(),o=JSON.stringify(xf(f));return x.useMemo(()=>Ui(u,JSON.parse(o),r,c==="path"),[u,o,r,c])}function Hv(u,c){return Ym(u,c)}function Ym(u,c,f){Nt(Fn(),"useRoutes() may be used only in the context of a component.");let{navigator:r}=x.useContext(Ae),{matches:o}=x.useContext(Je),d=o[o.length-1],m=d?d.params:{},p=d?d.pathname:"/",v=d?d.pathnameBase:"/",y=d&&d.route;{let C=y&&y.path||"";Xm(p,!y||C.endsWith("*")||C.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${p}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. + +Please change the parent to .`)}let b=Ge(),S;if(c){let C=typeof c=="string"?kn(c):c;Nt(v==="/"||C.pathname?.startsWith(v),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${v}" but pathname "${C.pathname}" was given in the \`location\` prop.`),S=C}else S=b;let L=S.pathname||"/",Y=L;if(v!=="/"){let C=v.replace(/^\//,"").split("/");Y="/"+L.replace(/^\//,"").split("/").slice(C.length).join("/")}let _=zm(u,{pathname:Y});Ye(y||_!=null,`No routes matched location "${S.pathname}${S.search}${S.hash}" `),Ye(_==null||_[_.length-1].route.element!==void 0||_[_.length-1].route.Component!==void 0||_[_.length-1].route.lazy!==void 0,`Matched leaf route at location "${S.pathname}${S.search}${S.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let M=Yv(_&&_.map(C=>Object.assign({},C,{params:Object.assign({},m,C.params),pathname:qe([v,r.encodeLocation?r.encodeLocation(C.pathname.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:C.pathname]),pathnameBase:C.pathnameBase==="/"?v:qe([v,r.encodeLocation?r.encodeLocation(C.pathnameBase.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:C.pathnameBase])})),o,f);return c&&M?x.createElement(Wa.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",unstable_mask:void 0,...S},navigationType:"POP"}},M):M}function Bv(){let u=Zv(),c=Tv(u)?`${u.status} ${u.statusText}`:u instanceof Error?u.message:JSON.stringify(u),f=u instanceof Error?u.stack:null,r="rgba(200,200,200, 0.5)",o={padding:"0.5rem",backgroundColor:r},d={padding:"2px 4px",backgroundColor:r},m=null;return console.error("Error handled by React Router default ErrorBoundary:",u),m=x.createElement(x.Fragment,null,x.createElement("p",null,"💿 Hey developer 👋"),x.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",x.createElement("code",{style:d},"ErrorBoundary")," or"," ",x.createElement("code",{style:d},"errorElement")," prop on your route.")),x.createElement(x.Fragment,null,x.createElement("h2",null,"Unexpected Application Error!"),x.createElement("h3",{style:{fontStyle:"italic"}},c),f?x.createElement("pre",{style:o},f):null,m)}var jv=x.createElement(Bv,null),Gm=class extends x.Component{constructor(u){super(u),this.state={location:u.location,revalidation:u.revalidation,error:u.error}}static getDerivedStateFromError(u){return{error:u}}static getDerivedStateFromProps(u,c){return c.location!==u.location||c.revalidation!=="idle"&&u.revalidation==="idle"?{error:u.error,location:u.location,revalidation:u.revalidation}:{error:u.error!==void 0?u.error:c.error,location:c.location,revalidation:u.revalidation||c.revalidation}}componentDidCatch(u,c){this.props.onError?this.props.onError(u,c):console.error("React Router caught the following error during render",u)}render(){let u=this.state.error;if(this.context&&typeof u=="object"&&u&&"digest"in u&&typeof u.digest=="string"){const f=Uv(u.digest);f&&(u=f)}let c=u!==void 0?x.createElement(Je.Provider,{value:this.props.routeContext},x.createElement(zf.Provider,{value:u,children:this.props.component})):this.props.children;return this.context?x.createElement(Lv,{error:u},c):c}};Gm.contextType=Hm;var hf=new WeakMap;function Lv({children:u,error:c}){let{basename:f}=x.useContext(Ae);if(typeof c=="object"&&c&&"digest"in c&&typeof c.digest=="string"){let r=Dv(c.digest);if(r){let o=hf.get(c);if(o)throw o;let d=Mm(r.location,f);if(Um&&!hf.get(c))if(d.isExternal||r.reloadDocument)window.location.href=d.absoluteURL||d.to;else{const m=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(d.to,{replace:r.replace}));throw hf.set(c,m),m}return x.createElement("meta",{httpEquiv:"refresh",content:`0;url=${d.absoluteURL||d.to}`})}}return u}function qv({routeContext:u,match:c,children:f}){let r=x.useContext($n);return r&&r.static&&r.staticContext&&(c.route.errorElement||c.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=c.route.id),x.createElement(Je.Provider,{value:u},f)}function Yv(u,c=[],f){let r=f?.state;if(u==null){if(!r)return null;if(r.errors)u=r.matches;else if(c.length===0&&!r.initialized&&r.matches.length>0)u=r.matches;else return null}let o=u,d=r?.errors;if(d!=null){let b=o.findIndex(S=>S.route.id&&d?.[S.route.id]!==void 0);Nt(b>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(d).join(",")}`),o=o.slice(0,Math.min(o.length,b+1))}let m=!1,p=-1;if(f&&r){m=r.renderFallback;for(let b=0;b=0?o=o.slice(0,p+1):o=[o[0]];break}}}}let v=f?.onError,y=r&&v?(b,S)=>{v(b,{location:r.location,params:r.matches?.[0]?.params??{},unstable_pattern:Av(r.matches),errorInfo:S})}:void 0;return o.reduceRight((b,S,L)=>{let Y,_=!1,M=null,C=null;r&&(Y=d&&S.route.id?d[S.route.id]:void 0,M=S.route.errorElement||jv,m&&(p<0&&L===0?(Xm("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),_=!0,C=null):p===L&&(_=!0,C=S.route.hydrateFallbackElement||null)));let Q=c.concat(o.slice(0,L+1)),$=()=>{let V;return Y?V=M:_?V=C:S.route.Component?V=x.createElement(S.route.Component,null):S.route.element?V=S.route.element:V=b,x.createElement(qv,{match:S,routeContext:{outlet:b,matches:Q,isDataRoute:r!=null},children:V})};return r&&(S.route.ErrorBoundary||S.route.errorElement||L===0)?x.createElement(Gm,{location:r.location,revalidation:r.revalidation,component:M,error:Y,children:$(),routeContext:{outlet:null,matches:Q,isDataRoute:!0},onError:y}):$()},null)}function Nf(u){return`${u} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function Gv(u){let c=x.useContext($n);return Nt(c,Nf(u)),c}function Xv(u){let c=x.useContext(Mi);return Nt(c,Nf(u)),c}function Qv(u){let c=x.useContext(Je);return Nt(c,Nf(u)),c}function Df(u){let c=Qv(u),f=c.matches[c.matches.length-1];return Nt(f.route.id,`${u} can only be used on routes that contain a unique "id"`),f.route.id}function Vv(){return Df("useRouteId")}function Zv(){let u=x.useContext(zf),c=Xv("useRouteError"),f=Df("useRouteError");return u!==void 0?u:c.errors?.[f]}function Kv(){let{router:u}=Gv("useNavigate"),c=Df("useNavigate"),f=x.useRef(!1);return qm(()=>{f.current=!0}),x.useCallback(async(o,d={})=>{Ye(f.current,Lm),f.current&&(typeof o=="number"?await u.navigate(o):await u.navigate(o,{fromRouteId:c,...d}))},[u,c])}var um={};function Xm(u,c,f){!c&&!um[u]&&(um[u]=!0,Ye(!1,f))}x.memo(Jv);function Jv({routes:u,future:c,state:f,isStatic:r,onError:o}){return Ym(u,void 0,{state:f,isStatic:r,onError:o})}function nn({to:u,replace:c,state:f,relative:r}){Nt(Fn()," may be used only in the context of a component.");let{static:o}=x.useContext(Ae);Ye(!o," must not be used on the initial render in a . This is a no-op, but you should modify your code so the is only ever rendered in response to some user interaction or state change.");let{matches:d}=x.useContext(Je),{pathname:m}=Ge(),p=Cf(),v=Ui(u,xf(d),m,r==="path"),y=JSON.stringify(v);return x.useEffect(()=>{p(JSON.parse(y),{replace:c,state:f,relative:r})},[p,y,r,c,f]),null}function an(u){Nt(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function kv({basename:u="/",children:c=null,location:f,navigationType:r="POP",navigator:o,static:d=!1,unstable_useTransitions:m}){Nt(!Fn(),"You cannot render a inside another . You should never have more than one in your app.");let p=u.replace(/^\/*/,"/"),v=x.useMemo(()=>({basename:p,navigator:o,static:d,unstable_useTransitions:m,future:{}}),[p,o,d,m]);typeof f=="string"&&(f=kn(f));let{pathname:y="/",search:b="",hash:S="",state:L=null,key:Y="default",unstable_mask:_}=f,M=x.useMemo(()=>{let C=dl(y,p);return C==null?null:{location:{pathname:C,search:b,hash:S,state:L,key:Y,unstable_mask:_},navigationType:r}},[p,y,b,S,L,Y,r,_]);return Ye(M!=null,` is not able to match the URL "${y}${b}${S}" because it does not start with the basename, so the won't render anything.`),M==null?null:x.createElement(Ae.Provider,{value:v},x.createElement(Wa.Provider,{children:c,value:M}))}function $v({children:u,location:c}){return Hv(Ef(u),c)}function Ef(u,c=[]){let f=[];return x.Children.forEach(u,(r,o)=>{if(!x.isValidElement(r))return;let d=[...c,o];if(r.type===x.Fragment){f.push.apply(f,Ef(r.props.children,d));return}Nt(r.type===an,`[${typeof r.type=="string"?r.type:r.type.name}] is not a component. All component children of must be a or `),Nt(!r.props.index||!r.props.children,"An index route cannot have child routes.");let m={id:r.props.id||d.join("-"),caseSensitive:r.props.caseSensitive,element:r.props.element,Component:r.props.Component,index:r.props.index,path:r.props.path,middleware:r.props.middleware,loader:r.props.loader,action:r.props.action,hydrateFallbackElement:r.props.hydrateFallbackElement,HydrateFallback:r.props.HydrateFallback,errorElement:r.props.errorElement,ErrorBoundary:r.props.ErrorBoundary,hasErrorBoundary:r.props.hasErrorBoundary===!0||r.props.ErrorBoundary!=null||r.props.errorElement!=null,shouldRevalidate:r.props.shouldRevalidate,handle:r.props.handle,lazy:r.props.lazy};r.props.children&&(m.children=Ef(r.props.children,d)),f.push(m)}),f}var Ai="get",Oi="application/x-www-form-urlencoded";function wi(u){return typeof HTMLElement<"u"&&u instanceof HTMLElement}function Fv(u){return wi(u)&&u.tagName.toLowerCase()==="button"}function Wv(u){return wi(u)&&u.tagName.toLowerCase()==="form"}function Pv(u){return wi(u)&&u.tagName.toLowerCase()==="input"}function Iv(u){return!!(u.metaKey||u.altKey||u.ctrlKey||u.shiftKey)}function tg(u,c){return u.button===0&&(!c||c==="_self")&&!Iv(u)}var Ri=null;function eg(){if(Ri===null)try{new FormData(document.createElement("form"),0),Ri=!1}catch{Ri=!0}return Ri}var lg=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function mf(u){return u!=null&&!lg.has(u)?(Ye(!1,`"${u}" is not a valid \`encType\` for \`
\`/\`\` and will default to "${Oi}"`),null):u}function ng(u,c){let f,r,o,d,m;if(Wv(u)){let p=u.getAttribute("action");r=p?dl(p,c):null,f=u.getAttribute("method")||Ai,o=mf(u.getAttribute("enctype"))||Oi,d=new FormData(u)}else if(Fv(u)||Pv(u)&&(u.type==="submit"||u.type==="image")){let p=u.form;if(p==null)throw new Error('Cannot submit a - -
+
在线 {onlineIds.length} / 离线 {offlineCount} / 总数 {connections.length}
@@ -124,7 +153,7 @@ export default function BatchCommandModal({ key={connection.id} title={statusDetail?.message || reachabilityMeta.label} className={`flex items-center gap-2 rounded-xl px-3 py-2 transition ${ - disabled ? 'cursor-not-allowed opacity-60' : 'cursor-pointer hover:bg-slate-800' + disabled ? 'cursor-not-allowed opacity-60' : 'cursor-pointer hover:bg-surface-muted' }`} >
- - + +
-
{connection.name}
+
{connection.name}
{reachabilityMeta.label}
@@ -152,33 +181,81 @@ export default function BatchCommandModal({
-
+
-