@benev/tact 0.3.0-5 → 0.4.0-1

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 (654) hide show
  1. package/README.md +98 -55
  2. package/package.json +20 -21
  3. package/s/demo/main.bundle.ts +19 -67
  4. package/s/demo/main.css +4 -3
  5. package/s/demo/presets.ts +54 -0
  6. package/s/gamepad/gamepad-app/element.ts +25 -15
  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 +13 -6
  11. package/s/lib/index.ts +29 -0
  12. package/s/lib/input/controller.ts +72 -0
  13. package/s/lib/input/data/endian.ts +3 -0
  14. package/s/lib/input/data/intent/decode.ts +26 -0
  15. package/s/lib/input/data/intent/encode.ts +25 -0
  16. package/s/lib/input/data/intent/sizes.ts +6 -0
  17. package/s/lib/input/data/intent/types.ts +6 -0
  18. package/s/lib/input/data/parcel/decode.ts +32 -0
  19. package/s/lib/input/data/parcel/encode.ts +30 -0
  20. package/s/lib/input/data/parcel/sizes.ts +5 -0
  21. package/s/lib/input/data/parcel/types.ts +8 -0
  22. package/s/lib/input/data/test.ts +23 -0
  23. package/s/lib/input/decoder.ts +46 -0
  24. package/s/lib/input/evaluate/context.ts +16 -0
  25. package/s/lib/input/evaluate/evaluate.ts +229 -0
  26. package/s/lib/input/expression.ts +44 -0
  27. package/s/lib/input/investigate/hash-bindings.ts +22 -0
  28. package/s/lib/input/investigate/investigate.ts +35 -0
  29. package/s/lib/input/investigate/is-compatible.ts +8 -0
  30. package/s/lib/input/investigate/is-expression.ts +13 -0
  31. package/s/lib/input/investigate/make-input.ts +7 -0
  32. package/s/lib/input/sources/gamepad.ts +49 -0
  33. package/s/lib/input/sources/keyboard.ts +46 -0
  34. package/s/lib/input/sources/plain.ts +9 -0
  35. package/s/lib/input/sources/pointer.ts +38 -0
  36. package/s/lib/input/sources/sources.ts +24 -0
  37. package/s/lib/input/sources/stick.ts +32 -0
  38. package/s/lib/input/test.ts +194 -0
  39. package/s/lib/input/testing/quickbind.ts +21 -0
  40. package/s/lib/input/types.ts +48 -0
  41. package/s/lib/input/utils/clock.ts +14 -0
  42. package/s/lib/input/utils/mouse-button.ts +5 -0
  43. package/s/lib/input/utils/sampler.ts +28 -0
  44. package/s/lib/test.ts +6 -0
  45. package/s/lib/ui/deck/auto-gamepads.ts +29 -0
  46. package/s/lib/ui/deck/collector.ts +52 -0
  47. package/s/lib/ui/deck/controls/controls.ts +76 -0
  48. package/s/lib/ui/deck/controls/internal/assignments.ts +24 -0
  49. package/s/lib/ui/deck/controls/internal/data.ts +51 -0
  50. package/s/lib/ui/deck/controls/internal/fns.ts +38 -0
  51. package/s/lib/ui/deck/controls/internal/profiles.ts +83 -0
  52. package/s/lib/ui/deck/controls/types.ts +23 -0
  53. package/s/lib/ui/deck/hub.ts +108 -0
  54. package/s/lib/ui/deck/setup/deck.ts +31 -0
  55. package/s/lib/ui/deck/setup/tact.ts +86 -0
  56. package/s/lib/ui/deck/setup/types.ts +12 -0
  57. package/s/lib/ui/deck/types.ts +26 -0
  58. package/s/lib/ui/deck/utils/first-preset.ts +9 -0
  59. package/s/lib/ui/icons/akar/LICENSE +23 -0
  60. package/s/lib/ui/icons/akar/backspace.svg.ts +4 -0
  61. package/s/lib/ui/icons/akar/circle-plus.svg.ts +4 -0
  62. package/s/lib/ui/icons/akar/copy.svg.ts +4 -0
  63. package/s/lib/ui/icons/akar/cross.svg.ts +4 -0
  64. package/s/lib/ui/icons/akar/devices.svg.ts +4 -0
  65. package/s/lib/ui/icons/akar/drag-vertical-fill.svg.ts +4 -0
  66. package/s/lib/ui/icons/akar/game-controller.svg.ts +4 -0
  67. package/s/lib/ui/icons/akar/key-cap.svg.ts +4 -0
  68. package/s/lib/ui/icons/akar/people-group.svg.ts +4 -0
  69. package/s/lib/ui/icons/akar/person-add.svg.ts +4 -0
  70. package/s/lib/ui/icons/akar/settings-horizontal.svg.ts +4 -0
  71. package/s/lib/ui/icons/akar/trash-can.svg.ts +4 -0
  72. package/s/lib/ui/icons/akar/x-small.svg.ts +4 -0
  73. package/s/lib/ui/views/controllers/style.css.ts +158 -0
  74. package/s/lib/ui/views/controllers/subviews/controller.ts +53 -0
  75. package/s/lib/ui/views/controllers/subviews/dropcard.ts +31 -0
  76. package/s/lib/ui/views/controllers/subviews/player.ts +38 -0
  77. package/s/lib/ui/views/controllers/view.ts +72 -0
  78. package/s/lib/ui/views/customize/parts/capture-gamepad-chord.ts +59 -0
  79. package/s/lib/ui/views/customize/parts/capture-key-chord.ts +70 -0
  80. package/s/lib/ui/views/customize/parts/capture-pointer-chord.ts +55 -0
  81. package/s/lib/ui/views/customize/parts/render-bindings.ts +67 -0
  82. package/s/lib/ui/views/customize/style.css.ts +144 -0
  83. package/s/lib/ui/views/customize/subviews/expression.ts +88 -0
  84. package/s/lib/ui/views/customize/subviews/recorder.ts +76 -0
  85. package/s/lib/ui/views/customize/view.ts +104 -0
  86. package/s/lib/ui/views/deck/style.css.ts +69 -0
  87. package/s/lib/ui/views/deck/types.ts +15 -0
  88. package/s/lib/ui/views/deck/view.ts +49 -0
  89. package/s/lib/ui/views/profile-select/view.ts +44 -0
  90. package/s/lib/ui/views/theme.css.ts +115 -0
  91. package/s/lib/ui/views/visualizer/style.css.ts +23 -0
  92. package/s/lib/ui/views/visualizer/view.ts +16 -0
  93. package/s/lib/ui/views/visualizer/visualizer.ts +17 -0
  94. package/s/lib/utils/ellipsis.ts +7 -0
  95. package/s/lib/utils/hueify.ts +5 -0
  96. package/x/demo/main.bundle.js +16 -52
  97. package/x/demo/main.bundle.js.map +1 -1
  98. package/x/demo/main.bundle.min.js +766 -93
  99. package/x/demo/main.bundle.min.js.map +4 -4
  100. package/x/demo/main.css +4 -3
  101. package/x/demo/presets.d.ts +30 -0
  102. package/x/demo/presets.js +51 -0
  103. package/x/demo/presets.js.map +1 -0
  104. package/x/gamepad/gamepad-app/element.js +21 -14
  105. package/x/gamepad/gamepad-app/element.js.map +1 -1
  106. package/x/gamepad/gamepad-app/style.css.js +5 -1
  107. package/x/gamepad/gamepad-app/style.css.js.map +1 -1
  108. package/x/gamepad/index.html +4 -4
  109. package/x/gamepad/index.html.js +1 -1
  110. package/x/gamepad/main.bundle.min.js +25 -21
  111. package/x/gamepad/main.bundle.min.js.map +4 -4
  112. package/x/gamepad/main.css +10 -1
  113. package/x/index.html +16 -9
  114. package/x/index.html.js +13 -6
  115. package/x/index.html.js.map +1 -1
  116. package/x/lib/index.d.ts +26 -0
  117. package/x/lib/index.js +27 -0
  118. package/x/lib/index.js.map +1 -0
  119. package/x/lib/input/controller.d.ts +15 -0
  120. package/x/lib/input/controller.js +55 -0
  121. package/x/lib/input/controller.js.map +1 -0
  122. package/x/lib/input/data/endian.d.ts +1 -0
  123. package/x/lib/input/data/endian.js +2 -0
  124. package/x/lib/input/data/endian.js.map +1 -0
  125. package/x/lib/input/data/intent/decode.d.ts +5 -0
  126. package/x/lib/input/data/intent/decode.js +18 -0
  127. package/x/lib/input/data/intent/decode.js.map +1 -0
  128. package/x/lib/input/data/intent/encode.d.ts +2 -0
  129. package/x/lib/input/data/intent/encode.js +18 -0
  130. package/x/lib/input/data/intent/encode.js.map +1 -0
  131. package/x/lib/input/data/intent/sizes.d.ts +4 -0
  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.map +1 -0
  136. package/x/lib/input/data/parcel/decode.d.ts +2 -0
  137. package/x/lib/input/data/parcel/decode.js +22 -0
  138. package/x/lib/input/data/parcel/decode.js.map +1 -0
  139. package/x/lib/input/data/parcel/encode.d.ts +2 -0
  140. package/x/lib/input/data/parcel/encode.js +19 -0
  141. package/x/lib/input/data/parcel/encode.js.map +1 -0
  142. package/x/lib/input/data/parcel/sizes.d.ts +3 -0
  143. package/x/lib/input/data/parcel/sizes.js +4 -0
  144. package/x/lib/input/data/parcel/sizes.js.map +1 -0
  145. package/x/lib/input/data/parcel/types.d.ts +5 -0
  146. package/x/lib/input/data/parcel/types.js.map +1 -0
  147. package/x/lib/input/data/test.d.ts +6 -0
  148. package/x/lib/input/data/test.js +19 -0
  149. package/x/lib/input/data/test.js.map +1 -0
  150. package/x/lib/input/decoder.d.ts +7 -0
  151. package/x/lib/input/decoder.js +33 -0
  152. package/x/lib/input/decoder.js.map +1 -0
  153. package/x/lib/input/evaluate/context.d.ts +15 -0
  154. package/x/lib/input/evaluate/context.js +11 -0
  155. package/x/lib/input/evaluate/context.js.map +1 -0
  156. package/x/lib/input/evaluate/evaluate.d.ts +3 -0
  157. package/x/lib/input/evaluate/evaluate.js +175 -0
  158. package/x/lib/input/evaluate/evaluate.js.map +1 -0
  159. package/x/lib/input/expression.d.ts +1 -0
  160. package/x/lib/input/expression.js +2 -0
  161. package/x/lib/input/expression.js.map +1 -0
  162. package/x/lib/input/investigate/hash-bindings.d.ts +2 -0
  163. package/x/lib/input/investigate/hash-bindings.js +17 -0
  164. package/x/lib/input/investigate/hash-bindings.js.map +1 -0
  165. package/x/lib/input/investigate/investigate.d.ts +8 -0
  166. package/x/lib/input/investigate/investigate.js +28 -0
  167. package/x/lib/input/investigate/investigate.js.map +1 -0
  168. package/x/lib/input/investigate/is-compatible.d.ts +2 -0
  169. package/x/lib/input/investigate/is-compatible.js +5 -0
  170. package/x/lib/input/investigate/is-compatible.js.map +1 -0
  171. package/x/lib/input/investigate/is-expression.d.ts +3 -0
  172. package/x/lib/input/investigate/is-expression.js +13 -0
  173. package/x/lib/input/investigate/is-expression.js.map +1 -0
  174. package/x/lib/input/investigate/make-input.d.ts +2 -0
  175. package/x/lib/input/investigate/make-input.js +4 -0
  176. package/x/lib/input/investigate/make-input.js.map +1 -0
  177. package/x/lib/input/sources/gamepad.d.ts +9 -0
  178. package/x/lib/input/sources/gamepad.js +39 -0
  179. package/x/lib/input/sources/gamepad.js.map +1 -0
  180. package/x/lib/input/sources/keyboard.d.ts +5 -0
  181. package/x/lib/input/sources/keyboard.js +36 -0
  182. package/x/lib/input/sources/keyboard.js.map +1 -0
  183. package/x/lib/input/sources/plain.d.ts +5 -0
  184. package/x/lib/input/sources/plain.js +6 -0
  185. package/x/lib/input/sources/plain.js.map +1 -0
  186. package/x/lib/input/sources/pointer.d.ts +7 -0
  187. package/x/lib/input/sources/pointer.js +33 -0
  188. package/x/lib/input/sources/pointer.js.map +1 -0
  189. package/x/lib/input/sources/sources.d.ts +7 -0
  190. package/x/lib/input/sources/sources.js +15 -0
  191. package/x/lib/input/sources/sources.js.map +1 -0
  192. package/x/lib/input/sources/stick.d.ts +10 -0
  193. package/x/lib/input/sources/stick.js +25 -0
  194. package/x/lib/input/sources/stick.js.map +1 -0
  195. package/x/lib/input/test.d.ts +18 -0
  196. package/x/lib/input/test.js +143 -0
  197. package/x/lib/input/test.js.map +1 -0
  198. package/x/lib/input/testing/quickbind.d.ts +12 -0
  199. package/x/lib/input/testing/quickbind.js +13 -0
  200. package/x/lib/input/testing/quickbind.js.map +1 -0
  201. package/x/lib/input/types.d.ts +32 -0
  202. package/x/lib/input/types.js +2 -0
  203. package/x/lib/input/types.js.map +1 -0
  204. package/x/lib/input/utils/clock.d.ts +7 -0
  205. package/x/lib/input/utils/clock.js +14 -0
  206. package/x/lib/input/utils/clock.js.map +1 -0
  207. package/x/lib/input/utils/evergreen.js.map +1 -0
  208. package/x/lib/input/utils/is-down.js.map +1 -0
  209. package/x/lib/input/utils/mouse-button.d.ts +1 -0
  210. package/x/lib/input/utils/mouse-button.js +4 -0
  211. package/x/lib/input/utils/mouse-button.js.map +1 -0
  212. package/x/lib/input/utils/pad/on-pad.js.map +1 -0
  213. package/x/lib/input/utils/pad/pad.js.map +1 -0
  214. package/x/lib/input/utils/sampler.d.ts +7 -0
  215. package/x/lib/input/utils/sampler.js +23 -0
  216. package/x/lib/input/utils/sampler.js.map +1 -0
  217. package/x/lib/input/utils/split-axis.js.map +1 -0
  218. package/x/lib/test.d.ts +1 -0
  219. package/x/lib/test.js +4 -0
  220. package/x/lib/test.js.map +1 -0
  221. package/x/lib/ui/deck/auto-gamepads.d.ts +4 -0
  222. package/x/lib/ui/deck/auto-gamepads.js +19 -0
  223. package/x/lib/ui/deck/auto-gamepads.js.map +1 -0
  224. package/x/lib/ui/deck/collector.d.ts +13 -0
  225. package/x/lib/ui/deck/collector.js +35 -0
  226. package/x/lib/ui/deck/collector.js.map +1 -0
  227. package/x/lib/ui/deck/controls/controls.d.ts +19 -0
  228. package/x/lib/ui/deck/controls/controls.js +56 -0
  229. package/x/lib/ui/deck/controls/controls.js.map +1 -0
  230. package/x/lib/ui/deck/controls/internal/assignments.d.ts +9 -0
  231. package/x/lib/ui/deck/controls/internal/assignments.js +16 -0
  232. package/x/lib/ui/deck/controls/internal/assignments.js.map +1 -0
  233. package/x/lib/ui/deck/controls/internal/data.d.ts +29 -0
  234. package/x/lib/ui/deck/controls/internal/data.js +29 -0
  235. package/x/lib/ui/deck/controls/internal/data.js.map +1 -0
  236. package/x/lib/ui/deck/controls/internal/fns.d.ts +6 -0
  237. package/x/lib/ui/deck/controls/internal/fns.js +19 -0
  238. package/x/lib/ui/deck/controls/internal/fns.js.map +1 -0
  239. package/x/lib/ui/deck/controls/internal/profiles.d.ts +18 -0
  240. package/x/lib/ui/deck/controls/internal/profiles.js +59 -0
  241. package/x/lib/ui/deck/controls/internal/profiles.js.map +1 -0
  242. package/x/lib/ui/deck/controls/types.d.ts +17 -0
  243. package/x/lib/ui/deck/controls/types.js +2 -0
  244. package/x/lib/ui/deck/controls/types.js.map +1 -0
  245. package/x/lib/ui/deck/hub.d.ts +21 -0
  246. package/x/lib/ui/deck/hub.js +85 -0
  247. package/x/lib/ui/deck/hub.js.map +1 -0
  248. package/x/lib/ui/deck/setup/deck.d.ts +3 -0
  249. package/x/lib/ui/deck/setup/deck.js +20 -0
  250. package/x/lib/ui/deck/setup/deck.js.map +1 -0
  251. package/x/lib/ui/deck/setup/tact.d.ts +17 -0
  252. package/x/lib/ui/deck/setup/tact.js +67 -0
  253. package/x/lib/ui/deck/setup/tact.js.map +1 -0
  254. package/x/lib/ui/deck/setup/types.d.ts +9 -0
  255. package/x/lib/ui/deck/setup/types.js +2 -0
  256. package/x/lib/ui/deck/setup/types.js.map +1 -0
  257. package/x/lib/ui/deck/types.d.ts +18 -0
  258. package/x/lib/ui/deck/types.js +3 -0
  259. package/x/lib/ui/deck/types.js.map +1 -0
  260. package/x/lib/ui/deck/utils/first-preset.d.ts +6 -0
  261. package/x/lib/ui/deck/utils/first-preset.js +5 -0
  262. package/x/lib/ui/deck/utils/first-preset.js.map +1 -0
  263. package/x/lib/ui/icons/akar/backspace.svg.d.ts +2 -0
  264. package/x/lib/ui/icons/akar/backspace.svg.js +3 -0
  265. package/x/lib/ui/icons/akar/backspace.svg.js.map +1 -0
  266. package/x/lib/ui/icons/akar/circle-plus.svg.d.ts +2 -0
  267. package/x/lib/ui/icons/akar/circle-plus.svg.js +3 -0
  268. package/x/lib/ui/icons/akar/circle-plus.svg.js.map +1 -0
  269. package/x/lib/ui/icons/akar/copy.svg.d.ts +2 -0
  270. package/x/lib/ui/icons/akar/copy.svg.js +3 -0
  271. package/x/lib/ui/icons/akar/copy.svg.js.map +1 -0
  272. package/x/lib/ui/icons/akar/cross.svg.d.ts +2 -0
  273. package/x/lib/ui/icons/akar/cross.svg.js +3 -0
  274. package/x/lib/ui/icons/akar/cross.svg.js.map +1 -0
  275. package/x/lib/ui/icons/akar/devices.svg.d.ts +2 -0
  276. package/x/lib/ui/icons/akar/devices.svg.js +3 -0
  277. package/x/lib/ui/icons/akar/devices.svg.js.map +1 -0
  278. package/x/lib/ui/icons/akar/drag-vertical-fill.svg.d.ts +2 -0
  279. package/x/lib/ui/icons/akar/drag-vertical-fill.svg.js +3 -0
  280. package/x/lib/ui/icons/akar/drag-vertical-fill.svg.js.map +1 -0
  281. package/x/lib/ui/icons/akar/game-controller.svg.d.ts +2 -0
  282. package/x/lib/ui/icons/akar/game-controller.svg.js +3 -0
  283. package/x/lib/ui/icons/akar/game-controller.svg.js.map +1 -0
  284. package/x/lib/ui/icons/akar/key-cap.svg.d.ts +2 -0
  285. package/x/lib/ui/icons/akar/key-cap.svg.js +3 -0
  286. package/x/lib/ui/icons/akar/key-cap.svg.js.map +1 -0
  287. package/x/lib/ui/icons/akar/people-group.svg.d.ts +2 -0
  288. package/x/lib/ui/icons/akar/people-group.svg.js +3 -0
  289. package/x/lib/ui/icons/akar/people-group.svg.js.map +1 -0
  290. package/x/lib/ui/icons/akar/person-add.svg.d.ts +2 -0
  291. package/x/lib/ui/icons/akar/person-add.svg.js +3 -0
  292. package/x/lib/ui/icons/akar/person-add.svg.js.map +1 -0
  293. package/x/lib/ui/icons/akar/settings-horizontal.svg.d.ts +2 -0
  294. package/x/lib/ui/icons/akar/settings-horizontal.svg.js +3 -0
  295. package/x/lib/ui/icons/akar/settings-horizontal.svg.js.map +1 -0
  296. package/x/lib/ui/icons/akar/trash-can.svg.d.ts +2 -0
  297. package/x/lib/ui/icons/akar/trash-can.svg.js +3 -0
  298. package/x/lib/ui/icons/akar/trash-can.svg.js.map +1 -0
  299. package/x/lib/ui/icons/akar/x-small.svg.d.ts +2 -0
  300. package/x/lib/ui/icons/akar/x-small.svg.js +3 -0
  301. package/x/lib/ui/icons/akar/x-small.svg.js.map +1 -0
  302. package/x/lib/ui/views/controllers/style.css.js +157 -0
  303. package/x/lib/ui/views/controllers/style.css.js.map +1 -0
  304. package/x/lib/ui/views/controllers/subviews/controller.d.ts +3 -0
  305. package/x/lib/ui/views/controllers/subviews/controller.js +45 -0
  306. package/x/lib/ui/views/controllers/subviews/controller.js.map +1 -0
  307. package/x/lib/ui/views/controllers/subviews/dropcard.d.ts +9 -0
  308. package/x/lib/ui/views/controllers/subviews/dropcard.js +20 -0
  309. package/x/lib/ui/views/controllers/subviews/dropcard.js.map +1 -0
  310. package/x/lib/ui/views/controllers/subviews/player.d.ts +2 -0
  311. package/x/lib/ui/views/controllers/subviews/player.js +32 -0
  312. package/x/lib/ui/views/controllers/subviews/player.js.map +1 -0
  313. package/x/lib/ui/views/controllers/view.d.ts +2 -0
  314. package/x/lib/ui/views/controllers/view.js +64 -0
  315. package/x/lib/ui/views/controllers/view.js.map +1 -0
  316. package/x/lib/ui/views/customize/parts/capture-gamepad-chord.d.ts +2 -0
  317. package/x/lib/ui/views/customize/parts/capture-gamepad-chord.js +46 -0
  318. package/x/lib/ui/views/customize/parts/capture-gamepad-chord.js.map +1 -0
  319. package/x/lib/ui/views/customize/parts/capture-key-chord.d.ts +2 -0
  320. package/x/lib/ui/views/customize/parts/capture-key-chord.js +58 -0
  321. package/x/lib/ui/views/customize/parts/capture-key-chord.js.map +1 -0
  322. package/x/lib/ui/views/customize/parts/capture-pointer-chord.d.ts +2 -0
  323. package/x/lib/ui/views/customize/parts/capture-pointer-chord.js +42 -0
  324. package/x/lib/ui/views/customize/parts/capture-pointer-chord.js.map +1 -0
  325. package/x/lib/ui/views/customize/parts/render-bindings.d.ts +3 -0
  326. package/x/lib/ui/views/customize/parts/render-bindings.js +32 -0
  327. package/x/lib/ui/views/customize/parts/render-bindings.js.map +1 -0
  328. package/x/lib/ui/views/customize/style.css.js +143 -0
  329. package/x/lib/ui/views/customize/style.css.js.map +1 -0
  330. package/x/lib/ui/views/customize/subviews/expression.d.ts +2 -0
  331. package/x/lib/ui/views/customize/subviews/expression.js +75 -0
  332. package/x/lib/ui/views/customize/subviews/expression.js.map +1 -0
  333. package/x/lib/ui/views/customize/subviews/recorder.d.ts +3 -0
  334. package/x/lib/ui/views/customize/subviews/recorder.js +60 -0
  335. package/x/lib/ui/views/customize/subviews/recorder.js.map +1 -0
  336. package/x/lib/ui/views/customize/view.d.ts +6 -0
  337. package/x/lib/ui/views/customize/view.js +82 -0
  338. package/x/lib/ui/views/customize/view.js.map +1 -0
  339. package/x/lib/ui/views/deck/style.css.d.ts +2 -0
  340. package/x/lib/ui/views/deck/style.css.js +68 -0
  341. package/x/lib/ui/views/deck/style.css.js.map +1 -0
  342. package/x/lib/ui/views/deck/types.d.ts +14 -0
  343. package/x/lib/ui/views/deck/types.js +2 -0
  344. package/x/lib/ui/views/deck/types.js.map +1 -0
  345. package/x/lib/ui/views/deck/view.d.ts +2 -0
  346. package/x/lib/ui/views/deck/view.js +41 -0
  347. package/x/lib/ui/views/deck/view.js.map +1 -0
  348. package/x/lib/ui/views/profile-select/view.d.ts +4 -0
  349. package/x/lib/ui/views/profile-select/view.js +34 -0
  350. package/x/lib/ui/views/profile-select/view.js.map +1 -0
  351. package/x/lib/ui/views/theme.css.d.ts +2 -0
  352. package/x/lib/ui/views/theme.css.js +113 -0
  353. package/x/lib/ui/views/theme.css.js.map +1 -0
  354. package/x/lib/ui/views/visualizer/style.css.d.ts +2 -0
  355. package/x/lib/ui/views/visualizer/style.css.js +22 -0
  356. package/x/lib/ui/views/visualizer/style.css.js.map +1 -0
  357. package/x/lib/ui/views/visualizer/view.d.ts +2 -0
  358. package/x/lib/ui/views/visualizer/view.js +11 -0
  359. package/x/lib/ui/views/visualizer/view.js.map +1 -0
  360. package/x/lib/ui/views/visualizer/visualizer.d.ts +5 -0
  361. package/x/lib/ui/views/visualizer/visualizer.js +13 -0
  362. package/x/lib/ui/views/visualizer/visualizer.js.map +1 -0
  363. package/x/lib/utils/ellipsis.d.ts +1 -0
  364. package/x/lib/utils/ellipsis.js +6 -0
  365. package/x/lib/utils/ellipsis.js.map +1 -0
  366. package/x/lib/utils/hueify.d.ts +1 -0
  367. package/x/lib/utils/hueify.js +4 -0
  368. package/x/lib/utils/hueify.js.map +1 -0
  369. package/x/lib/utils/make-id.js.map +1 -0
  370. package/s/_archive/README.md +0 -435
  371. package/s/_archive/core/bindings/action.ts +0 -30
  372. package/s/_archive/core/bindings/parts/defaults.ts +0 -32
  373. package/s/_archive/core/bindings/parts/is-pressed.ts +0 -5
  374. package/s/_archive/core/bindings/parts/lens-algo.ts +0 -84
  375. package/s/_archive/core/bindings/parts/lookup-proxies.ts +0 -17
  376. package/s/_archive/core/bindings/resolver.ts +0 -103
  377. package/s/_archive/core/bindings/sample-map.ts +0 -25
  378. package/s/_archive/core/bindings/types.ts +0 -60
  379. package/s/_archive/core/core.test.ts +0 -155
  380. package/s/_archive/core/devices/auto-gamepads.ts +0 -8
  381. package/s/_archive/core/devices/device.ts +0 -12
  382. package/s/_archive/core/devices/infra/group.ts +0 -24
  383. package/s/_archive/core/devices/infra/sampler.ts +0 -22
  384. package/s/_archive/core/devices/standard/gamepad.ts +0 -83
  385. package/s/_archive/core/devices/standard/index.ts +0 -8
  386. package/s/_archive/core/devices/standard/keyboard.ts +0 -31
  387. package/s/_archive/core/devices/standard/pointer.ts +0 -97
  388. package/s/_archive/core/devices/standard/primary.ts +0 -20
  389. package/s/_archive/core/devices/standard/stick.ts +0 -27
  390. package/s/_archive/core/devices/standard/vpad.ts +0 -25
  391. package/s/_archive/core/devices/types.ts +0 -3
  392. package/s/_archive/core/hub/hub.ts +0 -118
  393. package/s/_archive/core/hub/meta-bindings.ts +0 -23
  394. package/s/_archive/core/hub/parts/connected.ts +0 -15
  395. package/s/_archive/core/hub/port.ts +0 -26
  396. package/s/_archive/core/hub/types.ts +0 -13
  397. package/s/_archive/core/index.ts +0 -19
  398. package/s/_archive/core/testing/testing.ts +0 -57
  399. package/s/_archive/deck/deck.ts +0 -69
  400. package/s/_archive/deck/index.ts +0 -13
  401. package/s/_archive/deck/parts/catalog.ts +0 -58
  402. package/s/_archive/deck/parts/db.ts +0 -65
  403. package/s/_archive/deck/parts/device-skins/device-icons.ts +0 -38
  404. package/s/_archive/deck/parts/device-skins/device-skin.ts +0 -29
  405. package/s/_archive/deck/parts/local-storage-kv.ts +0 -8
  406. package/s/_archive/deck/parts/merge-bindings.ts +0 -21
  407. package/s/_archive/deck/parts/overlay-visibility.ts +0 -49
  408. package/s/_archive/deck/views/bindings/style.css.ts +0 -6
  409. package/s/_archive/deck/views/bindings/view.ts +0 -95
  410. package/s/_archive/deck/views/overlay/style.css.ts +0 -110
  411. package/s/_archive/deck/views/overlay/view.ts +0 -46
  412. package/s/_archive/demo/game/game.ts +0 -85
  413. package/s/_archive/demo/game/parts/agent.ts +0 -10
  414. package/s/_archive/demo/game/parts/game-bindings.ts +0 -20
  415. package/s/_archive/demo/game/parts/logic.ts +0 -24
  416. package/s/_archive/demo/game/parts/player.ts +0 -32
  417. package/s/_archive/demo/game/parts/renderer.ts +0 -112
  418. package/s/_archive/demo/game/parts/state.ts +0 -23
  419. package/s/_archive/demo/game/parts/virtual-device.ts +0 -13
  420. package/s/_archive/demo/main.bundle.ts +0 -10
  421. package/s/_archive/demo/main.css +0 -85
  422. package/s/_archive/demo/ui/theater/styles.css.ts +0 -57
  423. package/s/_archive/demo/ui/theater/view.ts +0 -55
  424. package/s/_archive/demo/ui/theater/virtual/style.css.ts +0 -43
  425. package/s/_archive/demo/ui/theater/virtual/view.ts +0 -29
  426. package/s/_archive/demo/ui/utils/loader.ts +0 -5
  427. package/s/_archive/index.html.ts +0 -61
  428. package/s/_archive/index.ts +0 -8
  429. package/s/_archive/nubs/index.ts +0 -5
  430. package/s/_archive/nubs/lookpad/styles.ts +0 -21
  431. package/s/_archive/nubs/lookpad/view.ts +0 -39
  432. package/s/_archive/nubs/stick/style.css.ts +0 -70
  433. package/s/_archive/nubs/stick/view.ts +0 -108
  434. package/s/_archive/nubs/vpad/styles.css.ts +0 -134
  435. package/s/_archive/nubs/vpad/utils/gamepad-inputs.ts +0 -42
  436. package/s/_archive/nubs/vpad/utils/prevent-default-touch-shenanigans.ts +0 -12
  437. package/s/_archive/nubs/vpad/utils/touch-tracking.ts +0 -75
  438. package/s/_archive/nubs/vpad/view.ts +0 -141
  439. package/s/_archive/tests.test.ts +0 -6
  440. package/s/_archive/utils/circular-clamp.ts +0 -14
  441. package/s/_archive/utils/dispensers.ts +0 -20
  442. package/s/_archive/utils/gamepads.ts +0 -41
  443. package/s/_archive/utils/quick-math.ts +0 -13
  444. package/s/core/atom/defaults.ts +0 -32
  445. package/s/core/atom/lens-algo.ts +0 -84
  446. package/s/core/atom/types.ts +0 -44
  447. package/s/core/bindings/normalize.ts +0 -27
  448. package/s/core/bindings/shape.ts +0 -15
  449. package/s/core/bindings/table.ts +0 -22
  450. package/s/core/intent/bucket.ts +0 -28
  451. package/s/core/intent/consts.ts +0 -4
  452. package/s/core/intent/decode.ts +0 -23
  453. package/s/core/intent/encode.ts +0 -20
  454. package/s/core/intent/merge.ts +0 -15
  455. package/s/core/parts/action.ts +0 -36
  456. package/s/core/parts/sample-map.ts +0 -24
  457. package/s/core/resolvers/actions.ts +0 -30
  458. package/s/core/resolvers/intents.ts +0 -106
  459. package/s/core/types.ts +0 -40
  460. package/s/deck/controller.ts +0 -35
  461. package/s/deck/deck.ts +0 -92
  462. package/s/deck/parts/profiles.ts +0 -39
  463. package/s/deck/parts/runtime.ts +0 -11
  464. package/s/deck/parts/settings.ts +0 -30
  465. package/s/deck/port.ts +0 -35
  466. package/s/deck/types.ts +0 -16
  467. package/s/demo/demo-app/element.ts +0 -17
  468. package/s/demo/demo-app/style.css.ts +0 -10
  469. package/s/device/devices.ts +0 -24
  470. package/s/device/gamepad.ts +0 -42
  471. package/s/device/keyboard.ts +0 -33
  472. package/s/device/pointer.ts +0 -89
  473. package/s/device/sampler.ts +0 -25
  474. package/s/device/stick.ts +0 -24
  475. package/s/index-ui.ts +0 -3
  476. package/s/index.ts +0 -31
  477. package/s/test.ts +0 -339
  478. package/s/ui/views/desk/style.css.ts +0 -70
  479. package/s/ui/views/desk/view.ts +0 -122
  480. package/s/utils/circular-clamp.ts +0 -14
  481. package/s/utils/do-async.ts +0 -5
  482. package/s/utils/evergreen.ts +0 -10
  483. package/s/utils/freeze-clone.ts +0 -7
  484. package/s/utils/identifier.ts +0 -30
  485. package/s/utils/insert.ts +0 -6
  486. package/s/utils/remap.ts +0 -7
  487. package/s/utils/shift-limit.ts +0 -9
  488. package/s/utils/sort-by-key.ts +0 -7
  489. package/s/utils/split-axis.ts +0 -15
  490. package/s/utils/tmax.ts +0 -7
  491. package/s/utils/tmin.ts +0 -7
  492. package/x/_archive/demo/main.css +0 -85
  493. package/x/core/atom/defaults.d.ts +0 -3
  494. package/x/core/atom/defaults.js +0 -26
  495. package/x/core/atom/defaults.js.map +0 -1
  496. package/x/core/atom/lens-algo.d.ts +0 -2
  497. package/x/core/atom/lens-algo.js +0 -54
  498. package/x/core/atom/lens-algo.js.map +0 -1
  499. package/x/core/atom/types.d.ts +0 -27
  500. package/x/core/atom/types.js.map +0 -1
  501. package/x/core/bindings/normalize.d.ts +0 -2
  502. package/x/core/bindings/normalize.js +0 -17
  503. package/x/core/bindings/normalize.js.map +0 -1
  504. package/x/core/bindings/shape.d.ts +0 -2
  505. package/x/core/bindings/shape.js +0 -10
  506. package/x/core/bindings/shape.js.map +0 -1
  507. package/x/core/bindings/table.d.ts +0 -2
  508. package/x/core/bindings/table.js +0 -15
  509. package/x/core/bindings/table.js.map +0 -1
  510. package/x/core/intent/bucket.d.ts +0 -7
  511. package/x/core/intent/bucket.js +0 -21
  512. package/x/core/intent/bucket.js.map +0 -1
  513. package/x/core/intent/consts.d.ts +0 -2
  514. package/x/core/intent/consts.js +0 -3
  515. package/x/core/intent/consts.js.map +0 -1
  516. package/x/core/intent/decode.d.ts +0 -3
  517. package/x/core/intent/decode.js +0 -18
  518. package/x/core/intent/decode.js.map +0 -1
  519. package/x/core/intent/encode.d.ts +0 -3
  520. package/x/core/intent/encode.js +0 -15
  521. package/x/core/intent/encode.js.map +0 -1
  522. package/x/core/intent/merge.d.ts +0 -3
  523. package/x/core/intent/merge.js +0 -10
  524. package/x/core/intent/merge.js.map +0 -1
  525. package/x/core/parts/action.d.ts +0 -14
  526. package/x/core/parts/action.js +0 -30
  527. package/x/core/parts/action.js.map +0 -1
  528. package/x/core/parts/sample-map.d.ts +0 -6
  529. package/x/core/parts/sample-map.js +0 -21
  530. package/x/core/parts/sample-map.js.map +0 -1
  531. package/x/core/resolvers/actions.d.ts +0 -2
  532. package/x/core/resolvers/actions.js +0 -23
  533. package/x/core/resolvers/actions.js.map +0 -1
  534. package/x/core/resolvers/intents.d.ts +0 -2
  535. package/x/core/resolvers/intents.js +0 -89
  536. package/x/core/resolvers/intents.js.map +0 -1
  537. package/x/core/types.d.ts +0 -43
  538. package/x/core/types.js +0 -2
  539. package/x/core/types.js.map +0 -1
  540. package/x/deck/controller.d.ts +0 -11
  541. package/x/deck/controller.js +0 -28
  542. package/x/deck/controller.js.map +0 -1
  543. package/x/deck/deck.d.ts +0 -31
  544. package/x/deck/deck.js +0 -68
  545. package/x/deck/deck.js.map +0 -1
  546. package/x/deck/parts/profiles.d.ts +0 -12
  547. package/x/deck/parts/profiles.js +0 -31
  548. package/x/deck/parts/profiles.js.map +0 -1
  549. package/x/deck/parts/runtime.d.ts +0 -8
  550. package/x/deck/parts/runtime.js +0 -7
  551. package/x/deck/parts/runtime.js.map +0 -1
  552. package/x/deck/parts/settings.d.ts +0 -11
  553. package/x/deck/parts/settings.js +0 -26
  554. package/x/deck/parts/settings.js.map +0 -1
  555. package/x/deck/port.d.ts +0 -10
  556. package/x/deck/port.js +0 -24
  557. package/x/deck/port.js.map +0 -1
  558. package/x/deck/types.d.ts +0 -11
  559. package/x/deck/types.js.map +0 -1
  560. package/x/demo/demo-app/element.d.ts +0 -3
  561. package/x/demo/demo-app/element.js +0 -13
  562. package/x/demo/demo-app/element.js.map +0 -1
  563. package/x/demo/demo-app/style.css.js +0 -9
  564. package/x/demo/demo-app/style.css.js.map +0 -1
  565. package/x/device/devices.d.ts +0 -7
  566. package/x/device/devices.js +0 -17
  567. package/x/device/devices.js.map +0 -1
  568. package/x/device/gamepad.d.ts +0 -9
  569. package/x/device/gamepad.js +0 -37
  570. package/x/device/gamepad.js.map +0 -1
  571. package/x/device/keyboard.d.ts +0 -6
  572. package/x/device/keyboard.js +0 -30
  573. package/x/device/keyboard.js.map +0 -1
  574. package/x/device/pad/on-pad.js.map +0 -1
  575. package/x/device/pad/pad.js.map +0 -1
  576. package/x/device/pointer.d.ts +0 -12
  577. package/x/device/pointer.js +0 -73
  578. package/x/device/pointer.js.map +0 -1
  579. package/x/device/sampler.d.ts +0 -9
  580. package/x/device/sampler.js +0 -19
  581. package/x/device/sampler.js.map +0 -1
  582. package/x/device/stick.d.ts +0 -14
  583. package/x/device/stick.js +0 -22
  584. package/x/device/stick.js.map +0 -1
  585. package/x/index-ui.d.ts +0 -1
  586. package/x/index-ui.js +0 -2
  587. package/x/index-ui.js.map +0 -1
  588. package/x/index.d.ts +0 -27
  589. package/x/index.js +0 -28
  590. package/x/index.js.map +0 -1
  591. package/x/test.d.ts +0 -9
  592. package/x/test.js +0 -307
  593. package/x/test.js.map +0 -1
  594. package/x/ui/views/desk/style.css.js +0 -69
  595. package/x/ui/views/desk/style.css.js.map +0 -1
  596. package/x/ui/views/desk/view.d.ts +0 -7
  597. package/x/ui/views/desk/view.js +0 -102
  598. package/x/ui/views/desk/view.js.map +0 -1
  599. package/x/utils/circular-clamp.d.ts +0 -2
  600. package/x/utils/circular-clamp.js +0 -8
  601. package/x/utils/circular-clamp.js.map +0 -1
  602. package/x/utils/do-async.d.ts +0 -1
  603. package/x/utils/do-async.js +0 -4
  604. package/x/utils/do-async.js.map +0 -1
  605. package/x/utils/evergreen.js.map +0 -1
  606. package/x/utils/freeze-clone.d.ts +0 -1
  607. package/x/utils/freeze-clone.js +0 -5
  608. package/x/utils/freeze-clone.js.map +0 -1
  609. package/x/utils/identifier.d.ts +0 -6
  610. package/x/utils/identifier.js +0 -25
  611. package/x/utils/identifier.js.map +0 -1
  612. package/x/utils/insert.d.ts +0 -1
  613. package/x/utils/insert.js +0 -5
  614. package/x/utils/insert.js.map +0 -1
  615. package/x/utils/is-down.js.map +0 -1
  616. package/x/utils/make-id.js.map +0 -1
  617. package/x/utils/remap.d.ts +0 -1
  618. package/x/utils/remap.js +0 -6
  619. package/x/utils/remap.js.map +0 -1
  620. package/x/utils/shift-limit.d.ts +0 -2
  621. package/x/utils/shift-limit.js +0 -7
  622. package/x/utils/shift-limit.js.map +0 -1
  623. package/x/utils/sort-by-key.d.ts +0 -1
  624. package/x/utils/sort-by-key.js +0 -6
  625. package/x/utils/sort-by-key.js.map +0 -1
  626. package/x/utils/split-axis.js.map +0 -1
  627. package/x/utils/tmax.d.ts +0 -1
  628. package/x/utils/tmax.js +0 -6
  629. package/x/utils/tmax.js.map +0 -1
  630. package/x/utils/tmin.d.ts +0 -1
  631. package/x/utils/tmin.js +0 -6
  632. package/x/utils/tmin.js.map +0 -1
  633. /package/s/{_archive → lib/input}/utils/evergreen.ts +0 -0
  634. /package/s/{utils → lib/input/utils}/is-down.ts +0 -0
  635. /package/s/{device → lib/input/utils}/pad/on-pad.ts +0 -0
  636. /package/s/{device → lib/input/utils}/pad/pad.ts +0 -0
  637. /package/s/{_archive → lib/input}/utils/split-axis.ts +0 -0
  638. /package/s/{utils → lib/utils}/make-id.ts +0 -0
  639. /package/x/{core/atom → lib/input/data/intent}/types.js +0 -0
  640. /package/x/{deck → lib/input/data/parcel}/types.js +0 -0
  641. /package/x/{utils → lib/input/utils}/evergreen.d.ts +0 -0
  642. /package/x/{utils → lib/input/utils}/evergreen.js +0 -0
  643. /package/x/{utils → lib/input/utils}/is-down.d.ts +0 -0
  644. /package/x/{utils → lib/input/utils}/is-down.js +0 -0
  645. /package/x/{device → lib/input/utils}/pad/on-pad.d.ts +0 -0
  646. /package/x/{device → lib/input/utils}/pad/on-pad.js +0 -0
  647. /package/x/{device → lib/input/utils}/pad/pad.d.ts +0 -0
  648. /package/x/{device → lib/input/utils}/pad/pad.js +0 -0
  649. /package/x/{utils → lib/input/utils}/split-axis.d.ts +0 -0
  650. /package/x/{utils → lib/input/utils}/split-axis.js +0 -0
  651. /package/x/{demo/demo-app → lib/ui/views/controllers}/style.css.d.ts +0 -0
  652. /package/x/{ui/views/desk → lib/ui/views/customize}/style.css.d.ts +0 -0
  653. /package/x/{utils → lib/utils}/make-id.d.ts +0 -0
  654. /package/x/{utils → lib/utils}/make-id.js +0 -0
