gitextract_n58uj4mo/ ├── .github/ │ └── workflows/ │ ├── build.yml │ ├── issue-tracker.yml │ └── release.yml ├── .gitignore ├── Dockerfile ├── LICENSE ├── README.md ├── browser/ │ ├── .editorconfig │ ├── .gitignore │ ├── .prettierignore │ ├── .prettierrc.yaml │ ├── README.md │ ├── eslint.config.js │ ├── index.html │ ├── package.json │ ├── pnpm-workspace.yaml │ ├── postcss.config.js │ ├── src/ │ │ ├── App.tsx │ │ ├── assets/ │ │ │ ├── index.css │ │ │ └── keyboard.css │ │ ├── components/ │ │ │ ├── device-modal/ │ │ │ │ ├── index.tsx │ │ │ │ ├── serial-port.tsx │ │ │ │ └── video.tsx │ │ │ ├── keyboard/ │ │ │ │ └── index.tsx │ │ │ ├── menu/ │ │ │ │ ├── audio/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── fullscreen/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── keyboard/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── paste.tsx │ │ │ │ │ ├── shortcuts/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── recorder.tsx │ │ │ │ │ │ ├── shortcut.tsx │ │ │ │ │ │ └── types.ts │ │ │ │ │ └── virtual-keyboard.tsx │ │ │ │ ├── mouse/ │ │ │ │ │ ├── direction.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── jiggler.tsx │ │ │ │ │ ├── mode.tsx │ │ │ │ │ ├── speed.tsx │ │ │ │ │ └── style.tsx │ │ │ │ ├── recorder/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── serial-port/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── settings/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── language.tsx │ │ │ │ └── video/ │ │ │ │ ├── device.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── resolution.tsx │ │ │ │ ├── rotation.tsx │ │ │ │ └── scale.tsx │ │ │ ├── mouse/ │ │ │ │ ├── absolute.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── relative.tsx │ │ │ │ ├── touchpad.ts │ │ │ │ └── types.ts │ │ │ ├── ui/ │ │ │ │ ├── kbd.tsx │ │ │ │ └── scroll-area.tsx │ │ │ └── virtual-keyboard/ │ │ │ ├── index.tsx │ │ │ └── keys.ts │ │ ├── i18n/ │ │ │ ├── index.ts │ │ │ ├── languages.ts │ │ │ └── locales/ │ │ │ ├── be.ts │ │ │ ├── de.ts │ │ │ ├── en.ts │ │ │ ├── ko.ts │ │ │ ├── nl.ts │ │ │ ├── pl.ts │ │ │ ├── pt_br.ts │ │ │ ├── ru.ts │ │ │ ├── zh.ts │ │ │ └── zh_tw.ts │ │ ├── jotai/ │ │ │ ├── device.ts │ │ │ ├── keyboard.ts │ │ │ └── mouse.ts │ │ ├── libs/ │ │ │ ├── browser/ │ │ │ │ └── index.ts │ │ │ ├── device/ │ │ │ │ ├── index.ts │ │ │ │ ├── proto.ts │ │ │ │ ├── serial-port.ts │ │ │ │ └── utils.ts │ │ │ ├── keyboard/ │ │ │ │ ├── charCodes.ts │ │ │ │ ├── keyboard.ts │ │ │ │ └── keymap.ts │ │ │ ├── media/ │ │ │ │ ├── camera.ts │ │ │ │ └── permission.ts │ │ │ ├── mouse/ │ │ │ │ └── index.ts │ │ │ ├── mouse-jiggler/ │ │ │ │ └── index.ts │ │ │ └── storage/ │ │ │ └── index.ts │ │ ├── main.tsx │ │ ├── types.ts │ │ └── vite-env.d.ts │ ├── tailwind.config.js │ ├── tsconfig.app.json │ ├── tsconfig.json │ ├── tsconfig.node.json │ ├── vite.config.d.ts │ └── vite.config.ts ├── desktop/ │ ├── .editorconfig │ ├── .gitignore │ ├── .npmrc │ ├── .prettierignore │ ├── .prettierrc.yaml │ ├── README.md │ ├── build/ │ │ ├── entitlements.mac.plist │ │ └── icon.icns │ ├── dev-app-update.yml │ ├── electron-builder.yml │ ├── electron.vite.config.ts │ ├── eslint.config.mjs │ ├── notarize.js │ ├── package.json │ ├── src/ │ │ ├── common/ │ │ │ └── ipc-events.ts │ │ ├── main/ │ │ │ ├── device/ │ │ │ │ ├── index.ts │ │ │ │ ├── proto.ts │ │ │ │ └── serial-port.ts │ │ │ ├── events/ │ │ │ │ ├── app.ts │ │ │ │ ├── index.ts │ │ │ │ ├── serial-port.ts │ │ │ │ └── updater.ts │ │ │ └── index.ts │ │ ├── preload/ │ │ │ ├── index.d.ts │ │ │ └── index.ts │ │ └── renderer/ │ │ ├── index.html │ │ └── src/ │ │ ├── App.tsx │ │ ├── assets/ │ │ │ └── styles/ │ │ │ ├── base.css │ │ │ ├── keyboard.css │ │ │ └── main.css │ │ ├── components/ │ │ │ ├── device/ │ │ │ │ ├── connect.tsx │ │ │ │ ├── disconnect.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── serial-port.tsx │ │ │ │ └── video.tsx │ │ │ ├── keyboard/ │ │ │ │ └── index.tsx │ │ │ ├── menu/ │ │ │ │ ├── audio/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── keyboard/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── paste.tsx │ │ │ │ │ ├── shortcuts/ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── recorder.tsx │ │ │ │ │ │ ├── shortcut.tsx │ │ │ │ │ │ └── types.ts │ │ │ │ │ └── virtual-keyboard.tsx │ │ │ │ ├── language/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── mouse/ │ │ │ │ │ ├── direction.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── jiggler.tsx │ │ │ │ │ ├── mode.tsx │ │ │ │ │ ├── speed.tsx │ │ │ │ │ └── style.tsx │ │ │ │ ├── recorder/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── serial-port/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── settings/ │ │ │ │ │ ├── about.tsx │ │ │ │ │ ├── appearance.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── reset.tsx │ │ │ │ │ └── update.tsx │ │ │ │ └── video/ │ │ │ │ ├── device.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── resolution.tsx │ │ │ │ └── scale.tsx │ │ │ ├── mouse/ │ │ │ │ ├── absolute.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── relative.tsx │ │ │ │ ├── touchpad.ts │ │ │ │ └── types.ts │ │ │ ├── ui/ │ │ │ │ ├── kbd.tsx │ │ │ │ └── scroll-area.tsx │ │ │ └── virtual-keyboard/ │ │ │ ├── index.tsx │ │ │ └── virtual-keys.ts │ │ ├── env.d.ts │ │ ├── i18n/ │ │ │ ├── index.ts │ │ │ ├── languages.ts │ │ │ └── locales/ │ │ │ ├── be.ts │ │ │ ├── de.ts │ │ │ ├── en.ts │ │ │ ├── ja.ts │ │ │ ├── ko.ts │ │ │ ├── nl.ts │ │ │ ├── pl.ts │ │ │ ├── pt_br.ts │ │ │ ├── ru.ts │ │ │ ├── zh.ts │ │ │ └── zh_tw.ts │ │ ├── jotai/ │ │ │ ├── device.ts │ │ │ ├── keyboard.ts │ │ │ └── mouse.ts │ │ ├── libs/ │ │ │ ├── keyboard/ │ │ │ │ ├── charCodes.ts │ │ │ │ ├── keyboard.ts │ │ │ │ └── keymap.ts │ │ │ ├── media/ │ │ │ │ ├── camera.ts │ │ │ │ └── permission.ts │ │ │ ├── mouse/ │ │ │ │ └── index.ts │ │ │ ├── mouse-jiggler/ │ │ │ │ └── index.ts │ │ │ └── storage/ │ │ │ ├── expiry.ts │ │ │ └── index.ts │ │ ├── main.tsx │ │ └── types.ts │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── tsconfig.web.json ├── docker-compose.yml └── nginx.conf