diff --git a/package-lock.json b/package-lock.json index ffd6e085..d7dd52db 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#032785bbc4f79174e5255d96e1ddcad578175a87", + "resolved": "git+https://github.com/OpenMouse-Project/mouse-protocol.git#1424b1175a863bcd715c1e002e6a8e8af72402bb", "engines": { "node": ">=20" } diff --git a/src/app/App.tsx b/src/app/App.tsx index 1a4b7c64..9c97a768 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, @@ -144,6 +145,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.pulsarPro, ["profiles"]) ? : null, ].filter((node) => node !== null); @@ -290,6 +294,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 13862fda..cfd37ce3 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) => )}
); @@ -263,6 +267,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 (
@@ -300,7 +305,7 @@ export function ProcessingCard({ snapshot }: { snapshot: ControlSnapshot }): Rea />