@@ -0,0 +1,113 @@
1
+ import { css } from "lit";
2
+ import { cssReset } from "@e280/sly";
3
+ export default css `
4
+ @layer theme, view;
5
+ @layer theme {
6
+
7
+ ${cssReset}
8
+
9
+ :host {
10
+ --prime: var(--tact-prime, #fb0);
11
+
12
+ --text: var(--tact-text, #fffc);
13
+ --bg: var(--tact-bg, oklch(from var(--prime) calc(l * 0.3) calc(c * 0.1) h));
14
+ --droppy: var(--tact-droppy, oklch(from var(--prime) l c calc(h + 100)));
15
+ --recording: var(--tact-recording, oklch(from var(--prime) l c calc(h + 100)));
16
+
17
+ --round: var(--tact-round, 0.5em);
18
+ --pad: var(--tact-pad, 0.5em);
19
+ --nib: var(--tact-nib, 0.2em);
20
+ --space: var(--tact-space, 1em);
21
+ --box-shadow: var(--tact-box-shadow, 0.1em 0.2em 1em #0006);
22
+ --text-shadow: var(--tact-text-shadow, 0.02em 0.04em 0.1em #000a);
23
+ }
24
+
25
+ [theme-card] {
26
+ --tint: var(--prime);
27
+ --slate: color-mix(in oklch,
28
+ transparent,
29
+ color-mix(in oklch, var(--bg), var(--tint) 25%) 25%
30
+ );
31
+ --shimmer: color-mix(in oklch, transparent, var(--tint));
32
+
33
+ border-radius: var(--round);
34
+ background: var(--slate);
35
+ border: 1px solid var(--shimmer);
36
+ box-shadow:
37
+ inset 0 0 3em color-mix(in oklch, transparent, var(--shimmer) 30%),
38
+ var(--box-shadow);
39
+
40
+ &[theme-card="dull"] {
41
+ --tint: #8888;
42
+ }
43
+ }
44
+
45
+ [theme-button] {
46
+ display: flex;
47
+ align-items: center;
48
+ justify-content: center;
49
+ font: inherit;
50
+ color: inherit;
51
+
52
+ cursor: pointer;
53
+ user-select: none;
54
+
55
+ opacity: 0.8;
56
+ gap: 0.5em;
57
+ padding: 0.5em;
58
+
59
+ &:is(:hover, :focus-visible) { opacity: 1; }
60
+ &:active { opacity: 0.8; }
61
+
62
+ svg {
63
+ width: 1.2em;
64
+ height: 1.2em;
65
+ }
66
+
67
+ &[theme-button~="naked"] {
68
+ padding: 0;
69
+ border: none;
70
+ background: transparent;
71
+ color: currentColor;
72
+ }
73
+
74
+ &[theme-button~="angry"] {
75
+ &:is(:hover, :focus-visible) { color: red; }
76
+ }
77
+ }
78
+
79
+ [theme-select] {
80
+ --base: var(--tint, var(--prime));
81
+ font: inherit;
82
+ color: inherit;
83
+ background: transparent;
84
+ border: 1px solid var(--base);
85
+ border-radius: var(--round);
86
+ padding: var(--nib) var(--pad);
87
+ box-shadow: inset 0 0 1em oklch(from var(--base) l c h / 40%);
88
+
89
+ &:is(:hover, :focus-visible) {
90
+ filter: brightness(110%);
91
+ box-shadow: inset 0 0 1em oklch(from var(--base) l c h / 60%);
92
+ }
93
+
94
+ &:active {
95
+ filter: brightness(90%);
96
+ box-shadow: inset 0 0 1em oklch(from var(--base) l c h / 40%);
97
+ }
98
+ }
99
+
100
+ [theme-input] {
101
+ --base: var(--tint, var(--prime));
102
+ --chill: oklch(from var(--base) l c h / 50%);
103
+ font: inherit;
104
+ color: inherit;
105
+ background: transparent;
106
+ border: 1px solid var(--chill);
107
+ border-radius: var(--round);
108
+ padding: 0 var(--nib);
109
+ box-shadow: inset 0 0 1em oklch(from var(--chill) l c h / 20%);
110
+ }
111
+
112
+ }`;
113
+ //# sourceMappingURL=theme.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.css.js","sourceRoot":"","sources":["../../../../s/lib/ui/views/theme.css.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAA;AACvB,OAAO,EAAC,QAAQ,EAAC,MAAM,WAAW,CAAA;AAElC,eAAe,GAAG,CAAA;;;;EAIhB,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyGR,CAAA"}
@@ -0,0 +1,2 @@
1
+ declare const _default: import("lit").CSSResult;
2
+ export default _default;
@@ -0,0 +1,22 @@
1
+ import { css } from "lit";
2
+ export default css `@layer view {
3
+
4
+ :host {
5
+ display: block;
6
+ }
7
+
8
+ output {
9
+ opacity: 0.5;
10
+ color: var(--prime);
11
+ font-size: 1em;
12
+ font-family: monospace;
13
+ display: block;
14
+ overflow-wrap: anywhere;
15
+ text-overflow: ellipsis;
16
+ height: 8em;
17
+ padding: 0 4em;
18
+ overflow: hidden;
19
+ }
20
+
21
+ }`;
22
+ //# sourceMappingURL=style.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.css.js","sourceRoot":"","sources":["../../../../../s/lib/ui/views/visualizer/style.css.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAA;AACvB,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;EAmBhB,CAAA"}
@@ -0,0 +1,2 @@
1
+ import { Visualizer } from "./visualizer.js";
2
+ export declare const VisualizerView: import("@e280/sly").ShadowView<[visualizer: Visualizer]>, makeVisualizerElement: (visualizer: Visualizer) => new () => HTMLElement;
@@ -0,0 +1,11 @@
1
+ import { html } from "lit";
2
+ import { shadowDuplex, useCss } from "@e280/sly";
3
+ import styleCss from "./style.css.js";
4
+ import themeCss from "../theme.css.js";
5
+ export const [VisualizerView, makeVisualizerElement] = shadowDuplex((visualizer) => {
6
+ useCss(themeCss, styleCss);
7
+ return html `
8
+ <output class=viz>${visualizer.$hex()}</output>
9
+ `;
10
+ });
11
+ //# sourceMappingURL=view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../../../../s/lib/ui/views/visualizer/view.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAC,YAAY,EAAE,MAAM,EAAC,MAAM,WAAW,CAAA;AAE9C,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AACrC,OAAO,QAAQ,MAAM,iBAAiB,CAAA;AAGtC,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,qBAAqB,CAAC,GAAG,YAAY,CAAC,CAAC,UAAsB,EAAE,EAAE;IAC9F,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAE1B,OAAO,IAAI,CAAA;sBACU,UAAU,CAAC,IAAI,EAAE;EACrC,CAAA;AACF,CAAC,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ export declare class Visualizer {
2
+ $hex: import("@e280/strata").Signal<string>;
3
+ clear: import("@e280/stz").DebounceReturn<() => void>;
4
+ update(data: ArrayBuffer): void;
5
+ }
@@ -0,0 +1,13 @@
1
+ import { signal } from "@e280/strata";
2
+ import { debounce, hex } from "@e280/stz";
3
+ export class Visualizer {
4
+ $hex = signal("");
5
+ clear = debounce(250, () => {
6
+ this.$hex.set("");
7
+ });
8
+ update(data) {
9
+ this.$hex(hex(new Uint8Array(data)));
10
+ this.clear();
11
+ }
12
+ }
13
+ //# sourceMappingURL=visualizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visualizer.js","sourceRoot":"","sources":["../../../../../s/lib/ui/views/visualizer/visualizer.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAA;AACnC,OAAO,EAAC,QAAQ,EAAE,GAAG,EAAC,MAAM,WAAW,CAAA;AAEvC,MAAM,OAAO,UAAU;IACtB,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAA;IAEjB,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;QAC1B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAClB,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,IAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACpC,IAAI,CAAC,KAAK,EAAE,CAAA;IACb,CAAC;CACD"}
@@ -0,0 +1 @@
1
+ export declare function ellipsis(s: string, max: number): string;
@@ -0,0 +1,6 @@
1
+ export function ellipsis(s, max) {
2
+ return s.length > max
3
+ ? s.slice(0, max) + "..."
4
+ : s;
5
+ }
6
+ //# sourceMappingURL=ellipsis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ellipsis.js","sourceRoot":"","sources":["../../../s/lib/utils/ellipsis.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,QAAQ,CAAC,CAAS,EAAE,GAAW;IAC9C,OAAO,CAAC,CAAC,MAAM,GAAG,GAAG;QACpB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK;QACzB,CAAC,CAAC,CAAC,CAAA;AACL,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function hueify(n: number): number;
@@ -0,0 +1,4 @@
1
+ export function hueify(n) {
2
+ return n * 137.508;
3
+ }
4
+ //# sourceMappingURL=hueify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hueify.js","sourceRoot":"","sources":["../../../s/lib/utils/hueify.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,MAAM,CAAC,CAAS;IAC/B,OAAO,CAAC,GAAG,OAAO,CAAA;AACnB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-id.js","sourceRoot":"","sources":["../../../s/lib/utils/make-id.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,WAAW,CAAA;AAE7B,MAAM,UAAU,MAAM;IACrB,OAAO,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AACtB,CAAC"}
@@ -1,435 +0,0 @@
1
-
2
- # 🎮 @benev/tact
3
- > *web game input library, from keypress to couch co-op*
4
-
5
- ```ts
6
- npm install @benev/tact
7
- ```
8
-
9
- tact is a toolkit for handling user inputs on the web.
10
- it's good at user-customizable keybindings, multiple gamepad support, and mobile ui.
11
-
12
- - 🛹 **[#deck](#deck)** full setup with localstorage persistence
13
- - 🎮 **[#devices](#devices)** produce user input samples
14
- - 🧩 **[#bindings](#bindings)** describe how actions interpret samples
15
- - 🔌 **[#port](#port)** updates actions by interpreting samples
16
- - 🛞 **[#hub](#hub)** plugs devices into ports (multi-gamepad couch co-op!)
17
- - 📱 **[#nubs](#nubs)** is mobile ui virtual gamepad stuff
18
-
19
-
20
- <br/><br/>
21
- <a id="deck"></a>
22
-
23
- ## 🍋 tact deck
24
- > *full setup with ui, batteries included*
25
-
26
- the deck ties together all the important pieces of tact into a single user experience, complete with ui views.
27
-
28
- tact's ui is built with [`@e280/sly` shadow views](https://github.com/e280/sly).
29
-
30
- ### 🛹 deck setup
31
- - **import stuff from tact**
32
- ```ts
33
- import * as tact from "@benev/tact"
34
- ```
35
- - **setup your deck, and your game's bindings**
36
- ```ts
37
- const deck = await tact.Deck.load({
38
-
39
- // how many player ports are possible? 1 is fine..
40
- portCount: 4,
41
-
42
- // where to store the user-customized bindings
43
- kv: tact.localStorageKv(),
44
-
45
- // default archetypal bindings for your game
46
- bindings: {
47
- walking: {forward: "KeyW", jump: "Space"},
48
- gunning: {
49
- shoot: ["or", "pointer.button.left", "gamepad.trigger.right"],
50
- },
51
- },
52
- })
53
- ```
54
-
55
- ### 🛹 plug devices into the hub
56
- - **plug a keyboard/mouse player into the hub**
57
- ```ts
58
- deck.hub.plug(new tact.PrimaryDevice())
59
- ```
60
- - **automatically detect and plug gamepads**
61
- ```ts
62
- tact.autoGamepads(deck.hub.plug)
63
- ```
64
-
65
- ### 🛹 do your gameplay
66
- - **poll the deck, interrogate actions**
67
- ```ts
68
- myGameLoop(() => {
69
-
70
- // do your polling
71
- const [p1, p2, p3, p4] = deck.hub.poll()
72
-
73
- // check if the first player is pressing "forward" action
74
- p1.actions.walking.forward.pressed // true
75
-
76
- // check how hard the second player is pulling that trigger
77
- p2.actions.gunning.shoot.value // 0.123
78
- })
79
- ```
80
-
81
- ### 🛹 deck ui: the overlay
82
- - **render the deck overlay with sly**
83
- ```ts
84
- import {dom} from "@e280/sly"
85
-
86
- dom.render(
87
- dom("#game-ui"),
88
- tact.DeckOverlay(deck),
89
- )
90
- ```
91
- - **place the ui on top of your game canvas**
92
- ```html
93
- <div id="game-ui"></div>
94
- ```
95
-
96
-
97
-
98
- <br/><br/>
99
- <a id="devices"></a>
100
-
101
- ## 🍋 tact devices
102
- > *sources of user input "samples"*
103
-
104
- ### 🎮 polling is good, actually
105
- - tact operates on the basis of *polling*
106
- - *"but polling is bad"* says you — but no — you're wrong — polling is unironically *based,* and you *should* do it
107
- - the gift of polling is total control over *when* inputs are processed, this is good for games
108
- - i will elaborate no further 🗿
109
-
110
- ### 🎮 basically how a device works
111
- - make a device
112
- ```ts
113
- const keyboard = new tact.KeyboardDevice()
114
- ```
115
- - reading samples looks like this
116
- ```ts
117
- for (const sample of keyboard.samples())
118
- console.log(sample) // ["KeyA", 1]
119
- ```
120
- - some devices have disposers to call when you're done with them
121
- ```ts
122
- keyboard.dispose()
123
- ```
124
-
125
- ### 🎮 samples explained
126
- - a sample is a raw input tuple of type `[code: string, value: number]`
127
- - a sample has a `code` string
128
- - it's either a [standard keycode](https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_code_values), like `KeyA`
129
- - or it's something we made up, like `pointer.button.left` or `gamepad.trigger.right`
130
- - a sample has a `value` number
131
- - `0` means *"nothing is going on"*
132
- - `1` means *"pressed"*
133
- - we don't like negative numbers
134
- - values between `0` and `1`, like `0.123`, are how triggers and thumbsticks express themselves
135
- - sometimes we use numbers greater then `1`, like for dots of pointer movement like in `pointer.move.up`
136
- - don't worry about sensitivity, deadzones, values like `0.00001` — actions will account for all that using bindings later on
137
-
138
- ### 🎮 sample code reference
139
- - **KeyboardDevice**
140
- - any [standard keycode](https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_code_values)
141
- - `KeyA`
142
- - `Space`
143
- - `Digit2`
144
- - etc
145
- - **PointerDevice**
146
- - mouse buttons
147
- - `pointer.button.left`
148
- - `pointer.button.right`
149
- - `pointer.button.middle`
150
- - `pointer.button.4`
151
- - `pointer.button.5`
152
- - mouse wheel
153
- - `pointer.wheel.up`
154
- - `pointer.wheel.down`
155
- - `pointer.wheel.left`
156
- - `pointer.wheel.right`
157
- - mouse movements
158
- - `pointer.move.up`
159
- - `pointer.move.down`
160
- - `pointer.move.left`
161
- - `pointer.move.right`
162
- - **GamepadDevice**
163
- - gamepad buttons
164
- - `gamepad.a`
165
- - `gamepad.b`
166
- - `gamepad.x`
167
- - `gamepad.y`
168
- - `gamepad.bumper.left`
169
- - `gamepad.bumper.right`
170
- - `gamepad.trigger.left`
171
- - `gamepad.trigger.right`
172
- - `gamepad.alpha`
173
- - `gamepad.beta`
174
- - `gamepad.stick.left.click`
175
- - `gamepad.stick.right.click`
176
- - `gamepad.up`
177
- - `gamepad.down`
178
- - `gamepad.left`
179
- - `gamepad.right`
180
- - `gamepad.gamma`
181
- - gamepad sticks
182
- - `gamepad.stick.left.up`
183
- - `gamepad.stick.left.down`
184
- - `gamepad.stick.left.left`
185
- - `gamepad.stick.left.right`
186
- - `gamepad.stick.right.up`
187
- - `gamepad.stick.right.down`
188
- - `gamepad.stick.right.left`
189
- - `gamepad.stick.right.right`
190
-
191
-
192
-
193
- <br/><br/>
194
- <a id="bindings"></a>
195
-
196
- ## 🍋 tact bindings
197
- > *keybindings! they describe how actions interpret samples*
198
-
199
- ### 🧩 bindings example
200
- - **let's start with a small example:**
201
- ```ts
202
- const bindings = tact.asBindings({
203
- walking: {forward: "KeyW", jump: "Space"},
204
- gunning: {
205
- shoot: ["or", "pointer.button.left", "gamepad.trigger.right"],
206
- },
207
- })
208
- ```
209
- - `walking` and `gunning` are **modes**
210
- - `forward`, `jump`, and `shoot` are **actions**
211
- - note that whole modes can be enabled or disabled during gameplay
212
-
213
- ### 🧩 bindings are a lispy domain-specific-language
214
- - **you can do complex stuff**
215
- ```ts
216
- ["or",
217
- "KeyQ",
218
- ["and",
219
- "KeyA",
220
- "KeyD",
221
- ["not", "KeyS"],
222
- ],
223
- ]
224
- ```
225
- - press Q, or
226
- - press A + D, while not pressing S
227
- - **you can get really weird**
228
- ```ts
229
- ["cond",
230
- ["code", "gamepad.trigger.right", {range: [0, 0.5], timing: ["tap"]}],
231
- ["and", "gamepad.bumper.left", ["not", "gamepad.trigger.left"]],
232
- ]
233
- ```
234
- - hold LB and tap RT halfway while not holding LT
235
-
236
- ### 🧩 bindings atom reference
237
- - **string** — strings are interpreted as "code" atoms with default settings
238
- - **"code"** — allows you to customize the settings
239
- ```ts
240
- ["code", "KeyA", {
241
- scale: 1,
242
- invert: false,
243
- timing: ["direct"],
244
- }]
245
- ```
246
- - defaults shown
247
- - `scale` is sensitivity, the value gets multiplied by this
248
- - `invert` will invert a value by subtracting it from 1
249
- - `clamp` clamps the value with a lower and upper bound
250
- - `range` restricts value to the given range, and remaps that range 0 to 1
251
- - `bottom` zeroes the value if it's less than the given bottom value
252
- - `top` clamps the value to an upper bound
253
- - `timing` lets you specify special timing considerations
254
- - `["direct"]` ignores timing considerations
255
- - `["tap", 250]` only fires for taps under 250ms
256
- - `["hold", 250]` only fires for holds over 250ms
257
- - **"or"** — resolves to the maximum value
258
- ```ts
259
- ["or", "KeyA", "KeyB", "KeyC"]
260
- ```
261
- - **"and"** — resolves to the minimum value
262
- ```ts
263
- ["and", "KeyA", "KeyB", "KeyC"]
264
- ```
265
- - **"not"** — resolves to the opposite effect
266
- ```ts
267
- ["not", "KeyA"]
268
- ```
269
- - **"cond"** — conditional situation (example for modifiers shown)
270
- ```ts
271
- ["cond", "KeyA", ["and",
272
- ["or", "ControlLeft", "ControlRight"],
273
- ["not", ["or", "AltLeft", "AltRight"]],
274
- ["not", ["or", "MetaLeft", "MetaRight"]],
275
- ["not", ["or", "ShiftLeft", "ShiftRight"]],
276
- ]]
277
- ```
278
- - KeyA is the value that gets used
279
- - but only if the following condition passes
280
- - **"mods"** — macro for modifiers
281
- ```ts
282
- ["mods", "KeyA", {ctrl: true}]
283
- ```
284
- - equivalent to the "cond" example above
285
- - `ctrl`, `alt`, `meta`, `shift` are available
286
-
287
-
288
-
289
- <br/><br/>
290
- <a id="port"></a>
291
-
292
- ## 🍋 tact port
293
- > *polling gives you "actions"*
294
-
295
- a port represents a single playable port, and you poll it each frame to resolve actions for you to read.
296
-
297
- ### 🔌 port setup
298
- - **make a port**
299
- ```ts
300
- const port = new tact.Port(bindings)
301
- ```
302
- - **attach some devices to the port**
303
- ```ts
304
- port.devices
305
- .add(new tact.KeyboardDevice())
306
- .add(new tact.PointerDevice())
307
- .add(new tact.VpadDevice())
308
- ```
309
- - you can add/delete devices from the set any time
310
- - **manipulate modes**
311
- ```ts
312
- port.modes.clear()
313
- port.modes.add("walking")
314
- ```
315
- - actions only happen for enabled modes
316
- - you can toggle modes on and off by adding/deleting them from the modes set
317
- - **you can update the bindings any time**
318
- ```ts
319
- port.bindings = freshBindings
320
- ```
321
- - **wire up gamepad auto connect/disconnect**
322
- ```ts
323
- tact.autoGamepads(device => {
324
- port.devices.add(device)
325
- return () => port.devices.delete(device)
326
- })
327
- ```
328
-
329
- ### 🔌 interrogating actions
330
- - **poll the port every frame**
331
- ```ts
332
- port.resolve()
333
- ```
334
- - **now you can inspect the `actions`**
335
- ```ts
336
- port.actions.walking.forward.value // 1
337
- ```
338
- - `walking` is a `mode`
339
- - `forward` is an `action`
340
- - `action.value` — current value
341
- - `action.previous` — last frame's value
342
- - `action.changed` — true if value and previous are different
343
- - `action.pressed` — true if the value > 0
344
- - `action.down` — true for one frame when the key goes from up to down
345
- - `action.up` — true for one frame when the key goes from down to up
346
-
347
-
348
-
349
- <br/><br/>
350
- <a id="hub"></a>
351
-
352
- ## 🍋 tact hub
353
- > *multiple gamepads! couch co-op is so back*
354
-
355
- you know the way old-timey game consoles had four controller ports on the front?
356
-
357
- the hub embraces that analogy, helping you coordinate the plugging and unplugging of virtual controller devices into its virtual ports.
358
-
359
- ### 🛞 create a hub with ports
360
- - **make hub with multiple ports at the ready**
361
- ```ts
362
- const hub = new tact.Hub([
363
- new tact.Port(bindings),
364
- new tact.Port(bindings),
365
- new tact.Port(bindings),
366
- new tact.Port(bindings),
367
- ])
368
- ```
369
- - yes that's right — each player port gets its own bindings 🤯
370
-
371
- ### 🛞 plug in some devices
372
- - **let's plug in the keyboard/mouse player**
373
- ```ts
374
- hub.plug(new tact.PrimaryDevice())
375
- ```
376
- - the hub requires a single device to represent a player, so you can use a `GroupDevice` to combine multple devices into one
377
- - **wire up gamepad auto connect/disconnect**
378
- ```ts
379
- tact.autoGamepads(hub.plug)
380
- ```
381
-
382
- ### 🛞 now we're gaming
383
- - **do your polling, interrogate those actions**
384
- ```ts
385
- const [p1, p2, p3, p4] = hub.poll()
386
-
387
- p1.actions.walking.jump.value // 1
388
- p2.actions.walking.jump.value // 0
389
- ```
390
-
391
-
392
-
393
- <br/><br/>
394
- <a id="nubs"></a>
395
-
396
- ## 🍋 tact nubs
397
- > *mobile ui like virtual thumbsticks and buttons*
398
-
399
- ### 📱 nubs setup
400
- - **render nub views with sly**
401
- ```ts
402
- import {dom} from "@e280/sly"
403
-
404
- const stick = new tact.StickDevice()
405
-
406
- dom.render(
407
- dom("#controls"),
408
- tact.NubStick(stick),
409
- )
410
- ```
411
-
412
- ### 📱 nub stick
413
- - **place a mount point onto your page**
414
- ```html
415
- <div id="controls"></div>
416
- ```
417
- - **make the stick device yourself, then plug it into your hub or whatever**
418
- ```ts
419
- const stick = new tact.StickDevice()
420
-
421
- dom.render(
422
- dom("#controls"),
423
- tact.NubStick(stick),
424
- )
425
-
426
- deck.hub.plug(stick)
427
- ```
428
-
429
-
430
-
431
- <br/><br/>
432
- <a id="benev"></a>
433
-
434
- ## 🍋 tact is by https://benevolent.games/
435
- > *building the future of web games*
@@ -1,30 +0,0 @@
1
-
2
- import {sub} from "@e280/stz"
3
- import {isPressed} from "./parts/is-pressed.js"
4
-
5
- export class Action {
6
- on = sub<[Action]>()
7
- onDown = sub<[Action]>()
8
-
9
- #value = 0
10
- #previous = 0
11
-
12
- get value() {
13
- return this.#value
14
- }
15
-
16
- set value(v: number) {
17
- this.#previous = this.#value
18
- this.#value = v
19
-
20
- this.on.publish(this)
21
- if (this.down) this.onDown.publish(this)
22
- }
23
-
24
- get previous() { return this.#previous }
25
- get changed() { return this.#value !== this.#previous }
26
- get pressed() { return isPressed(this.#value) }
27
- get down() { return !isPressed(this.#previous) && isPressed(this.#value) }
28
- get up() { return isPressed(this.#previous) && !isPressed(this.#value) }
29
- }
30
-