@the-inclusionist/engine 9.0.0 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (532) hide show
  1. package/README.md +120 -78
  2. package/app/css/style.css +761 -377
  3. package/app/public/vendor/fonts/playwrite-cu.woff2 +0 -0
  4. package/app/public/vendor/fonts/playwrite-es-deco.woff2 +0 -0
  5. package/app/public/vendor/fonts/playwrite-es.woff2 +0 -0
  6. package/app/public/vendor/fonts/playwrite-gb-j.woff2 +0 -0
  7. package/app/public/vendor/fonts/playwrite-gb-s.woff2 +0 -0
  8. package/app/public/vendor/fonts/playwrite-pe.woff2 +0 -0
  9. package/app/public/vendor/fonts/playwrite-pt.woff2 +0 -0
  10. package/app/public/vendor/fonts-licences/NOTICE.txt +166 -0
  11. package/app/public/vendor/fonts-licences/OFL-1.1.txt +86 -0
  12. package/app/public/vendor/fonts.css +36 -84
  13. package/dist-pkg/boot/create-game.d.ts +499 -219
  14. package/dist-pkg/boot/create-game.js +3944 -562
  15. package/dist-pkg/core/a11y-sr.d.ts +25 -3
  16. package/dist-pkg/core/a11y-sr.js +38 -19
  17. package/dist-pkg/core/accessible-label.d.ts +17 -0
  18. package/dist-pkg/core/accessible-label.js +37 -0
  19. package/dist-pkg/core/accommodation-subjects.d.ts +26 -0
  20. package/dist-pkg/core/accommodation-subjects.js +32 -0
  21. package/dist-pkg/core/accommodations.d.ts +125 -0
  22. package/dist-pkg/core/accommodations.js +195 -0
  23. package/dist-pkg/core/actions.d.ts +108 -55
  24. package/dist-pkg/core/actions.js +122 -71
  25. package/dist-pkg/core/calm-mode.d.ts +31 -0
  26. package/dist-pkg/core/calm-mode.js +47 -0
  27. package/dist-pkg/core/camera-cycle.d.ts +15 -0
  28. package/dist-pkg/core/camera-cycle.js +7 -0
  29. package/dist-pkg/core/caption-duration.d.ts +15 -0
  30. package/dist-pkg/core/caption-duration.js +19 -0
  31. package/dist-pkg/core/cartridge-problems.d.ts +34 -0
  32. package/dist-pkg/core/cartridge-problems.js +53 -0
  33. package/dist-pkg/core/constants.d.ts +0 -54
  34. package/dist-pkg/core/constants.js +9 -76
  35. package/dist-pkg/core/contract.d.ts +142 -164
  36. package/dist-pkg/core/contract.js +222 -208
  37. package/dist-pkg/core/dom-query.d.ts +4 -4
  38. package/dist-pkg/core/dom-query.js +12 -20
  39. package/dist-pkg/core/entity.d.ts +62 -77
  40. package/dist-pkg/core/entity.js +18 -32
  41. package/dist-pkg/core/escape-html.d.ts +9 -10
  42. package/dist-pkg/core/escape-html.js +16 -20
  43. package/dist-pkg/core/flash-threshold.d.ts +17 -0
  44. package/dist-pkg/core/flash-threshold.js +113 -0
  45. package/dist-pkg/core/game-speed.d.ts +11 -0
  46. package/dist-pkg/core/game-speed.js +16 -0
  47. package/dist-pkg/core/genres.d.ts +20 -0
  48. package/dist-pkg/core/genres.js +44 -0
  49. package/dist-pkg/core/i18n.d.ts +71 -60
  50. package/dist-pkg/core/i18n.js +186 -200
  51. package/dist-pkg/core/loop.d.ts +17 -6
  52. package/dist-pkg/core/loop.js +26 -26
  53. package/dist-pkg/core/pause-icon-catalogue.d.ts +15 -0
  54. package/dist-pkg/core/pause-icon-catalogue.js +54 -0
  55. package/dist-pkg/core/ring.d.ts +17 -0
  56. package/dist-pkg/core/ring.js +29 -0
  57. package/dist-pkg/core/rng.d.ts +7 -12
  58. package/dist-pkg/core/rng.js +23 -53
  59. package/dist-pkg/core/route.d.ts +26 -26
  60. package/dist-pkg/core/route.js +126 -121
  61. package/dist-pkg/core/scenes.d.ts +37 -40
  62. package/dist-pkg/core/scenes.js +41 -43
  63. package/dist-pkg/core/screens.d.ts +4 -4
  64. package/dist-pkg/core/screens.js +11 -16
  65. package/dist-pkg/core/session-clock.d.ts +23 -0
  66. package/dist-pkg/core/session-clock.js +37 -0
  67. package/dist-pkg/core/setting-defaults.d.ts +61 -0
  68. package/dist-pkg/core/setting-defaults.js +66 -0
  69. package/dist-pkg/core/speech-rate.d.ts +29 -0
  70. package/dist-pkg/core/speech-rate.js +47 -0
  71. package/dist-pkg/core/state.d.ts +118 -118
  72. package/dist-pkg/core/state.js +322 -297
  73. package/dist-pkg/core/visual-cycles.d.ts +30 -0
  74. package/dist-pkg/core/visual-cycles.js +52 -0
  75. package/dist-pkg/core/visual-state.d.ts +13 -0
  76. package/dist-pkg/core/visual-state.js +6 -0
  77. package/dist-pkg/educational/activities-registry.d.ts +1 -1
  78. package/dist-pkg/educational/activities-registry.js +9 -8
  79. package/dist-pkg/educational/adaptive-engine.d.ts +11 -11
  80. package/dist-pkg/educational/adaptive-engine.js +17 -17
  81. package/dist-pkg/educational/segment-bar.d.ts +12 -12
  82. package/dist-pkg/educational/segment-bar.js +9 -9
  83. package/dist-pkg/i18n/en.js +324 -223
  84. package/dist-pkg/i18n/es.js +323 -223
  85. package/dist-pkg/i18n/pt.js +348 -226
  86. package/dist-pkg/input/default-bindings.d.ts +37 -38
  87. package/dist-pkg/input/default-bindings.js +127 -144
  88. package/dist-pkg/input/devices.d.ts +7 -7
  89. package/dist-pkg/input/devices.js +17 -16
  90. package/dist-pkg/input/edges.d.ts +23 -32
  91. package/dist-pkg/input/edges.js +23 -28
  92. package/dist-pkg/input/empathy-filter.d.ts +22 -0
  93. package/dist-pkg/input/empathy-filter.js +34 -0
  94. package/dist-pkg/input/face-map.d.ts +96 -0
  95. package/dist-pkg/input/face-map.js +255 -0
  96. package/dist-pkg/input/face-signals.d.ts +40 -0
  97. package/dist-pkg/input/face-signals.js +48 -0
  98. package/dist-pkg/input/gamepad.d.ts +195 -145
  99. package/dist-pkg/input/gamepad.js +383 -556
  100. package/dist-pkg/input/gaze-cycle.d.ts +64 -0
  101. package/dist-pkg/input/gaze-cycle.js +133 -0
  102. package/dist-pkg/input/gaze-relative.d.ts +68 -0
  103. package/dist-pkg/input/gaze-relative.js +142 -0
  104. package/dist-pkg/input/hand-map.d.ts +28 -0
  105. package/dist-pkg/input/hand-map.js +142 -0
  106. package/dist-pkg/input/input-cooldown.d.ts +17 -0
  107. package/dist-pkg/input/input-cooldown.js +39 -0
  108. package/dist-pkg/input/key-default.d.ts +30 -0
  109. package/dist-pkg/input/key-default.js +60 -0
  110. package/dist-pkg/input/keyboard-runtime.d.ts +15 -21
  111. package/dist-pkg/input/keyboard-runtime.js +23 -27
  112. package/dist-pkg/input/keyboard.d.ts +68 -63
  113. package/dist-pkg/input/keyboard.js +83 -105
  114. package/dist-pkg/input/keydown.d.ts +123 -137
  115. package/dist-pkg/input/keydown.js +284 -289
  116. package/dist-pkg/input/latch-edge.d.ts +33 -21
  117. package/dist-pkg/input/latch-edge.js +34 -35
  118. package/dist-pkg/input/latch-scope.d.ts +51 -50
  119. package/dist-pkg/input/latch-scope.js +61 -82
  120. package/dist-pkg/input/latch-store.d.ts +26 -30
  121. package/dist-pkg/input/latch-store.js +42 -50
  122. package/dist-pkg/input/latch-sync.d.ts +29 -29
  123. package/dist-pkg/input/latch-sync.js +25 -25
  124. package/dist-pkg/input/latch.d.ts +14 -17
  125. package/dist-pkg/input/latch.js +29 -37
  126. package/dist-pkg/input/pad-defaults.d.ts +13 -16
  127. package/dist-pkg/input/pad-defaults.js +21 -28
  128. package/dist-pkg/input/pad-reading.d.ts +76 -0
  129. package/dist-pkg/input/pad-reading.js +169 -0
  130. package/dist-pkg/input/pad-wizard.d.ts +99 -0
  131. package/dist-pkg/input/pad-wizard.js +256 -0
  132. package/dist-pkg/input/pointer-space.d.ts +19 -20
  133. package/dist-pkg/input/pointer-space.js +27 -32
  134. package/dist-pkg/input/pointer.d.ts +39 -40
  135. package/dist-pkg/input/pointer.js +42 -45
  136. package/dist-pkg/input/state.d.ts +101 -89
  137. package/dist-pkg/input/state.js +54 -134
  138. package/dist-pkg/input/switch-scan.d.ts +59 -0
  139. package/dist-pkg/input/switch-scan.js +67 -0
  140. package/dist-pkg/input/synthetic-source.d.ts +42 -0
  141. package/dist-pkg/input/synthetic-source.js +57 -0
  142. package/dist-pkg/input/touch-bindings.d.ts +127 -116
  143. package/dist-pkg/input/touch-bindings.js +158 -173
  144. package/dist-pkg/input/touch.d.ts +147 -72
  145. package/dist-pkg/input/touch.js +362 -126
  146. package/dist-pkg/input/transport-in-use.d.ts +107 -0
  147. package/dist-pkg/input/transport-in-use.js +130 -0
  148. package/dist-pkg/input/transports.d.ts +90 -117
  149. package/dist-pkg/input/transports.js +104 -106
  150. package/dist-pkg/input/virtual-controller.d.ts +82 -0
  151. package/dist-pkg/input/virtual-controller.js +69 -0
  152. package/dist-pkg/input/vocabulary-migration.d.ts +50 -49
  153. package/dist-pkg/input/vocabulary-migration.js +80 -79
  154. package/dist-pkg/input/voice-map.d.ts +59 -0
  155. package/dist-pkg/input/voice-map.js +123 -0
  156. package/dist-pkg/platform/audio-ambient.d.ts +13 -2
  157. package/dist-pkg/platform/audio-ambient.js +14 -14
  158. package/dist-pkg/platform/audio-earcons.d.ts +20 -19
  159. package/dist-pkg/platform/audio-earcons.js +51 -42
  160. package/dist-pkg/platform/audio-jingles.js +9 -10
  161. package/dist-pkg/platform/audio-mixer.d.ts +14 -2
  162. package/dist-pkg/platform/audio-mixer.js +31 -39
  163. package/dist-pkg/platform/audio-sonar.d.ts +49 -152
  164. package/dist-pkg/platform/audio-sonar.js +124 -302
  165. package/dist-pkg/platform/audio.d.ts +62 -19
  166. package/dist-pkg/platform/audio.js +193 -168
  167. package/dist-pkg/platform/choose-by-voice.d.ts +70 -0
  168. package/dist-pkg/platform/choose-by-voice.js +157 -0
  169. package/dist-pkg/platform/flash-sampler.d.ts +19 -0
  170. package/dist-pkg/platform/flash-sampler.js +79 -0
  171. package/dist-pkg/platform/font-library.d.ts +77 -0
  172. package/dist-pkg/platform/font-library.js +98 -0
  173. package/dist-pkg/platform/font-library.json +721 -0
  174. package/dist-pkg/platform/heavy-catalogue.d.ts +77 -0
  175. package/dist-pkg/platform/heavy-catalogue.js +256 -0
  176. package/dist-pkg/platform/heavy-mirror.d.ts +20 -0
  177. package/dist-pkg/platform/heavy-mirror.js +73 -0
  178. package/dist-pkg/platform/heavy.d.ts +136 -0
  179. package/dist-pkg/platform/heavy.js +324 -0
  180. package/dist-pkg/platform/interruptible-speech.d.ts +23 -16
  181. package/dist-pkg/platform/interruptible-speech.js +77 -54
  182. package/dist-pkg/platform/kokoro-port.d.ts +27 -0
  183. package/dist-pkg/platform/kokoro-port.js +50 -0
  184. package/dist-pkg/platform/kokoro-runtime.d.ts +20 -0
  185. package/dist-pkg/platform/kokoro-runtime.js +52 -0
  186. package/dist-pkg/platform/kokoro.d.ts +70 -0
  187. package/dist-pkg/platform/kokoro.js +133 -0
  188. package/dist-pkg/platform/listener-scope.d.ts +12 -0
  189. package/dist-pkg/platform/listener-scope.js +90 -0
  190. package/dist-pkg/platform/locale-host.d.ts +14 -0
  191. package/dist-pkg/platform/locale-host.js +45 -0
  192. package/dist-pkg/platform/microphone.d.ts +51 -0
  193. package/dist-pkg/platform/microphone.js +118 -0
  194. package/dist-pkg/platform/onnx-runtime.d.ts +34 -0
  195. package/dist-pkg/platform/onnx-runtime.js +42 -0
  196. package/dist-pkg/platform/reading-in-worker.d.ts +64 -0
  197. package/dist-pkg/platform/reading-in-worker.js +125 -0
  198. package/dist-pkg/platform/reading-model.d.ts +94 -0
  199. package/dist-pkg/platform/reading-model.js +272 -0
  200. package/dist-pkg/platform/reading-runtime.d.ts +24 -0
  201. package/dist-pkg/platform/reading-runtime.js +164 -0
  202. package/dist-pkg/platform/reading-worker.d.ts +41 -0
  203. package/dist-pkg/platform/reading-worker.js +58 -0
  204. package/dist-pkg/platform/reading.d.ts +80 -0
  205. package/dist-pkg/platform/reading.js +136 -0
  206. package/dist-pkg/platform/speech-recognition.d.ts +60 -0
  207. package/dist-pkg/platform/speech-recognition.js +104 -0
  208. package/dist-pkg/platform/speech.d.ts +23 -1
  209. package/dist-pkg/platform/speech.js +29 -18
  210. package/dist-pkg/platform/storage-keys.d.ts +96 -0
  211. package/dist-pkg/platform/storage-keys.js +106 -0
  212. package/dist-pkg/platform/storage.d.ts +46 -111
  213. package/dist-pkg/platform/storage.js +104 -169
  214. package/dist-pkg/platform/tts.d.ts +85 -39
  215. package/dist-pkg/platform/tts.js +447 -127
  216. package/dist-pkg/platform/vision-loop.d.ts +23 -0
  217. package/dist-pkg/platform/vision-loop.js +56 -0
  218. package/dist-pkg/platform/vision.d.ts +132 -0
  219. package/dist-pkg/platform/vision.js +117 -0
  220. package/dist-pkg/platform/voice-listener.d.ts +40 -0
  221. package/dist-pkg/platform/voice-listener.js +88 -0
  222. package/dist-pkg/platform/voice-plan.d.ts +15 -98
  223. package/dist-pkg/platform/voice-plan.js +56 -143
  224. package/dist-pkg/platform/vosk-runtime.d.ts +96 -0
  225. package/dist-pkg/platform/vosk-runtime.js +151 -0
  226. package/dist-pkg/platform/vosk-vocabulary.d.ts +6 -0
  227. package/dist-pkg/platform/vosk-vocabulary.js +178 -0
  228. package/dist-pkg/render/canvas.d.ts +13 -7
  229. package/dist-pkg/render/canvas.js +13 -13
  230. package/dist-pkg/render/crt.d.ts +48 -12
  231. package/dist-pkg/render/crt.js +78 -80
  232. package/dist-pkg/render/cvd-matrices.d.ts +22 -18
  233. package/dist-pkg/render/cvd-matrices.js +37 -38
  234. package/dist-pkg/render/hc-role-data.d.ts +7 -7
  235. package/dist-pkg/render/hc-role-data.js +14 -14
  236. package/dist-pkg/render/high-contrast.d.ts +67 -56
  237. package/dist-pkg/render/high-contrast.js +226 -217
  238. package/dist-pkg/render/low-vision-drawing.d.ts +5 -0
  239. package/dist-pkg/render/low-vision-drawing.js +46 -0
  240. package/dist-pkg/render/lq-filter.d.ts +32 -20
  241. package/dist-pkg/render/lq-filter.js +59 -65
  242. package/dist-pkg/render/port.d.ts +86 -88
  243. package/dist-pkg/render/port.js +17 -23
  244. package/dist-pkg/render/screen-pipeline.d.ts +42 -42
  245. package/dist-pkg/render/screen-pipeline.js +80 -87
  246. package/dist-pkg/render/sprite-fx.d.ts +2 -1
  247. package/dist-pkg/render/sprite-fx.js +16 -14
  248. package/dist-pkg/render/viewports.d.ts +20 -15
  249. package/dist-pkg/render/viewports.js +83 -114
  250. package/dist-pkg/render/viz-axes-labels.d.ts +47 -0
  251. package/dist-pkg/render/viz-axes-labels.js +88 -0
  252. package/dist-pkg/render/viz-axes.d.ts +89 -86
  253. package/dist-pkg/render/viz-axes.js +128 -116
  254. package/dist-pkg/render/viz-modes.d.ts +28 -29
  255. package/dist-pkg/render/viz-modes.js +40 -45
  256. package/dist-pkg/render/viz-refusal.d.ts +32 -0
  257. package/dist-pkg/render/viz-refusal.js +57 -0
  258. package/dist-pkg/render/viz-setters.d.ts +104 -66
  259. package/dist-pkg/render/viz-setters.js +182 -191
  260. package/dist-pkg/ui/aac-sets.d.ts +45 -0
  261. package/dist-pkg/ui/aac-sets.js +41 -0
  262. package/dist-pkg/ui/audio-choices.d.ts +68 -0
  263. package/dist-pkg/ui/audio-choices.js +98 -0
  264. package/dist-pkg/ui/audio-rows-that-apply.d.ts +12 -0
  265. package/dist-pkg/ui/audio-rows-that-apply.js +43 -0
  266. package/dist-pkg/ui/camera-control.d.ts +53 -0
  267. package/dist-pkg/ui/camera-control.js +48 -0
  268. package/dist-pkg/ui/changed-mark.d.ts +9 -8
  269. package/dist-pkg/ui/changed-mark.js +22 -53
  270. package/dist-pkg/ui/control-choices.d.ts +37 -0
  271. package/dist-pkg/ui/control-choices.js +84 -0
  272. package/dist-pkg/ui/debug-panel.d.ts +59 -43
  273. package/dist-pkg/ui/debug-panel.js +68 -69
  274. package/dist-pkg/ui/declared-words.d.ts +21 -0
  275. package/dist-pkg/ui/declared-words.js +66 -0
  276. package/dist-pkg/ui/dom.d.ts +10 -14
  277. package/dist-pkg/ui/dom.js +10 -47
  278. package/dist-pkg/ui/drawing-problems.d.ts +25 -0
  279. package/dist-pkg/ui/drawing-problems.js +94 -0
  280. package/dist-pkg/ui/eye-control.d.ts +36 -0
  281. package/dist-pkg/ui/eye-control.js +178 -0
  282. package/dist-pkg/ui/face-control.d.ts +25 -0
  283. package/dist-pkg/ui/face-control.js +183 -0
  284. package/dist-pkg/ui/focus-trap.d.ts +39 -49
  285. package/dist-pkg/ui/focus-trap.js +56 -65
  286. package/dist-pkg/ui/fonts.d.ts +157 -68
  287. package/dist-pkg/ui/fonts.js +305 -115
  288. package/dist-pkg/ui/footer-scroll-driver.d.ts +14 -0
  289. package/dist-pkg/ui/footer-scroll-driver.js +201 -0
  290. package/dist-pkg/ui/footer-scroll.d.ts +38 -0
  291. package/dist-pkg/ui/footer-scroll.js +55 -0
  292. package/dist-pkg/ui/game-options.d.ts +47 -0
  293. package/dist-pkg/ui/game-options.js +158 -0
  294. package/dist-pkg/ui/gaze-overlay.d.ts +64 -0
  295. package/dist-pkg/ui/gaze-overlay.js +165 -0
  296. package/dist-pkg/ui/hand-control.d.ts +25 -0
  297. package/dist-pkg/ui/hand-control.js +143 -0
  298. package/dist-pkg/ui/help-panel.d.ts +87 -0
  299. package/dist-pkg/ui/help-panel.js +242 -0
  300. package/dist-pkg/ui/hud-bands.d.ts +62 -0
  301. package/dist-pkg/ui/hud-bands.js +146 -0
  302. package/dist-pkg/ui/hud-row.d.ts +34 -0
  303. package/dist-pkg/ui/hud-row.js +80 -0
  304. package/dist-pkg/ui/hud.d.ts +73 -73
  305. package/dist-pkg/ui/hud.js +94 -98
  306. package/dist-pkg/ui/item-announcement.d.ts +13 -12
  307. package/dist-pkg/ui/item-announcement.js +25 -26
  308. package/dist-pkg/ui/layout.d.ts +103 -28
  309. package/dist-pkg/ui/layout.js +117 -99
  310. package/dist-pkg/ui/libras-avatar-clip.d.ts +30 -0
  311. package/dist-pkg/ui/libras-avatar-clip.js +86 -0
  312. package/dist-pkg/ui/libras-avatar-load.d.ts +52 -0
  313. package/dist-pkg/ui/libras-avatar-load.js +134 -0
  314. package/dist-pkg/ui/libras-avatar-plan.d.ts +102 -0
  315. package/dist-pkg/ui/libras-avatar-plan.js +211 -0
  316. package/dist-pkg/ui/libras-avatar-player.d.ts +28 -0
  317. package/dist-pkg/ui/libras-avatar-player.js +226 -0
  318. package/dist-pkg/ui/libras-avatar-stage.d.ts +37 -0
  319. package/dist-pkg/ui/libras-avatar-stage.js +208 -0
  320. package/dist-pkg/ui/libras-glosses.d.ts +28 -0
  321. package/dist-pkg/ui/libras-glosses.js +161 -0
  322. package/dist-pkg/ui/locale-flags.d.ts +16 -0
  323. package/dist-pkg/ui/locale-flags.js +30 -0
  324. package/dist-pkg/ui/loop-crash.d.ts +17 -17
  325. package/dist-pkg/ui/loop-crash.js +33 -62
  326. package/dist-pkg/ui/menu-intent.d.ts +61 -0
  327. package/dist-pkg/ui/menu-intent.js +88 -0
  328. package/dist-pkg/ui/menu-items.d.ts +20 -0
  329. package/dist-pkg/ui/menu-items.js +51 -0
  330. package/dist-pkg/ui/menu-nav.d.ts +98 -92
  331. package/dist-pkg/ui/menu-nav.js +398 -286
  332. package/dist-pkg/ui/mobility-choices.d.ts +26 -0
  333. package/dist-pkg/ui/mobility-choices.js +41 -0
  334. package/dist-pkg/ui/motion-choices.d.ts +31 -0
  335. package/dist-pkg/ui/motion-choices.js +68 -0
  336. package/dist-pkg/ui/motion-scene.d.ts +24 -19
  337. package/dist-pkg/ui/motion-scene.js +29 -61
  338. package/dist-pkg/ui/mount-panel.d.ts +81 -0
  339. package/dist-pkg/ui/mount-panel.js +61 -0
  340. package/dist-pkg/ui/panel-shell.d.ts +65 -31
  341. package/dist-pkg/ui/panel-shell.js +92 -66
  342. package/dist-pkg/ui/panel-widgets.d.ts +150 -0
  343. package/dist-pkg/ui/panel-widgets.js +294 -0
  344. package/dist-pkg/ui/pause-buttons.d.ts +35 -0
  345. package/dist-pkg/ui/pause-buttons.js +66 -0
  346. package/dist-pkg/ui/pause-icons.d.ts +261 -347
  347. package/dist-pkg/ui/pause-icons.js +671 -601
  348. package/dist-pkg/ui/pause-markup.d.ts +86 -0
  349. package/dist-pkg/ui/pause-markup.js +125 -0
  350. package/dist-pkg/ui/reach-notice.d.ts +22 -23
  351. package/dist-pkg/ui/reach-notice.js +55 -58
  352. package/dist-pkg/ui/scan-overlay.d.ts +23 -0
  353. package/dist-pkg/ui/scan-overlay.js +50 -0
  354. package/dist-pkg/ui/screen-text.d.ts +25 -0
  355. package/dist-pkg/ui/screen-text.js +152 -0
  356. package/dist-pkg/ui/session-clock.d.ts +32 -0
  357. package/dist-pkg/ui/session-clock.js +67 -0
  358. package/dist-pkg/ui/settings-aac.d.ts +70 -0
  359. package/dist-pkg/ui/settings-aac.js +208 -0
  360. package/dist-pkg/ui/settings-audio.d.ts +97 -114
  361. package/dist-pkg/ui/settings-audio.js +493 -425
  362. package/dist-pkg/ui/settings-controls.d.ts +53 -96
  363. package/dist-pkg/ui/settings-controls.js +143 -215
  364. package/dist-pkg/ui/settings-empathy.d.ts +39 -30
  365. package/dist-pkg/ui/settings-empathy.js +53 -60
  366. package/dist-pkg/ui/settings-mobility.d.ts +192 -0
  367. package/dist-pkg/ui/settings-mobility.js +332 -0
  368. package/dist-pkg/ui/settings-motion.d.ts +91 -70
  369. package/dist-pkg/ui/settings-motion.js +287 -198
  370. package/dist-pkg/ui/settings-panel.d.ts +58 -45
  371. package/dist-pkg/ui/settings-panel.js +189 -94
  372. package/dist-pkg/ui/settings-typo.d.ts +29 -78
  373. package/dist-pkg/ui/settings-typo.js +158 -129
  374. package/dist-pkg/ui/settings-visual.d.ts +29 -87
  375. package/dist-pkg/ui/settings-visual.js +240 -193
  376. package/dist-pkg/ui/shell.d.ts +112 -135
  377. package/dist-pkg/ui/shell.js +148 -217
  378. package/dist-pkg/ui/simulation-list.d.ts +27 -0
  379. package/dist-pkg/ui/simulation-list.js +76 -0
  380. package/dist-pkg/ui/simulation-over-the-world.d.ts +23 -0
  381. package/dist-pkg/ui/simulation-over-the-world.js +131 -0
  382. package/dist-pkg/ui/simulation-refusal.d.ts +5 -31
  383. package/dist-pkg/ui/simulation-refusal.js +8 -56
  384. package/dist-pkg/ui/switchable-control.d.ts +11 -0
  385. package/dist-pkg/ui/switchable-control.js +19 -0
  386. package/dist-pkg/ui/title.d.ts +3 -12
  387. package/dist-pkg/ui/title.js +49 -18
  388. package/dist-pkg/ui/top-band.d.ts +26 -0
  389. package/dist-pkg/ui/top-band.js +96 -0
  390. package/dist-pkg/ui/typo-choices.d.ts +71 -0
  391. package/dist-pkg/ui/typo-choices.js +85 -0
  392. package/dist-pkg/ui/visual-axes-panel.d.ts +11 -47
  393. package/dist-pkg/ui/visual-axes-panel.js +12 -94
  394. package/dist-pkg/ui/visual-choices.d.ts +77 -0
  395. package/dist-pkg/ui/visual-choices.js +107 -0
  396. package/dist-pkg/ui/vlibras.d.ts +77 -10
  397. package/dist-pkg/ui/vlibras.js +130 -81
  398. package/dist-pkg/ui/voice-control.d.ts +68 -0
  399. package/dist-pkg/ui/voice-control.js +276 -0
  400. package/dist-pkg/ui/voice-settings.d.ts +95 -0
  401. package/dist-pkg/ui/voice-settings.js +352 -0
  402. package/dist-pkg/ui/where-the-child-is.d.ts +31 -0
  403. package/dist-pkg/ui/where-the-child-is.js +70 -0
  404. package/docs/CREDITS.md +300 -44
  405. package/docs/LICENSES.md +189 -145
  406. package/package.json +51 -27
  407. package/scripts/check-cartridge.mjs +78 -0
  408. package/scripts/game-build.d.mts +25 -0
  409. package/scripts/game-build.mjs +144 -0
  410. package/scripts/heavy-into-the-delivery.mjs +388 -0
  411. package/scripts/libras-avatar.json +680 -0
  412. package/scripts/libras-avatar.mjs +246 -0
  413. package/scripts/libras-glosses/gloss.py +95 -0
  414. package/scripts/libras-glosses/pyproject.toml +32 -0
  415. package/scripts/libras-glosses/uv.lock +781 -0
  416. package/scripts/libras-glosses.mjs +351 -0
  417. package/scripts/licences/Apache-2.0.txt +176 -0
  418. package/scripts/licences/GPL-3.0.txt +674 -0
  419. package/scripts/licences/MIT.txt +17 -0
  420. package/scripts/licences/OFL-1.1.txt +86 -0
  421. package/scripts/licences/UFL-1.0.txt +96 -0
  422. package/scripts/licences/fonts.mjs +389 -0
  423. package/scripts/licences/third-party.mjs +301 -0
  424. package/scripts/licences/vosk-browser.NOTICE.txt +268 -0
  425. package/app/public/vendor/fonts/comicneue-400.woff2 +0 -0
  426. package/app/public/vendor/fonts/comicneue-700.woff2 +0 -0
  427. package/app/public/vendor/fonts/fondamento-400-ext.woff2 +0 -0
  428. package/app/public/vendor/fonts/fondamento-400.woff2 +0 -0
  429. package/app/public/vendor/fonts/inter-400.woff2 +0 -0
  430. package/app/public/vendor/fonts/inter-700.woff2 +0 -0
  431. package/app/public/vendor/fonts/lato-400.woff2 +0 -0
  432. package/app/public/vendor/fonts/lato-700.woff2 +0 -0
  433. package/app/public/vendor/fonts/literata-400.woff2 +0 -0
  434. package/app/public/vendor/fonts/literata-700.woff2 +0 -0
  435. package/app/public/vendor/fonts/newsreader-400.woff2 +0 -0
  436. package/app/public/vendor/fonts/newsreader-700.woff2 +0 -0
  437. package/app/public/vendor/fonts/opendyslexic-400.woff2 +0 -0
  438. package/app/public/vendor/fonts/opensans-400.woff2 +0 -0
  439. package/app/public/vendor/fonts/opensans-700.woff2 +0 -0
  440. package/app/public/vendor/fonts/pinyon-400.woff2 +0 -0
  441. package/app/public/vendor/fonts/pressstart-400.woff2 +0 -0
  442. package/app/public/vendor/fonts/quattro-400.woff2 +0 -0
  443. package/app/public/vendor/fonts/quattro-700.woff2 +0 -0
  444. package/app/public/vendor/fonts/sourcesans-400.woff2 +0 -0
  445. package/app/public/vendor/fonts/sourcesans-700.woff2 +0 -0
  446. package/app/public/vendor/fonts/sourceserif-400.woff2 +0 -0
  447. package/app/public/vendor/fonts/sourceserif-700.woff2 +0 -0
  448. package/app/public/vendor/fonts/ufmag-400.woff2 +0 -0
  449. package/dist-pkg/core/anel.d.ts +0 -17
  450. package/dist-pkg/core/anel.js +0 -31
  451. package/dist-pkg/core/collision.d.ts +0 -21
  452. package/dist-pkg/core/collision.js +0 -62
  453. package/dist-pkg/core/layers.d.ts +0 -63
  454. package/dist-pkg/core/layers.js +0 -95
  455. package/dist-pkg/core/letter-grid.d.ts +0 -55
  456. package/dist-pkg/core/letter-grid.js +0 -116
  457. package/dist-pkg/core/password.d.ts +0 -34
  458. package/dist-pkg/core/password.js +0 -205
  459. package/dist-pkg/core/rotulo-acessivel.d.ts +0 -17
  460. package/dist-pkg/core/rotulo-acessivel.js +0 -41
  461. package/dist-pkg/core/run-state.d.ts +0 -115
  462. package/dist-pkg/core/run-state.js +0 -40
  463. package/dist-pkg/core/tiles.d.ts +0 -12
  464. package/dist-pkg/core/tiles.js +0 -61
  465. package/dist-pkg/core/world.d.ts +0 -4
  466. package/dist-pkg/core/world.js +0 -58
  467. package/dist-pkg/input/origem-sintetica.d.ts +0 -44
  468. package/dist-pkg/input/origem-sintetica.js +0 -60
  469. package/dist-pkg/input/transporte-em-uso.d.ts +0 -101
  470. package/dist-pkg/input/transporte-em-uso.js +0 -130
  471. package/dist-pkg/platform/audio-nav.d.ts +0 -51
  472. package/dist-pkg/platform/audio-nav.js +0 -99
  473. package/dist-pkg/platform/guide-intensity.d.ts +0 -40
  474. package/dist-pkg/platform/guide-intensity.js +0 -73
  475. package/dist-pkg/platform/pesados-catalogo.d.ts +0 -14
  476. package/dist-pkg/platform/pesados-catalogo.js +0 -177
  477. package/dist-pkg/platform/pesados.d.ts +0 -31
  478. package/dist-pkg/platform/pesados.js +0 -75
  479. package/dist-pkg/platform/vozes-prontas.d.ts +0 -28
  480. package/dist-pkg/platform/vozes-prontas.js +0 -61
  481. package/dist-pkg/render/camera.d.ts +0 -58
  482. package/dist-pkg/render/camera.js +0 -105
  483. package/dist-pkg/render/cenario-data.d.ts +0 -127
  484. package/dist-pkg/render/cenario-data.js +0 -145
  485. package/dist-pkg/render/city-tex.d.ts +0 -63
  486. package/dist-pkg/render/city-tex.js +0 -228
  487. package/dist-pkg/render/city-tiles.d.ts +0 -11
  488. package/dist-pkg/render/city-tiles.js +0 -140
  489. package/dist-pkg/render/draw.d.ts +0 -149
  490. package/dist-pkg/render/draw.js +0 -231
  491. package/dist-pkg/render/fx.d.ts +0 -63
  492. package/dist-pkg/render/fx.js +0 -123
  493. package/dist-pkg/render/minimap.d.ts +0 -11
  494. package/dist-pkg/render/minimap.js +0 -94
  495. package/dist-pkg/render/parallax.d.ts +0 -85
  496. package/dist-pkg/render/parallax.js +0 -158
  497. package/dist-pkg/render/player-anim.d.ts +0 -71
  498. package/dist-pkg/render/player-anim.js +0 -152
  499. package/dist-pkg/render/recycling-tex.d.ts +0 -48
  500. package/dist-pkg/render/recycling-tex.js +0 -164
  501. package/dist-pkg/render/scene-city.d.ts +0 -77
  502. package/dist-pkg/render/scene-city.js +0 -181
  503. package/dist-pkg/render/scene-parallax.d.ts +0 -72
  504. package/dist-pkg/render/scene-parallax.js +0 -426
  505. package/dist-pkg/render/scene-sky.d.ts +0 -126
  506. package/dist-pkg/render/scene-sky.js +0 -295
  507. package/dist-pkg/render/set-cenario.d.ts +0 -54
  508. package/dist-pkg/render/set-cenario.js +0 -103
  509. package/dist-pkg/render/textures.d.ts +0 -75
  510. package/dist-pkg/render/textures.js +0 -240
  511. package/dist-pkg/render/title-scene.d.ts +0 -46
  512. package/dist-pkg/render/title-scene.js +0 -75
  513. package/dist-pkg/render/weather.d.ts +0 -96
  514. package/dist-pkg/render/weather.js +0 -171
  515. package/dist-pkg/render/wheelchair-sprites.d.ts +0 -32
  516. package/dist-pkg/render/wheelchair-sprites.js +0 -69
  517. package/dist-pkg/render/world-tex.d.ts +0 -18
  518. package/dist-pkg/render/world-tex.js +0 -87
  519. package/dist-pkg/ui/activities-menu.d.ts +0 -258
  520. package/dist-pkg/ui/activities-menu.js +0 -648
  521. package/dist-pkg/ui/caa-sets.d.ts +0 -39
  522. package/dist-pkg/ui/caa-sets.js +0 -65
  523. package/dist-pkg/ui/latch-refusal.d.ts +0 -32
  524. package/dist-pkg/ui/latch-refusal.js +0 -60
  525. package/dist-pkg/ui/map-hub.d.ts +0 -56
  526. package/dist-pkg/ui/map-hub.js +0 -138
  527. package/dist-pkg/ui/settings-caa.d.ts +0 -45
  528. package/dist-pkg/ui/settings-caa.js +0 -137
  529. package/dist-pkg/ui/settings-motor.d.ts +0 -175
  530. package/dist-pkg/ui/settings-motor.js +0 -342
  531. package/dist-pkg/ui/webcam.d.ts +0 -7
  532. package/dist-pkg/ui/webcam.js +0 -93
