@openmouse/protocol 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (547) hide show
  1. package/CONTRIBUTING.md +167 -0
  2. package/README.md +89 -0
  3. package/dist/asus/index.d.ts +52 -0
  4. package/dist/asus/index.d.ts.map +1 -0
  5. package/dist/asus/index.js +248 -0
  6. package/dist/asus/index.js.map +1 -0
  7. package/dist/atk/index.d.ts +200 -0
  8. package/dist/atk/index.d.ts.map +1 -0
  9. package/dist/atk/index.js +480 -0
  10. package/dist/atk/index.js.map +1 -0
  11. package/dist/bitmouse/index.d.ts +284 -0
  12. package/dist/bitmouse/index.d.ts.map +1 -0
  13. package/dist/bitmouse/index.js +396 -0
  14. package/dist/bitmouse/index.js.map +1 -0
  15. package/dist/compx/codec.d.ts +31 -0
  16. package/dist/compx/codec.d.ts.map +1 -0
  17. package/dist/compx/codec.js +50 -0
  18. package/dist/compx/codec.js.map +1 -0
  19. package/dist/corsair/index.d.ts +147 -0
  20. package/dist/corsair/index.d.ts.map +1 -0
  21. package/dist/corsair/index.js +223 -0
  22. package/dist/corsair/index.js.map +1 -0
  23. package/dist/dareu/index.d.ts +136 -0
  24. package/dist/dareu/index.d.ts.map +1 -0
  25. package/dist/dareu/index.js +344 -0
  26. package/dist/dareu/index.js.map +1 -0
  27. package/dist/drivers/asus/hid.d.ts +29 -0
  28. package/dist/drivers/asus/hid.d.ts.map +1 -0
  29. package/dist/drivers/asus/hid.js +419 -0
  30. package/dist/drivers/asus/hid.js.map +1 -0
  31. package/dist/drivers/atk/bitmouse-hid.d.ts +80 -0
  32. package/dist/drivers/atk/bitmouse-hid.d.ts.map +1 -0
  33. package/dist/drivers/atk/bitmouse-hid.js +501 -0
  34. package/dist/drivers/atk/bitmouse-hid.js.map +1 -0
  35. package/dist/drivers/atk/hid.d.ts +163 -0
  36. package/dist/drivers/atk/hid.d.ts.map +1 -0
  37. package/dist/drivers/atk/hid.js +1368 -0
  38. package/dist/drivers/atk/hid.js.map +1 -0
  39. package/dist/drivers/atk/products.d.ts +13 -0
  40. package/dist/drivers/atk/products.d.ts.map +1 -0
  41. package/dist/drivers/atk/products.js +13 -0
  42. package/dist/drivers/atk/products.js.map +1 -0
  43. package/dist/drivers/attackshark/dpi.d.ts +41 -0
  44. package/dist/drivers/attackshark/dpi.d.ts.map +1 -0
  45. package/dist/drivers/attackshark/dpi.js +215 -0
  46. package/dist/drivers/attackshark/dpi.js.map +1 -0
  47. package/dist/drivers/attackshark/hid.d.ts +124 -0
  48. package/dist/drivers/attackshark/hid.d.ts.map +1 -0
  49. package/dist/drivers/attackshark/hid.js +728 -0
  50. package/dist/drivers/attackshark/hid.js.map +1 -0
  51. package/dist/drivers/corsair/hid.d.ts +70 -0
  52. package/dist/drivers/corsair/hid.d.ts.map +1 -0
  53. package/dist/drivers/corsair/hid.js +414 -0
  54. package/dist/drivers/corsair/hid.js.map +1 -0
  55. package/dist/drivers/dareu/hid.d.ts +59 -0
  56. package/dist/drivers/dareu/hid.d.ts.map +1 -0
  57. package/dist/drivers/dareu/hid.js +478 -0
  58. package/dist/drivers/dareu/hid.js.map +1 -0
  59. package/dist/drivers/endgame/egg-op1-hid.d.ts +107 -0
  60. package/dist/drivers/endgame/egg-op1-hid.d.ts.map +1 -0
  61. package/dist/drivers/endgame/egg-op1-hid.js +605 -0
  62. package/dist/drivers/endgame/egg-op1-hid.js.map +1 -0
  63. package/dist/drivers/endgame/egg-we-control.d.ts +42 -0
  64. package/dist/drivers/endgame/egg-we-control.d.ts.map +1 -0
  65. package/dist/drivers/endgame/egg-we-control.js +87 -0
  66. package/dist/drivers/endgame/egg-we-control.js.map +1 -0
  67. package/dist/drivers/endgame/egg-we-hid.d.ts +58 -0
  68. package/dist/drivers/endgame/egg-we-hid.d.ts.map +1 -0
  69. package/dist/drivers/endgame/egg-we-hid.js +514 -0
  70. package/dist/drivers/endgame/egg-we-hid.js.map +1 -0
  71. package/dist/drivers/fantech/hid.d.ts +106 -0
  72. package/dist/drivers/fantech/hid.d.ts.map +1 -0
  73. package/dist/drivers/fantech/hid.js +295 -0
  74. package/dist/drivers/fantech/hid.js.map +1 -0
  75. package/dist/drivers/finalmouse/hid.d.ts +31 -0
  76. package/dist/drivers/finalmouse/hid.d.ts.map +1 -0
  77. package/dist/drivers/finalmouse/hid.js +181 -0
  78. package/dist/drivers/finalmouse/hid.js.map +1 -0
  79. package/dist/drivers/gearhub/hid.d.ts +191 -0
  80. package/dist/drivers/gearhub/hid.d.ts.map +1 -0
  81. package/dist/drivers/gearhub/hid.js +542 -0
  82. package/dist/drivers/gearhub/hid.js.map +1 -0
  83. package/dist/drivers/glorious/classic-hid.d.ts +62 -0
  84. package/dist/drivers/glorious/classic-hid.d.ts.map +1 -0
  85. package/dist/drivers/glorious/classic-hid.js +326 -0
  86. package/dist/drivers/glorious/classic-hid.js.map +1 -0
  87. package/dist/drivers/glorious/hid.d.ts +39 -0
  88. package/dist/drivers/glorious/hid.d.ts.map +1 -0
  89. package/dist/drivers/glorious/hid.js +203 -0
  90. package/dist/drivers/glorious/hid.js.map +1 -0
  91. package/dist/drivers/gwolves/hid.d.ts +27 -0
  92. package/dist/drivers/gwolves/hid.d.ts.map +1 -0
  93. package/dist/drivers/gwolves/hid.js +225 -0
  94. package/dist/drivers/gwolves/hid.js.map +1 -0
  95. package/dist/drivers/gwolves/products.d.ts +17 -0
  96. package/dist/drivers/gwolves/products.d.ts.map +1 -0
  97. package/dist/drivers/gwolves/products.js +58 -0
  98. package/dist/drivers/gwolves/products.js.map +1 -0
  99. package/dist/drivers/hyperx/hid.d.ts +59 -0
  100. package/dist/drivers/hyperx/hid.d.ts.map +1 -0
  101. package/dist/drivers/hyperx/hid.js +229 -0
  102. package/dist/drivers/hyperx/hid.js.map +1 -0
  103. package/dist/drivers/incott/hid.d.ts +513 -0
  104. package/dist/drivers/incott/hid.d.ts.map +1 -0
  105. package/dist/drivers/incott/hid.js +1173 -0
  106. package/dist/drivers/incott/hid.js.map +1 -0
  107. package/dist/drivers/index.d.ts +5 -0
  108. package/dist/drivers/index.d.ts.map +1 -0
  109. package/dist/drivers/index.js +5 -0
  110. package/dist/drivers/index.js.map +1 -0
  111. package/dist/drivers/keychron/m6-hid.d.ts +81 -0
  112. package/dist/drivers/keychron/m6-hid.d.ts.map +1 -0
  113. package/dist/drivers/keychron/m6-hid.js +486 -0
  114. package/dist/drivers/keychron/m6-hid.js.map +1 -0
  115. package/dist/drivers/keychron/nape-hid.d.ts +60 -0
  116. package/dist/drivers/keychron/nape-hid.d.ts.map +1 -0
  117. package/dist/drivers/keychron/nape-hid.js +432 -0
  118. package/dist/drivers/keychron/nape-hid.js.map +1 -0
  119. package/dist/drivers/ksnake/hid.d.ts +74 -0
  120. package/dist/drivers/ksnake/hid.d.ts.map +1 -0
  121. package/dist/drivers/ksnake/hid.js +368 -0
  122. package/dist/drivers/ksnake/hid.js.map +1 -0
  123. package/dist/drivers/lamzu/hid.d.ts +58 -0
  124. package/dist/drivers/lamzu/hid.d.ts.map +1 -0
  125. package/dist/drivers/lamzu/hid.js +414 -0
  126. package/dist/drivers/lamzu/hid.js.map +1 -0
  127. package/dist/drivers/lamzu-atlantis/hid.d.ts +148 -0
  128. package/dist/drivers/lamzu-atlantis/hid.d.ts.map +1 -0
  129. package/dist/drivers/lamzu-atlantis/hid.js +587 -0
  130. package/dist/drivers/lamzu-atlantis/hid.js.map +1 -0
  131. package/dist/drivers/logitech/bolt.d.ts +41 -0
  132. package/dist/drivers/logitech/bolt.d.ts.map +1 -0
  133. package/dist/drivers/logitech/bolt.js +105 -0
  134. package/dist/drivers/logitech/bolt.js.map +1 -0
  135. package/dist/drivers/logitech/hidpp.d.ts +525 -0
  136. package/dist/drivers/logitech/hidpp.d.ts.map +1 -0
  137. package/dist/drivers/logitech/hidpp.js +2774 -0
  138. package/dist/drivers/logitech/hidpp.js.map +1 -0
  139. package/dist/drivers/logitech/mode-status.d.ts +53 -0
  140. package/dist/drivers/logitech/mode-status.d.ts.map +1 -0
  141. package/dist/drivers/logitech/mode-status.js +52 -0
  142. package/dist/drivers/logitech/mode-status.js.map +1 -0
  143. package/dist/drivers/logitech/onboard-profiles.d.ts +298 -0
  144. package/dist/drivers/logitech/onboard-profiles.d.ts.map +1 -0
  145. package/dist/drivers/logitech/onboard-profiles.js +965 -0
  146. package/dist/drivers/logitech/onboard-profiles.js.map +1 -0
  147. package/dist/drivers/logitech/rgb-effects.d.ts +20 -0
  148. package/dist/drivers/logitech/rgb-effects.d.ts.map +1 -0
  149. package/dist/drivers/logitech/rgb-effects.js +93 -0
  150. package/dist/drivers/logitech/rgb-effects.js.map +1 -0
  151. package/dist/drivers/mchose/a5-gen1-hid.d.ts +36 -0
  152. package/dist/drivers/mchose/a5-gen1-hid.d.ts.map +1 -0
  153. package/dist/drivers/mchose/a5-gen1-hid.js +219 -0
  154. package/dist/drivers/mchose/a5-gen1-hid.js.map +1 -0
  155. package/dist/drivers/mchose/dock-hid.d.ts +26 -0
  156. package/dist/drivers/mchose/dock-hid.d.ts.map +1 -0
  157. package/dist/drivers/mchose/dock-hid.js +176 -0
  158. package/dist/drivers/mchose/dock-hid.js.map +1 -0
  159. package/dist/drivers/mchose/hid.d.ts +118 -0
  160. package/dist/drivers/mchose/hid.d.ts.map +1 -0
  161. package/dist/drivers/mchose/hid.js +550 -0
  162. package/dist/drivers/mchose/hid.js.map +1 -0
  163. package/dist/drivers/mchose/v3-hid.d.ts +109 -0
  164. package/dist/drivers/mchose/v3-hid.d.ts.map +1 -0
  165. package/dist/drivers/mchose/v3-hid.js +572 -0
  166. package/dist/drivers/mchose/v3-hid.js.map +1 -0
  167. package/dist/drivers/microsoft/hid.d.ts +25 -0
  168. package/dist/drivers/microsoft/hid.d.ts.map +1 -0
  169. package/dist/drivers/microsoft/hid.js +247 -0
  170. package/dist/drivers/microsoft/hid.js.map +1 -0
  171. package/dist/drivers/moddo/hid.d.ts +31 -0
  172. package/dist/drivers/moddo/hid.d.ts.map +1 -0
  173. package/dist/drivers/moddo/hid.js +154 -0
  174. package/dist/drivers/moddo/hid.js.map +1 -0
  175. package/dist/drivers/mouse-types.d.ts +388 -0
  176. package/dist/drivers/mouse-types.d.ts.map +1 -0
  177. package/dist/drivers/mouse-types.js +2 -0
  178. package/dist/drivers/mouse-types.js.map +1 -0
  179. package/dist/drivers/ninjutso/hid.d.ts +62 -0
  180. package/dist/drivers/ninjutso/hid.d.ts.map +1 -0
  181. package/dist/drivers/ninjutso/hid.js +680 -0
  182. package/dist/drivers/ninjutso/hid.js.map +1 -0
  183. package/dist/drivers/orbital/hid.d.ts +24 -0
  184. package/dist/drivers/orbital/hid.d.ts.map +1 -0
  185. package/dist/drivers/orbital/hid.js +85 -0
  186. package/dist/drivers/orbital/hid.js.map +1 -0
  187. package/dist/drivers/orbital/host-protocol.d.ts +59 -0
  188. package/dist/drivers/orbital/host-protocol.d.ts.map +1 -0
  189. package/dist/drivers/orbital/host-protocol.js +884 -0
  190. package/dist/drivers/orbital/host-protocol.js.map +1 -0
  191. package/dist/drivers/pulsar/pulsar-hid.d.ts +63 -0
  192. package/dist/drivers/pulsar/pulsar-hid.d.ts.map +1 -0
  193. package/dist/drivers/pulsar/pulsar-hid.js +381 -0
  194. package/dist/drivers/pulsar/pulsar-hid.js.map +1 -0
  195. package/dist/drivers/pulsar/pulsar-pro-hid.d.ts +46 -0
  196. package/dist/drivers/pulsar/pulsar-pro-hid.d.ts.map +1 -0
  197. package/dist/drivers/pulsar/pulsar-pro-hid.js +343 -0
  198. package/dist/drivers/pulsar/pulsar-pro-hid.js.map +1 -0
  199. package/dist/drivers/pulsar/pulsar-xs1-hid.d.ts +40 -0
  200. package/dist/drivers/pulsar/pulsar-xs1-hid.d.ts.map +1 -0
  201. package/dist/drivers/pulsar/pulsar-xs1-hid.js +251 -0
  202. package/dist/drivers/pulsar/pulsar-xs1-hid.js.map +1 -0
  203. package/dist/drivers/rawm/hid.d.ts +29 -0
  204. package/dist/drivers/rawm/hid.d.ts.map +1 -0
  205. package/dist/drivers/rawm/hid.js +210 -0
  206. package/dist/drivers/rawm/hid.js.map +1 -0
  207. package/dist/drivers/razer/cobra-hid.d.ts +63 -0
  208. package/dist/drivers/razer/cobra-hid.d.ts.map +1 -0
  209. package/dist/drivers/razer/cobra-hid.js +282 -0
  210. package/dist/drivers/razer/cobra-hid.js.map +1 -0
  211. package/dist/drivers/razer/hid-open.d.ts +13 -0
  212. package/dist/drivers/razer/hid-open.d.ts.map +1 -0
  213. package/dist/drivers/razer/hid-open.js +29 -0
  214. package/dist/drivers/razer/hid-open.js.map +1 -0
  215. package/dist/drivers/razer/hid.d.ts +231 -0
  216. package/dist/drivers/razer/hid.d.ts.map +1 -0
  217. package/dist/drivers/razer/hid.js +772 -0
  218. package/dist/drivers/razer/hid.js.map +1 -0
  219. package/dist/drivers/razer/viper-hid.d.ts +33 -0
  220. package/dist/drivers/razer/viper-hid.d.ts.map +1 -0
  221. package/dist/drivers/razer/viper-hid.js +177 -0
  222. package/dist/drivers/razer/viper-hid.js.map +1 -0
  223. package/dist/drivers/razer/viper-mini-hid.d.ts +58 -0
  224. package/dist/drivers/razer/viper-mini-hid.d.ts.map +1 -0
  225. package/dist/drivers/razer/viper-mini-hid.js +273 -0
  226. package/dist/drivers/razer/viper-mini-hid.js.map +1 -0
  227. package/dist/drivers/razer/viper-v4-pro-hid.d.ts +26 -0
  228. package/dist/drivers/razer/viper-v4-pro-hid.d.ts.map +1 -0
  229. package/dist/drivers/razer/viper-v4-pro-hid.js +154 -0
  230. package/dist/drivers/razer/viper-v4-pro-hid.js.map +1 -0
  231. package/dist/drivers/registry.d.ts +70 -0
  232. package/dist/drivers/registry.d.ts.map +1 -0
  233. package/dist/drivers/registry.js +146 -0
  234. package/dist/drivers/registry.js.map +1 -0
  235. package/dist/drivers/steelseries/aerox3-hid.d.ts +53 -0
  236. package/dist/drivers/steelseries/aerox3-hid.d.ts.map +1 -0
  237. package/dist/drivers/steelseries/aerox3-hid.js +172 -0
  238. package/dist/drivers/steelseries/aerox3-hid.js.map +1 -0
  239. package/dist/drivers/steelseries/aerox5-hid.d.ts +54 -0
  240. package/dist/drivers/steelseries/aerox5-hid.d.ts.map +1 -0
  241. package/dist/drivers/steelseries/aerox5-hid.js +173 -0
  242. package/dist/drivers/steelseries/aerox5-hid.js.map +1 -0
  243. package/dist/drivers/steelseries/aerox5-wireless-hid.d.ts +69 -0
  244. package/dist/drivers/steelseries/aerox5-wireless-hid.d.ts.map +1 -0
  245. package/dist/drivers/steelseries/aerox5-wireless-hid.js +234 -0
  246. package/dist/drivers/steelseries/aerox5-wireless-hid.js.map +1 -0
  247. package/dist/drivers/steelseries/aerox9-wireless-hid.d.ts +70 -0
  248. package/dist/drivers/steelseries/aerox9-wireless-hid.d.ts.map +1 -0
  249. package/dist/drivers/steelseries/aerox9-wireless-hid.js +227 -0
  250. package/dist/drivers/steelseries/aerox9-wireless-hid.js.map +1 -0
  251. package/dist/drivers/steelseries/hid.d.ts +48 -0
  252. package/dist/drivers/steelseries/hid.d.ts.map +1 -0
  253. package/dist/drivers/steelseries/hid.js +157 -0
  254. package/dist/drivers/steelseries/hid.js.map +1 -0
  255. package/dist/drivers/steelseries/prime-mini-wireless-hid.d.ts +62 -0
  256. package/dist/drivers/steelseries/prime-mini-wireless-hid.d.ts.map +1 -0
  257. package/dist/drivers/steelseries/prime-mini-wireless-hid.js +215 -0
  258. package/dist/drivers/steelseries/prime-mini-wireless-hid.js.map +1 -0
  259. package/dist/drivers/steelseries/prime-plus-hid.d.ts +51 -0
  260. package/dist/drivers/steelseries/prime-plus-hid.d.ts.map +1 -0
  261. package/dist/drivers/steelseries/prime-plus-hid.js +150 -0
  262. package/dist/drivers/steelseries/prime-plus-hid.js.map +1 -0
  263. package/dist/drivers/steelseries/rival3-wireless-hid.d.ts +61 -0
  264. package/dist/drivers/steelseries/rival3-wireless-hid.d.ts.map +1 -0
  265. package/dist/drivers/steelseries/rival3-wireless-hid.js +185 -0
  266. package/dist/drivers/steelseries/rival3-wireless-hid.js.map +1 -0
  267. package/dist/drivers/steelseries/rival310-hid.d.ts +59 -0
  268. package/dist/drivers/steelseries/rival310-hid.d.ts.map +1 -0
  269. package/dist/drivers/steelseries/rival310-hid.js +182 -0
  270. package/dist/drivers/steelseries/rival310-hid.js.map +1 -0
  271. package/dist/drivers/steelseries/rival650-hid.d.ts +68 -0
  272. package/dist/drivers/steelseries/rival650-hid.d.ts.map +1 -0
  273. package/dist/drivers/steelseries/rival650-hid.js +209 -0
  274. package/dist/drivers/steelseries/rival650-hid.js.map +1 -0
  275. package/dist/drivers/steelseries/sensei-ten-hid.d.ts +62 -0
  276. package/dist/drivers/steelseries/sensei-ten-hid.d.ts.map +1 -0
  277. package/dist/drivers/steelseries/sensei-ten-hid.js +186 -0
  278. package/dist/drivers/steelseries/sensei-ten-hid.js.map +1 -0
  279. package/dist/drivers/teevolution/hid.d.ts +82 -0
  280. package/dist/drivers/teevolution/hid.d.ts.map +1 -0
  281. package/dist/drivers/teevolution/hid.js +607 -0
  282. package/dist/drivers/teevolution/hid.js.map +1 -0
  283. package/dist/drivers/vendors.d.ts +254 -0
  284. package/dist/drivers/vendors.d.ts.map +1 -0
  285. package/dist/drivers/vendors.js +587 -0
  286. package/dist/drivers/vendors.js.map +1 -0
  287. package/dist/drivers/vgn/hid.d.ts +33 -0
  288. package/dist/drivers/vgn/hid.d.ts.map +1 -0
  289. package/dist/drivers/vgn/hid.js +213 -0
  290. package/dist/drivers/vgn/hid.js.map +1 -0
  291. package/dist/drivers/wallhack/keyboard-hid.d.ts +28 -0
  292. package/dist/drivers/wallhack/keyboard-hid.d.ts.map +1 -0
  293. package/dist/drivers/wallhack/keyboard-hid.js +80 -0
  294. package/dist/drivers/wallhack/keyboard-hid.js.map +1 -0
  295. package/dist/drivers/wallhack/mouse-hid.d.ts +45 -0
  296. package/dist/drivers/wallhack/mouse-hid.d.ts.map +1 -0
  297. package/dist/drivers/wallhack/mouse-hid.js +288 -0
  298. package/dist/drivers/wallhack/mouse-hid.js.map +1 -0
  299. package/dist/drivers/webhid.d.ts +59 -0
  300. package/dist/drivers/webhid.d.ts.map +1 -0
  301. package/dist/drivers/webhid.js +2 -0
  302. package/dist/drivers/webhid.js.map +1 -0
  303. package/dist/drivers/wlmouse/hid.d.ts +81 -0
  304. package/dist/drivers/wlmouse/hid.d.ts.map +1 -0
  305. package/dist/drivers/wlmouse/hid.js +576 -0
  306. package/dist/drivers/wlmouse/hid.js.map +1 -0
  307. package/dist/drivers/wooting/hid.d.ts +86 -0
  308. package/dist/drivers/wooting/hid.d.ts.map +1 -0
  309. package/dist/drivers/wooting/hid.js +320 -0
  310. package/dist/drivers/wooting/hid.js.map +1 -0
  311. package/dist/drivers/zaunkoenig/hid.d.ts +31 -0
  312. package/dist/drivers/zaunkoenig/hid.d.ts.map +1 -0
  313. package/dist/drivers/zaunkoenig/hid.js +162 -0
  314. package/dist/drivers/zaunkoenig/hid.js.map +1 -0
  315. package/dist/endgame-gear/op1.d.ts +165 -0
  316. package/dist/endgame-gear/op1.d.ts.map +1 -0
  317. package/dist/endgame-gear/op1.js +384 -0
  318. package/dist/endgame-gear/op1.js.map +1 -0
  319. package/dist/endgame-gear/wireless.d.ts +93 -0
  320. package/dist/endgame-gear/wireless.d.ts.map +1 -0
  321. package/dist/endgame-gear/wireless.js +242 -0
  322. package/dist/endgame-gear/wireless.js.map +1 -0
  323. package/dist/fantech/index.d.ts +9 -0
  324. package/dist/fantech/index.d.ts.map +1 -0
  325. package/dist/fantech/index.js +11 -0
  326. package/dist/fantech/index.js.map +1 -0
  327. package/dist/finalmouse/index.d.ts +41 -0
  328. package/dist/finalmouse/index.d.ts.map +1 -0
  329. package/dist/finalmouse/index.js +106 -0
  330. package/dist/finalmouse/index.js.map +1 -0
  331. package/dist/gearhub/index.d.ts +210 -0
  332. package/dist/gearhub/index.d.ts.map +1 -0
  333. package/dist/gearhub/index.js +282 -0
  334. package/dist/gearhub/index.js.map +1 -0
  335. package/dist/glorious/index.d.ts +89 -0
  336. package/dist/glorious/index.d.ts.map +1 -0
  337. package/dist/glorious/index.js +236 -0
  338. package/dist/glorious/index.js.map +1 -0
  339. package/dist/glorious-classic/index.d.ts +103 -0
  340. package/dist/glorious-classic/index.d.ts.map +1 -0
  341. package/dist/glorious-classic/index.js +304 -0
  342. package/dist/glorious-classic/index.js.map +1 -0
  343. package/dist/gwolves/index.d.ts +82 -0
  344. package/dist/gwolves/index.d.ts.map +1 -0
  345. package/dist/gwolves/index.js +197 -0
  346. package/dist/gwolves/index.js.map +1 -0
  347. package/dist/hyperx/index.d.ts +181 -0
  348. package/dist/hyperx/index.d.ts.map +1 -0
  349. package/dist/hyperx/index.js +303 -0
  350. package/dist/hyperx/index.js.map +1 -0
  351. package/dist/incott/index.d.ts +1067 -0
  352. package/dist/incott/index.d.ts.map +1 -0
  353. package/dist/incott/index.js +1482 -0
  354. package/dist/incott/index.js.map +1 -0
  355. package/dist/index.d.ts +30 -0
  356. package/dist/index.d.ts.map +1 -0
  357. package/dist/index.js +30 -0
  358. package/dist/index.js.map +1 -0
  359. package/dist/keychron/index.d.ts +194 -0
  360. package/dist/keychron/index.d.ts.map +1 -0
  361. package/dist/keychron/index.js +341 -0
  362. package/dist/keychron/index.js.map +1 -0
  363. package/dist/ksnake/index.d.ts +157 -0
  364. package/dist/ksnake/index.d.ts.map +1 -0
  365. package/dist/ksnake/index.js +314 -0
  366. package/dist/ksnake/index.js.map +1 -0
  367. package/dist/lamzu/atlantis.d.ts +237 -0
  368. package/dist/lamzu/atlantis.d.ts.map +1 -0
  369. package/dist/lamzu/atlantis.js +263 -0
  370. package/dist/lamzu/atlantis.js.map +1 -0
  371. package/dist/lamzu/index.d.ts +60 -0
  372. package/dist/lamzu/index.d.ts.map +1 -0
  373. package/dist/lamzu/index.js +86 -0
  374. package/dist/lamzu/index.js.map +1 -0
  375. package/dist/logitech/controls.d.ts +138 -0
  376. package/dist/logitech/controls.d.ts.map +1 -0
  377. package/dist/logitech/controls.js +184 -0
  378. package/dist/logitech/controls.js.map +1 -0
  379. package/dist/logitech/friendly-name.d.ts +50 -0
  380. package/dist/logitech/friendly-name.d.ts.map +1 -0
  381. package/dist/logitech/friendly-name.js +74 -0
  382. package/dist/logitech/friendly-name.js.map +1 -0
  383. package/dist/logitech/haptics.d.ts +97 -0
  384. package/dist/logitech/haptics.d.ts.map +1 -0
  385. package/dist/logitech/haptics.js +116 -0
  386. package/dist/logitech/haptics.js.map +1 -0
  387. package/dist/logitech/hosts.d.ts +55 -0
  388. package/dist/logitech/hosts.d.ts.map +1 -0
  389. package/dist/logitech/hosts.js +80 -0
  390. package/dist/logitech/hosts.js.map +1 -0
  391. package/dist/logitech/index.d.ts +127 -0
  392. package/dist/logitech/index.d.ts.map +1 -0
  393. package/dist/logitech/index.js +233 -0
  394. package/dist/logitech/index.js.map +1 -0
  395. package/dist/logitech/wheel.d.ts +117 -0
  396. package/dist/logitech/wheel.d.ts.map +1 -0
  397. package/dist/logitech/wheel.js +133 -0
  398. package/dist/logitech/wheel.js.map +1 -0
  399. package/dist/mchose/a5-gen1.d.ts +38 -0
  400. package/dist/mchose/a5-gen1.d.ts.map +1 -0
  401. package/dist/mchose/a5-gen1.js +60 -0
  402. package/dist/mchose/a5-gen1.js.map +1 -0
  403. package/dist/mchose/buttons.d.ts +66 -0
  404. package/dist/mchose/buttons.d.ts.map +1 -0
  405. package/dist/mchose/buttons.js +184 -0
  406. package/dist/mchose/buttons.js.map +1 -0
  407. package/dist/mchose/dock.d.ts +77 -0
  408. package/dist/mchose/dock.d.ts.map +1 -0
  409. package/dist/mchose/dock.js +133 -0
  410. package/dist/mchose/dock.js.map +1 -0
  411. package/dist/mchose/index.d.ts +299 -0
  412. package/dist/mchose/index.d.ts.map +1 -0
  413. package/dist/mchose/index.js +429 -0
  414. package/dist/mchose/index.js.map +1 -0
  415. package/dist/mchose/v3-buttons.d.ts +64 -0
  416. package/dist/mchose/v3-buttons.d.ts.map +1 -0
  417. package/dist/mchose/v3-buttons.js +258 -0
  418. package/dist/mchose/v3-buttons.js.map +1 -0
  419. package/dist/mchose/v3.d.ts +380 -0
  420. package/dist/mchose/v3.d.ts.map +1 -0
  421. package/dist/mchose/v3.js +608 -0
  422. package/dist/mchose/v3.js.map +1 -0
  423. package/dist/microsoft/index.d.ts +19 -0
  424. package/dist/microsoft/index.d.ts.map +1 -0
  425. package/dist/microsoft/index.js +22 -0
  426. package/dist/microsoft/index.js.map +1 -0
  427. package/dist/moddo/index.d.ts +72 -0
  428. package/dist/moddo/index.d.ts.map +1 -0
  429. package/dist/moddo/index.js +147 -0
  430. package/dist/moddo/index.js.map +1 -0
  431. package/dist/ninjutso/index.d.ts +74 -0
  432. package/dist/ninjutso/index.d.ts.map +1 -0
  433. package/dist/ninjutso/index.js +133 -0
  434. package/dist/ninjutso/index.js.map +1 -0
  435. package/dist/orbital/index.d.ts +14 -0
  436. package/dist/orbital/index.d.ts.map +1 -0
  437. package/dist/orbital/index.js +19 -0
  438. package/dist/orbital/index.js.map +1 -0
  439. package/dist/pulsar/index.d.ts +81 -0
  440. package/dist/pulsar/index.d.ts.map +1 -0
  441. package/dist/pulsar/index.js +185 -0
  442. package/dist/pulsar/index.js.map +1 -0
  443. package/dist/rawm/index.d.ts +55 -0
  444. package/dist/rawm/index.d.ts.map +1 -0
  445. package/dist/rawm/index.js +229 -0
  446. package/dist/rawm/index.js.map +1 -0
  447. package/dist/razer/codec.d.ts +504 -0
  448. package/dist/razer/codec.d.ts.map +1 -0
  449. package/dist/razer/codec.js +648 -0
  450. package/dist/razer/codec.js.map +1 -0
  451. package/dist/razer/devices.d.ts +156 -0
  452. package/dist/razer/devices.d.ts.map +1 -0
  453. package/dist/razer/devices.js +540 -0
  454. package/dist/razer/devices.js.map +1 -0
  455. package/dist/razer/index.d.ts +2 -0
  456. package/dist/razer/index.d.ts.map +1 -0
  457. package/dist/razer/index.js +2 -0
  458. package/dist/razer/index.js.map +1 -0
  459. package/dist/razer/v4.d.ts +19 -0
  460. package/dist/razer/v4.d.ts.map +1 -0
  461. package/dist/razer/v4.js +51 -0
  462. package/dist/razer/v4.js.map +1 -0
  463. package/dist/steelseries/aerox3.d.ts +236 -0
  464. package/dist/steelseries/aerox3.d.ts.map +1 -0
  465. package/dist/steelseries/aerox3.js +311 -0
  466. package/dist/steelseries/aerox3.js.map +1 -0
  467. package/dist/steelseries/aerox5-wireless.d.ts +300 -0
  468. package/dist/steelseries/aerox5-wireless.d.ts.map +1 -0
  469. package/dist/steelseries/aerox5-wireless.js +389 -0
  470. package/dist/steelseries/aerox5-wireless.js.map +1 -0
  471. package/dist/steelseries/aerox5.d.ts +228 -0
  472. package/dist/steelseries/aerox5.d.ts.map +1 -0
  473. package/dist/steelseries/aerox5.js +294 -0
  474. package/dist/steelseries/aerox5.js.map +1 -0
  475. package/dist/steelseries/aerox9-wireless.d.ts +213 -0
  476. package/dist/steelseries/aerox9-wireless.d.ts.map +1 -0
  477. package/dist/steelseries/aerox9-wireless.js +305 -0
  478. package/dist/steelseries/aerox9-wireless.js.map +1 -0
  479. package/dist/steelseries/devices.d.ts +82 -0
  480. package/dist/steelseries/devices.d.ts.map +1 -0
  481. package/dist/steelseries/devices.js +310 -0
  482. package/dist/steelseries/devices.js.map +1 -0
  483. package/dist/steelseries/index.d.ts +13 -0
  484. package/dist/steelseries/index.d.ts.map +1 -0
  485. package/dist/steelseries/index.js +13 -0
  486. package/dist/steelseries/index.js.map +1 -0
  487. package/dist/steelseries/prime-mini-wireless.d.ts +253 -0
  488. package/dist/steelseries/prime-mini-wireless.d.ts.map +1 -0
  489. package/dist/steelseries/prime-mini-wireless.js +351 -0
  490. package/dist/steelseries/prime-mini-wireless.js.map +1 -0
  491. package/dist/steelseries/prime-plus.d.ts +179 -0
  492. package/dist/steelseries/prime-plus.d.ts.map +1 -0
  493. package/dist/steelseries/prime-plus.js +275 -0
  494. package/dist/steelseries/prime-plus.js.map +1 -0
  495. package/dist/steelseries/rival3-wireless.d.ts +222 -0
  496. package/dist/steelseries/rival3-wireless.d.ts.map +1 -0
  497. package/dist/steelseries/rival3-wireless.js +308 -0
  498. package/dist/steelseries/rival3-wireless.js.map +1 -0
  499. package/dist/steelseries/rival3.d.ts +99 -0
  500. package/dist/steelseries/rival3.d.ts.map +1 -0
  501. package/dist/steelseries/rival3.js +147 -0
  502. package/dist/steelseries/rival3.js.map +1 -0
  503. package/dist/steelseries/rival310.d.ts +230 -0
  504. package/dist/steelseries/rival310.d.ts.map +1 -0
  505. package/dist/steelseries/rival310.js +322 -0
  506. package/dist/steelseries/rival310.js.map +1 -0
  507. package/dist/steelseries/rival650.d.ts +215 -0
  508. package/dist/steelseries/rival650.d.ts.map +1 -0
  509. package/dist/steelseries/rival650.js +284 -0
  510. package/dist/steelseries/rival650.js.map +1 -0
  511. package/dist/steelseries/sensei-ten.d.ts +283 -0
  512. package/dist/steelseries/sensei-ten.d.ts.map +1 -0
  513. package/dist/steelseries/sensei-ten.js +389 -0
  514. package/dist/steelseries/sensei-ten.js.map +1 -0
  515. package/dist/teevolution/index.d.ts +211 -0
  516. package/dist/teevolution/index.d.ts.map +1 -0
  517. package/dist/teevolution/index.js +458 -0
  518. package/dist/teevolution/index.js.map +1 -0
  519. package/dist/valkyrie/index.d.ts +19 -0
  520. package/dist/valkyrie/index.d.ts.map +1 -0
  521. package/dist/valkyrie/index.js +43 -0
  522. package/dist/valkyrie/index.js.map +1 -0
  523. package/dist/valkyrie/settings.d.ts +28 -0
  524. package/dist/valkyrie/settings.d.ts.map +1 -0
  525. package/dist/valkyrie/settings.js +84 -0
  526. package/dist/valkyrie/settings.js.map +1 -0
  527. package/dist/vgn/index.d.ts +59 -0
  528. package/dist/vgn/index.d.ts.map +1 -0
  529. package/dist/vgn/index.js +165 -0
  530. package/dist/vgn/index.js.map +1 -0
  531. package/dist/wallhack/index.d.ts +165 -0
  532. package/dist/wallhack/index.d.ts.map +1 -0
  533. package/dist/wallhack/index.js +226 -0
  534. package/dist/wallhack/index.js.map +1 -0
  535. package/dist/wlmouse/index.d.ts +4 -0
  536. package/dist/wlmouse/index.d.ts.map +1 -0
  537. package/dist/wlmouse/index.js +7 -0
  538. package/dist/wlmouse/index.js.map +1 -0
  539. package/dist/wooting/index.d.ts +225 -0
  540. package/dist/wooting/index.d.ts.map +1 -0
  541. package/dist/wooting/index.js +296 -0
  542. package/dist/wooting/index.js.map +1 -0
  543. package/dist/zaunkoenig/index.d.ts +49 -0
  544. package/dist/zaunkoenig/index.d.ts.map +1 -0
  545. package/dist/zaunkoenig/index.js +127 -0
  546. package/dist/zaunkoenig/index.js.map +1 -0
  547. package/package.json +193 -0
