fixes etc

This commit is contained in:
Vendicated
2026-04-05 04:07:23 +02:00
parent f3e01c2ba4
commit cf3667c151
12 changed files with 150 additions and 22 deletions
@@ -1,6 +1,13 @@
.vcd-shortcuts-container {
display: flex;
flex-direction: column;
gap: 1em;
padding-block: 1em;
}
.vcd-shortcuts-group {
display: grid;
gap: 0.25em 1em;
gap: 0.25em 0.5em;
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) auto auto;
align-items: center;
}
@@ -21,7 +28,8 @@
border-radius: var(--radius-sm);
width: 100%;
min-height: calc(var(--select-option-height) - 2px);
padding: 0.25em;
padding: 3px 4px 3px 12px;
box-sizing: border-box;
}
.vcd-shortcuts-record-input {
@@ -6,10 +6,23 @@
import "./ShortcutSettings.css";
import { BaseText, Button, DeleteIcon, Switch } from "@vencord/types/components";
import { classNameFactory, identity } from "@vencord/types/utils";
import { BaseText, Button, Card, DeleteIcon, Switch } from "@vencord/types/components";
import {
classNameFactory,
identity,
ModalCloseButton,
ModalContent,
ModalHeader,
ModalRoot,
ModalSize,
openModal
} from "@vencord/types/utils";
import { React, Select, useState } from "@vencord/types/webpack/common";
import { SettingsComponent } from "renderer/components/settings/Settings";
import { onIpcCommand } from "renderer/ipcCommands";
import { reactiveValue } from "renderer/reactiveState";
import { Settings } from "renderer/settings";
import { IpcCommands } from "shared/IpcEvents";
import { recordKeybind } from "./recordKeybind";
@@ -20,13 +33,14 @@ const ShortcutActions = {
toggleMute: "Toggle Mute",
toggleDeafen: "Toggle Deafen",
toggleStreamerMode: "Toggle Streamer Mode",
toggleCamera: "Toggle Camera",
toggleScreenShare: "Toggle Screen Share",
disconnectFromVoiceChannel: "Disconnect from Voice Channel"
disconnectFromVoiceChannel: "Disconnect from VC"
} as const;
export type ShortcutAction = keyof typeof ShortcutActions;
const shortcutStatus = reactiveValue(true);
onIpcCommand(IpcCommands.KEY_BINDS_SET_STATUS, status => (shortcutStatus.value = status));
export interface KeyBind {
id: string;
enabled: boolean;
@@ -109,9 +123,18 @@ function KeyBindGroup({
export function KeyBindSettings() {
const [keyBinds, setKeyBinds] = useState<KeyBind[]>(Settings.store.keyBinds ?? []);
const shortcutsStatus = shortcutStatus.use();
return (
<div>
<div className={cl("container")}>
{shortcutsStatus === false && (
<Card variant="danger">
<BaseText size="md" weight="medium">
Some of your keybinds failed to register.
</BaseText>
</Card>
)}
{keyBinds.map((keyBind, index) => (
<KeyBindGroup
key={keyBind.id}
@@ -147,3 +170,24 @@ export function KeyBindSettings() {
</div>
);
}
export function openKeybindsModal() {
openModal(props => (
<ModalRoot {...props} size={ModalSize.MEDIUM}>
<ModalHeader>
<BaseText size="lg" weight="semibold" tag="h3" style={{ flexGrow: 1 }}>
Keybinds
</BaseText>
<ModalCloseButton onClick={props.onClose} />
</ModalHeader>
<ModalContent>
<KeyBindSettings />
</ModalContent>
</ModalRoot>
));
}
export const KeybindsButton: SettingsComponent = () => {
return <Button onClick={() => openKeybindsModal()}>Configure Keybinds</Button>;
};
@@ -90,7 +90,7 @@ export async function recordKeybind(signal?: AbortSignal): Promise<string> {
}
function cleanup() {
document.removeEventListener("keydown", onKeyDown);
document.removeEventListener("keydown", onKeyDown, { capture: true });
signal?.removeEventListener("abort", onAbort);
}
@@ -101,6 +101,7 @@ export async function recordKeybind(signal?: AbortSignal): Promise<string> {
function onKeyDown(event: KeyboardEvent) {
event.preventDefault();
event.stopImmediatePropagation();
if (MODIFIER_KEYS.has(event.key)) return;
@@ -120,6 +121,6 @@ export async function recordKeybind(signal?: AbortSignal): Promise<string> {
}
signal?.addEventListener("abort", onAbort, { once: true });
document.addEventListener("keydown", onKeyDown);
document.addEventListener("keydown", onKeyDown, { capture: true });
});
}