@@ -1,44 +1,40 @@
1
1
  // SPDX-License-Identifier: AGPL-3.0-or-later
2
+ import type { Translate } from '../core/i18n.js';
2
3
  import type { PlayerView } from '../core/entity.js';
3
4
  import { type EdgeFlag } from './edges.js';
4
- /** ui/dom.ts `$` — injetado; o módulo nunca alcança `document`. */
5
- export type { DomQuery } from '../core/dom-query.js';
6
- /** O que este módulo lê e faz com um `KeyboardEvent` de `keydown`. */
5
+ /** What this module reads and does with a `keydown` `KeyboardEvent`. */
7
6
  export interface KeydownEventLike {
8
7
  code: string;
9
8
  altKey: boolean;
10
9
  ctrlKey: boolean;
11
10
  preventDefault(): void;
12
11
  /**
13
- * O navegador viu a pessoa carregar? (ADR-0109) — OPCIONAL, e a opcionalidade é a decisão.
12
+ * Did the browser see the person press? (ADR-0109) — OPTIONAL, and the optionality is the decision.
14
13
  *
15
- * ⚠️ Torná-lo obrigatório partiria todos os duplos de teste que já existem, e partiria-os por uma razão
16
- * falsa: eles descrevem a decisão de teclado, que não depende disto. O que a ausência significa está
17
- * escrito no `input/origem-sintetica` — «não afirmei nada», cuja resposta é `undefined` e não `'teclado'`.
14
+ * ⚠️ Making it required would break every existing test double, for a false reason: they describe the keyboard
15
+ * decision, which does not depend on this. What the absence means is written in `input/synthetic-source` — "I
16
+ * asserted nothing", whose answer is `undefined` and not `'teclado'`.
18
17
  */
19
18
  isTrusted?: boolean;
20
19
  }
