@benev/tact 0.4.0-0 → 0.4.0-10

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 (518) hide show
  1. package/README.md +173 -61
  2. package/package.json +9 -7
  3. package/s/demo/main.bundle.ts +18 -3
  4. package/s/demo/main.css +41 -5
  5. package/s/demo/presets.ts +54 -0
  6. package/s/gamepad/gamepad-app/element.ts +11 -4
  7. package/s/gamepad/gamepad-app/style.css.ts +5 -1
  8. package/s/gamepad/index.html.ts +1 -1
  9. package/s/gamepad/main.css +10 -1
  10. package/s/index.html.ts +28 -15
  11. package/s/lib/index.ts +15 -4
  12. package/s/lib/input/{encoder.ts → controller.ts} +26 -15
  13. package/s/lib/input/data/endian.ts +3 -0
  14. package/s/lib/input/data/{decode.ts → intent/decode.ts} +6 -5
  15. package/s/lib/input/data/intent/encode.ts +25 -0
  16. package/s/lib/input/data/intent/minihash.ts +5 -0
  17. package/s/{_archive/lib3/input/data/params.ts → lib/input/data/intent/sizes.ts} +1 -2
  18. package/s/lib/input/data/intent/types.ts +6 -0
  19. package/s/lib/input/data/parcel/decode.ts +32 -0
  20. package/s/lib/input/data/parcel/encode.ts +30 -0
  21. package/s/lib/input/data/parcel/sizes.ts +5 -0
  22. package/s/lib/input/data/parcel/types.ts +8 -0
  23. package/s/lib/input/data/test.ts +23 -0
  24. package/s/lib/input/decoder.ts +18 -12
  25. package/s/lib/input/evaluate/context.ts +6 -3
  26. package/s/lib/input/evaluate/evaluate.ts +71 -28
  27. package/s/lib/input/expression.ts +5 -5
  28. package/s/lib/input/investigate/hash-bindings.ts +5 -3
  29. package/s/lib/input/investigate/investigate.ts +24 -9
  30. package/s/lib/input/investigate/is-expression.ts +1 -0
  31. package/s/lib/input/investigate/make-input.ts +1 -5
  32. package/s/lib/input/sources/gamepad.ts +3 -9
  33. package/s/lib/input/sources/pointer.ts +0 -18
  34. package/s/lib/input/test.ts +216 -0
  35. package/s/lib/input/testing/quickbind.ts +7 -6
  36. package/s/lib/input/types.ts +3 -7
  37. package/s/lib/input/utils/mouse-button.ts +1 -6
  38. package/s/lib/test.ts +3 -177
  39. package/s/lib/ui/deck/auto-gamepads.ts +30 -0
  40. package/s/lib/ui/deck/controls/controls.ts +76 -0
  41. package/s/lib/ui/deck/controls/internal/assignments.ts +24 -0
  42. package/s/lib/ui/deck/controls/internal/data.ts +53 -0
  43. package/s/lib/ui/deck/controls/internal/fns.ts +38 -0
  44. package/s/lib/ui/deck/controls/internal/profiles.ts +83 -0
  45. package/s/lib/ui/deck/controls/types.ts +23 -0
  46. package/s/lib/ui/deck/hub.ts +109 -0
  47. package/s/lib/ui/deck/players.ts +73 -0
  48. package/s/lib/ui/deck/setup/deck.ts +44 -0
  49. package/s/lib/ui/deck/setup/tact.ts +101 -0
  50. package/s/lib/ui/deck/setup/types.ts +13 -0
  51. package/s/lib/ui/deck/setup/utils/broadcast-channel.ts +17 -0
  52. package/s/lib/ui/deck/setup/utils/kv.ts +20 -0
  53. package/s/lib/ui/deck/types.ts +26 -0
  54. package/s/lib/ui/deck/utils/first-preset.ts +9 -0
  55. package/s/lib/ui/icons/akar/LICENSE +23 -0
  56. package/s/lib/ui/icons/akar/backspace.svg.ts +4 -0
  57. package/s/lib/ui/icons/akar/circle-plus.svg.ts +4 -0
  58. package/s/lib/ui/icons/akar/copy.svg.ts +4 -0
  59. package/s/lib/ui/icons/akar/cross.svg.ts +4 -0
  60. package/s/lib/ui/icons/akar/devices.svg.ts +4 -0
  61. package/s/lib/ui/icons/akar/drag-vertical-fill.svg.ts +4 -0
  62. package/s/lib/ui/icons/akar/game-controller.svg.ts +4 -0
  63. package/s/lib/ui/icons/akar/key-cap.svg.ts +4 -0
  64. package/s/lib/ui/icons/akar/people-group.svg.ts +4 -0
  65. package/s/lib/ui/icons/akar/person-add.svg.ts +4 -0
  66. package/s/lib/ui/icons/akar/settings-horizontal.svg.ts +4 -0
  67. package/s/lib/ui/icons/akar/trash-can.svg.ts +4 -0
  68. package/s/lib/ui/icons/akar/x-small.svg.ts +4 -0
  69. package/s/lib/ui/views/controllers/style.css.ts +158 -0
  70. package/s/lib/ui/views/controllers/subviews/controller.ts +53 -0
  71. package/s/lib/ui/views/controllers/subviews/dropcard.ts +31 -0
  72. package/s/lib/ui/views/controllers/subviews/player.ts +38 -0
  73. package/s/lib/ui/views/controllers/view.ts +73 -0
  74. package/s/lib/ui/views/customize/parts/capture-gamepad-chord.ts +59 -0
  75. package/s/lib/ui/views/customize/parts/capture-key-chord.ts +70 -0
  76. package/s/lib/ui/views/customize/parts/capture-pointer-chord.ts +55 -0
  77. package/s/lib/ui/views/customize/parts/render-bindings.ts +67 -0
  78. package/s/lib/ui/views/customize/style.css.ts +144 -0
  79. package/s/lib/ui/views/customize/subviews/expression.ts +88 -0
  80. package/s/lib/ui/views/customize/subviews/recorder.ts +76 -0
  81. package/s/lib/ui/views/customize/view.ts +105 -0
  82. package/s/lib/ui/views/deck/style.css.ts +69 -0
  83. package/s/lib/ui/views/deck/types.ts +15 -0
  84. package/s/lib/ui/views/deck/view.ts +55 -0
  85. package/s/lib/ui/views/profile-select/view.ts +44 -0
  86. package/s/lib/ui/views/theme.css.ts +115 -0
  87. package/s/lib/ui/views/visualizer/style.css.ts +25 -0
  88. package/s/lib/ui/views/visualizer/view.ts +17 -0
  89. package/s/lib/ui/views/visualizer/visualizer.ts +17 -0
  90. package/s/lib/utils/ellipsis.ts +7 -0
  91. package/s/lib/utils/hash.ts +47 -0
  92. package/s/lib/utils/hueify.ts +5 -0
  93. package/x/demo/main.bundle.js +16 -3
  94. package/x/demo/main.bundle.js.map +1 -1
  95. package/x/demo/main.bundle.min.js +814 -12
  96. package/x/demo/main.bundle.min.js.map +4 -4
  97. package/x/demo/main.css +41 -5
  98. package/x/demo/presets.d.ts +30 -0
  99. package/x/demo/presets.js +51 -0
  100. package/x/demo/presets.js.map +1 -0
  101. package/x/gamepad/gamepad-app/element.js +9 -4
  102. package/x/gamepad/gamepad-app/element.js.map +1 -1
  103. package/x/gamepad/gamepad-app/style.css.js +5 -1
  104. package/x/gamepad/gamepad-app/style.css.js.map +1 -1
  105. package/x/gamepad/index.html +4 -4
  106. package/x/gamepad/index.html.js +1 -1
  107. package/x/gamepad/main.bundle.min.js +25 -21
  108. package/x/gamepad/main.bundle.min.js.map +4 -4
  109. package/x/gamepad/main.css +10 -1
  110. package/x/index.html +30 -17
  111. package/x/index.html.js +28 -15
  112. package/x/index.html.js.map +1 -1
  113. package/x/lib/index.d.ts +14 -1
  114. package/x/lib/index.js +14 -1
  115. package/x/lib/index.js.map +1 -1
  116. package/x/lib/input/controller.d.ts +15 -0
  117. package/x/lib/input/{encoder.js → controller.js} +19 -13
  118. package/x/lib/input/controller.js.map +1 -0
  119. package/x/lib/input/data/endian.d.ts +1 -0
  120. package/x/lib/input/data/endian.js +2 -0
  121. package/x/lib/input/data/endian.js.map +1 -0
  122. package/x/lib/input/data/intent/decode.d.ts +5 -0
  123. package/x/lib/input/data/{decode.js → intent/decode.js} +5 -4
  124. package/x/lib/input/data/intent/decode.js.map +1 -0
  125. package/x/lib/input/data/intent/encode.d.ts +2 -0
  126. package/x/lib/input/data/intent/encode.js +18 -0
  127. package/x/lib/input/data/intent/encode.js.map +1 -0
  128. package/x/lib/input/data/intent/minihash.d.ts +1 -0
  129. package/x/lib/input/data/intent/minihash.js +4 -0
  130. package/x/lib/input/data/intent/minihash.js.map +1 -0
  131. package/x/lib/input/data/{params.d.ts → intent/sizes.d.ts} +1 -2
  132. package/x/lib/input/data/intent/sizes.js +5 -0
  133. package/x/lib/input/data/intent/sizes.js.map +1 -0
  134. package/x/lib/input/data/intent/types.d.ts +4 -0
  135. package/x/lib/input/data/intent/types.js +2 -0
  136. package/x/lib/input/data/intent/types.js.map +1 -0
  137. package/x/lib/input/data/parcel/decode.d.ts +2 -0
  138. package/x/lib/input/data/parcel/decode.js +22 -0
  139. package/x/lib/input/data/parcel/decode.js.map +1 -0
  140. package/x/lib/input/data/parcel/encode.d.ts +2 -0
  141. package/x/lib/input/data/parcel/encode.js +19 -0
  142. package/x/lib/input/data/parcel/encode.js.map +1 -0
  143. package/x/lib/input/data/parcel/sizes.d.ts +3 -0
  144. package/x/lib/input/data/parcel/sizes.js +4 -0
  145. package/x/lib/input/data/parcel/sizes.js.map +1 -0
  146. package/x/lib/input/data/parcel/types.d.ts +5 -0
  147. package/x/lib/input/data/parcel/types.js +2 -0
  148. package/x/lib/input/data/parcel/types.js.map +1 -0
  149. package/x/lib/input/data/test.d.ts +6 -0
  150. package/x/lib/input/data/test.js +19 -0
  151. package/x/lib/input/data/test.js.map +1 -0
  152. package/x/lib/input/decoder.d.ts +3 -3
  153. package/x/lib/input/decoder.js +14 -12
  154. package/x/lib/input/decoder.js.map +1 -1
  155. package/x/lib/input/evaluate/context.d.ts +5 -4
  156. package/x/lib/input/evaluate/context.js +2 -3
  157. package/x/lib/input/evaluate/context.js.map +1 -1
  158. package/x/lib/input/evaluate/evaluate.d.ts +1 -1
  159. package/x/lib/input/evaluate/evaluate.js +65 -24
  160. package/x/lib/input/evaluate/evaluate.js.map +1 -1
  161. package/x/lib/input/expression.d.ts +1 -1
  162. package/x/lib/input/investigate/hash-bindings.d.ts +1 -1
  163. package/x/lib/input/investigate/hash-bindings.js +5 -3
  164. package/x/lib/input/investigate/hash-bindings.js.map +1 -1
  165. package/x/lib/input/investigate/investigate.d.ts +2 -1
  166. package/x/lib/input/investigate/investigate.js +14 -9
  167. package/x/lib/input/investigate/investigate.js.map +1 -1
  168. package/x/lib/input/investigate/is-expression.js +2 -0
  169. package/x/lib/input/investigate/is-expression.js.map +1 -1
  170. package/x/lib/input/investigate/make-input.js +1 -5
  171. package/x/lib/input/investigate/make-input.js.map +1 -1
  172. package/x/lib/input/sources/gamepad.js +3 -9
  173. package/x/lib/input/sources/gamepad.js.map +1 -1
  174. package/x/lib/input/sources/pointer.js +0 -21
  175. package/x/lib/input/sources/pointer.js.map +1 -1
  176. package/x/lib/input/test.d.ts +20 -0
  177. package/x/lib/input/test.js +170 -0
  178. package/x/lib/input/test.js.map +1 -0
  179. package/x/lib/input/testing/quickbind.d.ts +6 -4
  180. package/x/lib/input/testing/quickbind.js +7 -6
  181. package/x/lib/input/testing/quickbind.js.map +1 -1
  182. package/x/lib/input/types.d.ts +3 -8
  183. package/x/lib/input/types.js.map +1 -1
  184. package/x/lib/input/utils/mouse-button.js +1 -6
  185. package/x/lib/input/utils/mouse-button.js.map +1 -1
  186. package/x/lib/test.js +3 -133
  187. package/x/lib/test.js.map +1 -1
  188. package/x/lib/ui/deck/auto-gamepads.d.ts +4 -0
  189. package/x/lib/ui/deck/auto-gamepads.js +20 -0
  190. package/x/lib/ui/deck/auto-gamepads.js.map +1 -0
  191. package/x/lib/ui/deck/controls/controls.d.ts +19 -0
  192. package/x/lib/ui/deck/controls/controls.js +56 -0
  193. package/x/lib/ui/deck/controls/controls.js.map +1 -0
  194. package/x/lib/ui/deck/controls/internal/assignments.d.ts +9 -0
  195. package/x/lib/ui/deck/controls/internal/assignments.js +16 -0
  196. package/x/lib/ui/deck/controls/internal/assignments.js.map +1 -0
  197. package/x/lib/ui/deck/controls/internal/data.d.ts +29 -0
  198. package/x/lib/ui/deck/controls/internal/data.js +32 -0
  199. package/x/lib/ui/deck/controls/internal/data.js.map +1 -0
  200. package/x/lib/ui/deck/controls/internal/fns.d.ts +6 -0
  201. package/x/lib/ui/deck/controls/internal/fns.js +19 -0
  202. package/x/lib/ui/deck/controls/internal/fns.js.map +1 -0
  203. package/x/lib/ui/deck/controls/internal/profiles.d.ts +18 -0
  204. package/x/lib/ui/deck/controls/internal/profiles.js +59 -0
  205. package/x/lib/ui/deck/controls/internal/profiles.js.map +1 -0
  206. package/x/lib/ui/deck/controls/types.d.ts +17 -0
  207. package/x/lib/ui/deck/controls/types.js +2 -0
  208. package/x/lib/ui/deck/controls/types.js.map +1 -0
  209. package/x/lib/ui/deck/hub.d.ts +21 -0
  210. package/x/lib/ui/deck/hub.js +86 -0
  211. package/x/lib/ui/deck/hub.js.map +1 -0
  212. package/x/lib/ui/deck/players.d.ts +16 -0
  213. package/x/lib/ui/deck/players.js +56 -0
  214. package/x/lib/ui/deck/players.js.map +1 -0
  215. package/x/lib/ui/deck/setup/deck.d.ts +3 -0
  216. package/x/lib/ui/deck/setup/deck.js +30 -0
  217. package/x/lib/ui/deck/setup/deck.js.map +1 -0
  218. package/x/lib/ui/deck/setup/tact.d.ts +20 -0
  219. package/x/lib/ui/deck/setup/tact.js +78 -0
  220. package/x/lib/ui/deck/setup/tact.js.map +1 -0
  221. package/x/lib/ui/deck/setup/types.d.ts +10 -0
  222. package/x/lib/ui/deck/setup/types.js +2 -0
  223. package/x/lib/ui/deck/setup/types.js.map +1 -0
  224. package/x/lib/ui/deck/setup/utils/broadcast-channel.d.ts +4 -0
  225. package/x/lib/ui/deck/setup/utils/broadcast-channel.js +10 -0
  226. package/x/lib/ui/deck/setup/utils/broadcast-channel.js.map +1 -0
  227. package/x/lib/ui/deck/setup/utils/kv.d.ts +5 -0
  228. package/x/lib/ui/deck/setup/utils/kv.js +12 -0
  229. package/x/lib/ui/deck/setup/utils/kv.js.map +1 -0
  230. package/x/lib/ui/deck/types.d.ts +19 -0
  231. package/x/lib/ui/deck/types.js +3 -0
  232. package/x/lib/ui/deck/types.js.map +1 -0
  233. package/x/lib/ui/deck/utils/first-preset.d.ts +6 -0
  234. package/x/lib/ui/deck/utils/first-preset.js +5 -0
  235. package/x/lib/ui/deck/utils/first-preset.js.map +1 -0
  236. package/x/lib/ui/icons/akar/backspace.svg.d.ts +2 -0
  237. package/x/lib/ui/icons/akar/backspace.svg.js +3 -0
  238. package/x/lib/ui/icons/akar/backspace.svg.js.map +1 -0
  239. package/x/lib/ui/icons/akar/circle-plus.svg.d.ts +2 -0
  240. package/x/lib/ui/icons/akar/circle-plus.svg.js +3 -0
  241. package/x/lib/ui/icons/akar/circle-plus.svg.js.map +1 -0
  242. package/x/lib/ui/icons/akar/copy.svg.d.ts +2 -0
  243. package/x/lib/ui/icons/akar/copy.svg.js +3 -0
  244. package/x/lib/ui/icons/akar/copy.svg.js.map +1 -0
  245. package/x/lib/ui/icons/akar/cross.svg.d.ts +2 -0
  246. package/x/lib/ui/icons/akar/cross.svg.js +3 -0
  247. package/x/lib/ui/icons/akar/cross.svg.js.map +1 -0
  248. package/x/lib/ui/icons/akar/devices.svg.d.ts +2 -0
  249. package/x/lib/ui/icons/akar/devices.svg.js +3 -0
  250. package/x/lib/ui/icons/akar/devices.svg.js.map +1 -0
  251. package/x/lib/ui/icons/akar/drag-vertical-fill.svg.d.ts +2 -0
  252. package/x/lib/ui/icons/akar/drag-vertical-fill.svg.js +3 -0
  253. package/x/lib/ui/icons/akar/drag-vertical-fill.svg.js.map +1 -0
  254. package/x/lib/ui/icons/akar/game-controller.svg.d.ts +2 -0
  255. package/x/lib/ui/icons/akar/game-controller.svg.js +3 -0
  256. package/x/lib/ui/icons/akar/game-controller.svg.js.map +1 -0
  257. package/x/lib/ui/icons/akar/key-cap.svg.d.ts +2 -0
  258. package/x/lib/ui/icons/akar/key-cap.svg.js +3 -0
  259. package/x/lib/ui/icons/akar/key-cap.svg.js.map +1 -0
  260. package/x/lib/ui/icons/akar/people-group.svg.d.ts +2 -0
  261. package/x/lib/ui/icons/akar/people-group.svg.js +3 -0
  262. package/x/lib/ui/icons/akar/people-group.svg.js.map +1 -0
  263. package/x/lib/ui/icons/akar/person-add.svg.d.ts +2 -0
  264. package/x/lib/ui/icons/akar/person-add.svg.js +3 -0
  265. package/x/lib/ui/icons/akar/person-add.svg.js.map +1 -0
  266. package/x/lib/ui/icons/akar/settings-horizontal.svg.d.ts +2 -0
  267. package/x/lib/ui/icons/akar/settings-horizontal.svg.js +3 -0
  268. package/x/lib/ui/icons/akar/settings-horizontal.svg.js.map +1 -0
  269. package/x/lib/ui/icons/akar/trash-can.svg.d.ts +2 -0
  270. package/x/lib/ui/icons/akar/trash-can.svg.js +3 -0
  271. package/x/lib/ui/icons/akar/trash-can.svg.js.map +1 -0
  272. package/x/lib/ui/icons/akar/x-small.svg.d.ts +2 -0
  273. package/x/lib/ui/icons/akar/x-small.svg.js +3 -0
  274. package/x/lib/ui/icons/akar/x-small.svg.js.map +1 -0
  275. package/x/lib/ui/views/controllers/style.css.js +157 -0
  276. package/x/lib/ui/views/controllers/style.css.js.map +1 -0
  277. package/x/lib/ui/views/controllers/subviews/controller.d.ts +3 -0
  278. package/x/lib/ui/views/controllers/subviews/controller.js +45 -0
  279. package/x/lib/ui/views/controllers/subviews/controller.js.map +1 -0
  280. package/x/lib/ui/views/controllers/subviews/dropcard.d.ts +9 -0
  281. package/x/lib/ui/views/controllers/subviews/dropcard.js +20 -0
  282. package/x/lib/ui/views/controllers/subviews/dropcard.js.map +1 -0
  283. package/x/lib/ui/views/controllers/subviews/player.d.ts +2 -0
  284. package/x/lib/ui/views/controllers/subviews/player.js +32 -0
  285. package/x/lib/ui/views/controllers/subviews/player.js.map +1 -0
  286. package/x/lib/ui/views/controllers/view.d.ts +2 -0
  287. package/x/lib/ui/views/controllers/view.js +65 -0
  288. package/x/lib/ui/views/controllers/view.js.map +1 -0
  289. package/x/lib/ui/views/customize/parts/capture-gamepad-chord.d.ts +2 -0
  290. package/x/lib/ui/views/customize/parts/capture-gamepad-chord.js +46 -0
  291. package/x/lib/ui/views/customize/parts/capture-gamepad-chord.js.map +1 -0
  292. package/x/lib/ui/views/customize/parts/capture-key-chord.d.ts +2 -0
  293. package/x/lib/ui/views/customize/parts/capture-key-chord.js +58 -0
  294. package/x/lib/ui/views/customize/parts/capture-key-chord.js.map +1 -0
  295. package/x/lib/ui/views/customize/parts/capture-pointer-chord.d.ts +2 -0
  296. package/x/lib/ui/views/customize/parts/capture-pointer-chord.js +42 -0
  297. package/x/lib/ui/views/customize/parts/capture-pointer-chord.js.map +1 -0
  298. package/x/lib/ui/views/customize/parts/render-bindings.d.ts +3 -0
  299. package/x/lib/ui/views/customize/parts/render-bindings.js +32 -0
  300. package/x/lib/ui/views/customize/parts/render-bindings.js.map +1 -0
  301. package/x/lib/ui/views/customize/style.css.d.ts +2 -0
  302. package/x/lib/ui/views/customize/style.css.js +143 -0
  303. package/x/lib/ui/views/customize/style.css.js.map +1 -0
  304. package/x/lib/ui/views/customize/subviews/expression.d.ts +2 -0
  305. package/x/lib/ui/views/customize/subviews/expression.js +75 -0
  306. package/x/lib/ui/views/customize/subviews/expression.js.map +1 -0
  307. package/x/lib/ui/views/customize/subviews/recorder.d.ts +3 -0
  308. package/x/lib/ui/views/customize/subviews/recorder.js +60 -0
  309. package/x/lib/ui/views/customize/subviews/recorder.js.map +1 -0
  310. package/x/lib/ui/views/customize/view.d.ts +6 -0
  311. package/x/lib/ui/views/customize/view.js +83 -0
  312. package/x/lib/ui/views/customize/view.js.map +1 -0
  313. package/x/lib/ui/views/deck/style.css.d.ts +2 -0
  314. package/x/lib/ui/views/deck/style.css.js +68 -0
  315. package/x/lib/ui/views/deck/style.css.js.map +1 -0
  316. package/x/lib/ui/views/deck/types.d.ts +14 -0
  317. package/x/lib/ui/views/deck/types.js +2 -0
  318. package/x/lib/ui/views/deck/types.js.map +1 -0
  319. package/x/lib/ui/views/deck/view.d.ts +2 -0
  320. package/x/lib/ui/views/deck/view.js +48 -0
  321. package/x/lib/ui/views/deck/view.js.map +1 -0
  322. package/x/lib/ui/views/profile-select/view.d.ts +4 -0
  323. package/x/lib/ui/views/profile-select/view.js +34 -0
  324. package/x/lib/ui/views/profile-select/view.js.map +1 -0
  325. package/x/lib/ui/views/theme.css.d.ts +2 -0
  326. package/x/lib/ui/views/theme.css.js +113 -0
  327. package/x/lib/ui/views/theme.css.js.map +1 -0
  328. package/x/lib/ui/views/visualizer/style.css.d.ts +2 -0
  329. package/x/lib/ui/views/visualizer/style.css.js +24 -0
  330. package/x/lib/ui/views/visualizer/style.css.js.map +1 -0
  331. package/x/lib/ui/views/visualizer/view.d.ts +2 -0
  332. package/x/lib/ui/views/visualizer/view.js +12 -0
  333. package/x/lib/ui/views/visualizer/view.js.map +1 -0
  334. package/x/lib/ui/views/visualizer/visualizer.d.ts +5 -0
  335. package/x/lib/ui/views/visualizer/visualizer.js +13 -0
  336. package/x/lib/ui/views/visualizer/visualizer.js.map +1 -0
  337. package/x/lib/utils/ellipsis.d.ts +1 -0
  338. package/x/lib/utils/ellipsis.js +6 -0
  339. package/x/lib/utils/ellipsis.js.map +1 -0
  340. package/x/lib/utils/hash.d.ts +1 -0
  341. package/x/lib/utils/hash.js +47 -0
  342. package/x/lib/utils/hash.js.map +1 -0
  343. package/x/lib/utils/hueify.d.ts +1 -0
  344. package/x/lib/utils/hueify.js +4 -0
  345. package/x/lib/utils/hueify.js.map +1 -0
  346. package/x/lib/utils/make-id.d.ts +1 -0
  347. package/x/lib/utils/make-id.js +5 -0
  348. package/x/lib/utils/make-id.js.map +1 -0
  349. package/s/_archive/core/atom/defaults.ts +0 -32
  350. package/s/_archive/core/atom/lens-algo.ts +0 -84
  351. package/s/_archive/core/atom/types.ts +0 -44
  352. package/s/_archive/core/bindings/normalize.ts +0 -27
  353. package/s/_archive/core/bindings/shape.ts +0 -15
  354. package/s/_archive/core/bindings/table.ts +0 -22
  355. package/s/_archive/core/intent/bucket.ts +0 -28
  356. package/s/_archive/core/intent/consts.ts +0 -4
  357. package/s/_archive/core/intent/decode.ts +0 -23
  358. package/s/_archive/core/intent/encode.ts +0 -20
  359. package/s/_archive/core/intent/merge.ts +0 -15
  360. package/s/_archive/core/parts/action.ts +0 -36
  361. package/s/_archive/core/parts/sample-map.ts +0 -24
  362. package/s/_archive/core/resolvers/actions.ts +0 -30
  363. package/s/_archive/core/resolvers/intents.ts +0 -106
  364. package/s/_archive/core/types.ts +0 -40
  365. package/s/_archive/deck/controller.ts +0 -35
  366. package/s/_archive/deck/deck.ts +0 -92
  367. package/s/_archive/deck/parts/profiles.ts +0 -39
  368. package/s/_archive/deck/parts/runtime.ts +0 -11
  369. package/s/_archive/deck/parts/settings.ts +0 -30
  370. package/s/_archive/deck/port.ts +0 -35
  371. package/s/_archive/deck/types.ts +0 -16
  372. package/s/_archive/demo/demo-app/element.ts +0 -17
  373. package/s/_archive/demo/demo-app/style.css.ts +0 -10
  374. package/s/_archive/demo/main.bundle.ts +0 -71
  375. package/s/_archive/demo/main.css +0 -83
  376. package/s/_archive/device/devices.ts +0 -24
  377. package/s/_archive/device/gamepad.ts +0 -42
  378. package/s/_archive/device/keyboard.ts +0 -33
  379. package/s/_archive/device/pad/on-pad.ts +0 -50
  380. package/s/_archive/device/pad/pad.ts +0 -10
  381. package/s/_archive/device/pointer.ts +0 -89
  382. package/s/_archive/device/sampler.ts +0 -25
  383. package/s/_archive/device/stick.ts +0 -24
  384. package/s/_archive/index-ui.ts +0 -3
  385. package/s/_archive/lib/bindings/resolver.ts +0 -61
  386. package/s/_archive/lib/bindings/types.ts +0 -67
  387. package/s/_archive/lib/bindings/utils/action-resolver.ts +0 -51
  388. package/s/_archive/lib/bindings/utils/evaluator.ts +0 -162
  389. package/s/_archive/lib/bindings/utils/hash-bindings.ts +0 -22
  390. package/s/_archive/lib/bindings/utils/intent-coding.ts +0 -50
  391. package/s/_archive/lib/bindings/utils/intent-resolver.ts +0 -52
  392. package/s/_archive/lib/bindings/utils/investigate.ts +0 -47
  393. package/s/_archive/lib/bindings/utils/is-down.ts +0 -5
  394. package/s/_archive/lib/bindings/utils/is-expression.ts +0 -11
  395. package/s/_archive/lib/index.ts +0 -12
  396. package/s/_archive/lib/sampling/sources/example.ts +0 -7
  397. package/s/_archive/lib/sampling/sources/gamepad.ts +0 -63
  398. package/s/_archive/lib/sampling/sources/keyboard.ts +0 -52
  399. package/s/_archive/lib/sampling/sources/pointer.ts +0 -56
  400. package/s/_archive/lib/sampling/sources/sources.ts +0 -13
  401. package/s/_archive/lib/sampling/sources/stick.ts +0 -27
  402. package/s/_archive/lib/sampling/types.ts +0 -11
  403. package/s/_archive/lib/sampling/utils/add-sample.ts +0 -12
  404. package/s/_archive/lib/test.ts +0 -57
  405. package/s/_archive/lib/utils/backwards.ts +0 -6
  406. package/s/_archive/lib/utils/evergreen.ts +0 -10
  407. package/s/_archive/lib/utils/mouse-button.ts +0 -10
  408. package/s/_archive/lib/utils/pad/on-pad.ts +0 -50
  409. package/s/_archive/lib/utils/pad/pad.ts +0 -10
  410. package/s/_archive/lib/utils/split-axis.ts +0 -15
  411. package/s/_archive/lib2/core/decoder/decoder.ts +0 -34
  412. package/s/_archive/lib2/core/decoder/utils/update-input.ts +0 -21
  413. package/s/_archive/lib2/core/encoder/encoder.ts +0 -60
  414. package/s/_archive/lib2/core/encoder/evaluate/context.ts +0 -22
  415. package/s/_archive/lib2/core/encoder/evaluate/evaluate.ts +0 -144
  416. package/s/_archive/lib2/core/encoder/parts/expression-index.ts +0 -27
  417. package/s/_archive/lib2/core/encoder/parts/hash-bindings.ts +0 -22
  418. package/s/_archive/lib2/core/encoder/parts/investigate.ts +0 -50
  419. package/s/_archive/lib2/core/encoder/parts/sampler.ts +0 -22
  420. package/s/_archive/lib2/core/sources/example.ts +0 -9
  421. package/s/_archive/lib2/core/sources/sources.ts +0 -16
  422. package/s/_archive/lib2/core/types.ts +0 -78
  423. package/s/_archive/lib2/core/utils/data.ts +0 -50
  424. package/s/_archive/lib2/core/utils/is-down.ts +0 -5
  425. package/s/_archive/lib2/core/utils/is-expression.ts +0 -11
  426. package/s/_archive/lib3/input/data/decode.ts +0 -25
  427. package/s/_archive/lib3/input/data/encode.ts +0 -24
  428. package/s/_archive/lib3/input/decoder.ts +0 -56
  429. package/s/_archive/lib3/input/encoder.ts +0 -99
  430. package/s/_archive/lib3/input/evaluate/context.ts +0 -15
  431. package/s/_archive/lib3/input/evaluate/evaluate.ts +0 -142
  432. package/s/_archive/lib3/input/evaluate/utils/clock.ts +0 -14
  433. package/s/_archive/lib3/input/investigate/hash-bindings.ts +0 -22
  434. package/s/_archive/lib3/input/investigate/investigate.ts +0 -42
  435. package/s/_archive/lib3/input/investigate/is-expression.ts +0 -11
  436. package/s/_archive/lib3/input/investigate/make-input.ts +0 -18
  437. package/s/_archive/lib3/input/investigate/root-index.ts +0 -26
  438. package/s/_archive/lib3/input/mixer.ts +0 -20
  439. package/s/_archive/lib3/input/sources/gamepad.ts +0 -58
  440. package/s/_archive/lib3/input/sources/keyboard.ts +0 -49
  441. package/s/_archive/lib3/input/sources/plain.ts +0 -9
  442. package/s/_archive/lib3/input/sources/pointer.ts +0 -58
  443. package/s/_archive/lib3/input/sources/sources.ts +0 -24
  444. package/s/_archive/lib3/input/sources/stick.ts +0 -29
  445. package/s/_archive/lib3/input/testing/quickbind.ts +0 -20
  446. package/s/_archive/lib3/input/types.ts +0 -96
  447. package/s/_archive/lib3/input/utils/evergreen.ts +0 -10
  448. package/s/_archive/lib3/input/utils/is-down.ts +0 -5
  449. package/s/_archive/lib3/input/utils/mouse-button.ts +0 -10
  450. package/s/_archive/lib3/input/utils/pad/on-pad.ts +0 -50
  451. package/s/_archive/lib3/input/utils/pad/pad.ts +0 -10
  452. package/s/_archive/lib3/input/utils/sampler.ts +0 -28
  453. package/s/_archive/lib3/input/utils/split-axis.ts +0 -15
  454. package/s/_archive/lib3/test.ts +0 -100
  455. package/s/_archive/lib4/input/data/decode.ts +0 -25
  456. package/s/_archive/lib4/input/data/encode.ts +0 -24
  457. package/s/_archive/lib4/input/data/params.ts +0 -7
  458. package/s/_archive/lib4/input/encoder.ts +0 -100
  459. package/s/_archive/lib4/input/evaluate/context.ts +0 -16
  460. package/s/_archive/lib4/input/evaluate/evaluate.ts +0 -157
  461. package/s/_archive/lib4/input/evaluate/utils/clock.ts +0 -14
  462. package/s/_archive/lib4/input/investigate/hash-bindings.ts +0 -22
  463. package/s/_archive/lib4/input/investigate/investigate.ts +0 -37
  464. package/s/_archive/lib4/input/investigate/is.ts +0 -19
  465. package/s/_archive/lib4/input/investigate/make-input.ts +0 -18
  466. package/s/_archive/lib4/input/investigate/root-index.ts +0 -26
  467. package/s/_archive/lib4/input/sources/gamepad.ts +0 -58
  468. package/s/_archive/lib4/input/sources/keyboard.ts +0 -46
  469. package/s/_archive/lib4/input/sources/plain.ts +0 -9
  470. package/s/_archive/lib4/input/sources/pointer.ts +0 -50
  471. package/s/_archive/lib4/input/sources/sources.ts +0 -24
  472. package/s/_archive/lib4/input/sources/stick.ts +0 -25
  473. package/s/_archive/lib4/input/types.ts +0 -102
  474. package/s/_archive/lib4/input/utils/evergreen.ts +0 -10
  475. package/s/_archive/lib4/input/utils/is-down.ts +0 -5
  476. package/s/_archive/lib4/input/utils/mouse-button.ts +0 -10
  477. package/s/_archive/lib4/input/utils/pad/on-pad.ts +0 -50
  478. package/s/_archive/lib4/input/utils/pad/pad.ts +0 -10
  479. package/s/_archive/lib4/input/utils/sampler.ts +0 -28
  480. package/s/_archive/lib4/input/utils/split-axis.ts +0 -15
  481. package/s/_archive/lib4/test.ts +0 -12
  482. package/s/_archive/test.ts +0 -339
  483. package/s/_archive/ui/views/desk/style.css.ts +0 -70
  484. package/s/_archive/ui/views/desk/view.ts +0 -122
  485. package/s/_archive/utils/circular-clamp.ts +0 -14
  486. package/s/_archive/utils/do-async.ts +0 -5
  487. package/s/_archive/utils/evergreen.ts +0 -10
  488. package/s/_archive/utils/freeze-clone.ts +0 -7
  489. package/s/_archive/utils/identifier.ts +0 -30
  490. package/s/_archive/utils/insert.ts +0 -6
  491. package/s/_archive/utils/is-down.ts +0 -5
  492. package/s/_archive/utils/remap.ts +0 -7
  493. package/s/_archive/utils/shift-limit.ts +0 -9
  494. package/s/_archive/utils/sort-by-key.ts +0 -7
  495. package/s/_archive/utils/split-axis.ts +0 -15
  496. package/s/_archive/utils/tmax.ts +0 -7
  497. package/s/_archive/utils/tmin.ts +0 -7
  498. package/s/demo/demo-app/element.ts +0 -15
  499. package/s/demo/demo-app/style.css.ts +0 -10
  500. package/s/lib/input/data/encode.ts +0 -24
  501. package/s/lib/input/data/params.ts +0 -7
  502. package/x/_archive/demo/main.css +0 -83
  503. package/x/demo/demo-app/element.d.ts +0 -1
  504. package/x/demo/demo-app/element.js +0 -12
  505. package/x/demo/demo-app/element.js.map +0 -1
  506. package/x/demo/demo-app/style.css.js +0 -9
  507. package/x/demo/demo-app/style.css.js.map +0 -1
  508. package/x/lib/input/data/decode.d.ts +0 -5
  509. package/x/lib/input/data/decode.js.map +0 -1
  510. package/x/lib/input/data/encode.d.ts +0 -2
  511. package/x/lib/input/data/encode.js +0 -17
  512. package/x/lib/input/data/encode.js.map +0 -1
  513. package/x/lib/input/data/params.js +0 -6
  514. package/x/lib/input/data/params.js.map +0 -1
  515. package/x/lib/input/encoder.d.ts +0 -10
  516. package/x/lib/input/encoder.js.map +0 -1
  517. /package/s/{_archive → lib}/utils/make-id.ts +0 -0
  518. /package/x/{demo/demo-app → lib/ui/views/controllers}/style.css.d.ts +0 -0
