@velor/remote-mouse 6.4.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (316) hide show
  1. package/.artifacts/screenshots/remote-mobile-config.png +0 -0
  2. package/.artifacts/screenshots/remote-mobile-home.png +0 -0
  3. package/.artifacts/screenshots/remote-mobile-preferences.png +0 -0
  4. package/.artifacts/screenshots/remote-mobile-server-info.png +0 -0
  5. package/.artifacts/screenshots/remote-mobile-vlc.png +0 -0
  6. package/.env.example +93 -0
  7. package/README.md +370 -0
  8. package/bin/remote-mouse.js +19 -0
  9. package/client/core/dom.js +148 -0
  10. package/client/core/init-socket-io.js +117 -0
  11. package/client/core/socket-emit.js +6 -0
  12. package/client/core/window-events.js +23 -0
  13. package/client/i18n/apply-page-translations.js +18 -0
  14. package/client/i18n/constants.js +3 -0
  15. package/client/i18n/core.js +40 -0
  16. package/client/i18n/locale-registry.js +77 -0
  17. package/client/i18n/locales/de.js +227 -0
  18. package/client/i18n/locales/en.js +389 -0
  19. package/client/i18n/locales/es.js +228 -0
  20. package/client/i18n/locales/fr.js +389 -0
  21. package/client/i18n/locales/it.js +227 -0
  22. package/client/i18n/locales/ja.js +227 -0
  23. package/client/i18n/locales/pt.js +227 -0
  24. package/client/i18n/locales/ru.js +240 -0
  25. package/client/i18n/locales/zh.js +227 -0
  26. package/client/preferences/constants.js +15 -0
  27. package/client/preferences/effects.js +24 -0
  28. package/client/preferences/load.js +19 -0
  29. package/client/preferences/render.js +26 -0
  30. package/client/preferences/rows.js +78 -0
  31. package/client/preferences/state.js +29 -0
  32. package/client/preview/create-preview-frame-receiver.js +13 -0
  33. package/client/preview/draw.js +77 -0
  34. package/client/preview/parse-preview-frame.js +39 -0
  35. package/client/preview/preview-stream.js +152 -0
  36. package/client/services/app-state/appStateKeys.js +30 -0
  37. package/client/services/app-state/createAppStateService.js +216 -0
  38. package/client/services/app-state/createPersistStoreService.js +122 -0
  39. package/client/services/app-state/createStateStoreService.js +64 -0
  40. package/client/services/app-state/localStorageBinding.js +26 -0
  41. package/client/services/app-state/normalizers.js +74 -0
  42. package/client/services/app-state/resolveEffectiveStateValue.js +58 -0
  43. package/client/services/app-state/stateDefinitions.js +107 -0
  44. package/client/services/backend/createBackendService.js +55 -0
  45. package/client/services/config/ConfigView.js +45 -0
  46. package/client/services/config/createClientConfigService.js +122 -0
  47. package/client/services/config/defaultClientConfig.js +22 -0
  48. package/client/services/createServicesContainer.js +48 -0
  49. package/client/services/createServicesRegistry.js +26 -0
  50. package/client/services/i18n/createI18nService.js +86 -0
  51. package/client/services/notifications/createNotificationService.js +56 -0
  52. package/client/services/pubsub/createPubSubService.js +20 -0
  53. package/client/services/remotes/createRemotesService.js +20 -0
  54. package/client/services/transport/createSocketIoTransportService.js +50 -0
  55. package/client/touch/bindTouchPassthrough.js +94 -0
  56. package/client/touch/createTouchList.js +18 -0
  57. package/client/touch/dispatchSyntheticTouch.js +20 -0
  58. package/client/touch/gesture-zone.js +28 -0
  59. package/client/touch/throttle.js +46 -0
  60. package/client/touch/touch-handlers.js +193 -0
  61. package/client/touch/touchpad.js +231 -0
  62. package/client/ui/config/page.js +840 -0
  63. package/client/ui/main/applyRemoteVisibilityState.js +60 -0
  64. package/client/ui/main/bind-client-notifications.js +3 -0
  65. package/client/ui/main/bindings/bindAccordion.js +121 -0
  66. package/client/ui/main/bindings/bindActionButtons.js +13 -0
  67. package/client/ui/main/bindings/bindAdminDrawer.js +137 -0
  68. package/client/ui/main/bindings/bindAdminRemoteButtons.js +77 -0
  69. package/client/ui/main/bindings/bindAdminVersion.js +27 -0
  70. package/client/ui/main/bindings/bindBrowserRemoteButtons.js +119 -0
  71. package/client/ui/main/bindings/bindRemoteAccordion.js +23 -0
  72. package/client/ui/main/bindings/bindSamsungRemoteButtons.js +320 -0
  73. package/client/ui/main/bindings/bindSystemRemoteButtons.js +41 -0
  74. package/client/ui/main/bindings/bindVlcRemoteButtons.js +64 -0
  75. package/client/ui/main/canvas-ui.js +33 -0
  76. package/client/ui/main/connection-overlay.js +57 -0
  77. package/client/ui/main/init-ui.js +54 -0
  78. package/client/ui/main/keyboard-panel.js +271 -0
  79. package/client/ui/main/mouse-buttons.js +94 -0
  80. package/client/ui/main/page.js +21 -0
  81. package/client/ui/notifications/show-toast.js +48 -0
  82. package/client/ui/preferences/bindPreferenceSwitchers.js +49 -0
  83. package/client/ui/preferences/page.js +61 -0
  84. package/client/ui/preferences/switchers.js +200 -0
  85. package/index.js +9 -0
  86. package/package.json +41 -0
  87. package/public/admin-config.css +447 -0
  88. package/public/admin-config.html +63 -0
  89. package/public/apple-touch-icon.png +0 -0
  90. package/public/brave-icon.svg +13 -0
  91. package/public/favicon.svg +30 -0
  92. package/public/icon-192.png +0 -0
  93. package/public/icon-512.png +0 -0
  94. package/public/index.html +246 -0
  95. package/public/manifest.webmanifest +45 -0
  96. package/public/preferences.html +55 -0
  97. package/public/server-info.html +574 -0
  98. package/public/styles.css +1042 -0
  99. package/public/sw.js +103 -0
  100. package/scripts/codex-commit.sh +112 -0
  101. package/scripts/generate-mobile-screenshots.mjs +244 -0
  102. package/scripts/install-linux.sh +633 -0
  103. package/scripts/install-windows.ps1 +369 -0
  104. package/server/application/createApplicationLifecycle.js +15 -0
  105. package/server/application/logger.js +216 -0
  106. package/server/application/shutdown.js +81 -0
  107. package/server/application/start.js +95 -0
  108. package/server/application/state.js +19 -0
  109. package/server/connection/api/admin-actions.router.js +65 -0
  110. package/server/connection/api/admin-configs.router.js +165 -0
  111. package/server/connection/api/admin-remotes.router.js +61 -0
  112. package/server/connection/api/admin-subs.router.js +49 -0
  113. package/server/connection/api/client.router.js +15 -0
  114. package/server/connection/api/configs.js +96 -0
  115. package/server/connection/api/qr-page.handler.js +17 -0
  116. package/server/connection/api/remotes.router.js +30 -0
  117. package/server/connection/api/server-info.router.js +149 -0
  118. package/server/connection/api/session.middleware.js +93 -0
  119. package/server/connection/api/unauthorized-response.js +73 -0
  120. package/server/connection/socket/createConnectionRegistrar.js +23 -0
  121. package/server/connection/socket/createSocketSessionAuthMiddleware.js +49 -0
  122. package/server/connection/socket/socket-action-responder.js +12 -0
  123. package/server/connection/socket/socket.timestamp-middleware.js +51 -0
  124. package/server/index.js +12 -0
  125. package/server/init/bootstrapApi.js +87 -0
  126. package/server/init/bootstrapSocket.js +79 -0
  127. package/server/init/createAdminApiRouter.js +22 -0
  128. package/server/init/createAdminUiRouter.js +21 -0
  129. package/server/init/createSocketActionRegistrars.js +52 -0
  130. package/server/init/observers/startConfigObserver.js +51 -0
  131. package/server/init/observers/startDisplaySizeObserver.js +55 -0
  132. package/server/init/observers/startNotificationObserver.js +49 -0
  133. package/server/init/observers/startQrOverlayHoverObserver.js +89 -0
  134. package/server/init/observers/startQrOverlayRefreshObserver.js +53 -0
  135. package/server/os/darwin/app.js +45 -0
  136. package/server/os/darwin/applescript.js +51 -0
  137. package/server/os/darwin/cliSocket.js +53 -0
  138. package/server/os/darwin/url.js +9 -0
  139. package/server/os/darwin/window.js +10 -0
  140. package/server/os/linux/app.js +120 -0
  141. package/server/os/linux/cliSocket.js +53 -0
  142. package/server/os/linux/process.js +69 -0
  143. package/server/os/linux/screen.js +58 -0
  144. package/server/os/linux/systemd.js +139 -0
  145. package/server/os/linux/url.js +17 -0
  146. package/server/os/linux/windows.js +144 -0
  147. package/server/os/win32/app.js +66 -0
  148. package/server/os/win32/cliSocket.js +15 -0
  149. package/server/os/win32/powershell.js +70 -0
  150. package/server/os/win32/process.js +20 -0
  151. package/server/os/win32/service.js +95 -0
  152. package/server/os/win32/url.js +9 -0
  153. package/server/os/win32/window.js +10 -0
  154. package/server/remotes/admin/createAdminEventGuardMiddleware.js +29 -0
  155. package/server/remotes/admin/createForceUpdateCheckAction.js +39 -0
  156. package/server/remotes/admin/createInstallUpdateAction.js +64 -0
  157. package/server/remotes/admin/createOpenQrBrowserAction.js +63 -0
  158. package/server/remotes/admin/createOpenServerInfoBrowserAction.js +58 -0
  159. package/server/remotes/admin/createRestartServiceAction.js +20 -0
  160. package/server/remotes/admin/createRotateEntryTokenAction.js +43 -0
  161. package/server/remotes/admin/createToggleQrOverlayAction.js +38 -0
  162. package/server/remotes/admin/index.js +32 -0
  163. package/server/remotes/admin/notifyIfRestarted.js +102 -0
  164. package/server/remotes/admin/registrar.js +94 -0
  165. package/server/remotes/browser/actions/createFocusOrLaunchBrowserAction.js +22 -0
  166. package/server/remotes/browser/actions/openUrlOnHost.js +3 -0
  167. package/server/remotes/browser/browserCatalog.js +70 -0
  168. package/server/remotes/browser/index.js +15 -0
  169. package/server/remotes/browser/listBrowsersOnHost.js +23 -0
  170. package/server/remotes/browser/registrar.js +29 -0
  171. package/server/remotes/browser/spec.js +18 -0
  172. package/server/remotes/browser/state.js +5 -0
  173. package/server/remotes/input/registrar.js +39 -0
  174. package/server/remotes/preview/bgraToRgbaBuffer.js +20 -0
  175. package/server/remotes/preview/captureAroundCursor.js +19 -0
  176. package/server/remotes/preview/createPreviewStreamer.js +85 -0
  177. package/server/remotes/preview/registrar.js +34 -0
  178. package/server/remotes/samsung/createSamsungCommandService.js +203 -0
  179. package/server/remotes/samsung/createSamsungRemote.js +26 -0
  180. package/server/remotes/samsung/createSamsungRemoteGetter.js +46 -0
  181. package/server/remotes/samsung/createSamsungTvGetter.js +102 -0
  182. package/server/remotes/samsung/device-config.js +122 -0
  183. package/server/remotes/samsung/registrar.js +59 -0
  184. package/server/remotes/samsung/utils.js +56 -0
  185. package/server/remotes/vlc/index.js +39 -0
  186. package/server/remotes/vlc/registrar.js +94 -0
  187. package/server/remotes/vlc/spec.js +15 -0
  188. package/server/remotes/vlc/state.js +5 -0
  189. package/server/remotes/window/index.js +6 -0
  190. package/server/remotes/window/registrar.js +28 -0
  191. package/server/services/application/createApplicationDaemonService.js +144 -0
  192. package/server/services/application/getDaemonServiceAdapter.js +56 -0
  193. package/server/services/application/utils.js +29 -0
  194. package/server/services/config/bootstrapConfig.js +38 -0
  195. package/server/services/config/configPaths.js +42 -0
  196. package/server/services/config/configSchema.js +297 -0
  197. package/server/services/config/configService.js +89 -0
  198. package/server/services/config/defaultConfig.js +137 -0
  199. package/server/services/config/envConfig.js +49 -0
  200. package/server/services/config/index.js +9 -0
  201. package/server/services/config/logConfig.js +54 -0
  202. package/server/services/config/system-config.js +44 -0
  203. package/server/services/createServicesContainer.js +94 -0
  204. package/server/services/createServicesRegistry.js +48 -0
  205. package/server/services/input/createInputController.js +17 -0
  206. package/server/services/input/createKeyboardController.js +146 -0
  207. package/server/services/input/createMouseController.js +182 -0
  208. package/server/services/notifier/createClientNotifier.js +23 -0
  209. package/server/services/notifier/createHostNotifier.js +41 -0
  210. package/server/services/notifier/createNotifier.js +13 -0
  211. package/server/services/notifier/createNotifierComposite.js +122 -0
  212. package/server/services/notifier/handleOpenQrBrowserEvent.js +40 -0
  213. package/server/services/notifier/handleOpenServerInfoBrowserEvent.js +40 -0
  214. package/server/services/notifier/handleRestartServiceEvent.js +37 -0
  215. package/server/services/notifier/handleRotateEntryTokenEvent.js +42 -0
  216. package/server/services/notifier/handleSessionEvent.js +24 -0
  217. package/server/services/notifier/handleToggleQrOverlayEvent.js +21 -0
  218. package/server/services/notifier/host-notifier/createLinuxHostNotifier.js +23 -0
  219. package/server/services/notifier/host-notifier/createNodeNotifierHostNotifier.js +24 -0
  220. package/server/services/notifier/host-notifier/index.js +11 -0
  221. package/server/services/notifier/mapper/handleForceUpdateCheckEvent.js +24 -0
  222. package/server/services/notifier/mapper/handleInstallUpdateEvent.js +53 -0
  223. package/server/services/notifier/mapper/handleSocketEvent.js +40 -0
  224. package/server/services/notifier/mapper/handleUpdateManagerEvent.js +24 -0
  225. package/server/services/notifier/mapper/notify.js +7 -0
  226. package/server/services/os/index.js +23 -0
  227. package/server/services/os/platforms/createFallbackAdapter.js +31 -0
  228. package/server/services/os/platforms/darwin/app.js +6 -0
  229. package/server/services/os/platforms/darwin/index.js +21 -0
  230. package/server/services/os/platforms/darwin/scripts.js +4 -0
  231. package/server/services/os/platforms/darwin/url.js +1 -0
  232. package/server/services/os/platforms/darwin/window.js +4 -0
  233. package/server/services/os/platforms/linux/app.js +6 -0
  234. package/server/services/os/platforms/linux/index.js +33 -0
  235. package/server/services/os/platforms/linux/url.js +1 -0
  236. package/server/services/os/platforms/linux/windows.js +11 -0
  237. package/server/services/os/platforms/win32/app.js +6 -0
  238. package/server/services/os/platforms/win32/index.js +21 -0
  239. package/server/services/os/platforms/win32/overlay.js +6 -0
  240. package/server/services/os/platforms/win32/powershell.js +4 -0
  241. package/server/services/os/platforms/win32/url.js +1 -0
  242. package/server/services/os/platforms/win32/window.js +4 -0
  243. package/server/services/os/shared.js +2 -0
  244. package/server/services/overlay/createNoopOverlay.js +13 -0
  245. package/server/services/overlay/createQrOverlay.js +27 -0
  246. package/server/services/overlay/createQrOverlayWin32.js +158 -0
  247. package/server/services/overlay/createQrOverlayYad.js +178 -0
  248. package/server/services/overlay/renderQrPage.js +82 -0
  249. package/server/services/persistence/createConfigDao.js +106 -0
  250. package/server/services/persistence/createDatabaseProvider.js +23 -0
  251. package/server/services/persistence/createEntryTokenDao.js +140 -0
  252. package/server/services/persistence/createRestartLogDao.js +210 -0
  253. package/server/services/persistence/index.js +19 -0
  254. package/server/services/pubsub/createEventStore.js +54 -0
  255. package/server/services/pubsub/createPubSub.js +89 -0
  256. package/server/services/pubsub/createServiceEvents.js +29 -0
  257. package/server/services/pubsub/serviceEventConstants.js +39 -0
  258. package/server/services/remotes/createRemotes.js +25 -0
  259. package/server/services/server/createHttpsServer.js +12 -0
  260. package/server/services/server/createServer.js +66 -0
  261. package/server/services/sse/createSseService.js +96 -0
  262. package/server/services/sse/utils.js +7 -0
  263. package/server/services/system/createSystemService.js +170 -0
  264. package/server/services/system/getNetworkInfo.js +18 -0
  265. package/server/services/system/getScreenInfo.js +32 -0
  266. package/server/services/system/listNetworkInterfaces.js +27 -0
  267. package/server/services/task-manager/createTaskManager.js +68 -0
  268. package/server/services/task-runner/createTaskRunner.js +114 -0
  269. package/server/services/token-manager/createTokenManager.js +244 -0
  270. package/server/services/token-manager/token-format.js +7 -0
  271. package/server/services/token-manager/token-store-utils.js +8 -0
  272. package/server/services/update-manager/CommandUpdateSource.js +70 -0
  273. package/server/services/update-manager/NpmUpdateSource.js +34 -0
  274. package/server/services/update-manager/buildNpmGlobalUpdateCommand.js +15 -0
  275. package/server/services/update-manager/chooseUpdateCheckSource.js +20 -0
  276. package/server/services/update-manager/chooseUpdateInstallSource.js +5 -0
  277. package/server/services/update-manager/createUpdateManager.js +109 -0
  278. package/server/services/update-manager/resolveInstallUpdateCommand.js +42 -0
  279. package/server/term/cli/executeLocalServiceCommand.js +42 -0
  280. package/server/term/cli/getCliSocketPath.js +5 -0
  281. package/server/term/cli/parseCliArgs.js +110 -0
  282. package/server/term/cli/printCliResult.js +18 -0
  283. package/server/term/cli/runCliCmd.js +50 -0
  284. package/server/term/cli/sendCliCommand.js +76 -0
  285. package/server/term/cliSocket.js +29 -0
  286. package/server/term/srv/commands/configCommand.js +84 -0
  287. package/server/term/srv/commands/helpCommand.js +6 -0
  288. package/server/term/srv/commands/infoCommand.js +7 -0
  289. package/server/term/srv/commands/openQrCommand.js +7 -0
  290. package/server/term/srv/commands/samsungDetectCommand.js +52 -0
  291. package/server/term/srv/commands/serviceCommand.js +25 -0
  292. package/server/term/srv/commands/systemConfigCommand.js +7 -0
  293. package/server/term/srv/commands/tasksCommand.js +24 -0
  294. package/server/term/srv/commands/tokensCommand.js +15 -0
  295. package/server/term/srv/executeCliCommand.js +44 -0
  296. package/server/term/srv/executeCliRequest.js +38 -0
  297. package/server/term/srv/startCliServer.js +140 -0
  298. package/server/utils/createRandomToken.js +11 -0
  299. package/server/utils/env.js +155 -0
  300. package/server/utils/git.js +13 -0
  301. package/server/utils/http.js +7 -0
  302. package/server/utils/network.js +45 -0
  303. package/server/utils/paths.js +10 -0
  304. package/server/utils/process.js +57 -0
  305. package/server/utils/robot.js +11 -0
  306. package/server/utils/semver.js +33 -0
  307. package/server/utils/truncateText.js +7 -0
  308. package/utils/createLazy.js +13 -0
  309. package/utils/functional.js +48 -0
  310. package/utils/math.js +26 -0
  311. package/utils/notificationSettings.js +61 -0
  312. package/utils/object.utils.js +79 -0
  313. package/utils/predicates.js +17 -0
  314. package/utils/remoteCommands.js +40 -0
  315. package/utils/sync.js +3 -0
  316. package/velor-remote-mouse-6.4.8.tgz +0 -0