21
- /** `keyup` só precisa do código. */
20
+ /** `keyup` only needs the code. */
22
21
  export interface KeyupEventLike {
23
22
  code: string;
24
23
  }
25
- /** ação -> lista de códigos físicos. Cópia ESTRUTURAL do `KeyScheme` de input/keyboard-runtime.ts: a casa
26
- * prefere a cópia a puxar um alias de tipo através de camadas (ver o cabeçalho de keyboard-runtime). */
27
- export type { KeyScheme } from '../core/entity.js';
28
- /** As seis bordas de entrada que o keydown levanta no jogador (consumidas e zeradas pela física). */
24
+ /** The six input edges keydown raises on the player (consumed and cleared by the game's physics). */
29
25
  /**
30
- * O que este módulo lê (e escreve) de um jogador — e SÓ isso. DERIVADA de core/entity.
26
+ * What this module reads (and writes) of a player — and ONLY that. DERIVED from core/entity.
31
27
  *
32
- * · `i` — índice PRÓPRIO do jogador (`makePlayer(i)`). O original roteia por ele, não pela posição.
33
- * · `ctrl` — esquema de teclas; `null` antes do assignControls.
34
- * (`quiz` SAIU em 2026-08-25 — ADR-0033. O desafio aberto chega por `modalOpen` no snapshot, e o que a
35
- * tecla SIGNIFICA lá dentro é decisão do jogo. Ver o bloco "MODAL" abaixo.)
36
- * · `waiting` — tela em espera (multi-tela): a 1ª tecla DAQUELE jogador entra na partida.
37
- * · `easy` — modo Fácil (deficiência motora): sem correr, e ganha os atalhos Ctrl/Shift no solo.
28
+ * · `i` — the player's OWN index. Routing goes by it, not by the position in the array.
29
+ * · `ctrl` — the key scheme; `null` before assignControls.
30
+ * (There is no `quiz` — ADR-0033. The open challenge arrives through `modalOpen` in the snapshot, and what the key
31
+ * MEANS inside it is the game's decision. See the "MODAL" block below.)
32
+ * · `waiting` — a screen on standby (multi-screen): THAT player's 1st key joins the match.
33
+ * · `easy` — Easy mode (motor difficulty): no running, and the Ctrl/Shift shortcuts in solo.
38
34
  */
