@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,31 +0,0 @@
1
- // SPDX-License-Identifier: AGPL-3.0-or-later
2
- // core/anel — A CONTA DO ANEL, e nada mais.
3
- //
4
- // Ela morava em `ui/menu-nav`, e saiu de lá quando o item 7 do ADR-0044 fez `ui/pause-icons` precisar dela
5
- // também: `menu-nav` já importava `pause-icons` (por `mostrarSubmenuDaPausa` e `PM_ITENS_VISIVEIS`), e a volta
6
- // fecharia um CICLO de importação. Ciclo em ESM não estoura na hora — estoura no boot, em TDZ, quando um dos
7
- // dois lê o outro durante a avaliação. É o tipo de defeito que aparece uma vez, em produção, e some ao ser
8
- // investigado.
9
- //
10
- // Módulo-folha de propósito: zero dependências, uma função, nenhuma I/O. `ui/menu-nav` continua a
11
- // reexportando, porque é de lá que os testes e os outros menus já a importavam — o nome público não muda.
12
- /**
13
- * ANDA UM PASSO NUM ANEL — passar do último volta ao primeiro, e antes do primeiro está o último.
14
- *
15
- * Era `clampIndex`, que prendia nas pontas "porque o original nunca faz wrap em lista de itens". O ADR-0044
16
- * derrubou isso, e o motivo é de uso, não de gosto: com UM MENU POR TELA, toda lista pode ser um anel, e o
17
- * item mais indesejado (`quit`) fica a UMA tecla do mais urgente (`resume`) sem estar perto dele. Quem não
18
- * enxerga não varre a lista à procura do fim — ela pergunta "e antes do primeiro?" e recebe uma resposta.
19
- *
20
- * A XAG 106 permite o anel exatamente para menu LINEAR, e o proíbe para grade 2-D de blocos: ali "voltar ao
21
- * primeiro" não tem significado espacial.
22
- *
23
- * ⚠️ NAVEGAR LISTA É ANEL; AJUSTAR VALOR É LIMITE. `selectStep` e `rangeStep` (em ui/menu-nav) continuam
24
- * presos nas pontas, e a diferença é real: passar do volume máximo para o mínimo com uma tecla é um susto,
25
- * não uma conveniência — e num jogo com pistas de áudio para cegueira, um susto de volume é dano.
26
- */
27
- export function passoNoAnel(len, idx, delta) {
28
- if (len <= 0)
29
- return 0;
30
- return ((idx + delta) % len + len) % len; // o `+ len` extra: `%` de negativo em JS devolve negativo
31
- }
@@ -1,21 +0,0 @@
1
- // SPDX-License-Identifier: AGPL-3.0-or-later
2
- export type CollisionCtx = {
3
- world: number[][];
4
- W: number;
5
- H: number;
6
- isWheelchair: () => boolean;
7
- isModoCego: () => boolean;
8
- caneDiv: () => number;
9
- wcSolid: () => ReadonlySet<string>;
10
- gateTiles: () => ReadonlySet<string>;
11
- gateOpen: () => boolean;
12
- };
13
- export declare function initCollision(ctx: CollisionCtx): void;
14
- export declare const caneBlockPx: () => number;
15
- export declare const isSolidType: (t: number) => boolean;
16
- export declare const tileAt: (tx: number, ty: number) => number;
17
- export declare const solidTile: (x: number, y: number) => boolean;
18
- export declare const solidAt: (tx: number, ty: number) => boolean;
19
- export declare const surfTop: (x: number, y: number) => boolean;
20
- export declare const isWcRampRiser: (col: number, row: number) => boolean;
21
- export declare function rampSurfaceY(cx: number, py: number): number | null;
@@ -1,62 +0,0 @@
1
- // SPDX-License-Identifier: AGPL-3.0-or-later
2
- // core/collision.ts — consultas de colisão da GRADE do mundo (determinístico). Extraído do game.js (Estágio 4).
3
- // Design testável: o módulo NÃO guarda cópias do estado mutável — recebe CLOSURES em initCollision() que leem o
4
- // estado VIVO do game.js (wheelchair/modoCego/caneBlockDiv/wcSolid/gateTiles/gateOpen). Assim a colisão sempre
5
- // enxerga o valor atual (sem risco de dessincronização) e os testes passam um ctx falso → funções 100% puras.
6
- // TILE/TILE_TYPES são constantes (import direto). Consumido pela física (resolveX/resolveY/stepPlayer) no game.js.
7
- import { TILE, TILE_TYPES, ehPerigo, ehTrampolim } from './constants.js';
8
- // (`TileType` era declarado AQUI, privado, e era por isso que a tabela semântica não era usável de fora.
9
- // Mudou de casa para `core/constants`, junto da tabela que ele descreve.)
10
- const TYPES = TILE_TYPES;
11
- // closures no-op até initCollision() (evita null-check no caminho quente da física).
12
- let _world = [], _W = 0, _H = 0;
13
- let _isWheelchair = () => false;
14
- let _isModoCego = () => false;
15
- let _caneDiv = () => 1;
16
- let _wcSolid = () => new Set();
17
- let _gateTiles = () => new Set();
18
- let _gateOpen = () => true;
19
- // Liga a colisão ao mundo + estado vivo. Chamado UMA vez no boot do game.js (após WORLD pronto). Idempotente.
20
- export function initCollision(ctx) {
21
- _world = ctx.world;
22
- _W = ctx.W;
23
- _H = ctx.H;
24
- _isWheelchair = ctx.isWheelchair;
25
- _isModoCego = ctx.isModoCego;
26
- _caneDiv = ctx.caneDiv;
27
- _wcSolid = ctx.wcSolid;
28
- _gateTiles = ctx.gateTiles;
29
- _gateOpen = ctx.gateOpen;
30
- }
31
- // distância (px) entre batidas de bengala = TILE / divisor.
32
- export const caneBlockPx = () => TILE / _caneDiv();
33
- // Um TIPO de tile é sólido? Cadeirante: PERIGO e TRAMPOLIM viram chão. Modo cego: o PERIGO vira chão.
34
- // Pelas perguntas e não pelos números 9 e 5: a regra é sobre o que o tile É, e assim ela continua verdadeira
35
- // num mapa com outra numeração — que é exatamente o que um segundo jogo tem.
36
- export const isSolidType = (t) => ((_isWheelchair() && (ehPerigo(t) || ehTrampolim(t))) || (_isModoCego() && ehPerigo(t))) ? true : !!TYPES[t]?.solid;
37
- // Tile na posição (fora do mundo = pedra(2), parede natural). Coordenadas em TILES.
38
- export const tileAt = (tx, ty) => (tx < 0 || tx >= _W || ty < 0 || ty >= _H) ? 2 : _world[ty][tx];
39
- // Sólido "de pisar" (inclui sólidos só-cadeirante). isSolidType já cobre lava/trampolim no modo cadeira.
40
- export const solidTile = (x, y) => {
41
- const t = tileAt(x, y);
42
- return (_isWheelchair() && _wcSolid().has(x + ',' + y)) || isSolidType(t);
43
- };
44
- // Sólido "de barrar" (inclui portão fechado + sólidos só-cadeirante). Usado pela física.
45
- export const solidAt = (tx, ty) => (!_gateOpen() && _gateTiles().has(tx + ',' + ty)) || (_isWheelchair() && _wcSolid().has(tx + ',' + ty)) || isSolidType(tileAt(tx, ty));
46
- // Topo caminhável: sólido com ar logo acima (é uma superfície onde se anda).
47
- export const surfTop = (x, y) => solidTile(x, y) && !solidTile(x, y - 1);
48
- // Cadeirante: (col,row) é o "degrau" que uma rampa de 1 tile cobre? (superfície com vizinho-diagonal 1 acima)
49
- export const isWcRampRiser = (col, row) => surfTop(col, row) && (surfTop(col - 1, row + 1) || surfTop(col + 1, row + 1));
50
- // Altura (px) da diagonal 45° de uma rampa de 1 tile no x=cx do mundo; null se não há rampa por perto de py.
51
- export function rampSurfaceY(cx, py) {
52
- const tcx = Math.floor(cx / TILE), fx = cx - tcx * TILE, ty = Math.floor(py / TILE);
53
- for (let y = ty - 1; y <= ty + 1; y++) {
54
- if (y < 1 || !surfTop(tcx, y))
55
- continue;
56
- if (surfTop(tcx + 1, y - 1))
57
- return y * TILE - fx; // degrau sobe p/ direita: y*TILE → (y-1)*TILE
58
- if (surfTop(tcx - 1, y - 1))
59
- return (y - 1) * TILE + fx; // degrau sobe p/ esquerda: (y-1)*TILE → y*TILE
60
- }
61
- return null;
62
- }
@@ -1,63 +0,0 @@
1
- // SPDX-License-Identifier: AGPL-3.0-or-later
2
- export declare const Z: {
3
- readonly SKY: 1000;
4
- readonly SKY_ANIM: 2000;
5
- readonly PARALLAX_4: 3000;
6
- readonly PARALLAX_3: 4000;
7
- readonly PARALLAX_2: 5000;
8
- readonly PARALLAX_1: 6000;
9
- readonly BG_DECOR: 7000;
10
- readonly TILES: 8000;
11
- readonly SCENERY_INTERACT: 9000;
12
- readonly VFX_BACK: 10000;
13
- readonly FLORA_BACK: 11000;
14
- readonly FAUNA_BACK: 12000;
15
- readonly NPC: 13000;
16
- readonly ITEMS: 14000;
17
- readonly PLAYER: 15000;
18
- readonly VFX_FRONT: 16000;
19
- readonly VEHICLES: 17000;
20
- readonly FLORA_FRONT: 18000;
21
- readonly FAUNA_FRONT: 19000;
22
- readonly FOREGROUND: 20000;
23
- readonly WEATHER: 21000;
24
- readonly DARK_WORLD: 22000;
25
- readonly WORLD_A11Y: 23000;
26
- readonly HUD: 24000;
27
- readonly TOUCH_CONTROLS: 25000;
28
- readonly CAPTIONS: 26000;
29
- readonly DIALOGUE: 27000;
30
- readonly GAME_MSG: 28000;
31
- readonly MODAL_SCRIM: 29000;
32
- readonly MENU: 30000;
33
- readonly MENU_MAX: 39999;
34
- readonly TRANSITION: 40000;
35
- /**
36
- * ⚠️ A SAÍDA DE EMERGÊNCIA, E ELA FICA ACIMA DA TRANSIÇÃO (decisão do Dev, 2026-09-07).
37
- *
38
- * Este comentário dizia que o *skip-link* mora em `CAPTIONS` (26000) — e isso deixava-o ABAIXO de
39
- * `MENU` (30000). Um «pular para o conteúdo» que um modal cobre não é alcançável, o que é a WCAG 2.4.1 ao
40
- * contrário: o mecanismo que existe para atravessar blocos repetidos passa a ser mais um bloco.
41
- * O gate do `z-order-css` já registava o defeito com todas as letras — «o `Z` ERRA, não o CSS» —, e ficou
42
- * assim durante semanas porque nada o obrigava a mudar.
43
- *
44
- * ⚠️ E É ACIMA DA `TRANSITION`, não entre o menu e ela. O Dev pediu 41000 e o motivo é o que sobra depois
45
- * de tudo o resto falhar: a saída não pode ficar atrás de nada que a pessoa não controla, e um fade de
46
- * troca de fase é precisamente isso. O custo — o link aparecer por cima de uma animação — é nulo na
47
- * prática, porque ele só é visível AO FOCO (`top:-60px` até `:focus`), e porque durante a transição já não
48
- * se tabula: o foco sai da tela antiga e só reaparece na seguinte (ver a regra de foco no ADR).
49
- *
50
- * Só o aviso de laço morto (ADR-0054) e o painel de desenvolvimento ficam acima dela.
51
- */
52
- readonly SKIP_LINK: 41000;
53
- /**
54
- * O LAÇO MORREU (ADR-0054). Acima do `TRANSITION` de propósito: quando o quadro lança, o que estiver na
55
- * tela — menu aberto, fade a meio, mensagem de fase — está congelado e deixou de importar. O aviso tem de
56
- * ser visto por cima de tudo isso, e só o painel de desenvolvimento fica acima dele.
57
- */
58
- readonly LOOP_CRASH: 45000;
59
- readonly DEBUG: 90000;
60
- };
61
- export type LayerName = keyof typeof Z;
62
- export declare const POST_FX_ORDER: readonly ["CRT_VIGNETTE", "EMPATHY_SIM", "A11Y_CORRECTION", "FLASH_LIMIT"];
63
- export type PostFx = typeof POST_FX_ORDER[number];
@@ -1,95 +0,0 @@
1
- // SPDX-License-Identifier: AGPL-3.0-or-later
2
- // core/layers — ORDEM-Z CANÔNICA (fonte única de verdade). Cada camada tem um Z NOMEADO; ninguém mais faz
3
- // addChildAt(getChildIndex(...)) nem "re-adiciona ao topo" — a inserção passa a ser pelo Z (fim do acoplamento).
4
- // Duas escalas: MUNDO (por viewport — PIXI zIndex dentro da câmera, com sortableChildren) e OVERLAY (global, tela —
5
- // vira CSS z-index no DOM, pois menu/HUD/legenda são DOM). **Passo 1000** = folga generosa: 999 slots livres entre
6
- // camadas nomeadas (e sub-slots dentro de cada uma) p/ inserir futuras SEM renumerar. Elementos concretos entram por
7
- // `Z.BANDA + offset` pequeno (ex.: cane/cadeira = PLAYER+10/+20) — ver docs/5-Refactoring/plano-religacao-z-camadas.md.
8
- //
9
- // NATUREZA (fauna/flora) STRADDLE o jogador: há um par BACK (atrás) e FRONT (à frente) p/ cada, deixando bichos/plantas
10
- // aparecerem dos dois lados do player (imersão — pedido do José). PIXI sortableChildren é tudo-ou-nada por container →
11
- // o mundo inteiro migra numa rodada só (todos os filhos ganham zIndex de uma vez, reproduzindo a ordem atual = no-op).
12
- //
13
- // PÓS-PROCESSO ≠ camada Z: CRT/vinheta e os filtros de a11y (alto-contraste, correção de daltonismo, simulação de
14
- // deficiência) são uma CADEIA de passes sobre o frame JÁ COMPOSTO (POST_FX_ORDER), não itens da display-list — e cobrem
15
- // TUDO, inclusive o menu. A11Y_CORRECTION é SEMPRE o último passe; modos de a11y SUPRIMEM o CRT/efeitos decorativos; o
16
- // overlay é palette-aware (troca p/ CB-safe). Ver ADR-0020 + ADR-0011.
17
- export const Z = {
18
- // ===== MUNDO (por viewport; PIXI zIndex dentro da câmera) =====
19
- SKY: 1000, // gradiente de céu (base)
20
- SKY_ANIM: 2000, // animações do céu atrás do parallax (estrelas)
21
- PARALLAX_4: 3000, // paralaxe mais distante. Nuvens de céu podem entrar em PARALLAX_*+offset (profundidades)
22
- PARALLAX_3: 4000,
23
- PARALLAX_2: 5000,
24
- PARALLAX_1: 6000, // fundo próximo do jogo
25
- BG_DECOR: 7000, // deco ATRÁS dos tiles: árvores, água/corais/algas, ruínas, deco de cidade, nuvens de tela
26
- TILES: 8000, // tileset / plataforma (o nível)
27
- SCENERY_INTERACT: 9000, // cenário interativo: porta, alavanca, interruptor, manivela, corda, portão, rampa, elevador
28
- VFX_BACK: 10000, // efeitos ATRÁS dos atores: poeira de pé, god-rays, tracinhos de lava, sombras
29
- FLORA_BACK: 11000, // plantas ATRÁS do player (grama, flores, arbustos de fundo)
30
- FAUNA_BACK: 12000, // criaturas ATRÁS do player (bichos da cidade, animais de fundo)
31
- NPC: 13000, // personagens interativos (não-jogador)
32
- ITEMS: 14000, // coletáveis (moedas, poderes, chave) — ATRÁS do player (barril DK / Yoshi / chave SMW)
33
- PLAYER: 15000, // jogador(es). Aparatos presos (bengala/cadeira) = PLAYER+offset
34
- VFX_FRONT: 16000, // efeitos NA FRENTE do player: partículas/juice, explosão, faísca, fogos, confete
35
- VEHICLES: 17000, // veículos na frente (carros/trânsito da cidade)
36
- FLORA_FRONT: 18000, // plantas NA FRENTE do player (folhagem que tampa o ator — imersão)
37
- FAUNA_FRONT: 19000, // criaturas NA FRENTE do player (borboletas/vagalumes/minhocas v3 passando à frente)
38
- FOREGROUND: 20000, // primeiro-plano oclusivo genérico (props que tampam o ator)
39
- WEATHER: 21000, // clima na frente de tudo do mundo (névoa, chuva, clarão)
40
- DARK_WORLD: 22000, // escurecimento do mundo (modo cego / empatia baixa-visão)
41
- WORLD_A11Y: 23000, // pistas visuais de a11y no mundo (sonar, guarda de beirada, hitbox fácil, realce)
42
- // ===== OVERLAY (global, tela; = CSS z-index no DOM / topo da stage PIXI) =====
43
- HUD: 24000, // placar/moedas/poder/objetivo/minimapa (persistente durante o jogo)
44
- TOUCH_CONTROLS: 25000, // gamepad virtual / botões de toque (mobile)
45
- CAPTIONS: 26000, // legendas de som (a11y surdez) + skip-link de navegação
46
- DIALOGUE: 27000, // fala/diálogo/atividade (quiz)
47
- GAME_MSG: 28000, // vitória / game over / pause / faixa de fase
48
- MODAL_SCRIM: 29000, // escurecimento do fundo quando abre um modal
49
- MENU: 30000, // menus — RANGE reservado 30000–39999 (níveis aninhados: +1000 por nível)
50
- MENU_MAX: 39999,
51
- TRANSITION: 40000, // fade/wipe de troca de fase (cobre tudo)
52
- /**
53
- * ⚠️ A SAÍDA DE EMERGÊNCIA, E ELA FICA ACIMA DA TRANSIÇÃO (decisão do Dev, 2026-09-07).
54
- *
55
- * Este comentário dizia que o *skip-link* mora em `CAPTIONS` (26000) — e isso deixava-o ABAIXO de
56
- * `MENU` (30000). Um «pular para o conteúdo» que um modal cobre não é alcançável, o que é a WCAG 2.4.1 ao
57
- * contrário: o mecanismo que existe para atravessar blocos repetidos passa a ser mais um bloco.
58
- * O gate do `z-order-css` já registava o defeito com todas as letras — «o `Z` ERRA, não o CSS» —, e ficou
59
- * assim durante semanas porque nada o obrigava a mudar.
60
- *
61
- * ⚠️ E É ACIMA DA `TRANSITION`, não entre o menu e ela. O Dev pediu 41000 e o motivo é o que sobra depois
62
- * de tudo o resto falhar: a saída não pode ficar atrás de nada que a pessoa não controla, e um fade de
63
- * troca de fase é precisamente isso. O custo — o link aparecer por cima de uma animação — é nulo na
64
- * prática, porque ele só é visível AO FOCO (`top:-60px` até `:focus`), e porque durante a transição já não
65
- * se tabula: o foco sai da tela antiga e só reaparece na seguinte (ver a regra de foco no ADR).
66
- *
67
- * Só o aviso de laço morto (ADR-0054) e o painel de desenvolvimento ficam acima dela.
68
- */
69
- SKIP_LINK: 41000,
70
- /**
71
- * O LAÇO MORREU (ADR-0054). Acima do `TRANSITION` de propósito: quando o quadro lança, o que estiver na
72
- * tela — menu aberto, fade a meio, mensagem de fase — está congelado e deixou de importar. O aviso tem de
73
- * ser visto por cima de tudo isso, e só o painel de desenvolvimento fica acima dele.
74
- */
75
- LOOP_CRASH: 45000,
76
- DEBUG: 90000, // painel ?debug / FPS / hitboxes (dev; topo absoluto)
77
- };
78
- // Cadeia de PÓS-PROCESSO — passes sobre o frame COMPOSTO, do interno p/ o externo. NÃO são camadas Z.
79
- // Modos de a11y suprimem CRT_VIGNETTE e flashes decorativos (precedência a11y > estética). Ver ADR-0020.
80
- //
81
- // DUAS COISAS DIFERENTES NO FIM DA FILA, e confundi-las é o que este comentário existe para impedir:
82
- //
83
- // · A11Y_CORRECTION é o último passe de CORREÇÃO. Ele decide como a imagem SE PARECE, e por isso precisa ver o
84
- // composto final, menus inclusive — é essa a razão de ele vir depois do CRT, que senão re-tinge e desfaz a
85
- // correção de daltonismo.
86
- // · FLASH_LIMIT é o último passe, ponto. Ele decide se a imagem pode FAZER MAL. A WCAG 2.3.1 limita a variação de
87
- // luminância no tempo, e o único quadro cuja luminância importa é o que chega ao olho. Um limitador colocado
88
- // ANTES da correção limita uma imagem que já não existe, e a correção fica livre para reabrir a oscilação que
89
- // ele acabou de fechar — uma matriz de daltonismo redistribui luminância por definição. Segurança é o passe mais
90
- // externo porque é a última coisa verdadeira sobre o quadro.
91
- //
92
- // O ADR-0020 dizia "A11Y_CORRECTION sempre por último" sem essa distinção; foi emendado em 2026-08-24. FLASH_LIMIT
93
- // ainda NÃO está implementado — está declarado aqui, e aferido por teste, para que quem o implementar encontre o
94
- // lugar certo já ocupado em vez de deduzir a ordem errada a partir da redação antiga.
95
- export const POST_FX_ORDER = ['CRT_VIGNETTE', 'EMPATHY_SIM', 'A11Y_CORRECTION', 'FLASH_LIMIT'];
@@ -1,55 +0,0 @@
1
- // SPDX-License-Identifier: AGPL-3.0-or-later
2
- /** As quatro direções que um direcional produz. Nomes em português porque são vocabulário do jogo, não da web. */
3
- export type Direcao = 'esquerda' | 'direita' | 'cima' | 'baixo';
4
- /** Onde o cursor está, em coordenadas de grade — o que a tela desenha e o leitor de tela anuncia. */
5
- export interface Posicao {
6
- readonly linha: number;
7
- readonly coluna: number;
8
- }
9
- export interface GradeDeLetras {
10
- /** A grade, como dado: quem desenha lê daqui em vez de recontar. */
11
- readonly simbolos: readonly string[];
12
- readonly colunas: number;
13
- readonly linhas: number;
14
- /** Quantas casas o valor aceita. `0` = sem limite (jogos de palavra). */
15
- readonly capacidade: number;
16
- /** Índice linear do cursor, `0..simbolos.length-1`. */
17
- indice(): number;
18
- /** A posição do cursor em linha/coluna, base ZERO — quem anuncia soma 1 se quiser falar "linha 1". */
19
- posicao(): Posicao;
20
- /** O símbolo sob o cursor. */
21
- sob(): string;
22
- /** Move o cursor uma casa, enrolando em toroide. */
23
- mover(dir: Direcao): void;
24
- /** Leva o cursor ao símbolo dado. Devolve `false` — e não move — quando ele não está na grade. */
25
- irPara(simbolo: string): boolean;
26
- /** Acrescenta o símbolo sob o cursor ao valor. Não faz nada quando o valor já está cheio. */
27
- digitar(): void;
28
- /** Apaga a última casa. Não faz nada quando o valor está vazio. */
29
- apagar(): void;
30
- /** Esvazia o valor. O cursor NÃO se mexe: quem apagou continua olhando para onde estava. */
31
- limpar(): void;
32
- /** O que foi digitado até agora. */
33
- valor(): string;
34
- /** Quantas casas ainda faltam. `null` quando não há capacidade declarada. */
35
- faltam(): number | null;
36
- /** `true` quando o valor atingiu a capacidade. Sempre `false` sem capacidade declarada. */
37
- completo(): boolean;
38
- }
39
- export interface OpcoesDaGrade {
40
- /** Os símbolos, em ordem de leitura (esquerda→direita, cima→baixo). */
41
- simbolos: string;
42
- /** Largura da grade. As linhas saem da divisão, e a última pode ficar incompleta. */
43
- colunas: number;
44
- /** Quantas casas o valor aceita; omitir ou `0` deixa sem limite. */
45
- capacidade?: number;
46
- }
47
- /**
48
- * A grade, como instância.
49
- *
50
- * `colunas` precisa ser inteiro ≥ 1 e `simbolos` não pode ser vazio: uma grade sem casas não tem cursor, e
51
- * um cursor sem casa é a origem de todo `undefined` que aparece três telas adiante. As mensagens são
52
- * SELETORES e não prosa — o gate de i18n de engine proíbe frase em qualquer idioma aqui, e o nome do campo
53
- * que falhou é mais útil que uma frase de qualquer forma.
54
- */
55
- export declare function criarGrade(opcoes: OpcoesDaGrade): GradeDeLetras;
@@ -1,116 +0,0 @@
1
- // SPDX-License-Identifier: AGPL-3.0-or-later
2
- // core/letter-grid — ENTRADA DE TEXTO SEM TECLADO, e é essa a coisa que este arquivo é.
3
- //
4
- // ========================= POR QUE ISTO EXISTE =========================
5
- // O ADR-0027 diz o que falta ao motor em uma linha: *"the engine needs a LETTER GRID SELECTOR, not a
6
- // keyboard"*. Um console não tem teclado, e o alvo desta engine é uma máquina de escola operada por
7
- // direcional — quando não por UM botão só. Digitar, aqui, é mover um cursor por uma grade e confirmar.
8
- //
9
- // O consumidor é o CÓDIGO DA SALA DA PROFESSORA. Não é a senha de progressão da criança: o ADR-0037 a
10
- // enterrou junto com a ideia de salvar jogo — não existe save, e o Inclusionist não guarda nada sobre uma
11
- // criança. O que o ADR-0037 diz que sobrevive é o `core/password`, e por outro motivo: *"the teacher's room
12
- // code is the same engineering problem… it stays because the room screen will need it"*. O modo de falha
13
- // mudou de forma junto: um código errado que seja ACEITO não carrega o progresso de outra criança — larga
14
- // esta criança na sala de outra turma, fazendo a atividade de outra professora.
15
- //
16
- // O segundo consumidor já está previsto e é o que impede este módulo de nascer como componente de senha: os
17
- // jogos de palavras do catálogo do `inclusionist-demos` precisam da mesma coisa.
18
- //
19
- // ========================= O CORTE (ADR-0041) =========================
20
- // MECÂNICA aqui, TELA no `ui/`. É a mesma divisão que o `core/password` acabou de usar, e ela existe para
21
- // preservar a propriedade mais cara que o `core/` tem: ser testável sem navegador. O `core/scenes` foi
22
- // escrito de propósito sem PIXI e sem DOM por esse motivo, e um módulo que DESENHE dentro do `core/` abre
23
- // uma porta que a próxima tela atravessa sem discussão.
24
- //
25
- // O que NÃO está aqui, e é honesto dizer: a repetição de tecla. Ela é temporização de entrada e mora com o
26
- // `input/`, junto das bordas de tecla — o ADR-0041 a listou como conteúdo desta metade e ela não é.
27
- //
28
- // ========================= A ESCOLHA DE ENROLAMENTO, E O MOTIVO =========================
29
- // Nas bordas o cursor enrola em TOROIDE: andar para a direita mantém a LINHA, andar para baixo mantém a
30
- // COLUNA. A alternativa — a da direita na última coluna cair na linha seguinte, como texto — é comum em
31
- // teclados de console e está errada aqui, e o motivo é o leitor de tela: a leitura anuncia "linha 2,
32
- // coluna 1", e um movimento horizontal que mude a linha faz o anúncio contradizer a direção que a criança
33
- // apertou. Movimento previsível vale mais que economia de apertos.
34
- //
35
- // SEM I/O NO IMPORT, e sem estado de módulo: `criarGrade()` devolve a instância e quem compõe a possui. É a
36
- // D13 do `inclusionist-demos`, e é o que permite duas grades na mesma página sem uma pisar na outra.
37
- /**
38
- * A grade, como instância.
39
- *
40
- * `colunas` precisa ser inteiro ≥ 1 e `simbolos` não pode ser vazio: uma grade sem casas não tem cursor, e
41
- * um cursor sem casa é a origem de todo `undefined` que aparece três telas adiante. As mensagens são
42
- * SELETORES e não prosa — o gate de i18n de engine proíbe frase em qualquer idioma aqui, e o nome do campo
43
- * que falhou é mais útil que uma frase de qualquer forma.
44
- */
45
- export function criarGrade(opcoes) {
46
- const simbolos = [...opcoes.simbolos];
47
- const colunas = opcoes.colunas;
48
- if (simbolos.length === 0)
49
- throw new Error('simbolos');
50
- if (!Number.isInteger(colunas) || colunas < 1)
51
- throw new Error('colunas');
52
- const linhas = Math.ceil(simbolos.length / colunas);
53
- const capacidade = opcoes.capacidade ?? 0;
54
- if (!Number.isInteger(capacidade) || capacidade < 0)
55
- throw new Error('capacidade');
56
- let cursor = 0;
57
- let digitado = '';
58
- /** Enrolamento de um eixo, escrito uma vez: `((v % n) + n) % n` sobrevive a negativo, que `v % n` não. */
59
- const enrolar = (v, n) => ((v % n) + n) % n;
60
- /**
61
- * A ÚLTIMA LINHA PODE SER INCOMPLETA — 32 símbolos em 8 colunas dão 4 linhas cheias, mas 30 dariam uma
62
- * linha com 6. Descer numa coluna que não existe na linha de destino cairia num buraco, e este é o ponto
63
- * que decide o que fazer: o cursor pula a linha incompleta naquela coluna e segue descendo. Assim toda
64
- * tecla move, sempre, para uma casa que existe — e o leitor de tela nunca anuncia vazio.
65
- */
66
- function indiceDe(linha, coluna) {
67
- for (let i = 0; i < linhas; i++) {
68
- const l = enrolar(linha + i, linhas);
69
- const idx = l * colunas + coluna;
70
- if (idx < simbolos.length)
71
- return idx;
72
- }
73
- return cursor; // inalcançável com colunas ≥ 1: a linha 0 sempre tem a coluna 0
74
- }
75
- function posicao() {
76
- return { linha: Math.floor(cursor / colunas), coluna: cursor % colunas };
77
- }
78
- function mover(dir) {
79
- const { linha, coluna } = posicao();
80
- if (dir === 'esquerda' || dir === 'direita') {
81
- // Enrola DENTRO da linha, e a linha incompleta enrola no tamanho dela, não no da grade.
82
- const inicio = linha * colunas;
83
- const largura = Math.min(colunas, simbolos.length - inicio);
84
- cursor = inicio + enrolar(coluna + (dir === 'direita' ? 1 : -1), largura);
85
- return;
86
- }
87
- cursor = indiceDe(linha + (dir === 'baixo' ? 1 : -1), coluna);
88
- }
89
- return {
90
- simbolos,
91
- colunas,
92
- linhas,
93
- capacidade,
94
- indice: () => cursor,
95
- posicao,
96
- sob: () => simbolos[cursor],
97
- mover,
98
- irPara(simbolo) {
99
- const i = simbolos.indexOf(simbolo);
100
- if (i < 0)
101
- return false;
102
- cursor = i;
103
- return true;
104
- },
105
- digitar() {
106
- if (capacidade > 0 && digitado.length >= capacidade)
107
- return;
108
- digitado += simbolos[cursor];
109
- },
110
- apagar() { digitado = digitado.slice(0, -1); },
111
- limpar() { digitado = ''; },
112
- valor: () => digitado,
113
- faltam: () => (capacidade > 0 ? capacidade - digitado.length : null),
114
- completo: () => capacidade > 0 && digitado.length >= capacidade,
115
- };
116
- }
@@ -1,34 +0,0 @@
1
- // SPDX-License-Identifier: AGPL-3.0-or-later
2
- /** Um campo do esquema: um nome e quantos BITS ele ocupa (⇒ valores de 0 a 2^bits − 1). */
3
- export interface CampoSenha {
4
- readonly nome: string;
5
- readonly bits: number;
6
- }
7
- export interface CodecSenha {
8
- /** Quantos caracteres a senha tem, sem separadores. Constante: toda senha deste esquema tem este tamanho. */
9
- readonly comprimento: number;
10
- /** Os campos, na ordem em que foram declarados (cópia — quem lê não altera o esquema). */
11
- readonly campos: readonly CampoSenha[];
12
- /** Empacota os valores. Lança se algum campo faltar ou não couber — ver a nota em `codificar`. */
13
- codificar(valores: Readonly<Record<string, number>>): string;
14
- /** Desempacota. `null` = senha inválida (comprimento, símbolo, soma ou enchimento). */
15
- decodificar(senha: string): Record<string, number> | null;
16
- }
17
- /** Crockford base32: sem I, L, O e U. Índice = valor de 5 bits. */
18
- export declare const ALFABETO = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
19
- /**
20
- * Cria um codec para o esquema `campos`.
21
- *
22
- * ⚠️ LANÇA em esquema malformado, e isso é decisão: um esquema errado é erro de PROGRAMA, e um erro de
23
- * programa que só aparece como senha estranha três meses depois custa mais caro que um boot que não sobe.
24
- * É a mesma escolha de `boot/create-game` para a declaração malformada.
25
- */
26
- export declare function criarCodec(campos: readonly CampoSenha[]): CodecSenha;
27
- /**
28
- * Insere um separador a cada `grupo` caracteres — `'A1B2C3D4'` vira `'A1B2-C3D4'`.
29
- *
30
- * É acessibilidade, não enfeite: uma sequência sem grupos é lida caractere a caractere pelo leitor de tela e
31
- * copiada perdendo o lugar por quem lê da tela para o caderno. `decodificar` ignora o separador, então a
32
- * senha agrupada e a senha corrida são a MESMA senha — quem digitar sem o traço não é punido por isso.
33
- */
34
- export declare function formatar(senha: string, grupo?: number, sep?: string): string;