@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,351 @@
1
+ /**
2
+ * SteelSeries Prime Mini Wireless configuration protocol — pure encode/decode helpers.
3
+ *
4
+ * Reconstructed from public open-source implementations, not vendor software:
5
+ *
6
+ * - There is **no** `prime_mini_wireless.py` (nor a wired/wireless filename
7
+ * pair) in rivalcfg. The Prime Mini Wireless is instead one of two models
8
+ * inside the shared "Prime Wireless" profile pair:
9
+ * `rivalcfg/devices/prime_wireless_wired.py` (USB-cabled mode) defines two
10
+ * `models` entries — `"SteelSeries Prime Wireless (wired mode)"`
11
+ * (`1038:1842`) and `"SteelSeries Prime Mini Wireless (wired mode)"`
12
+ * (`1038:184A`) — sharing one `settings`/`battery_level`/`save_command`
13
+ * dict. `rivalcfg/devices/prime_wireless_wireless.py` (2.4 GHz dongle mode)
14
+ * mirrors that with `1038:1840` (Prime Wireless) and `1038:1848` (Prime
15
+ * Mini Wireless), built by comprehending `prime_wireless_wired.py`'s
16
+ * `settings`/`battery_level`/`save_command` through one `_patch_command`
17
+ * helper — same transform this file implements as `applyPrimeMiniWirelessFlag`.
18
+ * Both files were read in full. This module implements only the two Prime
19
+ * Mini Wireless product ids (`0x184A` wired, `0x1848` 2.4 GHz) per the
20
+ * scope of this change — see "Scope" below for why the plain Prime
21
+ * Wireless PIDs (`0x1842`/`0x1840`) are deliberately not registered here
22
+ * even though the command set is identical.
23
+ * - rivalcfg `rivalcfg/devices/dpi/truemove_air.py` — same TrueMove Air
24
+ * sensor table as the Rival 3 Wireless and Aerox 5 Wireless — imported
25
+ * from `./rival3-wireless.ts`'s `TRUEMOVE_AIR_DPI_TO_BYTE`, not re-derived.
26
+ * - rivalcfg `rivalcfg/handlers/multidpi_range_choice.py` — `dpi_length_byte: 1`,
27
+ * `first_preset: 0` (same shape as `./aerox5-wireless.ts`, **not**
28
+ * `./rival3-wireless.ts`'s `first_preset: 1`/`dpi_length_byte` via
29
+ * `multidpi_range`).
30
+ * - rivalcfg `rivalcfg/handlers/range.py` — `sleep_timer`/`dim_timer`: the
31
+ * exact same linear range-to-range mapping as `./aerox5-wireless.ts`
32
+ * (`sleep_timer` = minutes × 60000 ms, `dim_timer` = seconds × 1000 ms,
33
+ * both little-endian 3 bytes, `range_length_byte: 3`). Traced by hand
34
+ * against `prime_wireless_wired.py`'s `output_range: [0x000000, 0x124F80, …]`
35
+ * values, not assumed from the Aerox 5 Wireless precedent.
36
+ * - rivalcfg `rivalcfg/handlers/rgbcolor.py` — LED color: `command: [0x21, 0x01, 0x00]`
37
+ * with the RGB triplet appended directly (no zone byte and no bitmask —
38
+ * this is a single-LED mouse, unlike the Aerox 5 Wireless's
39
+ * zone-indexed `steelseriesAerox5WirelessEncodeZoneColor`).
40
+ * - rivalcfg `rivalcfg/handlers/choice.py` — `polling_rate`
41
+ * (`{125:0x03, 250:0x02, 500:0x01, 1000:0x00}`, byte-identical mapping to
42
+ * `./aerox5-wireless.ts`'s table, confirmed by direct comparison — not
43
+ * assumed) and `default_lighting` (`{"off": 0x00, "rainbow": 0x01}`).
44
+ * - rivalcfg `rivalcfg/handlers/buttons/buttons.py` (inferred generic
45
+ * handler backing `value_type: "buttons"`) — 6 mappable buttons + scroll
46
+ * up/down, `button_field_length: 5`, byte-identical ids/offsets to the
47
+ * non-wireless `prime_mini.py`'s `buttons_mapping` block (confirmed by
48
+ * direct comparison of both device files).
49
+ *
50
+ * ## Why wired-cable-mode and 2.4 GHz-dongle-mode share one module
51
+ *
52
+ * Same SteelSeries wireless pattern as `./aerox5-wireless.ts` and
53
+ * `./rival3-wireless.ts`: one physical mouse, two USB product ids depending
54
+ * on transport, one command set modulo a fixed transform.
55
+ * `prime_wireless_wireless.py`'s `_patch_command` ORs `0b01000000` (`0x40`)
56
+ * into `command[0]` of every setting, `battery_level`, and `save_command`
57
+ * inherited from `prime_wireless_wired.py`, and adds `readback_length: 64`
58
+ * (an expected reply length this module does not need to model — no
59
+ * function here reads or validates a readback payload). Every command byte
60
+ * in `PRIME_MINI_WIRELESS_COMMAND` below is the wired-mode value;
61
+ * `applyPrimeMiniWirelessFlag` produces the 2.4 GHz-mode byte from it on demand.
62
+ *
63
+ * ## Scope: Prime Mini Wireless only, not the plain Prime Wireless
64
+ *
65
+ * `prime_wireless_wired.py`/`prime_wireless_wireless.py` document the Prime
66
+ * Mini Wireless and the plain (non-Mini) Prime Wireless as one shared
67
+ * `settings` dict — genuinely the same command bytes, same DPI table, same
68
+ * battery shape, differing only in physical product id. This change is
69
+ * scoped to the Prime Mini Wireless cluster only: `./devices.ts` registers
70
+ * `0x184A`/`0x1848` (Prime Mini Wireless) under family
71
+ * `"prime-mini-wireless"` and deliberately does **not** register
72
+ * `0x1842`/`0x1840` (plain Prime Wireless) — even though this module's
73
+ * exported functions would encode identical bytes for either PID group, the
74
+ * plain Prime Wireless is out of scope for this change and is left for
75
+ * whichever future change actually verifies and ships it.
76
+ *
77
+ * ## No corroboration beyond rivalcfg was possible in this environment
78
+ *
79
+ * No local libratbag checkout was available, and OpenRGB's SteelSeries
80
+ * controller files were not reachable this pass — every command byte above
81
+ * is sourced from rivalcfg alone, same disclosure as `./aerox5-wireless.ts`.
82
+ * This should be treated as unverified beyond rivalcfg until corroborated
83
+ * or hardware-tested.
84
+ *
85
+ * Every command is an HID output report, report id `0x00`, on the vendor
86
+ * configuration interface (`"endpoint": 3` for every model in both rivalcfg
87
+ * files). DPI presets, polling rate, LED color, sleep/dim timers, default
88
+ * lighting, and buttons are write-only — neither rivalcfg file defines a
89
+ * getter for any of them. Battery level **is** readable (see below).
90
+ * Settings apply immediately; the save command (`11 00` wired, `51 00`
91
+ * wireless) persists them to onboard flash. None of this has been verified
92
+ * on physical hardware by this project.
93
+ *
94
+ * ## Battery read
95
+ *
96
+ * `prime_wireless_wired.py` defines a `battery_level` block byte-identical
97
+ * in shape to `./aerox5-wireless.ts`'s: an output-report write of `0x92`
98
+ * gets a 2-byte input-report reply, where `data[1] & 0b10000000` is the
99
+ * charging flag and `((data[1] & ~0b10000000) - 1) * 5` is the percentage
100
+ * (coarse 0–100 scale in steps of 5, `- 1` because the raw byte is
101
+ * 1-indexed). Confirmed by reading `prime_wireless_wired.py` directly — this
102
+ * is **not** `./rival3-wireless.ts`'s `AA 01` / 3-byte-reply /
103
+ * plain-percentage-byte shape; do not conflate the two. In 2.4 GHz mode the
104
+ * query byte is `0x92 | 0x40 = 0xD2`, produced by `applyPrimeMiniWirelessFlag`.
105
+ */
106
+ import { TRUEMOVE_AIR_DPI_TO_BYTE } from "./rival3-wireless.js";
107
+ export const PRIME_MINI_WIRELESS_REPORT_ID = 0x00;
108
+ /** `_WIRELESS_FLAG = 0b01000000` in `prime_wireless_wireless.py`. */
109
+ const WIRELESS_FLAG = 0b01000000;
110
+ /** Wired-cable-mode command bytes; OR `WIRELESS_FLAG` into byte 0 for 2.4 GHz mode. */
111
+ export const PRIME_MINI_WIRELESS_COMMAND = {
112
+ dpiPresets: [0x2d],
113
+ pollingRate: [0x2b],
114
+ color: [0x21, 0x01, 0x00],
115
+ buttonsMapping: [0x2a],
116
+ sleepTimer: [0x29],
117
+ dimTimer: [0x23, 0x0f, 0x01, 0x00, 0x00],
118
+ defaultLighting: [0x27],
119
+ batteryLevel: [0x92],
120
+ };
121
+ /** `11 00` wired-mode / `51 00` 2.4 GHz-mode — see `applyPrimeMiniWirelessFlag`. */
122
+ export const PRIME_MINI_WIRELESS_SAVE_COMMAND = [0x11, 0x00];
123
+ /**
124
+ * `_patch_command`: OR `0b01000000` into the command's first byte. Pass the
125
+ * wired-mode command bytes from `PRIME_MINI_WIRELESS_COMMAND` /
126
+ * `PRIME_MINI_WIRELESS_SAVE_COMMAND`; returns the 2.4 GHz-mode equivalent.
127
+ */
128
+ export function applyPrimeMiniWirelessFlag(command) {
129
+ if (command.length === 0) {
130
+ throw new PrimeMiniWirelessProtocolError("Cannot apply the wireless flag to an empty command.");
131
+ }
132
+ return [command[0] | WIRELESS_FLAG, ...command.slice(1)];
133
+ }
134
+ export const PRIME_MINI_WIRELESS_POLLING_RATES = [125, 250, 500, 1000];
135
+ /** Byte-identical mapping to `./aerox5-wireless.ts`'s `POLLING_RATE_TO_BYTE` — confirmed by comparison, not assumed. */
136
+ const POLLING_RATE_TO_BYTE = new Map([
137
+ [1000, 0x00],
138
+ [500, 0x01],
139
+ [250, 0x02],
140
+ [125, 0x03],
141
+ ]);
142
+ export const PRIME_MINI_WIRELESS_DPI_MIN = 100;
143
+ export const PRIME_MINI_WIRELESS_DPI_MAX = 18000;
144
+ export const PRIME_MINI_WIRELESS_DPI_STEP = 100;
145
+ export const PRIME_MINI_WIRELESS_MAX_DPI_PRESETS = 5;
146
+ export const PRIME_MINI_WIRELESS_BATTERY_RESPONSE_LENGTH = 2;
147
+ const BATTERY_CHARGING_FLAG = 0b10000000;
148
+ export class PrimeMiniWirelessProtocolError extends Error {
149
+ }
150
+ /** The 180 DPI values the shared TrueMove Air sensor table can express, ascending. */
151
+ export function steelseriesPrimeMiniWirelessDpiOptions() {
152
+ return [...TRUEMOVE_AIR_DPI_TO_BYTE.keys()].sort((a, b) => a - b);
153
+ }
154
+ /**
155
+ * `2D <count> <selected> <v1>…<vN>` (or `6D …` in 2.4 GHz mode). One byte
156
+ * per DPI; `selectedIndex` is 0-based and encoded 0-based on the wire
157
+ * (`first_preset: 0`).
158
+ */
159
+ export function steelseriesPrimeMiniWirelessEncodeDpiPresets(presets, selectedIndex, wireless) {
160
+ if (presets.length < 1 || presets.length > PRIME_MINI_WIRELESS_MAX_DPI_PRESETS) {
161
+ throw new PrimeMiniWirelessProtocolError(`SteelSeries Prime Mini Wireless supports 1–${PRIME_MINI_WIRELESS_MAX_DPI_PRESETS} DPI presets.`);
162
+ }
163
+ if (!Number.isInteger(selectedIndex) || selectedIndex < 0 || selectedIndex >= presets.length) {
164
+ throw new PrimeMiniWirelessProtocolError(`Selected DPI preset must be an index into the ${presets.length} presets being written.`);
165
+ }
166
+ const encoded = presets.map((dpi) => {
167
+ const byte = TRUEMOVE_AIR_DPI_TO_BYTE.get(dpi);
168
+ if (byte === undefined) {
169
+ throw new PrimeMiniWirelessProtocolError(`SteelSeries Prime Mini Wireless DPI must be ${PRIME_MINI_WIRELESS_DPI_MIN}–${PRIME_MINI_WIRELESS_DPI_MAX.toLocaleString()} in ${PRIME_MINI_WIRELESS_DPI_STEP} DPI steps.`);
170
+ }
171
+ return byte;
172
+ });
173
+ const command = wireless
174
+ ? applyPrimeMiniWirelessFlag(PRIME_MINI_WIRELESS_COMMAND.dpiPresets)
175
+ : PRIME_MINI_WIRELESS_COMMAND.dpiPresets;
176
+ return new Uint8Array([...command, presets.length, selectedIndex, ...encoded]);
177
+ }
178
+ /** `2B <v>` (`6B` wireless) with 1000→0x00, 500→0x01, 250→0x02, 125→0x03. */
179
+ export function steelseriesPrimeMiniWirelessEncodePollingRate(pollingRateHz, wireless) {
180
+ const byte = POLLING_RATE_TO_BYTE.get(pollingRateHz);
181
+ if (byte === undefined) {
182
+ throw new PrimeMiniWirelessProtocolError("SteelSeries Prime Mini Wireless supports 125, 250, 500, or 1000 Hz polling.");
183
+ }
184
+ const command = wireless
185
+ ? applyPrimeMiniWirelessFlag(PRIME_MINI_WIRELESS_COMMAND.pollingRate)
186
+ : PRIME_MINI_WIRELESS_COMMAND.pollingRate;
187
+ return new Uint8Array([...command, byte]);
188
+ }
189
+ /**
190
+ * `21 01 00 <r> <g> <b>` (`61 01 00 …` wireless) — a fixed single-LED
191
+ * packet, no zone byte (this mouse has one LED, unlike the Aerox 5
192
+ * Wireless's zone-indexed color command).
193
+ */
194
+ export function steelseriesPrimeMiniWirelessEncodeColor(r, g, b, wireless) {
195
+ for (const channel of [r, g, b]) {
196
+ if (!Number.isInteger(channel) || channel < 0 || channel > 255) {
197
+ throw new PrimeMiniWirelessProtocolError("RGB channels must be integers 0–255.");
198
+ }
199
+ }
200
+ const command = wireless ? applyPrimeMiniWirelessFlag(PRIME_MINI_WIRELESS_COMMAND.color) : PRIME_MINI_WIRELESS_COMMAND.color;
201
+ return new Uint8Array([...command, r, g, b]);
202
+ }
203
+ function encodeRangeLE3(value, min, max, unit, msPerUnit) {
204
+ if (!Number.isInteger(value) || value < min || value > max) {
205
+ throw new PrimeMiniWirelessProtocolError(`SteelSeries Prime Mini Wireless ${unit} must be an integer ${min}–${max}.`);
206
+ }
207
+ const ms = value * msPerUnit;
208
+ return [ms & 0xff, (ms >> 8) & 0xff, (ms >> 16) & 0xff];
209
+ }
210
+ /**
211
+ * `29 <ms LE24>` (`69 …` wireless) — idle minutes before sleep, `0` disables.
212
+ * Encoded as `minutes * 60000` milliseconds, little-endian 3 bytes.
213
+ */
214
+ export function steelseriesPrimeMiniWirelessEncodeSleepTimer(minutes, wireless) {
215
+ const bytes = encodeRangeLE3(minutes, 0, 20, "sleep timer minutes", 60_000);
216
+ const command = wireless
217
+ ? applyPrimeMiniWirelessFlag(PRIME_MINI_WIRELESS_COMMAND.sleepTimer)
218
+ : PRIME_MINI_WIRELESS_COMMAND.sleepTimer;
219
+ return new Uint8Array([...command, ...bytes]);
220
+ }
221
+ /**
222
+ * `23 0F 01 00 00 <ms LE24>` (`63 …` wireless) — idle seconds before the LED
223
+ * dims, `0` disables. Encoded as `seconds * 1000` milliseconds,
224
+ * little-endian 3 bytes.
225
+ */
226
+ export function steelseriesPrimeMiniWirelessEncodeDimTimer(seconds, wireless) {
227
+ const bytes = encodeRangeLE3(seconds, 0, 1200, "dim timer seconds", 1_000);
228
+ const command = wireless
229
+ ? applyPrimeMiniWirelessFlag(PRIME_MINI_WIRELESS_COMMAND.dimTimer)
230
+ : PRIME_MINI_WIRELESS_COMMAND.dimTimer;
231
+ return new Uint8Array([...command, ...bytes]);
232
+ }
233
+ /** `off`/`rainbow` LED-at-startup choice. */
234
+ export const PRIME_MINI_WIRELESS_DEFAULT_LIGHTING = {
235
+ off: 0x00,
236
+ rainbow: 0x01,
237
+ };
238
+ /** `27 <v>` (`67 …` wireless) — what the mouse lights up as before a host ever connects. */
239
+ export function steelseriesPrimeMiniWirelessEncodeDefaultLighting(mode, wireless) {
240
+ const byte = PRIME_MINI_WIRELESS_DEFAULT_LIGHTING[mode];
241
+ if (byte === undefined) {
242
+ throw new PrimeMiniWirelessProtocolError(`SteelSeries Prime Mini Wireless default lighting must be one of: ${Object.keys(PRIME_MINI_WIRELESS_DEFAULT_LIGHTING).join(", ")}.`);
243
+ }
244
+ const command = wireless
245
+ ? applyPrimeMiniWirelessFlag(PRIME_MINI_WIRELESS_COMMAND.defaultLighting)
246
+ : PRIME_MINI_WIRELESS_COMMAND.defaultLighting;
247
+ return new Uint8Array([...command, byte]);
248
+ }
249
+ /** `11 00` wired-mode / `51 00` 2.4 GHz-mode — commit the current settings to onboard flash. */
250
+ export function steelseriesPrimeMiniWirelessSaveCommand(wireless) {
251
+ const command = wireless ? applyPrimeMiniWirelessFlag(PRIME_MINI_WIRELESS_SAVE_COMMAND) : PRIME_MINI_WIRELESS_SAVE_COMMAND;
252
+ return new Uint8Array(command);
253
+ }
254
+ /** `92` wired-mode / `D2` 2.4 GHz-mode — the device answers with a two-byte input report. */
255
+ export function steelseriesPrimeMiniWirelessBatteryQuery(wireless) {
256
+ const command = wireless
257
+ ? applyPrimeMiniWirelessFlag(PRIME_MINI_WIRELESS_COMMAND.batteryLevel)
258
+ : PRIME_MINI_WIRELESS_COMMAND.batteryLevel;
259
+ return new Uint8Array(command);
260
+ }
261
+ /**
262
+ * Decode the two-byte battery response: `data[0]` is unused by rivalcfg's
263
+ * lambdas, `data[1]`'s top bit is the charging flag and the remaining 7 bits
264
+ * (1-indexed, hence `- 1`) scaled by 5 give the percentage.
265
+ */
266
+ export function steelseriesPrimeMiniWirelessDecodeBattery(payload) {
267
+ if (payload.length < PRIME_MINI_WIRELESS_BATTERY_RESPONSE_LENGTH) {
268
+ throw new PrimeMiniWirelessProtocolError("SteelSeries Prime Mini Wireless battery response is shorter than two bytes.");
269
+ }
270
+ const statusByte = payload[1];
271
+ const isCharging = (statusByte & BATTERY_CHARGING_FLAG) !== 0;
272
+ const level = ((statusByte & ~BATTERY_CHARGING_FLAG) - 1) * 5;
273
+ return { level, isCharging };
274
+ }
275
+ /**
276
+ * `buttons_mapping.buttons` shared by `prime_wireless_wired.py` — same
277
+ * offsets/ids as the non-wireless `prime_mini.py`'s `buttons_mapping` block,
278
+ * confirmed by direct comparison of both device files, defined separately
279
+ * here so this family's button table stays self-contained.
280
+ */
281
+ export const PRIME_MINI_WIRELESS_BUTTONS = {
282
+ button1: { id: 0x01, offset: 0x00 },
283
+ button2: { id: 0x02, offset: 0x05 },
284
+ button3: { id: 0x03, offset: 0x0a },
285
+ button4: { id: 0x04, offset: 0x0f },
286
+ button5: { id: 0x05, offset: 0x14 },
287
+ button6: { id: 0x06, offset: 0x19 },
288
+ scrollUp: { id: 0x31, offset: 0x1e },
289
+ scrollDown: { id: 0x32, offset: 0x23 },
290
+ };
291
+ const PRIME_MINI_WIRELESS_BUTTON_FIELD_LENGTH = 5;
292
+ const PRIME_MINI_WIRELESS_BUTTON_DISABLE = 0x00;
293
+ const PRIME_MINI_WIRELESS_BUTTON_DPI_SWITCH = 0x30;
294
+ const PRIME_MINI_WIRELESS_BUTTON_KEYBOARD = 0x51;
295
+ const PRIME_MINI_WIRELESS_BUTTON_MULTIMEDIA = 0x61;
296
+ /**
297
+ * `2A` (`6A` wireless) + one 40-byte (`8 buttons × 5-byte field length`)
298
+ * packet, zero-filled except where a mapping is given. Unmapped buttons are
299
+ * left as all-zero fields (rivalcfg instead fills in per-button defaults;
300
+ * this codec leaves that policy to the caller — pass every button
301
+ * explicitly for parity with rivalcfg's default profile).
302
+ */
303
+ export function steelseriesPrimeMiniWirelessEncodeButtonsMapping(mapping, wireless) {
304
+ const names = Object.keys(PRIME_MINI_WIRELESS_BUTTONS);
305
+ const packet = new Array(names.length * PRIME_MINI_WIRELESS_BUTTON_FIELD_LENGTH).fill(0x00);
306
+ for (const [name, action] of Object.entries(mapping)) {
307
+ const slot = PRIME_MINI_WIRELESS_BUTTONS[name];
308
+ if (!slot) {
309
+ throw new PrimeMiniWirelessProtocolError(`Unknown SteelSeries Prime Mini Wireless button "${name}".`);
310
+ }
311
+ const { offset } = slot;
312
+ switch (action.type) {
313
+ case "button": {
314
+ packet[offset] = PRIME_MINI_WIRELESS_BUTTONS[action.target].id;
315
+ break;
316
+ }
317
+ case "disabled": {
318
+ packet[offset] = PRIME_MINI_WIRELESS_BUTTON_DISABLE;
319
+ break;
320
+ }
321
+ case "dpiSwitch": {
322
+ packet[offset] = PRIME_MINI_WIRELESS_BUTTON_DPI_SWITCH;
323
+ break;
324
+ }
325
+ case "keyboard": {
326
+ if (!Number.isInteger(action.code) || action.code < 0 || action.code > 255) {
327
+ throw new PrimeMiniWirelessProtocolError("Keyboard scan codes must be integers 0–255.");
328
+ }
329
+ packet[offset] = PRIME_MINI_WIRELESS_BUTTON_KEYBOARD;
330
+ packet[offset + 1] = action.code;
331
+ break;
332
+ }
333
+ case "multimedia": {
334
+ if (!Number.isInteger(action.code) || action.code < 0 || action.code > 255) {
335
+ throw new PrimeMiniWirelessProtocolError("Multimedia key codes must be integers 0–255.");
336
+ }
337
+ packet[offset] = PRIME_MINI_WIRELESS_BUTTON_MULTIMEDIA;
338
+ packet[offset + 1] = action.code;
339
+ break;
340
+ }
341
+ default: {
342
+ throw new PrimeMiniWirelessProtocolError("Unsupported SteelSeries Prime Mini Wireless button action.");
343
+ }
344
+ }
345
+ }
346
+ const command = wireless
347
+ ? applyPrimeMiniWirelessFlag(PRIME_MINI_WIRELESS_COMMAND.buttonsMapping)
348
+ : PRIME_MINI_WIRELESS_COMMAND.buttonsMapping;
349
+ return new Uint8Array([...command, ...packet]);
350
+ }
351
+ //# sourceMappingURL=prime-mini-wireless.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prime-mini-wireless.js","sourceRoot":"","sources":["../../src/steelseries/prime-mini-wireless.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * SteelSeries Prime+ configuration protocol — pure encode/decode helpers.
3
+ *
4
+ * Reconstructed from public open-source implementations, not vendor software:
5
+ *
6
+ * - rivalcfg `rivalcfg/devices/prime_plus.py` — the primary source for every
7
+ * command byte and default here. `1038:182C`, endpoint 0.
8
+ * - rivalcfg `rivalcfg/devices/prime.py` (plain Prime, `1038:182E` plus two
9
+ * limited-edition PIDs) was read only to confirm Prime+ genuinely warrants
10
+ * its own module rather than reusing Prime's. **Surprising finding: it does
11
+ * not, protocol-wise.** `prime.py` and `prime_plus.py` are byte-identical
12
+ * in every setting (sensitivity `0x61`, polling `0x5D`, color `0x62 0x01`,
13
+ * brightness `0x5F`, buttons `0x5B`, save `0x59`) — the only diff is the
14
+ * model name/PID list. **rivalcfg's Prime+ profile has no OLED/display
15
+ * setting**, contrary to this rollout's assumption that Prime+ has one
16
+ * because the physical mouse has an OLED status screen. Neither rivalcfg,
17
+ * libratbag, nor the OpenRGB SteelSeries controller sources reachable from
18
+ * this environment (see corroboration gap below) expose any command for it.
19
+ * Prime+ is still implemented as its own module/PID/family rather than
20
+ * folded into a shared "Prime" module, per this rollout's instruction to
21
+ * add Prime+ only and not touch plain Prime — but the wire protocol
22
+ * implemented here is not distinguishable from plain Prime's, and a reader
23
+ * should not infer an OLED command exists just because this module exists.
24
+ * - rivalcfg `rivalcfg/handlers/multidpi_range.py` (DPI presets: `merge_bytes(
25
+ * count, selected_preset, ...values)`, `count_mode: "number"`, 2-byte
26
+ * little-endian DPI values here vs. Aerox 3's 1-byte) and
27
+ * `rivalcfg/handlers/range.py` (the range→range linear rounding both
28
+ * `multidpi_range` and `range` build on).
29
+ * - rivalcfg `rivalcfg/handlers/rgbcolor.py` — RGB value encoding (`[r,g,b]`).
30
+ * - rivalcfg `rivalcfg/handlers/range.py` (again, for `led_brightness`: a
31
+ * 0–256 linear passthrough, 2-byte little-endian — note the input range's
32
+ * upper bound is genuinely `256`, not `255`, in `prime_plus.py`; not a typo
33
+ * introduced here).
34
+ * - rivalcfg `rivalcfg/handlers/buttons/buttons.py` — the fixed-width button
35
+ * field layout (5 bytes/button, zero-filled, `offset`/`id` per button),
36
+ * same shape as Aerox 3's but only 6 buttons/slots (no scroll-wheel source
37
+ * entries — `prime_plus.py`'s `buttons_mapping.buttons` table lists only
38
+ * `Button1`..`Button6`).
39
+ * - rivalcfg `rivalcfg/mouse.py` (`_exec_command`) — confirms wire assembly
40
+ * order is `command ++ process_value(value) ++ command_suffix`, which is
41
+ * how the color command's 16-byte suffix (15 zero bytes then `0xFF`)
42
+ * attaches after the `[r,g,b]` triple.
43
+ *
44
+ * ## Corroboration gap (must read before trusting this file)
45
+ *
46
+ * libratbag's `src/driver-steelseries.c` (fetched from
47
+ * `libratbag/libratbag@master`) contains **no reference at all** to Prime,
48
+ * Prime+, PID `0x182C`, or any OLED/display command — it does not implement
49
+ * this device family. The OpenRGB SteelSeries controller sources could not be
50
+ * located at their expected path in this environment (404) and a GitHub code
51
+ * search for "Prime+", `0x182C`, and "SteelSeriesPrime" against
52
+ * `CalcProgrammer1/OpenRGB` returned zero results, so OpenRGB could not be
53
+ * checked either. **rivalcfg is therefore the only source this module is
54
+ * corroborated against.** Nothing here has been verified on physical Prime+
55
+ * hardware by this project.
56
+ *
57
+ * Every command is an HID **output report** with report id 0x00 (`"endpoint":
58
+ * 0` in `prime_plus.py`, the vendor configuration interface). The functions
59
+ * here build the report *payload* — the bytes after the report id — unpadded,
60
+ * matching rivalcfg's `usbhid.py` writes.
61
+ *
62
+ * **This device is write-only.** `prime_plus.py` defines no getter for any
63
+ * setting and no firmware-query command, so there is nothing to probe the
64
+ * mouse with beyond a successful `open()` — same honesty policy as Aerox 3:
65
+ * session state must be tracked client-side with `valuesVerified: false`.
66
+ *
67
+ * Settings apply immediately; the save command (`0x59`, a single byte with
68
+ * **no** `0x00` suffix — distinct from Aerox 3's `11 00` and Rival 3 Gen 1's
69
+ * `09 00`; do not confuse the three) persists them to onboard flash.
70
+ *
71
+ * ## Button mapping — deliberately reduced scope
72
+ *
73
+ * Same scope line drawn in `./aerox3.ts`: this module implements the exact
74
+ * 5-byte/button, zero-filled packet shape and the mouse-button/disable/
75
+ * DPI-switch/scroll-wheel special actions, but does not re-implement
76
+ * rivalcfg's QWERTY or multimedia key-name tables — keyboard and multimedia
77
+ * targets are taken here as raw `{ type: "keyboard" | "multimedia", code }`
78
+ * scan-code bytes, matching `button_keyboard: 0x51` / `button_multimedia:
79
+ * 0x61` verbatim. Unlike Aerox 3, Prime+'s `buttons` table has no `ScrollUp`/
80
+ * `ScrollDown` *source* button entries (only 6 physical buttons are mapped),
81
+ * but `button_scroll_up: 0x31` / `button_scroll_down: 0x32` are still valid
82
+ * *target* special actions for any of the 6 buttons, exposed here as
83
+ * `{ type: "scrollUp" }` / `{ type: "scrollDown" }`.
84
+ */
85
+ export declare const PRIME_PLUS_REPORT_ID = 0;
86
+ /** One-byte command prefixes; the payload is the prefix plus its arguments. */
87
+ export declare const PRIME_PLUS_COMMAND: {
88
+ readonly sensitivity: readonly [97];
89
+ readonly pollingRate: readonly [93];
90
+ readonly color: readonly [98, 1];
91
+ readonly ledBrightness: readonly [95];
92
+ readonly buttonsMapping: readonly [91];
93
+ };
94
+ /** `0x59` — a single byte, no `0x00` suffix. Distinct from Aerox 3's `11 00`. */
95
+ export declare const PRIME_PLUS_SAVE_COMMAND: readonly [89];
96
+ export declare const PRIME_PLUS_POLLING_RATES: readonly [125, 250, 500, 1000];
97
+ export declare const PRIME_PLUS_DPI_MIN = 50;
98
+ export declare const PRIME_PLUS_DPI_MAX = 18000;
99
+ export declare const PRIME_PLUS_DPI_STEP = 50;
100
+ export declare const PRIME_PLUS_MAX_DPI_PRESETS = 5;
101
+ export declare const PRIME_PLUS_LED_BRIGHTNESS_MAX = 256;
102
+ export declare class PrimePlusProtocolError extends Error {
103
+ }
104
+ /** The 360 DPI values the linear `sensitivity` range can express, ascending. */
105
+ export declare function steelseriesPrimePlusDpiOptions(): number[];
106
+ /**
107
+ * `61 <count> <selectedPreset> <v1_lo> <v1_hi> … <vN_lo> <vN_hi>` — replaces
108
+ * the mouse's whole preset table. Two bytes per DPI, little-endian
109
+ * (`dpi_length_byte: 2`); `selectedIndex` is 0-based both here and on the
110
+ * wire (`first_preset: 0`, unlike Aerox 3's `first_preset: 1`).
111
+ */
112
+ export declare function steelseriesPrimePlusEncodeDpiPresets(presets: readonly number[], selectedIndex: number): Uint8Array;
113
+ /** `5D <v>` with 1000→0x01, 500→0x02, 250→0x03, 125→0x04. */
114
+ export declare function steelseriesPrimePlusEncodePollingRate(pollingRateHz: number): Uint8Array;
115
+ /** `62 01 <r> <g> <b>` plus the fixed 16-byte suffix — the scroll-wheel LED color. */
116
+ export declare function steelseriesPrimePlusEncodeColor(r: number, g: number, b: number): Uint8Array;
117
+ /**
118
+ * `5F <v_lo> <v_hi>` — linear 0–256 passthrough, 2-byte little-endian
119
+ * (`range_length_byte: 2`). Note the upper bound is genuinely 256, matching
120
+ * `prime_plus.py`'s `input_range`/`output_range`.
121
+ */
122
+ export declare function steelseriesPrimePlusEncodeLedBrightness(level: number): Uint8Array;
123
+ /** `59` — commit the current settings to onboard flash. */
124
+ export declare function steelseriesPrimePlusSaveCommand(): Uint8Array;
125
+ /** `buttons_mapping.buttons` from `prime_plus.py`, id + byte offset into the packet. */
126
+ export declare const PRIME_PLUS_BUTTONS: {
127
+ readonly button1: {
128
+ readonly id: 1;
129
+ readonly offset: 0;
130
+ };
131
+ readonly button2: {
132
+ readonly id: 2;
133
+ readonly offset: 5;
134
+ };
135
+ readonly button3: {
136
+ readonly id: 3;
137
+ readonly offset: 10;
138
+ };
139
+ readonly button4: {
140
+ readonly id: 4;
141
+ readonly offset: 15;
142
+ };
143
+ readonly button5: {
144
+ readonly id: 5;
145
+ readonly offset: 20;
146
+ };
147
+ readonly button6: {
148
+ readonly id: 6;
149
+ readonly offset: 25;
150
+ };
151
+ };
152
+ export type PrimePlusButtonName = keyof typeof PRIME_PLUS_BUTTONS;
153
+ /** One button's target. */
154
+ export type PrimePlusButtonAction = {
155
+ type: "button";
156
+ target: PrimePlusButtonName;
157
+ } | {
158
+ type: "disabled";
159
+ } | {
160
+ type: "dpiSwitch";
161
+ } | {
162
+ type: "scrollUp";
163
+ } | {
164
+ type: "scrollDown";
165
+ } | {
166
+ type: "keyboard";
167
+ code: number;
168
+ } | {
169
+ type: "multimedia";
170
+ code: number;
171
+ };
172
+ /**
173
+ * `5B` + one 30-byte (`6 buttons × 5-byte field length`) packet, zero-filled
174
+ * except where a mapping is given. Unmapped buttons are left as all-zero
175
+ * fields — pass every button explicitly for parity with rivalcfg's default
176
+ * profile, same policy as `./aerox3.ts`.
177
+ */
178
+ export declare function steelseriesPrimePlusEncodeButtonsMapping(mapping: Partial<Record<PrimePlusButtonName, PrimePlusButtonAction>>): Uint8Array;
179
+ //# sourceMappingURL=prime-plus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prime-plus.d.ts","sourceRoot":"","sources":["../../src/steelseries/prime-plus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmFG;AAEH,eAAO,MAAM,oBAAoB,IAAO,CAAC;AAEzC,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB;;;;;;CAMrB,CAAC;AAYX,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,eAAkB,CAAC;AAEvD,eAAO,MAAM,wBAAwB,gCAAiC,CAAC;AASvE,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AACxC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAE5C,eAAO,MAAM,6BAA6B,MAAM,CAAC;AAEjD,qBAAa,sBAAuB,SAAQ,KAAK;CAAG;AAkBpD,gFAAgF;AAChF,wBAAgB,8BAA8B,IAAI,MAAM,EAAE,CAMzD;AAED;;;;;GAKG;AACH,wBAAgB,oCAAoC,CAClD,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,aAAa,EAAE,MAAM,GACpB,UAAU,CAiBZ;AAED,6DAA6D;AAC7D,wBAAgB,qCAAqC,CAAC,aAAa,EAAE,MAAM,GAAG,UAAU,CAMvF;AAWD,sFAAsF;AACtF,wBAAgB,+BAA+B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAG3F;AAED;;;;GAIG;AACH,wBAAgB,uCAAuC,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAOjF;AAED,2DAA2D;AAC3D,wBAAgB,+BAA+B,IAAI,UAAU,CAE5D;AASD,wFAAwF;AACxF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;CAOyB,CAAC;AAEzD,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,kBAAkB,CAAC;AAUlE,2BAA2B;AAC3B,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,mBAAmB,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzC;;;;;GAKG;AACH,wBAAgB,wCAAwC,CACtD,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,CAAC,GACnE,UAAU,CA0DZ"}