39
35
  export type KeydownPlayer = PlayerView<'i' | 'ctrl' | 'waiting' | 'easy' | 'jumpEdge' | 'runEdge' | 'leftEdge' | 'rightEdge' | 'swapEdge' | 'specialEdge'>;
40
- /** Subconjunto do `ControlsState` de input/keyboard-runtime.ts que a decisão consulta (`controls` não entra:
41
- * o original nunca o usa aqui, só os seis aliases e a lista achatada). */
36
+ /** The subset of input/keyboard-runtime.ts's `ControlsState` the decision consults (`controls` stays out: only the six
37
+ * aliases and the flattened list are used here). */
42
38
  export interface ControlsSnapshot {
43
39
  action2: string[];
44
40
  left: string[];
@@ -48,38 +44,36 @@ export interface ControlsSnapshot {
48
44
  action1: string[];
49
45
  gameKeys: string[];
50
46
  }
51
- /** A intenção de navegação do menu inicial. Era uma quarta cópia estrutural, sob outro nome; agora é o
52
- * `NavKeys` de input/edges, reexportado com o nome que os chamadores deste módulo já usam. */
47
+ /** The title menu's navigation intent — `NavKeys` from input/edges, under the local name this module reads by (it was a
48
+ * fourth structural copy under another name). */
53
49
  import type { NavKeys as TitleNav } from './edges.js';
54
- export type { NavKeys as TitleNav } from './edges.js';
55
- /** TUDO o que a decisão precisa saber do mundo, num objeto só, montado ANTES de qualquer efeito. */
50
+ /** EVERYTHING the decision needs to know about the world, in one object, built BEFORE any effect. */
56
51
  export interface KeydownSnapshot {
57
- /** A tela de título está no topo? (Só o Jogador 1 escolhe o jogo; os outros ouvem um aviso.) */
58
- telaDeTitulo: boolean;
59
- /** Há jogo em curso — rodando OU pausado? (Alt+N e a tecla de pausa exigem isto, e quiz fechado.) */
60
- emJogo: boolean;
52
+ /** Is the title screen on top? (Only Player 1 picks the game; the others hear a notice.) */
53
+ titleScreen: boolean;
54
+ /** Is a game in progress — running OR paused? (Alt+N and the pause key need this, and no modal open.) */
55
+ inGame: boolean;
61
56
  numPlayers: number;
62
57
  players: readonly KeydownPlayer[];
63
58
  /**
64
- * Há MODAL aberto para o jogador de cada POSIÇÃO? — a resposta, ao lado dos jogadores (ADR-0033).
59
+ * Is a MODAL open for the player at each POSITION? — the answer, beside the players (ADR-0033).
65
60
  *
66
- * Era `players[i].quiz`, e o custo nunca foi a leitura: `players` já chega por injeção. O custo era que
67
- * ler o campo obrigava `core/entity.Player` — a entidade canônica da ENGINE — a DECLARÁ-LO, e com isso
68
- * todo jogo do catálogo a ter um "quiz" com aquele formato.
61
+ * Not `players[i].quiz`: reading that field would force `core/entity.Player` — the ENGINE's canonical entity — to
62
+ * DECLARE it, and every game in the catalogue to have a "quiz" of that shape.
69
63
  *
70
- * Por que aqui e não em duas funções de ctx: este módulo já monta um snapshot antes de qualquer efeito, e
71
- * acrescentar ctx a quem já tem snapshot é peça a mais. Por que um array PARALELO e não um campo no
72
- * `KeydownPlayer`: aquele tipo é `PlayerView<>` derivado de `Player`, então o campo voltaria a ser exigido
73
- * na entidade — nome melhor, mesmo lugar errado. E por que não embrulhar os jogadores numa cópia: este
74
- * módulo ESCREVE neles (as seis bordas), e a cópia perderia a escrita.
64
+ * Why here and not two ctx functions: this module already builds a snapshot before any effect, and adding ctx to
65
+ * whoever has a snapshot is one more piece. Why a PARALLEL array and not a field on `KeydownPlayer`: that type is a
66
+ * `PlayerView<>` derived from `Player`, so the field would be required on the entity again — a better name, the same
67
+ * wrong place. And why not wrap the players in a copy: this module WRITES into them (the six edges), and a copy would
68
+ * lose the write.
75
69
  */
76
70
  modalOpen: readonly boolean[];
77
71
  controls: ControlsSnapshot;
78
- /** `keys` de input/state.ts: as teclas seguradas AGORA (inclui códigos injetados por toque/webcam). */
72
+ /** input/state.ts's `keys`: the keys held NOW (every transport's, mixed). */
79
73
  heldKeys: ReadonlySet<string>;
80
- /** empatia motora: um botão de jogo por vez. */
74
+ /** motor empathy: one game button at a time. */
81
75
  oneButton: boolean;
82
- /** `overlays.escapeTarget()` — id do 1º diálogo REGISTRADO que está aberto, ou null. */
76
+ /** `overlays.escapeTarget()` — the id of the 1st REGISTERED dialog that is open, or null. */
83
77
  escapeTargetId: string | null;
84
78
  touchCfgVisible: boolean;
85
79
  padWizVisible: boolean;
@@ -88,66 +82,66 @@ export interface KeydownSnapshot {
88
82
  whichPlayer(code: string): number;
89
83
  }
90
84
  export type ModalIntent = 'left' | 'right' | 'up' | 'down' | 'confirm' | 'erase';
91
- /** Uma borda a levantar: qual jogador (POSIÇÃO no array) e qual flag. */
85
+ /** An edge to raise: which player (POSITION in the array) and which flag. */
92
86
  export interface EdgeRaise {
93
87
  playerIndex: number;
94
88
  edge: EdgeFlag;
95
89
  }
96
90
  /**
97
- * A resposta única: o que esta tecla SIGNIFICA. `kind` é o ramo da ordem de precedência que venceu — e é essa
98
- * palavra, e não o efeito, que os testes de precedência afirmam.
91
+ * The single answer: what this key MEANS. `kind` is the precedence branch that won — and it is that word, not the
92
+ * effect, that the precedence tests assert.
99
93
  */
100
94
  export type KeydownDecision =
101
- /** 1º · diálogo REGISTRADO aberto: Escape fecha (`closeId`), qualquer outra tecla é engolida. */
95
+ /** 1st · a REGISTERED dialog open: Escape closes (`closeId`), any other key is swallowed. */
102
96
  {
103
97
  kind: 'overlay';
104
98
  closeId: string | null;
105
99
  preventDefault: boolean;
106
100
  }
107
- /** 2º · `#touchcfg` visível: Escape esconde, o resto é engolido. */
101
+ /** 2nd · `#touchcfg` visible: Escape hides, the rest is swallowed. */
108
102
  | {
109
103
  kind: 'touchcfg';
110
104
  close: boolean;
111
105
  preventDefault: boolean;
112
106
  }
113
- /** 3º · `#padwiz` (assistente de gamepad) visível: Escape CANCELA (`save:false`), o resto é engolido. */
107
+ /** 3rd · `#padwiz` (the pad wizard) visible: Escape CANCELS (`save:false`), the rest is swallowed. */
114
108
  | {
115
109
  kind: 'padwiz';
116
110
  close: boolean;
117
111
  preventDefault: boolean;
118
112
  }
119
- /** 4º · tela de vitória: pulo (de qualquer jogador) ou Escape/Enter apertam "Jogar de novo". */
113
+ /** 4th · win screen: jump (any player's) or Escape/Enter press "Play again". */
120
114
  | {
121
115
  kind: 'win';
122
116
  again: boolean;
123
117
  preventDefault: boolean;
124
118
  }
125
- /** 5º · tela de título: `wait` = multi-tela e a tecla é de outro jogador (só o J1 comanda). */
119
+ /** 5th · title screen: `wait` = multi-screen and the key is another player's (only P1 commands). */
126
120
  | {
127
121
  kind: 'title';
128
122
  wait: boolean;
129
123
  nav: TitleNav | null;
130
124
  preventDefault: boolean;
131
125
  }
132
- /** 6º · Alt+1..4 = número de telas. */
126
+ /** 6th · Alt+1..4 = number of screens. */
133
127
  | {
134
128
  kind: 'screens';
135
129
  count: number;
136
130
  preventDefault: boolean;
137
131
  }
138
- /** 7º · Escape/Enter = pausa. */
132
+ /** 7th · Escape/Enter = pause. */
139
133
  | {
140
134
  kind: 'pause';
141
135
  preventDefault: boolean;
142
136
  }
143
- /** 8º · modal aberto: a tecla age no modal do DONO dela (`playerIndex` = posição no array). */
137
+ /** 8th · a modal open: the key acts on its OWNER's modal (`playerIndex` = position in the array). */
144
138
  | {
145
139
  kind: 'modal';
146
140
  playerIndex: number;
147
141
  intent: ModalIntent | null;
148
142
  preventDefault: boolean;
149
143
  }
150
- /** 9º · jogo normal. */
144
+ /** 9th · normal play. */
151
145
  | {
152
146
  kind: 'play';
153
147
  gameKey: boolean;
@@ -156,153 +150,145 @@ export type KeydownDecision =
156
150
  releaseKeys: string[];
157
151
  preventDefault: boolean;
158
152
  };
159
- /** Fácil (SOLO): Ctrl = Especial, Shift = Trocar poder. Fora de Win/Alt/AltGr, de propósito. */
153
+ /** Easy (SOLO): Ctrl = Special, Shift = Swap power. Not Win/Alt/AltGr, on purpose. */
160
154
  export declare const EASY_SHORTCUTS: ReadonlySet<string>;
161
- /** Alt + fileira de números (NÃO o teclado numérico) = 1..4 telas. Alt fica livre: o solo não o usa. */
155
+ /** Alt + the digit row (NOT the numeric keypad) = 1..4 screens. Alt is free: solo does not use it. */
162
156
  export declare const SCREEN_DIGITS: RegExp;
163
- /** Pausa: Escape ou o Enter CENTRAL. `NumpadEnter` NÃO pausa (E14, verbatim). */
157
+ /** Pause: Escape or the MAIN Enter. `NumpadEnter` does NOT pause. */
164
158
  export declare const PAUSE_KEYS: ReadonlySet<string>;
165
- export { EDGE_BY_ACTION, edgeAllowed } from './edges.js';
166
- export type { EdgeFlag } from './edges.js';
167
- /** A tecla vale como PULO para alguém? O alias do J1 OU a ação `jump` de qualquer jogador (é o que faz
168
- * "qualquer um pode apertar Jogar de novo" e "qualquer um confirma no título" serem verdade). */
159
+ export { EDGE_BY_ACTION } from './edges.js';
160
+ /** Does the key count as JUMP for anybody? P1's alias OR any player's `action2` (it is what makes "anyone can press
161
+ * Play again" and "anyone confirms on the title" true). */
169
162
  export declare function isJumpKey(code: string, s: KeydownSnapshot): boolean;
170
- /** A tecla é de JOGO? Verbatim do `isGameKeyCode` do game.js — o alias achatado OU o esquema de algum
171
- * jogador. NÃO inclui os atalhos do Fácil (o original também não: por isso `easyKey` é somado à parte). */
163
+ /** Is the key a GAME key? The flattened alias OR some player's scheme. It does NOT include the Easy shortcuts: those
164
+ * are added apart (`isEasyShortcut`). */
172
165
  export declare function isGameKeyCode(code: string, s: KeydownSnapshot): boolean;
173
- /** Os atalhos de acessibilidade do Fácil só existem SOLO (`numPlayers<=1`) e só para o Jogador 1. */
166
+ /** Easy's accessibility shortcuts exist only in SOLO (`numPlayers<=1`) and only for Player 1. */
174
167
  export declare function isEasyShortcut(code: string, s: KeydownSnapshot): boolean;
175
168
  /**
176
- * A intenção no menu inicial. Repare na ASSIMETRIA, preservada verbatim: `up`/`down` aceitam ArrowUp/ArrowDown
177
- * ALÉM do alias configurado, `left`/`right` não aceitam ArrowLeft/ArrowRight. No esquema de fábrica isso não
178
- * aparece (o solo já tem as setas nos quatro lados); aparece para quem REMAPEIA — remapeou esquerda para KeyA
179
- * e a seta deixa de andar no menu, enquanto cima continua funcionando pelas duas. Está anotado como caso de
180
- * teste em tests/keydown.node.test.js, e é candidato a conserto, não a "limpeza" silenciosa.
169
+ * The title menu intent. Note the ASYMMETRY, kept as it is: `up`/`down` accept ArrowUp/ArrowDown ON TOP of the
170
+ * configured alias, `left`/`right` do not accept ArrowLeft/ArrowRight. It does not show in the factory scheme (solo
171
+ * already has the arrows on all four sides); it shows for whoever REMAPS — remap left to KeyA and the arrow stops moving
172
+ * in the menu, while up keeps working both ways. It is a test case in tests/keydown.node.test.js, and a candidate for a
173
+ * fix, not for a silent "cleanup".
181
174
  */
182
175
  export declare function titleNavOf(code: string, s: KeydownSnapshot, action2: boolean): TitleNav;
183
176
  import type { EventTargetLike } from './touch-bindings.js';
184
177
  import type { DomQuery } from '../core/dom-query.js';
185
- import type { Transporte } from './transporte-em-uso.js';
178
+ import type { TransportName } from './transport-in-use.js';
186
179
  export { hasNavIntent as hasTitleIntent } from './edges.js';
187
180
  /**
188
- * Quem é o dono do modal que esta tecla comanda? Devolve a POSIÇÃO no array, ou -1.
189
- * Regra verbatim: tecla de um jogador vai para o modal DAQUELE jogador (e só se ele tiver um aberto); tecla
190
- * genérica cai no Jogador 1. Tecla de um jogador SEM modal aberto não cai no P1 — ela desce para o jogo
191
- * normal, que é o que deixa a partida dele continuar enquanto o outro resolve o desafio.
181
+ * Who owns the modal this key commands? Returns the POSITION in the array, or -1.
182
+ * A player's key goes to THAT player's modal (and only if they have one open); a generic key falls to Player 1. A key of
183
+ * a player WITHOUT an open modal does not fall to P1 — it goes down to normal play, which is what lets their match go on
184
+ * while the other solves the challenge.
192
185
  */
193
186
  export declare function modalOwnerIndex(code: string, s: KeydownSnapshot): number;
194
- /**
195
- * Que INTENÇÃO esta tecla exprime dentro do modal do dono. `owner` é a posição no array; `generic` diz se a
196
- * tecla chegou sem dono (aí as seis leituras usam os aliases do J1 em vez da ação remapeada).
197
- *
198
- * As seis leituras são as mesmas de antes, letra por letra. O que saiu foi a linha seguinte: a que trocava
199
- * "cima" por `delta:-3` e "esquerda" por `delta:-1`, e o desvio de Braille. Isso é grade, e grade é do jogo.
200
- */
201
187
  export declare function modalIntentOf(code: string, s: KeydownSnapshot, owner: number, generic: boolean): ModalIntent | null;
202
188
  /**
203
- * As bordas que esta tecla levanta. Só é chamada quando a tecla AINDA NÃO está segurada — é isso que a torna
204
- * uma BORDA e não um estado, e é o que impede o auto-repeat do sistema de virar dez pulos.
205
- * `p.ctrl[act] || []`: o original alcançava `p.ctrl.jump` direto e estouraria num esquema sem a ação. Trocar
206
- * um TypeError por um no-op não remove rede de conserto nenhuma (o precedente é a guarda de `navPause` em
207
- * ui/menu-nav.ts) — é a única linha desta função que não é cópia literal.
189
+ * The edges this key raises. It is only called when the key is NOT YET held — that is what makes it an EDGE and not a
190
+ * state, and what keeps the system's auto-repeat from becoming ten jumps.
191
+ * `p.ctrl[act] || []`: a scheme without the action turns a TypeError into a no-op (the precedent is `navPause`'s guard
192
+ * in ui/menu-nav.ts) — a net that removes no chance of a fix.
208
193
  */
209
194
  export declare function edgesFor(code: string, s: KeydownSnapshot): EdgeRaise[];
210
- /**
211
- * A CADEIA. Nove perguntas, nesta ordem — e a ordem É a especificação.
212
- * O que NÃO está aqui, e vem antes no wrapper: a demo (attract) e a captura de remapeamento. Ver o cabeçalho.
213
- */
214
- export declare function decideKeydown(ev: {
195
+ /** The event as the chain reads it. */
196
+ type KeyEventFacts = {
215
197
  code: string;
216
198
  altKey?: boolean;
217
199
  ctrlKey?: boolean;
218
- }, s: KeydownSnapshot): KeydownDecision;
200
+ };
201
+ /**
202
+ * THE CHAIN. Nine questions, in this order — and the order IS the specification.
203
+ * What is NOT here, and comes first in the wrapper: the demo (attract) and the remapping capture. See the header.
204
+ */
205
+ export declare function decideKeydown(ev: KeyEventFacts, s: KeydownSnapshot): KeydownDecision;
219
206
  export interface KeydownCtx {
220
- /** game/attract.ts: zera a ociosidade e encerra a demo; `true` = a tecla foi só para acordar. */
207
+ /** Translates in the page's language — the root's translator (ADR-0232 D3). REQUIRED: text built from nowhere is a raw key. */
208
+ t: Translate;
209
+ /** The demo: resets idleness and ends the demo; `true` = the key was only to wake it up. */
221
210
  attractOnInput: () => boolean;
222
- /** ui/settings-controls.ts: remapeamento em curso — a próxima tecla VIRA o controle. */
211
+ /** ui/settings-controls.ts: a remap in progress — the next key BECOMES the control. */
223
212
  handleCaptureKeydown: (e: KeydownEventLike) => boolean;
224
- /** Os dois fatos da cena. Ver `KeydownSnapshot`: booleanos, nunca a fase. */
225
- isTelaDeTitulo: () => boolean;
226
- isEmJogo: () => boolean;
213
+ /** The scene's two facts. See `KeydownSnapshot`: booleans, never the phase. */
214
+ isTitleScreen: () => boolean;
215
+ isInGame: () => boolean;
227
216
  getNumPlayers: () => number;
228
217
  getPlayers: () => readonly KeydownPlayer[];
229
- /** `kbRuntime.controlsState()` — memorizado do lado de lá; uma chamada por tecla, como no original. */
218
+ /** The keyboard runtime's `controlsState()` — memoised over there; one call per key. */
230
219
  getControls: () => ControlsSnapshot;
231
220
  /**
232
- * O PAR DE `input/state`, E NÃO O CONJUNTO CRU (ADR-0109) — o mesmo corte que o `input/touch-bindings` fez.
221
+ * THE `input/state` DOORS, NOT THE RAW SET (ADR-0109) — the same cut `input/touch-bindings` made.
233
222
  *
234
- * ⚠️ `ReadonlySet` e não `Set`, e a diferença É a razão de o par existir: LER o conjunto nunca foi o
235
- * problema; ESCREVER nele apagava a origem. Com o tipo assim, uma escrita crua deixa de compilar — o crivo
236
- * do inventário passa a ter o compilador do lado dele, em vez de ser a única coisa a segurar a linha.
223
+ * ⚠️ `ReadonlySet` and not `Set`, and the difference IS why the doors exist: READING the set was never the problem;
224
+ * WRITING into it erased the source. With the type like this, a raw write stops compiling — the inventory gate has the
225
+ * compiler on its side instead of being the only thing holding the line.
237
226
  */
238
227
  readonly heldKeys: ReadonlySet<string>;
239
- /** Uma tecla foi segurada, e sabe-se por quem. */
240
- marcarTecla: (code: string, origem: Transporte) => void;
228
+ /** A key was held, and who pressed it is known. */
229
+ markKey: (code: string, origin: TransportName) => void;
241
230
  /**
242
- * Uma tecla foi segurada e NÃO se sabe por quem — o evento sintético que ninguém assinou.
231
+ * A key was held and who pressed it is NOT known — an event nobody signed, which every real key is.
243
232
  *
244
- * ⚠️ Está no ctx a par das outras duas de propósito: se fosse importada, um consumidor não teria como ver
245
- * que ela existe, e é justamente ele quem produz os eventos que caem aqui.
233
+ * ⚠️ It sits in the ctx beside the other two on purpose: imported, a consumer would have no way to see it exists, and
234
+ * the consumer is exactly who produces the events that land here.
246
235
  */
247
- marcarTeclaSemOrigem: (code: string) => void;
236
+ markKeyWithoutSource: (code: string) => void;
248
237
  /**
249
- * ESTA ARESTA É DESTE JOGADOR, E VEIO DAQUI (ADR-0113 cláusula 4, issue #127) — `input/state.arestaDoJogador`.
238
+ * THIS EDGE IS THIS PLAYER'S, AND IT CAME FROM HERE (ADR-0113 clause 4, issue #127) — `input/state.playerEdge`.
250
239
  *
251
- * 🔴 CAMPO OBRIGATÓRIO, e a medição é a razão: em 2026-09-09 o autómato do ADR-0109 tinha ZERO alimentadores
252
- * em produção, logo `entradaDe(i).emUso` respondia `teclado` a toda a gente — para sempre, e sem erro
253
- * nenhum. Com isso, a recusa da cláusula 3 nunca dispara: a criança que joga por webcam consegue desligar a
254
- * alternância de que a entrada dela depende, e nada o diz.
240
+ * 🔴 A REQUIRED FIELD: without a feeder, ADR-0109's automaton answers `teclado` for everyone through
241
+ * `inputOf(i).inUse` — forever, with no error. Then the latch is read and written under the keyboard's key for a child
242
+ * playing by webcam, and the game's default for her device (ADR-0249) never applies.
255
243
  *
256
- * ⚠️ E É AQUI QUE ELE VALE, e não no teclado que já é o padrão: o evento sintético que a webcam despacha
257
- * chega carimbado (`input/origem-sintetica`), então é por esta linha que `olhos`/`rosto`/`gestos`/`fala`
258
- * passam a ser o transporte em uso. Uma tecla premida a sério devolve o teclado, que é a regra 3 do ADR-0109.
244
+ * ⚠️ AND IT IS HERE THAT IT COUNTS, not on the keyboard, which is already the default: a stamped synthetic event
245
+ * (`input/synthetic-source`) is how `olhos`/`rosto`/`gestos`/`fala` become the transport in use through this module.
246
+ * A key really pressed brings back the keyboard, which is ADR-0109's rule 3.
259
247
  */
260
- arestaDoJogador: (jogador: number, origem: Transporte) => void;
261
- soltarTecla: (code: string) => void;
262
- /** `let oneButton` do game.js (empatia motora) → getter. */
248
+ playerEdge: (player: number, origin: TransportName) => void;
249
+ releaseKey: (code: string) => void;
250
+ /** Motor empathy's one-button mode → getter. */
263
251
  isOneButton: () => boolean;
264
252
  actionOf: (code: string, playerIndex: number) => string | null;
265
253
  whichPlayer: (code: string) => number;
266
254
  $: DomQuery;
267
- /** `overlays.escapeTarget()` de ui/settings-panel.ts. */
255
+ /** ui/settings-panel.ts's `overlays.escapeTarget()`. */
268
256
  escapeTarget: () => string | null;
269
- /** `overlays.closeById(id)` — o retorno é ignorado, verbatim. */
257
+ /** `overlays.closeById(id)` — its return value is ignored. */
270
258
  closeOverlayById: (id: string) => void;
271
- /** input/gamepad.ts. LAZY: `gamepadApi` é `const` declarado ~800 linhas abaixo do ponto de init. */
259
+ /** input/gamepad.ts's. LAZY: the pad api may be built after this module. */
272
260
  closePadWiz: (save: boolean) => void;
273
- /** input/touch.ts via o envelope içado do game.js. Sem motivo no título; `'teclado'` no jogo (E13). */
261
+ /** input/touch.ts's. No reason on the title; `'teclado'` in play. */
274
262
  hideTouchControls: (reason?: string) => void;
275
263
  srSay: (msg: string) => void;
276
264
  navTitle: (k: TitleNav) => void;
277
265
  activateScreens: (n: number) => void;
278
266
  togglePause: () => void;
279
267
  /**
280
- * A INTENÇÃO chega, e o JOGO decide o que ela significa (ADR-0033).
268
+ * The INTENT arrives, and the GAME decides what it means (ADR-0033).
281
269
  *
282
- * Eram quatro: `quizMove(pl, delta)`, `quizConfirm`, `quizErase` e `announceBraille` — e as quatro só
283
- * existiam porque a decisão de qual chamar morava aqui, com a grade de três colunas e o desvio de Braille.
284
- * Viraram uma. Um jogo com grade de quatro colunas, ou com lista vertical, responde diferente sem que este
285
- * módulo saiba que existe grade.
270
+ * One door and not four verbs (move, confirm, erase, announce Braille): with the verbs, which one to call was decided
271
+ * here, with a three-column grid and a Braille detour. A game with a four-column grid, or a vertical list, answers
272
+ * differently without this module knowing there is a grid.
286
273
  */
287
- /** O ÍNDICE do jogador, não o jogador (ADR-0033/0039). Ver a mesma nota em input/gamepad. */
274
+ /** The player's INDEX, not the player (ADR-0033/0039). See the same note in input/gamepad. */
288
275
  modalInput: (playerIndex: number, intent: ModalIntent) => void;
289
- /** O jogador da POSIÇÃO `i` tem um modal aberto? Uma pergunta, e não o objeto: ver `modalOpen` no snapshot. */
276
+ /** Does the player at POSITION `i` have a modal open? A question, and not the object: see `modalOpen` in the snapshot. */
290
277
  hasModal: (playerIndex: number) => boolean;
291
- /** ui/hud.ts: some com o selo "tela em espera" quando o jogador daquela tela entra. */
278
+ /** Removes the "screen on standby" badge when that screen's player joins. */
292
279
  clearWaitingBadge: (playerIndex: number) => void;
293
- /** `window` — só para `attach()` instalar os dois ouvintes de BOLHA, exatamente como o game.js fazia. */
294
- /** A escuta de teclado. Ver `EventTargetLike` em input/touch-bindings: genérica sobre `WindowEventMap`,
295
- * porque a versão com `fn: (e: never)` obrigava um cast aqui e um adaptador em cada consumidor. */
280
+ /** The keyboard listener. See `EventTargetLike` in input/touch-bindings: generic over `WindowEventMap`, because the
281
+ * `fn: (e: never)` version forced a cast here and an adapter in every consumer. */
296
282
  win: EventTargetLike;
297
283
  }
298
284
  export interface KeydownApi {
299
- /** O snapshot que a decisão consome. Exposto para o teste poder montá-lo e comparar. */
285
+ /** The snapshot the decision consumes. Exposed so the test can build and compare it. */
300
286
  snapshot: () => KeydownSnapshot;
301
- /** O ouvinte de bolha inteiro (sondas + decisão + efeito). Exportado à parte para o teste disparar sem DOM. */
287
+ /** The whole bubbling listener (probes + decision + effect). Exported apart so the test can fire it without DOM. */
302
288
  onKeydown: (e: KeydownEventLike) => void;
303
- /** A outra metade do `keys.add`. */
289
+ /** The other half of the hold. */
304
290
  onKeyup: (e: KeyupEventLike) => void;
305
- /** Instala os dois na janela, em BOLHA, na mesma ordem de antes. */
291
+ /** Installs both on the window, in BUBBLE. */
306
292
  attach: () => void;
307
293
  }
308
294
  export declare function initKeydown(ctx: KeydownCtx): KeydownApi;