diff --git a/package-lock.json b/package-lock.json index 6d670e2..99fdcd8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -481,7 +481,7 @@ }, "node_modules/@openmouse/protocol": { "version": "0.1.0", - "resolved": "git+ssh://git@github.com/OpenMouse-Project/mouse-protocol.git#e6b7f22b104053c023daa89fdfc67d1b8ee47645", + "resolved": "git+ssh://git@github.com/OpenMouse-Project/mouse-protocol.git#c46377634bb9a6294a101bb5b799d7737e5b8c40", "engines": { "node": ">=20" } diff --git a/src/app/App.tsx b/src/app/App.tsx index a5860be..0618273 100644 --- a/src/app/App.tsx +++ b/src/app/App.tsx @@ -18,6 +18,7 @@ import { DpiCard } from "./cards/DpiCard"; import { LightforceCard, PollingCard, SensorCard } from "./cards/PerformanceCards"; import { LightingCard } from "./cards/LightingCard"; import { MxMasterButtonsCard, MxMasterCards } from "./cards/MxMasterCards"; +import { AtkButtonCard, AtkProfileCard, AtkReceiverCard } from "./cards/AtkCards"; import { DebounceCard, EggButtonCard, @@ -147,6 +148,9 @@ function Workspace({ show(has.razerButtons, ["buttons"]) ? : null, show(has.mxMasterButtons, ["buttons"]) ? : null, + show(has.atkButtons, ["buttons"]) ? : null, + show(has.atkProfile, ["profiles"]) ? : null, + show(has.atkReceiver, ["advanced"]) ? : null, show(has.powerMode, ["performance"]) ? : null, show(has.buttonMapping, ["buttons"]) @@ -299,6 +303,7 @@ export function App(): ReactNode { if(!has.eggButtons&& !has.razerButtons&& !has.mxMasterButtons&& + !has.atkButtons&& !has.debounce&& !has.lightforce&& !has.eggSpdt&& diff --git a/src/app/cards/AdvancedCards.tsx b/src/app/cards/AdvancedCards.tsx index 0828c5b..53ed934 100644 --- a/src/app/cards/AdvancedCards.tsx +++ b/src/app/cards/AdvancedCards.tsx @@ -131,6 +131,10 @@ export function DebounceCard({ snapshot }: { snapshot: ControlSnapshot }): React const max = snapshot.traits.directMode ? snapshot.capabilities?.debounceMaxMs ?? 20 : snapshot.capabilities?.teevolutionProfile?.debounce.max ?? 20; + const offered = snapshot.capabilities?.debounceOptions; + const options = offered + ? selectableValues([...offered], status.debounceMs) ?? offered + : Array.from({ length: max + 1 }, (_, ms) => ms); const staged = snapshot.pending.keys.includes("debounce"); return (
@@ -141,7 +145,7 @@ export function DebounceCard({ snapshot }: { snapshot: ControlSnapshot }): React disabled={status.debounceMs === null || status.debounceMs === undefined} onChange={(event) => control.applyPulsarValue("debounce", Number(event.currentTarget.value))} > - {Array.from({ length: max + 1 }, (_, ms) => )} + {options.map((ms) => )}
); @@ -265,6 +269,7 @@ export function ProcessingCard({ snapshot }: { snapshot: ControlSnapshot }): Rea const performanceLabel = status.brand === "CRDRAKO" ? "Competitive mode" : status.brand === "Teevolution" ? "Highest performance" : "Performance mode"; + const angleSnappingLabel = status.ui?.family === "atk" ? "Straight-line correction" : "Angle snapping"; return (
@@ -302,7 +307,7 @@ export function ProcessingCard({ snapshot }: { snapshot: ControlSnapshot }): Rea />