@@ -0,0 +1,170 @@
1
+ import { expect, suite, test } from "@e280/science";
2
+ import { asBindings } from "./types.js";
3
+ import { Controller } from "./controller.js";
4
+ import { PlainSource } from "./sources/plain.js";
5
+ import { quickbind } from "./testing/quickbind.js";
6
+ import { isCompatible } from "./investigate/is-compatible.js";
7
+ import parcel from "./data/test.js";
8
+ export default suite({
9
+ parcel,
10
+ "roundtrip": test(async () => {
11
+ const { sample, solve } = quickbind("KeyE");
12
+ sample({ code: "KeyE", value: 0 });
13
+ expect(solve().value).is(0);
14
+ sample({ code: "KeyE", value: 1 });
15
+ const inputs = solve();
16
+ expect(inputs.value).is(1);
17
+ expect(inputs.was).is(0);
18
+ }),
19
+ "reordered bindings are equivalent": test(async () => {
20
+ const able = quickbind({ alpha: "KeyA", bravo: "KeyB" });
21
+ const baker = quickbind({ bravo: "KeyB", alpha: "KeyA" });
22
+ expect(isCompatible(able.bindings, baker.bindings)).is(true);
23
+ able.sample({ code: "KeyA", value: 1 });
24
+ const inputs = baker.decoder.decode(able.controller.encode());
25
+ expect(inputs.alpha.value).is(1);
26
+ expect(inputs.bravo.value).is(0);
27
+ }),
28
+ "update bindings": test(async () => {
29
+ const { sample, solve, controller } = quickbind("KeyA");
30
+ sample({ code: "KeyA", value: 1 });
31
+ expect(solve().value).is(1);
32
+ sample({ code: "KeyA", value: 0 });
33
+ expect(solve().value).is(0);
34
+ controller.bindings = "KeyB";
35
+ expect(controller.bindings).is("KeyB");
36
+ sample({ code: "KeyA", value: 1 });
37
+ expect(solve().value).is(0);
38
+ sample({ code: "KeyA", value: 0 });
39
+ sample({ code: "KeyB", value: 1 });
40
+ expect(solve().value).is(1);
41
+ }),
42
+ "incompatible bindings throws an error": test(async () => {
43
+ const { controller } = quickbind({ alpha: "KeyA" });
44
+ expect(() => controller.bindings = { bravo: "KeyA" }).throws();
45
+ }),
46
+ "rapid transitions": test(async () => {
47
+ const { sample, solve } = quickbind({
48
+ key: "KeyE",
49
+ downs: ["down", "KeyE"],
50
+ ups: ["up", "KeyE"],
51
+ });
52
+ for (const value of [1, 0, 1, 0, 1])
53
+ sample({ code: "KeyE", value });
54
+ let inputs = solve();
55
+ expect(inputs.key.value).is(1);
56
+ expect(inputs.downs.value).is(3);
57
+ expect(inputs.ups.value).is(2);
58
+ inputs = solve();
59
+ expect(inputs.key.value).is(1);
60
+ expect(inputs.downs.value).is(0);
61
+ expect(inputs.ups.value).is(0);
62
+ }),
63
+ "quick tap controller-level": test(async () => {
64
+ const { sample, solve, inputs } = quickbind("KeyE");
65
+ solve();
66
+ expect(inputs.sum).is(0);
67
+ for (const value of [0, 1, 0])
68
+ sample({ code: "KeyE", value });
69
+ solve();
70
+ expect(inputs.sum).is(1);
71
+ solve();
72
+ expect(inputs.sum).is(0);
73
+ }),
74
+ "quick tap decoder-level": test(async () => {
75
+ const { sample, solve, controller, decoder, inputs } = quickbind("KeyE");
76
+ solve();
77
+ expect(inputs.sum).is(0);
78
+ const datas = [];
79
+ for (const value of [0, 1, 0]) {
80
+ sample({ code: "KeyE", value });
81
+ datas.push(controller.encode());
82
+ }
83
+ decoder.decode(...datas);
84
+ expect(inputs.sum).is(1);
85
+ solve();
86
+ expect(inputs.sum).is(0);
87
+ }),
88
+ "single tap": test(async () => {
89
+ const { sample, solve } = quickbind(["taps", 1, 400, "KeyE"]);
90
+ const hit = (time, value) => {
91
+ sample({ code: "KeyE", value });
92
+ return solve(time).value;
93
+ };
94
+ expect(hit(0, 0)).is(0);
95
+ expect(hit(100, 1)).is(0);
96
+ expect(hit(200, 0)).is(1);
97
+ }),
98
+ "double tap": test(async () => {
99
+ const { sample, solve } = quickbind(["taps", 2, 400, "KeyE"]);
100
+ const hit = (time, value) => {
101
+ sample({ code: "KeyE", value });
102
+ return solve(time).value;
103
+ };
104
+ expect(hit(0, 0)).is(0);
105
+ expect(hit(100, 1)).is(0);
106
+ expect(hit(200, 0)).is(0);
107
+ expect(hit(300, 1)).is(0);
108
+ expect(hit(400, 0)).is(1);
109
+ }),
110
+ "held across empty frames": test(async () => {
111
+ const { sample, solve } = quickbind(["held", 300, "KeyE"]);
112
+ solve(0);
113
+ sample({ code: "KeyE", value: 1 });
114
+ expect(solve(100).value).is(0);
115
+ expect(solve(399).value).is(0);
116
+ expect(solve(400).value).is(1);
117
+ expect(solve(500).value).is(1);
118
+ sample({ code: "KeyE", value: 0 });
119
+ expect(solve(501).value).is(0);
120
+ sample({ code: "KeyE", value: 1 });
121
+ expect(solve(600).value).is(0);
122
+ expect(solve(900).value).is(1);
123
+ }),
124
+ "taps vs held": test(async () => {
125
+ const { sample, solve } = quickbind({
126
+ tappy: ["taps", 1, 300, "KeyE"],
127
+ holdy: ["held", 300, "KeyE"],
128
+ });
129
+ const hit = (time, value) => {
130
+ sample({ code: "KeyE", value });
131
+ return solve(time);
132
+ };
133
+ const __up = (time) => hit(time, 0);
134
+ const DOWN = (time) => hit(time, 1);
135
+ expect(__up(1000).tappy.value).is(0);
136
+ expect(DOWN(1100).tappy.value).is(0);
137
+ expect(__up(1200).tappy.value).is(1);
138
+ expect(__up(1300).tappy.value).is(0);
139
+ expect(__up(2000).holdy.value).is(0);
140
+ expect(DOWN(2100).holdy.value).is(0);
141
+ expect(DOWN(2200).holdy.value).is(0);
142
+ expect(DOWN(2300).holdy.value).is(0);
143
+ expect(DOWN(2400).holdy.value).is(1);
144
+ expect(__up(2500).tappy.value).is(0); // FAILS
145
+ }),
146
+ "independent controller consumers": test(async () => {
147
+ const source = new PlainSource();
148
+ const bindings = asBindings({
149
+ downs: ["down", "KeyE"],
150
+ ups: ["up", "KeyE"],
151
+ });
152
+ const fast = new Controller({ source, bindings });
153
+ const slow = new Controller({ source, bindings });
154
+ source.onSample.publish({ code: "KeyE", value: 1 });
155
+ expect([...fast.evaluate(1)]).deep([
156
+ { id: 0, value: 1 },
157
+ ]);
158
+ source.onSample.publish({ code: "KeyE", value: 0 });
159
+ expect([...fast.evaluate(2)]).deep([
160
+ { id: 1, value: 1 },
161
+ ]);
162
+ expect([...slow.evaluate(20)]).deep([
163
+ { id: 0, value: 1 },
164
+ { id: 1, value: 1 },
165
+ ]);
166
+ fast.dispose();
167
+ slow.dispose();
168
+ }),
169
+ });
170
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../../s/lib/input/test.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,13 @@
1
- import { InputDecoder } from "../decoder.js";
2
- import { InputEncoder } from "../encoder.js";
1
+ import { Decoder } from "../decoder.js";
2
+ import { Controller } from "../controller.js";
3
3
  import { Bindings, Sample } from "../types.js";
