@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,103 +1,129 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// ui/panel-shell —
|
|
2
|
+
// ui/panel-shell — THE SHELL OF A SETTINGS PANEL, built instead of required.
|
|
3
3
|
//
|
|
4
|
-
// =========================
|
|
5
|
-
//
|
|
4
|
+
// ========================= WHAT THIS FIXES =========================
|
|
5
|
+
// A second consumer (issue #63) measured it: a panel's ctx asks for `$` and `store`, but what it REALLY requires is
|
|
6
|
+
// that the consumer's document contain five ids (`#typo`, `#typo-list`, `#typo-close`, …). Nothing in the type says so;
|
|
7
|
+
// it is found by trial, and the failure mode is the worst possible one — the panel opens EMPTY, with no error.
|
|
6
8
|
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
// possível: o painel abre VAZIO, sem erro.»
|
|
9
|
+
// Each `ui/settings-*.ts` fills the INSIDE of its panel; this module builds the OUTSIDE — the veil, the card, the title,
|
|
10
|
+
// the actions row and the reset button — and returns the ids it created, so the contract is stated instead of
|
|
11
|
+
// discovered.
|
|
11
12
|
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
//
|
|
13
|
+
// ⚠️ AND THE MENU RULE OF `CLAUDE.md` §4 IS BUILT IN, not remembered. A panel's introduction goes in the card's
|
|
14
|
+
// `data-explain-idle` — never in a `<p>` of prose at the top —, because a menu that explains item by item makes the
|
|
15
|
+
// child READ EVERYTHING to find what they want (issue #62). The shell has no way to receive a `<p>` at the top.
|
|
15
16
|
//
|
|
16
|
-
//
|
|
17
|
-
// `data-explain-idle` do cartão — nunca num `<p>` de prosa no topo —, porque um menu que explica item a item
|
|
18
|
-
// obriga a criança a LER TUDO para achar o que procura. A issue #62 mandava editar seis blocos de markup para
|
|
19
|
-
// isso; o markup saiu, e a regra ficou sem alvo. Aqui ela deixa de ser lembrete e passa a ser construção: a
|
|
20
|
-
// casca não tem por onde receber um `<p>` no topo.
|
|
21
|
-
//
|
|
22
|
-
// ========================= A FORMA, QUE FOI MEDIDA E NÃO INVENTADA =========================
|
|
23
|
-
// É a do painel de tipografia do `app/quiz.html`, que é o único que sobrou e o que o segundo consumidor
|
|
24
|
-
// exercitou de facto:
|
|
17
|
+
// ========================= THE SHAPE =========================
|
|
25
18
|
//
|
|
26
19
|
// <div id="X" class="overlay" hidden>
|
|
27
20
|
// <div class="overlay__card" role="dialog" aria-modal="true" aria-labelledby="X-title" [data-explain-idle]>
|
|
28
21
|
// <h2 id="X-title">…</h2>
|
|
29
|
-
// <
|
|
22
|
+
// <button id="X-close">…</button> ← item 1 (ADR-0158)
|
|
23
|
+
// <div id="X-list" class="ctrl-list" role="group" aria-label="…"></div> ← the inside, from settings-*
|
|
30
24
|
// <div class="overlay__actions">
|
|
31
|
-
// <button id="X-reset">…</button>
|
|
25
|
+
// <button id="X-reset">…</button>
|
|
32
26
|
// </div>
|
|
33
27
|
// </div>
|
|
34
28
|
// </div>
|
|
35
29
|
//
|
|
36
|
-
// ⚠️
|
|
37
|
-
//
|
|
38
|
-
//
|
|
30
|
+
// ⚠️ THE `.opt-explain` FOOTER IS NOT CREATED HERE, on purpose: `ui/settings-panel.fillExplain` creates it when it moves
|
|
31
|
+
// the first hint there. Creating it empty here would give an `aria-live` region that announces nothing, and two hands
|
|
32
|
+
// creating the same node is how it would end up duplicated.
|
|
39
33
|
//
|
|
40
|
-
//
|
|
41
|
-
//
|
|
42
|
-
//
|
|
34
|
+
// No `innerHTML`: everything through `create` + `textContent`, like `ui/loop-crash` and `ui/focus-trap`. The title and
|
|
35
|
+
// the list label come from the CALLER already resolved — this module does not translate, so it can be exercised with no
|
|
36
|
+
// dictionary.
|
|
43
37
|
//
|
|
44
|
-
// ⚠️
|
|
45
|
-
//
|
|
46
|
-
//
|
|
47
|
-
/**
|
|
48
|
-
export function
|
|
49
|
-
return {
|
|
38
|
+
// ⚠️ AND IT IMPORTS NOTHING. A shell that does not use `innerHTML` does not need to escape text either: `textContent`
|
|
39
|
+
// escapes by construction. An import "for convenience" is how a leaf module stops being one, and how a future reader
|
|
40
|
+
// starts looking for an interpolation that does not exist.
|
|
41
|
+
/** The ids a panel of `id` occupies. Exported because a gate and a consumer need to name them. */
|
|
42
|
+
export function shellIds(id, customListId) {
|
|
43
|
+
return {
|
|
44
|
+
overlay: id,
|
|
45
|
+
title: `${id}-title`,
|
|
46
|
+
list: customListId ?? `${id}-list`,
|
|
47
|
+
reset: `${id}-reset`,
|
|
48
|
+
close: `${id}-close`,
|
|
49
|
+
};
|
|
50
50
|
}
|
|
51
51
|
/**
|
|
52
|
-
*
|
|
52
|
+
* Mounts (or reuses) the shell of panel `spec.id` and returns its parts.
|
|
53
53
|
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
* contagem de jogadores muda a grade de telas.
|
|
54
|
+
* IDEMPOTENT: if a `#id` already exists, it is reused and the card's content is rebuilt. A panel mounted twice cannot
|
|
55
|
+
* end up with two veils — and it can be mounted more than once (two cartridges on one page, ADR-0139).
|
|
57
56
|
*/
|
|
58
|
-
export function
|
|
59
|
-
const ids =
|
|
60
|
-
const overlay = ctx.
|
|
57
|
+
export function mountShell(ctx, spec) {
|
|
58
|
+
const ids = shellIds(spec.id, spec.listId);
|
|
59
|
+
const overlay = ctx.find('#' + ids.overlay) ?? ctx.create('div');
|
|
61
60
|
overlay.id = ids.overlay;
|
|
62
61
|
overlay.className = 'overlay';
|
|
63
62
|
overlay.hidden = true;
|
|
64
63
|
while (overlay.firstChild)
|
|
65
64
|
overlay.removeChild(overlay.firstChild);
|
|
66
|
-
const card = ctx.
|
|
65
|
+
const card = ctx.create('div');
|
|
67
66
|
card.className = 'overlay__card';
|
|
68
67
|
card.setAttribute('role', 'dialog');
|
|
69
68
|
card.setAttribute('aria-modal', 'true');
|
|
70
69
|
card.setAttribute('aria-labelledby', ids.title);
|
|
71
|
-
|
|
72
|
-
if (spec.introducao)
|
|
73
|
-
card.setAttribute('data-explain-idle', spec.introducao);
|
|
74
|
-
const h2 = ctx.criar('h2');
|
|
70
|
+
const h2 = ctx.create('h2');
|
|
75
71
|
h2.id = ids.title;
|
|
76
|
-
h2.textContent = spec.titulo;
|
|
77
72
|
card.appendChild(h2);
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
73
|
+
// ADR-0158: «Voltar» is item 1 and nothing closes the panel after its rows. The way out is where the cursor lands
|
|
74
|
+
// when the panel opens — a close button at the bottom made the child walk every row to leave. The id stays
|
|
75
|
+
// `#X-close`, which is contract; only its place and its word changed.
|
|
76
|
+
const backButton = button(ctx, ids.close, 'mode-btn overlay__back');
|
|
77
|
+
card.appendChild(backButton);
|
|
78
|
+
const listNode = ctx.create('div');
|
|
79
|
+
listNode.id = ids.list;
|
|
80
|
+
listNode.className = 'ctrl-list';
|
|
81
|
+
listNode.setAttribute('role', 'group');
|
|
82
|
+
card.appendChild(listNode);
|
|
83
|
+
const actionsRow = ctx.create('div');
|
|
84
|
+
actionsRow.className = 'overlay__actions';
|
|
85
|
+
const reset = button(ctx, ids.reset, 'mode-btn');
|
|
86
|
+
actionsRow.appendChild(reset);
|
|
87
|
+
card.appendChild(actionsRow);
|
|
91
88
|
overlay.appendChild(card);
|
|
92
|
-
|
|
89
|
+
const shell = { overlay, card, title: h2, list: listNode, reset, close: backButton, ids };
|
|
90
|
+
applyLabels(shell, spec);
|
|
91
|
+
return shell;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* WRITES THE SHELL'S WORDS — separate from construction because they change AFTER it exists.
|
|
95
|
+
*
|
|
96
|
+
* 🔴 `initI18n` applies the fallback language synchronously — so the page is never blank — and, if the preferred
|
|
97
|
+
* language is another, REQUESTS the switch, which is asynchronous. Anything JavaScript builds in that gap captures the
|
|
98
|
+
* fallback text and nothing rebuilds it; and the language can also change mid-game.
|
|
99
|
+
*
|
|
100
|
+
* ⚠️ AND REBUILDING THE SHELL TO FIX THE TITLE DOES NOT WORK. `mountShell` empties the card, and each `ui/settings-*`
|
|
101
|
+
* wires its `#X-reset` ONCE, at `init` — remounting leaves the reset button in the document with no listener, a dead
|
|
102
|
+
* button that looks alive (ADR-0106 §5). Writing only the words touches no listener.
|
|
103
|
+
*
|
|
104
|
+
* IDEMPOTENT: writing the same labels twice is writing the same labels.
|
|
105
|
+
*/
|
|
106
|
+
export function applyLabels(shell, r) {
|
|
107
|
+
shell.title.textContent = r.title;
|
|
108
|
+
shell.list.setAttribute('aria-label', r.listLabel);
|
|
109
|
+
shell.reset.textContent = r.resetLabel;
|
|
110
|
+
shell.close.textContent = r.closeLabel;
|
|
111
|
+
// the arrow is drawn by the stylesheet, out of the name (ADR-0159 rule 12)
|
|
112
|
+
shell.close.setAttribute('data-glifo', '↩');
|
|
113
|
+
// The panel's introduction is the footer's RESTING text (CLAUDE.md §4), never a `<p>` at the top.
|
|
114
|
+
// ⚠️ ABSENCE HAS TO ERASE, not just stop writing: on a retranslation into a dictionary without the key, the old
|
|
115
|
+
// attribute would survive and the footer would rest in the previous language.
|
|
116
|
+
if (r.intro)
|
|
117
|
+
shell.card.setAttribute('data-explain-idle', r.intro);
|
|
118
|
+
else
|
|
119
|
+
shell.card.removeAttribute('data-explain-idle');
|
|
93
120
|
}
|
|
94
|
-
function
|
|
95
|
-
const b = ctx.
|
|
121
|
+
function button(ctx, id, cssClass) {
|
|
122
|
+
const b = ctx.create('button');
|
|
96
123
|
b.id = id;
|
|
97
|
-
b.className =
|
|
124
|
+
b.className = cssClass;
|
|
98
125
|
b.setAttribute('type', 'button');
|
|
99
|
-
//
|
|
100
|
-
//
|
|
101
|
-
b.textContent = rotulo;
|
|
126
|
+
// The label comes in through `applyLabels`, by `textContent` and not `innerHTML`: a translated label is outside data
|
|
127
|
+
// like any other, and a consumer's dictionary can bring anything inside it.
|
|
102
128
|
return b;
|
|
103
129
|
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
import type { PanelShellCtx } from './panel-shell.js';
|
|
3
|
+
/**
|
|
4
|
+
* The control's SHAPE, not its tag — because the question a panel asks is "does this turn on and off?", not "is this a
|
|
5
|
+
* `<button>`?".
|
|
6
|
+
*
|
|
7
|
+
* 📏 The first three came from measuring the panels: `interruptor` (a switch) covers most of the controls they reach,
|
|
8
|
+
* `escolha` (a select) and `cursor` (a slider) the rest. A new shape enters when a panel demands it, not before.
|
|
9
|
+
*/
|
|
10
|
+
export type ControlShape = 'interruptor' | 'escolha' | 'cursor' | 'radio' | 'button';
|
|
11
|
+
export interface ControlRowSpec {
|
|
12
|
+
/** The CONTROL's id — `opt-facil`, `cane-div`. It is how the `settings-*` finds it. */
|
|
13
|
+
readonly id: string;
|
|
14
|
+
/** The SHORT label, already translated. It goes in the `<strong>`, and it is the only thing in view on the row. */
|
|
15
|
+
readonly label: string;
|
|
16
|
+
/**
|
|
17
|
+
* The explanation, already translated. It goes into a SINGLE `.opt-hint`, which `fillExplain` moves to the footer.
|
|
18
|
+
*
|
|
19
|
+
* 📌 Absent = this row has no explanation, which is a legitimate answer. The footer then rests on the panel's text
|
|
20
|
+
* (`data-explain-idle`) while the cursor is on it.
|
|
21
|
+
*/
|
|
22
|
+
readonly hint?: string;
|
|
23
|
+
/** The control's shape. Absent: `interruptor`, the most common case. */
|
|
24
|
+
readonly shape?: ControlShape;
|
|
25
|
+
/**
|
|
26
|
+
* The name a screen reader announces, when it is not the label.
|
|
27
|
+
*
|
|
28
|
+
* ⚠️ IT EXISTS BECAUSE A SWITCH'S TEXT IS ITS STATE, not its name: a `<button>` whose `textContent` says "Off"
|
|
29
|
+
* announces "Off, button" and the person does not know off WHAT. The `<strong>` beside it solves that for whoever SEES
|
|
30
|
+
* the whole row; for whoever navigates control by control, this attribute solves it. Absent, it falls back to
|
|
31
|
+
* `label` — which is the right answer, not a fallback.
|
|
32
|
+
*/
|
|
33
|
+
readonly ariaLabel?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface ControlRow {
|
|
36
|
+
/** The whole `.ctrl-row`. It is where ADR-0029's `markChanged` puts the left-the-default mark. */
|
|
37
|
+
readonly row: HTMLElement;
|
|
38
|
+
/** The control itself, with the requested id. */
|
|
39
|
+
readonly control: HTMLElement;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Builds a menu row: a short label, a hint that goes to the footer, and a control.
|
|
43
|
+
*
|
|
44
|
+
* The row is NOT inserted anywhere — whoever mounts it decides the order, which in this project's menus is part of the
|
|
45
|
+
* decision (ADR-0044 §2).
|
|
46
|
+
*/
|
|
47
|
+
export declare function controlRow(ctx: PanelShellCtx, spec: ControlRowSpec): ControlRow;
|
|
48
|
+
/**
|
|
49
|
+
* REWRITES THE WORDS OF A ROW THAT ALREADY EXISTS — the counterpart of `ui/panel-shell.applyLabels`, one level down.
|
|
50
|
+
*
|
|
51
|
+
* 🔴 The inside of a panel is mounted once, and anything mounted at boot captures the fallback language's text:
|
|
52
|
+
* `initI18n` applies the fallback synchronously and REQUESTS the preferred one, which arrives later — a panel would serve
|
|
53
|
+
* its TITLE in one language and its ROWS in another, on the same screen.
|
|
54
|
+
*
|
|
55
|
+
* ⚠️ AND NO UNIT TEST CATCHES IT, because they all run in a single language.
|
|
56
|
+
*
|
|
57
|
+
* ⚠️ REWRITE AND NOT REBUILD, for the reason `applyLabels` already states: each `ui/settings-*` wires its controls'
|
|
58
|
+
* clicks ONCE, at boot. Remaking the row would leave a control in the document with no listener — a dead button that
|
|
59
|
+
* looks alive (ADR-0106 §5).
|
|
60
|
+
*/
|
|
61
|
+
export declare function labelRow(rowNode: HTMLElement, spec: ControlRowSpec): void;
|
|
62
|
+
/**
|
|
63
|
+
* The header of a panel section: a title and a tag that qualifies it.
|
|
64
|
+
*
|
|
65
|
+
* 📏 It is in the kit because several panels wrote it by hand, with the `.panel-sub__tag` markup copied into each — the
|
|
66
|
+
* same reason as `controlRow`: a rule repeated across files is a rule that drifts.
|
|
67
|
+
*
|
|
68
|
+
* ⚠️ AND IT REFUSES TO EXIST OVER NOTHING, which is the behaviour that makes it worth a function. An "awaiting
|
|
69
|
+
* negotiation" heading with no row under it tells the reader something is there when nothing is, and the person looks
|
|
70
|
+
* for what the title promises. `rows` is the NUMBER of rows the section will have — passing it is what makes this rule
|
|
71
|
+
* exercisable by a case, instead of an `if` no fixed tree reaches.
|
|
72
|
+
*
|
|
73
|
+
* 📌 The title and tag arrive ALREADY TRANSLATED, as in `controlRow`: the kit does not decide language, it builds shape.
|
|
74
|
+
*/
|
|
75
|
+
export declare function sectionHeader(ctx: PanelShellCtx, title: string, tag: string, rows: number): HTMLElement | null;
|
|
76
|
+
/**
|
|
77
|
+
* What a steps control needs: a name, the positions (already translated) and the current one.
|
|
78
|
+
*
|
|
79
|
+
* 🎯 THE DEV ASKED FOR IT, with an exact shape: the contrast boost «deve funcionar trocando entre desligado, linear,
|
|
80
|
+
* misto e quadrático da mesma forma que se troca o número de jogadores, isto é, apertando botões direita e esquerda, e
|
|
81
|
+
* não através de uma barra», and the rounded corners «também». A slider hides how many positions there are; a dropdown
|
|
82
|
+
* hides them all until it opens. Steps always say where you are.
|
|
83
|
+
*
|
|
84
|
+
* 🔴 AND THE SHAPE IS A SINGLE LINE: «◀ Rótulo: valor ▶» (ADR-0130 errata, rule 3) — the Dev: «Não faça essa coisa
|
|
85
|
+
* estranha. Escreva "< Rounded corner: off >"». It is the way to cycle between FEW positions — up to five; above that,
|
|
86
|
+
* a dropdown.
|
|
87
|
+
*/
|
|
88
|
+
export interface StepsSpec {
|
|
89
|
+
/** The control's spoken name — it goes to `aria-label`. */
|
|
90
|
+
readonly label: string;
|
|
91
|
+
/** The positions, in order, already translated. */
|
|
92
|
+
readonly values: readonly string[];
|
|
93
|
+
/** The index of the current position. */
|
|
94
|
+
readonly current: number;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* The next step, CLAMPED at the ends — not a ring, and the difference is the decision.
|
|
98
|
+
*
|
|
99
|
+
* ⚠️ In a ring, right from the largest position would return to off: whoever adjusts looking for the maximum would pass
|
|
100
|
+
* it without warning and switch off what they wanted to raise. Clamped, the end is a wall you feel — the number of
|
|
101
|
+
* players, the model the Dev gave, does not wrap either.
|
|
102
|
+
*/
|
|
103
|
+
export declare function nextStep(from: number, total: number, delta: number): number;
|
|
104
|
+
/**
|
|
105
|
+
* Builds the control: ONE focusable element (`role="spinbutton"`) with the two arrows inside.
|
|
106
|
+
*
|
|
107
|
+
* ⚠️ THE ARROWS ARE NOT BUTTONS, on purpose: menu navigation treats every `button` as an item, and three items for one
|
|
108
|
+
* adjustment would make the cursor stop twice on nameless arrows. Focus belongs to the control; the arrows are FINGER
|
|
109
|
+
* targets (`data-passo`), outside the accessibility tree — whoever listens gets the `aria-valuetext`.
|
|
110
|
+
*
|
|
111
|
+
* The control emits `passo` (`CustomEvent<number>`, -1 or +1): a tapped arrow emits it from here, and the keyboard's and
|
|
112
|
+
* controller's left and right emit it through `ui/menu-nav`. The user listens to a single event.
|
|
113
|
+
*/
|
|
114
|
+
export declare function mountSteps(ctx: PanelShellCtx, spec: StepsSpec): HTMLElement;
|
|
115
|
+
/**
|
|
116
|
+
* How many positions still CYCLE. The Dev's number (ADR-0130 erratum, 2026-09-12): «Acima de cinco itens deve ser dropdown».
|
|
117
|
+
* Five or fewer are one row «◀ Label: value ▶» — every position is one step away and the row always says where it is;
|
|
118
|
+
* more than five, a dropdown, because a cycle that long is walked more than it is chosen.
|
|
119
|
+
*/
|
|
120
|
+
export declare const MAX_CYCLE_POSITIONS = 5;
|
|
121
|
+
/** One position of an exclusive choice: what is stored, and what is shown and heard (already translated). */
|
|
122
|
+
export interface ChoicePosition {
|
|
123
|
+
readonly value: string;
|
|
124
|
+
readonly label: string;
|
|
125
|
+
}
|
|
126
|
+
/** An exclusive choice: its spoken name, its positions in order, and the value in use. */
|
|
127
|
+
export interface ChoiceSpec {
|
|
128
|
+
readonly label: string;
|
|
129
|
+
readonly values: readonly ChoicePosition[];
|
|
130
|
+
readonly current: string;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Builds the control for ONE EXCLUSIVE CHOICE, and its SIZE picks the control, not the panel's author (ADR-0130 rule 3):
|
|
134
|
+
* up to `MAX_CYCLE_POSITIONS` a steps control (`mountSteps`), more a `<select>`. A choice whose size depends on the moment —
|
|
135
|
+
* the game's named positions, the audio outputs plugged in — takes the control its size asks for NOW, drawn again when it
|
|
136
|
+
* changes.
|
|
137
|
+
*
|
|
138
|
+
* Both shapes answer the same way, so whoever builds a row does not branch: `pick(value)` runs when the child chooses, the
|
|
139
|
+
* value in use is in `data-value`, and a bubbling `change` follows the pick — a list that listens for `change` hears either.
|
|
140
|
+
* A value not among the positions shows the first, as a `<select>` does.
|
|
141
|
+
*/
|
|
142
|
+
export declare function mountChoice(ctx: PanelShellCtx, spec: ChoiceSpec, pick: (value: string) => void): HTMLElement;
|
|
143
|
+
/**
|
|
144
|
+
* REWRITES a choice built by `mountChoice`: its name, its positions' words and the value in use — the redraw a panel does
|
|
145
|
+
* on every open, after a language change or when the value moved elsewhere. The SHAPE stays: a choice whose size can
|
|
146
|
+
* cross five is built again, not updated.
|
|
147
|
+
*/
|
|
148
|
+
export declare function updateChoice(el: HTMLElement, spec: ChoiceSpec): void;
|
|
149
|
+
/** Reflects the current position: the written value, what is heard, and the ends that no longer move. */
|
|
150
|
+
export declare function updateSteps(el: HTMLElement, spec: StepsSpec): void;
|