@@ -0,0 +1,326 @@
1
+ import { GLORIOUS_CLASSIC_DEBOUNCE_MAX_MS, GLORIOUS_CLASSIC_DEFAULT_RGB, GLORIOUS_CLASSIC_DPI_MAX, GLORIOUS_CLASSIC_DPI_MIN, GLORIOUS_CLASSIC_DPI_STAGE_COUNT, GLORIOUS_CLASSIC_LOD_HIGH_MM, GLORIOUS_CLASSIC_LOD_MEDIUM_MM, GLORIOUS_CLASSIC_PACKET_LENGTH, GLORIOUS_CLASSIC_POLLING_RATES, GLORIOUS_CLASSIC_PROFILE_DEFAULT, GLORIOUS_CLASSIC_REPORT_ID, buildGloriousClassicActiveStagePayload, buildGloriousClassicBatteryRequestPayload, buildGloriousClassicDebouncePayload, buildGloriousClassicDpiStagesPayload, buildGloriousClassicLiftOffPayload, buildGloriousClassicPollingRatePayload, buildGloriousClassicRgbPayload, gloriousClassicDecodePollingRate, gloriousClassicEncodePollingRate, parseGloriousClassicBatteryResponse, } from "../../glorious-classic/index.js";
2
+ import { GLORIOUS_CLASSIC_PRODUCTS, VENDOR_ID } from "../vendors.js";
3
+ /**
4
+ * Driver for Glorious's pre-Pixart "classic" line (Model O / O-, Model D /
5
+ * D-, Model I, Model O V2 — plus the newer "core2" 8000Hz-class mice, Model
6
+ * O3 Wireless and Model D 2 PRO 4K/8KHz Edition, on a reduced feature set —
7
+ * see the `generation` doc comment on `GLORIOUS_CLASSIC_PRODUCTS` in
8
+ * vendors.ts for why). The config channel is a feature report, usually 64
9
+ * bytes and unnumbered (id 0), but a real "Model O 2 Wired Mouse"
10
+ * (0x320f:0x823a) instead carries it as numbered report 7 at a 263-byte
11
+ * declared length. Both the report id and byte length are read from the
12
+ * device's own descriptor rather than assumed, so it connects - but every
13
+ * payload below is only reverse-engineered against the 64-byte case, and a
14
+ * diagnostic confirmed the mouse silently ignores a 64-byte payload just
15
+ * zero-padded out to 263 (WebHID's write succeeds; nothing changes on the
16
+ * mouse). See isConfirmedReportLength()'s doc comment: writes are refused
17
+ * for any length this driver hasn't confirmed a real byte layout for,
18
+ * rather than guessing again. See ../../glorious-classic/index.ts for the
19
+ * payload layout, which does not depend on the report id.
20
+ *
21
+ * DPI, polling rate, lift-off distance, and RGB are all write-only on this
22
+ * protocol (neither glorious-ctl nor mxw, the two tools this was ported
23
+ * from, implement a read for them) — like the sibling Pixart driver in
24
+ * ./hid.ts, this class keeps its own last-applied-settings cache so the UI
25
+ * has something to show. Only battery status is actually read from the
26
+ * mouse.
27
+ */
28
+ // Config channel usage pages. Older firmware used 0xff01/0xff00; newer
29
+ // firmware (confirmed on a Model D Wireless, 0x258a:0x2012) moved the
30
+ // unnumbered config feature report to the 0xffff:0 collection instead.
31
+ const CLASSIC_USAGE_PAGES = [0xff01, 0xff00, 0xffff];
32
+ const BATTERY_RESPONSE_DELAY_MS = 60;
33
+ const BATTERY_STATE_LABEL = {
34
+ Normal: "Discharging",
35
+ Asleep: "Unknown",
36
+ WakingUp: "Unknown",
37
+ Unknown: "Unknown",
38
+ };
39
+ const LIFT_OFF_DISTANCES = [
40
+ [GLORIOUS_CLASSIC_LOD_MEDIUM_MM, "Medium"],
41
+ [GLORIOUS_CLASSIC_LOD_HIGH_MM, "High"],
42
+ ];
43
+ const DEFAULT_STATE = {
44
+ profileId: GLORIOUS_CLASSIC_PROFILE_DEFAULT,
45
+ stageDpis: [800, 1600, 3200, 6400],
46
+ activeStage: 0,
47
+ pollingIntervalMs: 1,
48
+ lodMm: GLORIOUS_CLASSIC_LOD_MEDIUM_MM,
49
+ debounceMs: 0,
50
+ };
51
+ export class GloriousClassicHidClient {
52
+ pollIntervalMs = 0;
53
+ device;
54
+ /**
55
+ * The vendor collection's feature report id and byte length, read from the
56
+ * device at connect time rather than assumed - see isConfirmedReportLength()
57
+ * for why a length other than 64 means writes get refused instead of guessed at.
58
+ */
59
+ reportId;
60
+ reportLength;
61
+ lastRgb = GLORIOUS_CLASSIC_DEFAULT_RGB;
62
+ constructor(device) {
63
+ this.device = device;
64
+ const config = GloriousClassicHidClient.findConfigReport(device);
65
+ this.reportId = config?.reportId ?? GLORIOUS_CLASSIC_REPORT_ID;
66
+ this.reportLength = config?.length ?? GLORIOUS_CLASSIC_PACKET_LENGTH;
67
+ }
68
+ static isSupported(device) {
69
+ if (device.vendorId !== VENDOR_ID.gloriousClassic
70
+ && device.vendorId !== VENDOR_ID.gloriousClassicI
71
+ && device.vendorId !== VENDOR_ID.gloriousClassicIWired
72
+ && device.vendorId !== VENDOR_ID.gloriousO3)
73
+ return false;
74
+ if (!GLORIOUS_CLASSIC_PRODUCTS.has(device.productId))
75
+ return false;
76
+ return this.findConfigReport(device) !== null;
77
+ }
78
+ /** The feature-report id and byte length carried by the config channel collection, or null. */
79
+ static findConfigReport(device) {
80
+ for (const collection of device.collections) {
81
+ const found = this.findConfigReportIn(collection);
82
+ if (found !== null)
83
+ return found;
84
+ }
85
+ return null;
86
+ }
87
+ static findConfigReportIn(collection) {
88
+ if (CLASSIC_USAGE_PAGES.includes(collection.usagePage) && collection.featureReports.length > 0) {
89
+ const report = collection.featureReports[0];
90
+ const bits = report.items.reduce((sum, item) => sum + (item.reportSize ?? 0) * (item.reportCount ?? 0), 0);
91
+ return { reportId: report.reportId, length: bits > 0 ? Math.ceil(bits / 8) : GLORIOUS_CLASSIC_PACKET_LENGTH };
92
+ }
93
+ for (const child of collection.children) {
94
+ const found = this.findConfigReportIn(child);
95
+ if (found !== null)
96
+ return found;
97
+ }
98
+ return null;
99
+ }
100
+ /** Resizes a payload (always built at GLORIOUS_CLASSIC_PACKET_LENGTH) to the device's real declared length. */
101
+ fitPayload(payload) {
102
+ if (payload.length === this.reportLength)
103
+ return payload;
104
+ const resized = new Uint8Array(this.reportLength);
105
+ resized.set(payload.subarray(0, Math.min(payload.length, this.reportLength)));
106
+ return resized;
107
+ }
108
+ async send(payload) {
109
+ await this.device.sendFeatureReport(this.reportId, this.fitPayload(payload));
110
+ }
111
+ async open() {
112
+ if (!this.device.opened)
113
+ await this.device.open();
114
+ }
115
+ async close() {
116
+ if (this.device.opened)
117
+ await this.device.close();
118
+ }
119
+ displayName() {
120
+ if (this.device.productName)
121
+ return this.device.productName;
122
+ return GLORIOUS_CLASSIC_PRODUCTS.get(this.device.productId)?.name ?? "Glorious mouse";
123
+ }
124
+ isWireless() {
125
+ return GLORIOUS_CLASSIC_PRODUCTS.get(this.device.productId)?.wireless ?? false;
126
+ }
127
+ /**
128
+ * "core2" (Model O3 Wireless, Model D 2 PRO 4K/8KHz Edition) only gets
129
+ * RGB/debounce/battery — see the doc comment on `GLORIOUS_CLASSIC_PRODUCTS`
130
+ * in vendors.ts for why DPI/polling/LOD stay off for this generation.
131
+ */
132
+ isCore2() {
133
+ return GLORIOUS_CLASSIC_PRODUCTS.get(this.device.productId)?.generation === "core2";
134
+ }
135
+ /**
136
+ * Every payload builder in glorious-classic/index.ts was reverse-engineered
137
+ * against the 64-byte feature report every classic-line unit confirmed so
138
+ * far uses. A real 0x320f:0x823a instead declares a 263-byte report;
139
+ * resizing our 64-byte payload to fit sends without a WebHID error, but a
140
+ * diagnostic confirmed the mouse ignores it outright - the firmware ACKs
141
+ * the write and changes nothing. A report length this driver hasn't seen a
142
+ * real byte layout for is therefore not writable yet, even though it
143
+ * connects and its report id is known - see [[glorious-classic-protocol]]
144
+ * in memory. Refuse instead of guessing again until a capture of the
145
+ * device's own official software gives the real layout.
146
+ */
147
+ isConfirmedReportLength() {
148
+ return this.reportLength === GLORIOUS_CLASSIC_PACKET_LENGTH;
149
+ }
150
+ assertWritable(feature) {
151
+ if (this.isCore2())
152
+ throw new Error(`${feature} is not confirmed on this mouse's newer protocol generation yet.`);
153
+ if (!this.isConfirmedReportLength()) {
154
+ throw new Error(`${feature} is not confirmed on this unit's ${this.reportLength}-byte feature report yet.`);
155
+ }
156
+ }
157
+ getDpiOptions() {
158
+ if (this.isCore2() || !this.isConfirmedReportLength())
159
+ return [];
160
+ const options = [];
161
+ for (let dpi = GLORIOUS_CLASSIC_DPI_MIN; dpi <= GLORIOUS_CLASSIC_DPI_MAX; dpi += 50)
162
+ options.push(dpi);
163
+ return options;
164
+ }
165
+ getSupportedPollingRates() {
166
+ if (this.isCore2() || !this.isConfirmedReportLength())
167
+ return [];
168
+ return GLORIOUS_CLASSIC_POLLING_RATES.map(([, hertz]) => hertz).sort((left, right) => left - right);
169
+ }
170
+ async readStatus() {
171
+ await this.open();
172
+ const state = this.loadState();
173
+ const battery = this.isWireless() ? await this.readBattery().catch(() => null) : null;
174
+ const wireless = this.isWireless();
175
+ const core2 = this.isCore2();
176
+ const restricted = core2 || !this.isConfirmedReportLength();
177
+ const liftOffDistance = restricted ? null : LIFT_OFF_DISTANCES.find(([mm]) => mm === state.lodMm)?.[1] ?? "Medium";
178
+ return {
179
+ brand: "Glorious",
180
+ name: this.displayName(),
181
+ ui: this.getUiHints(),
182
+ batteryPercent: battery?.percent ?? null,
183
+ batteryState: battery
184
+ ? (battery.state === "Normal" && battery.charging ? "Charging" : BATTERY_STATE_LABEL[battery.state])
185
+ : "Unknown",
186
+ dpi: restricted ? 0 : state.stageDpis[state.activeStage] ?? state.stageDpis[0] ?? 800,
187
+ pollingRateHz: restricted ? 0 : gloriousClassicDecodePollingRate(state.pollingIntervalMs) ?? 1000,
188
+ supportedPollingRates: this.getSupportedPollingRates(),
189
+ activeProfile: restricted ? null : state.profileId,
190
+ connectionType: wireless ? "Wireless" : "Wired",
191
+ connectionDetail: wireless
192
+ ? "2.4 GHz / Bluetooth · settings are write-only, not read back"
193
+ : "Wired USB · settings are write-only, not read back",
194
+ debounceMs: state.debounceMs,
195
+ liftOffDistance,
196
+ firmware: [],
197
+ };
198
+ }
199
+ async setDpi(dpi) {
200
+ this.assertWritable("DPI");
201
+ if (!Number.isFinite(dpi) || dpi < GLORIOUS_CLASSIC_DPI_MIN || dpi > GLORIOUS_CLASSIC_DPI_MAX) {
202
+ throw new Error(`DPI must be between ${GLORIOUS_CLASSIC_DPI_MIN} and ${GLORIOUS_CLASSIC_DPI_MAX}.`);
203
+ }
204
+ const state = this.loadState();
205
+ const rounded = Math.round(dpi);
206
+ state.stageDpis[state.activeStage] = rounded;
207
+ await this.open();
208
+ await this.send(buildGloriousClassicDpiStagesPayload(state.stageDpis, state.profileId));
209
+ await this.send(buildGloriousClassicActiveStagePayload(state.activeStage + 1, state.profileId));
210
+ this.saveState(state);
211
+ return rounded;
212
+ }
213
+ async setPollingRate(pollingRateHz) {
214
+ this.assertWritable("Polling rate");
215
+ const intervalMs = gloriousClassicEncodePollingRate(pollingRateHz);
216
+ if (intervalMs === null)
217
+ throw new Error(`This mouse does not support ${pollingRateHz} Hz.`);
218
+ const state = this.loadState();
219
+ await this.open();
220
+ await this.send(buildGloriousClassicPollingRatePayload(intervalMs));
221
+ state.pollingIntervalMs = intervalMs;
222
+ this.saveState(state);
223
+ return pollingRateHz;
224
+ }
225
+ async setLiftOffDistance(value) {
226
+ this.assertWritable("Lift-off distance");
227
+ const millimetres = LIFT_OFF_DISTANCES.find(([, name]) => name === value)?.[0];
228
+ if (!millimetres)
229
+ throw new Error(`This mouse does not support a ${value.toLowerCase()} lift-off distance.`);
230
+ const state = this.loadState();
231
+ await this.open();
232
+ await this.send(buildGloriousClassicLiftOffPayload(millimetres));
233
+ state.lodMm = millimetres;
234
+ this.saveState(state);
235
+ return value;
236
+ }
237
+ async setDebounceTime(milliseconds) {
238
+ // Unlike DPI/polling/LOD, core2 does write debounce - so this only gates
239
+ // on report length, not isCore2().
240
+ if (!this.isConfirmedReportLength()) {
241
+ throw new Error(`Debounce is not confirmed on this unit's ${this.reportLength}-byte feature report yet.`);
242
+ }
243
+ if (!Number.isFinite(milliseconds) || milliseconds < 0 || milliseconds > GLORIOUS_CLASSIC_DEBOUNCE_MAX_MS) {
244
+ throw new Error(`Debounce must be between 0 and ${GLORIOUS_CLASSIC_DEBOUNCE_MAX_MS} ms.`);
245
+ }
246
+ const state = this.loadState();
247
+ const clamped = Math.round(milliseconds);
248
+ await this.open();
249
+ await this.send(buildGloriousClassicDebouncePayload(clamped, state.profileId));
250
+ state.debounceMs = clamped;
251
+ this.saveState(state);
252
+ return clamped;
253
+ }
254
+ getRgb() {
255
+ return this.lastRgb;
256
+ }
257
+ async setRgb(rgb) {
258
+ // Unlike DPI/polling/LOD, core2 does write RGB - so this only gates on
259
+ // report length, not isCore2().
260
+ if (!this.isConfirmedReportLength()) {
261
+ throw new Error(`RGB is not confirmed on this unit's ${this.reportLength}-byte feature report yet.`);
262
+ }
263
+ await this.open();
264
+ await this.send(buildGloriousClassicRgbPayload(rgb));
265
+ this.lastRgb = rgb;
266
+ return rgb;
267
+ }
268
+ async readBattery() {
269
+ await this.send(buildGloriousClassicBatteryRequestPayload());
270
+ await this.delay(BATTERY_RESPONSE_DELAY_MS);
271
+ const view = await this.device.receiveFeatureReport(this.reportId);
272
+ const body = new Uint8Array(view.buffer, view.byteOffset, Math.min(view.byteLength, GLORIOUS_CLASSIC_PACKET_LENGTH));
273
+ return parseGloriousClassicBatteryResponse(body);
274
+ }
275
+ delay(milliseconds) {
276
+ return new Promise((resolve) => setTimeout(resolve, milliseconds));
277
+ }
278
+ getUiHints() {
279
+ return {
280
+ family: "glorious-classic",
281
+ hideLodLow: true,
282
+ hideUnsupportedPollingRates: true,
283
+ hideProcessingCard: true,
284
+ hideSleepCard: true,
285
+ hideSignalCard: true,
286
+ forceShowBattery: this.isWireless(),
287
+ statusNote: this.isCore2()
288
+ ? "This mouse's newer protocol generation only has confirmed commands for RGB, debounce, and battery — DPI, polling rate, and lift-off distance aren't wired in yet."
289
+ : !this.isConfirmedReportLength()
290
+ ? `This mouse connects, but its ${this.reportLength}-byte feature report uses a byte layout this driver hasn't confirmed yet — no settings can be changed until a real capture is available.`
291
+ : "DPI, polling rate, lift-off distance and RGB are written to this mouse but never read back.",
292
+ };
293
+ }
294
+ stateKey() {
295
+ return `openmouse-glorious-classic-state-v1:${this.device.vendorId.toString(16)}-${this.device.productId.toString(16)}`;
296
+ }
297
+ loadState() {
298
+ try {
299
+ const stored = JSON.parse(localStorage.getItem(this.stateKey()) ?? "null");
300
+ if (!stored)
301
+ throw new Error("no stored state");
302
+ return {
303
+ profileId: stored.profileId ?? DEFAULT_STATE.profileId,
304
+ stageDpis: Array.isArray(stored.stageDpis) && stored.stageDpis.length === GLORIOUS_CLASSIC_DPI_STAGE_COUNT
305
+ ? [...stored.stageDpis]
306
+ : [...DEFAULT_STATE.stageDpis],
307
+ activeStage: stored.activeStage ?? DEFAULT_STATE.activeStage,
308
+ pollingIntervalMs: stored.pollingIntervalMs ?? DEFAULT_STATE.pollingIntervalMs,
309
+ lodMm: stored.lodMm ?? DEFAULT_STATE.lodMm,
310
+ debounceMs: stored.debounceMs ?? DEFAULT_STATE.debounceMs,
311
+ };
312
+ }
313
+ catch {
314
+ return { ...DEFAULT_STATE, stageDpis: [...DEFAULT_STATE.stageDpis] };
315
+ }
316
+ }
317
+ saveState(state) {
318
+ try {
319
+ localStorage.setItem(this.stateKey(), JSON.stringify(state));
320
+ }
321
+ catch {
322
+ // Settings still reach the mouse when browser storage is unavailable.
323
+ }
324
+ }
325
+ }
326
+ //# sourceMappingURL=classic-hid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classic-hid.js","sourceRoot":"","sources":["../../../src/drivers/glorious/classic-hid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { GloriousLighting, GloriousSettings } from "../../glorious/index.ts";
2
+ import type { MouseStatus, MouseUiHints } from "../mouse-types.ts";
3
+ type LiftOffDistance = NonNullable<MouseStatus["liftOffDistance"]>;
4
+ export declare class GloriousHidClient {
5
+ /** Write-only protocol — there is nothing to poll. */
6
+ readonly pollIntervalMs = 0;
7
+ readonly device: HIDDevice;
8
+ constructor(device: HIDDevice);
9
+ static isSupported(device: HIDDevice): boolean;
10
+ private static hasConfigReport;
11
+ open(): Promise<void>;
12
+ close(): Promise<void>;
13
+ displayName(): string;
14
+ isWireless(): boolean;
15
+ getDpiOptions(): number[];
16
+ getSupportedPollingRates(): number[];
17
+ readStatus(): Promise<MouseStatus>;
18
+ setDpi(dpi: number): Promise<number>;
19
+ setPollingRate(pollingRateHz: number): Promise<number>;
20
+ setLiftOffDistance(value: LiftOffDistance): Promise<LiftOffDistance>;
21
+ setDebounceTime(milliseconds: number): Promise<number>;
22
+ setSleepTimeout(_seconds: number): Promise<number>;
23
+ /** Last known onboard settings (write-only protocol: nothing to poll). */
24
+ getSettings(): GloriousSettings;
25
+ /** Validates and pushes a full settings payload, returning the stored copy. */
26
+ applySettings(settings: GloriousSettings): Promise<GloriousSettings>;
27
+ /** Firmware never reports lighting back; this returns the last applied state. */
28
+ getLighting(): GloriousLighting;
29
+ setLighting(lighting: GloriousLighting): Promise<GloriousLighting>;
30
+ getUiHints(): MouseUiHints;
31
+ private pushSettings;
32
+ private statusFromState;
33
+ private stateKey;
34
+ private lightingKey;
35
+ private loadState;
36
+ private saveState;
37
+ }
38
+ export {};
39
+ //# sourceMappingURL=hid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hid.d.ts","sourceRoot":"","sources":["../../../src/drivers/glorious/hid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAmBlF,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAWnE,KAAK,eAAe,GAAG,WAAW,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAOnE,qBAAa,iBAAiB;IAC5B,sDAAsD;IACtD,QAAQ,CAAC,cAAc,KAAK;IAC5B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;gBAEf,MAAM,EAAE,SAAS;IAI7B,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO;IAQ9C,OAAO,CAAC,MAAM,CAAC,eAAe;IAMxB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,WAAW,IAAI,MAAM;IAMrB,UAAU,IAAI,OAAO;IAIrB,aAAa,IAAI,MAAM,EAAE;IAMzB,wBAAwB,IAAI,MAAM,EAAE;IAI9B,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;IAKlC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQpC,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAWtD,kBAAkB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IASpE,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUtD,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIxD,0EAA0E;IAC1E,WAAW,IAAI,gBAAgB;IAI/B,+EAA+E;IACzE,aAAa,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAM1E,iFAAiF;IACjF,WAAW,IAAI,gBAAgB;IAQzB,WAAW,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAcxE,UAAU,IAAI,YAAY;YASZ,YAAY;IAU1B,OAAO,CAAC,eAAe;IAwBvB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,SAAS;CAOlB"}
@@ -0,0 +1,203 @@
1
+ import { GLORIOUS_CONFIG_REPORT_ID, GLORIOUS_DEFAULT_LIGHTING, GLORIOUS_DEFAULT_SETTINGS, GLORIOUS_DEBOUNCE_MAX_MS, GLORIOUS_DPI_MAX, GLORIOUS_DPI_MIN, GLORIOUS_DPI_UNIT, GLORIOUS_POLLING_RATES, buildGloriousLightingPayload, buildGloriousSettingsPayload, gloriousDecodePolling, gloriousEncodePolling, gloriousIsSupportedDpi, gloriousNormalizeLighting, gloriousNormalizeSettings, gloriousSanitizeDebounce, } from "../../glorious/index.js";
2
+ import { VENDOR_ID, GLORIOUS_PRODUCTS } from "../vendors.js";
3
+ /**
4
+ * Driver for the write-only Pixart configuration interface of the Glorious
5
+ * Model O 2 / I 2 family. See glorious/index.ts for the payload layout;
6
+ * this file only handles HID plumbing, validation, and local state caching.
7
+ */
8
+ const VENDOR_USAGE_PAGE = 0xff00;
9
+ const LIFT_OFF_DISTANCES = [
10
+ [1, "Medium"],
11
+ [2, "High"],
12
+ ];
13
+ export class GloriousHidClient {
14
+ /** Write-only protocol — there is nothing to poll. */
15
+ pollIntervalMs = 0;
16
+ device;
17
+ constructor(device) {
18
+ this.device = device;
19
+ }
20
+ static isSupported(device) {
21
+ if (device.vendorId !== VENDOR_ID.glorious)
22
+ return false;
23
+ const named = GLORIOUS_PRODUCTS.has(device.productId)
24
+ || /model\s+[odi]\s*2/i.test(device.productName || "");
25
+ if (!named)
26
+ return false;
27
+ return device.collections.some((collection) => this.hasConfigReport(collection));
28
+ }
29
+ static hasConfigReport(collection) {
30
+ return collection.usagePage === VENDOR_USAGE_PAGE
31
+ && collection.featureReports.some((report) => report.reportId === GLORIOUS_CONFIG_REPORT_ID)
32
+ || collection.children.some((child) => this.hasConfigReport(child));
33
+ }
34
+ async open() {
35
+ if (!this.device.opened)
36
+ await this.device.open();
37
+ }
38
+ async close() {
39
+ if (this.device.opened)
40
+ await this.device.close();
41
+ }
42
+ displayName() {
43
+ if (this.device.productName)
44
+ return this.device.productName;
45
+ const known = GLORIOUS_PRODUCTS.get(this.device.productId);
46
+ return known ? `Glorious ${known.name}` : "Glorious mouse";
47
+ }
48
+ isWireless() {
49
+ return GLORIOUS_PRODUCTS.get(this.device.productId)?.wireless ?? false;
50
+ }
51
+ getDpiOptions() {
52
+ const options = [];
53
+ for (let dpi = GLORIOUS_DPI_MIN; dpi <= GLORIOUS_DPI_MAX; dpi += GLORIOUS_DPI_UNIT)
54
+ options.push(dpi);
55
+ return options;
56
+ }
57
+ getSupportedPollingRates() {
58
+ return GLORIOUS_POLLING_RATES.map(([, hertz]) => hertz).sort((left, right) => left - right);
59
+ }
60
+ async readStatus() {
61
+ await this.open();
62
+ return this.statusFromState(this.loadState());
63
+ }
64
+ async setDpi(dpi) {
65
+ if (!gloriousIsSupportedDpi(dpi))
66
+ throw new Error(`${dpi.toLocaleString()} is not a supported DPI value.`);
67
+ const settings = this.loadState();
68
+ settings.stageDpis[settings.activeStage] = dpi;
69
+ await this.pushSettings(settings);
70
+ return dpi;
71
+ }
72
+ async setPollingRate(pollingRateHz) {
73
+ const encoded = gloriousEncodePolling(pollingRateHz);
74
+ if (!encoded || !this.getSupportedPollingRates().includes(pollingRateHz)) {
75
+ throw new Error(`This mouse does not support ${pollingRateHz} Hz.`);
76
+ }
77
+ const settings = this.loadState();
78
+ settings.pollingCode = encoded;
79
+ await this.pushSettings(settings);
80
+ return pollingRateHz;
81
+ }
82
+ async setLiftOffDistance(value) {
83
+ const millimetres = LIFT_OFF_DISTANCES.find(([, name]) => name === value)?.[0];
84
+ if (!millimetres)
85
+ throw new Error(`This mouse does not support a ${value.toLowerCase()} lift-off distance.`);
86
+ const settings = this.loadState();
87
+ settings.lodMm = millimetres;
88
+ await this.pushSettings(settings);
89
+ return value;
90
+ }
91
+ async setDebounceTime(milliseconds) {
92
+ if (!Number.isInteger(milliseconds)) {
93
+ throw new Error(`Debounce must be an even number of milliseconds between 0 and ${GLORIOUS_DEBOUNCE_MAX_MS}.`);
94
+ }
95
+ const settings = this.loadState();
96
+ settings.debounceMs = gloriousSanitizeDebounce(milliseconds);
97
+ await this.pushSettings(settings);
98
+ return settings.debounceMs;
99
+ }
100
+ async setSleepTimeout(_seconds) {
101
+ throw new Error("Auto sleep is not exposed by this device's protocol.");
102
+ }
103
+ /** Last known onboard settings (write-only protocol: nothing to poll). */
104
+ getSettings() {
105
+ return this.loadState();
106
+ }
107
+ /** Validates and pushes a full settings payload, returning the stored copy. */
108
+ async applySettings(settings) {
109
+ const normalized = gloriousNormalizeSettings(settings);
110
+ await this.pushSettings(normalized);
111
+ return this.loadState();
112
+ }
113
+ /** Firmware never reports lighting back; this returns the last applied state. */
114
+ getLighting() {
115
+ try {
116
+ return gloriousNormalizeLighting(JSON.parse(localStorage.getItem(this.lightingKey()) ?? "{}"));
117
+ }
118
+ catch {
119
+ return { ...GLORIOUS_DEFAULT_LIGHTING, colors: [...GLORIOUS_DEFAULT_LIGHTING.colors] };
120
+ }
121
+ }
122
+ async setLighting(lighting) {
123
+ await this.open();
124
+ for (const fragment of buildGloriousLightingPayload(lighting)) {
125
+ await this.device.sendFeatureReport(GLORIOUS_CONFIG_REPORT_ID, fragment.slice(1));
126
+ }
127
+ const normalized = gloriousNormalizeLighting(lighting);
128
+ try {
129
+ localStorage.setItem(this.lightingKey(), JSON.stringify(normalized));
130
+ }
131
+ catch {
132
+ // Lighting still reaches the mouse when browser storage is unavailable.
133
+ }
134
+ return normalized;
135
+ }
136
+ getUiHints() {
137
+ return {
138
+ family: "glorious",
139
+ hideLodLow: true,
140
+ hideUnsupportedPollingRates: true,
141
+ hideProcessingCard: true,
142
+ };
143
+ }
144
+ async pushSettings(settings) {
145
+ await this.open();
146
+ for (const fragment of buildGloriousSettingsPayload(settings)) {
147
+ // Fragments follow the C/hidapi layout where byte 0 is the report ID.
148
+ // WebHID takes the ID separately and prepends it, so only send the body.
149
+ await this.device.sendFeatureReport(GLORIOUS_CONFIG_REPORT_ID, fragment.slice(1));
150
+ }
151
+ this.saveState(settings);
152
+ }
153
+ statusFromState(settings) {
154
+ const wireless = this.isWireless();
155
+ const liftOffDistance = LIFT_OFF_DISTANCES.find(([millimetres]) => millimetres === settings.lodMm)?.[1]
156
+ ?? "Medium";
157
+ return {
158
+ brand: "Glorious",
159
+ name: this.displayName(),
160
+ ui: this.getUiHints(),
161
+ batteryPercent: null,
162
+ batteryState: "Unknown",
163
+ dpi: settings.stageDpis[settings.activeStage] || 800,
164
+ pollingRateHz: gloriousDecodePolling(settings.pollingCode) ?? 1000,
165
+ supportedPollingRates: this.getSupportedPollingRates(),
166
+ activeProfile: settings.activeStage + 1,
167
+ connectionType: wireless ? "Wireless" : "Wired",
168
+ connectionDetail: wireless
169
+ ? "2.4 GHz receiver · write-only config"
170
+ : "Wired USB · write-only config",
171
+ debounceMs: settings.debounceMs,
172
+ liftOffDistance,
173
+ firmware: [],
174
+ };
175
+ }
176
+ stateKey() {
177
+ return `openmouse-glorious-state-v1:${this.device.vendorId.toString(16)}-${this.device.productId.toString(16)}`;
178
+ }
179
+ lightingKey() {
180
+ return `openmouse-glorious-lighting-v1:${this.device.vendorId.toString(16)}-${this.device.productId.toString(16)}`;
181
+ }
182
+ loadState() {
183
+ try {
184
+ return gloriousNormalizeSettings(JSON.parse(localStorage.getItem(this.stateKey()) ?? "{}"));
185
+ }
186
+ catch {
187
+ return {
188
+ ...GLORIOUS_DEFAULT_SETTINGS,
189
+ stageDpis: [...GLORIOUS_DEFAULT_SETTINGS.stageDpis],
190
+ stageColors: [...GLORIOUS_DEFAULT_SETTINGS.stageColors],
191
+ };
192
+ }
193
+ }
194
+ saveState(settings) {
195
+ try {
196
+ localStorage.setItem(this.stateKey(), JSON.stringify(settings));
197
+ }
198
+ catch {
199
+ // Settings still reach the mouse when browser storage is unavailable.
200
+ }
201
+ }
202
+ }
203
+ //# sourceMappingURL=hid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hid.js","sourceRoot":"","sources":["../../../src/drivers/glorious/hid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { MouseStatus } from "../mouse-types.ts";
2
+ export declare class GWolvesHidClient {
3
+ readonly device: HIDDevice;
4
+ private waiter;
5
+ private readonly onInputReport;
6
+ constructor(device: HIDDevice);
7
+ static isSupported(device: HIDDevice): boolean;
8
+ private get product();
9
+ isWirelessPath(): boolean;
10
+ get pollIntervalMs(): number;
11
+ getDpiOptions(): number[];
12
+ open(): Promise<void>;
13
+ readStatus(): Promise<MouseStatus>;
14
+ setDpi(dpi: number): Promise<number>;
15
+ setPollingRate(rate: number): Promise<number>;
16
+ setLiftOffDistance(value: NonNullable<MouseStatus["liftOffDistance"]>): Promise<NonNullable<MouseStatus["liftOffDistance"]>>;
17
+ close(): Promise<void>;
18
+ private readProfile;
19
+ private read;
20
+ private writeScalar;
21
+ private write;
22
+ private transact;
23
+ private version;
24
+ private failWaiter;
25
+ private static reportLength;
26
+ }
27
+ //# sourceMappingURL=hid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hid.d.ts","sourceRoot":"","sources":["../../../src/drivers/gwolves/hid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAyCrD,qBAAa,gBAAgB;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,OAAO,CAAC,MAAM,CAKE;IAEhB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAU5B;gBAEU,MAAM,EAAE,SAAS;IAO7B,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO;IAS9C,OAAO,KAAK,OAAO,GAOlB;IAED,cAAc,IAAI,OAAO;IAIzB,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,aAAa,IAAI,MAAM,EAAE;IAMnB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAMrB,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;IA0ClC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IASpC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAY7C,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAQ5H,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAMd,WAAW;YAWX,IAAI;YAOJ,WAAW;YAWX,KAAK;YAOL,QAAQ;IAmBtB,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,MAAM,CAAC,YAAY;CAG5B"}