4
4
  import { PlainSource } from "../sources/plain.js";
5
5
  export declare function quickbind<B extends Bindings>(b: B): {
6
+ bindings: B;
6
7
  source: PlainSource;
7
- encoder: InputEncoder<B>;
8
- decoder: InputDecoder<import("../types.js").Rebindings<B>>;
8
+ controller: Controller<B>;
9
+ decoder: Decoder<import("../types.js").Rebindings<B>>;
9
10
  sample: (...samples: Sample[]) => void;
10
11
  solve: (time?: number) => import("../types.js").Inputs<import("../types.js").Rebindings<B>>;
12
+ inputs: import("../types.js").Inputs<import("../types.js").Rebindings<B>>;
11
13
  };
@@ -1,12 +1,13 @@
1
- import { InputDecoder } from "../decoder.js";
2
- import { InputEncoder } from "../encoder.js";
1
+ import { Decoder } from "../decoder.js";
2
+ import { Controller } from "../controller.js";
3
3
  import { PlainSource } from "../sources/plain.js";
4
4
  export function quickbind(b) {
5
5
  const source = new PlainSource();
6
- const encoder = new InputEncoder(source, b);
7
- const decoder = new InputDecoder(encoder.bindings);
6
+ const controller = new Controller({ source, bindings: b });
7
+ const decoder = new Decoder(controller.bindings);
8
+ const { inputs } = decoder;
8
9
  const sample = (...samples) => samples.forEach(s => source.onSample.publish(s));
9
- const solve = (time) => decoder.decode(encoder.encode(time));
10
- return { source, encoder, decoder, sample, solve };
10
+ const solve = (time) => decoder.decode(controller.encode(time));
11
+ return { bindings: b, source, controller, decoder, sample, solve, inputs };
11
12
  }
