@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
@@ -0,0 +1,301 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-or-later
2
+ //
3
+ // WHAT A DELIVERY OWES THE PEOPLE WHOSE HEAVY FILES IT CARRIES (ADR-0177 delivery of heavy files, ADR-0203 mirror).
4
+ //
5
+ // `inclusionist-heavy` copies third-party runtimes and models into a delivery's `heavy/` folder, and a copy handed to a school is
6
+ // a distribution: Apache-2.0 §4(a) asks for the licence text to travel with it and §4(d) for the NOTICE attributions, MIT for its
7
+ // copyright and permission notice, GPL-3.0 for its text and the Corresponding Source (§6). So every folder of `heavy/` that
8
+ // receives a file also receives the `LICENSE` and `NOTICE` of the project it belongs to (and eSpeak NG's a `SOURCE`), and
9
+ // `heavy/THIRD-PARTY-NOTICES.md` lists each project written, with where its texts sit.
10
+ //
11
+ // 📌 THE TEXTS LIVE HERE, beside this module, and ship in the npm package (`files`): the command runs from `node_modules` on a
12
+ // school's build machine, which has neither the engine's `node_modules` nor the mirror. Each was COPIED from a local file, never
13
+ // written from memory — `LICENCE_TEXTS` names the file and pins its sha256, and `tests/heavy-licences.node.test.js` holds both.
14
+ //
15
+ // 📌 A CATALOGUE ENTRY WITH NO GROUP HERE IS NOT WRITTEN: the delivery refuses a file whose licence nobody recorded, the same way
16
+ // it refuses a file whose sha256 differs. Adding an entry to `app/js/platform/heavy-catalogue.ts` means adding its group here.
17
+ //
18
+ // ⚠️ UNVERIFIED is written where the project holds no evidence: most upstream copyright lines are not held locally (the mirror's
19
+ // `LICENSE.md` files are statements the project wrote, not the upstream text; see `docs/CREDITS.md`).
20
+
21
+ import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
22
+ import { dirname, join } from 'node:path';
23
+
24
+ const HERE = new URL('./', import.meta.url);
25
+
26
+ // The eSpeak NG build the catalogue pins (`voz:runtime:fonemas`), made by `scripts/models/build-espeak-ng.ps1` (issue #192). The
27
+ // catalogue's address names the same folder, and `tests/heavy-licences.node.test.js` holds the two together.
28
+ const ESPEAK_NG_COMMIT = '530bf0abf4174dc9ca28dbacc11bd5e9ae6152cd';
29
+ const ESPEAK_NG_FOLDER = 'espeak-ng-530bf0a';
30
+ const ESPEAK_NG_MIRROR = `https://lfs-oinclusionista.jrocha.dev.br/${ESPEAK_NG_FOLDER}`;
31
+
32
+ /**
33
+ * The licence texts, each copied byte for byte from a local file (sha256 of the copy, with CRLF read as LF).
34
+ * · Apache-2.0: the vosk-browser upstream text as the mirror holds it; its terms match, word for word, the Apache-2.0 text of
35
+ * `node_modules/detect-libc/LICENSE` up to «END OF TERMS AND CONDITIONS» (the appendix, a how-to, is not in it).
36
+ * · MIT: the permission notice and disclaimer only — from «Permission is hereby granted» to the end — of
37
+ * `node_modules/pixi.js/LICENSE`. The copyright line above it is each project's own, written per group below.
38
+ * · GPL-3.0: the licence file of the `espeak-ng` 1.0.2 npm package, the build the engine used before its own (the FSF's current
39
+ * text; eSpeak NG's `COPYING` is the same licence in the FSF's earlier wording, with `http://` addresses).
40
+ */
41
+ export const LICENCE_TEXTS = Object.freeze({
42
+ 'Apache-2.0': { file: 'Apache-2.0.txt', sha256: 'bb618af833c817ab01c1564bd3ec75ba4b4f9cf30910a4a2168e30a674ee8cc6',
43
+ from: 'the-inclusionist-lfs/vosk-browser-dynamic-execution-0/LICENSE' },
44
+ MIT: { file: 'MIT.txt', sha256: '89807acf2309bd285f033404ee78581602f3cd9b819a16ac2f0e5f60ff4a473e',
45
+ from: 'node_modules/pixi.js/LICENSE (from «Permission is hereby granted» to the end)' },
46
+ 'GPL-3.0': { file: 'GPL-3.0.txt', sha256: '3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986',
47
+ from: 'node_modules/espeak-ng/LICENSE (npm espeak-ng 1.0.2)' },
48
+ });
49
+
50
+ /** Upstream NOTICE files, copied unchanged. */
51
+ export const NOTICE_TEXTS = Object.freeze({
52
+ 'vosk-browser': { file: 'vosk-browser.NOTICE.txt', sha256: '31dac6be41950e1c649686f51a1fe1b47c9cdcd993def80bd104f85df2badd5c',
53
+ from: 'the-inclusionist-lfs/vosk-browser-dynamic-execution-0/NOTICE' },
54
+ });
55
+
56
+ /**
57
+ * One group per upstream project. `ids` are catalogue id prefixes: an id belongs to a group when it equals one or continues it
58
+ * after a colon. `copyright` holds lines as a local file states them; `copyrightUnverified` says why there is none.
59
+ */
60
+ export const THIRD_PARTY = Object.freeze([
61
+ {
62
+ key: 'mediapipe-tasks-vision',
63
+ ids: ['visao'],
64
+ project: 'MediaPipe tasks-vision (Google): the runtime and the Face Landmarker, Gesture Recognizer and Hand Landmarker models',
65
+ version: '@mediapipe/tasks-vision 1.0.1; models float16, version 1',
66
+ spdx: 'Apache-2.0',
67
+ licence: 'Apache-2.0',
68
+ copyright: [],
69
+ copyrightUnverified: 'the runtime files carry no licence header, the .task bundles carry no licence file, and the package is not installed where this was written',
70
+ notice: [
71
+ 'Obtained unchanged from https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@1.0.1 (runtime) and https://storage.googleapis.com/mediapipe-models (models).',
72
+ 'Licence as stated by the project\'s mirror (the-inclusionist-lfs/mediapipe-tasks-vision-1.0.1/LICENSE.md) and ADR-0203\'s erratum.',
73
+ 'UNVERIFIED: the hand and gesture model cards were not read (engine issue #192), and whether upstream publishes a NOTICE file.',
74
+ ],
75
+ },
76
+ {
77
+ key: 'espeak-ng',
78
+ ids: ['voz:runtime:fonemas'],
79
+ project: 'eSpeak NG, built for the browser (WebAssembly) by The Inclusionist',
80
+ version: `eSpeak NG commit ${ESPEAK_NG_COMMIT} (master of 2023-09-27, between the releases 1.51 and 1.52.0), Emscripten 3.1.49`,
81
+ spdx: 'GPL-3.0-or-later',
82
+ licence: 'GPL-3.0',
83
+ copyright: [
84
+ 'Copyright (C) 2005 to 2007 by Jonathan Duddington', 'Copyright (C) 2005 to 2011 by Jonathan Duddington',
85
+ 'Copyright (C) 2005 to 2013 by Jonathan Duddington', 'Copyright (C) 2005 to 2014 by Jonathan Duddington',
86
+ 'Copyright (C) 2005 to 2015 by Jonathan Duddington', 'Copyright (C) 2006 to 2013 by Jonathan Duddington',
87
+ 'Copyright (C) 2012-2018 Reece H. Dunn', 'Copyright (C) 2012-2018, 2021 Reece H. Dunn', 'Copyright (C) 2013-2016 Reece H. Dunn',
88
+ 'Copyright (C) 2013-2017 Reece H. Dunn', 'Copyright (C) 2015-2016 Reece H. Dunn', 'Copyright (C) 2015-2016, 2020 Reece H. Dunn',
89
+ 'Copyright (C) 2015-2017 Reece H. Dunn', 'Copyright (C) 2016 Reece H. Dunn', 'Copyright (C) 2017 Reece H. Dunn',
90
+ 'Copyright (C) 2017-2018 Reece H. Dunn', 'Copyright (C) 2018 Juho Hiltunen', 'Copyright (C) 2021 Juho Hiltunen',
91
+ 'Copyright (C) 2022 Juho Hiltunen', 'Copyright (C) 2022 Ulrich Müller <ulm@gentoo.org>',
92
+ ],
93
+ copyrightFrom: 'the headers of the C files compiled into the binary at that commit — src/espeak-ng.c, the libespeak-ng files the build compiles and src/ucd-tools/src/*.c — each distinct line as written',
94
+ notice: [
95
+ `CHANGED by The Inclusionist: the eSpeak NG command-line program compiled to WebAssembly from commit ${ESPEAK_NG_COMMIT} of https://github.com/espeak-ng/espeak-ng.git, unchanged, with the phoneme data and the pt, es, en, de and fr dictionaries embedded, and linked so that it never evaluates text as code (-s DYNAMIC_EXECUTION=0). Recipe: the engine's scripts/models/build-espeak-ng.ps1.`,
96
+ 'The binary also contains ucd-tools (GPL-3.0-or-later) with tables generated from the Unicode Character Database (the Unicode licence, COPYING.UCD in the source), and the Emscripten runtime and musl (MIT).',
97
+ 'Where its Corresponding Source is: SOURCE, beside this file.',
98
+ ],
99
+ source: [
100
+ 'eSpeak NG in WebAssembly: where the Corresponding Source of the files in this folder is',
101
+ '',
102
+ 'The files here, espeak-ng.js and espeak-ng.wasm, are eSpeak NG built for the browser by The Inclusionist. They are licensed',
103
+ 'under the GNU General Public License, version 3 or later: the full text is LICENSE, beside this file.',
104
+ '',
105
+ 'Their Corresponding Source (GPL-3.0, section 6) is:',
106
+ `- eSpeak NG at commit ${ESPEAK_NG_COMMIT}, unchanged: https://github.com/espeak-ng/espeak-ng.git;`,
107
+ '- the build recipe, scripts/models/build-espeak-ng.ps1 in The Inclusionist engine, which pins that commit, the Emscripten',
108
+ ' toolchain (the emscripten/emsdk 3.1.49 image, by digest), the data it embeds and every flag. Run as it is, it writes these',
109
+ ' two files byte for byte: the build checks each against the sha256 in the engine\'s heavy-file catalogue before writing it.',
110
+ '',
111
+ 'A copy of both is published beside the build, in',
112
+ `${ESPEAK_NG_MIRROR}/corresponding-source/ :`,
113
+ `the source at that commit (${ESPEAK_NG_FOLDER}.tar.gz, made with git archive) and the recipe (build-espeak-ng.ps1).`,
114
+ ],
115
+ },
116
+ {
117
+ key: 'onnxruntime-web',
118
+ ids: ['voz:runtime:onnx'],
119
+ project: 'ONNX Runtime Web (Microsoft)',
120
+ version: 'onnxruntime-web 1.27.0',
121
+ spdx: 'MIT',
122
+ licence: 'MIT',
123
+ copyright: ['Copyright (c) Microsoft Corporation. All rights reserved.'],
124
+ copyrightFrom: 'the header of dist/ort.webgpu.bundle.min.mjs',
125
+ notice: [
126
+ 'Three files of the npm package onnxruntime-web 1.27.0, unchanged (https://cdn.jsdelivr.net/npm/onnxruntime-web@1.27.0).',
127
+ 'The package declares MIT (package.json "license") and ships no licence file; the copyright line is the bundle\'s own header.',
128
+ 'UNVERIFIED: the third-party notices of the libraries compiled into the .wasm are not held locally.',
129
+ ],
130
+ },
131
+ {
132
+ key: 'kokoro',
133
+ ids: ['voz:kokoro'],
134
+ project: 'Kokoro-82M (hexgrad), ONNX export by onnx-community',
135
+ version: 'v1.0 (onnx-community/Kokoro-82M-v1.0-ONNX)',
136
+ spdx: 'Apache-2.0',
137
+ licence: 'Apache-2.0',
138
+ copyright: [],
139
+ copyrightUnverified: 'no copyright line of hexgrad or onnx-community is held locally',
140
+ notice: [
141
+ 'Obtained unchanged from https://huggingface.co/onnx-community/Kokoro-82M-v1.0-ONNX: the fp32 model, the tokenizer and one style table per voice.',
142
+ 'Kokoro-82M (hexgrad), Apache-2.0. Its model card credits training audio under CC BY licences: Koniwa (CC BY 3.0) and SIWIS (CC BY 4.0).',
143
+ ],
144
+ },
145
+ {
146
+ key: 'whisper-small',
147
+ ids: ['reading:pt'],
148
+ project: 'Whisper small (OpenAI), exported to ONNX by The Inclusionist',
149
+ version: 'openai/whisper-small',
150
+ spdx: 'Apache-2.0',
151
+ licence: 'Apache-2.0',
152
+ copyright: [],
153
+ copyrightUnverified: 'no copyright line of OpenAI for this model is held locally',
154
+ notice: [
155
+ 'Weights: https://huggingface.co/openai/whisper-small, Apache-2.0.',
156
+ 'CHANGED by The Inclusionist: exported to ONNX and quantized to 8 bits (encoder, decoder, decoder with past); the tokenizer, configuration and mel filterbank are copied unchanged. Recipe: the engine\'s scripts/models/export-whisper-small.py.',
157
+ ],
158
+ },
159
+ {
160
+ key: 'moonshine-streaming-small-en',
161
+ ids: ['reading:en'],
162
+ project: 'Moonshine streaming small (Useful Sensors / Moonshine AI), ONNX export by Workmind',
163
+ version: 'Workmind/moonshine-streaming-small-ONNX (base model UsefulSensors/moonshine-streaming-small)',
164
+ spdx: 'MIT',
165
+ licence: 'MIT',
166
+ copyright: [],
167
+ copyrightUnverified: 'the export declares `license: mit`, but no copyright line of Useful Sensors, Moonshine AI or Workmind is held locally',
168
+ notice: [
169
+ 'Obtained unchanged from https://huggingface.co/Workmind/moonshine-streaming-small-ONNX.',
170
+ ],
171
+ },
172
+ {
173
+ key: 'moonshine-streaming-small-es',
174
+ ids: ['reading:es'],
175
+ project: 'Moonshine streaming small es (Moonshine AI / Useful Sensors), exported to ONNX by The Inclusionist',
176
+ version: 'moonshine-ai/moonshine-streaming-small-es, revision 8cb0974f29ca24d6b645518c430efc8c57cd0073',
177
+ spdx: 'MIT',
178
+ licence: 'MIT',
179
+ copyright: [],
180
+ copyrightUnverified: 'the model declares `license: mit`, but no copyright line of Moonshine AI or Useful Sensors is held locally',
181
+ notice: [
182
+ 'Weights: https://huggingface.co/moonshine-ai/moonshine-streaming-small-es at the revision above.',
183
+ 'CHANGED by The Inclusionist: exported to ONNX (encoder fp32, decoders quantized to 8 bits); the tokenizer and configuration are copied unchanged. Recipe: the engine\'s scripts/models/export-moonshine-streaming-es.py.',
184
+ ],
185
+ },
186
+ {
187
+ key: 'vosk-browser',
188
+ ids: ['commands:runtime'],
189
+ project: 'Vosk for the browser: vosk-browser, vosk-api and Kaldi, built by The Inclusionist',
190
+ version: 'lichess-org/vosk-browser 50a6347 with alphacep/vosk-api d714dff',
191
+ spdx: 'Apache-2.0',
192
+ licence: 'Apache-2.0',
193
+ copyright: ['Copyright 2020-2022 Ciaran O\'Reilly', 'Copyright 2020, Denis Treskunov', 'Copyright 2019-2022 Alpha Cephei Inc. All Rights Reserved.'],
194
+ copyrightFrom: 'the upstream vosk-browser NOTICE',
195
+ upstreamNotice: 'vosk-browser',
196
+ notice: [
197
+ 'CHANGED by The Inclusionist: built from the sources above with one added link flag, -s DYNAMIC_EXECUTION=0, so the runtime runs under a Content-Security-Policy without \'unsafe-eval\'. Recipe and patch: the engine\'s scripts/models/build-vosk-browser.ps1 and scripts/models/vosk-browser-dynamic-execution.patch.',
198
+ 'The binary also contains Kaldi, OpenFst, CLAPACK (BSD-3-Clause), clapack-wasm, zlib (Zlib), libarchive (BSD-2-Clause) and Emscripten and musl (MIT); each one\'s notice is in the upstream NOTICE above.',
199
+ ],
200
+ },
201
+ {
202
+ key: 'vosk-models',
203
+ ids: ['commands:model'],
204
+ project: 'Vosk small models (Alpha Cephei)',
205
+ version: 'vosk-model-small-pt-0.3, vosk-model-small-en-us-0.15, vosk-model-small-es-0.42',
206
+ spdx: 'Apache-2.0',
207
+ licence: 'Apache-2.0',
208
+ copyright: ['Copyright 2020 Alpha Cephei Inc (vosk-model-small-en-us-0.15)', 'Copyright 2022-2050 AC Technologies LLC (vosk-model-small-es-0.42)'],
209
+ copyrightFrom: 'each archive\'s README; vosk-model-small-pt-0.3\'s states none',
210
+ notice: [
211
+ 'From https://alphacephei.com/vosk/models, which states Apache-2.0; the archives themselves state no licence.',
212
+ 'CHANGED by The Inclusionist: repacked unchanged from the upstream zips into the .tar.gz vosk-browser loads (the engine\'s scripts/models/repack-vosk-models.py).',
213
+ ],
214
+ },
215
+ ]);
216
+
217
+ /** The group an id belongs to, or `null`. */
218
+ export function groupOf(id, groups = THIRD_PARTY) {
219
+ return groups.find((g) => g.ids.some((p) => id === p || id.startsWith(`${p}:`))) ?? null;
220
+ }
221
+
222
+ const readStored = (file) => readFileSync(new URL(file, HERE), 'utf8');
223
+
224
+ /** The files that sit beside a group's heavy files: `LICENSE`, `NOTICE`, and `SOURCE` where the group has one. */
225
+ export function licenceFilesFor(group, read = readStored) {
226
+ const text = read(LICENCE_TEXTS[group.licence].file);
227
+ const copyright = group.copyright.length ? group.copyright : [`Copyright: UNVERIFIED — ${group.copyrightUnverified}.`];
228
+ const licence = group.licence === 'MIT' ? `MIT License\n\n${copyright.join('\n')}\n\n${text}` : text;
229
+ const own = [
230
+ `${group.project}`,
231
+ `${group.version}`,
232
+ `Licence: ${group.spdx}. The full text is LICENSE, beside this file.`,
233
+ ...(group.copyright.length ? [`Copyright (source: ${group.copyrightFrom}):`, ...group.copyright.map((c) => ` ${c}`)] : copyright),
234
+ '',
235
+ ...group.notice,
236
+ ].join('\n');
237
+ const notice = group.upstreamNotice
238
+ ? `${read(NOTICE_TEXTS[group.upstreamNotice].file).trimEnd()}\n\n---\n\nAddendum by The Inclusionist, which distributes this build:\n\n${own}\n`
239
+ : `${own}\n`;
240
+ const files = { LICENSE: licence, NOTICE: notice };
241
+ if (group.source) files.SOURCE = `${group.source.join('\n')}\n`;
242
+ return files;
243
+ }
244
+
245
+ /** `heavy/THIRD-PARTY-NOTICES.md`: each project in this delivery, its licence, its copyright, and where its texts sit. */
246
+ export function thirdPartyNotices(written) {
247
+ const lines = [
248
+ '# Third-party notices',
249
+ '',
250
+ 'The files under `heavy/` are not The Inclusionist\'s: each belongs to the project listed below and is distributed under that',
251
+ 'project\'s licence. Every folder that holds one of them also holds the project\'s `LICENSE` and `NOTICE`.',
252
+ '',
253
+ ];
254
+ for (const { group, folders } of written) {
255
+ lines.push(`## ${group.project}`, '');
256
+ lines.push(`- **Version:** ${group.version}`);
257
+ lines.push(`- **Licence (SPDX):** \`${group.spdx}\``);
258
+ if (group.copyright.length) lines.push(`- **Copyright** (source: ${group.copyrightFrom}): ${group.copyright.join(' · ')}`);
259
+ else lines.push(`- **Copyright:** UNVERIFIED — ${group.copyrightUnverified}.`);
260
+ lines.push('- **Licence text and notices in this delivery:**');
261
+ for (const f of folders) {
262
+ const names = ['LICENSE', 'NOTICE', ...(group.source ? ['SOURCE'] : [])];
263
+ lines.push(` - ${names.map((n) => `\`${f}/${n}\``).join(', ')}`);
264
+ }
265
+ lines.push('');
266
+ }
267
+ return `${lines.join('\n').trimEnd()}\n`;
268
+ }
269
+
270
+ /**
271
+ * Writes the licence files beside every heavy file present in the delivery, and `heavy/THIRD-PARTY-NOTICES.md`.
272
+ * `present` is `[{ id, path }]`, `path` being the delivery path (`heavy/<host><path>`). Throws when a file has no group, or when
273
+ * two groups would write the same folder — one `LICENSE` cannot speak for two projects.
274
+ */
275
+ export function writeLicences({ destination, present, groups = THIRD_PARTY, read = readStored }) {
276
+ const byGroup = new Map();
277
+ const owner = new Map();
278
+ for (const { id, path } of present) {
279
+ const group = groupOf(id, groups);
280
+ if (!group) throw new Error(`no licence recorded for ${id} in scripts/licences/third-party.mjs`);
281
+ const folder = dirname(path).replaceAll('\\', '/');
282
+ const other = owner.get(folder);
283
+ if (other && other !== group) throw new Error(`${folder} would hold the licence of both ${other.key} and ${group.key}`);
284
+ owner.set(folder, group);
285
+ if (!byGroup.has(group)) byGroup.set(group, new Set());
286
+ byGroup.get(group).add(folder);
287
+ }
288
+ const written = [];
289
+ for (const group of groups) {
290
+ if (!byGroup.has(group)) continue;
291
+ const files = licenceFilesFor(group, read);
292
+ const folders = [...byGroup.get(group)].sort();
293
+ for (const folder of folders) {
294
+ mkdirSync(join(destination, folder), { recursive: true });
295
+ for (const [name, text] of Object.entries(files)) writeFileSync(join(destination, folder, name), text);
296
+ }
297
+ written.push({ group, folders: folders.map((f) => f.replace(/^heavy\//, '')) });
298
+ }
299
+ if (written.length) writeFileSync(join(destination, 'heavy', 'THIRD-PARTY-NOTICES.md'), thirdPartyNotices(written));
300
+ return written.map(({ group, folders }) => ({ key: group.key, folders }));
301
+ }
@@ -0,0 +1,268 @@
1
+ Vosk-Browser
2
+ Copyright 2020-2022 Ciaran O'Reilly
3
+
4
+ The Initial Developer of the the WASM bindings
5
+ (https://github.com/dtreskunov/tiny-kaldi) for the VOSK API is Denis
6
+ Treskunov (https://github.com/dtreskunov).
7
+ Copyright 2020, Denis Treskunov
8
+
9
+ The Developer of the VOSK API (https://github.com/alphacep/vosk-api) is
10
+ Alpha Cephei Inc (https://alphacephei.com/en/).
11
+ Copyright 2019-2022 Alpha Cephei Inc. All Rights Reserved.
12
+
13
+ Licensed under the Apache License, Version 2.0 (the "License"); you may not
14
+ use this file except in compliance with the License. You may obtain a copy
15
+ of the License at
16
+
17
+ http://www.apache.org/licenses/LICENSE-2.0
18
+
19
+ THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
20
+ KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
21
+ WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
22
+ MERCHANTABLITY OR NON-INFRINGEMENT.
23
+ See the Apache 2 License for the specific language governing permissions and
24
+ limitations under the License.
25
+
26
+ ---
27
+
28
+ kaldi:
29
+
30
+ Each of the files comprising Kaldi v1.0 have been separately licensed by
31
+ their respective author(s) under the terms of the Apache License v 2.0 (set
32
+ forth below). The source code headers for each file specifies the individual
33
+ authors and source material for that file as well the corresponding copyright
34
+ notice. For reference purposes only: A cumulative list of all individual
35
+ contributors and original source material as well as the full text of the Apache
36
+ License v 2.0 are set forth below.
37
+
38
+ Individual Contributors (in alphabetical order)
39
+
40
+ Mohit Agarwal
41
+ Tanel Alumae
42
+ Gilles Boulianne
43
+ Lukas Burget
44
+ Dogan Can
45
+ Guoguo Chen
46
+ Gaofeng Cheng
47
+ Cisco Corporation
48
+ Pavel Denisov
49
+ Ilya Edrenkin
50
+ Ewald Enzinger
51
+ Joachim Fainberg
52
+ Daniel Galvez
53
+ Pegah Ghahremani
54
+ Arnab Ghoshal
55
+ Ondrej Glembek
56
+ Go Vivace Inc.
57
+ Allen Guo
58
+ Hossein Hadian
59
+ Lv Hang
60
+ Mirko Hannemann
61
+ Hendy Irawan
62
+ Navdeep Jaitly
63
+ Johns Hopkins University
64
+ Shiyin Kang
65
+ Kirill Katsnelson
66
+ Tom Ko
67
+ Danijel Korzinek
68
+ Gaurav Kumar
69
+ Ke Li
70
+ Matthew Maciejewski
71
+ Vimal Manohar
72
+ Yajie Miao
73
+ Microsoft Corporation
74
+ Petr Motlicek
75
+ Xingyu Na
76
+ Vincent Nguyen
77
+ Lucas Ondel
78
+ Vassil Panayotov
79
+ Vijayaditya Peddinti
80
+ Phonexia s.r.o.
81
+ Ondrej Platek
82
+ Daniel Povey
83
+ Yanmin Qian
84
+ Ariya Rastrow
85
+ Saarland University
86
+ Omid Sadjadi
87
+ Petr Schwarz
88
+ Yiwen Shao
89
+ Nickolay V. Shmyrev
90
+ Jan Silovsky
91
+ Eduardo Silva
92
+ Peter Smit
93
+ David Snyder
94
+ Alexander Solovets
95
+ Georg Stemmer
96
+ Pawel Swietojanski
97
+ Jan "Yenda" Trmal
98
+ Albert Vernon
99
+ Karel Vesely
100
+ Yiming Wang
101
+ Shinji Watanabe
102
+ Minhua Wu
103
+ Haihua Xu
104
+ Hainan Xu
105
+ Xiaohui Zhang
106
+
107
+ Other Source Material
108
+
109
+ This project includes a port and modification of materials from JAMA: A Java
110
+ Matrix Package under the following notice: "This software is a cooperative
111
+ product of The MathWorks and the National Institute of Standards and Technology
112
+ (NIST) which has been released to the public domain." This notice and the
113
+ original code is available at http://math.nist.gov/javanumerics/jama/
114
+
115
+ This project includes a modified version of code published in Malvar, H.,
116
+ "Signal processing with lapped transforms," Artech House, Inc., 1992. The
117
+ current copyright holder, Henrique S. Malvar, has given his permission for the
118
+ release of this modified version under the Apache License 2.0.
119
+
120
+ This project includes material from the OpenFST Library v1.2.7 available at
121
+ http://www.openfst.org and released under the Apache License v. 2.0.
122
+
123
+ [OpenFst COPYING file begins here]
124
+
125
+ Licensed under the Apache License, Version 2.0 (the "License");
126
+ you may not use these files except in compliance with the License.
127
+ You may obtain a copy of the License at
128
+
129
+ http://www.apache.org/licenses/LICENSE-2.0
130
+
131
+ Unless required by applicable law or agreed to in writing, software
132
+ distributed under the License is distributed on an "AS IS" BASIS,
133
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134
+ See the License for the specific language governing permissions and
135
+ limitations under the License.
136
+
137
+ Copyright 2005-2010 Google, Inc.
138
+
139
+ [OpenFst COPYING file ends here]
140
+
141
+ ---
142
+
143
+ CLAPACK:
144
+
145
+ Copyright (c) 1992-2008 The University of Tennessee. All rights reserved.
146
+
147
+ Redistribution and use in source and binary forms, with or without
148
+ modification, are permitted provided that the following conditions are
149
+ met:
150
+
151
+ - Redistributions of source code must retain the above copyright
152
+ notice, this list of conditions and the following disclaimer.
153
+
154
+ - Redistributions in binary form must reproduce the above copyright
155
+ notice, this list of conditions and the following disclaimer listed
156
+ in this license in the documentation and/or other materials
157
+ provided with the distribution.
158
+
159
+ - Neither the name of the copyright holders nor the names of its
160
+ contributors may be used to endorse or promote products derived from
161
+ this software without specific prior written permission.
162
+
163
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
164
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
165
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
166
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
167
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
168
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
169
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
170
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
171
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
172
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
173
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
174
+
175
+ ---
176
+
177
+ clapack-wasm:
178
+
179
+ Copyright [2020] Mathieu Hu, Laurent Pierron, Emmanuel Vincent, Denis Jouvet (INRIA)
180
+
181
+ Licensed under the Apache License, Version 2.0 (the "License");
182
+ you may not use this file except in compliance with the License.
183
+ You may obtain a copy of the License at
184
+
185
+ http://www.apache.org/licenses/LICENSE-2.0
186
+
187
+ Unless required by applicable law or agreed to in writing, software
188
+ distributed under the License is distributed on an "AS IS" BASIS,
189
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
190
+ See the License for the specific language governing permissions and
191
+ limitations under the License.
192
+
193
+ ---
194
+
195
+ zlib:
196
+
197
+ Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
198
+
199
+ This software is provided 'as-is', without any express or implied
200
+ warranty. In no event will the authors be held liable for any damages
201
+ arising from the use of this software.
202
+
203
+ Permission is granted to anyone to use this software for any purpose,
204
+ including commercial applications, and to alter it and redistribute it
205
+ freely, subject to the following restrictions:
206
+
207
+ 1. The origin of this software must not be misrepresented; you must not
208
+ claim that you wrote the original software. If you use this software
209
+ in a product, an acknowledgment in the product documentation would be
210
+ appreciated but is not required.
211
+ 2. Altered source versions must be plainly marked as such, and must not be
212
+ misrepresented as being the original software.
213
+ 3. This notice may not be removed or altered from any source distribution.
214
+
215
+ ---
216
+
217
+ libarchive:
218
+
219
+ Copyright (c) 2003-2020 Tim Kientzle et al.
220
+ All rights reserved.
221
+
222
+ Redistribution and use in source and binary forms, with or without
223
+ modification, are permitted provided that the following conditions
224
+ are met:
225
+ 1. Redistributions of source code must retain the above copyright
226
+ notice, this list of conditions and the following disclaimer
227
+ in this position and unchanged.
228
+ 2. Redistributions in binary form must reproduce the above copyright
229
+ notice, this list of conditions and the following disclaimer in the
230
+ documentation and/or other materials provided with the distribution.
231
+
232
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
233
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
234
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
235
+ IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
236
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
237
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
238
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
239
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
240
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
241
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
242
+
243
+ ---
244
+
245
+ emscripten and musl:
246
+
247
+ Copyright (c) 2010-2014 Emscripten authors, see AUTHORS file.
248
+ Copyright © 2005-2014 Rich Felker, et al.
249
+
250
+ Permission is hereby granted, free of charge, to any person obtaining a copy
251
+ of this software and associated documentation files (the "Software"), to
252
+ deal in the Software without restriction, including without limitation the
253
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
254
+ sell copies of the Software, and to permit persons to whom the Software is
255
+ furnished to do so, subject to the following conditions:
256
+
257
+ The above copyright notice and this permission notice shall be included in
258
+ all copies or substantial portions of the Software.
259
+
260
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
261
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
262
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
263
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
264
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
265
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
266
+ IN THE SOFTWARE.
267
+
268
+ ---
@@ -1,17 +0,0 @@
1
- // SPDX-License-Identifier: AGPL-3.0-or-later
2
- /**
3
- * ANDA UM PASSO NUM ANEL — passar do último volta ao primeiro, e antes do primeiro está o último.
4
- *
5
- * Era `clampIndex`, que prendia nas pontas "porque o original nunca faz wrap em lista de itens". O ADR-0044
6
- * derrubou isso, e o motivo é de uso, não de gosto: com UM MENU POR TELA, toda lista pode ser um anel, e o
7
- * item mais indesejado (`quit`) fica a UMA tecla do mais urgente (`resume`) sem estar perto dele. Quem não
8
- * enxerga não varre a lista à procura do fim — ela pergunta "e antes do primeiro?" e recebe uma resposta.
9
- *
10
- * A XAG 106 permite o anel exatamente para menu LINEAR, e o proíbe para grade 2-D de blocos: ali "voltar ao
11
- * primeiro" não tem significado espacial.
12
- *
13
- * ⚠️ NAVEGAR LISTA É ANEL; AJUSTAR VALOR É LIMITE. `selectStep` e `rangeStep` (em ui/menu-nav) continuam
14
- * presos nas pontas, e a diferença é real: passar do volume máximo para o mínimo com uma tecla é um susto,
15
- * não uma conveniência — e num jogo com pistas de áudio para cegueira, um susto de volume é dano.
16
- */
17
- export declare function passoNoAnel(len: number, idx: number, delta: number): number;