@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,2 +1,24 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* THE BROWSER'S SPEECH, lent by whoever holds the window (the composition root, from `host.win`). The same port
|
|
4
|
+
* `platform/tts` receives. `synth()` is asked at every utterance and may answer `null`: a browser without speech synthesis.
|
|
5
|
+
*/
|
|
6
|
+
export interface SpeechPort {
|
|
7
|
+
synth(): SpeechSynthesis | null;
|
|
8
|
+
utterance(text: string): SpeechSynthesisUtterance;
|
|
9
|
+
}
|
|
10
|
+
/** What the literacy voice reads: the browser's speech, and the master sound it obeys. */
|
|
11
|
+
export interface GameVoice extends SpeechPort {
|
|
12
|
+
soundOn(): boolean;
|
|
13
|
+
volume(): number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Says `text`, a word the game gives in `language` (BCP-47), with a voice of that language chosen by the rule narration's parts
|
|
17
|
+
* use (ADR-0243 §2): the exact tag, else a voice of the same language. REQUIRED, because an optional language would default to
|
|
18
|
+
* one, and that default — pt-BR whatever the page said — is what ADR-0243 §4 removed.
|
|
19
|
+
*
|
|
20
|
+
* 🔴 A DEVICE THAT LISTS VOICES AND NONE OF THE LANGUAGE says nothing (§3): a wrong accent is learned. A device that lists NONE
|
|
21
|
+
* yet — the browser fills the list late — is asked by the tag alone, and it picks its own voice for the language.
|
|
22
|
+
* Volume ×1.4 so the speech sits above the effects, capped at 1.
|
|
23
|
+
*/
|
|
24
|
+
export declare function gameSay(voice: GameVoice, text: string, language: string): void;
|
|
@@ -1,34 +1,45 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// platform/speech.ts —
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
// platform/speech.ts — the LITERACY voice (gameSay): speech that is ALWAYS on (independent of the mixer's narration toggle),
|
|
3
|
+
// through the browser's native voice, in the language the game says its words are in (ADR-0243 §4). A helper that holds
|
|
4
|
+
// nothing: it takes the browser's speech and the master sound as a parameter (ADR-0232 D4, erratum D3 point 2).
|
|
5
|
+
// The MENU's TTS (narrate/ttsSpeak and the Kokoro neural engine) is another path, gated by the mixer — `platform/tts`.
|
|
6
|
+
import { voiceOfLanguage } from './voice-plan.js';
|
|
7
|
+
/** The device's voices, or none where the browser has not listed them yet or throws. */
|
|
8
|
+
function listedVoices(ss) {
|
|
7
9
|
try {
|
|
8
|
-
|
|
9
|
-
if (!vs.length)
|
|
10
|
-
return null;
|
|
11
|
-
return vs.find((v) => /pt[-_]?br/i.test(v.lang)) || vs.find((v) => /pt/i.test(v.lang) && /bras|brazil/i.test(v.name)) || vs.find((v) => /pt/i.test(v.lang) && !/pt[-_]?pt/i.test(v.lang)) || null;
|
|
10
|
+
return ss.getVoices() || [];
|
|
12
11
|
}
|
|
13
12
|
catch (e) {
|
|
14
|
-
return
|
|
13
|
+
return [];
|
|
15
14
|
}
|
|
16
15
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Says `text`, a word the game gives in `language` (BCP-47), with a voice of that language chosen by the rule narration's parts
|
|
18
|
+
* use (ADR-0243 §2): the exact tag, else a voice of the same language. REQUIRED, because an optional language would default to
|
|
19
|
+
* one, and that default — pt-BR whatever the page said — is what ADR-0243 §4 removed.
|
|
20
|
+
*
|
|
21
|
+
* 🔴 A DEVICE THAT LISTS VOICES AND NONE OF THE LANGUAGE says nothing (§3): a wrong accent is learned. A device that lists NONE
|
|
22
|
+
* yet — the browser fills the list late — is asked by the tag alone, and it picks its own voice for the language.
|
|
23
|
+
* Volume ×1.4 so the speech sits above the effects, capped at 1.
|
|
24
|
+
*/
|
|
25
|
+
export function gameSay(voice, text, language) {
|
|
26
|
+
if (!text || !voice.soundOn())
|
|
20
27
|
return;
|
|
21
28
|
try {
|
|
22
|
-
const ss =
|
|
29
|
+
const ss = voice.synth();
|
|
23
30
|
if (!ss)
|
|
24
31
|
return;
|
|
25
32
|
ss.cancel();
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
33
|
+
const listed = listedVoices(ss);
|
|
34
|
+
const own = voiceOfLanguage(language, listed.map((v) => ({ locale: v.lang.replace('_', '-'), engine: 'webspeech', voice: v.name })));
|
|
35
|
+
if (listed.length && !own)
|
|
36
|
+
return;
|
|
37
|
+
const u = voice.utterance(text);
|
|
38
|
+
u.lang = language;
|
|
39
|
+
const v = listed.find((x) => x.name === own?.voice);
|
|
29
40
|
if (v)
|
|
30
41
|
u.voice = v;
|
|
31
|
-
u.volume = Math.min(1, volume * 1.4);
|
|
42
|
+
u.volume = Math.min(1, voice.volume() * 1.4);
|
|
32
43
|
ss.speak(u);
|
|
33
44
|
}
|
|
34
45
|
catch (e) { /* noop */ }
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
/**
|
|
3
|
+
* The full name of a key in the GAME's scope.
|
|
4
|
+
*
|
|
5
|
+
* ⚠️ THE ID COMES IN AS AN ARGUMENT; it was once a constant. By ADR-0080's test — *would a second game want a different
|
|
6
|
+
* value here?* — the answer is yes, at once: two games in the same browser profile collided on every game-scoped key, and
|
|
7
|
+
* one overwrote the other's progress with no error at all.
|
|
8
|
+
*
|
|
9
|
+
* ⚠️ AND THE ID DOES NOT COME FROM THE DECLARATION, the obvious design. It cannot: a game's state is read before any
|
|
10
|
+
* `createGame()`, so an id from the declaration would arrive after the keys were resolved — against nothing, in silence.
|
|
11
|
+
* Whoever knows its own id is the GAME, which passes it as its own constant; ADR-0080 forbids the ENGINE from knowing it,
|
|
12
|
+
* not the game.
|
|
13
|
+
*/
|
|
14
|
+
export declare function gameKey(gameId: string, keyName: string): string;
|
|
15
|
+
export declare const KEYS: {
|
|
16
|
+
onebtn: string;
|
|
17
|
+
wheelchair: string;
|
|
18
|
+
modocego: string;
|
|
19
|
+
caneDiv: string;
|
|
20
|
+
hearingloss: string;
|
|
21
|
+
activity: (gameId: string) => string;
|
|
22
|
+
activityLegado: string;
|
|
23
|
+
quizlevel: (gameId: string) => string;
|
|
24
|
+
quizlevelLegado: string;
|
|
25
|
+
cenario: (gameId: string) => string;
|
|
26
|
+
cenarioLegado: string;
|
|
27
|
+
tabsel: (gameId: string) => string;
|
|
28
|
+
tabselLegado: string;
|
|
29
|
+
fracnot: (gameId: string) => string;
|
|
30
|
+
fracnotLegado: string;
|
|
31
|
+
viz: string;
|
|
32
|
+
lq: string;
|
|
33
|
+
cbsafe: string;
|
|
34
|
+
ownercolors: string;
|
|
35
|
+
outfg: string;
|
|
36
|
+
outbg: string;
|
|
37
|
+
hcrole: string;
|
|
38
|
+
juice: string;
|
|
39
|
+
crt: string;
|
|
40
|
+
crtLegacy: string;
|
|
41
|
+
ttsEngine: string;
|
|
42
|
+
ttsVoice: string;
|
|
43
|
+
ttsVoz: string;
|
|
44
|
+
lang: string;
|
|
45
|
+
letterCase: string;
|
|
46
|
+
captions: string;
|
|
47
|
+
tea: string;
|
|
48
|
+
menuIndex: string;
|
|
49
|
+
fontKey: string;
|
|
50
|
+
padDesign: string;
|
|
51
|
+
padDir: string;
|
|
52
|
+
touchmap: string;
|
|
53
|
+
padBtnMm: string;
|
|
54
|
+
padGapMm: string;
|
|
55
|
+
padStickMm: string;
|
|
56
|
+
padTravelMm: string;
|
|
57
|
+
padDpadMm: string;
|
|
58
|
+
reducedMotion: string;
|
|
59
|
+
toggleMoveLegacy: string;
|
|
60
|
+
/**
|
|
61
|
+
* @deprecated ⚠️ THE LEGACY visual-mode KEY — ONE value, from when only one fitted (issue #104).
|
|
62
|
+
*
|
|
63
|
+
* It is still READ, which is what keeps the child from losing what they chose; it is still WRITTEN while the controls
|
|
64
|
+
* write one value at a time, because an old reader does `if (v && VIZ_BY_KEY[v])` and would reject a JSON — writing
|
|
65
|
+
* the new shape HERE would erase their setting in silence, exactly the defect the migration exists not to commit.
|
|
66
|
+
*/
|
|
67
|
+
vizP: (i: number) => string;
|
|
68
|
+
/**
|
|
69
|
+
* The two-axis VISUAL STATE, in JSON (ADR-0076, issue #104).
|
|
70
|
+
*
|
|
71
|
+
* ⚠️ A NEW KEY BESIDE THE OLD ONE, not the same key with new content. The same design as the `visual` field beside
|
|
72
|
+
* `viz`: both shapes coexist while both have readers, each reads the one it understands, and the old one dies only
|
|
73
|
+
* when nobody reads it. `migrateVisual` accepts both, so the fallback — new key absent, old key present — returns
|
|
74
|
+
* exactly what the child chose.
|
|
75
|
+
*/
|
|
76
|
+
visualP: (i: number) => string;
|
|
77
|
+
sinkP: (i: number) => string;
|
|
78
|
+
easyP: (i: number) => string;
|
|
79
|
+
/**
|
|
80
|
+
* ⚠️ THE TWO BELOW ARE LEGACY KEYS (ADR-0104 §C, issue #114). They are still READ — it is the child's setting, and
|
|
81
|
+
* inheriting it keeps them from losing it — and never written again. What is written is the key WITH A TRANSPORT,
|
|
82
|
+
* because the toggle belongs to the DEVICE and not the person: turning it on for the touch pad, where nobody holds a
|
|
83
|
+
* virtual button comfortably, turned it on for the keyboard too, where holding a key is exactly what the child can do.
|
|
84
|
+
*
|
|
85
|
+
* ⚠️ AND THE NEW KEY DOES NOT LIVE HERE, on purpose. It is `latchKey`, in `input/latch-scope` — `platform/` does not
|
|
86
|
+
* import `input/`, the layer above. Building it here would need either a backwards edge or a second copy of the name.
|
|
87
|
+
* Whoever owns the name is whoever knows the transport rule.
|
|
88
|
+
*/
|
|
89
|
+
toggleMoveP: (i: number) => string;
|
|
90
|
+
toggleRunP: (i: number) => string;
|
|
91
|
+
rmWalkP: (i: number) => string;
|
|
92
|
+
rmBreathP: (i: number) => string;
|
|
93
|
+
rmFlavorP: (i: number) => string;
|
|
94
|
+
attract: (gameId: string, scenery: string) => string;
|
|
95
|
+
attractLegado: (scenery: string) => string;
|
|
96
|
+
};
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
// platform/storage-keys.ts — THE NAMES OF WHAT IS STORED: the register of known keys and the rule that scopes a game's key.
|
|
3
|
+
//
|
|
4
|
+
// 📌 A STATELESS MODULE ON PURPOSE (ADR-0232, issue #207): a key is a string, and a module that only needs the NAME must not
|
|
5
|
+
// import `platform/storage`, which reaches `localStorage`, to get it. `input/touch` and `ui/settings-mobility` read and write
|
|
6
|
+
// through an injected store and import only these names.
|
|
7
|
+
//
|
|
8
|
+
// 📌 WHY `platform/` AND NOT `core/` (ADR-0173): the table names places in the browser's persistent storage, and every module
|
|
9
|
+
// that reads it is at `platform` or above — the storage itself, the input, the renderer, the panels, and the games. `core/`
|
|
10
|
+
// reaches storage only through the port `core/state.createSettingsStore` receives (ADR-0178), which carries the keys it needs; putting
|
|
11
|
+
// the table in `core/` would invite the core to name storage places again, the dependency ADR-0178 took out.
|
|
12
|
+
//
|
|
13
|
+
// 📌 THIS IS THE ONLY HOME OF `KEYS` (ADR-0232 D2b): `platform/storage` is a factory now and publishes no key table. The
|
|
14
|
+
// port `core/state.createSettingsStore` receives carries the table beside the store — the root passes `{ ...store, KEYS }`.
|
|
15
|
+
/**
|
|
16
|
+
* The full name of a key in the GAME's scope.
|
|
17
|
+
*
|
|
18
|
+
* ⚠️ THE ID COMES IN AS AN ARGUMENT; it was once a constant. By ADR-0080's test — *would a second game want a different
|
|
19
|
+
* value here?* — the answer is yes, at once: two games in the same browser profile collided on every game-scoped key, and
|
|
20
|
+
* one overwrote the other's progress with no error at all.
|
|
21
|
+
*
|
|
22
|
+
* ⚠️ AND THE ID DOES NOT COME FROM THE DECLARATION, the obvious design. It cannot: a game's state is read before any
|
|
23
|
+
* `createGame()`, so an id from the declaration would arrive after the keys were resolved — against nothing, in silence.
|
|
24
|
+
* Whoever knows its own id is the GAME, which passes it as its own constant; ADR-0080 forbids the ENGINE from knowing it,
|
|
25
|
+
* not the game.
|
|
26
|
+
*/
|
|
27
|
+
export function gameKey(gameId, keyName) { return 'incl.' + gameId + '.' + keyName; }
|
|
28
|
+
// The register of known keys (documentation in ONE place; the source of truth is still their use). Keys taking an
|
|
29
|
+
// argument are parameterised by player, scenery or game. The two scopes — the CHILD's `incl_*` and the GAME's
|
|
30
|
+
// `incl.<game>.*` — are explained in `platform/storage`.
|
|
31
|
+
export const KEYS = {
|
|
32
|
+
// motor/hearing empathy
|
|
33
|
+
onebtn: 'incl_onebtn', wheelchair: 'incl_wheelchair', modocego: 'incl_modocego', caneDiv: 'incl_cane_div',
|
|
34
|
+
hearingloss: 'incl_hearingloss',
|
|
35
|
+
// activity / quiz / scenery — the GAME's SCOPE (see the two scopes in `platform/storage`). `*Legado` is the old name, which
|
|
36
|
+
// the read inherits from once; the write goes to the new one only.
|
|
37
|
+
//
|
|
38
|
+
// ⚠️ THEY ARE FUNCTIONS OF THE GAME'S ID, and the child's are strings. The difference of SHAPE is what prevents the
|
|
39
|
+
// mistake: a child's preference cannot be prefixed by accident, because it has nowhere to take the id — and a
|
|
40
|
+
// play-through's key cannot be left unscoped, because without the argument it does not compile. The rule that once
|
|
41
|
+
// lived only in a comment lives in the type.
|
|
42
|
+
activity: (gameId) => gameKey(gameId, 'activity'), activityLegado: 'incl_activity',
|
|
43
|
+
quizlevel: (gameId) => gameKey(gameId, 'quizlevel'), quizlevelLegado: 'incl_quizlevel',
|
|
44
|
+
cenario: (gameId) => gameKey(gameId, 'cenario'), cenarioLegado: 'incl_cenario',
|
|
45
|
+
tabsel: (gameId) => gameKey(gameId, 'tabsel'), tabselLegado: 'incl_tabsel',
|
|
46
|
+
fracnot: (gameId) => gameKey(gameId, 'fracnot'), fracnotLegado: 'incl_fracnot',
|
|
47
|
+
// visual / contrast / colour
|
|
48
|
+
viz: 'incl_viz', lq: 'incl_lq', cbsafe: 'incl_cbsafe', ownercolors: 'incl_ownercolors',
|
|
49
|
+
outfg: 'incl_outfg', outbg: 'incl_outbg', hcrole: 'incl_hcrole', juice: 'incl_juice', crt: 'incl_crt2',
|
|
50
|
+
crtLegacy: 'incl_crt', // the old (boolean) format; render/crt migrates it to incl_crt2 on the first read
|
|
51
|
+
// audio / voice / i18n
|
|
52
|
+
ttsEngine: 'incl_tts_engine', ttsVoice: 'incl_tts_voice', ttsVoz: 'incl_tts_voz', lang: 'incl_lang', // audiocat_{k}
|
|
53
|
+
// communication / captions (ADR-0028: every panel persists)
|
|
54
|
+
letterCase: 'incl_lettercase', captions: 'incl_captions',
|
|
55
|
+
// ⚠️ THE AUTISM-SUPPORT LEVEL (calm / quiet) PERSISTS. It used not to: the extraction from the monolith PRESERVED "never
|
|
56
|
+
// written to storage" verbatim, which is not the same as deciding it. The cost fell on the child who needs it most —
|
|
57
|
+
// whoever uses quiet mode set it again every session, and unexpected noise costs them most. ADR-0028: every panel persists.
|
|
58
|
+
tea: 'incl_tea',
|
|
59
|
+
menuIndex: 'incl_menuindex', // the "6 of 10" at the end of an item's announcement (ADR-0044, item 3)
|
|
60
|
+
// typography / controls / touch
|
|
61
|
+
fontKey: 'incl_font_k', padDesign: 'incl_paddesign', padDir: 'incl_paddir', touchmap: 'incl_touchmap',
|
|
62
|
+
padBtnMm: 'incl_padbtnmm', padGapMm: 'incl_padgapmm', padStickMm: 'incl_padstickmm',
|
|
63
|
+
padTravelMm: 'incl_padtravelmm', padDpadMm: 'incl_paddpadmm',
|
|
64
|
+
// reduced motion (the whole object in one JSON) + the old toggle-movement key, still read once to migrate whoever came
|
|
65
|
+
// from the previous version
|
|
66
|
+
reducedMotion: 'inclusionist.reducedmotion.v1', toggleMoveLegacy: 'inclusionist.togglemove',
|
|
67
|
+
// PER PLAYER — parameterised by the screen's index. As functions here, no call site can write a crooked name.
|
|
68
|
+
/**
|
|
69
|
+
* @deprecated ⚠️ THE LEGACY visual-mode KEY — ONE value, from when only one fitted (issue #104).
|
|
70
|
+
*
|
|
71
|
+
* It is still READ, which is what keeps the child from losing what they chose; it is still WRITTEN while the controls
|
|
72
|
+
* write one value at a time, because an old reader does `if (v && VIZ_BY_KEY[v])` and would reject a JSON — writing
|
|
73
|
+
* the new shape HERE would erase their setting in silence, exactly the defect the migration exists not to commit.
|
|
74
|
+
*/
|
|
75
|
+
vizP: (i) => 'incl_viz_p' + i,
|
|
76
|
+
/**
|
|
77
|
+
* The two-axis VISUAL STATE, in JSON (ADR-0076, issue #104).
|
|
78
|
+
*
|
|
79
|
+
* ⚠️ A NEW KEY BESIDE THE OLD ONE, not the same key with new content. The same design as the `visual` field beside
|
|
80
|
+
* `viz`: both shapes coexist while both have readers, each reads the one it understands, and the old one dies only
|
|
81
|
+
* when nobody reads it. `migrateVisual` accepts both, so the fallback — new key absent, old key present — returns
|
|
82
|
+
* exactly what the child chose.
|
|
83
|
+
*/
|
|
84
|
+
visualP: (i) => 'incl_visual_p' + i,
|
|
85
|
+
sinkP: (i) => 'incl_sink_p' + i,
|
|
86
|
+
easyP: (i) => 'incl_easy_p' + i,
|
|
87
|
+
/**
|
|
88
|
+
* ⚠️ THE TWO BELOW ARE LEGACY KEYS (ADR-0104 §C, issue #114). They are still READ — it is the child's setting, and
|
|
89
|
+
* inheriting it keeps them from losing it — and never written again. What is written is the key WITH A TRANSPORT,
|
|
90
|
+
* because the toggle belongs to the DEVICE and not the person: turning it on for the touch pad, where nobody holds a
|
|
91
|
+
* virtual button comfortably, turned it on for the keyboard too, where holding a key is exactly what the child can do.
|
|
92
|
+
*
|
|
93
|
+
* ⚠️ AND THE NEW KEY DOES NOT LIVE HERE, on purpose. It is `latchKey`, in `input/latch-scope` — `platform/` does not
|
|
94
|
+
* import `input/`, the layer above. Building it here would need either a backwards edge or a second copy of the name.
|
|
95
|
+
* Whoever owns the name is whoever knows the transport rule.
|
|
96
|
+
*/
|
|
97
|
+
toggleMoveP: (i) => 'incl_togglemove_p' + i,
|
|
98
|
+
toggleRunP: (i) => 'incl_togglerun_p' + i, // the RUN-button toggle (the movement one's sibling)
|
|
99
|
+
rmWalkP: (i) => 'incl_rmWalk_p' + i,
|
|
100
|
+
rmBreathP: (i) => 'incl_rmBreath_p' + i,
|
|
101
|
+
rmFlavorP: (i) => 'incl_rmFlavor_p' + i,
|
|
102
|
+
// demo/attract: one recording per scenery (a function, not a string — a parameterised key). The GAME's SCOPE: the
|
|
103
|
+
// recording is of a level of THIS game and means nothing in another.
|
|
104
|
+
attract: (gameId, scenery) => gameKey(gameId, 'attract_' + scenery),
|
|
105
|
+
attractLegado: (scenery) => 'incl_attract_' + scenery,
|
|
106
|
+
};
|
|
@@ -1,117 +1,52 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
export declare function get(key: string, fallback: string): string;
|
|
3
|
-
export declare function get(key: string, fallback?: null): string | null;
|
|
4
|
-
export declare function set(key: string, value: string | number | boolean): boolean;
|
|
5
|
-
export declare function remove(key: string): void;
|
|
6
|
-
export declare function getBool(key: string, fallback?: boolean): boolean;
|
|
7
|
-
export declare function setBool(key: string, on: boolean): void;
|
|
8
|
-
export declare function getNum(key: string, fallback?: number): number;
|
|
9
|
-
export declare function getJSON<T = unknown>(key: string, fallback?: T | null): T | null;
|
|
10
|
-
export declare function setJSON(key: string, obj: unknown): void;
|
|
11
2
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
3
|
+
* What the store wraps: the three methods of the Web Storage API it calls. A window's `localStorage` has this shape, and so
|
|
4
|
+
* does `memoryBackend()` — which is how a test, or a second root on the same page, gets storage nobody else writes.
|
|
5
|
+
*/
|
|
6
|
+
export interface StorageLike {
|
|
7
|
+
getItem(key: string): string | null;
|
|
8
|
+
setItem(key: string, value: string): void;
|
|
9
|
+
removeItem(key: string): void;
|
|
10
|
+
}
|
|
11
|
+
/** The store every persisting module receives: typed reads with a fallback, writes that never throw. */
|
|
12
|
+
export interface Store {
|
|
13
|
+
get(key: string, fallback: string): string;
|
|
14
|
+
get(key: string, fallback?: null): string | null;
|
|
15
|
+
/** `false` when the backend refused the write (quota, private mode, no storage at all). */
|
|
16
|
+
set(key: string, value: string | number | boolean): boolean;
|
|
17
|
+
remove(key: string): void;
|
|
18
|
+
getBool(key: string, fallback?: boolean): boolean;
|
|
19
|
+
setBool(key: string, on: boolean): void;
|
|
20
|
+
getNum(key: string, fallback?: number): number;
|
|
21
|
+
getJSON<T = unknown>(key: string, fallback?: T | null): T | null;
|
|
22
|
+
setJSON(key: string, obj: unknown): void;
|
|
23
|
+
/**
|
|
24
|
+
* Reads the NEW key; if it does not exist yet, inherits the LEGACY one's value. Read-only: whoever writes, writes to the
|
|
25
|
+
* new one. It is what lets a key be renamed without a migration step and without anyone losing a setting.
|
|
26
|
+
*/
|
|
27
|
+
getWithLegacy(newKey: string, legacyKey: string, fallback: string): string;
|
|
28
|
+
getWithLegacy(newKey: string, legacyKey: string, fallback?: null): string | null;
|
|
29
|
+
/** `getWithLegacy`'s pair for a JSON value — the inheritance has to hold for both formats, or half the keys migrate and
|
|
30
|
+
* the other half vanish, the worst of both worlds. */
|
|
31
|
+
getJsonWithLegacy<T = unknown>(newKey: string, legacyKey: string, fallback?: T | null): T | null;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* THE STORE, built around the backend it is GIVEN (ADR-0232). `null` is a host with no storage at all: every read gives its
|
|
35
|
+
* fallback and every write reports `false` — the same answer a throwing `localStorage` gives, so the two cannot differ.
|
|
18
36
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* três chaves já terem sido resolvidas — contra vazio, e em silêncio. Quem sabe o próprio id é o JOGO, que o
|
|
22
|
-
* passa como constante sua; o ADR-0080 proíbe a ENGINE de o saber, não o jogo.
|
|
37
|
+
* 📌 CLOSURES AND NOT METHODS ON `this`: `loadLocale({ ...store, ...hooks })` spreads the store into another object, and a
|
|
38
|
+
* method that read `this` would lose its backend in the spread.
|
|
23
39
|
*/
|
|
24
|
-
export declare function
|
|
40
|
+
export declare function createStorage(backend: StorageLike | null): Store;
|
|
25
41
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
42
|
+
* A backend kept in memory, seeded with `entries` — for a host with no storage worth writing to, and for a test: a file that
|
|
43
|
+
* builds its own cannot inherit another file's keys nor race it for them (ADR-0232 driver D4, the browser suite's F9).
|
|
28
44
|
*/
|
|
29
|
-
export declare function
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
*
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
modocego: string;
|
|
38
|
-
caneDiv: string;
|
|
39
|
-
hearingloss: string;
|
|
40
|
-
activity: (jogo: string) => string;
|
|
41
|
-
activityLegado: string;
|
|
42
|
-
quizlevel: (jogo: string) => string;
|
|
43
|
-
quizlevelLegado: string;
|
|
44
|
-
cenario: (jogo: string) => string;
|
|
45
|
-
cenarioLegado: string;
|
|
46
|
-
tabsel: (jogo: string) => string;
|
|
47
|
-
tabselLegado: string;
|
|
48
|
-
fracnot: (jogo: string) => string;
|
|
49
|
-
fracnotLegado: string;
|
|
50
|
-
viz: string;
|
|
51
|
-
lq: string;
|
|
52
|
-
cbsafe: string;
|
|
53
|
-
ownercolors: string;
|
|
54
|
-
outfg: string;
|
|
55
|
-
outbg: string;
|
|
56
|
-
hcrole: string;
|
|
57
|
-
juice: string;
|
|
58
|
-
crt: string;
|
|
59
|
-
crtLegacy: string;
|
|
60
|
-
ttsEngine: string;
|
|
61
|
-
ttsVoice: string;
|
|
62
|
-
lang: string;
|
|
63
|
-
letterCase: string;
|
|
64
|
-
captions: string;
|
|
65
|
-
tea: string;
|
|
66
|
-
menuIndex: string;
|
|
67
|
-
fontKey: string;
|
|
68
|
-
padDesign: string;
|
|
69
|
-
padDir: string;
|
|
70
|
-
touchmap: string;
|
|
71
|
-
padBtnMm: string;
|
|
72
|
-
padGapMm: string;
|
|
73
|
-
padStickMm: string;
|
|
74
|
-
padTravelMm: string;
|
|
75
|
-
padDpadMm: string;
|
|
76
|
-
reducedMotion: string;
|
|
77
|
-
toggleMoveLegacy: string;
|
|
78
|
-
/**
|
|
79
|
-
* @deprecated ⚠️ A CHAVE LEGADA do modo visual — UM valor, do tempo em que só cabia um (issue #104).
|
|
80
|
-
*
|
|
81
|
-
* Continua a ser LIDA, e é isso que impede a criança de perder o que já escolheu; continua a ser ESCRITA
|
|
82
|
-
* enquanto os controles ainda escreverem um valor de cada vez, porque um leitor antigo (o cartucho na
|
|
83
|
-
* versão publicada) faz `if (v && VIZ_BY_KEY[v])` e rejeitaria um JSON — escrever a forma nova AQUI
|
|
84
|
-
* apagaria o ajuste dela em silêncio, que é exactamente o defeito que a migração existe para não cometer.
|
|
85
|
-
*/
|
|
86
|
-
vizP: (i: number) => string;
|
|
87
|
-
/**
|
|
88
|
-
* O ESTADO VISUAL de dois eixos, em JSON (ADR-0076, issue #104).
|
|
89
|
-
*
|
|
90
|
-
* ⚠️ CHAVE NOVA AO LADO DA VELHA, e não a mesma chave com conteúdo novo. É o mesmo desenho que o campo
|
|
91
|
-
* `visual` usa ao lado do `viz`: as duas formas coexistem enquanto houver leitores das duas, cada um lê a
|
|
92
|
-
* que entende, e a velha só morre quando não sobrar quem a leia. `migrarVisual` aceita as duas, então o
|
|
93
|
-
* recuo — chave nova ausente, chave velha presente — devolve exactamente o que a criança escolheu.
|
|
94
|
-
*/
|
|
95
|
-
visualP: (i: number) => string;
|
|
96
|
-
sinkP: (i: number) => string;
|
|
97
|
-
easyP: (i: number) => string;
|
|
98
|
-
/**
|
|
99
|
-
* ⚠️ AS DUAS DE BAIXO SÃO AS CHAVES LEGADAS desde 2026-09-08 (ADR-0104 §C, issue #114). Continuam a ser
|
|
100
|
-
* LIDAS — é o ajuste da criança, e a herança dele é o que a impede de o perder — e não voltam a ser
|
|
101
|
-
* escritas. O que se escreve é a chave COM TRANSPORTE, porque a alternância é do APARELHO e não da pessoa:
|
|
102
|
-
* ligá-la no controle de tela, onde ninguém segura um botão virtual com conforto, ligava-a também no
|
|
103
|
-
* teclado, onde segurar uma tecla é exactamente o que a criança sabe fazer.
|
|
104
|
-
*
|
|
105
|
-
* ⚠️ E A CHAVE NOVA NÃO MORA AQUI, de propósito. Ela é `chaveDaAlternancia`, em `input/latch-scope` — este
|
|
106
|
-
* ficheiro é módulo-FOLHA e `platform/` não importa de `input/`, que é a camada acima. Montá-la aqui
|
|
107
|
-
* exigiria ou uma aresta ao contrário ou uma segunda cópia do nome, e a segunda cópia é exactamente o que
|
|
108
|
-
* o comentário do bloco acima existe para impedir. O dono do nome é quem conhece a regra do transporte.
|
|
109
|
-
*/
|
|
110
|
-
toggleMoveP: (i: number) => string;
|
|
111
|
-
toggleRunP: (i: number) => string;
|
|
112
|
-
rmWalkP: (i: number) => string;
|
|
113
|
-
rmBreathP: (i: number) => string;
|
|
114
|
-
rmFlavorP: (i: number) => string;
|
|
115
|
-
attract: (jogo: string, cen: string) => string;
|
|
116
|
-
attractLegado: (cen: string) => string;
|
|
117
|
-
};
|
|
45
|
+
export declare function memoryBackend(entries?: Iterable<readonly [string, string]>): StorageLike;
|
|
46
|
+
/**
|
|
47
|
+
* THE KEYS OUTSIDE EVERY ENGINE SCOPE (study item E2): not the child's `incl_*` (and the older `inclusionist.*`), not a
|
|
48
|
+
* game's `incl.<game>.*`. 📏 Measured: pinball stores `pinball:*`. ⚠️ A game's data stored in the CHILD's scope
|
|
49
|
+
* (chess's `incl_chess_*`) is not seen: the engine's own `incl_` keys are not one closed list, so that question would
|
|
50
|
+
* accuse the engine.
|
|
51
|
+
*/
|
|
52
|
+
export declare function keysOutsideScopes(storedKeys: Iterable<string>): string[];
|