@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.
- package/README.md +120 -78
- package/app/css/style.css +761 -377
- package/app/public/vendor/fonts/playwrite-cu.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-es-deco.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-es.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-gb-j.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-gb-s.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-pe.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-pt.woff2 +0 -0
- package/app/public/vendor/fonts-licences/NOTICE.txt +166 -0
- package/app/public/vendor/fonts-licences/OFL-1.1.txt +86 -0
- package/app/public/vendor/fonts.css +36 -84
- package/dist-pkg/boot/create-game.d.ts +499 -219
- package/dist-pkg/boot/create-game.js +3944 -562
- package/dist-pkg/core/a11y-sr.d.ts +25 -3
- package/dist-pkg/core/a11y-sr.js +38 -19
- package/dist-pkg/core/accessible-label.d.ts +17 -0
- package/dist-pkg/core/accessible-label.js +37 -0
- package/dist-pkg/core/accommodation-subjects.d.ts +26 -0
- package/dist-pkg/core/accommodation-subjects.js +32 -0
- package/dist-pkg/core/accommodations.d.ts +125 -0
- package/dist-pkg/core/accommodations.js +195 -0
- package/dist-pkg/core/actions.d.ts +108 -55
- package/dist-pkg/core/actions.js +122 -71
- package/dist-pkg/core/calm-mode.d.ts +31 -0
- package/dist-pkg/core/calm-mode.js +47 -0
- package/dist-pkg/core/camera-cycle.d.ts +15 -0
- package/dist-pkg/core/camera-cycle.js +7 -0
- package/dist-pkg/core/caption-duration.d.ts +15 -0
- package/dist-pkg/core/caption-duration.js +19 -0
- package/dist-pkg/core/cartridge-problems.d.ts +34 -0
- package/dist-pkg/core/cartridge-problems.js +53 -0
- package/dist-pkg/core/constants.d.ts +0 -54
- package/dist-pkg/core/constants.js +9 -76
- package/dist-pkg/core/contract.d.ts +142 -164
- package/dist-pkg/core/contract.js +222 -208
- package/dist-pkg/core/dom-query.d.ts +4 -4
- package/dist-pkg/core/dom-query.js +12 -20
- package/dist-pkg/core/entity.d.ts +62 -77
- package/dist-pkg/core/entity.js +18 -32
- package/dist-pkg/core/escape-html.d.ts +9 -10
- package/dist-pkg/core/escape-html.js +16 -20
- package/dist-pkg/core/flash-threshold.d.ts +17 -0
- package/dist-pkg/core/flash-threshold.js +113 -0
- package/dist-pkg/core/game-speed.d.ts +11 -0
- package/dist-pkg/core/game-speed.js +16 -0
- package/dist-pkg/core/genres.d.ts +20 -0
- package/dist-pkg/core/genres.js +44 -0
- package/dist-pkg/core/i18n.d.ts +71 -60
- package/dist-pkg/core/i18n.js +186 -200
- package/dist-pkg/core/loop.d.ts +17 -6
- package/dist-pkg/core/loop.js +26 -26
- package/dist-pkg/core/pause-icon-catalogue.d.ts +15 -0
- package/dist-pkg/core/pause-icon-catalogue.js +54 -0
- package/dist-pkg/core/ring.d.ts +17 -0
- package/dist-pkg/core/ring.js +29 -0
- package/dist-pkg/core/rng.d.ts +7 -12
- package/dist-pkg/core/rng.js +23 -53
- package/dist-pkg/core/route.d.ts +26 -26
- package/dist-pkg/core/route.js +126 -121
- package/dist-pkg/core/scenes.d.ts +37 -40
- package/dist-pkg/core/scenes.js +41 -43
- package/dist-pkg/core/screens.d.ts +4 -4
- package/dist-pkg/core/screens.js +11 -16
- package/dist-pkg/core/session-clock.d.ts +23 -0
- package/dist-pkg/core/session-clock.js +37 -0
- package/dist-pkg/core/setting-defaults.d.ts +61 -0
- package/dist-pkg/core/setting-defaults.js +66 -0
- package/dist-pkg/core/speech-rate.d.ts +29 -0
- package/dist-pkg/core/speech-rate.js +47 -0
- package/dist-pkg/core/state.d.ts +118 -118
- package/dist-pkg/core/state.js +322 -297
- package/dist-pkg/core/visual-cycles.d.ts +30 -0
- package/dist-pkg/core/visual-cycles.js +52 -0
- package/dist-pkg/core/visual-state.d.ts +13 -0
- package/dist-pkg/core/visual-state.js +6 -0
- package/dist-pkg/educational/activities-registry.d.ts +1 -1
- package/dist-pkg/educational/activities-registry.js +9 -8
- package/dist-pkg/educational/adaptive-engine.d.ts +11 -11
- package/dist-pkg/educational/adaptive-engine.js +17 -17
- package/dist-pkg/educational/segment-bar.d.ts +12 -12
- package/dist-pkg/educational/segment-bar.js +9 -9
- package/dist-pkg/i18n/en.js +324 -223
- package/dist-pkg/i18n/es.js +323 -223
- package/dist-pkg/i18n/pt.js +348 -226
- package/dist-pkg/input/default-bindings.d.ts +37 -38
- package/dist-pkg/input/default-bindings.js +127 -144
- package/dist-pkg/input/devices.d.ts +7 -7
- package/dist-pkg/input/devices.js +17 -16
- package/dist-pkg/input/edges.d.ts +23 -32
- package/dist-pkg/input/edges.js +23 -28
- package/dist-pkg/input/empathy-filter.d.ts +22 -0
- package/dist-pkg/input/empathy-filter.js +34 -0
- package/dist-pkg/input/face-map.d.ts +96 -0
- package/dist-pkg/input/face-map.js +255 -0
- package/dist-pkg/input/face-signals.d.ts +40 -0
- package/dist-pkg/input/face-signals.js +48 -0
- package/dist-pkg/input/gamepad.d.ts +195 -145
- package/dist-pkg/input/gamepad.js +383 -556
- package/dist-pkg/input/gaze-cycle.d.ts +64 -0
- package/dist-pkg/input/gaze-cycle.js +133 -0
- package/dist-pkg/input/gaze-relative.d.ts +68 -0
- package/dist-pkg/input/gaze-relative.js +142 -0
- package/dist-pkg/input/hand-map.d.ts +28 -0
- package/dist-pkg/input/hand-map.js +142 -0
- package/dist-pkg/input/input-cooldown.d.ts +17 -0
- package/dist-pkg/input/input-cooldown.js +39 -0
- package/dist-pkg/input/key-default.d.ts +30 -0
- package/dist-pkg/input/key-default.js +60 -0
- package/dist-pkg/input/keyboard-runtime.d.ts +15 -21
- package/dist-pkg/input/keyboard-runtime.js +23 -27
- package/dist-pkg/input/keyboard.d.ts +68 -63
- package/dist-pkg/input/keyboard.js +83 -105
- package/dist-pkg/input/keydown.d.ts +123 -137
- package/dist-pkg/input/keydown.js +284 -289
- package/dist-pkg/input/latch-edge.d.ts +33 -21
- package/dist-pkg/input/latch-edge.js +34 -35
- package/dist-pkg/input/latch-scope.d.ts +51 -50
- package/dist-pkg/input/latch-scope.js +61 -82
- package/dist-pkg/input/latch-store.d.ts +26 -30
- package/dist-pkg/input/latch-store.js +42 -50
- package/dist-pkg/input/latch-sync.d.ts +29 -29
- package/dist-pkg/input/latch-sync.js +25 -25
- package/dist-pkg/input/latch.d.ts +14 -17
- package/dist-pkg/input/latch.js +29 -37
- package/dist-pkg/input/pad-defaults.d.ts +13 -16
- package/dist-pkg/input/pad-defaults.js +21 -28
- package/dist-pkg/input/pad-reading.d.ts +76 -0
- package/dist-pkg/input/pad-reading.js +169 -0
- package/dist-pkg/input/pad-wizard.d.ts +99 -0
- package/dist-pkg/input/pad-wizard.js +256 -0
- package/dist-pkg/input/pointer-space.d.ts +19 -20
- package/dist-pkg/input/pointer-space.js +27 -32
- package/dist-pkg/input/pointer.d.ts +39 -40
- package/dist-pkg/input/pointer.js +42 -45
- package/dist-pkg/input/state.d.ts +101 -89
- package/dist-pkg/input/state.js +54 -134
- package/dist-pkg/input/switch-scan.d.ts +59 -0
- package/dist-pkg/input/switch-scan.js +67 -0
- package/dist-pkg/input/synthetic-source.d.ts +42 -0
- package/dist-pkg/input/synthetic-source.js +57 -0
- package/dist-pkg/input/touch-bindings.d.ts +127 -116
- package/dist-pkg/input/touch-bindings.js +158 -173
- package/dist-pkg/input/touch.d.ts +147 -72
- package/dist-pkg/input/touch.js +362 -126
- package/dist-pkg/input/transport-in-use.d.ts +107 -0
- package/dist-pkg/input/transport-in-use.js +130 -0
- package/dist-pkg/input/transports.d.ts +90 -117
- package/dist-pkg/input/transports.js +104 -106
- package/dist-pkg/input/virtual-controller.d.ts +82 -0
- package/dist-pkg/input/virtual-controller.js +69 -0
- package/dist-pkg/input/vocabulary-migration.d.ts +50 -49
- package/dist-pkg/input/vocabulary-migration.js +80 -79
- package/dist-pkg/input/voice-map.d.ts +59 -0
- package/dist-pkg/input/voice-map.js +123 -0
- package/dist-pkg/platform/audio-ambient.d.ts +13 -2
- package/dist-pkg/platform/audio-ambient.js +14 -14
- package/dist-pkg/platform/audio-earcons.d.ts +20 -19
- package/dist-pkg/platform/audio-earcons.js +51 -42
- package/dist-pkg/platform/audio-jingles.js +9 -10
- package/dist-pkg/platform/audio-mixer.d.ts +14 -2
- package/dist-pkg/platform/audio-mixer.js +31 -39
- package/dist-pkg/platform/audio-sonar.d.ts +49 -152
- package/dist-pkg/platform/audio-sonar.js +124 -302
- package/dist-pkg/platform/audio.d.ts +62 -19
- package/dist-pkg/platform/audio.js +193 -168
- package/dist-pkg/platform/choose-by-voice.d.ts +70 -0
- package/dist-pkg/platform/choose-by-voice.js +157 -0
- package/dist-pkg/platform/flash-sampler.d.ts +19 -0
- package/dist-pkg/platform/flash-sampler.js +79 -0
- package/dist-pkg/platform/font-library.d.ts +77 -0
- package/dist-pkg/platform/font-library.js +98 -0
- package/dist-pkg/platform/font-library.json +721 -0
- package/dist-pkg/platform/heavy-catalogue.d.ts +77 -0
- package/dist-pkg/platform/heavy-catalogue.js +256 -0
- package/dist-pkg/platform/heavy-mirror.d.ts +20 -0
- package/dist-pkg/platform/heavy-mirror.js +73 -0
- package/dist-pkg/platform/heavy.d.ts +136 -0
- package/dist-pkg/platform/heavy.js +324 -0
- package/dist-pkg/platform/interruptible-speech.d.ts +23 -16
- package/dist-pkg/platform/interruptible-speech.js +77 -54
- package/dist-pkg/platform/kokoro-port.d.ts +27 -0
- package/dist-pkg/platform/kokoro-port.js +50 -0
- package/dist-pkg/platform/kokoro-runtime.d.ts +20 -0
- package/dist-pkg/platform/kokoro-runtime.js +52 -0
- package/dist-pkg/platform/kokoro.d.ts +70 -0
- package/dist-pkg/platform/kokoro.js +133 -0
- package/dist-pkg/platform/listener-scope.d.ts +12 -0
- package/dist-pkg/platform/listener-scope.js +90 -0
- package/dist-pkg/platform/locale-host.d.ts +14 -0
- package/dist-pkg/platform/locale-host.js +45 -0
- package/dist-pkg/platform/microphone.d.ts +51 -0
- package/dist-pkg/platform/microphone.js +118 -0
- package/dist-pkg/platform/onnx-runtime.d.ts +34 -0
- package/dist-pkg/platform/onnx-runtime.js +42 -0
- package/dist-pkg/platform/reading-in-worker.d.ts +64 -0
- package/dist-pkg/platform/reading-in-worker.js +125 -0
- package/dist-pkg/platform/reading-model.d.ts +94 -0
- package/dist-pkg/platform/reading-model.js +272 -0
- package/dist-pkg/platform/reading-runtime.d.ts +24 -0
- package/dist-pkg/platform/reading-runtime.js +164 -0
- package/dist-pkg/platform/reading-worker.d.ts +41 -0
- package/dist-pkg/platform/reading-worker.js +58 -0
- package/dist-pkg/platform/reading.d.ts +80 -0
- package/dist-pkg/platform/reading.js +136 -0
- package/dist-pkg/platform/speech-recognition.d.ts +60 -0
- package/dist-pkg/platform/speech-recognition.js +104 -0
- package/dist-pkg/platform/speech.d.ts +23 -1
- package/dist-pkg/platform/speech.js +29 -18
- package/dist-pkg/platform/storage-keys.d.ts +96 -0
- package/dist-pkg/platform/storage-keys.js +106 -0
- package/dist-pkg/platform/storage.d.ts +46 -111
- package/dist-pkg/platform/storage.js +104 -169
- package/dist-pkg/platform/tts.d.ts +85 -39
- package/dist-pkg/platform/tts.js +447 -127
- package/dist-pkg/platform/vision-loop.d.ts +23 -0
- package/dist-pkg/platform/vision-loop.js +56 -0
- package/dist-pkg/platform/vision.d.ts +132 -0
- package/dist-pkg/platform/vision.js +117 -0
- package/dist-pkg/platform/voice-listener.d.ts +40 -0
- package/dist-pkg/platform/voice-listener.js +88 -0
- package/dist-pkg/platform/voice-plan.d.ts +15 -98
- package/dist-pkg/platform/voice-plan.js +56 -143
- package/dist-pkg/platform/vosk-runtime.d.ts +96 -0
- package/dist-pkg/platform/vosk-runtime.js +151 -0
- package/dist-pkg/platform/vosk-vocabulary.d.ts +6 -0
- package/dist-pkg/platform/vosk-vocabulary.js +178 -0
- package/dist-pkg/render/canvas.d.ts +13 -7
- package/dist-pkg/render/canvas.js +13 -13
- package/dist-pkg/render/crt.d.ts +48 -12
- package/dist-pkg/render/crt.js +78 -80
- package/dist-pkg/render/cvd-matrices.d.ts +22 -18
- package/dist-pkg/render/cvd-matrices.js +37 -38
- package/dist-pkg/render/hc-role-data.d.ts +7 -7
- package/dist-pkg/render/hc-role-data.js +14 -14
- package/dist-pkg/render/high-contrast.d.ts +67 -56
- package/dist-pkg/render/high-contrast.js +226 -217
- package/dist-pkg/render/low-vision-drawing.d.ts +5 -0
- package/dist-pkg/render/low-vision-drawing.js +46 -0
- package/dist-pkg/render/lq-filter.d.ts +32 -20
- package/dist-pkg/render/lq-filter.js +59 -65
- package/dist-pkg/render/port.d.ts +86 -88
- package/dist-pkg/render/port.js +17 -23
- package/dist-pkg/render/screen-pipeline.d.ts +42 -42
- package/dist-pkg/render/screen-pipeline.js +80 -87
- package/dist-pkg/render/sprite-fx.d.ts +2 -1
- package/dist-pkg/render/sprite-fx.js +16 -14
- package/dist-pkg/render/viewports.d.ts +20 -15
- package/dist-pkg/render/viewports.js +83 -114
- package/dist-pkg/render/viz-axes-labels.d.ts +47 -0
- package/dist-pkg/render/viz-axes-labels.js +88 -0
- package/dist-pkg/render/viz-axes.d.ts +89 -86
- package/dist-pkg/render/viz-axes.js +128 -116
- package/dist-pkg/render/viz-modes.d.ts +28 -29
- package/dist-pkg/render/viz-modes.js +40 -45
- package/dist-pkg/render/viz-refusal.d.ts +32 -0
- package/dist-pkg/render/viz-refusal.js +57 -0
- package/dist-pkg/render/viz-setters.d.ts +104 -66
- package/dist-pkg/render/viz-setters.js +182 -191
- package/dist-pkg/ui/aac-sets.d.ts +45 -0
- package/dist-pkg/ui/aac-sets.js +41 -0
- package/dist-pkg/ui/audio-choices.d.ts +68 -0
- package/dist-pkg/ui/audio-choices.js +98 -0
- package/dist-pkg/ui/audio-rows-that-apply.d.ts +12 -0
- package/dist-pkg/ui/audio-rows-that-apply.js +43 -0
- package/dist-pkg/ui/camera-control.d.ts +53 -0
- package/dist-pkg/ui/camera-control.js +48 -0
- package/dist-pkg/ui/changed-mark.d.ts +9 -8
- package/dist-pkg/ui/changed-mark.js +22 -53
- package/dist-pkg/ui/control-choices.d.ts +37 -0
- package/dist-pkg/ui/control-choices.js +84 -0
- package/dist-pkg/ui/debug-panel.d.ts +59 -43
- package/dist-pkg/ui/debug-panel.js +68 -69
- package/dist-pkg/ui/declared-words.d.ts +21 -0
- package/dist-pkg/ui/declared-words.js +66 -0
- package/dist-pkg/ui/dom.d.ts +10 -14
- package/dist-pkg/ui/dom.js +10 -47
- package/dist-pkg/ui/drawing-problems.d.ts +25 -0
- package/dist-pkg/ui/drawing-problems.js +94 -0
- package/dist-pkg/ui/eye-control.d.ts +36 -0
- package/dist-pkg/ui/eye-control.js +178 -0
- package/dist-pkg/ui/face-control.d.ts +25 -0
- package/dist-pkg/ui/face-control.js +183 -0
- package/dist-pkg/ui/focus-trap.d.ts +39 -49
- package/dist-pkg/ui/focus-trap.js +56 -65
- package/dist-pkg/ui/fonts.d.ts +157 -68
- package/dist-pkg/ui/fonts.js +305 -115
- package/dist-pkg/ui/footer-scroll-driver.d.ts +14 -0
- package/dist-pkg/ui/footer-scroll-driver.js +201 -0
- package/dist-pkg/ui/footer-scroll.d.ts +38 -0
- package/dist-pkg/ui/footer-scroll.js +55 -0
- package/dist-pkg/ui/game-options.d.ts +47 -0
- package/dist-pkg/ui/game-options.js +158 -0
- package/dist-pkg/ui/gaze-overlay.d.ts +64 -0
- package/dist-pkg/ui/gaze-overlay.js +165 -0
- package/dist-pkg/ui/hand-control.d.ts +25 -0
- package/dist-pkg/ui/hand-control.js +143 -0
- package/dist-pkg/ui/help-panel.d.ts +87 -0
- package/dist-pkg/ui/help-panel.js +242 -0
- package/dist-pkg/ui/hud-bands.d.ts +62 -0
- package/dist-pkg/ui/hud-bands.js +146 -0
- package/dist-pkg/ui/hud-row.d.ts +34 -0
- package/dist-pkg/ui/hud-row.js +80 -0
- package/dist-pkg/ui/hud.d.ts +73 -73
- package/dist-pkg/ui/hud.js +94 -98
- package/dist-pkg/ui/item-announcement.d.ts +13 -12
- package/dist-pkg/ui/item-announcement.js +25 -26
- package/dist-pkg/ui/layout.d.ts +103 -28
- package/dist-pkg/ui/layout.js +117 -99
- package/dist-pkg/ui/libras-avatar-clip.d.ts +30 -0
- package/dist-pkg/ui/libras-avatar-clip.js +86 -0
- package/dist-pkg/ui/libras-avatar-load.d.ts +52 -0
- package/dist-pkg/ui/libras-avatar-load.js +134 -0
- package/dist-pkg/ui/libras-avatar-plan.d.ts +102 -0
- package/dist-pkg/ui/libras-avatar-plan.js +211 -0
- package/dist-pkg/ui/libras-avatar-player.d.ts +28 -0
- package/dist-pkg/ui/libras-avatar-player.js +226 -0
- package/dist-pkg/ui/libras-avatar-stage.d.ts +37 -0
- package/dist-pkg/ui/libras-avatar-stage.js +208 -0
- package/dist-pkg/ui/libras-glosses.d.ts +28 -0
- package/dist-pkg/ui/libras-glosses.js +161 -0
- package/dist-pkg/ui/locale-flags.d.ts +16 -0
- package/dist-pkg/ui/locale-flags.js +30 -0
- package/dist-pkg/ui/loop-crash.d.ts +17 -17
- package/dist-pkg/ui/loop-crash.js +33 -62
- package/dist-pkg/ui/menu-intent.d.ts +61 -0
- package/dist-pkg/ui/menu-intent.js +88 -0
- package/dist-pkg/ui/menu-items.d.ts +20 -0
- package/dist-pkg/ui/menu-items.js +51 -0
- package/dist-pkg/ui/menu-nav.d.ts +98 -92
- package/dist-pkg/ui/menu-nav.js +398 -286
- package/dist-pkg/ui/mobility-choices.d.ts +26 -0
- package/dist-pkg/ui/mobility-choices.js +41 -0
- package/dist-pkg/ui/motion-choices.d.ts +31 -0
- package/dist-pkg/ui/motion-choices.js +68 -0
- package/dist-pkg/ui/motion-scene.d.ts +24 -19
- package/dist-pkg/ui/motion-scene.js +29 -61
- package/dist-pkg/ui/mount-panel.d.ts +81 -0
- package/dist-pkg/ui/mount-panel.js +61 -0
- package/dist-pkg/ui/panel-shell.d.ts +65 -31
- package/dist-pkg/ui/panel-shell.js +92 -66
- package/dist-pkg/ui/panel-widgets.d.ts +150 -0
- package/dist-pkg/ui/panel-widgets.js +294 -0
- package/dist-pkg/ui/pause-buttons.d.ts +35 -0
- package/dist-pkg/ui/pause-buttons.js +66 -0
- package/dist-pkg/ui/pause-icons.d.ts +261 -347
- package/dist-pkg/ui/pause-icons.js +671 -601
- package/dist-pkg/ui/pause-markup.d.ts +86 -0
- package/dist-pkg/ui/pause-markup.js +125 -0
- package/dist-pkg/ui/reach-notice.d.ts +22 -23
- package/dist-pkg/ui/reach-notice.js +55 -58
- package/dist-pkg/ui/scan-overlay.d.ts +23 -0
- package/dist-pkg/ui/scan-overlay.js +50 -0
- package/dist-pkg/ui/screen-text.d.ts +25 -0
- package/dist-pkg/ui/screen-text.js +152 -0
- package/dist-pkg/ui/session-clock.d.ts +32 -0
- package/dist-pkg/ui/session-clock.js +67 -0
- package/dist-pkg/ui/settings-aac.d.ts +70 -0
- package/dist-pkg/ui/settings-aac.js +208 -0
- package/dist-pkg/ui/settings-audio.d.ts +97 -114
- package/dist-pkg/ui/settings-audio.js +493 -425
- package/dist-pkg/ui/settings-controls.d.ts +53 -96
- package/dist-pkg/ui/settings-controls.js +143 -215
- package/dist-pkg/ui/settings-empathy.d.ts +39 -30
- package/dist-pkg/ui/settings-empathy.js +53 -60
- package/dist-pkg/ui/settings-mobility.d.ts +192 -0
- package/dist-pkg/ui/settings-mobility.js +332 -0
- package/dist-pkg/ui/settings-motion.d.ts +91 -70
- package/dist-pkg/ui/settings-motion.js +287 -198
- package/dist-pkg/ui/settings-panel.d.ts +58 -45
- package/dist-pkg/ui/settings-panel.js +189 -94
- package/dist-pkg/ui/settings-typo.d.ts +29 -78
- package/dist-pkg/ui/settings-typo.js +158 -129
- package/dist-pkg/ui/settings-visual.d.ts +29 -87
- package/dist-pkg/ui/settings-visual.js +240 -193
- package/dist-pkg/ui/shell.d.ts +112 -135
- package/dist-pkg/ui/shell.js +148 -217
- package/dist-pkg/ui/simulation-list.d.ts +27 -0
- package/dist-pkg/ui/simulation-list.js +76 -0
- package/dist-pkg/ui/simulation-over-the-world.d.ts +23 -0
- package/dist-pkg/ui/simulation-over-the-world.js +131 -0
- package/dist-pkg/ui/simulation-refusal.d.ts +5 -31
- package/dist-pkg/ui/simulation-refusal.js +8 -56
- package/dist-pkg/ui/switchable-control.d.ts +11 -0
- package/dist-pkg/ui/switchable-control.js +19 -0
- package/dist-pkg/ui/title.d.ts +3 -12
- package/dist-pkg/ui/title.js +49 -18
- package/dist-pkg/ui/top-band.d.ts +26 -0
- package/dist-pkg/ui/top-band.js +96 -0
- package/dist-pkg/ui/typo-choices.d.ts +71 -0
- package/dist-pkg/ui/typo-choices.js +85 -0
- package/dist-pkg/ui/visual-axes-panel.d.ts +11 -47
- package/dist-pkg/ui/visual-axes-panel.js +12 -94
- package/dist-pkg/ui/visual-choices.d.ts +77 -0
- package/dist-pkg/ui/visual-choices.js +107 -0
- package/dist-pkg/ui/vlibras.d.ts +77 -10
- package/dist-pkg/ui/vlibras.js +130 -81
- package/dist-pkg/ui/voice-control.d.ts +68 -0
- package/dist-pkg/ui/voice-control.js +276 -0
- package/dist-pkg/ui/voice-settings.d.ts +95 -0
- package/dist-pkg/ui/voice-settings.js +352 -0
- package/dist-pkg/ui/where-the-child-is.d.ts +31 -0
- package/dist-pkg/ui/where-the-child-is.js +70 -0
- package/docs/CREDITS.md +300 -44
- package/docs/LICENSES.md +189 -145
- package/package.json +51 -27
- package/scripts/check-cartridge.mjs +78 -0
- package/scripts/game-build.d.mts +25 -0
- package/scripts/game-build.mjs +144 -0
- package/scripts/heavy-into-the-delivery.mjs +388 -0
- package/scripts/libras-avatar.json +680 -0
- package/scripts/libras-avatar.mjs +246 -0
- package/scripts/libras-glosses/gloss.py +95 -0
- package/scripts/libras-glosses/pyproject.toml +32 -0
- package/scripts/libras-glosses/uv.lock +781 -0
- package/scripts/libras-glosses.mjs +351 -0
- package/scripts/licences/Apache-2.0.txt +176 -0
- package/scripts/licences/GPL-3.0.txt +674 -0
- package/scripts/licences/MIT.txt +17 -0
- package/scripts/licences/OFL-1.1.txt +86 -0
- package/scripts/licences/UFL-1.0.txt +96 -0
- package/scripts/licences/fonts.mjs +389 -0
- package/scripts/licences/third-party.mjs +301 -0
- package/scripts/licences/vosk-browser.NOTICE.txt +268 -0
- package/app/public/vendor/fonts/comicneue-400.woff2 +0 -0
- package/app/public/vendor/fonts/comicneue-700.woff2 +0 -0
- package/app/public/vendor/fonts/fondamento-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/fondamento-400.woff2 +0 -0
- package/app/public/vendor/fonts/inter-400.woff2 +0 -0
- package/app/public/vendor/fonts/inter-700.woff2 +0 -0
- package/app/public/vendor/fonts/lato-400.woff2 +0 -0
- package/app/public/vendor/fonts/lato-700.woff2 +0 -0
- package/app/public/vendor/fonts/literata-400.woff2 +0 -0
- package/app/public/vendor/fonts/literata-700.woff2 +0 -0
- package/app/public/vendor/fonts/newsreader-400.woff2 +0 -0
- package/app/public/vendor/fonts/newsreader-700.woff2 +0 -0
- package/app/public/vendor/fonts/opendyslexic-400.woff2 +0 -0
- package/app/public/vendor/fonts/opensans-400.woff2 +0 -0
- package/app/public/vendor/fonts/opensans-700.woff2 +0 -0
- package/app/public/vendor/fonts/pinyon-400.woff2 +0 -0
- package/app/public/vendor/fonts/pressstart-400.woff2 +0 -0
- package/app/public/vendor/fonts/quattro-400.woff2 +0 -0
- package/app/public/vendor/fonts/quattro-700.woff2 +0 -0
- package/app/public/vendor/fonts/sourcesans-400.woff2 +0 -0
- package/app/public/vendor/fonts/sourcesans-700.woff2 +0 -0
- package/app/public/vendor/fonts/sourceserif-400.woff2 +0 -0
- package/app/public/vendor/fonts/sourceserif-700.woff2 +0 -0
- package/app/public/vendor/fonts/ufmag-400.woff2 +0 -0
- package/dist-pkg/core/anel.d.ts +0 -17
- package/dist-pkg/core/anel.js +0 -31
- package/dist-pkg/core/collision.d.ts +0 -21
- package/dist-pkg/core/collision.js +0 -62
- package/dist-pkg/core/layers.d.ts +0 -63
- package/dist-pkg/core/layers.js +0 -95
- package/dist-pkg/core/letter-grid.d.ts +0 -55
- package/dist-pkg/core/letter-grid.js +0 -116
- package/dist-pkg/core/password.d.ts +0 -34
- package/dist-pkg/core/password.js +0 -205
- package/dist-pkg/core/rotulo-acessivel.d.ts +0 -17
- package/dist-pkg/core/rotulo-acessivel.js +0 -41
- package/dist-pkg/core/run-state.d.ts +0 -115
- package/dist-pkg/core/run-state.js +0 -40
- package/dist-pkg/core/tiles.d.ts +0 -12
- package/dist-pkg/core/tiles.js +0 -61
- package/dist-pkg/core/world.d.ts +0 -4
- package/dist-pkg/core/world.js +0 -58
- package/dist-pkg/input/origem-sintetica.d.ts +0 -44
- package/dist-pkg/input/origem-sintetica.js +0 -60
- package/dist-pkg/input/transporte-em-uso.d.ts +0 -101
- package/dist-pkg/input/transporte-em-uso.js +0 -130
- package/dist-pkg/platform/audio-nav.d.ts +0 -51
- package/dist-pkg/platform/audio-nav.js +0 -99
- package/dist-pkg/platform/guide-intensity.d.ts +0 -40
- package/dist-pkg/platform/guide-intensity.js +0 -73
- package/dist-pkg/platform/pesados-catalogo.d.ts +0 -14
- package/dist-pkg/platform/pesados-catalogo.js +0 -177
- package/dist-pkg/platform/pesados.d.ts +0 -31
- package/dist-pkg/platform/pesados.js +0 -75
- package/dist-pkg/platform/vozes-prontas.d.ts +0 -28
- package/dist-pkg/platform/vozes-prontas.js +0 -61
- package/dist-pkg/render/camera.d.ts +0 -58
- package/dist-pkg/render/camera.js +0 -105
- package/dist-pkg/render/cenario-data.d.ts +0 -127
- package/dist-pkg/render/cenario-data.js +0 -145
- package/dist-pkg/render/city-tex.d.ts +0 -63
- package/dist-pkg/render/city-tex.js +0 -228
- package/dist-pkg/render/city-tiles.d.ts +0 -11
- package/dist-pkg/render/city-tiles.js +0 -140
- package/dist-pkg/render/draw.d.ts +0 -149
- package/dist-pkg/render/draw.js +0 -231
- package/dist-pkg/render/fx.d.ts +0 -63
- package/dist-pkg/render/fx.js +0 -123
- package/dist-pkg/render/minimap.d.ts +0 -11
- package/dist-pkg/render/minimap.js +0 -94
- package/dist-pkg/render/parallax.d.ts +0 -85
- package/dist-pkg/render/parallax.js +0 -158
- package/dist-pkg/render/player-anim.d.ts +0 -71
- package/dist-pkg/render/player-anim.js +0 -152
- package/dist-pkg/render/recycling-tex.d.ts +0 -48
- package/dist-pkg/render/recycling-tex.js +0 -164
- package/dist-pkg/render/scene-city.d.ts +0 -77
- package/dist-pkg/render/scene-city.js +0 -181
- package/dist-pkg/render/scene-parallax.d.ts +0 -72
- package/dist-pkg/render/scene-parallax.js +0 -426
- package/dist-pkg/render/scene-sky.d.ts +0 -126
- package/dist-pkg/render/scene-sky.js +0 -295
- package/dist-pkg/render/set-cenario.d.ts +0 -54
- package/dist-pkg/render/set-cenario.js +0 -103
- package/dist-pkg/render/textures.d.ts +0 -75
- package/dist-pkg/render/textures.js +0 -240
- package/dist-pkg/render/title-scene.d.ts +0 -46
- package/dist-pkg/render/title-scene.js +0 -75
- package/dist-pkg/render/weather.d.ts +0 -96
- package/dist-pkg/render/weather.js +0 -171
- package/dist-pkg/render/wheelchair-sprites.d.ts +0 -32
- package/dist-pkg/render/wheelchair-sprites.js +0 -69
- package/dist-pkg/render/world-tex.d.ts +0 -18
- package/dist-pkg/render/world-tex.js +0 -87
- package/dist-pkg/ui/activities-menu.d.ts +0 -258
- package/dist-pkg/ui/activities-menu.js +0 -648
- package/dist-pkg/ui/caa-sets.d.ts +0 -39
- package/dist-pkg/ui/caa-sets.js +0 -65
- package/dist-pkg/ui/latch-refusal.d.ts +0 -32
- package/dist-pkg/ui/latch-refusal.js +0 -60
- package/dist-pkg/ui/map-hub.d.ts +0 -56
- package/dist-pkg/ui/map-hub.js +0 -138
- package/dist-pkg/ui/settings-caa.d.ts +0 -45
- package/dist-pkg/ui/settings-caa.js +0 -137
- package/dist-pkg/ui/settings-motor.d.ts +0 -175
- package/dist-pkg/ui/settings-motor.js +0 -342
- package/dist-pkg/ui/webcam.d.ts +0 -7
- package/dist-pkg/ui/webcam.js +0 -93
|
@@ -1,68 +1,65 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// ui/settings-empathy.ts — Empathy/simulation panel
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
2
|
+
// ui/settings-empathy.ts — Empathy/simulation panel: lets a player WITHOUT a disability experience one
|
|
3
|
+
// (color-blindness/low-vision/blindness simulation, simulated hearing loss, one-button play, wheelchair). This is the
|
|
4
|
+
// opposite of settings-visual, which CORRECTS the game for a player who has the disability — do not merge the two,
|
|
5
|
+
// even where they share the viz-mode catalog or a helper.
|
|
6
6
|
// Injected via initSettingsEmpathy(ctx): DOM selector, srSay, store, the state setters (setHearingLoss/
|
|
7
|
-
// setOneButton/setWheelchair —
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
// are a thin DOM shell tested in browser. Model: app/js/render/fx.ts.
|
|
7
|
+
// setOneButton/setWheelchair — the host's: they reach far beyond this panel) plus their live getters, and the shared
|
|
8
|
+
// reflect/overlay helpers (renderVizGroup, reflectMobilityEmpathy, reflectVizButtons, frontOverlay — used by sibling
|
|
9
|
+
// panels too). The pure catalog slice (EMPATHY_VIZ_MODES) is unit-tested in node; render/open/close are a thin DOM
|
|
10
|
+
// shell tested in browser.
|
|
12
11
|
import { toggleLabel } from './dom.js';
|
|
13
12
|
import { VIZ_MODES, simulatesDisability } from '../render/viz-modes.js';
|
|
14
|
-
import {
|
|
15
|
-
import { t } from '../core/i18n.js';
|
|
16
|
-
import { DEFAULTS } from '../core/state.js';
|
|
13
|
+
import { DEFAULTS } from '../core/setting-defaults.js';
|
|
17
14
|
import { markChanged, markMenuChanged } from './changed-mark.js';
|
|
18
15
|
/**
|
|
19
|
-
*
|
|
16
|
+
* The slice of the catalogue THIS panel shows: only what SIMULATES a disability.
|
|
20
17
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
18
|
+
* The catalogue's `kind` does not tell simulating from correcting, so a filter by `kind` brings the colour-blindness
|
|
19
|
+
* corrections into a menu about feeling what a disability is like — a colour-blind child would have to enter it to find
|
|
20
|
+
* the correction for their own condition, beside the button that simulates it for someone who does not have it. Two
|
|
21
|
+
* opposite audiences in one list.
|
|
25
22
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* (aqui, no main.js e uma derivada morta), todas respondendo pelo `kind`, todas errando junto.
|
|
23
|
+
* The Dev decided (#60): the corrections live in visual accessibility, and this list is cut by `simulatesDisability`,
|
|
24
|
+
* which answers the right question.
|
|
29
25
|
*/
|
|
30
26
|
export const EMPATHY_VIZ_MODES = VIZ_MODES.filter((m) => simulatesDisability(m.key));
|
|
31
|
-
/** Wires the empathy panel's DOM (buttons + boot restore) and returns render/open/close for
|
|
27
|
+
/** Wires the empathy panel's DOM (buttons + boot restore) and returns render/open/close for the host to call. */
|
|
32
28
|
export function initSettingsEmpathy(ctx) {
|
|
29
|
+
const { t } = ctx;
|
|
33
30
|
function render() {
|
|
34
31
|
ctx.renderVizGroup('#empathy-list', '#empathy-players', EMPATHY_VIZ_MODES);
|
|
35
32
|
const h = ctx.$('#opt-hearing');
|
|
36
33
|
if (h) {
|
|
37
|
-
h.classList.toggle('is-on', hearingLoss);
|
|
38
|
-
h.setAttribute('aria-pressed', String(hearingLoss));
|
|
39
|
-
h.textContent = toggleLabel(hearingLoss); // ui/dom
|
|
34
|
+
h.classList.toggle('is-on', ctx.hearing.hearingLoss);
|
|
35
|
+
h.setAttribute('aria-pressed', String(ctx.hearing.hearingLoss));
|
|
36
|
+
h.textContent = toggleLabel(t, ctx.hearing.hearingLoss); // ui/dom
|
|
40
37
|
}
|
|
41
|
-
ctx.
|
|
38
|
+
ctx.reflectMobilityEmpathy();
|
|
42
39
|
refreshMarks();
|
|
43
|
-
//
|
|
40
|
+
// After `renderVizGroup`, not before: it is what puts the `.opt-hint` back inside the rows.
|
|
44
41
|
ctx.fillExplain?.(ctx.$('#empathy .overlay__card'));
|
|
45
42
|
}
|
|
46
43
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
44
|
+
* The left-the-default mark (ADR-0029). In this menu it means this simulation is ON, which makes it the most useful
|
|
45
|
+
* of all: a child who switched on the blindness simulation has a black screen and cannot read anything — but their
|
|
46
|
+
* screen reader walks the menu and says which row left the default.
|
|
50
47
|
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
48
|
+
* The cut is the reset's, for the same reason: a colour-blindness CORRECTION a player chose in the visual panel is
|
|
49
|
+
* not this menu's. Marking it here would send the colour-blind child to undo, in the empathy menu, the correction
|
|
50
|
+
* that lets them see the game.
|
|
54
51
|
*/
|
|
55
52
|
function refreshMarks() {
|
|
56
|
-
const
|
|
57
|
-
const
|
|
53
|
+
const simulating = ctx.getPlayers().some((p) => simulatesDisability(p.viz));
|
|
54
|
+
const deafness = ctx.hearing.hearingLoss;
|
|
58
55
|
const um = ctx.getOneButton() !== DEFAULTS.oneButton;
|
|
59
|
-
const
|
|
60
|
-
const
|
|
61
|
-
markChanged(
|
|
62
|
-
markChanged(
|
|
63
|
-
markChanged(
|
|
64
|
-
markChanged(ctx.$('#empathy-list'),
|
|
65
|
-
markMenuChanged(ctx.$('[data-act="empatia"]'), [
|
|
56
|
+
const wheelchair = ctx.getWheelchair() !== DEFAULTS.wheelchair;
|
|
57
|
+
const rowOf = (sel) => ctx.$(sel)?.closest('.ctrl-row') ?? null;
|
|
58
|
+
markChanged(t, rowOf('#opt-hearing'), deafness);
|
|
59
|
+
markChanged(t, rowOf('#opt-onebtn'), um);
|
|
60
|
+
markChanged(t, rowOf('#opt-wheelchair'), wheelchair);
|
|
61
|
+
markChanged(t, ctx.$('#empathy-list'), simulating);
|
|
62
|
+
markMenuChanged(t, ctx.$('[data-act="empatia"]'), [simulating, deafness, um, wheelchair]);
|
|
66
63
|
}
|
|
67
64
|
function open() {
|
|
68
65
|
const ov = ctx.$('#empathy');
|
|
@@ -84,7 +81,7 @@ export function initSettingsEmpathy(ctx) {
|
|
|
84
81
|
return;
|
|
85
82
|
const b = ctx.$('#opt-empathy');
|
|
86
83
|
if (b)
|
|
87
|
-
b.focus(); //
|
|
84
|
+
b.focus(); // fallback: this id does not exist in the document today (a hook for a future bar)
|
|
88
85
|
}
|
|
89
86
|
const empathyBtn = ctx.$('#opt-empathy');
|
|
90
87
|
if (empathyBtn)
|
|
@@ -94,38 +91,34 @@ export function initSettingsEmpathy(ctx) {
|
|
|
94
91
|
empathyClose.addEventListener('click', close);
|
|
95
92
|
const hearingBtn = ctx.$('#opt-hearing');
|
|
96
93
|
if (hearingBtn)
|
|
97
|
-
hearingBtn.addEventListener('click', () => { ctx.setHearingLoss(!hearingLoss); render(); ctx.reflectVizButtons(); });
|
|
94
|
+
hearingBtn.addEventListener('click', () => { ctx.setHearingLoss(!ctx.hearing.hearingLoss); render(); ctx.reflectVizButtons(); });
|
|
98
95
|
if (ctx.store.getBool('incl_hearingloss'))
|
|
99
|
-
setHearingLossGraph(true); //
|
|
100
|
-
// `refreshMarks()`
|
|
101
|
-
//
|
|
96
|
+
ctx.hearing.setHearingLossGraph(true); // restores the persisted audio graph at boot
|
|
97
|
+
// `refreshMarks()` after EACH one: these two setters do not go through `render()` — they reflect the button on
|
|
98
|
+
// their own —, so the mark has to be pulled here or it never follows the change.
|
|
102
99
|
const oneBtn = ctx.$('#opt-onebtn');
|
|
103
100
|
if (oneBtn)
|
|
104
101
|
oneBtn.addEventListener('click', () => { ctx.setOneButton(!ctx.getOneButton()); refreshMarks(); });
|
|
105
102
|
const wheelBtn = ctx.$('#opt-wheelchair');
|
|
106
103
|
if (wheelBtn)
|
|
107
104
|
wheelBtn.addEventListener('click', () => { ctx.setWheelchair(!ctx.getWheelchair()); refreshMarks(); });
|
|
108
|
-
// ----
|
|
105
|
+
// ---- reset THIS menu's defaults (ADR-0028) ----
|
|
109
106
|
//
|
|
110
|
-
//
|
|
111
|
-
//
|
|
112
|
-
// preta, e a saída — o toque duplo na bolinha — é justamente o que ela acabou de perder a capacidade de ver.
|
|
107
|
+
// Of all the panels, this is the reset that most needs to exist and most needs care, for the same reason: it is the
|
|
108
|
+
// menu that simulates disabilities. A child who switches on the total-blindness simulation has a black screen.
|
|
113
109
|
//
|
|
114
|
-
//
|
|
115
|
-
//
|
|
116
|
-
//
|
|
117
|
-
// uma criança daltônica a única correção que ela tem, a mando de um menu feito para quem não é daltônico.
|
|
118
|
-
// Por isso o reset pergunta `simulatesDisability`, que responde pelo modo, e não `isSimKind`, que responde
|
|
119
|
-
// pelo `kind` e não distingue simular de corrigir.
|
|
110
|
+
// And the care: THE RESET ASKS `simulatesDisability`, which answers per mode. A colour-blindness CORRECTION a player
|
|
111
|
+
// chose in the visual panel is not a simulation; switching it off here would take the only correction a colour-blind
|
|
112
|
+
// child has, at the command of a menu made for whoever is not colour-blind.
|
|
120
113
|
const resetBtn = ctx.$('#empathy-reset');
|
|
121
114
|
if (resetBtn)
|
|
122
115
|
resetBtn.addEventListener('click', () => {
|
|
123
|
-
//
|
|
124
|
-
// "
|
|
125
|
-
// `#sr-status` —
|
|
116
|
+
// Each setter is idempotent and announces on its own when it changes; calling only on a difference avoids a false
|
|
117
|
+
// "off" announcement for something that was never on. The summary announcement comes last, and it is what stays in
|
|
118
|
+
// `#sr-status` — one action, one sentence, instead of three.
|
|
126
119
|
ctx.getPlayers().forEach((p, i) => { if (simulatesDisability(p.viz))
|
|
127
120
|
ctx.setPlayerViz(i, 'normal'); });
|
|
128
|
-
if (hearingLoss)
|
|
121
|
+
if (ctx.hearing.hearingLoss)
|
|
129
122
|
ctx.setHearingLoss(false);
|
|
130
123
|
if (ctx.getOneButton() !== DEFAULTS.oneButton)
|
|
131
124
|
ctx.setOneButton(DEFAULTS.oneButton);
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
import type { PlayerView } from '../core/entity.js';
|
|
3
|
+
import type { Translate } from '../core/i18n.js';
|
|
4
|
+
import type { DomQuery } from '../core/dom-query.js';
|
|
5
|
+
import { type LatchPlayer as JogadorDaAlternanciaDaAresta } from '../input/latch-sync.js';
|
|
6
|
+
import type { PanelShellCtx } from './panel-shell.js';
|
|
7
|
+
/** Minimal platform/storage.ts shape this module needs. */
|
|
8
|
+
export interface MobilityStore {
|
|
9
|
+
setBool(key: string, on: boolean): void;
|
|
10
|
+
/** Reads the raw key. Only ADR-0029's mark uses it, for one precise question: did the child CHOOSE this? */
|
|
11
|
+
get(key: string): string | null;
|
|
12
|
+
}
|
|
13
|
+
/** Minimal per-player shape this module reads/writes (core/state.ts's `players` entries carry much more). */
|
|
14
|
+
/** The per-player mobility choices: Easy Mode and the latches. */
|
|
15
|
+
export type MobilityPlayer = PlayerView<'easy' | 'toggleMove' | 'toggleRun' | 'walkDir'>;
|
|
16
|
+
export interface SettingsMobilityCtx {
|
|
17
|
+
/** Translates in the page's language — the root's translator (ADR-0232 D3). REQUIRED: text built from nowhere is a raw key. */
|
|
18
|
+
t: Translate;
|
|
19
|
+
/** DOM selector (querySelector), injected — never reaches `document` globally. */
|
|
20
|
+
$: DomQuery;
|
|
21
|
+
/** Screen-reader announcement (core/a11y-sr's srSay), injected. */
|
|
22
|
+
srSay: (msg: string) => void;
|
|
23
|
+
/** Persistence (platform/storage.ts), injected. */
|
|
24
|
+
store: MobilityStore;
|
|
25
|
+
/** Live player list (core/state.ts's `players` — mutated in place, same reference every call). */
|
|
26
|
+
players: MobilityPlayer[];
|
|
27
|
+
/** Live player count (core/state.ts's `numPlayers`); a getter because the value is reassigned over time. */
|
|
28
|
+
getNumPlayers: () => number;
|
|
29
|
+
/** SHARED setter (also used by the pause-menu quick icon `altmove`) — optional: the engine's `setMoveLatch` otherwise. */
|
|
30
|
+
setToggleMove?: (i: number, on: boolean) => void;
|
|
31
|
+
/**
|
|
32
|
+
* DOES THIS GAME HOLD ANY KEY? — `GameDeclaration.holdsKeys` (ADR-0115). Without it the latch row is ABSENT from this
|
|
33
|
+
* panel.
|
|
34
|
+
*
|
|
35
|
+
* ⚠️ Not offering it means making the row absent for everyone, with `hidden`, which takes it off the screen AND out of
|
|
36
|
+
* the accessibility tree — not an `aria-disabled` row that stays in the tab order doing nothing.
|
|
37
|
+
*
|
|
38
|
+
* ⚠️ REQUIRED, for the same reason as in `PauseIconsCtx`: there is no safe default. `true` leaves the row in a game
|
|
39
|
+
* where it does nothing; `false` hides it from a child who depends on it.
|
|
40
|
+
*/
|
|
41
|
+
holdsKeys: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* WHICH DEVICE THIS PLAYER IS USING (ADR-0113) — it travels from here to the write.
|
|
44
|
+
*
|
|
45
|
+
* ⚠️ Optional for the same reason as in `LatchWriteCtx`: without it the write does what it already did.
|
|
46
|
+
*/
|
|
47
|
+
transportInUse?: (player: number) => string;
|
|
48
|
+
/**
|
|
49
|
+
* THE RUN BUTTON'S LATCH.
|
|
50
|
+
*
|
|
51
|
+
* ⚠️ OPTIONAL (ADR-0106 §1): the engine answers it itself, through `setRunLatch` — none of its steps is the game's.
|
|
52
|
+
* Whoever injects still rules.
|
|
53
|
+
*/
|
|
54
|
+
setToggleRun?: (i: number, on: boolean) => void;
|
|
55
|
+
/**
|
|
56
|
+
* THE WORLD'S REACTION to Easy Mode (e.g. coins on the ground) — the game's, and therefore OPTIONAL rather than
|
|
57
|
+
* required.
|
|
58
|
+
*
|
|
59
|
+
* 📌 The default is to DO NOTHING, which is what `core/state` decides a setter does — store, persist, notify — and
|
|
60
|
+
* nothing more: game effects are REACTIONS, subscribed by whoever reacts. The child's choice is stored and holds for
|
|
61
|
+
* whoever reads it; a game without coins has nothing to rebuild, and one that has them injects its own.
|
|
62
|
+
*
|
|
63
|
+
* ⚠️ AND THE ROW STAYS ALIVE WITHOUT IT — not a dead button. `setEasy` writes `p.easy`, persists and announces before
|
|
64
|
+
* calling this; what is missing without the injection is the finishing touch in the world, not the effect.
|
|
65
|
+
*/
|
|
66
|
+
rebuildCoins?: () => void;
|
|
67
|
+
/**
|
|
68
|
+
* Moves the rows' prose to the footer (`ui/settings-panel` → `fillExplain`). Called on EVERY render.
|
|
69
|
+
*
|
|
70
|
+
* ⚠️ Relabelling a row puts its `.opt-hint` back inside it — so without this call the explanation appears twice, in
|
|
71
|
+
* the footer and under the label, from the first click. `CLAUDE.md` §4 records exactly this (issue #109).
|
|
72
|
+
*
|
|
73
|
+
* Optional in the signature because a consumer can mount the panel without the shell (a test): without the shell
|
|
74
|
+
* there is no footer to duplicate.
|
|
75
|
+
*/
|
|
76
|
+
fillExplain?: (card: HTMLElement | null) => void;
|
|
77
|
+
}
|
|
78
|
+
export interface SettingsMobilityApi {
|
|
79
|
+
/** Re-renders #movement-players (kept `hidden` — see playerTabsHTML) and (re)wires its buttons. */
|
|
80
|
+
renderMovPlayers: () => void;
|
|
81
|
+
/** Reflects the selected player's Easy Mode onto #opt-facil (+ the #opt-movement bar light). */
|
|
82
|
+
reflectEasy: () => void;
|
|
83
|
+
/** Reflects the selected player's movement latch onto #opt-altmove (+ the #opt-movement bar light). */
|
|
84
|
+
reflectAltMove: () => void;
|
|
85
|
+
/** Likewise for the RUN button's latch (#opt-togglerun). */
|
|
86
|
+
reflectToggleRun: () => void;
|
|
87
|
+
/** Sets Easy Mode for player `i`. */
|
|
88
|
+
setEasy: (i: number, on: boolean) => void;
|
|
89
|
+
/** Selects which player this panel edits (the pause actor, before opening the panel). */
|
|
90
|
+
setSelPlayer: (i: number) => void;
|
|
91
|
+
/** Currently selected player index. */
|
|
92
|
+
getSelPlayer: () => number;
|
|
93
|
+
}
|
|
94
|
+
/** localStorage key for a player's Modo Fácil flag (== platform/storage.ts's `easy_p{i}` pattern). */
|
|
95
|
+
export declare function easyKey(i: number): string;
|
|
96
|
+
/**
|
|
97
|
+
* localStorage key of the RUN button's latch, in the LEGACY form (no transport).
|
|
98
|
+
*
|
|
99
|
+
* ⚠️ IT DELEGATES to `platform/storage`, so there is one name only.
|
|
100
|
+
*
|
|
101
|
+
* ⚠️ AND IT IS THE LEGACY KEY. ADR-0104 §C put the TRANSPORT in the name, because the latch belongs to the device and not
|
|
102
|
+
* the person; this one is still read to inherit what the child already had, and is not written. The new key is
|
|
103
|
+
* `latchKey`, in `input/latch-scope`.
|
|
104
|
+
*/
|
|
105
|
+
export declare function toggleRunKey(i: number): string;
|
|
106
|
+
/** localStorage key of the MOVEMENT latch, per player. It delegates, like the two siblings above. */
|
|
107
|
+
export declare function toggleMoveKey(i: number): string;
|
|
108
|
+
/**
|
|
109
|
+
* The minimal slice the movement latch's write touches.
|
|
110
|
+
*
|
|
111
|
+
* ⚠️ `walkDir` IS IN IT, and not as a detail: switching the latch off has to STOP whoever is walking by latch. Without
|
|
112
|
+
* it, the child switches the mode off and the character keeps walking by itself, with no key pressed — and no error
|
|
113
|
+
* says so.
|
|
114
|
+
*
|
|
115
|
+
* ⚠️ AND IT IS ITS OWN SLICE, not `MobilityPlayer`, because the TWO callers have different slices: the mobility panel
|
|
116
|
+
* brings `easy`/`toggleRun`, which this does not read, and `PausePlayer` brings the visual and the three reduced-motion
|
|
117
|
+
* flags. A minimal slice lets both pass without either carrying the other's.
|
|
118
|
+
*
|
|
119
|
+
* 📌 THE DEFINITION LIVES IN `input/latch-sync` (issue #127), beside the rule that uses it, and the NAME stays published
|
|
120
|
+
* here, as an alias (ADR-0106 step 1a). Since issue #204 the names snapshot reads a re-export too, so either form keeps
|
|
121
|
+
* the name in this module's snapshot.
|
|
122
|
+
*/
|
|
123
|
+
export type LatchPlayer = JogadorDaAlternanciaDaAresta;
|
|
124
|
+
/** What the write needs to know. Everything here already lives in `SettingsMobilityCtx` and `PauseIconsCtx`. */
|
|
125
|
+
export interface LatchWriteCtx {
|
|
126
|
+
/** Translates in the page's language — the root's translator (ADR-0232 D3). REQUIRED: text built from nowhere is a raw key. */
|
|
127
|
+
readonly t: Translate;
|
|
128
|
+
readonly players: readonly LatchPlayer[];
|
|
129
|
+
readonly store: {
|
|
130
|
+
setBool(key: string, on: boolean): void;
|
|
131
|
+
};
|
|
132
|
+
readonly srSay: (msg: string) => void;
|
|
133
|
+
readonly getNumPlayers: () => number;
|
|
134
|
+
/**
|
|
135
|
+
* WHICH DEVICE THIS PLAYER IS USING (ADR-0113). `input/state.inputOf(i)` answers it.
|
|
136
|
+
*
|
|
137
|
+
* ⚠️ OPTIONAL ON PURPOSE, because of what happens without it: the write falls back to exactly what it did before —
|
|
138
|
+
* only the per-player key.
|
|
139
|
+
*
|
|
140
|
+
* 📌 And it is INJECTED instead of imported: `ui/` reading `input/` module state would be a new edge between two
|
|
141
|
+
* layers, to save one argument. This ctx receives everything else that way.
|
|
142
|
+
*/
|
|
143
|
+
readonly transportInUse?: (player: number) => string;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* SWITCHES A PLAYER'S MOVEMENT LATCH ON OR OFF — the engine does it (ADR-0106 §4).
|
|
147
|
+
*
|
|
148
|
+
* ⚠️ Being shared by TWO engine surfaces (this panel and the pause bar's `altmove` icon) is a reason for the engine to
|
|
149
|
+
* own it, not for the cartridge to keep it — and every step is the engine's: `toggleMove` and `walkDir` are
|
|
150
|
+
* `PlayerBase` fields, the key is `platform/storage`'s, and `sr.motor.toggleMove*` are engine i18n keys. There is no
|
|
151
|
+
* game effect left to inject.
|
|
152
|
+
*/
|
|
153
|
+
export declare function setMoveLatch(ctx: LatchWriteCtx, i: number, on: boolean): void;
|
|
154
|
+
/**
|
|
155
|
+
* SWITCHES THE RUN LATCH ON OR OFF — `setMoveLatch`'s sibling, and simpler.
|
|
156
|
+
*
|
|
157
|
+
* 🎯 THE SAME REASON TO EXIST: every step is the engine's — `toggleRun` is a `PlayerBase` field, the key is
|
|
158
|
+
* `platform/storage`'s `KEYS.toggleRunP(i)`, and `sr.motor.toggleRun*` are engine i18n keys. **There is no game effect
|
|
159
|
+
* to inject**, which is why `SettingsMobilityCtx.setToggleRun` is optional: a game that does not supply it still gets a
|
|
160
|
+
* live run row instead of a dead one.
|
|
161
|
+
*
|
|
162
|
+
* ⚠️ AND IT DOES NOT CALL `applyLatch`, unlike its sibling. That one stops whoever walks by latch on switch-off, because
|
|
163
|
+
* the MOVEMENT latch leaves the character walking by itself; the run latch governs a speed lock, which cannot leave anyone
|
|
164
|
+
* moving. Copying the line "for symmetry" would touch `walkDir` because of a button that does not.
|
|
165
|
+
*
|
|
166
|
+
* 📌 The announcement is UNCONDITIONAL, like its sibling's: the child pressed the button, and staying silent because the
|
|
167
|
+
* value already was that leaves the control with no answer for whoever listens instead of looking.
|
|
168
|
+
*/
|
|
169
|
+
export declare function setRunLatch(ctx: LatchWriteCtx, i: number, on: boolean): void;
|
|
170
|
+
/**
|
|
171
|
+
* MOUNTS THIS PANEL'S INSIDE — the per-seat tabs and the three rows it reaches.
|
|
172
|
+
*
|
|
173
|
+
* 🔴 THE CONTRACT WOULD OTHERWISE BE INVISIBLE (the shape `ui/panel-shell` names one level up): this module looks for
|
|
174
|
+
* `#movement-players`, `#opt-facil`, `#opt-altmove` and `#opt-togglerun`, and nothing in the type says so — so it builds
|
|
175
|
+
* them, instead of a panel that opens with nothing but a card, a title and a reset button.
|
|
176
|
+
*
|
|
177
|
+
* ⚠️ AND IT LIVES HERE, not in the composition root: whoever knows these four ids and each control's shape is this file,
|
|
178
|
+
* and nobody else. A root writing them would be a root guessing.
|
|
179
|
+
*
|
|
180
|
+
* ⚠️ THE THREE ROWS ARE ALWAYS CREATED, the latch row included. Whether it is SEEN is decided at init by `holdsKeys`
|
|
181
|
+
* (ADR-0115), with `hidden`, which takes the row off the screen AND out of the accessibility tree. Creating it only when
|
|
182
|
+
* it applies would put the same rule in two places, and the day they diverged the row would appear in a game where it
|
|
183
|
+
* does nothing.
|
|
184
|
+
*
|
|
185
|
+
* 📌 THE ORDER IS THE DECISION, as in every menu of this project (ADR-0044 §2): the tabs first, because they say WHOSE
|
|
186
|
+
* the next choices are; then Easy Mode, the most sought; and the two latches together, the same idea applied to two
|
|
187
|
+
* buttons.
|
|
188
|
+
*
|
|
189
|
+
* Idempotent: calling it twice reuses the list instead of duplicating it.
|
|
190
|
+
*/
|
|
191
|
+
export declare function mountMobilityInside(t: Translate, ctx: PanelShellCtx, card: HTMLElement, list: HTMLElement): void;
|
|
192
|
+
export declare function initSettingsMobility(ctx: SettingsMobilityCtx): SettingsMobilityApi;
|