@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,40 +1,39 @@
1
1
  // SPDX-License-Identifier: AGPL-3.0-or-later
2
- /** Retângulo do elemento (o que `getBoundingClientRect()` entrega, reduzido ao que a conta usa). */
2
+ /** The element's rectangle (what `getBoundingClientRect()` gives, reduced to what the sum uses). */
3
3
  export interface RectLike {
4
4
  left: number;
5
5
  top: number;
6
6
  width: number;
7
7
  height: number;
8
8
  }
9
- /** Um ponto em px, relativo ao CENTRO do elemento. É a forma que um direcional lê. */
10
- export interface DoCentro {
9
+ /** A point in px, relative to the element's CENTRE. The shape a directional pad reads. */
10
+ export interface FromCentre {
11
11
  dx: number;
12
12
  dy: number;
13
13
  }
14
- /** Um ponto em FRAÇÃO do elemento: `0,0` é o canto superior esquerdo e `1,1` o inferior direito. */
15
- export interface EmFracao {
14
+ /** A point as a FRACTION of the element: `0,0` is the top-left corner and `1,1` the bottom-right. */
15
+ export interface AsFraction {
16
16
  fx: number;
17
17
  fy: number;
18
18
  }
19
19
  /**
20
- * O ponto relativo ao CENTRO, em px do elemento.
20
+ * The point relative to the CENTRE, in element px.
21
21
  *
22
- * As três funções de direcional de `touch-bindings` abriam com estas mesmas duas linhas. Repetição de duas
23
- * linhas não costuma pagar uma extração — esta paga por outra razão: enquanto a conta do centro estava
24
- * escrita dentro de cada uma, não havia como um consumidor NOVO (um ponteiro, um olhar) obter o ponto sem
25
- * passar por uma função que já o transformou em direções.
22
+ * The touch pad's direction functions each opened with these same two lines. Two repeated lines rarely pay for an
23
+ * extraction — this pays for another reason: while the centre sum was written inside each one, a NEW consumer (a pointer,
24
+ * a gaze) had no way to get the point without going through a function that had already turned it into directions.
26
25
  */
27
- export declare function doCentro(px: number, py: number, rect: RectLike): DoCentro;
26
+ export declare function fromCentre(px: number, py: number, rect: RectLike): FromCentre;
28
27
  /**
29
- * O ponto como FRAÇÃO do elemento.
28
+ * The point as a FRACTION of the element.
30
29
  *
31
- * ⚠️ NÃO SATURA EM 0..1 de propósito. Um ponteiro capturado sai do elemento e continua a valer — é isso que
32
- * `setPointerCapture` existe para permitir, e saturar aqui apagaria a diferença entre «na borda» e «muito
33
- * para lá da borda», que é justamente o que um arrasto precisa de saber. Quem quiser saturar, satura; quem
34
- * saturasse aqui não teria como voltar atrás.
30
+ * ⚠️ IT DOES NOT SATURATE TO 0..1, on purpose. A captured pointer leaves the element and still counts — that is what
31
+ * `setPointerCapture` exists to allow — and saturating here would erase the difference between "at the edge" and "far
32
+ * past the edge", which is exactly what a drag needs to know. Whoever wants to saturate, saturates; whoever saturated here
33
+ * could not go back.
35
34
  *
36
- * ⚠️ E LARGURA ZERO DEVOLVE ZERO em vez de `Infinity`. Um elemento ainda não medido (display:none, primeiro
37
- * quadro) dá `width: 0`, e um `NaN`/`Infinity` a partir daqui viajaria para dentro da física antes de alguém
38
- * o ver. O `onGaze` já se protegia disso com um `if (!r.width) return`; a proteção passa a ser da conta.
35
+ * ⚠️ AND ZERO WIDTH RETURNS ZERO instead of `Infinity`. An element not measured yet (display:none, the first frame) gives
36
+ * `width: 0`, and a `NaN`/`Infinity` from here would travel into the physics before anyone saw it. The guard belongs to
37
+ * the sum, not to each caller.
39
38
  */
40
- export declare function emFracao(px: number, py: number, rect: RectLike): EmFracao;
39
+ export declare function asFraction(px: number, py: number, rect: RectLike): AsFraction;
@@ -1,49 +1,44 @@
1
1
  // SPDX-License-Identifier: AGPL-3.0-or-later
2
- // input/pointer-space.ts — O ÚNICO LUGAR QUE CONVERTE UM PONTO DE TELA. Módulo-folha: só aritmética.
2
+ // input/pointer-space.ts — THE ONE PLACE THAT CONVERTS A SCREEN POINT. A leaf module: arithmetic only.
3
3
  //
4
- // ========================= O QUE A MEDIÇÃO DA ISSUE #105 ENCONTROU =========================
5
- // A issue manda LER antes de escrever — *"estabeleça quanto de um ponteiro já existe dentro de
6
- // `input/touch.ts`; se a resposta for «quase tudo», isto vira uma extração e não um subsistema novo"*. A
7
- // resposta medida é mais interessante do que «quase tudo» ou «quase nada»:
4
+ // ========================= WHAT THE MEASUREMENT FOR ISSUE #105 FOUND =========================
5
+ // The issue asked to READ before writing — to establish how much of a pointer already existed inside the touch input, so
6
+ // that "almost all of it" would become an extraction and not a new subsystem. The measured answer was more interesting:
8
7
  //
9
- // · A CAPTURA já existe INTEIRA, em `touch-bindings.wirePointerPad`: `pointerdown`/`move`/`up`/`cancel`,
10
- // `setPointerCapture` com recuo gracioso, `lostpointercapture` como rede, `contextmenu` suprimido, e um
11
- // ponteiro de cada vez. Nada disso precisa de ser escrito outra vez.
12
- // · O PONTO, ao contrário, é RECEBIDO E DEITADO FORA — e em quatro lugares, com duas convenções:
13
- // `crossDirsAt`, `stickDirsAt` e `stickKnobOffset` reduzem-no a `dx,dy` do CENTRO e devolvem direções;
14
- // `ui/webcam.onGaze` reduz o olhar a uma FRAÇÃO do elemento e a três limiares, emitindo teclas.
8
+ // · The CAPTURE already existed WHOLE, in the touch pad's pointer wiring: `pointerdown`/`move`/`up`/`cancel`,
9
+ // `setPointerCapture` with a graceful fallback, `lostpointercapture` as a net, `contextmenu` suppressed, and one
10
+ // pointer at a time. None of it needs writing again.
11
+ // · The POINT, on the other hand, was RECEIVED AND THROWN AWAY — each direction reader reduced it to `dx,dy` from the
12
+ // CENTRE and returned directions.
15
13
  //
16
- // ⚠️ E É O MESMO DEFEITO NOS DOIS SÍTIOS: uma posição contínua chega, é comprimida em «esquerda/direita/cima»
17
- // antes de qualquer outro consumidor a ver, e não sobra nada para quem precisasse dela. O ponteiro não é
18
- // fundação nova — é a fundação que o OLHAR já precisava e nunca teve.
14
+ // ⚠️ A continuous position arrives and is squeezed into "left/right/up" before any other consumer sees it, and nothing is
15
+ // left for whoever needs it. The pointer is not a new foundation — it is the foundation gaze already needed and never had.
19
16
  //
20
- // ⚠️ E O QUE NÃO EXISTE EM LADO NENHUM: hover (posição sem aperto), botões (`PointerLike` não tem `button`),
21
- // roda (zero ocorrências) e — o que a `definition of done` da #105 pede em primeiro lugar — UM lugar que
22
- // converta tela→jogo. Este ficheiro é esse lugar; o resto continua aberto na issue.
17
+ // ⚠️ AND WHAT EXISTS NOWHERE: hover (position without a press), buttons, the wheel — and what #105's definition of done
18
+ // asks for first, ONE place that converts screen→game. This file is that place; the rest stays open in the issue.
23
19
  /**
24
- * O ponto relativo ao CENTRO, em px do elemento.
20
+ * The point relative to the CENTRE, in element px.
25
21
  *
26
- * As três funções de direcional de `touch-bindings` abriam com estas mesmas duas linhas. Repetição de duas
27
- * linhas não costuma pagar uma extração — esta paga por outra razão: enquanto a conta do centro estava
28
- * escrita dentro de cada uma, não havia como um consumidor NOVO (um ponteiro, um olhar) obter o ponto sem
29
- * passar por uma função que já o transformou em direções.
22
+ * The touch pad's direction functions each opened with these same two lines. Two repeated lines rarely pay for an
23
+ * extraction — this pays for another reason: while the centre sum was written inside each one, a NEW consumer (a pointer,
24
+ * a gaze) had no way to get the point without going through a function that had already turned it into directions.
30
25
  */
31
- export function doCentro(px, py, rect) {
26
+ export function fromCentre(px, py, rect) {
32
27
  return { dx: px - (rect.left + rect.width / 2), dy: py - (rect.top + rect.height / 2) };
33
28
  }
34
29
  /**
35
- * O ponto como FRAÇÃO do elemento.
30
+ * The point as a FRACTION of the element.
36
31
  *
37
- * ⚠️ NÃO SATURA EM 0..1 de propósito. Um ponteiro capturado sai do elemento e continua a valer — é isso que
38
- * `setPointerCapture` existe para permitir, e saturar aqui apagaria a diferença entre «na borda» e «muito
39
- * para lá da borda», que é justamente o que um arrasto precisa de saber. Quem quiser saturar, satura; quem
40
- * saturasse aqui não teria como voltar atrás.
32
+ * ⚠️ IT DOES NOT SATURATE TO 0..1, on purpose. A captured pointer leaves the element and still counts — that is what
33
+ * `setPointerCapture` exists to allow — and saturating here would erase the difference between "at the edge" and "far
34
+ * past the edge", which is exactly what a drag needs to know. Whoever wants to saturate, saturates; whoever saturated here
35
+ * could not go back.
41
36
  *
42
- * ⚠️ E LARGURA ZERO DEVOLVE ZERO em vez de `Infinity`. Um elemento ainda não medido (display:none, primeiro
43
- * quadro) dá `width: 0`, e um `NaN`/`Infinity` a partir daqui viajaria para dentro da física antes de alguém
44
- * o ver. O `onGaze` já se protegia disso com um `if (!r.width) return`; a proteção passa a ser da conta.
37
+ * ⚠️ AND ZERO WIDTH RETURNS ZERO instead of `Infinity`. An element not measured yet (display:none, the first frame) gives
38
+ * `width: 0`, and a `NaN`/`Infinity` from here would travel into the physics before anyone saw it. The guard belongs to
39
+ * the sum, not to each caller.
45
40
  */
46
- export function emFracao(px, py, rect) {
41
+ export function asFraction(px, py, rect) {
47
42
  return {
48
43
  fx: rect.width ? (px - rect.left) / rect.width : 0,
49
44
  fy: rect.height ? (py - rect.top) / rect.height : 0,
@@ -1,61 +1,60 @@
1
1
  // SPDX-License-Identifier: AGPL-3.0-or-later
2
- import type { Transporte } from './transporte-em-uso.js';
3
- import type { EmFracao } from './pointer-space.js';
2
+ import type { TransportName } from './transport-in-use.js';
3
+ import type { AsFraction } from './pointer-space.js';
4
4
  /**
5
- * Onde o ponteiro está e o que ele está a fazer.
5
+ * Where the pointer is and what it is doing.
6
6
  *
7
- * `fx`/`fy` são fracção do elemento do jogo, na convenção do `pointer-space`: `0,0` é o canto superior
8
- * esquerdo e `1,1` o inferior direito. ⚠️ Podem sair de `0..1` — ver `dentro`.
7
+ * `fx`/`fy` are a fraction of the game's element, in `pointer-space`'s convention: `0,0` is the top-left corner and `1,1`
8
+ * the bottom-right. ⚠️ They can leave `0..1` — see `isInside`.
9
9
  */
10
- export interface AmostraDoPonteiro {
10
+ export interface PointerSample {
11
11
  readonly fx: number;
12
12
  readonly fy: number;
13
- /** Quem produziu esta amostra (ADR-0111). */
14
- readonly origem: Transporte;
15
- /** A «caneta» está em baixo? Rato: botão premido. Toque: dedo em contacto. Olhar: permanência. */
16
- readonly apertado: boolean;
13
+ /** Who produced this sample (ADR-0111). */
14
+ readonly source: TransportName;
15
+ /** Is the "pen" down? Mouse: button pressed. Touch: finger in contact. Gaze: dwell. */
16
+ readonly pressed: boolean;
17
17
  }
18
- /** O repouso: centro da região, sem aperto, teclado — o mesmo padrão que o `transporte-em-uso` assume. */
19
- export declare const PADRAO: AmostraDoPonteiro;
18
+ /** The resting sample: the region's centre, not pressed, the keyboard — the same default `transport-in-use` assumes. */
19
+ export declare const DEFAULT_POINTER: PointerSample;
20
20
  /**
21
- * A amostra está DENTRO da região do jogo?
21
+ * Is the sample INSIDE the game's region?
22
22
  *
23
- * ⚠️ ESTA PERGUNTA EXISTE SEPARADA DA POSIÇÃO, e é a decisão inteira deste ficheiro. O `emFracao` não satura
24
- * de propósito («quem saturasse aqui não teria como voltar atrás»), e há duas coisas a jusante que precisam
25
- * de metades opostas dela:
23
+ * ⚠️ THIS QUESTION EXISTS APART FROM THE POSITION, and that is the whole decision of this file. `asFraction` does not
24
+ * saturate, on purpose, and two things downstream need opposite halves of it:
26
25
  *
27
- * · DESENHAR precisa da posição PRESA a `0..1`, senão o traço salta para fora da tela quando a mão
28
- * ultrapassa a borda durante um arrasto capturado;
29
- * · o MODO OLHOS 3 do ADR-0104 usa «olhar para fora da tela» como comando de navegação — para uma criança
30
- * com ELA severa, olhar para cima FORA do écran é o gesto que abre a lista de acções.
26
+ * · DRAWING needs the position CLAMPED to `0..1`, or the stroke jumps off screen when the hand passes the edge during a
27
+ * captured drag;
28
+ * · ADR-0104's EYES MODE 3 uses "looking off the screen" as a navigation command — for a child with severe ALS, looking
29
+ * up OFF the screen is the gesture that opens the list of actions.
31
30
  *
32
- * ⚠️ SATURAR SEM GUARDAR ESTA RESPOSTA MATARIA O SEGUNDO. É a mesma família de defeito que este repositório
33
- * já pagou várias vezes: uma informação deitada fora à porta, e o consumidor que dela dependia a descobrir
34
- * tarde que a pergunta já não tem resposta.
31
+ * ⚠️ SATURATING WITHOUT KEEPING THIS ANSWER WOULD KILL THE SECOND. The family of defect this repository has paid for
32
+ * several times: information thrown away at the door, and the consumer that depended on it finding out late that the
33
+ * question no longer has an answer.
35
34
  */
36
- export declare function dentro(f: EmFracao): boolean;
35
+ export declare function isInside(f: AsFraction): boolean;
37
36
  /**
38
- * A posição PRESA a `0..1`, para quem desenha.
37
+ * The position CLAMPED to `0..1`, for whoever draws.
39
38
  *
40
- * 📌 Devolve o MESMO objecto quando já está dentro, e não uma cópia. O ponteiro é amostrado a cada quadro, e
41
- * uma alocação por quadro num aparelho de escola é exactamente o tipo de custo que o pilar 1 recusa.
39
+ * 📌 It returns the SAME object when it is already inside, not a copy. The pointer is sampled every frame, and an
40
+ * allocation per frame on a school device is exactly the kind of cost pillar 1 refuses.
42
41
  */
43
- export declare function prender(f: EmFracao): EmFracao;
44
- /** A borda do aperto entre duas amostras: a caneta desceu, subiu, ou nada mudou. */
45
- export type BordaDoAperto = 'desceu' | 'subiu' | null;
42
+ export declare function clampInside(f: AsFraction): AsFraction;
43
+ /** The press edge between two samples: the pen went down, went up, or nothing changed. */
44
+ export type PressEdge = 'desceu' | 'subiu' | null;
46
45
  /**
47
- * Comparar duas amostras dá a BORDA, que é o que um jogo lê.
46
+ * Comparing two samples gives the EDGE, which is what a game reads.
48
47
  *
49
- * ⚠️ A BORDA E NÃO O ESTADO, pela razão que o `padPrevAct` deste repositório já escreve para o gamepad: um
50
- * jogo que perguntasse «está apertado?» a cada quadro desenharia o mesmo ponto sessenta vezes, e um que
51
- * quisesse reagir ao clique teria de guardar o quadro anterior por sua conta — trezentas vezes.
48
+ * ⚠️ THE EDGE AND NOT THE STATE, for the reason the pad's previous-action memory already gives: a game that asked "is it
49
+ * pressed?" every frame would draw the same point sixty times, and one that wanted to react to the click would have to
50
+ * keep the previous frame on its own — in every game.
52
51
  */
53
- export declare function bordaDoAperto(anterior: AmostraDoPonteiro, atual: AmostraDoPonteiro): BordaDoAperto;
52
+ export declare function pressEdge(previous: PointerSample, current: PointerSample): PressEdge;
54
53
  /**
55
- * O TRANSPORTE MUDOU entre estas duas amostras?
54
+ * Did the TRANSPORT change between these two samples?
56
55
  *
57
- * ⚠️ Existe porque o ADR-0109 faz da troca de aparelho um evento com consequência — a alternância segue o
58
- * aparelho em uso —, e um ponteiro é um dos sítios onde a troca acontece sem que nenhuma tecla seja premida:
59
- * a criança larga o rato e olha para a tela. Sem esta pergunta, a troca seria invisível até à próxima tecla.
56
+ * ⚠️ It exists because ADR-0109 makes a change of device an event with consequences — the toggle follows the device in
57
+ * use — and a pointer is one of the places where the change happens with no key pressed: the child lets go of the mouse
58
+ * and looks at the screen. Without this question, the change would be invisible until the next key.
60
59
  */
61
- export declare function trocouDeTransporte(anterior: AmostraDoPonteiro, atual: AmostraDoPonteiro): boolean;
60
+ export declare function switchedTransport(previous: PointerSample, current: PointerSample): boolean;
@@ -1,71 +1,68 @@
1
1
  // SPDX-License-Identifier: AGPL-3.0-or-later
2
- // input/pointer.ts — O QUE O JOGO RECEBE QUANDO PEDE UM PONTEIRO (ADR-0112), na metade PURA.
2
+ // input/pointer.ts — WHAT THE GAME RECEIVES WHEN IT ASKS FOR A POINTER (ADR-0112), the PURE half.
3
3
  //
4
- // ========================= O QUE ESTE MÓDULO É =========================
5
- // Uma AMOSTRA de ponteiro e as perguntas que se fazem sobre ela. Sem DOM, sem tempo, sem eventos. Quem captura
6
- // é `input/touch-bindings.wirePointerPad`, que a issue #105 mediu como já existindo inteiro; quem converte um
7
- // ponto de tela é `input/pointer-space`, que também já existe. Falta o que fica ENTRE os dois: a forma que
8
- // atravessa a fronteira até ao cartucho.
4
+ // ========================= WHAT THIS MODULE IS =========================
5
+ // A pointer SAMPLE and the questions asked about it. No DOM, no time, no events. The touch pad's pointer wiring captures
6
+ // (issue #105 measured it as already whole); `input/pointer-space` converts a screen point. What was missing is what
7
+ // sits BETWEEN them: the shape that crosses the boundary to the cartridge.
9
8
  //
10
- // ⚠️ E A AMOSTRA CARREGA A ORIGEM, porque o ADR-0111 diz que todo comando a carrega. Um traço feito com o
11
- // olhar e um traço feito com o rato têm de ser distinguíveis pela engine — as regras de transporte assistido
12
- // do ADR-0109 dependem de saber qual aparelho está em uso, e um desenho não é excepção.
9
+ // ⚠️ AND THE SAMPLE CARRIES ITS ORIGIN, because ADR-0111 says every command does. A stroke made with the eyes and one made
10
+ // with the mouse must be distinguishable by the engine — ADR-0109's assisted-transport rules depend on knowing which
11
+ // device is in use, and a drawing is no exception.
13
12
  //
14
- // 📌 A ORIGEM É OBRIGATÓRIA AQUI, ao contrário do `origemDe` das teclas, que devolve `undefined`. A diferença
15
- // não é de rigor, é de estrutura: uma tecla entra num conjunto PARTILHADO onde qualquer código pode despachar
16
- // um evento sintético, então «não sei» é uma resposta honesta. Uma amostra de ponteiro é construída PELO
17
- // transporte que a produziu — ele sabe sempre o que é, porque é ele próprio.
18
- /** O repouso: centro da região, sem aperto, teclado — o mesmo padrão que o `transporte-em-uso` assume. */
19
- export const PADRAO = Object.freeze({ fx: 0.5, fy: 0.5, origem: 'teclado', apertado: false });
13
+ // 📌 THE ORIGIN IS REQUIRED HERE, unlike the keys' `sourceOf`, which returns `undefined`. The difference is not rigour, it
14
+ // is structure: a key enters a SHARED set where any code can dispatch a synthetic event, so "I do not know" is an honest
15
+ // answer. A pointer sample is built BY the transport that produced it — it always knows what it is, because it is itself.
16
+ /** The resting sample: the region's centre, not pressed, the keyboard — the same default `transport-in-use` assumes. */
17
+ export const DEFAULT_POINTER = Object.freeze({ fx: 0.5, fy: 0.5, source: 'teclado', pressed: false });
20
18
  /**
21
- * A amostra está DENTRO da região do jogo?
19
+ * Is the sample INSIDE the game's region?
22
20
  *
23
- * ⚠️ ESTA PERGUNTA EXISTE SEPARADA DA POSIÇÃO, e é a decisão inteira deste ficheiro. O `emFracao` não satura
24
- * de propósito («quem saturasse aqui não teria como voltar atrás»), e há duas coisas a jusante que precisam
25
- * de metades opostas dela:
21
+ * ⚠️ THIS QUESTION EXISTS APART FROM THE POSITION, and that is the whole decision of this file. `asFraction` does not
22
+ * saturate, on purpose, and two things downstream need opposite halves of it:
26
23
  *
27
- * · DESENHAR precisa da posição PRESA a `0..1`, senão o traço salta para fora da tela quando a mão
28
- * ultrapassa a borda durante um arrasto capturado;
29
- * · o MODO OLHOS 3 do ADR-0104 usa «olhar para fora da tela» como comando de navegação — para uma criança
30
- * com ELA severa, olhar para cima FORA do écran é o gesto que abre a lista de acções.
24
+ * · DRAWING needs the position CLAMPED to `0..1`, or the stroke jumps off screen when the hand passes the edge during a
25
+ * captured drag;
26
+ * · ADR-0104's EYES MODE 3 uses "looking off the screen" as a navigation command — for a child with severe ALS, looking
27
+ * up OFF the screen is the gesture that opens the list of actions.
31
28
  *
32
- * ⚠️ SATURAR SEM GUARDAR ESTA RESPOSTA MATARIA O SEGUNDO. É a mesma família de defeito que este repositório
33
- * já pagou várias vezes: uma informação deitada fora à porta, e o consumidor que dela dependia a descobrir
34
- * tarde que a pergunta já não tem resposta.
29
+ * ⚠️ SATURATING WITHOUT KEEPING THIS ANSWER WOULD KILL THE SECOND. The family of defect this repository has paid for
30
+ * several times: information thrown away at the door, and the consumer that depended on it finding out late that the
31
+ * question no longer has an answer.
35
32
  */
36
- export function dentro(f) {
33
+ export function isInside(f) {
37
34
  return f.fx >= 0 && f.fx <= 1 && f.fy >= 0 && f.fy <= 1;
38
35
  }
39
36
  /**
40
- * A posição PRESA a `0..1`, para quem desenha.
37
+ * The position CLAMPED to `0..1`, for whoever draws.
41
38
  *
42
- * 📌 Devolve o MESMO objecto quando já está dentro, e não uma cópia. O ponteiro é amostrado a cada quadro, e
43
- * uma alocação por quadro num aparelho de escola é exactamente o tipo de custo que o pilar 1 recusa.
39
+ * 📌 It returns the SAME object when it is already inside, not a copy. The pointer is sampled every frame, and an
40
+ * allocation per frame on a school device is exactly the kind of cost pillar 1 refuses.
44
41
  */
45
- export function prender(f) {
46
- if (dentro(f))
42
+ export function clampInside(f) {
43
+ if (isInside(f))
47
44
  return f;
48
45
  return { fx: Math.min(1, Math.max(0, f.fx)), fy: Math.min(1, Math.max(0, f.fy)) };
49
46
  }
50
47
  /**
51
- * Comparar duas amostras dá a BORDA, que é o que um jogo lê.
48
+ * Comparing two samples gives the EDGE, which is what a game reads.
52
49
  *
53
- * ⚠️ A BORDA E NÃO O ESTADO, pela razão que o `padPrevAct` deste repositório já escreve para o gamepad: um
54
- * jogo que perguntasse «está apertado?» a cada quadro desenharia o mesmo ponto sessenta vezes, e um que
55
- * quisesse reagir ao clique teria de guardar o quadro anterior por sua conta — trezentas vezes.
50
+ * ⚠️ THE EDGE AND NOT THE STATE, for the reason the pad's previous-action memory already gives: a game that asked "is it
51
+ * pressed?" every frame would draw the same point sixty times, and one that wanted to react to the click would have to
52
+ * keep the previous frame on its own — in every game.
56
53
  */
57
- export function bordaDoAperto(anterior, atual) {
58
- if (anterior.apertado === atual.apertado)
54
+ export function pressEdge(previous, current) {
55
+ if (previous.pressed === current.pressed)
59
56
  return null;
60
- return atual.apertado ? 'desceu' : 'subiu';
57
+ return current.pressed ? 'desceu' : 'subiu';
61
58
  }
62
59
  /**
63
- * O TRANSPORTE MUDOU entre estas duas amostras?
60
+ * Did the TRANSPORT change between these two samples?
64
61
  *
65
- * ⚠️ Existe porque o ADR-0109 faz da troca de aparelho um evento com consequência — a alternância segue o
66
- * aparelho em uso —, e um ponteiro é um dos sítios onde a troca acontece sem que nenhuma tecla seja premida:
67
- * a criança larga o rato e olha para a tela. Sem esta pergunta, a troca seria invisível até à próxima tecla.
62
+ * ⚠️ It exists because ADR-0109 makes a change of device an event with consequences — the toggle follows the device in
63
+ * use — and a pointer is one of the places where the change happens with no key pressed: the child lets go of the mouse
64
+ * and looks at the screen. Without this question, the change would be invisible until the next key.
68
65
  */
69
- export function trocouDeTransporte(anterior, atual) {
70
- return anterior.origem !== atual.origem;
66
+ export function switchedTransport(previous, current) {
67
+ return previous.source !== current.source;
71
68
  }