@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
package/dist-pkg/core/anel.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// core/anel — A CONTA DO ANEL, e nada mais.
|
|
3
|
-
//
|
|
4
|
-
// Ela morava em `ui/menu-nav`, e saiu de lá quando o item 7 do ADR-0044 fez `ui/pause-icons` precisar dela
|
|
5
|
-
// também: `menu-nav` já importava `pause-icons` (por `mostrarSubmenuDaPausa` e `PM_ITENS_VISIVEIS`), e a volta
|
|
6
|
-
// fecharia um CICLO de importação. Ciclo em ESM não estoura na hora — estoura no boot, em TDZ, quando um dos
|
|
7
|
-
// dois lê o outro durante a avaliação. É o tipo de defeito que aparece uma vez, em produção, e some ao ser
|
|
8
|
-
// investigado.
|
|
9
|
-
//
|
|
10
|
-
// Módulo-folha de propósito: zero dependências, uma função, nenhuma I/O. `ui/menu-nav` continua a
|
|
11
|
-
// reexportando, porque é de lá que os testes e os outros menus já a importavam — o nome público não muda.
|
|
12
|
-
/**
|
|
13
|
-
* ANDA UM PASSO NUM ANEL — passar do último volta ao primeiro, e antes do primeiro está o último.
|
|
14
|
-
*
|
|
15
|
-
* Era `clampIndex`, que prendia nas pontas "porque o original nunca faz wrap em lista de itens". O ADR-0044
|
|
16
|
-
* derrubou isso, e o motivo é de uso, não de gosto: com UM MENU POR TELA, toda lista pode ser um anel, e o
|
|
17
|
-
* item mais indesejado (`quit`) fica a UMA tecla do mais urgente (`resume`) sem estar perto dele. Quem não
|
|
18
|
-
* enxerga não varre a lista à procura do fim — ela pergunta "e antes do primeiro?" e recebe uma resposta.
|
|
19
|
-
*
|
|
20
|
-
* A XAG 106 permite o anel exatamente para menu LINEAR, e o proíbe para grade 2-D de blocos: ali "voltar ao
|
|
21
|
-
* primeiro" não tem significado espacial.
|
|
22
|
-
*
|
|
23
|
-
* ⚠️ NAVEGAR LISTA É ANEL; AJUSTAR VALOR É LIMITE. `selectStep` e `rangeStep` (em ui/menu-nav) continuam
|
|
24
|
-
* presos nas pontas, e a diferença é real: passar do volume máximo para o mínimo com uma tecla é um susto,
|
|
25
|
-
* não uma conveniência — e num jogo com pistas de áudio para cegueira, um susto de volume é dano.
|
|
26
|
-
*/
|
|
27
|
-
export function passoNoAnel(len, idx, delta) {
|
|
28
|
-
if (len <= 0)
|
|
29
|
-
return 0;
|
|
30
|
-
return ((idx + delta) % len + len) % len; // o `+ len` extra: `%` de negativo em JS devolve negativo
|
|
31
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
export type CollisionCtx = {
|
|
3
|
-
world: number[][];
|
|
4
|
-
W: number;
|
|
5
|
-
H: number;
|
|
6
|
-
isWheelchair: () => boolean;
|
|
7
|
-
isModoCego: () => boolean;
|
|
8
|
-
caneDiv: () => number;
|
|
9
|
-
wcSolid: () => ReadonlySet<string>;
|
|
10
|
-
gateTiles: () => ReadonlySet<string>;
|
|
11
|
-
gateOpen: () => boolean;
|
|
12
|
-
};
|
|
13
|
-
export declare function initCollision(ctx: CollisionCtx): void;
|
|
14
|
-
export declare const caneBlockPx: () => number;
|
|
15
|
-
export declare const isSolidType: (t: number) => boolean;
|
|
16
|
-
export declare const tileAt: (tx: number, ty: number) => number;
|
|
17
|
-
export declare const solidTile: (x: number, y: number) => boolean;
|
|
18
|
-
export declare const solidAt: (tx: number, ty: number) => boolean;
|
|
19
|
-
export declare const surfTop: (x: number, y: number) => boolean;
|
|
20
|
-
export declare const isWcRampRiser: (col: number, row: number) => boolean;
|
|
21
|
-
export declare function rampSurfaceY(cx: number, py: number): number | null;
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// core/collision.ts — consultas de colisão da GRADE do mundo (determinístico). Extraído do game.js (Estágio 4).
|
|
3
|
-
// Design testável: o módulo NÃO guarda cópias do estado mutável — recebe CLOSURES em initCollision() que leem o
|
|
4
|
-
// estado VIVO do game.js (wheelchair/modoCego/caneBlockDiv/wcSolid/gateTiles/gateOpen). Assim a colisão sempre
|
|
5
|
-
// enxerga o valor atual (sem risco de dessincronização) e os testes passam um ctx falso → funções 100% puras.
|
|
6
|
-
// TILE/TILE_TYPES são constantes (import direto). Consumido pela física (resolveX/resolveY/stepPlayer) no game.js.
|
|
7
|
-
import { TILE, TILE_TYPES, ehPerigo, ehTrampolim } from './constants.js';
|
|
8
|
-
// (`TileType` era declarado AQUI, privado, e era por isso que a tabela semântica não era usável de fora.
|
|
9
|
-
// Mudou de casa para `core/constants`, junto da tabela que ele descreve.)
|
|
10
|
-
const TYPES = TILE_TYPES;
|
|
11
|
-
// closures no-op até initCollision() (evita null-check no caminho quente da física).
|
|
12
|
-
let _world = [], _W = 0, _H = 0;
|
|
13
|
-
let _isWheelchair = () => false;
|
|
14
|
-
let _isModoCego = () => false;
|
|
15
|
-
let _caneDiv = () => 1;
|
|
16
|
-
let _wcSolid = () => new Set();
|
|
17
|
-
let _gateTiles = () => new Set();
|
|
18
|
-
let _gateOpen = () => true;
|
|
19
|
-
// Liga a colisão ao mundo + estado vivo. Chamado UMA vez no boot do game.js (após WORLD pronto). Idempotente.
|
|
20
|
-
export function initCollision(ctx) {
|
|
21
|
-
_world = ctx.world;
|
|
22
|
-
_W = ctx.W;
|
|
23
|
-
_H = ctx.H;
|
|
24
|
-
_isWheelchair = ctx.isWheelchair;
|
|
25
|
-
_isModoCego = ctx.isModoCego;
|
|
26
|
-
_caneDiv = ctx.caneDiv;
|
|
27
|
-
_wcSolid = ctx.wcSolid;
|
|
28
|
-
_gateTiles = ctx.gateTiles;
|
|
29
|
-
_gateOpen = ctx.gateOpen;
|
|
30
|
-
}
|
|
31
|
-
// distância (px) entre batidas de bengala = TILE / divisor.
|
|
32
|
-
export const caneBlockPx = () => TILE / _caneDiv();
|
|
33
|
-
// Um TIPO de tile é sólido? Cadeirante: PERIGO e TRAMPOLIM viram chão. Modo cego: o PERIGO vira chão.
|
|
34
|
-
// Pelas perguntas e não pelos números 9 e 5: a regra é sobre o que o tile É, e assim ela continua verdadeira
|
|
35
|
-
// num mapa com outra numeração — que é exatamente o que um segundo jogo tem.
|
|
36
|
-
export const isSolidType = (t) => ((_isWheelchair() && (ehPerigo(t) || ehTrampolim(t))) || (_isModoCego() && ehPerigo(t))) ? true : !!TYPES[t]?.solid;
|
|
37
|
-
// Tile na posição (fora do mundo = pedra(2), parede natural). Coordenadas em TILES.
|
|
38
|
-
export const tileAt = (tx, ty) => (tx < 0 || tx >= _W || ty < 0 || ty >= _H) ? 2 : _world[ty][tx];
|
|
39
|
-
// Sólido "de pisar" (inclui sólidos só-cadeirante). isSolidType já cobre lava/trampolim no modo cadeira.
|
|
40
|
-
export const solidTile = (x, y) => {
|
|
41
|
-
const t = tileAt(x, y);
|
|
42
|
-
return (_isWheelchair() && _wcSolid().has(x + ',' + y)) || isSolidType(t);
|
|
43
|
-
};
|
|
44
|
-
// Sólido "de barrar" (inclui portão fechado + sólidos só-cadeirante). Usado pela física.
|
|
45
|
-
export const solidAt = (tx, ty) => (!_gateOpen() && _gateTiles().has(tx + ',' + ty)) || (_isWheelchair() && _wcSolid().has(tx + ',' + ty)) || isSolidType(tileAt(tx, ty));
|
|
46
|
-
// Topo caminhável: sólido com ar logo acima (é uma superfície onde se anda).
|
|
47
|
-
export const surfTop = (x, y) => solidTile(x, y) && !solidTile(x, y - 1);
|
|
48
|
-
// Cadeirante: (col,row) é o "degrau" que uma rampa de 1 tile cobre? (superfície com vizinho-diagonal 1 acima)
|
|
49
|
-
export const isWcRampRiser = (col, row) => surfTop(col, row) && (surfTop(col - 1, row + 1) || surfTop(col + 1, row + 1));
|
|
50
|
-
// Altura (px) da diagonal 45° de uma rampa de 1 tile no x=cx do mundo; null se não há rampa por perto de py.
|
|
51
|
-
export function rampSurfaceY(cx, py) {
|
|
52
|
-
const tcx = Math.floor(cx / TILE), fx = cx - tcx * TILE, ty = Math.floor(py / TILE);
|
|
53
|
-
for (let y = ty - 1; y <= ty + 1; y++) {
|
|
54
|
-
if (y < 1 || !surfTop(tcx, y))
|
|
55
|
-
continue;
|
|
56
|
-
if (surfTop(tcx + 1, y - 1))
|
|
57
|
-
return y * TILE - fx; // degrau sobe p/ direita: y*TILE → (y-1)*TILE
|
|
58
|
-
if (surfTop(tcx - 1, y - 1))
|
|
59
|
-
return (y - 1) * TILE + fx; // degrau sobe p/ esquerda: (y-1)*TILE → y*TILE
|
|
60
|
-
}
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
export declare const Z: {
|
|
3
|
-
readonly SKY: 1000;
|
|
4
|
-
readonly SKY_ANIM: 2000;
|
|
5
|
-
readonly PARALLAX_4: 3000;
|
|
6
|
-
readonly PARALLAX_3: 4000;
|
|
7
|
-
readonly PARALLAX_2: 5000;
|
|
8
|
-
readonly PARALLAX_1: 6000;
|
|
9
|
-
readonly BG_DECOR: 7000;
|
|
10
|
-
readonly TILES: 8000;
|
|
11
|
-
readonly SCENERY_INTERACT: 9000;
|
|
12
|
-
readonly VFX_BACK: 10000;
|
|
13
|
-
readonly FLORA_BACK: 11000;
|
|
14
|
-
readonly FAUNA_BACK: 12000;
|
|
15
|
-
readonly NPC: 13000;
|
|
16
|
-
readonly ITEMS: 14000;
|
|
17
|
-
readonly PLAYER: 15000;
|
|
18
|
-
readonly VFX_FRONT: 16000;
|
|
19
|
-
readonly VEHICLES: 17000;
|
|
20
|
-
readonly FLORA_FRONT: 18000;
|
|
21
|
-
readonly FAUNA_FRONT: 19000;
|
|
22
|
-
readonly FOREGROUND: 20000;
|
|
23
|
-
readonly WEATHER: 21000;
|
|
24
|
-
readonly DARK_WORLD: 22000;
|
|
25
|
-
readonly WORLD_A11Y: 23000;
|
|
26
|
-
readonly HUD: 24000;
|
|
27
|
-
readonly TOUCH_CONTROLS: 25000;
|
|
28
|
-
readonly CAPTIONS: 26000;
|
|
29
|
-
readonly DIALOGUE: 27000;
|
|
30
|
-
readonly GAME_MSG: 28000;
|
|
31
|
-
readonly MODAL_SCRIM: 29000;
|
|
32
|
-
readonly MENU: 30000;
|
|
33
|
-
readonly MENU_MAX: 39999;
|
|
34
|
-
readonly TRANSITION: 40000;
|
|
35
|
-
/**
|
|
36
|
-
* ⚠️ A SAÍDA DE EMERGÊNCIA, E ELA FICA ACIMA DA TRANSIÇÃO (decisão do Dev, 2026-09-07).
|
|
37
|
-
*
|
|
38
|
-
* Este comentário dizia que o *skip-link* mora em `CAPTIONS` (26000) — e isso deixava-o ABAIXO de
|
|
39
|
-
* `MENU` (30000). Um «pular para o conteúdo» que um modal cobre não é alcançável, o que é a WCAG 2.4.1 ao
|
|
40
|
-
* contrário: o mecanismo que existe para atravessar blocos repetidos passa a ser mais um bloco.
|
|
41
|
-
* O gate do `z-order-css` já registava o defeito com todas as letras — «o `Z` ERRA, não o CSS» —, e ficou
|
|
42
|
-
* assim durante semanas porque nada o obrigava a mudar.
|
|
43
|
-
*
|
|
44
|
-
* ⚠️ E É ACIMA DA `TRANSITION`, não entre o menu e ela. O Dev pediu 41000 e o motivo é o que sobra depois
|
|
45
|
-
* de tudo o resto falhar: a saída não pode ficar atrás de nada que a pessoa não controla, e um fade de
|
|
46
|
-
* troca de fase é precisamente isso. O custo — o link aparecer por cima de uma animação — é nulo na
|
|
47
|
-
* prática, porque ele só é visível AO FOCO (`top:-60px` até `:focus`), e porque durante a transição já não
|
|
48
|
-
* se tabula: o foco sai da tela antiga e só reaparece na seguinte (ver a regra de foco no ADR).
|
|
49
|
-
*
|
|
50
|
-
* Só o aviso de laço morto (ADR-0054) e o painel de desenvolvimento ficam acima dela.
|
|
51
|
-
*/
|
|
52
|
-
readonly SKIP_LINK: 41000;
|
|
53
|
-
/**
|
|
54
|
-
* O LAÇO MORREU (ADR-0054). Acima do `TRANSITION` de propósito: quando o quadro lança, o que estiver na
|
|
55
|
-
* tela — menu aberto, fade a meio, mensagem de fase — está congelado e deixou de importar. O aviso tem de
|
|
56
|
-
* ser visto por cima de tudo isso, e só o painel de desenvolvimento fica acima dele.
|
|
57
|
-
*/
|
|
58
|
-
readonly LOOP_CRASH: 45000;
|
|
59
|
-
readonly DEBUG: 90000;
|
|
60
|
-
};
|
|
61
|
-
export type LayerName = keyof typeof Z;
|
|
62
|
-
export declare const POST_FX_ORDER: readonly ["CRT_VIGNETTE", "EMPATHY_SIM", "A11Y_CORRECTION", "FLASH_LIMIT"];
|
|
63
|
-
export type PostFx = typeof POST_FX_ORDER[number];
|
package/dist-pkg/core/layers.js
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// core/layers — ORDEM-Z CANÔNICA (fonte única de verdade). Cada camada tem um Z NOMEADO; ninguém mais faz
|
|
3
|
-
// addChildAt(getChildIndex(...)) nem "re-adiciona ao topo" — a inserção passa a ser pelo Z (fim do acoplamento).
|
|
4
|
-
// Duas escalas: MUNDO (por viewport — PIXI zIndex dentro da câmera, com sortableChildren) e OVERLAY (global, tela —
|
|
5
|
-
// vira CSS z-index no DOM, pois menu/HUD/legenda são DOM). **Passo 1000** = folga generosa: 999 slots livres entre
|
|
6
|
-
// camadas nomeadas (e sub-slots dentro de cada uma) p/ inserir futuras SEM renumerar. Elementos concretos entram por
|
|
7
|
-
// `Z.BANDA + offset` pequeno (ex.: cane/cadeira = PLAYER+10/+20) — ver docs/5-Refactoring/plano-religacao-z-camadas.md.
|
|
8
|
-
//
|
|
9
|
-
// NATUREZA (fauna/flora) STRADDLE o jogador: há um par BACK (atrás) e FRONT (à frente) p/ cada, deixando bichos/plantas
|
|
10
|
-
// aparecerem dos dois lados do player (imersão — pedido do José). PIXI sortableChildren é tudo-ou-nada por container →
|
|
11
|
-
// o mundo inteiro migra numa rodada só (todos os filhos ganham zIndex de uma vez, reproduzindo a ordem atual = no-op).
|
|
12
|
-
//
|
|
13
|
-
// PÓS-PROCESSO ≠ camada Z: CRT/vinheta e os filtros de a11y (alto-contraste, correção de daltonismo, simulação de
|
|
14
|
-
// deficiência) são uma CADEIA de passes sobre o frame JÁ COMPOSTO (POST_FX_ORDER), não itens da display-list — e cobrem
|
|
15
|
-
// TUDO, inclusive o menu. A11Y_CORRECTION é SEMPRE o último passe; modos de a11y SUPRIMEM o CRT/efeitos decorativos; o
|
|
16
|
-
// overlay é palette-aware (troca p/ CB-safe). Ver ADR-0020 + ADR-0011.
|
|
17
|
-
export const Z = {
|
|
18
|
-
// ===== MUNDO (por viewport; PIXI zIndex dentro da câmera) =====
|
|
19
|
-
SKY: 1000, // gradiente de céu (base)
|
|
20
|
-
SKY_ANIM: 2000, // animações do céu atrás do parallax (estrelas)
|
|
21
|
-
PARALLAX_4: 3000, // paralaxe mais distante. Nuvens de céu podem entrar em PARALLAX_*+offset (profundidades)
|
|
22
|
-
PARALLAX_3: 4000,
|
|
23
|
-
PARALLAX_2: 5000,
|
|
24
|
-
PARALLAX_1: 6000, // fundo próximo do jogo
|
|
25
|
-
BG_DECOR: 7000, // deco ATRÁS dos tiles: árvores, água/corais/algas, ruínas, deco de cidade, nuvens de tela
|
|
26
|
-
TILES: 8000, // tileset / plataforma (o nível)
|
|
27
|
-
SCENERY_INTERACT: 9000, // cenário interativo: porta, alavanca, interruptor, manivela, corda, portão, rampa, elevador
|
|
28
|
-
VFX_BACK: 10000, // efeitos ATRÁS dos atores: poeira de pé, god-rays, tracinhos de lava, sombras
|
|
29
|
-
FLORA_BACK: 11000, // plantas ATRÁS do player (grama, flores, arbustos de fundo)
|
|
30
|
-
FAUNA_BACK: 12000, // criaturas ATRÁS do player (bichos da cidade, animais de fundo)
|
|
31
|
-
NPC: 13000, // personagens interativos (não-jogador)
|
|
32
|
-
ITEMS: 14000, // coletáveis (moedas, poderes, chave) — ATRÁS do player (barril DK / Yoshi / chave SMW)
|
|
33
|
-
PLAYER: 15000, // jogador(es). Aparatos presos (bengala/cadeira) = PLAYER+offset
|
|
34
|
-
VFX_FRONT: 16000, // efeitos NA FRENTE do player: partículas/juice, explosão, faísca, fogos, confete
|
|
35
|
-
VEHICLES: 17000, // veículos na frente (carros/trânsito da cidade)
|
|
36
|
-
FLORA_FRONT: 18000, // plantas NA FRENTE do player (folhagem que tampa o ator — imersão)
|
|
37
|
-
FAUNA_FRONT: 19000, // criaturas NA FRENTE do player (borboletas/vagalumes/minhocas v3 passando à frente)
|
|
38
|
-
FOREGROUND: 20000, // primeiro-plano oclusivo genérico (props que tampam o ator)
|
|
39
|
-
WEATHER: 21000, // clima na frente de tudo do mundo (névoa, chuva, clarão)
|
|
40
|
-
DARK_WORLD: 22000, // escurecimento do mundo (modo cego / empatia baixa-visão)
|
|
41
|
-
WORLD_A11Y: 23000, // pistas visuais de a11y no mundo (sonar, guarda de beirada, hitbox fácil, realce)
|
|
42
|
-
// ===== OVERLAY (global, tela; = CSS z-index no DOM / topo da stage PIXI) =====
|
|
43
|
-
HUD: 24000, // placar/moedas/poder/objetivo/minimapa (persistente durante o jogo)
|
|
44
|
-
TOUCH_CONTROLS: 25000, // gamepad virtual / botões de toque (mobile)
|
|
45
|
-
CAPTIONS: 26000, // legendas de som (a11y surdez) + skip-link de navegação
|
|
46
|
-
DIALOGUE: 27000, // fala/diálogo/atividade (quiz)
|
|
47
|
-
GAME_MSG: 28000, // vitória / game over / pause / faixa de fase
|
|
48
|
-
MODAL_SCRIM: 29000, // escurecimento do fundo quando abre um modal
|
|
49
|
-
MENU: 30000, // menus — RANGE reservado 30000–39999 (níveis aninhados: +1000 por nível)
|
|
50
|
-
MENU_MAX: 39999,
|
|
51
|
-
TRANSITION: 40000, // fade/wipe de troca de fase (cobre tudo)
|
|
52
|
-
/**
|
|
53
|
-
* ⚠️ A SAÍDA DE EMERGÊNCIA, E ELA FICA ACIMA DA TRANSIÇÃO (decisão do Dev, 2026-09-07).
|
|
54
|
-
*
|
|
55
|
-
* Este comentário dizia que o *skip-link* mora em `CAPTIONS` (26000) — e isso deixava-o ABAIXO de
|
|
56
|
-
* `MENU` (30000). Um «pular para o conteúdo» que um modal cobre não é alcançável, o que é a WCAG 2.4.1 ao
|
|
57
|
-
* contrário: o mecanismo que existe para atravessar blocos repetidos passa a ser mais um bloco.
|
|
58
|
-
* O gate do `z-order-css` já registava o defeito com todas as letras — «o `Z` ERRA, não o CSS» —, e ficou
|
|
59
|
-
* assim durante semanas porque nada o obrigava a mudar.
|
|
60
|
-
*
|
|
61
|
-
* ⚠️ E É ACIMA DA `TRANSITION`, não entre o menu e ela. O Dev pediu 41000 e o motivo é o que sobra depois
|
|
62
|
-
* de tudo o resto falhar: a saída não pode ficar atrás de nada que a pessoa não controla, e um fade de
|
|
63
|
-
* troca de fase é precisamente isso. O custo — o link aparecer por cima de uma animação — é nulo na
|
|
64
|
-
* prática, porque ele só é visível AO FOCO (`top:-60px` até `:focus`), e porque durante a transição já não
|
|
65
|
-
* se tabula: o foco sai da tela antiga e só reaparece na seguinte (ver a regra de foco no ADR).
|
|
66
|
-
*
|
|
67
|
-
* Só o aviso de laço morto (ADR-0054) e o painel de desenvolvimento ficam acima dela.
|
|
68
|
-
*/
|
|
69
|
-
SKIP_LINK: 41000,
|
|
70
|
-
/**
|
|
71
|
-
* O LAÇO MORREU (ADR-0054). Acima do `TRANSITION` de propósito: quando o quadro lança, o que estiver na
|
|
72
|
-
* tela — menu aberto, fade a meio, mensagem de fase — está congelado e deixou de importar. O aviso tem de
|
|
73
|
-
* ser visto por cima de tudo isso, e só o painel de desenvolvimento fica acima dele.
|
|
74
|
-
*/
|
|
75
|
-
LOOP_CRASH: 45000,
|
|
76
|
-
DEBUG: 90000, // painel ?debug / FPS / hitboxes (dev; topo absoluto)
|
|
77
|
-
};
|
|
78
|
-
// Cadeia de PÓS-PROCESSO — passes sobre o frame COMPOSTO, do interno p/ o externo. NÃO são camadas Z.
|
|
79
|
-
// Modos de a11y suprimem CRT_VIGNETTE e flashes decorativos (precedência a11y > estética). Ver ADR-0020.
|
|
80
|
-
//
|
|
81
|
-
// DUAS COISAS DIFERENTES NO FIM DA FILA, e confundi-las é o que este comentário existe para impedir:
|
|
82
|
-
//
|
|
83
|
-
// · A11Y_CORRECTION é o último passe de CORREÇÃO. Ele decide como a imagem SE PARECE, e por isso precisa ver o
|
|
84
|
-
// composto final, menus inclusive — é essa a razão de ele vir depois do CRT, que senão re-tinge e desfaz a
|
|
85
|
-
// correção de daltonismo.
|
|
86
|
-
// · FLASH_LIMIT é o último passe, ponto. Ele decide se a imagem pode FAZER MAL. A WCAG 2.3.1 limita a variação de
|
|
87
|
-
// luminância no tempo, e o único quadro cuja luminância importa é o que chega ao olho. Um limitador colocado
|
|
88
|
-
// ANTES da correção limita uma imagem que já não existe, e a correção fica livre para reabrir a oscilação que
|
|
89
|
-
// ele acabou de fechar — uma matriz de daltonismo redistribui luminância por definição. Segurança é o passe mais
|
|
90
|
-
// externo porque é a última coisa verdadeira sobre o quadro.
|
|
91
|
-
//
|
|
92
|
-
// O ADR-0020 dizia "A11Y_CORRECTION sempre por último" sem essa distinção; foi emendado em 2026-08-24. FLASH_LIMIT
|
|
93
|
-
// ainda NÃO está implementado — está declarado aqui, e aferido por teste, para que quem o implementar encontre o
|
|
94
|
-
// lugar certo já ocupado em vez de deduzir a ordem errada a partir da redação antiga.
|
|
95
|
-
export const POST_FX_ORDER = ['CRT_VIGNETTE', 'EMPATHY_SIM', 'A11Y_CORRECTION', 'FLASH_LIMIT'];
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
/** As quatro direções que um direcional produz. Nomes em português porque são vocabulário do jogo, não da web. */
|
|
3
|
-
export type Direcao = 'esquerda' | 'direita' | 'cima' | 'baixo';
|
|
4
|
-
/** Onde o cursor está, em coordenadas de grade — o que a tela desenha e o leitor de tela anuncia. */
|
|
5
|
-
export interface Posicao {
|
|
6
|
-
readonly linha: number;
|
|
7
|
-
readonly coluna: number;
|
|
8
|
-
}
|
|
9
|
-
export interface GradeDeLetras {
|
|
10
|
-
/** A grade, como dado: quem desenha lê daqui em vez de recontar. */
|
|
11
|
-
readonly simbolos: readonly string[];
|
|
12
|
-
readonly colunas: number;
|
|
13
|
-
readonly linhas: number;
|
|
14
|
-
/** Quantas casas o valor aceita. `0` = sem limite (jogos de palavra). */
|
|
15
|
-
readonly capacidade: number;
|
|
16
|
-
/** Índice linear do cursor, `0..simbolos.length-1`. */
|
|
17
|
-
indice(): number;
|
|
18
|
-
/** A posição do cursor em linha/coluna, base ZERO — quem anuncia soma 1 se quiser falar "linha 1". */
|
|
19
|
-
posicao(): Posicao;
|
|
20
|
-
/** O símbolo sob o cursor. */
|
|
21
|
-
sob(): string;
|
|
22
|
-
/** Move o cursor uma casa, enrolando em toroide. */
|
|
23
|
-
mover(dir: Direcao): void;
|
|
24
|
-
/** Leva o cursor ao símbolo dado. Devolve `false` — e não move — quando ele não está na grade. */
|
|
25
|
-
irPara(simbolo: string): boolean;
|
|
26
|
-
/** Acrescenta o símbolo sob o cursor ao valor. Não faz nada quando o valor já está cheio. */
|
|
27
|
-
digitar(): void;
|
|
28
|
-
/** Apaga a última casa. Não faz nada quando o valor está vazio. */
|
|
29
|
-
apagar(): void;
|
|
30
|
-
/** Esvazia o valor. O cursor NÃO se mexe: quem apagou continua olhando para onde estava. */
|
|
31
|
-
limpar(): void;
|
|
32
|
-
/** O que foi digitado até agora. */
|
|
33
|
-
valor(): string;
|
|
34
|
-
/** Quantas casas ainda faltam. `null` quando não há capacidade declarada. */
|
|
35
|
-
faltam(): number | null;
|
|
36
|
-
/** `true` quando o valor atingiu a capacidade. Sempre `false` sem capacidade declarada. */
|
|
37
|
-
completo(): boolean;
|
|
38
|
-
}
|
|
39
|
-
export interface OpcoesDaGrade {
|
|
40
|
-
/** Os símbolos, em ordem de leitura (esquerda→direita, cima→baixo). */
|
|
41
|
-
simbolos: string;
|
|
42
|
-
/** Largura da grade. As linhas saem da divisão, e a última pode ficar incompleta. */
|
|
43
|
-
colunas: number;
|
|
44
|
-
/** Quantas casas o valor aceita; omitir ou `0` deixa sem limite. */
|
|
45
|
-
capacidade?: number;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* A grade, como instância.
|
|
49
|
-
*
|
|
50
|
-
* `colunas` precisa ser inteiro ≥ 1 e `simbolos` não pode ser vazio: uma grade sem casas não tem cursor, e
|
|
51
|
-
* um cursor sem casa é a origem de todo `undefined` que aparece três telas adiante. As mensagens são
|
|
52
|
-
* SELETORES e não prosa — o gate de i18n de engine proíbe frase em qualquer idioma aqui, e o nome do campo
|
|
53
|
-
* que falhou é mais útil que uma frase de qualquer forma.
|
|
54
|
-
*/
|
|
55
|
-
export declare function criarGrade(opcoes: OpcoesDaGrade): GradeDeLetras;
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// core/letter-grid — ENTRADA DE TEXTO SEM TECLADO, e é essa a coisa que este arquivo é.
|
|
3
|
-
//
|
|
4
|
-
// ========================= POR QUE ISTO EXISTE =========================
|
|
5
|
-
// O ADR-0027 diz o que falta ao motor em uma linha: *"the engine needs a LETTER GRID SELECTOR, not a
|
|
6
|
-
// keyboard"*. Um console não tem teclado, e o alvo desta engine é uma máquina de escola operada por
|
|
7
|
-
// direcional — quando não por UM botão só. Digitar, aqui, é mover um cursor por uma grade e confirmar.
|
|
8
|
-
//
|
|
9
|
-
// O consumidor é o CÓDIGO DA SALA DA PROFESSORA. Não é a senha de progressão da criança: o ADR-0037 a
|
|
10
|
-
// enterrou junto com a ideia de salvar jogo — não existe save, e o Inclusionist não guarda nada sobre uma
|
|
11
|
-
// criança. O que o ADR-0037 diz que sobrevive é o `core/password`, e por outro motivo: *"the teacher's room
|
|
12
|
-
// code is the same engineering problem… it stays because the room screen will need it"*. O modo de falha
|
|
13
|
-
// mudou de forma junto: um código errado que seja ACEITO não carrega o progresso de outra criança — larga
|
|
14
|
-
// esta criança na sala de outra turma, fazendo a atividade de outra professora.
|
|
15
|
-
//
|
|
16
|
-
// O segundo consumidor já está previsto e é o que impede este módulo de nascer como componente de senha: os
|
|
17
|
-
// jogos de palavras do catálogo do `inclusionist-demos` precisam da mesma coisa.
|
|
18
|
-
//
|
|
19
|
-
// ========================= O CORTE (ADR-0041) =========================
|
|
20
|
-
// MECÂNICA aqui, TELA no `ui/`. É a mesma divisão que o `core/password` acabou de usar, e ela existe para
|
|
21
|
-
// preservar a propriedade mais cara que o `core/` tem: ser testável sem navegador. O `core/scenes` foi
|
|
22
|
-
// escrito de propósito sem PIXI e sem DOM por esse motivo, e um módulo que DESENHE dentro do `core/` abre
|
|
23
|
-
// uma porta que a próxima tela atravessa sem discussão.
|
|
24
|
-
//
|
|
25
|
-
// O que NÃO está aqui, e é honesto dizer: a repetição de tecla. Ela é temporização de entrada e mora com o
|
|
26
|
-
// `input/`, junto das bordas de tecla — o ADR-0041 a listou como conteúdo desta metade e ela não é.
|
|
27
|
-
//
|
|
28
|
-
// ========================= A ESCOLHA DE ENROLAMENTO, E O MOTIVO =========================
|
|
29
|
-
// Nas bordas o cursor enrola em TOROIDE: andar para a direita mantém a LINHA, andar para baixo mantém a
|
|
30
|
-
// COLUNA. A alternativa — a da direita na última coluna cair na linha seguinte, como texto — é comum em
|
|
31
|
-
// teclados de console e está errada aqui, e o motivo é o leitor de tela: a leitura anuncia "linha 2,
|
|
32
|
-
// coluna 1", e um movimento horizontal que mude a linha faz o anúncio contradizer a direção que a criança
|
|
33
|
-
// apertou. Movimento previsível vale mais que economia de apertos.
|
|
34
|
-
//
|
|
35
|
-
// SEM I/O NO IMPORT, e sem estado de módulo: `criarGrade()` devolve a instância e quem compõe a possui. É a
|
|
36
|
-
// D13 do `inclusionist-demos`, e é o que permite duas grades na mesma página sem uma pisar na outra.
|
|
37
|
-
/**
|
|
38
|
-
* A grade, como instância.
|
|
39
|
-
*
|
|
40
|
-
* `colunas` precisa ser inteiro ≥ 1 e `simbolos` não pode ser vazio: uma grade sem casas não tem cursor, e
|
|
41
|
-
* um cursor sem casa é a origem de todo `undefined` que aparece três telas adiante. As mensagens são
|
|
42
|
-
* SELETORES e não prosa — o gate de i18n de engine proíbe frase em qualquer idioma aqui, e o nome do campo
|
|
43
|
-
* que falhou é mais útil que uma frase de qualquer forma.
|
|
44
|
-
*/
|
|
45
|
-
export function criarGrade(opcoes) {
|
|
46
|
-
const simbolos = [...opcoes.simbolos];
|
|
47
|
-
const colunas = opcoes.colunas;
|
|
48
|
-
if (simbolos.length === 0)
|
|
49
|
-
throw new Error('simbolos');
|
|
50
|
-
if (!Number.isInteger(colunas) || colunas < 1)
|
|
51
|
-
throw new Error('colunas');
|
|
52
|
-
const linhas = Math.ceil(simbolos.length / colunas);
|
|
53
|
-
const capacidade = opcoes.capacidade ?? 0;
|
|
54
|
-
if (!Number.isInteger(capacidade) || capacidade < 0)
|
|
55
|
-
throw new Error('capacidade');
|
|
56
|
-
let cursor = 0;
|
|
57
|
-
let digitado = '';
|
|
58
|
-
/** Enrolamento de um eixo, escrito uma vez: `((v % n) + n) % n` sobrevive a negativo, que `v % n` não. */
|
|
59
|
-
const enrolar = (v, n) => ((v % n) + n) % n;
|
|
60
|
-
/**
|
|
61
|
-
* A ÚLTIMA LINHA PODE SER INCOMPLETA — 32 símbolos em 8 colunas dão 4 linhas cheias, mas 30 dariam uma
|
|
62
|
-
* linha com 6. Descer numa coluna que não existe na linha de destino cairia num buraco, e este é o ponto
|
|
63
|
-
* que decide o que fazer: o cursor pula a linha incompleta naquela coluna e segue descendo. Assim toda
|
|
64
|
-
* tecla move, sempre, para uma casa que existe — e o leitor de tela nunca anuncia vazio.
|
|
65
|
-
*/
|
|
66
|
-
function indiceDe(linha, coluna) {
|
|
67
|
-
for (let i = 0; i < linhas; i++) {
|
|
68
|
-
const l = enrolar(linha + i, linhas);
|
|
69
|
-
const idx = l * colunas + coluna;
|
|
70
|
-
if (idx < simbolos.length)
|
|
71
|
-
return idx;
|
|
72
|
-
}
|
|
73
|
-
return cursor; // inalcançável com colunas ≥ 1: a linha 0 sempre tem a coluna 0
|
|
74
|
-
}
|
|
75
|
-
function posicao() {
|
|
76
|
-
return { linha: Math.floor(cursor / colunas), coluna: cursor % colunas };
|
|
77
|
-
}
|
|
78
|
-
function mover(dir) {
|
|
79
|
-
const { linha, coluna } = posicao();
|
|
80
|
-
if (dir === 'esquerda' || dir === 'direita') {
|
|
81
|
-
// Enrola DENTRO da linha, e a linha incompleta enrola no tamanho dela, não no da grade.
|
|
82
|
-
const inicio = linha * colunas;
|
|
83
|
-
const largura = Math.min(colunas, simbolos.length - inicio);
|
|
84
|
-
cursor = inicio + enrolar(coluna + (dir === 'direita' ? 1 : -1), largura);
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
cursor = indiceDe(linha + (dir === 'baixo' ? 1 : -1), coluna);
|
|
88
|
-
}
|
|
89
|
-
return {
|
|
90
|
-
simbolos,
|
|
91
|
-
colunas,
|
|
92
|
-
linhas,
|
|
93
|
-
capacidade,
|
|
94
|
-
indice: () => cursor,
|
|
95
|
-
posicao,
|
|
96
|
-
sob: () => simbolos[cursor],
|
|
97
|
-
mover,
|
|
98
|
-
irPara(simbolo) {
|
|
99
|
-
const i = simbolos.indexOf(simbolo);
|
|
100
|
-
if (i < 0)
|
|
101
|
-
return false;
|
|
102
|
-
cursor = i;
|
|
103
|
-
return true;
|
|
104
|
-
},
|
|
105
|
-
digitar() {
|
|
106
|
-
if (capacidade > 0 && digitado.length >= capacidade)
|
|
107
|
-
return;
|
|
108
|
-
digitado += simbolos[cursor];
|
|
109
|
-
},
|
|
110
|
-
apagar() { digitado = digitado.slice(0, -1); },
|
|
111
|
-
limpar() { digitado = ''; },
|
|
112
|
-
valor: () => digitado,
|
|
113
|
-
faltam: () => (capacidade > 0 ? capacidade - digitado.length : null),
|
|
114
|
-
completo: () => capacidade > 0 && digitado.length >= capacidade,
|
|
115
|
-
};
|
|
116
|
-
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
/** Um campo do esquema: um nome e quantos BITS ele ocupa (⇒ valores de 0 a 2^bits − 1). */
|
|
3
|
-
export interface CampoSenha {
|
|
4
|
-
readonly nome: string;
|
|
5
|
-
readonly bits: number;
|
|
6
|
-
}
|
|
7
|
-
export interface CodecSenha {
|
|
8
|
-
/** Quantos caracteres a senha tem, sem separadores. Constante: toda senha deste esquema tem este tamanho. */
|
|
9
|
-
readonly comprimento: number;
|
|
10
|
-
/** Os campos, na ordem em que foram declarados (cópia — quem lê não altera o esquema). */
|
|
11
|
-
readonly campos: readonly CampoSenha[];
|
|
12
|
-
/** Empacota os valores. Lança se algum campo faltar ou não couber — ver a nota em `codificar`. */
|
|
13
|
-
codificar(valores: Readonly<Record<string, number>>): string;
|
|
14
|
-
/** Desempacota. `null` = senha inválida (comprimento, símbolo, soma ou enchimento). */
|
|
15
|
-
decodificar(senha: string): Record<string, number> | null;
|
|
16
|
-
}
|
|
17
|
-
/** Crockford base32: sem I, L, O e U. Índice = valor de 5 bits. */
|
|
18
|
-
export declare const ALFABETO = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
|
|
19
|
-
/**
|
|
20
|
-
* Cria um codec para o esquema `campos`.
|
|
21
|
-
*
|
|
22
|
-
* ⚠️ LANÇA em esquema malformado, e isso é decisão: um esquema errado é erro de PROGRAMA, e um erro de
|
|
23
|
-
* programa que só aparece como senha estranha três meses depois custa mais caro que um boot que não sobe.
|
|
24
|
-
* É a mesma escolha de `boot/create-game` para a declaração malformada.
|
|
25
|
-
*/
|
|
26
|
-
export declare function criarCodec(campos: readonly CampoSenha[]): CodecSenha;
|
|
27
|
-
/**
|
|
28
|
-
* Insere um separador a cada `grupo` caracteres — `'A1B2C3D4'` vira `'A1B2-C3D4'`.
|
|
29
|
-
*
|
|
30
|
-
* É acessibilidade, não enfeite: uma sequência sem grupos é lida caractere a caractere pelo leitor de tela e
|
|
31
|
-
* copiada perdendo o lugar por quem lê da tela para o caderno. `decodificar` ignora o separador, então a
|
|
32
|
-
* senha agrupada e a senha corrida são a MESMA senha — quem digitar sem o traço não é punido por isso.
|
|
33
|
-
*/
|
|
34
|
-
export declare function formatar(senha: string, grupo?: number, sep?: string): string;
|