@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,28 +1,40 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
import { type
|
|
3
|
-
import type {
|
|
4
|
-
import type {
|
|
5
|
-
|
|
2
|
+
import { type LatchPlayer } from './latch-sync.js';
|
|
3
|
+
import type { LatchStore } from './latch-store.js';
|
|
4
|
+
import type { TransportName } from './transport-in-use.js';
|
|
5
|
+
import type { LiveInput } from './state.js';
|
|
6
|
+
export interface LatchedEdgeOptions {
|
|
6
7
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* ⚠️ Padrão e não campo obrigatório, e a razão é a mesma do `ui/pause-icons`: um armazém injectado é uma
|
|
10
|
-
* coisa que um cartucho pode omitir, e omiti-la faria a criança perder a escolha guardada — em silêncio, e
|
|
11
|
-
* só naquele jogo.
|
|
8
|
+
* The input state whose transport automaton records the edge — the root's (`Engine.input`, ADR-0232 D4). REQUIRED: an
|
|
9
|
+
* edge recorded in another root's state would move THAT root's latch, and this child's would never follow the device.
|
|
12
10
|
*/
|
|
13
|
-
readonly
|
|
14
|
-
/**
|
|
15
|
-
|
|
11
|
+
readonly input: Pick<LiveInput, 'playerEdge' | 'inputOf'>;
|
|
12
|
+
/**
|
|
13
|
+
* The page's store, built by the root (ADR-0232, issue #207). REQUIRED, and the reason is the one that once gave it a
|
|
14
|
+
* default: omitting it would make the child lose their stored choice — in silence, and only in that game. The compiler
|
|
15
|
+
* now refuses the omission instead of a default reaching the page's one `localStorage` underneath the host.
|
|
16
|
+
*/
|
|
17
|
+
readonly store: LatchStore;
|
|
18
|
+
/** The factory default. `DEFAULTS.toggleMove`, not a hand-written `false`: there is ONE source (ADR-0029). */
|
|
19
|
+
readonly byDefault?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* DOES THE MOUNTED GAME HOLD ANY KEY NOW? — `GameDeclaration.holdsKeys` (ADR-0249), the latch's default on eyes, face,
|
|
22
|
+
* gestures and speech. A FUNCTION, called at every edge: a game changes its answer between stages (ADR-0084), and the
|
|
23
|
+
* next command must follow the stage it lands in. REQUIRED, like `holdsKeys` itself: `true` latches a quiz's every word,
|
|
24
|
+
* `false` stops a platform game's «direita» after one step, so no default is safe.
|
|
25
|
+
*/
|
|
26
|
+
readonly holdsKeys: () => boolean;
|
|
16
27
|
}
|
|
17
28
|
/**
|
|
18
|
-
*
|
|
19
|
-
*
|
|
29
|
+
* RETURNS THE `playerEdge` THAT ALSO RESOLVES THE TOGGLE. The root calls it from the virtual controller's `pressedBy`, the one
|
|
30
|
+
* door every transport's press goes through (ADR-0109 rule 3); a host without that door hands it to `initKeydown`,
|
|
31
|
+
* `initTouchBindings` and `initGamepad` in place of the raw one.
|
|
20
32
|
*
|
|
21
|
-
* ⚠️
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
33
|
+
* ⚠️ IT RESOLVES AGAINST `inputOf(player).inUse` AND NOT `origin`, a difference of design and not of behaviour: today the
|
|
34
|
+
* edge always sets in-use to the origin, so swapping one for the other is an EQUIVALENT mutation — recorded as such in the
|
|
35
|
+
* gate, instead of pretending coverage. What the choice buys is the future: the state machine decides which device is in
|
|
36
|
+
* use, and the day it gains a rule that REFUSES an edge (a webcam false positive being filtered, say) this line follows
|
|
37
|
+
* it without being edited. Reading `origin` would be a second answer to the question `input/transport-in-use` exists to
|
|
38
|
+
* answer.
|
|
27
39
|
*/
|
|
28
|
-
export declare function
|
|
40
|
+
export declare function createLatchedEdge(getPlayers: () => readonly (LatchPlayer | null | undefined)[], opts: LatchedEdgeOptions): (player: number, origin: TransportName) => void;
|
|
@@ -1,45 +1,44 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// input/latch-edge.ts —
|
|
2
|
+
// input/latch-edge.ts — THE EDGE AND THE TOGGLE, IN ONE FUNCTION (ADR-0113, issue #127).
|
|
3
3
|
//
|
|
4
|
-
// =========================
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
4
|
+
// ========================= WHY THE PAIR CANNOT SPLIT =========================
|
|
5
|
+
// Recording which device an edge came from and resolving that device's toggle are two halves of ONE event: the child
|
|
6
|
+
// changed controls. Done in different places, the second can go missing — the kind of defect this project has paid for
|
|
7
|
+
// several times: the state machine knows they picked up the pad, and the game keeps moving with the keyboard's toggle.
|
|
8
|
+
// No error, and only the child notices.
|
|
9
9
|
//
|
|
10
|
-
// 📌
|
|
11
|
-
//
|
|
10
|
+
// 📌 The same move as the menu navigation's "one function so the pair never splits", and the double write in
|
|
11
|
+
// `ui/settings-mobility`.
|
|
12
12
|
//
|
|
13
|
-
// ⚠️
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
|
|
18
|
-
import
|
|
19
|
-
import { DEFAULTS } from '../core/state.js';
|
|
20
|
-
import { arestaDoJogador, entradaDe } from './state.js';
|
|
21
|
-
import { sincronizarAlternancia } from './latch-sync.js';
|
|
13
|
+
// ⚠️ AND IT IS A FACTORY, NOT A NEW FIELD IN EVERY INPUT MODULE'S CONTEXT. The keyboard and touch transports already
|
|
14
|
+
// receive `playerEdge(player, origin)`; this returns one with that same signature, so the wiring is right without either
|
|
15
|
+
// of them knowing the toggle exists. A second required field in two contexts would be more public surface, one more
|
|
16
|
+
// thing a cartridge can forget, and the same question asked twice.
|
|
17
|
+
import { DEFAULTS } from '../core/setting-defaults.js';
|
|
18
|
+
import { syncLatch } from './latch-sync.js';
|
|
22
19
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
20
|
+
* RETURNS THE `playerEdge` THAT ALSO RESOLVES THE TOGGLE. The root calls it from the virtual controller's `pressedBy`, the one
|
|
21
|
+
* door every transport's press goes through (ADR-0109 rule 3); a host without that door hands it to `initKeydown`,
|
|
22
|
+
* `initTouchBindings` and `initGamepad` in place of the raw one.
|
|
25
23
|
*
|
|
26
|
-
* ⚠️
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
24
|
+
* ⚠️ IT RESOLVES AGAINST `inputOf(player).inUse` AND NOT `origin`, a difference of design and not of behaviour: today the
|
|
25
|
+
* edge always sets in-use to the origin, so swapping one for the other is an EQUIVALENT mutation — recorded as such in the
|
|
26
|
+
* gate, instead of pretending coverage. What the choice buys is the future: the state machine decides which device is in
|
|
27
|
+
* use, and the day it gains a rule that REFUSES an edge (a webcam false positive being filtered, say) this line follows
|
|
28
|
+
* it without being edited. Reading `origin` would be a second answer to the question `input/transport-in-use` exists to
|
|
29
|
+
* answer.
|
|
32
30
|
*/
|
|
33
|
-
export function
|
|
34
|
-
const
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
//
|
|
40
|
-
//
|
|
41
|
-
|
|
31
|
+
export function createLatchedEdge(getPlayers, opts) {
|
|
32
|
+
const latchStore = opts.store;
|
|
33
|
+
const { playerEdge, inputOf } = opts.input;
|
|
34
|
+
const fallback = opts.byDefault ?? DEFAULTS.toggleMove;
|
|
35
|
+
return (player, origin) => {
|
|
36
|
+
playerEdge(player, origin);
|
|
37
|
+
// 📌 THE PLAYER MAY NOT EXIST — a waiting screen, a seat not joined yet — and that does not make the edge invalid:
|
|
38
|
+
// the transport in use is a fact about the INPUT and is recorded all the same. What does not happen is the second
|
|
39
|
+
// half, because there is nowhere to write it.
|
|
40
|
+
const p = getPlayers()[player];
|
|
42
41
|
if (p)
|
|
43
|
-
|
|
42
|
+
syncLatch(p, latchStore, player, inputOf(player).inUse, { byDefault: fallback, gameHoldsKeys: opts.holdsKeys() });
|
|
44
43
|
};
|
|
45
44
|
}
|
|
@@ -1,70 +1,71 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* The transports that emit ONE COMMAND AT A TIME, on which the latch's default is the game's `holdsKeys()` (ADR-0249).
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* (`teclado`, `toque`) — `transportesPadrao` já mistura, e mudar isso é outra conversa.
|
|
5
|
+
* The values are transport names, which stay Portuguese like the rest of that vocabulary (`teclado`, `toque`): they are
|
|
6
|
+
* stored, and renaming a stored value loses what the child saved.
|
|
8
7
|
*/
|
|
9
|
-
export declare const
|
|
8
|
+
export declare const ONE_COMMAND_AT_A_TIME: ReadonlySet<string>;
|
|
10
9
|
/**
|
|
11
|
-
*
|
|
10
|
+
* Does this transport's latch start where the GAME says (ADR-0249)?
|
|
12
11
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* chega a ser lido nestes transportes — ver `alternanciaDe`.
|
|
12
|
+
* `true` on the four one-command transports: with nothing stored for them, the latch is the game's `holdsKeys()`. The
|
|
13
|
+
* option is offered on every transport alike; this answers only where the default comes from.
|
|
16
14
|
*/
|
|
17
|
-
export declare function
|
|
15
|
+
export declare function latchDefaultFromGame(transport: string): boolean;
|
|
18
16
|
/**
|
|
19
|
-
*
|
|
17
|
+
* The toggle's storage key, with the transport in its name.
|
|
20
18
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*/
|
|
25
|
-
export declare function alternanciaEhEscolha(transporte: string): boolean;
|
|
26
|
-
/**
|
|
27
|
-
* A chave de armazenamento da alternância, agora com o transporte no nome.
|
|
19
|
+
* ⚠️ A FUNCTION, and not concatenation at the call site, for the reason `platform/storage` gives for the per-player keys:
|
|
20
|
+
* as a function, no call site can write a crooked name. Not a hypothesis — the mobility panel once rewrote the per-player
|
|
21
|
+
* key by hand, with a comment beside it saying it matched storage's. Two copies of a name change one at a time.
|
|
28
22
|
*
|
|
29
|
-
*
|
|
30
|
-
* chaves por jogador: «virar função aqui é o que impede que um deles escreva num nome torto». Não é
|
|
31
|
-
* hipótese — o `ui/settings-motor` reescrevia `'incl_togglerun_p' + i` à mão, com um comentário ao lado a
|
|
32
|
-
* dizer «== toggleRunP de platform/storage». Duas cópias de um nome mudam uma de cada vez.
|
|
33
|
-
*
|
|
34
|
-
* `base` é `togglemove` ou `togglerun`, os dois nomes que já existem no armazenamento da criança.
|
|
23
|
+
* `base` is `togglemove` or `togglerun`, the two names that already exist in the child's storage.
|
|
35
24
|
*/
|
|
36
|
-
export declare function
|
|
25
|
+
export declare function latchKey(base: string, player: number, transport: string): string;
|
|
37
26
|
/**
|
|
38
|
-
*
|
|
27
|
+
* The OLD key, per player and without a transport. Still read, never written again.
|
|
28
|
+
*
|
|
29
|
+
* ⚠️ IT IS INHERITED BY THE KEYBOARD, THE PAD AND TOUCH, and the choice takes a sentence to explain. The old value was set
|
|
30
|
+
* by the child in some context, and there is no way to know which — the key did not record it, which is the defect. The
|
|
31
|
+
* ways out were three: lose their setting, guess a transport, or inherit for all. Inheriting is the only one that takes
|
|
32
|
+
* nothing from whoever depends on the setting, and the leak it keeps lasts only until the child touches the setting once
|
|
33
|
+
* on each device. Losing the setting would cost more, and to whoever can least afford it.
|
|
39
34
|
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
* saídas eram três: perder o ajuste dela, adivinhar um transporte, ou herdar para todos. Herdar para todos é
|
|
43
|
-
* a única que não tira nada a quem depende do ajuste, e o vazamento que ela mantém dura só até a criança
|
|
44
|
-
* mexer no assunto uma vez em cada aparelho. Perder o ajuste custaria mais, e a quem menos pode pagar.
|
|
35
|
+
* 📌 NOT BY THE FOUR ONE-COMMAND TRANSPORTS (ADR-0249): there the default is the game's answer, and a value the child set
|
|
36
|
+
* on the keyboard is not a choice about how a spoken word or a look should behave in this game.
|
|
45
37
|
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* dado da criança, não meu para apagar, e a sua permanência é o que torna um retorno possível».
|
|
38
|
+
* It is also the pattern this repository chose for this same value before: the old key stays where it is — it is the
|
|
39
|
+
* child's data, not mine to delete, and keeping it is what makes a way back possible.
|
|
49
40
|
*/
|
|
50
|
-
export declare function
|
|
51
|
-
/**
|
|
52
|
-
export interface
|
|
53
|
-
/**
|
|
54
|
-
readonly
|
|
55
|
-
/**
|
|
56
|
-
readonly
|
|
57
|
-
/**
|
|
58
|
-
readonly
|
|
41
|
+
export declare function legacyLatchKey(base: string, player: number): string;
|
|
42
|
+
/** What is known when resolving a transport's toggle. */
|
|
43
|
+
export interface LatchReading {
|
|
44
|
+
/** What is stored for THIS transport. `null` = never written. */
|
|
45
|
+
readonly fromTransport: boolean | null;
|
|
46
|
+
/** What is stored under the old key, without a transport. `null` = never written. */
|
|
47
|
+
readonly fromLegacy: boolean | null;
|
|
48
|
+
/** The factory default (`DEFAULTS.toggleMove` / `DEFAULTS.toggleRun`). */
|
|
49
|
+
readonly byDefault: boolean;
|
|
50
|
+
/**
|
|
51
|
+
* THE GAME'S ANSWER, NOW: `GameDeclaration.holdsKeys()` (ADR-0249). The default on the one-command transports.
|
|
52
|
+
*
|
|
53
|
+
* ⚠️ READ WHEN THE LATCH IS RESOLVED, not once at boot: a game changes it between stages (ADR-0084), and a latch resolved
|
|
54
|
+
* from a stale answer would keep a quiz stage latched because the stage before it held keys. REQUIRED, like `holdsKeys`
|
|
55
|
+
* itself: both values can be wrong, so there is no safe default to fall back on.
|
|
56
|
+
*/
|
|
57
|
+
readonly gameHoldsKeys: boolean;
|
|
59
58
|
}
|
|
59
|
+
/** The two defaults a resolution needs from outside storage — the factory's and the game's. */
|
|
60
|
+
export type LatchDefaults = Pick<LatchReading, 'byDefault' | 'gameHoldsKeys'>;
|
|
60
61
|
/**
|
|
61
|
-
*
|
|
62
|
+
* This transport's toggle, resolved.
|
|
62
63
|
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
64
|
+
* The order: this transport's stored value · on a one-command transport, the game's `holdsKeys()` · the legacy value ·
|
|
65
|
+
* the factory default.
|
|
65
66
|
*
|
|
66
|
-
* ⚠️
|
|
67
|
-
*
|
|
68
|
-
*
|
|
67
|
+
* ⚠️ THE STORED VALUE COMES FIRST ON EVERY TRANSPORT (ADR-0249): the child's choice for this device wins over any default,
|
|
68
|
+
* including the game's. And a stored `false` is a VALUE, not an absence — the `!== null` is what keeps a latch the child
|
|
69
|
+
* turned off from coming back by itself.
|
|
69
70
|
*/
|
|
70
|
-
export declare function
|
|
71
|
+
export declare function latchOf(transport: string, l: LatchReading): boolean;
|
|
@@ -1,110 +1,89 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// input/latch-scope —
|
|
2
|
+
// input/latch-scope — THE TOGGLE BELONGS TO A TRANSPORT, not to the child (ADR-0104 §C, issue #114).
|
|
3
3
|
//
|
|
4
|
-
// =========================
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
4
|
+
// ========================= THE DEFECT THIS FIXES, WHICH HAD NO NAME =========================
|
|
5
|
+
// "Holding becomes toggling" was stored PER PLAYER — `incl_togglemove_p0` — that is: per person, and for every device
|
|
6
|
+
// at once. A child who turns the toggle on for the on-screen pad, because nobody holds a virtual button comfortably,
|
|
7
|
+
// turns it on for the keyboard too, where holding a key is exactly what they can do. They did not ask for that and
|
|
8
|
+
// nothing tells them.
|
|
9
9
|
//
|
|
10
|
-
// ⚠️
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
// essa marca existia para compensar uma chave que estava no escopo errado.
|
|
10
|
+
// ⚠️ AND THE REPOSITORY ALREADY KNEW THE DEFECT WITHOUT NAMING IT: the run toggle is born off at the factory and switches
|
|
11
|
+
// itself on with the on-screen pad, which is CONTEXT and not choice. Context is exactly the word: the value depends on
|
|
12
|
+
// the device the child is on. Keeping it per person forced a separate mark (ADR-0029) to tell "turned on because they
|
|
13
|
+
// wanted" from "turned on because it is touch" — a mark compensating for a key in the wrong scope.
|
|
15
14
|
//
|
|
16
|
-
//
|
|
15
|
+
// The key mapping is already kept per transport, and always was. This is the same thing.
|
|
17
16
|
//
|
|
18
|
-
// =========================
|
|
19
|
-
//
|
|
20
|
-
//
|
|
21
|
-
//
|
|
22
|
-
//
|
|
17
|
+
// ========================= ON FOUR TRANSPORTS THE GAME SETS THE DEFAULT (ADR-0249) =========================
|
|
18
|
+
// Eyes, face, gestures and speech emit ONE COMMAND AT A TIME: a word or a look is a tap, never a hold. Whether that tap
|
|
19
|
+
// should keep going is the GAME's to say — in a platform game «direita» keeps the character walking, in a quiz «abaixo»
|
|
20
|
+
// moves the cursor once — and the game already says it: `GameDeclaration.holdsKeys()`. So on these four the latch STARTS
|
|
21
|
+
// as the game answers, and the child's stored choice for that transport, when there is one, wins (ADR-0104 §C: a default
|
|
22
|
+
// is not a lock). Keyboard, pad and touch keep the factory default and the legacy inheritance below.
|
|
23
23
|
//
|
|
24
|
-
//
|
|
25
|
-
// significa escolha»: a alternância a ligar-se sozinha na webcam era uma excepção àquela regra. Deixa de
|
|
26
|
-
// ser, porque nestes transportes ela nunca foi um valor salvo — é uma propriedade do transporte.
|
|
27
|
-
//
|
|
28
|
-
// ⚠️ OS QUATRO AINDA NÃO EXISTEM COMO TRANSPORTE, e a regra fica escrita à mesma. Medido em 2026-09-08: o
|
|
29
|
-
// `transportesPadrao` devolve três (gamepad, teclado, toque), e o `ui/webcam` sintetiza `KeyboardEvent` — do
|
|
30
|
-
// ponto de vista da engine, ele É o teclado. Os três ícones da barra rápida dizem-no: `face`, `eyes` e
|
|
31
|
-
// `voice` estão marcados `soon`. Escrever a regra agora custa nada e faz com que eles cheguem COBERTOS, em
|
|
32
|
-
// vez de chegarem a uma excepção que alguém terá de se lembrar de abrir.
|
|
33
|
-
//
|
|
34
|
-
// Módulo-folha: não importa nada, nem sequer o `platform/storage` cujas chaves ele monta.
|
|
24
|
+
// A leaf module: it imports nothing, not even the `platform/storage` whose keys it builds.
|
|
35
25
|
/**
|
|
36
|
-
*
|
|
26
|
+
* The transports that emit ONE COMMAND AT A TIME, on which the latch's default is the game's `holdsKeys()` (ADR-0249).
|
|
37
27
|
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
* (`teclado`, `toque`) — `transportesPadrao` já mistura, e mudar isso é outra conversa.
|
|
28
|
+
* The values are transport names, which stay Portuguese like the rest of that vocabulary (`teclado`, `toque`): they are
|
|
29
|
+
* stored, and renaming a stored value loses what the child saved.
|
|
41
30
|
*/
|
|
42
|
-
export const
|
|
31
|
+
export const ONE_COMMAND_AT_A_TIME = new Set(['olhos', 'rosto', 'gestos', 'fala']);
|
|
43
32
|
/**
|
|
44
|
-
*
|
|
33
|
+
* Does this transport's latch start where the GAME says (ADR-0249)?
|
|
45
34
|
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* chega a ser lido nestes transportes — ver `alternanciaDe`.
|
|
35
|
+
* `true` on the four one-command transports: with nothing stored for them, the latch is the game's `holdsKeys()`. The
|
|
36
|
+
* option is offered on every transport alike; this answers only where the default comes from.
|
|
49
37
|
*/
|
|
50
|
-
export function
|
|
51
|
-
return
|
|
38
|
+
export function latchDefaultFromGame(transport) {
|
|
39
|
+
return ONE_COMMAND_AT_A_TIME.has(transport);
|
|
52
40
|
}
|
|
53
41
|
/**
|
|
54
|
-
*
|
|
42
|
+
* The toggle's storage key, with the transport in its name.
|
|
55
43
|
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*/
|
|
60
|
-
export function alternanciaEhEscolha(transporte) {
|
|
61
|
-
return !alternanciaSempreLigada(transporte);
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* A chave de armazenamento da alternância, agora com o transporte no nome.
|
|
65
|
-
*
|
|
66
|
-
* ⚠️ FUNÇÃO, e não concatenação no ponto de uso, pela razão que o `platform/storage` já escreveu sobre as
|
|
67
|
-
* chaves por jogador: «virar função aqui é o que impede que um deles escreva num nome torto». Não é
|
|
68
|
-
* hipótese — o `ui/settings-motor` reescrevia `'incl_togglerun_p' + i` à mão, com um comentário ao lado a
|
|
69
|
-
* dizer «== toggleRunP de platform/storage». Duas cópias de um nome mudam uma de cada vez.
|
|
44
|
+
* ⚠️ A FUNCTION, and not concatenation at the call site, for the reason `platform/storage` gives for the per-player keys:
|
|
45
|
+
* as a function, no call site can write a crooked name. Not a hypothesis — the mobility panel once rewrote the per-player
|
|
46
|
+
* key by hand, with a comment beside it saying it matched storage's. Two copies of a name change one at a time.
|
|
70
47
|
*
|
|
71
|
-
* `base`
|
|
48
|
+
* `base` is `togglemove` or `togglerun`, the two names that already exist in the child's storage.
|
|
72
49
|
*/
|
|
73
|
-
export function
|
|
74
|
-
return `incl_${base}_p${
|
|
50
|
+
export function latchKey(base, player, transport) {
|
|
51
|
+
return `incl_${base}_p${player}_${transport}`;
|
|
75
52
|
}
|
|
76
53
|
/**
|
|
77
|
-
*
|
|
54
|
+
* The OLD key, per player and without a transport. Still read, never written again.
|
|
55
|
+
*
|
|
56
|
+
* ⚠️ IT IS INHERITED BY THE KEYBOARD, THE PAD AND TOUCH, and the choice takes a sentence to explain. The old value was set
|
|
57
|
+
* by the child in some context, and there is no way to know which — the key did not record it, which is the defect. The
|
|
58
|
+
* ways out were three: lose their setting, guess a transport, or inherit for all. Inheriting is the only one that takes
|
|
59
|
+
* nothing from whoever depends on the setting, and the leak it keeps lasts only until the child touches the setting once
|
|
60
|
+
* on each device. Losing the setting would cost more, and to whoever can least afford it.
|
|
78
61
|
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
* saídas eram três: perder o ajuste dela, adivinhar um transporte, ou herdar para todos. Herdar para todos é
|
|
82
|
-
* a única que não tira nada a quem depende do ajuste, e o vazamento que ela mantém dura só até a criança
|
|
83
|
-
* mexer no assunto uma vez em cada aparelho. Perder o ajuste custaria mais, e a quem menos pode pagar.
|
|
62
|
+
* 📌 NOT BY THE FOUR ONE-COMMAND TRANSPORTS (ADR-0249): there the default is the game's answer, and a value the child set
|
|
63
|
+
* on the keyboard is not a choice about how a spoken word or a look should behave in this game.
|
|
84
64
|
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
* dado da criança, não meu para apagar, e a sua permanência é o que torna um retorno possível».
|
|
65
|
+
* It is also the pattern this repository chose for this same value before: the old key stays where it is — it is the
|
|
66
|
+
* child's data, not mine to delete, and keeping it is what makes a way back possible.
|
|
88
67
|
*/
|
|
89
|
-
export function
|
|
90
|
-
return `incl_${base}_p${
|
|
68
|
+
export function legacyLatchKey(base, player) {
|
|
69
|
+
return `incl_${base}_p${player}`;
|
|
91
70
|
}
|
|
92
71
|
/**
|
|
93
|
-
*
|
|
72
|
+
* This transport's toggle, resolved.
|
|
94
73
|
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
74
|
+
* The order: this transport's stored value · on a one-command transport, the game's `holdsKeys()` · the legacy value ·
|
|
75
|
+
* the factory default.
|
|
97
76
|
*
|
|
98
|
-
* ⚠️
|
|
99
|
-
*
|
|
100
|
-
*
|
|
77
|
+
* ⚠️ THE STORED VALUE COMES FIRST ON EVERY TRANSPORT (ADR-0249): the child's choice for this device wins over any default,
|
|
78
|
+
* including the game's. And a stored `false` is a VALUE, not an absence — the `!== null` is what keeps a latch the child
|
|
79
|
+
* turned off from coming back by itself.
|
|
101
80
|
*/
|
|
102
|
-
export function
|
|
103
|
-
if (
|
|
104
|
-
return
|
|
105
|
-
if (
|
|
106
|
-
return l.
|
|
107
|
-
if (l.
|
|
108
|
-
return l.
|
|
109
|
-
return l.
|
|
81
|
+
export function latchOf(transport, l) {
|
|
82
|
+
if (l.fromTransport !== null)
|
|
83
|
+
return l.fromTransport;
|
|
84
|
+
if (latchDefaultFromGame(transport))
|
|
85
|
+
return l.gameHoldsKeys;
|
|
86
|
+
if (l.fromLegacy !== null)
|
|
87
|
+
return l.fromLegacy;
|
|
88
|
+
return l.byDefault;
|
|
110
89
|
}
|
|
@@ -1,45 +1,41 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
import { type
|
|
3
|
-
/**
|
|
4
|
-
export interface
|
|
5
|
-
/** ⚠️
|
|
6
|
-
get(
|
|
7
|
-
set(
|
|
2
|
+
import { type LatchReading, type LatchDefaults } from './latch-scope.js';
|
|
3
|
+
/** The minimum of `platform/storage` this needs. Injected, so the gate needs no browser. */
|
|
4
|
+
export interface LatchStore {
|
|
5
|
+
/** ⚠️ The RAW read, not `getBool`. See `readTriState`. */
|
|
6
|
+
get(key: string, fallback?: null): string | null;
|
|
7
|
+
set(key: string, value: string): void;
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
10
|
+
* THREE STATES, NOT TWO: `true`, `false`, and NEVER WRITTEN.
|
|
11
11
|
*
|
|
12
|
-
* 🔴
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
12
|
+
* 🔴 THIS FUNCTION EXISTS SO `getBool` IS NOT USED, and the difference costs a child's setting. `getBool` collapses
|
|
13
|
+
* "never written" into `false`. With it, the per-transport value of a child who never touched this device would reach the
|
|
14
|
+
* rule as `false` — and the rule answers at the FIRST line that finds a value, so it would return `false` and **never
|
|
15
|
+
* consult the legacy key**, where the setting they already had lives.
|
|
16
16
|
*
|
|
17
|
-
* ⚠️
|
|
18
|
-
*
|
|
17
|
+
* ⚠️ That is why `latch-scope` types both fields `boolean | null` and has a case of its own saying "a stored `false` is a
|
|
18
|
+
* VALUE, not an absence". This is the storage side of the same sentence.
|
|
19
19
|
*/
|
|
20
|
-
export declare function
|
|
20
|
+
export declare function readTriState(store: LatchStore, key: string): boolean | null;
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
22
|
+
* THE WHOLE READING the rule asks for, built from storage.
|
|
23
23
|
*
|
|
24
|
-
* `base`
|
|
24
|
+
* `base` is `togglemove` or `togglerun` — the two names that already exist in the child's storage. `defaults` carries what
|
|
25
|
+
* storage does not know: the factory default and the game's `holdsKeys()` answer now (ADR-0249).
|
|
25
26
|
*/
|
|
26
|
-
export declare function
|
|
27
|
+
export declare function readLatch(store: LatchStore, base: string, player: number, transport: string, defaults: LatchDefaults): LatchReading;
|
|
27
28
|
/**
|
|
28
|
-
*
|
|
29
|
+
* THIS PLAYER'S TOGGLE ON THIS TRANSPORT — the whole question, in one call.
|
|
29
30
|
*
|
|
30
|
-
* 📌
|
|
31
|
-
*
|
|
31
|
+
* 📌 SWITCHING TRANSPORT SWITCHES THE ANSWER WITHOUT WRITING ANYTHING, clause 1 of ADR-0113 in code: the value belongs to
|
|
32
|
+
* the controls' mapping, like a caps lock, and changing controls is changing mapping.
|
|
32
33
|
*/
|
|
33
|
-
export declare function
|
|
34
|
+
export declare function storedLatch(store: LatchStore, base: string, player: number, transport: string, defaults: LatchDefaults): boolean;
|
|
34
35
|
/**
|
|
35
|
-
*
|
|
36
|
+
* WRITES THE CHILD'S CHOICE for the transport in use — on EVERY transport (ADR-0249).
|
|
36
37
|
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* escolha a gravar. Quem chama usa a resposta para DESABILITAR o controle COM MOTIVO — que é a metade que
|
|
40
|
-
* falta e que vive na interface, não aqui.
|
|
41
|
-
*
|
|
42
|
-
* 📌 Gravar mesmo assim seria pior do que inútil: a criança mexeria no ícone, o valor iria para o disco, e o
|
|
43
|
-
* jogo continuaria a ignorá-lo — um controle que mente sobre ter funcionado.
|
|
38
|
+
* 📌 Eyes, face, gestures and speech included: their latch starts as the game answers `holdsKeys()`, and what is written
|
|
39
|
+
* here is the child changing that default for that device. The stored value is what `latchOf` reads first.
|
|
44
40
|
*/
|
|
45
|
-
export declare function
|
|
41
|
+
export declare function writeLatch(write: (key: string, isOn: boolean) => void, base: string, player: number, transport: string, isOn: boolean): void;
|