@@ -4,15 +4,22 @@ import { Checkbox } from "@/components/Checkbox";
4
4
import { GridCard } from "@/components/Card" ;
5
5
import PointingFinger from "@/assets/pointing-finger.svg" ;
6
6
import { CheckCircleIcon } from "@heroicons/react/16/solid" ;
7
- import { useSettingsStore } from "@/hooks/stores" ;
7
+ import { useDeviceSettingsStore , useSettingsStore } from "@/hooks/stores" ;
8
8
import notifications from "@/notifications" ;
9
- import { useEffect , useState } from "react" ;
9
+ import { useCallback , useEffect , useState } from "react" ;
10
10
import { useJsonRpc } from "@/hooks/useJsonRpc" ;
11
11
import { cx } from "../cva.config" ;
12
+ import { SelectMenuBasic } from "../components/SelectMenuBasic" ;
13
+
14
+ type ScrollSensitivity = "low" | "default" | "high" ;
12
15
13
16
export default function SettingsKeyboardMouseRoute ( ) {
14
17
const hideCursor = useSettingsStore ( state => state . isCursorHidden ) ;
15
18
const setHideCursor = useSettingsStore ( state => state . setCursorVisibility ) ;
19
+ const scrollSensitivity = useDeviceSettingsStore ( state => state . scrollSensitivity ) ;
20
+ const setScrollSensitivity = useDeviceSettingsStore (
21
+ state => state . setScrollSensitivity ,
22
+ ) ;
16
23
17
24
const [ jiggler , setJiggler ] = useState ( false ) ;
18
25
@@ -23,7 +30,12 @@ export default function SettingsKeyboardMouseRoute() {
23
30
if ( "error" in resp ) return ;
24
31
setJiggler ( resp . result as boolean ) ;
25
32
} ) ;
26
- } , [ send ] ) ;
33
+
34
+ send ( "getScrollSensitivity" , { } , resp => {
35
+ if ( "error" in resp ) return ;
36
+ setScrollSensitivity ( resp . result as ScrollSensitivity ) ;
37
+ } ) ;
38
+ } , [ send , setScrollSensitivity ] ) ;
27
39
28
40
const handleJigglerChange = ( enabled : boolean ) => {
29
41
send ( "setJigglerState" , { enabled } , resp => {
@@ -37,6 +49,22 @@ export default function SettingsKeyboardMouseRoute() {
37
49
} ) ;
38
50
} ;
39
51
52
+ const onScrollSensitivityChange = useCallback (
53
+ ( e : React . ChangeEvent < HTMLSelectElement > ) => {
54
+ const sensitivity = e . target . value as ScrollSensitivity ;
55
+ send ( "setScrollSensitivity" , { sensitivity } , resp => {
56
+ if ( "error" in resp ) {
57
+ notifications . error (
58
+ `Failed to set scroll sensitivity: ${ resp . error . data || "Unknown error" } ` ,
59
+ ) ;
60
+ }
61
+ notifications . success ( "Scroll sensitivity set successfully" ) ;
62
+ setScrollSensitivity ( sensitivity ) ;
63
+ } ) ;
64
+ } ,
65
+ [ send , setScrollSensitivity ] ,
66
+ ) ;
67
+
40
68
return (
41
69
< div className = "space-y-4" >
42
70
< SettingsPageHeader
@@ -54,6 +82,26 @@ export default function SettingsKeyboardMouseRoute() {
54
82
onChange = { e => setHideCursor ( e . target . checked ) }
55
83
/>
56
84
</ SettingsItem >
85
+ < SettingsItem
86
+ title = "Scroll Sensitivity"
87
+ description = "Adjust the scroll sensitivity"
88
+ >
89
+ < SelectMenuBasic
90
+ size = "SM"
91
+ label = ""
92
+ fullWidth
93
+ value = { scrollSensitivity }
94
+ onChange = { onScrollSensitivityChange }
95
+ options = {
96
+ [
97
+ { label : "Low" , value : "low" } ,
98
+ { label : "Default" , value : "default" } ,
99
+ { label : "High" , value : "high" } ,
100
+ ] as { label : string ; value : ScrollSensitivity } [ ]
101
+ }
102
+ />
103
+ </ SettingsItem >
104
+
57
105
< SettingsItem
58
106
title = "Jiggler"
59
107
description = "Simulate movement of a computer mouse. Prevents sleep mode, standby mode or the screensaver from activating"
0 commit comments