@@ -0,0 +1,240 @@
1
+ import {en} from './en.js';
2
+
3
+ export const ru = {
4
+ ...en,
5
+ 'common.unknown': 'неизвестно',
6
+ 'common.language': 'Язык',
7
+ 'common.languageShort': 'RU',
8
+
9
+ 'main.pageTitle': 'Remote Mouse',
10
+ 'main.workspaceAria': 'Рабочая область remote',
11
+ 'main.serverActionsAria': 'Действия сервера',
12
+ 'main.updatesAria': 'Обновления',
13
+ 'main.updateCheckButton': 'Проверить обновление',
14
+ 'main.updateCheckButtonTitle': 'Принудительно проверить обновление',
15
+ 'main.installUpdateButton': 'Установить обновление',
16
+ 'main.installUpdateButtonTitle': 'Установить обновление',
17
+ 'main.restartServiceButton': 'Перезапустить сервис',
18
+ 'main.restartServiceButtonTitle': 'Перезапустить сервис',
19
+ 'main.displayInfoAria': 'Экран и информация',
20
+ 'main.openQrServer': 'QR сервера',
21
+ 'main.openQrServerTitle': 'Открыть страницу QR на сервере',
22
+ 'main.openQrClient': 'QR клиента',
23
+ 'main.openQrClientTitle': 'Открыть страницу QR на клиенте',
24
+ 'main.openServerInfoServer': 'Инфо сервера',
25
+ 'main.openServerInfoServerTitle': 'Открыть страницу информации о сервере на сервере',
26
+ 'main.openServerInfoClient': 'Инфо клиента',
27
+ 'main.openServerInfoClientTitle': 'Открыть страницу информации о сервере на клиенте',
28
+ 'main.openConfig': 'Конфигурация',
29
+ 'main.openConfigTitle': 'Открыть страницу конфигурации',
30
+ 'main.openPreferences': 'Настройки',
31
+ 'main.openPreferencesTitle': 'Открыть страницу локальных настроек',
32
+ 'main.accessAria': 'Доступ',
33
+ 'main.toggleQrOverlay': 'Показать QR',
34
+ 'main.toggleQrOverlayTitle': 'Показать или скрыть QR overlay',
35
+ 'main.rotateEntryToken': 'Сменить токен входа',
36
+ 'main.rotateEntryTokenTitle': 'Принудительно обновить токен входа',
37
+ 'main.adminActionsDisabledMessage': 'Административные действия сервера отключены.',
38
+ 'main.adminAppVersion': 'Версия: --',
39
+ 'main.browserShortcutsAria': 'Ярлыки браузера',
40
+ 'main.browserShortcutsLabel': 'Браузер',
41
+ 'main.openBrowser': 'Открыть или вывести браузер на передний план',
42
+ 'main.browserBack': 'Предыдущая страница',
43
+ 'main.browserForward': 'Следующая страница',
44
+ 'main.prevTab': 'Предыдущая вкладка',
45
+ 'main.nextTab': 'Следующая вкладка',
46
+ 'main.newTab': 'Новая вкладка',
47
+ 'main.closeTab': 'Закрыть вкладку',
48
+ 'main.addressBar': 'Адресная строка',
49
+ 'main.reload': 'Перезагрузить',
50
+ 'main.fullscreen': 'Полный экран',
51
+ 'main.videoPlayPause': 'Пуск/пауза',
52
+ 'main.videoMute': 'Вкл/выкл звук видео',
53
+ 'main.videoFullscreen': 'Видео на весь экран',
54
+ 'main.windowToggle': 'Развернуть/свернуть',
55
+ 'main.windowToggleTitle': 'Развернуть или свернуть активное окно',
56
+ 'main.windowClose': 'Закрыть',
57
+ 'main.windowCloseTitle': 'Закрыть активное окно',
58
+ 'main.vlcControlsAria': 'Управление VLC',
59
+ 'main.vlcSectionLabel': 'VLC',
60
+ 'main.vlcOpen': 'Открыть VLC',
61
+ 'main.vlcOpenTitle': 'Открыть VLC Media Player или вывести его на передний план',
62
+ 'main.vlcPrevious': 'Предыдущий медиафайл',
63
+ 'main.vlcPlayPause': 'Воспроизвести или поставить VLC на паузу',
64
+ 'main.vlcNext': 'Следующий медиафайл',
65
+ 'main.vlcSeekBackward': 'Перемотать VLC назад',
66
+ 'main.vlcStop': 'Остановить VLC',
67
+ 'main.vlcSeekForward': 'Перемотать VLC вперед',
68
+ 'main.vlcVolumeDown': 'Уменьшить громкость VLC',
69
+ 'main.vlcMute': 'Вкл/выкл звук VLC',
70
+ 'main.vlcVolumeUp': 'Увеличить громкость VLC',
71
+ 'main.vlcFullscreen': 'Переключить полноэкранный режим VLC',
72
+ 'main.systemControlsAria': 'Системные команды',
73
+ 'main.systemSectionLabel': 'Система',
74
+ 'main.systemShowDesktop': 'Рабочий стол',
75
+ 'main.systemWindowLeft': 'Предыдущее окно',
76
+ 'main.systemWindowRight': 'Следующее окно',
77
+ 'main.systemStartMenu': 'Пуск',
78
+ 'main.systemSettings': 'Открыть параметры системы',
79
+ 'main.systemNotifications': 'Открыть центр уведомлений',
80
+ 'main.tvControlsAria': 'Управление Samsung TV',
81
+ 'main.tvSectionLabel': 'Samsung TV',
82
+ 'main.samsungOn': 'Включить Samsung TV',
83
+ 'main.samsungOff': 'Выключить Samsung TV',
84
+ 'main.samsungVolUp': 'Увеличить громкость Samsung',
85
+ 'main.samsungVolDown': 'Уменьшить громкость Samsung',
86
+ 'main.samsungMute': 'Вкл/выкл звук Samsung',
87
+ 'main.samsungInput': 'Сменить источник Samsung',
88
+ 'main.samsungEnter': 'Подтвердить в меню Samsung',
89
+ 'main.samsungPcInput': 'Переключить Samsung на вход PC',
90
+ 'main.cursorPreviewAria': 'Превью курсора',
91
+ 'main.keyboardPanelAria': 'Клавиатура',
92
+ 'main.touchEntryPanelAria': 'Панель клавиатуры',
93
+ 'main.textInputPlaceholder': 'Введите текст для отправки',
94
+ 'main.liveKeyboardPlaceholder': 'Печатайте здесь',
95
+ 'main.sendText': 'Отправить',
96
+ 'main.menuAria': 'Действия',
97
+ 'main.textEntry': 'Ввод текста',
98
+ 'main.touchEntry': 'Ввод клавиш',
99
+ 'main.keyboard': 'Клавиатура',
100
+ 'main.escape': 'Esc',
101
+ 'main.tab': 'Tab',
102
+ 'main.shift': 'Shift',
103
+ 'main.alt': 'Alt',
104
+ 'main.ctrl': 'Ctrl',
105
+ 'main.leftClick': 'Левый клик',
106
+ 'main.rightClick': 'Правый клик',
107
+ 'main.enter': 'Enter',
108
+ 'main.connectionUnavailableTitle': 'Сервер недоступен',
109
+ 'main.connectionWaiting': 'Ожидание подключения...',
110
+ 'main.orientationLockTitle': 'Альбомная ориентация не поддерживается',
111
+ 'main.orientationLockMessage': 'Верните устройство в портретный режим, чтобы пользоваться remote.',
112
+ 'main.connectionExpiredTitle': 'Срок подключения истек',
113
+ 'main.connectionExpiredMessage': 'Повторно отсканируйте QR-код сервера.',
114
+ 'main.notificationsAria': 'Уведомления',
115
+ 'main.shortcut.closeTab': 'Ctrl+W',
116
+ 'main.shortcut.newTab': 'Ctrl+T',
117
+ 'main.shortcut.fullscreen': 'F11',
118
+ 'main.shortcut.prevTab': 'Ctrl+Shift+Tab',
119
+ 'main.shortcut.nextTab': 'Ctrl+Tab',
120
+ 'main.shortcut.browserBack': 'Alt+Влево',
121
+ 'main.shortcut.browserForward': 'Alt+Вправо',
122
+ 'main.shortcut.addressBar': 'Ctrl+L',
123
+ 'main.shortcut.reload': 'Ctrl+F5',
124
+ 'main.shortcut.videoPlayPause': 'Пробел',
125
+ 'main.shortcut.videoMute': 'M',
126
+ 'main.shortcut.videoFullscreen': 'F',
127
+ 'main.shortcut.vlcPrevious': 'P',
128
+ 'main.shortcut.vlcPlayPause': 'Пробел',
129
+ 'main.shortcut.vlcNext': 'N',
130
+ 'main.shortcut.vlcSeekBackward': 'Влево',
131
+ 'main.shortcut.vlcStop': 'S',
132
+ 'main.shortcut.vlcSeekForward': 'Вправо',
133
+ 'main.shortcut.vlcVolumeDown': 'Ctrl+Вниз',
134
+ 'main.shortcut.vlcMute': 'M',
135
+ 'main.shortcut.vlcVolumeUp': 'Ctrl+Вверх',
136
+ 'main.shortcut.vlcFullscreen': 'F',
137
+ 'main.canvas.oneFingerScroll': 'Скролл',
138
+ 'main.canvas.dragMouse': 'Свайп: мышь',
139
+ 'main.canvas.touchHelp': 'Касание: левый клик\n2 пальца: прокрутка / правый клик\nПравая зона: прокрутка',
140
+
141
+ 'preferences.pageTitle': 'Remote Mouse - Настройки',
142
+ 'preferences.eyebrow': 'Настройки',
143
+ 'preferences.title': 'Локальные настройки',
144
+ 'preferences.copy': 'Эти параметры хранятся локально в этом браузере и не изменяют конфигурацию сервера.',
145
+ 'preferences.back': 'Назад к пульту',
146
+ 'preferences.section.local.key': 'Локально',
147
+ 'preferences.section.local.title': 'Настройки браузера',
148
+ 'preferences.section.local.description': 'Выберите язык, тему и ведущую руку для этого устройства.',
149
+ 'preferences.section.remotes.key': 'Пульты',
150
+ 'preferences.section.remotes.title': 'Видимость пультов',
151
+ 'preferences.section.remotes.description': 'Выберите, какие локальные пульты должны отображаться в основном интерфейсе.',
152
+ 'preferences.section.browsers.key': 'Браузеры',
153
+ 'preferences.section.browsers.title': 'Ярлыки браузеров',
154
+ 'preferences.section.browsers.description': 'Выберите, какие локальные браузеры можно показывать в пульте браузера.',
155
+ 'preferences.remote.keyboard': 'Клавиатура',
156
+ 'preferences.remote.browser': 'Браузер',
157
+ 'preferences.remote.vlc': 'VLC',
158
+ 'preferences.remote.samsung': 'Samsung TV',
159
+ 'preferences.remote.preview': 'Превью курсора',
160
+
161
+ 'adminConfig.eyebrow': 'Администрирование',
162
+ 'adminConfig.title': 'Постоянная конфигурация',
163
+ 'adminConfig.copy': 'Поля ниже сохраняются в базе данных и сгруппированы по структуре объекта конфигурации.',
164
+ 'adminConfig.back': 'Назад к пульту',
165
+ 'adminConfig.reload': 'Обновить',
166
+ 'adminConfig.restart': 'Перезапустить сервис',
167
+ 'adminConfig.loading': 'Загрузка конфигурации...',
168
+ 'adminConfig.showSection': 'Показать',
169
+ 'adminConfig.hideSection': 'Скрыть',
170
+ 'adminConfig.defaultButton': 'По умолчанию',
171
+ 'adminConfig.toggleActive': 'Вкл',
172
+ 'adminConfig.toggleInactive': 'Выкл',
173
+ 'adminConfig.statusLoading': 'Загрузка конфигурации...',
174
+ 'adminConfig.statusLoaded': 'Конфигурация загружена.',
175
+ 'adminConfig.statusLoadError': 'Ошибка загрузки.',
176
+ 'adminConfig.detectSamsung': 'Найти ТВ',
177
+ 'adminConfig.section.vlc.title': 'VLC',
178
+ 'adminConfig.section.vlc.description': 'Включить или скрыть remote VLC для всех клиентов.',
179
+ 'adminConfig.field.vlc.enabled': 'Включить remote VLC',
180
+
181
+ 'serverInfo.pageTitle': 'Remote Mouse - Информация о сервере',
182
+ 'serverInfo.heading': 'Remote Mouse - Информация о сервере',
183
+ 'serverInfo.version': 'Версия: {value}',
184
+ 'serverInfo.now': 'Сейчас: {value}',
185
+ 'serverInfo.onlineSince': 'В сети с: {value}',
186
+ 'serverInfo.uptime': 'Время работы: {value}',
187
+ 'serverInfo.clientsCount': 'Клиенты: {value}',
188
+ 'serverInfo.section.clients': 'Подключенные клиенты',
189
+ 'serverInfo.section.tasks': 'Запланированные задачи',
190
+ 'serverInfo.section.tokens': 'Токены',
191
+ 'serverInfo.section.lifecycle': 'Недавние события жизненного цикла',
192
+ 'serverInfo.section.config': 'Конфигурация',
193
+ 'serverInfo.section.sysConfig': 'Системная конфигурация',
194
+ 'serverInfo.section.logs': 'Последние логи',
195
+ 'serverInfo.daemon': 'Демон: {value}{suffix}',
196
+ 'serverInfo.daemon.yes': 'да',
197
+ 'serverInfo.daemon.no': 'нет',
198
+ 'serverInfo.daemon.installed': '(установлен)',
199
+ 'serverInfo.adminActions': 'Административные действия: {value}',
200
+ 'serverInfo.adminActions.enabled': 'включены',
201
+ 'serverInfo.adminActions.disabled': 'отключены',
202
+ 'serverInfo.adminActions.localConfigOnly': 'Когда административные действия отключены, используйте страницу настроек для локальных параметров браузера.',
203
+ 'serverInfo.table.client.id': 'ID',
204
+ 'serverInfo.table.client.connectedAt': 'Подключен с',
205
+ 'serverInfo.table.client.address': 'Адрес',
206
+ 'serverInfo.table.client.transport': 'Транспорт',
207
+ 'serverInfo.table.task.name': 'Имя',
208
+ 'serverInfo.table.task.state': 'Состояние',
209
+ 'serverInfo.table.task.dueAt': 'Срок',
210
+ 'serverInfo.table.task.remaining': 'Через',
211
+ 'serverInfo.table.token.state': 'Состояние',
212
+ 'serverInfo.table.token.token': 'Токен',
213
+ 'serverInfo.table.token.createdAt': 'Создан',
214
+ 'serverInfo.table.token.expiresAt': 'Истекает',
215
+ 'serverInfo.table.lifecycle.id': 'ID',
216
+ 'serverInfo.table.lifecycle.event': 'Событие',
217
+ 'serverInfo.table.lifecycle.requestedAt': 'Запрошено',
218
+ 'serverInfo.table.lifecycle.detectedAt': 'Обнаружено',
219
+ 'serverInfo.table.lifecycle.status': 'Статус',
220
+ 'serverInfo.table.lifecycle.cause': 'Причина',
221
+ 'serverInfo.table.lifecycle.source': 'Источник',
222
+ 'serverInfo.empty.clients': 'Нет подключенных клиентов.',
223
+ 'serverInfo.empty.tasks': 'Нет запланированных задач.',
224
+ 'serverInfo.empty.tokens': 'Нет сохраненных токенов.',
225
+ 'serverInfo.empty.lifecycle': 'Нет записанных событий жизненного цикла.',
226
+ 'serverInfo.empty.logs': 'Логи отсутствуют.',
227
+ 'serverInfo.task.running': 'Выполняется',
228
+ 'serverInfo.task.scheduled': 'Запланировано',
229
+ 'serverInfo.task.waiting': 'Ожидание',
230
+ 'serverInfo.token.active': 'Активный',
231
+ 'serverInfo.token.archived': 'Архивный',
232
+ 'serverInfo.token.masked': '[скрыт]',
233
+ 'serverInfo.duration.hours': '{value}ч',
234
+ 'serverInfo.duration.minutes': '{value}м',
235
+ 'serverInfo.duration.seconds': '{value}с',
236
+ 'serverInfo.nowMoment': 'сейчас',
237
+ 'serverInfo.loadError': 'Ошибка загрузки: {message}',
238
+ 'serverInfo.sseCreateError': 'Не удалось создать подписку на конфигурацию.',
239
+ 'serverInfo.sseInvalid': 'Некорректная SSE-подписка',
240
+ };
@@ -0,0 +1,227 @@
1
+ import {en} from './en.js';
2
+
3
+ export const zh = {
4
+ ...en,
5
+ 'common.unknown': '未知',
6
+ 'common.language': '语言',
7
+ 'common.languageShort': 'ZH',
8
+
9
+ 'main.serverActionsAria': '服务器操作',
10
+ 'main.updatesAria': '更新',
11
+ 'main.updateCheckButton': '检查更新',
12
+ 'main.installUpdateButton': '安装更新',
13
+ 'main.restartServiceButton': '重启服务',
14
+ 'main.displayInfoAria': '显示与信息',
15
+ 'main.openQrServer': '服务器二维码',
16
+ 'main.openQrClient': '客户端二维码',
17
+ 'main.openServerInfoServer': '服务器信息',
18
+ 'main.openServerInfoClient': '客户端信息',
19
+ 'main.openConfig': '配置',
20
+ 'main.accessAria': '访问',
21
+ 'main.toggleQrOverlay': '显示二维码',
22
+ 'main.rotateEntryToken': '更换入口令牌',
23
+ 'main.textInputPlaceholder': '输入要发送的文本',
24
+ 'main.sendText': '发送',
25
+ 'main.connectionUnavailableTitle': '服务器不可用',
26
+ 'main.connectionWaiting': '等待连接中...',
27
+ 'main.connectionExpiredTitle': '连接已过期',
28
+ 'main.connectionExpiredMessage': '请重新扫描服务器二维码。',
29
+ 'main.canvas.oneFingerScroll': '滚动',
30
+ 'main.canvas.dragMouse': '拖动: 鼠标',
31
+ 'main.canvas.touchHelp': '点击: 左键\n双指: 滚动 / 右键\n右侧区域: 滚动',
32
+
33
+ 'adminConfig.eyebrow': '管理',
34
+ 'adminConfig.title': '持久化配置',
35
+ 'adminConfig.copy': '以下字段会存储到数据库中,并按配置对象结构分组显示。',
36
+ 'adminConfig.back': '返回遥控页',
37
+ 'adminConfig.reload': '重新加载',
38
+ 'adminConfig.restart': '重启服务',
39
+ 'adminConfig.loading': '正在加载配置...',
40
+ 'adminConfig.showSection': '显示',
41
+ 'adminConfig.hideSection': '隐藏',
42
+ 'adminConfig.defaultButton': '默认值',
43
+ 'adminConfig.toggleActive': '启用',
44
+ 'adminConfig.toggleInactive': '禁用',
45
+ 'adminConfig.statusLoading': '正在加载配置...',
46
+ 'adminConfig.statusLoaded': '配置已加载。',
47
+ 'adminConfig.statusLoadError': '加载失败。',
48
+ 'adminConfig.detectSamsung': '检测电视',
49
+
50
+ 'serverInfo.pageTitle': 'Remote Mouse - 服务器信息',
51
+ 'serverInfo.heading': 'Remote Mouse - 服务器信息',
52
+ 'serverInfo.now': '当前: {value}',
53
+ 'serverInfo.onlineSince': '在线开始时间: {value}',
54
+ 'serverInfo.uptime': '运行时长: {value}',
55
+ 'serverInfo.clientsCount': '客户端: {value}',
56
+ 'serverInfo.section.clients': '已连接客户端',
57
+ 'serverInfo.section.tasks': '计划任务',
58
+ 'serverInfo.section.config': '配置',
59
+ 'serverInfo.section.sysConfig': '系统配置',
60
+ 'serverInfo.section.logs': '最近日志',
61
+ 'main.workspaceAria': 'Remote 工作区',
62
+ 'main.updateCheckButtonTitle': '强制检查更新',
63
+ 'main.installUpdateButtonTitle': '安装更新',
64
+ 'main.restartServiceButtonTitle': '重启服务',
65
+ 'main.openQrServerTitle': '在服务器上打开二维码页面',
66
+ 'main.openQrClientTitle': '在客户端上打开二维码页面',
67
+ 'main.openServerInfoServerTitle': '在服务器上打开服务器信息页面',
68
+ 'main.openServerInfoClientTitle': '在客户端上打开服务器信息页面',
69
+ 'main.openConfigTitle': '打开配置页面',
70
+ 'main.openPreferences': '偏好设置',
71
+ 'main.openPreferencesTitle': '打开本地偏好设置页面',
72
+ 'main.toggleQrOverlayTitle': '显示或隐藏二维码覆盖层',
73
+ 'main.rotateEntryTokenTitle': '强制轮换入口令牌',
74
+ 'main.adminActionsDisabledMessage': '服务器管理操作已禁用。',
75
+ 'main.adminAppVersion': '版本: --',
76
+ 'main.browserShortcutsAria': '浏览器快捷操作',
77
+ 'main.browserShortcutsLabel': '浏览器',
78
+ 'main.openBrowser': '打开或聚焦浏览器',
79
+ 'main.browserBack': '上一页',
80
+ 'main.browserForward': '下一页',
81
+ 'main.prevTab': '上一个标签页',
82
+ 'main.nextTab': '下一个标签页',
83
+ 'main.newTab': '新建标签页',
84
+ 'main.closeTab': '关闭标签页',
85
+ 'main.addressBar': '地址栏',
86
+ 'main.reload': '重新加载',
87
+ 'main.fullscreen': '全屏',
88
+ 'main.videoPlayPause': '播放/暂停',
89
+ 'main.videoMute': '切换视频静音',
90
+ 'main.videoFullscreen': '视频全屏',
91
+ 'main.windowToggle': '最大化/最小化',
92
+ 'main.windowToggleTitle': '最大化或最小化当前活动窗口',
93
+ 'main.windowClose': '关闭',
94
+ 'main.windowCloseTitle': '关闭当前活动窗口',
95
+ 'main.vlcControlsAria': 'VLC 控制',
96
+ 'main.vlcSectionLabel': 'VLC',
97
+ 'main.vlcOpen': '打开 VLC',
98
+ 'main.vlcOpenTitle': '打开 VLC Media Player 或将其置于前台',
99
+ 'main.vlcPrevious': '上一个媒体',
100
+ 'main.vlcPlayPause': '播放或暂停 VLC',
101
+ 'main.vlcNext': '下一个媒体',
102
+ 'main.vlcSeekBackward': 'VLC 后退',
103
+ 'main.vlcStop': '停止 VLC',
104
+ 'main.vlcSeekForward': 'VLC 前进',
105
+ 'main.vlcVolumeDown': '降低 VLC 音量',
106
+ 'main.vlcMute': '切换 VLC 静音',
107
+ 'main.vlcVolumeUp': '提高 VLC 音量',
108
+ 'main.vlcFullscreen': '切换 VLC 全屏',
109
+ 'main.systemControlsAria': '系统控制',
110
+ 'main.systemSectionLabel': '系统',
111
+ 'main.systemShowDesktop': '显示桌面',
112
+ 'main.systemWindowLeft': '上一个窗口',
113
+ 'main.systemWindowRight': '下一个窗口',
114
+ 'main.systemStartMenu': '打开开始菜单',
115
+ 'main.systemSettings': '打开系统设置',
116
+ 'main.systemNotifications': '打开通知中心',
117
+ 'main.tvControlsAria': 'Samsung TV 控制',
118
+ 'main.tvSectionLabel': 'Samsung TV',
119
+ 'main.samsungOn': '打开 Samsung TV',
120
+ 'main.samsungOff': '关闭 Samsung TV',
121
+ 'main.samsungVolUp': '提高 Samsung 音量',
122
+ 'main.samsungVolDown': '降低 Samsung 音量',
123
+ 'main.samsungMute': '切换 Samsung 静音',
124
+ 'main.samsungInput': '切换 Samsung 输入源',
125
+ 'main.samsungEnter': '确认 Samsung 菜单',
126
+ 'main.samsungPcInput': '切换 Samsung 到 PC 输入',
127
+ 'main.cursorPreviewAria': '光标预览',
128
+ 'main.keyboardPanelAria': '键盘',
129
+ 'main.touchEntryPanelAria': '键盘面板',
130
+ 'main.liveKeyboardPlaceholder': '在此输入',
131
+ 'main.menuAria': '操作',
132
+ 'main.textEntry': '文本输入',
133
+ 'main.touchEntry': '触控输入',
134
+ 'main.keyboard': '键盘',
135
+ 'main.escape': 'Esc',
136
+ 'main.tab': 'Tab',
137
+ 'main.shift': 'Shift',
138
+ 'main.alt': 'Alt',
139
+ 'main.ctrl': 'Ctrl',
140
+ 'main.leftClick': '左键点击',
141
+ 'main.rightClick': '右键点击',
142
+ 'main.enter': 'Enter',
143
+ 'main.orientationLockTitle': '不支持横屏模式',
144
+ 'main.orientationLockMessage': '请将设备旋转回竖屏以使用 remote。',
145
+ 'main.notificationsAria': '通知',
146
+ 'main.shortcut.videoPlayPause': '空格',
147
+ 'main.shortcut.vlcPrevious': 'P',
148
+ 'main.shortcut.vlcPlayPause': '空格',
149
+ 'main.shortcut.vlcNext': 'N',
150
+ 'main.shortcut.vlcSeekBackward': '左方向键',
151
+ 'main.shortcut.vlcStop': 'S',
152
+ 'main.shortcut.vlcSeekForward': '右方向键',
153
+ 'main.shortcut.vlcVolumeDown': 'Ctrl+下',
154
+ 'main.shortcut.vlcMute': 'M',
155
+ 'main.shortcut.vlcVolumeUp': 'Ctrl+上',
156
+ 'main.shortcut.vlcFullscreen': 'F',
157
+ 'preferences.pageTitle': 'Remote Mouse 偏好设置',
158
+ 'preferences.eyebrow': '偏好设置',
159
+ 'preferences.title': '本地偏好设置',
160
+ 'preferences.copy': '这些设置仅保存在当前浏览器中,不会修改服务器配置。',
161
+ 'preferences.back': '返回 remote',
162
+ 'preferences.section.local.key': '本地',
163
+ 'preferences.section.local.title': '浏览器偏好设置',
164
+ 'preferences.section.local.description': '选择此设备使用的语言、主题和惯用手。',
165
+ 'preferences.section.remotes.key': '遥控',
166
+ 'preferences.section.remotes.title': 'Remote 可见性',
167
+ 'preferences.section.remotes.description': '选择主界面中应显示哪些本地 remote。',
168
+ 'preferences.section.browsers.key': '浏览器',
169
+ 'preferences.section.browsers.title': '浏览器启动器',
170
+ 'preferences.section.browsers.description': '选择哪些本地浏览器可以显示在浏览器 remote 中。',
171
+ 'preferences.remote.keyboard': '键盘',
172
+ 'preferences.remote.browser': '浏览器',
173
+ 'preferences.remote.vlc': 'VLC',
174
+ 'preferences.remote.samsung': 'Samsung TV',
175
+ 'preferences.remote.preview': '光标预览',
176
+ 'adminConfig.section.vlc.title': 'VLC',
177
+ 'adminConfig.section.vlc.description': '为所有客户端启用或隐藏 VLC remote。',
178
+ 'adminConfig.field.vlc.enabled': '启用 VLC remote',
179
+ 'serverInfo.version': '版本: {value}',
180
+ 'serverInfo.section.tokens': '令牌',
181
+ 'serverInfo.section.lifecycle': '最近生命周期事件',
182
+ 'serverInfo.daemon': '守护进程: {value}{suffix}',
183
+ 'serverInfo.daemon.yes': '是',
184
+ 'serverInfo.daemon.no': '否',
185
+ 'serverInfo.daemon.installed': '(已安装)',
186
+ 'serverInfo.adminActions': '管理操作: {value}',
187
+ 'serverInfo.adminActions.enabled': '已启用',
188
+ 'serverInfo.adminActions.disabled': '已禁用',
189
+ 'serverInfo.adminActions.localConfigOnly': '当管理操作被禁用时,请使用“偏好设置”页面进行浏览器本地设置。',
190
+ 'serverInfo.table.client.id': 'ID',
191
+ 'serverInfo.table.client.connectedAt': '连接时间',
192
+ 'serverInfo.table.client.address': '地址',
193
+ 'serverInfo.table.client.transport': '传输方式',
194
+ 'serverInfo.table.task.name': '名称',
195
+ 'serverInfo.table.task.state': '状态',
196
+ 'serverInfo.table.task.dueAt': '到期时间',
197
+ 'serverInfo.table.task.remaining': '剩余',
198
+ 'serverInfo.table.token.state': '状态',
199
+ 'serverInfo.table.token.token': '令牌',
200
+ 'serverInfo.table.token.createdAt': '创建时间',
201
+ 'serverInfo.table.token.expiresAt': '过期时间',
202
+ 'serverInfo.table.lifecycle.id': 'ID',
203
+ 'serverInfo.table.lifecycle.event': '事件',
204
+ 'serverInfo.table.lifecycle.requestedAt': '请求时间',
205
+ 'serverInfo.table.lifecycle.detectedAt': '检测时间',
206
+ 'serverInfo.table.lifecycle.status': '状态',
207
+ 'serverInfo.table.lifecycle.cause': '原因',
208
+ 'serverInfo.table.lifecycle.source': '来源',
209
+ 'serverInfo.empty.clients': '没有已连接客户端。',
210
+ 'serverInfo.empty.tasks': '没有计划任务。',
211
+ 'serverInfo.empty.tokens': '没有持久化令牌。',
212
+ 'serverInfo.empty.lifecycle': '没有记录的生命周期事件。',
213
+ 'serverInfo.empty.logs': '没有日志。',
214
+ 'serverInfo.task.running': '运行中',
215
+ 'serverInfo.task.scheduled': '已计划',
216
+ 'serverInfo.task.waiting': '等待中',
217
+ 'serverInfo.token.active': '当前',
218
+ 'serverInfo.token.archived': '已归档',
219
+ 'serverInfo.token.masked': '[已隐藏]',
220
+ 'serverInfo.duration.hours': '{value}小时',
221
+ 'serverInfo.duration.minutes': '{value}分',
222
+ 'serverInfo.duration.seconds': '{value}秒',
223
+ 'serverInfo.nowMoment': '现在',
224
+ 'serverInfo.loadError': '加载错误: {message}',
225
+ 'serverInfo.sseCreateError': '无法创建配置订阅。',
226
+ 'serverInfo.sseInvalid': '无效的 SSE 订阅',
227
+ };
@@ -0,0 +1,15 @@
1
+ export const THEME_STORAGE_KEY = 'remote-mouse.theme';
2
+ export const HANDEDNESS_STORAGE_KEY = 'remote-mouse.handedness';
3
+ export const REMOTE_AUTO_HIDE_STORAGE_KEY = 'remote-mouse.remote-auto-hide';
4
+ export const REMOTE_VISIBILITY_STORAGE_KEY = 'remote-mouse.remote-visibility';
5
+ export const BROWSER_VISIBILITY_STORAGE_KEY = 'remote-mouse.browser-visibility';
6
+ export const PREFERENCES_STORAGE_CHANGED_EVENT = 'preferences-storage:changed';
7
+
8
+ export const THEME_CHANGED_EVENT = 'theme:changed';
9
+ export const HANDEDNESS_CHANGED_EVENT = 'handedness:changed';
10
+ export const REMOTE_AUTO_HIDE_CHANGED_EVENT = 'remote-auto-hide:changed';
11
+ export const REMOTE_VISIBILITY_CHANGED_EVENT = 'remote-visibility:changed';
12
+ export const BROWSER_VISIBILITY_CHANGED_EVENT = 'browser-visibility:changed';
13
+
14
+ export const SUPPORTED_THEMES = new Set(['dark', 'light']);
15
+ export const SUPPORTED_HANDEDNESS = new Set(['right', 'left']);
@@ -0,0 +1,24 @@
1
+ export function applyThemeToDocument(theme) {
2
+ if (typeof document === 'undefined') {
3
+ return theme;
4
+ }
5
+ document.documentElement.dataset.theme = theme;
6
+ document.documentElement.style.colorScheme = theme;
7
+ return theme;
8
+ }
9
+
10
+ export function applyHandednessToDocument(handedness) {
11
+ if (typeof document === 'undefined') {
12
+ return handedness;
13
+ }
14
+ document.documentElement.dataset.handedness = handedness;
15
+ return handedness;
16
+ }
17
+
18
+ export function applyRemoteAutoHideToDocument(enabled) {
19
+ if (typeof document === 'undefined') {
20
+ return enabled;
21
+ }
22
+ document.documentElement.dataset.remoteAutoHide = enabled ? 'true' : 'false';
23
+ return enabled;
24
+ }
@@ -0,0 +1,19 @@
1
+ import {mergeAvailableRemotes} from './state.js';
2
+
3
+ function getBackend(services) {
4
+ if (!services || typeof services.getBackend !== 'function') {
5
+ throw new Error('Preferences loaders require a services container.');
6
+ }
7
+
8
+ return services.getBackend();
9
+ }
10
+
11
+ export async function loadAvailableRemotes(services) {
12
+ const payload = await getBackend(services).getAvailableRemotes();
13
+ return mergeAvailableRemotes(Array.isArray(payload?.remotes) ? payload.remotes : []);
14
+ }
15
+
16
+ export async function loadAvailableBrowsers(services) {
17
+ const payload = await getBackend(services).getAvailableBrowsers();
18
+ return Array.isArray(payload?.browsers) ? payload.browsers : [];
19
+ }
@@ -0,0 +1,26 @@
1
+ import {
2
+ createBrowserVisibilityRow,
3
+ createRemoteVisibilityRow,
4
+ } from './rows.js';
5
+
6
+ export function renderRemoteVisibilityList(remotesRoot, remotes, t, services) {
7
+ if (!remotesRoot) {
8
+ return;
9
+ }
10
+
11
+ remotesRoot.innerHTML = '';
12
+ for (const remote of remotes) {
13
+ remotesRoot.appendChild(createRemoteVisibilityRow(remote, t, services));
14
+ }
15
+ }
16
+
17
+ export function renderBrowserVisibilityList(browsersRoot, browsers, t, services) {
18
+ if (!browsersRoot) {
19
+ return;
20
+ }
21
+
22
+ browsersRoot.innerHTML = '';
23
+ for (const browser of browsers) {
24
+ browsersRoot.appendChild(createBrowserVisibilityRow(browser, t, services));
25
+ }
26
+ }
@@ -0,0 +1,78 @@
1
+ import {
2
+ APP_STATE_BROWSER_VISIBILITY,
3
+ APP_STATE_REMOTE_VISIBILITY,
4
+ } from '../services/app-state/createAppStateService.js';
5
+
6
+ function appendBooleanOptions(select, t) {
7
+ for (const [value, key] of [
8
+ ['true', 'common.enabled'],
9
+ ['false', 'common.disabled'],
10
+ ]) {
11
+ const option = document.createElement('option');
12
+ option.value = value;
13
+ option.textContent = t(key);
14
+ select.appendChild(option);
15
+ }
16
+ }
17
+
18
+ function createVisibilityRowBase(labelText, ariaLabel) {
19
+ const row = document.createElement('div');
20
+ row.className = 'preferences-remote-row';
21
+
22
+ const label = document.createElement('span');
23
+ label.className = 'preferences-remote-label';
24
+ label.textContent = labelText;
25
+
26
+ const select = document.createElement('select');
27
+ select.className = 'preferences-remote-select';
28
+ select.setAttribute('aria-label', ariaLabel);
29
+
30
+ row.append(label, select);
31
+ return {row, select};
32
+ }
33
+
34
+ function getRecordFlag(record, key, fallback = true) {
35
+ if (record && typeof record === 'object' && Object.hasOwn(record, key)) {
36
+ return Boolean(record[key]);
37
+ }
38
+
39
+ return Boolean(fallback);
40
+ }
41
+
42
+ export function createRemoteVisibilityRow(remote, t, services) {
43
+ const appState = services.getAppState();
44
+ const serverEnabled = remote?.enabled !== false;
45
+ const labelText = t(remote.labelKey);
46
+ const {row, select} = createVisibilityRowBase(labelText, labelText);
47
+
48
+ appendBooleanOptions(select, t);
49
+ select.value = serverEnabled && getRecordFlag(appState.get(APP_STATE_REMOTE_VISIBILITY), remote.id, true) ? 'true' : 'false';
50
+ select.disabled = !serverEnabled;
51
+ select.addEventListener('change', () => {
52
+ appState.set(APP_STATE_REMOTE_VISIBILITY, {
53
+ ...appState.get(APP_STATE_REMOTE_VISIBILITY),
54
+ [remote.id]: select.value === 'true',
55
+ });
56
+ });
57
+
58
+ return row;
59
+ }
60
+
61
+ export function createBrowserVisibilityRow(browser, t, services) {
62
+ const appState = services.getAppState();
63
+ const serverEnabled = browser?.enabled !== false;
64
+ const labelText = String(browser.shortLabel || browser.name || browser.id);
65
+ const {row, select} = createVisibilityRowBase(labelText, String(browser.name || browser.id));
66
+
67
+ appendBooleanOptions(select, t);
68
+ select.value = serverEnabled && getRecordFlag(appState.get(APP_STATE_BROWSER_VISIBILITY), browser.id, true) ? 'true' : 'false';
69
+ select.disabled = !serverEnabled;
70
+ select.addEventListener('change', () => {
71
+ appState.set(APP_STATE_BROWSER_VISIBILITY, {
72
+ ...appState.get(APP_STATE_BROWSER_VISIBILITY),
73
+ [browser.id]: select.value === 'true',
74
+ });
75
+ });
76
+
77
+ return row;
78
+ }