12
13
  //# sourceMappingURL=quickbind.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"quickbind.js","sourceRoot":"","sources":["../../../../s/lib/input/testing/quickbind.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAC,YAAY,EAAC,MAAM,eAAe,CAAA;AAE1C,OAAO,EAAC,WAAW,EAAC,MAAM,qBAAqB,CAAA;AAE/C,MAAM,UAAU,SAAS,CAAqB,CAAI;IACjD,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAA;IAChC,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAC3C,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAElD,MAAM,MAAM,GAAG,CAAC,GAAG,OAAiB,EAAE,EAAE,CACvC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;IAEjD,MAAM,KAAK,GAAG,CAAC,IAAa,EAAE,EAAE,CAC/B,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;IAErC,OAAO,EAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAC,CAAA;AACjD,CAAC"}
1
+ {"version":3,"file":"quickbind.js","sourceRoot":"","sources":["../../../../s/lib/input/testing/quickbind.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAA;AACrC,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAA;AAE3C,OAAO,EAAC,WAAW,EAAC,MAAM,qBAAqB,CAAA;AAE/C,MAAM,UAAU,SAAS,CAAqB,CAAI;IACjD,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAA;IAChC,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAC,CAAC,CAAA;IACxD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;IAChD,MAAM,EAAC,MAAM,EAAC,GAAG,OAAO,CAAA;IAExB,MAAM,MAAM,GAAG,CAAC,GAAG,OAAiB,EAAE,EAAE,CACvC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;IAEjD,MAAM,KAAK,GAAG,CAAC,IAAa,EAAE,EAAE,CAC/B,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;IAExC,OAAO,EAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAC,CAAA;AACzE,CAAC"}
@@ -8,18 +8,13 @@ export type Source = {
8
8
  readonly dispose: () => void;
9
9
  readonly poll?: () => void;
10
10
  };
11
- export type Intent = {
12
- id: number;
13
- value: number;
14
- };
15
- export type InputData = ArrayBuffer;
16
11
  export type Input = {
17
12
  /** latest-known value. */
18
13
  value: number;
19
- /** previously-known value. */
14
+ /** previously-known value from last frame. */
20
15
  was: number;
21
- /** change in value since the previously-known value. */
22
- delta: number;
16
+ /** sum of values since last frame. */
17
+ sum: number;
23
18
  };
24
19
  export type Inputs<B extends Bindings = any> = (B extends Expression ? Input : B extends {
25
20
  [key: string]: Bindings;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../s/lib/input/types.ts"],"names":[],"mappings":"AA0CA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAqB,QAAW,EAAE,EAAE,CAAE,QAAiC,CAAA"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../s/lib/input/types.ts"],"names":[],"mappings":"AAsCA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAqB,QAAW,EAAE,EAAE,CAAE,QAAiC,CAAA"}
@@ -1,9 +1,4 @@
1
1
  export function mouseButton(button) {
2
- switch (button) {
3
- case 0: return "pointer.button.left";
4
- case 1: return "pointer.button.middle";
5
- case 2: return "pointer.button.right";
6
- default: return `pointer.button.${button + 1}`;
7
- }
2
+ return `pointer.${button + 1}`;
8
3
  }
9
4
  //# sourceMappingURL=mouse-button.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mouse-button.js","sourceRoot":"","sources":["../../../../s/lib/input/utils/mouse-button.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,WAAW,CAAC,MAAc;IACzC,QAAQ,MAAM,EAAE,CAAC;QAChB,KAAK,CAAC,EAAE,OAAO,qBAAqB,CAAA;QACpC,KAAK,CAAC,EAAE,OAAO,uBAAuB,CAAA;QACtC,KAAK,CAAC,EAAE,OAAO,sBAAsB,CAAA;QACrC,SAAS,OAAO,kBAAkB,MAAM,GAAG,CAAC,EAAE,CAAA;IAC/C,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"mouse-button.js","sourceRoot":"","sources":["../../../../s/lib/input/utils/mouse-button.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,WAAW,CAAC,MAAc;IACzC,OAAO,WAAW,MAAM,GAAG,CAAC,EAAE,CAAA;AAC/B,CAAC"}
package/x/lib/test.js CHANGED
@@ -1,134 +1,4 @@
1
- import { expect, run, suite, test } from "@e280/science";
2
- import { asBindings } from "./input/types.js";
3
- import { InputEncoder } from "./input/encoder.js";
4
- import { PlainSource } from "./input/sources/plain.js";
5
- import { quickbind } from "./input/testing/quickbind.js";
6
- await run({
7
- input: suite({
8
- "roundtrip": test(async () => {
9
- const { sample, solve } = quickbind("KeyE");
10
- sample({ code: "KeyE", value: 0 });
11
- expect(solve().value).is(0);
12
- sample({ code: "KeyE", value: 1 });
13
- const inputs = solve();
14
- expect(inputs.value).is(1);
15
- expect(inputs.was).is(0);
16
- expect(inputs.delta).is(1);
17
- }),
18
- "update bindings": test(async () => {
19
- const { sample, solve, encoder } = quickbind("KeyA");
20
- sample({ code: "KeyA", value: 1 });
21
- expect(solve().value).is(1);
22
- sample({ code: "KeyA", value: 0 });
23
- expect(solve().value).is(0);
24
- encoder.bindings = "KeyB";
25
- expect(encoder.bindings).is("KeyB");
26
- sample({ code: "KeyA", value: 1 });
27
- expect(solve().value).is(0);
28
- sample({ code: "KeyA", value: 0 });
29
- sample({ code: "KeyB", value: 1 });
30
- expect(solve().value).is(1);
31
- }),
32
- "pointer movement accumulation": test(async () => {
33
- const { sample, solve } = quickbind(["accumulate", ["sum", "pointer.x"]]);
34
- let inputs = solve();
35
- sample({ code: "pointer.x", value: 0 });
36
- sample({ code: "pointer.x", value: 1 });
37
- sample({ code: "pointer.x", value: 2 });
38
- sample({ code: "pointer.x", value: -5 });
39
- inputs = solve();
40
- expect(inputs.value).is(-2);
41
- expect(inputs.delta).is(-2);
42
- sample({ code: "pointer.x", value: 2 });
43
- sample({ code: "pointer.x", value: 5 });
44
- inputs = solve();
45
- expect(inputs.value).is(5);
46
- expect(inputs.delta).is(7);
47
- }),
48
- "rapid transitions": test(async () => {
49
- const { sample, solve } = quickbind({
50
- key: "KeyE",
51
- downs: ["down", "KeyE"],
52
- ups: ["up", "KeyE"],
53
- });
54
- for (const value of [1, 0, 1, 0, 1])
55
- sample({ code: "KeyE", value });
56
- let inputs = solve();
57
- expect(inputs.key.value).is(1);
58
- expect(inputs.downs.value).is(3);
59
- expect(inputs.ups.value).is(2);
60
- inputs = solve();
61
- expect(inputs.key.value).is(1);
62
- expect(inputs.downs.value).is(0);
63
- expect(inputs.ups.value).is(0);
64
- }),
65
- "double tap in one frame": test(async () => {
66
- const { sample, solve } = quickbind(["taps", 2, 300, ["down", "KeyE"]]);
67
- for (const value of [1, 0, 1, 0])
68
- sample({ code: "KeyE", value });
69
- expect(solve(100).value).is(1);
70
- expect(solve(200).value).is(0);
71
- }),
72
- "held across empty frames": test(async () => {
73
- const { sample, solve } = quickbind(["held", 300, "KeyE"]);
74
- solve(0);
75
- sample({ code: "KeyE", value: 1 });
76
- expect(solve(100).value).is(0);
77
- expect(solve(399).value).is(0);
78
- expect(solve(400).value).is(1);
79
- expect(solve(500).value).is(1);
80
- sample({ code: "KeyE", value: 0 });
81
- expect(solve(501).value).is(0);
82
- sample({ code: "KeyE", value: 1 });
83
- expect(solve(600).value).is(0);
84
- expect(solve(900).value).is(1);
85
- }),
86
- "joystick integration": test(async () => {
87
- const { sample, solve } = quickbind(["accumulate", ["*", "gamepad.x", ["dt"]]]);
88
- solve(0);
89
- sample({ code: "gamepad.x", value: 1 });
90
- expect(solve(500).value).is(0.5);
91
- expect(solve(1000).value).is(1);
92
- sample({ code: "gamepad.x", value: 0 });
93
- expect(solve(1500).value).is(1);
94
- }),
95
- "taps and holds coexist": test(async () => {
96
- const { sample, solve } = quickbind({
97
- tapper: ["taps", 1, 10, ["down", "KeyE"]],
98
- holder: ["held", 10, "KeyE"],
99
- });
100
- solve(0);
101
- sample({ code: "KeyE", value: 1 });
102
- expect(solve(1).tapper.value).is(1);
103
- sample({ code: "KeyE", value: 0 });
104
- const released = solve(2);
105
- expect(released.tapper.value).is(0);
106
- expect(released.holder.value).is(0);
107
- sample({ code: "KeyE", value: 1 });
108
- const pressed = solve(3);
109
- expect(pressed.tapper.value).is(1);
110
- expect(pressed.holder.value).is(0);
111
- const holding = solve(13);
112
- expect(holding.tapper.value).is(0);
113
- expect(holding.holder.value).is(1);
114
- }),
115
- "independent encoder consumers": test(async () => {
116
- const source = new PlainSource();
117
- const bindings = asBindings({
118
- downs: ["down", "KeyE"],
119
- ups: ["up", "KeyE"],
120
- });
121
- const fast = new InputEncoder(source, bindings);
122
- const slow = new InputEncoder(source, bindings);
123
- source.onSample.publish({ code: "KeyE", value: 1 });
124
- expect([...fast.evaluate(1)].map(i => i.value)).deep([1, 0]);
125
- source.onSample.publish({ code: "KeyE", value: 0 });
126
- expect([...fast.evaluate(2)].map(i => i.value)).deep([0, 1]);
127
- // slow consumer receives both transitions in one batch.
128
- expect([...slow.evaluate(20)].map(i => i.value)).deep([1, 1]);
129
- fast.dispose();
130
- slow.dispose();
131
- }),
132
- }),
133
- });
1
+ import { run } from "@e280/science";
2
+ import input from "./input/test.js";
3
+ await run({ input });
134
4
  //# sourceMappingURL=test.js.map
package/x/lib/test.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"test.js","sourceRoot":"","sources":["../../s/lib/test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../s/lib/test.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,eAAe,CAAA;AACjC,OAAO,KAAK,MAAM,iBAAiB,CAAA;AAEnC,MAAM,GAAG,CAAC,EAAC,KAAK,EAAC,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { Hub } from "./hub.js";
2
+ import { Controller } from "../../input/controller.js";
3
+ import { GamepadSource } from "../../input/sources/gamepad.js";
4
+ export declare function autoGamepads(hub: Hub, fn?: (controller: Controller, source: GamepadSource) => () => void): () => void;
@@ -0,0 +1,20 @@
1
+ import { Controller } from "../../input/controller.js";
2
+ import { onPad } from "../../input/utils/pad/on-pad.js";
3
+ import { GamepadSource } from "../../input/sources/gamepad.js";
4
+ export function autoGamepads(hub, fn) {
5
+ return onPad(pad => {
6
+ const source = new GamepadSource(pad);
7
+ const controller = new Controller({
8
+ source,
9
+ bindings: hub.bindings,
10
+ });
11
+ hub.plug(controller);
12
+ const dispose = fn?.(controller, source);
13
+ return () => {
14
+ controller.dispose();
15
+ hub.remove(controller);
16
+ dispose?.();
17
+ };
18
+ });
19
+ }
20
+ //# sourceMappingURL=auto-gamepads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-gamepads.js","sourceRoot":"","sources":["../../../../s/lib/ui/deck/auto-gamepads.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,UAAU,EAAC,MAAM,2BAA2B,CAAA;AACpD,OAAO,EAAC,KAAK,EAAC,MAAM,iCAAiC,CAAA;AACrD,OAAO,EAAC,aAAa,EAAC,MAAM,gCAAgC,CAAA;AAE5D,MAAM,UAAU,YAAY,CAC1B,GAAQ,EACR,EAAkE;IAGnE,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE;QAClB,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,CAAA;QAErC,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC;YACjC,MAAM;YACN,QAAQ,EAAE,GAAG,CAAC,QAAQ;SACtB,CAAC,CAAA;QAEF,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACpB,MAAM,OAAO,GAAG,EAAE,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QAExC,OAAO,GAAG,EAAE;YACX,UAAU,CAAC,OAAO,EAAE,CAAA;YACpB,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;YACtB,OAAO,EAAE,EAAE,CAAA;QACZ,CAAC,CAAA;IACF,CAAC,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { Profiles } from "./internal/profiles.js";
2
+ import { Bindings } from "../../../input/types.js";
3
+ import { Assignments } from "./internal/assignments.js";
4
+ import { Controller } from "../../../input/controller.js";
5
+ import { ControllerMeta, ControlsOptions } from "./types.js";
6
+ export declare class Controls<B extends Bindings = any> {
7
+ #private;
8
+ profiles: Profiles<B>;
9
+ assignments: Assignments;
10
+ readonly presets: import("../types.js").Presets<B>;
11
+ constructor(options: ControlsOptions<B>);
12
+ get on(): (fn: () => unknown) => () => void;
13
+ load(): Promise<void>;
14
+ get controllers(): Controller<any>[];
15
+ get fallbackProfileKey(): string;
16
+ meta(controller: Controller): ControllerMeta | undefined;
17
+ attach(controller: Controller, meta: Omit<ControllerMeta, "id">): void;
18
+ detach(controller: Controller): void;
19
+ }
@@ -0,0 +1,56 @@
1
+ import { collect, got, setEntries } from "@e280/stz";
2
+ import { Profiles } from "./internal/profiles.js";
3
+ import { makeControlsData } from "./internal/data.js";
4
+ import { Assignments } from "./internal/assignments.js";
5
+ export class Controls {
6
+ #data;
7
+ profiles;
8
+ assignments;
9
+ presets;
10
+ constructor(options) {
11
+ this.#data = makeControlsData(options);
12
+ this.profiles = new Profiles(this.#data);
13
+ this.assignments = new Assignments(this.#data);
14
+ this.presets = options.presets;
15
+ }
16
+ get on() {
17
+ return this.#data.subby.on;
18
+ }
19
+ #rebind(controller) {
20
+ const { preferences, assignments, controllers } = this.#data;
21
+ const meta = got(controllers.get(controller));
22
+ const profileKey = assignments.get(controller)
23
+ ?? preferences.get(meta.handle)
24
+ ?? meta.defaultProfileKey;
25
+ controller.bindings = this.profiles.get(profileKey).bindings;
26
+ assignments.set(controller, profileKey);
27
+ }
28
+ async load() {
29
+ const { kvs, controllers, preferences, profiles: { customs } } = this.#data;
30
+ customs.clear();
31
+ setEntries(customs, await collect(kvs.profiles));
32
+ preferences.clear();
33
+ setEntries(preferences, await collect(kvs.preferences));
34
+ for (const controller of controllers.keys())
35
+ this.#rebind(controller);
36
+ }
37
+ get controllers() {
38
+ return [...this.#data.controllers.keys()];
39
+ }
40
+ get fallbackProfileKey() {
41
+ return this.#data.profiles.fallback.key;
42
+ }
43
+ meta(controller) {
44
+ return this.#data.controllers.get(controller);
45
+ }
46
+ attach(controller, meta) {
47
+ const id = this.#data.idCounter.next();
48
+ this.#data.controllers.set(controller, { ...meta, id });
49
+ this.#rebind(controller);
50
+ }
51
+ detach(controller) {
52
+ this.#data.controllers.delete(controller);
53
+ this.#data.assignments.delete(controller);
54
+ }
55
+ }
56
+ //# sourceMappingURL=controls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controls.js","sourceRoot":"","sources":["../../../../../s/lib/ui/deck/controls/controls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { ControlsData } from "./data.js";
2
+ import { ProfileKey } from "../../types.js";
3
+ import { Controller } from "../../../../input/controller.js";
4
+ export declare class Assignments {
5
+ #private;
6
+ constructor(data: ControlsData<any>);
7
+ assign(controller: Controller, profileKey: ProfileKey): Promise<void>;
8
+ assignedProfileKeyOf(controller: Controller): string;
9
+ }
@@ -0,0 +1,16 @@
1
+ import { assignProfile } from "./fns.js";
2
+ export class Assignments {
3
+ #data;
4
+ constructor(data) {
5
+ this.#data = data;
6
+ }
7
+ async assign(controller, profileKey) {
8
+ await assignProfile(this.#data, controller, profileKey);
9
+ this.#data.subby.publish();
10
+ }
11
+ assignedProfileKeyOf(controller) {
12
+ const { assignments } = this.#data;
13
+ return assignments.get(controller) ?? this.#data.profiles.fallback.key;
14
+ }
15
+ }
16
+ //# sourceMappingURL=assignments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assignments.js","sourceRoot":"","sources":["../../../../../../s/lib/ui/deck/controls/internal/assignments.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,aAAa,EAAC,MAAM,UAAU,CAAA;AAKtC,MAAM,OAAO,WAAW;IACvB,KAAK,CAAA;IAEL,YAAY,IAAuB;QAClC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;IAClB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAAsB,EAAE,UAAsB;QAC1D,MAAM,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,CAAA;QACvD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAA;IAC3B,CAAC;IAED,oBAAoB,CAAC,UAAsB;QAC1C,MAAM,EAAC,WAAW,EAAC,GAAG,IAAI,CAAC,KAAK,CAAA;QAChC,OAAO,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAA;IACvE,CAAC;CACD"}
@@ -0,0 +1,29 @@
1
+ import { RMap } from "@e280/strata";
2
+ import { IdCounter } from "@e280/stz";
3
+ import { Profile } from "../../types.js";
4
+ import { Bindings } from "../../../../input/types.js";
5
+ import { Controller } from "../../../../input/controller.js";
6
+ import { ControllerMeta, ControlsOptions } from "../types.js";
7
+ export type ControlsData<B extends Bindings> = (ReturnType<typeof makeControlsData<B>>);
8
+ export declare function makeControlsData<B extends Bindings>(options: ControlsOptions<B>): {
9
+ subby: import("@e280/stz").Subby<[]>;
10
+ kv: import("@e280/kv").Kv<unknown>;
11
+ presets: import("../../types.js").Presets<B>;
12
+ bindings: B;
13
+ idCounter: IdCounter;
14
+ profiles: {
15
+ presets: RMap<string, Profile<B>>;
16
+ customs: RMap<string, Profile<B>>;
17
+ fallback: {
18
+ key: string;
19
+ profile: Profile<B>;
20
+ };
21
+ };
22
+ controllers: RMap<Controller<any>, ControllerMeta>;
23
+ assignments: RMap<Controller<any>, string>;
24
+ preferences: RMap<string, string>;
25
+ kvs: {
26
+ profiles: import("@e280/kv").Kv<Profile>;
27
+ preferences: import("@e280/kv").Kv<string>;
28
+ };
29
+ };