@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,115 +1,118 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
readonly simulacao: Simulacao;
|
|
13
|
-
}
|
|
14
|
-
export declare const PADRAO: VisualState;
|
|
2
|
+
import type { Theme as TemaDoCore, Correction as CorrecaoDoCore, Simulation as SimulacaoDoCore, VisualState as VisualStateDoCore } from '../core/visual-state.js';
|
|
3
|
+
/** The CONTRAST axis (`core/visual-state`). */
|
|
4
|
+
export type Theme = TemaDoCore;
|
|
5
|
+
/** The COLOUR CORRECTION axis (`core/visual-state`). */
|
|
6
|
+
export type Correction = CorrecaoDoCore;
|
|
7
|
+
/** The simulation, which is NOT an axis (`core/visual-state`). */
|
|
8
|
+
export type Simulation = SimulacaoDoCore;
|
|
9
|
+
/** ONE player's visual state (`core/visual-state`). The field names and values stay Portuguese: they are stored. */
|
|
10
|
+
export type VisualState = VisualStateDoCore;
|
|
11
|
+
export declare const DEFAULT_VISUAL: VisualState;
|
|
15
12
|
/**
|
|
16
|
-
*
|
|
13
|
+
* Are both axes at their default?
|
|
17
14
|
*
|
|
18
|
-
* ⚠️
|
|
19
|
-
*
|
|
20
|
-
*
|
|
15
|
+
* ⚠️ IT IS THE QUESTION THAT RELEASES THE SIMULATION, which is why it is a function and not a stored boolean: storing the
|
|
16
|
+
* result would let the two drift apart, and here a drift means a demonstration running over an adaptation — which
|
|
17
|
+
* teaches something false.
|
|
21
18
|
*/
|
|
22
|
-
export declare function
|
|
19
|
+
export declare function bothAxesAtDefault(v: VisualState): boolean;
|
|
23
20
|
/**
|
|
24
|
-
*
|
|
21
|
+
* Can this simulation run NOW? And if not, why?
|
|
25
22
|
*
|
|
26
|
-
* ⚠️
|
|
27
|
-
*
|
|
28
|
-
*
|
|
23
|
+
* ⚠️ IT RETURNS THE REASON AND NOT JUST `false`. ADR-0076 requires the refusal to be VISIBLE and explained — never
|
|
24
|
+
* silently removed, never accepted then ignored. And the reason is a FACT ABOUT THE DEMONSTRATION, not a reproach to
|
|
25
|
+
* whoever chose: whoever turned high contrast on did so because they need it.
|
|
29
26
|
*/
|
|
30
|
-
export type
|
|
31
|
-
export declare function
|
|
32
|
-
/** A chave de modo DIRETO que este tema usa, ou `null` para o tema padrão. */
|
|
33
|
-
export declare function temaDireto(v: VisualState): string | null;
|
|
27
|
+
export type UnavailableReason = 'tema' | 'correcao' | 'ambos';
|
|
28
|
+
export declare function simulationUnavailable(v: VisualState): UnavailableReason | null;
|
|
34
29
|
/**
|
|
35
|
-
*
|
|
30
|
+
* The CSS FILTER key this state uses, or `null`.
|
|
36
31
|
*
|
|
37
|
-
* ⚠️
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
32
|
+
* ⚠️ SIMULATION BEATS CORRECTION HERE, and it is not a hidden precedence rule: the two cannot coexist because
|
|
33
|
+
* `simulationUnavailable` already keeps them apart — a simulation only runs with the correction at its default. This
|
|
34
|
+
* branch is what happens when someone builds by hand a state the interface would not let them build, and picking the
|
|
35
|
+
* simulation is the less wrong of the two: it is the most recent and most visible intent.
|
|
41
36
|
*/
|
|
42
|
-
export declare function
|
|
37
|
+
export declare function filterKey(v: VisualState): string | null;
|
|
43
38
|
/**
|
|
44
|
-
*
|
|
39
|
+
* The TWO things the root needs to apply, in one object.
|
|
45
40
|
*
|
|
46
|
-
* ⚠️
|
|
47
|
-
*
|
|
41
|
+
* ⚠️ Returning both TOGETHER is the point of issue #104: while they were one field, applying one erased the other. Here
|
|
42
|
+
* a state with theme `hc7` and correction `deuter` returns both filled in, and that is what the gate asserts.
|
|
48
43
|
*/
|
|
49
|
-
export interface
|
|
50
|
-
/**
|
|
51
|
-
readonly
|
|
52
|
-
/**
|
|
53
|
-
readonly
|
|
44
|
+
export interface HowItApplies {
|
|
45
|
+
/** The direct mode key (high contrast), or `null`. */
|
|
46
|
+
readonly direct: string | null;
|
|
47
|
+
/** The CSS filter key (correction or simulation), or `null`. */
|
|
48
|
+
readonly filter: string | null;
|
|
54
49
|
}
|
|
55
|
-
export declare function
|
|
56
|
-
/**
|
|
57
|
-
export declare function
|
|
58
|
-
/**
|
|
59
|
-
export declare function
|
|
60
|
-
/**
|
|
61
|
-
export declare function
|
|
62
|
-
/**
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
50
|
+
export declare function howItApplies(v: VisualState): HowItApplies;
|
|
51
|
+
/** Is a simulation running? The question `simulatesDisability` asked of the string. */
|
|
52
|
+
export declare function isSimulation(v: VisualState): boolean;
|
|
53
|
+
/** Is it the BLINDNESS simulation? The quiz and the sonar ask this to behave without a screen. */
|
|
54
|
+
export declare function isBlind(v: VisualState): boolean;
|
|
55
|
+
/** Is it one of the five LOW-VISION simulations? They need the overlay as a texture, not only a filter. */
|
|
56
|
+
export declare function isLowVision(v: VisualState): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Is a COLOUR-VISION mode the only visual mode in this state — the 🚥 correction, or the simulation of the same colour
|
|
59
|
+
* blindness, with the theme at its default? The decorative scanline stays under these (ADR-0241): they change hue, not
|
|
60
|
+
* contrast or sharpness.
|
|
61
|
+
*
|
|
62
|
+
* 📌 The list is `CVD_KEYS`, where those six modes are defined with their matrices: a colour-vision mode added there
|
|
63
|
+
* counts here, with no second list of names to keep true.
|
|
64
|
+
*/
|
|
65
|
+
export declare function onlyColourVision(v: VisualState): boolean;
|
|
66
|
+
/** Is the theme off its default? It replaces a `/^hc-direto/` test on the old string. */
|
|
67
|
+
export declare function hasHighContrast(v: VisualState): boolean;
|
|
68
|
+
/** The next THEME in the quick bar icon's cycle. It moves only on its own axis and does not touch the correction. */
|
|
69
|
+
export declare function nextTheme(v: VisualState): VisualState;
|
|
66
70
|
/**
|
|
67
|
-
*
|
|
71
|
+
* The next CORRECTION in the icon's cycle. It moves only on its own axis and does not touch the theme.
|
|
68
72
|
*
|
|
69
|
-
* ⚠️
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
* exatamente o caso em que não se sabe o que a criança queria — e o padrão é a única resposta que não
|
|
73
|
-
* escolhe por ela.
|
|
73
|
+
* ⚠️ AN UNKNOWN VALUE STARTS AT THE DEFAULT, on both axes. (One old cycle mapped it to index 1 and the other to 0 — a
|
|
74
|
+
* difference nobody had decided.) An unknown value is exactly the case where nobody knows what the child wanted — and
|
|
75
|
+
* the default is the only answer that does not choose for them.
|
|
74
76
|
*/
|
|
75
|
-
export declare function
|
|
77
|
+
export declare function nextCorrection(v: VisualState): VisualState;
|
|
76
78
|
/**
|
|
77
|
-
*
|
|
79
|
+
* The key the player's sprite uses to pick a texture.
|
|
78
80
|
*
|
|
79
|
-
* ⚠️
|
|
80
|
-
*
|
|
81
|
+
* ⚠️ It is the SIMULATION when there is one, and the THEME when there is not — in this order because it is the order of
|
|
82
|
+
* what the child sees: a simulated blindness blanks the whole screen, and at that moment the theme changes nothing they
|
|
83
|
+
* perceive.
|
|
81
84
|
*/
|
|
82
|
-
export declare function
|
|
85
|
+
export declare function textureKey(v: VisualState): string;
|
|
83
86
|
/**
|
|
84
|
-
*
|
|
87
|
+
* The ONE key that best describes this state in the OLD vocabulary — for whoever can only read one.
|
|
85
88
|
*
|
|
86
|
-
* ⚠️
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
89
|
+
* ⚠️ IT IS NOT `textureKey`, and the difference took a red gate to show. The texture one returns `normal` for a colour
|
|
90
|
+
* correction, because a correction changes no texture — and using it as the mirror would make a child in `fix-deuter`
|
|
91
|
+
* start writing `'normal'` into the legacy key. **An old reader would lose their correction**, which is exactly the
|
|
92
|
+
* damage the whole migration exists not to do.
|
|
90
93
|
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
94
|
+
* The order is simulation → theme → correction → default, and it keeps EVERY setting that already existed: no old state
|
|
95
|
+
* had two axes, so none of them loses anything here.
|
|
93
96
|
*
|
|
94
|
-
* ⚠️
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
* isso.
|
|
97
|
+
* ⚠️ THE ONLY LOSSY CASE IS THE NEW ONE — `hc7 + fix-deuter` fits only as one of its two halves, and the chosen one is
|
|
98
|
+
* the theme. There is no possible regression in that: this state DID NOT EXIST before, and a reader that understands one
|
|
99
|
+
* key never could express it. Whoever wants both halves reads the new key, which exists precisely for that.
|
|
98
100
|
*/
|
|
99
|
-
export declare function
|
|
101
|
+
export declare function legacyKey(v: VisualState): string;
|
|
100
102
|
/**
|
|
101
|
-
*
|
|
103
|
+
* Translates the saved value. It accepts the old one (a string) and the new one (an object), and always returns a
|
|
104
|
+
* valid state.
|
|
102
105
|
*
|
|
103
|
-
* ⚠️
|
|
104
|
-
*
|
|
106
|
+
* ⚠️ IDEMPOTENT BY CONSTRUCTION: an already migrated object passes through with its fields checked. It matters because
|
|
107
|
+
* the read happens per player and more than once a session.
|
|
105
108
|
*
|
|
106
|
-
* ⚠️
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
+
* ⚠️ AND THE UNKNOWN FALLS TO THE DEFAULT INSTEAD OF THROWING. The data comes from a child's browser and may be from a
|
|
110
|
+
* future version, another machine, or garbage. A `throw` here would take the game down over a preference; the default
|
|
111
|
+
* just gives the game back as it is born.
|
|
109
112
|
*/
|
|
110
|
-
export declare function
|
|
111
|
-
export declare const
|
|
112
|
-
export declare const
|
|
113
|
-
export declare const
|
|
114
|
-
/**
|
|
115
|
-
export declare const
|
|
113
|
+
export declare function migrateVisual(saved: unknown): VisualState;
|
|
114
|
+
export declare const THEMES: readonly Theme[];
|
|
115
|
+
export declare const CORRECTIONS: readonly Correction[];
|
|
116
|
+
export declare const SIMULATIONS: readonly Simulation[];
|
|
117
|
+
/** The old keys the migration knows — exported so the gate can demand that ALL of them are covered. */
|
|
118
|
+
export declare const LEGACY_KEYS: readonly string[];
|
|
@@ -1,35 +1,37 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// render/viz-axes —
|
|
2
|
+
// render/viz-axes — THE TWO AXES, and the simulation that is NOT one of them (ADR-0076). Dependencies: the shapes, from
|
|
3
|
+
// `core/visual-state`, and the list of colour-vision modes, from the leaf `render/cvd-matrices` that defines them.
|
|
3
4
|
//
|
|
4
|
-
// =========================
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
5
|
+
// ========================= THE DEFECT THIS FIXES =========================
|
|
6
|
+
// With ONE radio and `p.viz` keeping ONE string, choosing `fix-deuter` turned 7:1 contrast off, and choosing a contrast
|
|
7
|
+
// level turned the correction off. ⚠️ A COLOUR-BLIND CHILD WHO ALSO NEEDS HIGH CONTRAST COULD NOT HAVE BOTH — and the
|
|
8
|
+
// two needs often coexist in one person. Two axes let them.
|
|
8
9
|
//
|
|
9
|
-
// =========================
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
10
|
+
// ========================= WHY THE SIMULATION IS NOT AN AXIS =========================
|
|
11
|
+
// Correction and simulation are both implemented as a filter and serve OPPOSITE PURPOSES: one lets a child PLAY, the
|
|
12
|
+
// other lets someone FEEL what not being able to is like. Grouping them by mechanism merged them twice — in ADR-0011
|
|
13
|
+
// (the corrections listed in the Empathy panel, so that *«a criança que PRECISAVA da correção tinha de a procurar no
|
|
14
|
+
// menu sobre fingir»*) and in ADR-0075.
|
|
14
15
|
//
|
|
15
|
-
// ⚠️
|
|
16
|
+
// ⚠️ A GROUP OF SETTINGS IS NAMED FOR WHAT IT SERVES, NEVER FOR HOW IT IS IMPLEMENTED.
|
|
16
17
|
//
|
|
17
|
-
// =========================
|
|
18
|
-
//
|
|
19
|
-
//
|
|
20
|
-
//
|
|
21
|
-
|
|
18
|
+
// ========================= AND WHY THE SIMULATION IS LOCKED TO BOTH DEFAULTS =========================
|
|
19
|
+
// Over an already corrected screen, a simulation shows neither the disability nor the correction; over a high-contrast
|
|
20
|
+
// theme, it shows what the theme does and not what deuteranopia does. A demonstration running over an adaptation is not
|
|
21
|
+
// a weaker demonstration — **it teaches something false**.
|
|
22
|
+
import { CVD_KEYS } from './cvd-matrices.js';
|
|
23
|
+
export const DEFAULT_VISUAL = Object.freeze({ tema: 'padrao', correcao: 'tricro', simulacao: null });
|
|
22
24
|
/**
|
|
23
|
-
*
|
|
25
|
+
* Are both axes at their default?
|
|
24
26
|
*
|
|
25
|
-
* ⚠️
|
|
26
|
-
*
|
|
27
|
-
*
|
|
27
|
+
* ⚠️ IT IS THE QUESTION THAT RELEASES THE SIMULATION, which is why it is a function and not a stored boolean: storing the
|
|
28
|
+
* result would let the two drift apart, and here a drift means a demonstration running over an adaptation — which
|
|
29
|
+
* teaches something false.
|
|
28
30
|
*/
|
|
29
|
-
export function
|
|
31
|
+
export function bothAxesAtDefault(v) {
|
|
30
32
|
return v.tema === 'padrao' && v.correcao === 'tricro';
|
|
31
33
|
}
|
|
32
|
-
export function
|
|
34
|
+
export function simulationUnavailable(v) {
|
|
33
35
|
const t = v.tema !== 'padrao';
|
|
34
36
|
const c = v.correcao !== 'tricro';
|
|
35
37
|
if (t && c)
|
|
@@ -40,126 +42,135 @@ export function simulacaoIndisponivel(v) {
|
|
|
40
42
|
return 'correcao';
|
|
41
43
|
return null;
|
|
42
44
|
}
|
|
43
|
-
/* =====================
|
|
45
|
+
/* ===================== THE COMPOSITION ===================== */
|
|
44
46
|
//
|
|
45
|
-
// ⚠️
|
|
46
|
-
//
|
|
47
|
-
//
|
|
48
|
-
//
|
|
49
|
-
/**
|
|
50
|
-
|
|
47
|
+
// ⚠️ IT WAS ALWAYS MECHANICALLY POSSIBLE, which is what made the defect costlier than it looked: the high-contrast THEME
|
|
48
|
+
// goes through DIRECT RENDERING (`DIRECT_CFG`/PIXI) and the CORRECTION through a CSS FILTER (`url(#cvd-fix-*)`). Two
|
|
49
|
+
// mechanisms that do not collide. What kept them from coexisting was not the machine — it was the single field that
|
|
50
|
+
// held one value.
|
|
51
|
+
/** The DIRECT mode key this theme uses, or `null` for the default theme. */
|
|
52
|
+
function directTheme(v) {
|
|
51
53
|
return v.tema === 'hc3' ? 'hc-direto'
|
|
52
54
|
: v.tema === 'hc45' ? 'hc-direto-45'
|
|
53
55
|
: v.tema === 'hc7' ? 'hc-direto-7'
|
|
54
56
|
: null;
|
|
55
57
|
}
|
|
56
58
|
/**
|
|
57
|
-
*
|
|
59
|
+
* The CSS FILTER key this state uses, or `null`.
|
|
58
60
|
*
|
|
59
|
-
* ⚠️
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
61
|
+
* ⚠️ SIMULATION BEATS CORRECTION HERE, and it is not a hidden precedence rule: the two cannot coexist because
|
|
62
|
+
* `simulationUnavailable` already keeps them apart — a simulation only runs with the correction at its default. This
|
|
63
|
+
* branch is what happens when someone builds by hand a state the interface would not let them build, and picking the
|
|
64
|
+
* simulation is the less wrong of the two: it is the most recent and most visible intent.
|
|
63
65
|
*/
|
|
64
|
-
export function
|
|
66
|
+
export function filterKey(v) {
|
|
65
67
|
if (v.simulacao)
|
|
66
68
|
return v.simulacao;
|
|
67
69
|
return v.correcao === 'tricro' ? null : 'fix-' + (v.correcao === 'deuter' ? 'deuter' : v.correcao);
|
|
68
70
|
}
|
|
69
|
-
export function
|
|
70
|
-
return {
|
|
71
|
+
export function howItApplies(v) {
|
|
72
|
+
return { direct: directTheme(v), filter: filterKey(v) };
|
|
71
73
|
}
|
|
72
|
-
/* =====================
|
|
74
|
+
/* ===================== WHAT THE READERS ACTUALLY ASK ===================== */
|
|
73
75
|
//
|
|
74
|
-
// ⚠️
|
|
75
|
-
//
|
|
76
|
-
//
|
|
77
|
-
// que a pergunta dele merecia um nome.
|
|
76
|
+
// ⚠️ THESE FUNCTIONS CAME FROM A MEASUREMENT, not from an a-priori design: the readers of `p.viz` were sorted by what they
|
|
77
|
+
// ASK, and the short list below is the result — whether it is a simulation, blindness, low vision, high contrast, which
|
|
78
|
+
// texture. A reader that needs something outside this list is a sign its question deserves a name.
|
|
78
79
|
//
|
|
79
|
-
// ⚠️
|
|
80
|
-
//
|
|
81
|
-
//
|
|
82
|
-
/**
|
|
83
|
-
export function
|
|
80
|
+
// ⚠️ And the interface already thought in two axes: the quick bar's two icons always cycled WITHIN their own axis; it
|
|
81
|
+
// was the STORAGE that collapsed them into one field. The cycle functions below are those two, now with a place to keep
|
|
82
|
+
// the result.
|
|
83
|
+
/** Is a simulation running? The question `simulatesDisability` asked of the string. */
|
|
84
|
+
export function isSimulation(v) {
|
|
84
85
|
return v.simulacao !== null;
|
|
85
86
|
}
|
|
86
|
-
/**
|
|
87
|
-
export function
|
|
87
|
+
/** Is it the BLINDNESS simulation? The quiz and the sonar ask this to behave without a screen. */
|
|
88
|
+
export function isBlind(v) {
|
|
88
89
|
return v.simulacao === 'blind';
|
|
89
90
|
}
|
|
90
|
-
/**
|
|
91
|
-
export function
|
|
91
|
+
/** Is it one of the five LOW-VISION simulations? They need the overlay as a texture, not only a filter. */
|
|
92
|
+
export function isLowVision(v) {
|
|
92
93
|
return v.simulacao !== null && v.simulacao.startsWith('lv-');
|
|
93
94
|
}
|
|
94
|
-
/**
|
|
95
|
-
|
|
95
|
+
/**
|
|
96
|
+
* Is a COLOUR-VISION mode the only visual mode in this state — the 🚥 correction, or the simulation of the same colour
|
|
97
|
+
* blindness, with the theme at its default? The decorative scanline stays under these (ADR-0241): they change hue, not
|
|
98
|
+
* contrast or sharpness.
|
|
99
|
+
*
|
|
100
|
+
* 📌 The list is `CVD_KEYS`, where those six modes are defined with their matrices: a colour-vision mode added there
|
|
101
|
+
* counts here, with no second list of names to keep true.
|
|
102
|
+
*/
|
|
103
|
+
export function onlyColourVision(v) {
|
|
104
|
+
const key = filterKey(v);
|
|
105
|
+
return !hasHighContrast(v) && key !== null && CVD_KEYS.includes(key);
|
|
106
|
+
}
|
|
107
|
+
/** Is the theme off its default? It replaces a `/^hc-direto/` test on the old string. */
|
|
108
|
+
export function hasHighContrast(v) {
|
|
96
109
|
return v.tema !== 'padrao';
|
|
97
110
|
}
|
|
98
|
-
/**
|
|
99
|
-
export function
|
|
100
|
-
const i =
|
|
101
|
-
return { ...v, tema:
|
|
111
|
+
/** The next THEME in the quick bar icon's cycle. It moves only on its own axis and does not touch the correction. */
|
|
112
|
+
export function nextTheme(v) {
|
|
113
|
+
const i = THEMES.indexOf(v.tema);
|
|
114
|
+
return { ...v, tema: THEMES[(i < 0 ? 0 : i + 1) % THEMES.length] };
|
|
102
115
|
}
|
|
103
116
|
/**
|
|
104
|
-
*
|
|
117
|
+
* The next CORRECTION in the icon's cycle. It moves only on its own axis and does not touch the theme.
|
|
105
118
|
*
|
|
106
|
-
* ⚠️
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
* exatamente o caso em que não se sabe o que a criança queria — e o padrão é a única resposta que não
|
|
110
|
-
* escolhe por ela.
|
|
119
|
+
* ⚠️ AN UNKNOWN VALUE STARTS AT THE DEFAULT, on both axes. (One old cycle mapped it to index 1 and the other to 0 — a
|
|
120
|
+
* difference nobody had decided.) An unknown value is exactly the case where nobody knows what the child wanted — and
|
|
121
|
+
* the default is the only answer that does not choose for them.
|
|
111
122
|
*/
|
|
112
|
-
export function
|
|
113
|
-
const i =
|
|
114
|
-
return { ...v, correcao:
|
|
123
|
+
export function nextCorrection(v) {
|
|
124
|
+
const i = CORRECTIONS.indexOf(v.correcao);
|
|
125
|
+
return { ...v, correcao: CORRECTIONS[(i < 0 ? 0 : i + 1) % CORRECTIONS.length] };
|
|
115
126
|
}
|
|
116
127
|
/**
|
|
117
|
-
*
|
|
128
|
+
* The key the player's sprite uses to pick a texture.
|
|
118
129
|
*
|
|
119
|
-
* ⚠️
|
|
120
|
-
*
|
|
130
|
+
* ⚠️ It is the SIMULATION when there is one, and the THEME when there is not — in this order because it is the order of
|
|
131
|
+
* what the child sees: a simulated blindness blanks the whole screen, and at that moment the theme changes nothing they
|
|
132
|
+
* perceive.
|
|
121
133
|
*/
|
|
122
|
-
export function
|
|
123
|
-
return v.simulacao ??
|
|
134
|
+
export function textureKey(v) {
|
|
135
|
+
return v.simulacao ?? directTheme(v) ?? 'normal';
|
|
124
136
|
}
|
|
125
137
|
/**
|
|
126
|
-
*
|
|
138
|
+
* The ONE key that best describes this state in the OLD vocabulary — for whoever can only read one.
|
|
127
139
|
*
|
|
128
|
-
* ⚠️
|
|
129
|
-
*
|
|
130
|
-
*
|
|
131
|
-
*
|
|
140
|
+
* ⚠️ IT IS NOT `textureKey`, and the difference took a red gate to show. The texture one returns `normal` for a colour
|
|
141
|
+
* correction, because a correction changes no texture — and using it as the mirror would make a child in `fix-deuter`
|
|
142
|
+
* start writing `'normal'` into the legacy key. **An old reader would lose their correction**, which is exactly the
|
|
143
|
+
* damage the whole migration exists not to do.
|
|
132
144
|
*
|
|
133
|
-
*
|
|
134
|
-
*
|
|
145
|
+
* The order is simulation → theme → correction → default, and it keeps EVERY setting that already existed: no old state
|
|
146
|
+
* had two axes, so none of them loses anything here.
|
|
135
147
|
*
|
|
136
|
-
* ⚠️
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
* isso.
|
|
148
|
+
* ⚠️ THE ONLY LOSSY CASE IS THE NEW ONE — `hc7 + fix-deuter` fits only as one of its two halves, and the chosen one is
|
|
149
|
+
* the theme. There is no possible regression in that: this state DID NOT EXIST before, and a reader that understands one
|
|
150
|
+
* key never could express it. Whoever wants both halves reads the new key, which exists precisely for that.
|
|
140
151
|
*/
|
|
141
|
-
export function
|
|
142
|
-
return v.simulacao ??
|
|
152
|
+
export function legacyKey(v) {
|
|
153
|
+
return v.simulacao ?? directTheme(v) ?? filterKey(v) ?? 'normal';
|
|
143
154
|
}
|
|
144
|
-
/* =====================
|
|
155
|
+
/* ===================== THE MIGRATION ===================== */
|
|
145
156
|
//
|
|
146
|
-
// ⚠️
|
|
147
|
-
//
|
|
148
|
-
//
|
|
149
|
-
/**
|
|
150
|
-
const
|
|
151
|
-
normal:
|
|
152
|
-
//
|
|
157
|
+
// ⚠️ IT IS NOT OPTIONAL AND IT COMES BEFORE THE FIRST READ OF THE NEW SHAPE. The saved setting keeps the old single value;
|
|
158
|
+
// without the translation, the visual mode each child already chose is DISCARDED — and whoever chose one of those values
|
|
159
|
+
// chose it because that is how they see.
|
|
160
|
+
/** The old single value → the two-axis state. An unknown key falls to the default and never throws. */
|
|
161
|
+
const FROM_SINGLE_KEY = Object.freeze({
|
|
162
|
+
normal: DEFAULT_VISUAL,
|
|
163
|
+
// The three contrast levels become a THEME, and the correction stays at its default.
|
|
153
164
|
'hc-direto': { tema: 'hc3', correcao: 'tricro', simulacao: null },
|
|
154
165
|
'hc-direto-45': { tema: 'hc45', correcao: 'tricro', simulacao: null },
|
|
155
166
|
'hc-direto-7': { tema: 'hc7', correcao: 'tricro', simulacao: null },
|
|
156
|
-
//
|
|
167
|
+
// The three corrections become a CORRECTION, and the theme stays at its default.
|
|
157
168
|
'fix-protan': { tema: 'padrao', correcao: 'protan', simulacao: null },
|
|
158
169
|
'fix-deuter': { tema: 'padrao', correcao: 'deuter', simulacao: null },
|
|
159
170
|
'fix-tritan': { tema: 'padrao', correcao: 'tritan', simulacao: null },
|
|
160
|
-
// ⚠️
|
|
161
|
-
//
|
|
162
|
-
//
|
|
171
|
+
// ⚠️ THE NINE SIMULATIONS COME BACK WITH BOTH AXES AT THEIR DEFAULT, and no information is lost: a simulation was only
|
|
172
|
+
// possible from the default anyway, because it REPLACED everything else. The new shape says so instead of leaving it
|
|
173
|
+
// implicit.
|
|
163
174
|
'sim-protan': { tema: 'padrao', correcao: 'tricro', simulacao: 'sim-protan' },
|
|
164
175
|
'sim-deuter': { tema: 'padrao', correcao: 'tricro', simulacao: 'sim-deuter' },
|
|
165
176
|
'sim-tritan': { tema: 'padrao', correcao: 'tricro', simulacao: 'sim-tritan' },
|
|
@@ -171,33 +182,34 @@ const DE_CHAVE_UNICA = Object.freeze({
|
|
|
171
182
|
blind: { tema: 'padrao', correcao: 'tricro', simulacao: 'blind' },
|
|
172
183
|
});
|
|
173
184
|
/**
|
|
174
|
-
*
|
|
185
|
+
* Translates the saved value. It accepts the old one (a string) and the new one (an object), and always returns a
|
|
186
|
+
* valid state.
|
|
175
187
|
*
|
|
176
|
-
* ⚠️
|
|
177
|
-
*
|
|
188
|
+
* ⚠️ IDEMPOTENT BY CONSTRUCTION: an already migrated object passes through with its fields checked. It matters because
|
|
189
|
+
* the read happens per player and more than once a session.
|
|
178
190
|
*
|
|
179
|
-
* ⚠️
|
|
180
|
-
*
|
|
181
|
-
*
|
|
191
|
+
* ⚠️ AND THE UNKNOWN FALLS TO THE DEFAULT INSTEAD OF THROWING. The data comes from a child's browser and may be from a
|
|
192
|
+
* future version, another machine, or garbage. A `throw` here would take the game down over a preference; the default
|
|
193
|
+
* just gives the game back as it is born.
|
|
182
194
|
*/
|
|
183
|
-
export function
|
|
184
|
-
if (typeof
|
|
185
|
-
return
|
|
186
|
-
if (
|
|
187
|
-
const o =
|
|
195
|
+
export function migrateVisual(saved) {
|
|
196
|
+
if (typeof saved === 'string')
|
|
197
|
+
return FROM_SINGLE_KEY[saved] ?? DEFAULT_VISUAL;
|
|
198
|
+
if (saved && typeof saved === 'object') {
|
|
199
|
+
const o = saved;
|
|
188
200
|
return {
|
|
189
|
-
tema:
|
|
190
|
-
correcao:
|
|
191
|
-
simulacao:
|
|
201
|
+
tema: THEMES.includes(o.tema) ? o.tema : DEFAULT_VISUAL.tema,
|
|
202
|
+
correcao: CORRECTIONS.includes(o.correcao) ? o.correcao : DEFAULT_VISUAL.correcao,
|
|
203
|
+
simulacao: SIMULATIONS.includes(o.simulacao) ? o.simulacao : null,
|
|
192
204
|
};
|
|
193
205
|
}
|
|
194
|
-
return
|
|
206
|
+
return DEFAULT_VISUAL;
|
|
195
207
|
}
|
|
196
|
-
export const
|
|
197
|
-
export const
|
|
198
|
-
export const
|
|
208
|
+
export const THEMES = ['padrao', 'hc3', 'hc45', 'hc7'];
|
|
209
|
+
export const CORRECTIONS = ['tricro', 'protan', 'deuter', 'tritan'];
|
|
210
|
+
export const SIMULATIONS = [
|
|
199
211
|
null, 'sim-protan', 'sim-deuter', 'sim-tritan',
|
|
200
212
|
'lv-blur', 'lv-haze', 'lv-tunnel', 'lv-macular', 'lv-diabetic', 'blind',
|
|
201
213
|
];
|
|
202
|
-
/**
|
|
203
|
-
export const
|
|
214
|
+
/** The old keys the migration knows — exported so the gate can demand that ALL of them are covered. */
|
|
215
|
+
export const LEGACY_KEYS = Object.keys(FROM_SINGLE_KEY);
|