@the-inclusionist/engine 8.0.0 → 10.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 +89 -78
- package/app/css/style.css +584 -374
- package/app/public/vendor/fonts/bitter-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/bitter-var.woff2 +0 -0
- package/app/public/vendor/fonts/bodonimoda-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/bodonimoda-var.woff2 +0 -0
- package/app/public/vendor/fonts/cat-abril_fatface-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-abril_fatface-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-adlam_display-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-adlam_display-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-agu_display-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-agu_display-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-alfa_slab_one-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-alfa_slab_one-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-are_you_serious-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-are_you_serious-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-asimovian-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-asimovian-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-atkinson_hyperlegible_next-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-atkinson_hyperlegible_next-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bakbak_one-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bakbak_one-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bangers-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bangers-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-barriecito-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-barriecito-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-berkshire_swash-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-berkshire_swash-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bevan-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bevan-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bitcount-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bitcount-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bowlby_one_sc-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bowlby_one_sc-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bungee_shade-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bungee_shade-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-charm-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-charm-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-charm-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-charm-700.woff2 +0 -0
- package/app/public/vendor/fonts/cat-cherry_bomb_one-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-cherry_bomb_one-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-chokokutai-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-chokokutai-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-chonburi-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-chonburi-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-climate_crisis-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-climate_crisis-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-cookie-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-dela_gothic_one-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-dela_gothic_one-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-fascinate_inline-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-fascinate_inline-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ga_maamli-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ga_maamli-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-itim-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-itim-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-jacquard_24-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-jacquard_24-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-kablammo-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-kablammo-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-kalam-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-kalam-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-kalam-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-kalam-700.woff2 +0 -0
- package/app/public/vendor/fonts/cat-katibeh-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-katibeh-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-lemonada-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-lemonada-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-lilita_one-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-lilita_one-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-lobster-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-lobster-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-luckiest_guy-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-luckiest_guy-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-marhey-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-marhey-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-modak-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-modak-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-momo_signature-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-momo_signature-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-monofett-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-monofett-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-monomakh-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-monomakh-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-monoton-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-monoton-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-nerko_one-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-nerko_one-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_adlam-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_adlam-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_arabic-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_arabic-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_devanagari-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_devanagari-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_hebrew-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_hebrew-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_jp-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_jp-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_khmer-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_khmer-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_kr-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_kr-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_sc-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_sc-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_thai-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_thai-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ole-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ole-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-pacifico-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-pacifico-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-patrick_hand-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-patrick_hand-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-petit_formal_script-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-petit_formal_script-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-pixelify_sans-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-pixelify_sans-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-plaster-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-plaster-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_ar_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_at-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_at_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_nsw-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_nsw_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_qld-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_qld_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_sa-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_sa_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_tas-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_tas_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_vic-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_vic_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_be_vlg-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_be_vlg_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_be_wal-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_be_wal_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_br_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_ca_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_cl_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_co_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_cu_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_cz-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_cz_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_de_grund-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_de_grund_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_de_la-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_de_la_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_de_sas-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_de_sas_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_de_va-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_de_va_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_dk_loopet-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_dk_loopet_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_dk_uloopet-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_dk_uloopet_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_es_deco_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_es_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_fr_moderne-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_fr_moderne_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_fr_trad-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_fr_trad_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_gb_j_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_gb_s_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_hr-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_hr_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_hr_lijeva-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_hr_lijeva_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_hu-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_hu_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_id-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_id_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_ie-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_ie_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_in-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_in_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_is-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_is_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_it_moderna-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_it_moderna_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_it_trad-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_it_trad_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_mx_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_ng_modern-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_ng_modern_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_nl-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_nl_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_no-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_no_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_nz-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_nz_basic-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_nz_basic_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_nz_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_pe_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_pl-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_pl_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_pt_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_ro-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_ro_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_sk-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_sk_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_tz-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_tz_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_us_modern_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_us_trad_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_vn-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_vn_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_za-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_za_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-potta_one-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-potta_one-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ranchers-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ranchers-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ranga-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ranga-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ranga-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ranga-700.woff2 +0 -0
- package/app/public/vendor/fonts/cat-risque-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-risque-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-rowdies-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-rowdies-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-rowdies-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-rowdies-700.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ruge_boogie-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ruge_boogie-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ruslan_display-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ruslan_display-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sacramento-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sacramento-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sancreek-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sancreek-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sankofa_display-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sankofa_display-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sedgwick_ave_display-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sedgwick_ave_display-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-shantell_sans-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-shantell_sans-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-smokum-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-smokum-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-solitreo-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-solitreo-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-spicy_rice-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-spicy_rice-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sriracha-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sriracha-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-srisakdi-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-srisakdi-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-srisakdi-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-srisakdi-700.woff2 +0 -0
- package/app/public/vendor/fonts/cat-stix_two_math-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-tillana-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-tillana-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-tillana-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-tillana-700.woff2 +0 -0
- package/app/public/vendor/fonts/cat-titan_one-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-titan_one-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-yatra_one-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-yatra_one-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-yomogi-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-yomogi-400.woff2 +0 -0
- package/app/public/vendor/fonts/dmserifdisplay-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/dmserifdisplay-400.woff2 +0 -0
- package/app/public/vendor/fonts/domine-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/domine-var.woff2 +0 -0
- package/app/public/vendor/fonts/fraunces-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/fraunces-var.woff2 +0 -0
- package/app/public/vendor/fonts/fredoka-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/fredoka-var.woff2 +0 -0
- package/app/public/vendor/fonts/jakarta-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/jakarta-var.woff2 +0 -0
- package/app/public/vendor/fonts/lora-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/lora-var.woff2 +0 -0
- package/app/public/vendor/fonts/merriweather-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/merriweather-var.woff2 +0 -0
- package/app/public/vendor/fonts/notosans-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/notosans-var.woff2 +0 -0
- package/app/public/vendor/fonts/nunito-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/nunito-var.woff2 +0 -0
- package/app/public/vendor/fonts/playfair-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/playfair-var.woff2 +0 -0
- 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/quicksand-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/quicksand-var.woff2 +0 -0
- package/app/public/vendor/fonts/robotoflex-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/robotoflex-var.woff2 +0 -0
- package/app/public/vendor/fonts/sora-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/sora-var.woff2 +0 -0
- package/app/public/vendor/fonts/spacegrotesk-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/spacegrotesk-var.woff2 +0 -0
- package/app/public/vendor/fonts/spectral-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/spectral-400.woff2 +0 -0
- package/app/public/vendor/fonts/spectral-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/spectral-700.woff2 +0 -0
- package/app/public/vendor/fonts/teachers-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/teachers-var.woff2 +0 -0
- package/app/public/vendor/fonts/ubuntu-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/ubuntu-400.woff2 +0 -0
- package/app/public/vendor/fonts/ubuntu-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/ubuntu-700.woff2 +0 -0
- package/app/public/vendor/fonts.css +1167 -51
- package/dist-pkg/boot/create-game.d.ts +467 -162
- package/dist-pkg/boot/create-game.js +3563 -426
- package/dist-pkg/core/a11y-sr.d.ts +25 -3
- package/dist-pkg/core/a11y-sr.js +40 -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 +107 -0
- package/dist-pkg/core/accommodations.js +178 -0
- package/dist-pkg/core/actions.d.ts +75 -51
- package/dist-pkg/core/actions.js +98 -69
- 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 +143 -163
- package/dist-pkg/core/contract.js +223 -207
- 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 +87 -41
- package/dist-pkg/core/i18n.js +206 -153
- 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/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 +321 -215
- package/dist-pkg/i18n/es.js +320 -215
- package/dist-pkg/i18n/pt.js +342 -215
- 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 +164 -145
- package/dist-pkg/input/gamepad.js +351 -559
- 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/keyboard-runtime.d.ts +18 -20
- package/dist-pkg/input/keyboard-runtime.js +23 -27
- package/dist-pkg/input/keyboard.d.ts +68 -62
- package/dist-pkg/input/keyboard.js +83 -105
- package/dist-pkg/input/keydown.d.ts +124 -132
- package/dist-pkg/input/keydown.js +283 -288
- package/dist-pkg/input/latch-edge.d.ts +25 -21
- package/dist-pkg/input/latch-edge.js +33 -35
- package/dist-pkg/input/latch-scope.d.ts +43 -47
- package/dist-pkg/input/latch-scope.js +66 -75
- package/dist-pkg/input/latch-store.d.ts +28 -29
- package/dist-pkg/input/latch-store.js +44 -47
- package/dist-pkg/input/latch-sync.d.ts +28 -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 +164 -0
- package/dist-pkg/input/pad-wizard.d.ts +96 -0
- package/dist-pkg/input/pad-wizard.js +205 -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 +42 -0
- package/dist-pkg/input/switch-scan.js +54 -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 -113
- package/dist-pkg/input/touch-bindings.js +158 -173
- package/dist-pkg/input/touch.d.ts +130 -70
- package/dist-pkg/input/touch.js +321 -123
- 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 +96 -114
- package/dist-pkg/input/transports.js +104 -106
- package/dist-pkg/input/virtual-controller.d.ts +46 -0
- package/dist-pkg/input/virtual-controller.js +41 -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 +43 -0
- package/dist-pkg/input/voice-map.js +125 -0
- package/dist-pkg/platform/audio-ambient.d.ts +13 -1
- package/dist-pkg/platform/audio-ambient.js +11 -13
- 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 +36 -39
- package/dist-pkg/platform/audio-sonar.d.ts +96 -113
- package/dist-pkg/platform/audio-sonar.js +245 -238
- package/dist-pkg/platform/audio.d.ts +53 -19
- package/dist-pkg/platform/audio.js +161 -169
- package/dist-pkg/platform/flash-sampler.d.ts +19 -0
- package/dist-pkg/platform/flash-sampler.js +79 -0
- package/dist-pkg/platform/guide-intensity.d.ts +26 -27
- package/dist-pkg/platform/guide-intensity.js +50 -52
- package/dist-pkg/platform/heavy-catalogue.d.ts +31 -0
- package/dist-pkg/platform/heavy-catalogue.js +223 -0
- package/dist-pkg/platform/heavy-mirror.d.ts +26 -0
- package/dist-pkg/platform/heavy-mirror.js +76 -0
- package/dist-pkg/platform/heavy.d.ts +104 -0
- package/dist-pkg/platform/heavy.js +169 -0
- package/dist-pkg/platform/interruptible-speech.d.ts +16 -16
- package/dist-pkg/platform/interruptible-speech.js +50 -51
- 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 +81 -0
- package/dist-pkg/platform/locale-host.d.ts +10 -0
- package/dist-pkg/platform/locale-host.js +34 -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 +40 -0
- package/dist-pkg/platform/reading-in-worker.js +87 -0
- package/dist-pkg/platform/reading-model.d.ts +73 -0
- package/dist-pkg/platform/reading-model.js +247 -0
- package/dist-pkg/platform/reading-runtime.d.ts +24 -0
- package/dist-pkg/platform/reading-runtime.js +159 -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 +69 -0
- package/dist-pkg/platform/reading.js +128 -0
- package/dist-pkg/platform/speech-recognition.d.ts +51 -0
- package/dist-pkg/platform/speech-recognition.js +84 -0
- package/dist-pkg/platform/speech.d.ts +14 -1
- package/dist-pkg/platform/speech.js +13 -13
- 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 +51 -38
- package/dist-pkg/platform/tts.js +217 -119
- 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 +36 -0
- package/dist-pkg/platform/voice-listener.js +88 -0
- package/dist-pkg/platform/voice-plan.d.ts +6 -102
- package/dist-pkg/platform/voice-plan.js +9 -151
- package/dist-pkg/platform/vosk-runtime.d.ts +71 -0
- package/dist-pkg/platform/vosk-runtime.js +93 -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 +46 -12
- package/dist-pkg/render/crt.js +82 -80
- package/dist-pkg/render/cvd-matrices.d.ts +18 -18
- package/dist-pkg/render/cvd-matrices.js +33 -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 +66 -54
- package/dist-pkg/render/high-contrast.js +221 -216
- 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 +80 -86
- package/dist-pkg/render/viz-axes.js +115 -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 +40 -0
- package/dist-pkg/ui/aac-sets.js +49 -0
- package/dist-pkg/ui/audio-choices.d.ts +63 -0
- package/dist-pkg/ui/audio-choices.js +94 -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 +6 -0
- package/dist-pkg/ui/camera-control.js +14 -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/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 +93 -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 +118 -63
- package/dist-pkg/ui/fonts.js +267 -111
- package/dist-pkg/ui/game-options.d.ts +42 -0
- package/dist-pkg/ui/game-options.js +138 -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 +76 -0
- package/dist-pkg/ui/help-panel.js +232 -0
- package/dist-pkg/ui/hud-bands.d.ts +45 -0
- package/dist-pkg/ui/hud-bands.js +108 -0
- package/dist-pkg/ui/hud.d.ts +73 -70
- 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/latch-refusal.d.ts +22 -21
- package/dist-pkg/ui/latch-refusal.js +37 -37
- package/dist-pkg/ui/layout.d.ts +103 -28
- package/dist-pkg/ui/layout.js +114 -99
- 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 +32 -0
- package/dist-pkg/ui/menu-intent.js +54 -0
- package/dist-pkg/ui/menu-items.d.ts +10 -0
- package/dist-pkg/ui/menu-items.js +22 -0
- package/dist-pkg/ui/menu-nav.d.ts +60 -90
- package/dist-pkg/ui/menu-nav.js +301 -274
- 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 +116 -0
- package/dist-pkg/ui/panel-widgets.js +208 -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 +250 -343
- package/dist-pkg/ui/pause-icons.js +614 -605
- 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 +42 -0
- package/dist-pkg/ui/settings-aac.d.ts +68 -0
- package/dist-pkg/ui/settings-aac.js +189 -0
- package/dist-pkg/ui/settings-audio.d.ts +91 -113
- package/dist-pkg/ui/settings-audio.js +407 -405
- package/dist-pkg/ui/settings-controls.d.ts +53 -92
- 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 +195 -0
- package/dist-pkg/ui/settings-mobility.js +374 -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 +48 -45
- package/dist-pkg/ui/settings-panel.js +164 -93
- package/dist-pkg/ui/settings-typo.d.ts +28 -76
- package/dist-pkg/ui/settings-typo.js +145 -125
- 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 +113 -134
- package/dist-pkg/ui/shell.js +143 -216
- 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 +4 -4
- package/dist-pkg/ui/title.js +11 -13
- package/dist-pkg/ui/top-band.d.ts +24 -0
- package/dist-pkg/ui/top-band.js +100 -0
- package/dist-pkg/ui/typo-choices.d.ts +71 -0
- package/dist-pkg/ui/typo-choices.js +84 -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 +33 -10
- package/dist-pkg/ui/vlibras.js +58 -81
- package/dist-pkg/ui/voice-control.d.ts +46 -0
- package/dist-pkg/ui/voice-control.js +143 -0
- package/dist-pkg/ui/voice-settings.d.ts +96 -0
- package/dist-pkg/ui/voice-settings.js +302 -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 +198 -54
- package/docs/LICENSES.md +160 -145
- package/package.json +24 -25
- package/scripts/heavy-into-the-delivery.mjs +144 -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/third-party.mjs +287 -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/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/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/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,175 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
import { toggleLabel } from './dom.js';
|
|
3
|
-
import type { PlayerView } from '../core/entity.js';
|
|
4
|
-
import type { DomQuery } from '../core/dom-query.js';
|
|
5
|
-
import { type JogadorDaAlternancia as JogadorDaAlternanciaDaAresta } from '../input/latch-sync.js';
|
|
6
|
-
/** Minimal DOM-selector shape (matches ui/dom.ts's `$`). */
|
|
7
|
-
export type { DomQuery } from '../core/dom-query.js';
|
|
8
|
-
/** Minimal platform/storage.ts shape this module needs. */
|
|
9
|
-
export interface MotorStore {
|
|
10
|
-
setBool(key: string, on: boolean): void;
|
|
11
|
-
/** Lê a chave crua. Só a marca do ADR-0029 usa, e para uma pergunta precisa: a criança ESCOLHEU isto? */
|
|
12
|
-
get(key: string): string | null;
|
|
13
|
-
}
|
|
14
|
-
/** Minimal per-player shape this module reads/writes (core/state.ts's `players` entries carry much more). */
|
|
15
|
-
/** As duas escolhas motoras por jogador: modo Fácil e teclas de alternância. */
|
|
16
|
-
export type MotorPlayer = PlayerView<'easy' | 'toggleMove' | 'toggleRun' | 'walkDir'>;
|
|
17
|
-
export interface SettingsMotorCtx {
|
|
18
|
-
/** DOM selector (querySelector), injected — never reaches `document` globally. */
|
|
19
|
-
$: DomQuery;
|
|
20
|
-
/** Screen-reader announcement (core/a11y-sr's srSay), injected. */
|
|
21
|
-
srSay: (msg: string) => void;
|
|
22
|
-
/** Persistence (platform/storage.ts), injected. */
|
|
23
|
-
store: MotorStore;
|
|
24
|
-
/** Live player list (core/state.ts's `players` — mutated in place, same reference every call). */
|
|
25
|
-
players: MotorPlayer[];
|
|
26
|
-
/** Live player count (core/state.ts's `numPlayers`); a getter because the value is reassigned over time. */
|
|
27
|
-
getNumPlayers: () => number;
|
|
28
|
-
/** SHARED setter (also used by the pause-menu quick icon `altmove`) — stays in game.js, injected. */
|
|
29
|
-
setToggleMove?: (i: number, on: boolean) => void;
|
|
30
|
-
/**
|
|
31
|
-
* ESTE JOGO SEGURA ALGUMA TECLA? — `GameDeclaration.seguraTeclas` (ADR-0115). Sem ele a linha da
|
|
32
|
-
* alternância fica AUSENTE deste painel.
|
|
33
|
-
*
|
|
34
|
-
* ⚠️ E A ENGINE NÃO DESENHA ESTA LINHA — o markup do `#opt-altmove` é do CARTUCHO, e a engine só o
|
|
35
|
-
* encontra pelo `$`. Logo «não oferecer» aqui não é deixar de renderizar: é tornar a linha ausente para
|
|
36
|
-
* toda a gente, com `hidden`, que a tira da tela E da árvore de acessibilidade. Um `aria-disabled` seria a
|
|
37
|
-
* resposta errada — essa é a da cláusula 3 do ADR-0113, onde o controle EXISTE e está travado com motivo.
|
|
38
|
-
*
|
|
39
|
-
* ⚠️ OBRIGATÓRIO, pela mesma razão que no `PauseIconsCtx`: não há padrão seguro. `true` deixa a linha num
|
|
40
|
-
* jogo onde ela não faz nada; `false` esconde-a de uma criança que depende dela.
|
|
41
|
-
*/
|
|
42
|
-
seguraTeclas: boolean;
|
|
43
|
-
/**
|
|
44
|
-
* QUAL APARELHO ESTE JOGADOR ESTÁ A USAR (ADR-0113) — atravessa daqui para a escrita.
|
|
45
|
-
*
|
|
46
|
-
* ⚠️ Opcional pela mesma razão que na `EscritaDaAlternanciaCtx`: sem ele a escrita cai no que já fazia,
|
|
47
|
-
* e exigi-lo quebraria todo consumidor por causa de uma migração a meio.
|
|
48
|
-
*/
|
|
49
|
-
transporteEmUso?: (jogador: number) => string;
|
|
50
|
-
/**
|
|
51
|
-
* A ALTERNÂNCIA DO BOTÃO DE CORRER. Injetada como a irmã acima e pelo mesmo motivo: quem persiste e anuncia
|
|
52
|
-
* é a raiz de composição, que é quem conhece `players` e o armazenamento.
|
|
53
|
-
*/
|
|
54
|
-
setToggleRun: (i: number, on: boolean) => void;
|
|
55
|
-
/** Coin layout depends on any player's Modo Fácil (moedas no chão) — owned by the coin subsystem, injected. */
|
|
56
|
-
rebuildCoins: () => void;
|
|
57
|
-
/**
|
|
58
|
-
* Move a prosa das linhas para o rodapé (`ui/settings-panel` → `fillExplain`). Chamado a CADA render.
|
|
59
|
-
*
|
|
60
|
-
* ⚠️ NÃO É OPCIONAL POR ELEGÂNCIA: `fillExplain` roda uma vez quando o overlay é frontalizado e move o
|
|
61
|
-
* `.opt-hint` de dentro de cada linha para o rodapé. Este painel RECONSTRÓI as linhas, e as linhas novas
|
|
62
|
-
* voltam com a prosa lá dentro — então a explicação aparece duas vezes, no rodapé e sob o rótulo, a
|
|
63
|
-
* partir do primeiro clique. O `CLAUDE.md` §4 regista exatamente isto, e a issue #109 já o consertou
|
|
64
|
-
* uma vez noutros painéis.
|
|
65
|
-
*
|
|
66
|
-
* Opcional na assinatura porque um consumidor pode montar o painel sem a casca (um teste, o segundo
|
|
67
|
-
* consumidor): sem casca não há rodapé para duplicar.
|
|
68
|
-
*/
|
|
69
|
-
fillExplain?: (card: HTMLElement | null) => void;
|
|
70
|
-
}
|
|
71
|
-
export interface SettingsMotorApi {
|
|
72
|
-
/** Re-renders #movement-players (kept `hidden`, per E3 — see playerTabsHTML) and (re)wires its buttons. */
|
|
73
|
-
renderMovPlayers: () => void;
|
|
74
|
-
/** Reflects the selected player's Modo Fácil onto #opt-facil (+ the #opt-movement bar light). */
|
|
75
|
-
reflectFacil: () => void;
|
|
76
|
-
/** Reflects the selected player's alternância onto #opt-altmove (+ the #opt-movement bar light). */
|
|
77
|
-
reflectAltMove: () => void;
|
|
78
|
-
/** Idem para a alternância do botão de CORRER (#opt-togglerun). */
|
|
79
|
-
reflectToggleRun: () => void;
|
|
80
|
-
/** Sets Modo Fácil for player `i`; mirrors the old setEasy(i,on). */
|
|
81
|
-
setEasy: (i: number, on: boolean) => void;
|
|
82
|
-
/** Selects which player this panel edits (mirrors `selMovPlayer = pauseActor` before opening the panel). */
|
|
83
|
-
setSelPlayer: (i: number) => void;
|
|
84
|
-
/** Currently selected player index. */
|
|
85
|
-
getSelPlayer: () => number;
|
|
86
|
-
}
|
|
87
|
-
/** localStorage key for a player's Modo Fácil flag (== platform/storage.ts's `easy_p{i}` pattern). */
|
|
88
|
-
export declare function easyKey(i: number): string;
|
|
89
|
-
/**
|
|
90
|
-
* localStorage key da alternância do botão de CORRER, na forma LEGADA (sem transporte).
|
|
91
|
-
*
|
|
92
|
-
* ⚠️ ERA UMA CÓPIA DO LITERAL, com um comentário ao lado a dizer «== `toggleRunP` de platform/storage» — o
|
|
93
|
-
* que é a admissão do defeito escrita como se fosse documentação. Duas cópias de um nome mudam uma de cada
|
|
94
|
-
* vez, e o `platform/storage` já tinha escrito a razão de as chaves serem funções: «virar função aqui é o
|
|
95
|
-
* que impede que um deles escreva num nome torto». Agora delega, e há um nome só.
|
|
96
|
-
*
|
|
97
|
-
* ⚠️ E É A CHAVE LEGADA. O ADR-0104 §C pôs o TRANSPORTE no nome, porque a alternância é do aparelho e não da
|
|
98
|
-
* pessoa; esta continua a ser lida para herdar o que a criança já tinha, e não é escrita. A chave nova é
|
|
99
|
-
* `chaveDaAlternancia`, em `input/latch-scope`.
|
|
100
|
-
*/
|
|
101
|
-
export declare function toggleRunKey(i: number): string;
|
|
102
|
-
/** localStorage key da alternância de MARCHA, por jogador. Delega, como os dois irmãos acima. */
|
|
103
|
-
export declare function toggleMoveKey(i: number): string;
|
|
104
|
-
/**
|
|
105
|
-
* A fatia mínima que a escrita da alternância de marcha toca.
|
|
106
|
-
*
|
|
107
|
-
* ⚠️ `walkDir` ENTRA, e não é detalhe: desligar a alternância tem de PARAR quem está a andar por travamento.
|
|
108
|
-
* Sem isso, a criança desliga o modo e a personagem continua a andar sozinha, sem tecla nenhuma premida —
|
|
109
|
-
* e não há erro nenhum a dizê-lo.
|
|
110
|
-
*
|
|
111
|
-
* ⚠️ E É FATIA PRÓPRIA, e não o `MotorPlayer`, porque os DOIS chamadores têm fatias diferentes: o painel
|
|
112
|
-
* motor traz `easy`/`toggleRun` que isto não lê, e o `PausePlayer` traz o visual e as três do movimento
|
|
113
|
-
* reduzido. Uma fatia mínima é o que deixa os dois passarem sem que nenhum tenha de carregar o do outro.
|
|
114
|
-
* `MotorPlayer` e `PausePlayer` ganharam `walkDir` — quebra declarada, porque o campo é do `PlayerBase` e
|
|
115
|
-
* todo jogador da engine já o tem.
|
|
116
|
-
*
|
|
117
|
-
* 📌 A DEFINIÇÃO MUDOU DE CASA (issue #127) e o NOME fica publicado aqui. Ela vive em `input/latch-sync`, ao
|
|
118
|
-
* lado da regra que a usa, porque a sincronização da aresta toca exactamente estes dois campos — duas cópias
|
|
119
|
-
* do mesmo tipo divergiriam no dia em que a regra ganhasse um terceiro. ⚠️ **Alias e não `export ... from`**:
|
|
120
|
-
* o retrato de nomes deixa re-exports de fora e leria a mudança de casa como remoção, que é a lição da etapa
|
|
121
|
-
* 1a do ADR-0106.
|
|
122
|
-
*/
|
|
123
|
-
export type JogadorDaAlternancia = JogadorDaAlternanciaDaAresta;
|
|
124
|
-
/** O que a escrita precisa de saber. Tudo o que está aqui já vive no `SettingsMotorCtx` e no `PauseIconsCtx`. */
|
|
125
|
-
export interface EscritaDaAlternanciaCtx {
|
|
126
|
-
readonly players: readonly JogadorDaAlternancia[];
|
|
127
|
-
readonly store: {
|
|
128
|
-
setBool(key: string, on: boolean): void;
|
|
129
|
-
};
|
|
130
|
-
readonly srSay: (msg: string) => void;
|
|
131
|
-
readonly getNumPlayers: () => number;
|
|
132
|
-
/**
|
|
133
|
-
* QUAL APARELHO ESTE JOGADOR ESTÁ A USAR (ADR-0113). `input/state.entradaDe(i).emUso` é quem responde.
|
|
134
|
-
*
|
|
135
|
-
* ⚠️ OPCIONAL DE PROPÓSITO, e a razão é o que acontece sem ele: a escrita cai exactamente no que já fazia
|
|
136
|
-
* hoje — só a chave por jogador. Torná-lo obrigatório quebraria todo consumidor que constrói este ctx,
|
|
137
|
-
* por causa de uma migração que ainda não terminou, e o `holdsAtOnce` já mostrou o que isso custa.
|
|
138
|
-
*
|
|
139
|
-
* 📌 E é INJECTADO em vez de importado: `ui/` a ler estado de módulo de `input/` é uma aresta nova entre
|
|
140
|
-
* duas camadas, para poupar um argumento. Este ctx já recebe tudo o resto assim.
|
|
141
|
-
*/
|
|
142
|
-
readonly transporteEmUso?: (jogador: number) => string;
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* LIGA OU DESLIGA A ALTERNÂNCIA DE MARCHA DE UM JOGADOR — e agora é a engine que o faz (ADR-0106 §4).
|
|
146
|
-
*
|
|
147
|
-
* ⚠️ O COMENTÁRIO QUE JUSTIFICAVA A INJEÇÃO ARGUMENTAVA CONTRA ELA. Ele dizia: «SHARED setter (also used by
|
|
148
|
-
* the pause-menu quick icon `altmove`) — stays in game.js, injected». Ser partilhado por DUAS superfícies da
|
|
149
|
-
* engine é razão para a engine o possuir, não para o cartucho o guardar — e a medição de 2026-09-08 mostra
|
|
150
|
-
* que cada passo já era da engine: `toggleMove` e `walkDir` são campos do `PlayerBase`, a chave é do
|
|
151
|
-
* `platform/storage`, e `sr.motor.toggleMove*` são chaves i18n da engine. Não sobrava efeito de jogo nenhum,
|
|
152
|
-
* o que faz deste o mais limpo dos sete: aqui não há sequer um efeito colateral a injectar.
|
|
153
|
-
*/
|
|
154
|
-
export declare function definirAlternanciaDeMarcha(ctx: EscritaDaAlternanciaCtx, i: number, on: boolean): void;
|
|
155
|
-
/** Clamps the selected player back to 0 once it falls outside 0..numPlayers-1 (e.g. player count dropped). */
|
|
156
|
-
export declare function clampSelPlayer(sel: number, numPlayers: number): number;
|
|
157
|
-
/** Whether ANY player currently uses Modo Fácil or alternância — lights the #opt-movement bar button. */
|
|
158
|
-
export declare function anyMotorActive(players: MotorPlayer[]): boolean;
|
|
159
|
-
/** '❚❚ Ligado' / '▶ Desligado' para #opt-facil e #opt-altmove. Reexporta o de ui/dom, que é o único que
|
|
160
|
-
* existe desde o item 14 — o corpo daqui era uma cópia, e o comentário já dizia "shared" sem sê-lo. */
|
|
161
|
-
export declare const onOffLabel: typeof toggleLabel;
|
|
162
|
-
/**
|
|
163
|
-
* Full innerHTML for #movement-players, given the player count and the active index. Pure string building —
|
|
164
|
-
* no DOM. NOTE (verbatim from game.js, E3): the panel keeps this list `hidden` — a single player edits only
|
|
165
|
-
* their own screen (scope = pauseActor) — but the tabs/buttons are still built and wired for >1 player.
|
|
166
|
-
*/
|
|
167
|
-
export declare function playerTabsHTML(numPlayers: number, selected: number): string;
|
|
168
|
-
/**
|
|
169
|
-
* O 'Jogador N: ' que abre um anúncio quando há mais de uma tela. Uma tela só não leva prefixo — dizer
|
|
170
|
-
* "Jogador 1" para quem está sozinho é ruído, e ruído no leitor de tela custa tempo de escuta.
|
|
171
|
-
*/
|
|
172
|
-
export declare function playerPrefix(i: number, numPlayers: number): string;
|
|
173
|
-
/** srSay text for a Modo Fácil change. A frase inteira vem do dicionário — ver `sr.motor.easyOn`. */
|
|
174
|
-
export declare function easyAnnouncement(i: number, numPlayers: number, on: boolean): string;
|
|
175
|
-
export declare function initSettingsMotor(ctx: SettingsMotorCtx): SettingsMotorApi;
|
|
@@ -1,342 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// ui/settings-motor — MOTOR / MOVIMENTO POR JOGADOR panel (Estágio 4): extracted from game.js's
|
|
3
|
-
// renderMovPlayers()/reflectFacil()/reflectAltMove()/setEasy() (~line 2136). Pure logic (per-player tab
|
|
4
|
-
// clamp/view-model, the "any player active" predicate, the Modo Fácil announcement text) is separated from the
|
|
5
|
-
// thin DOM-touching render/reflect functions. DI via initSettingsMotor(ctx): `$` (DOM selector), `srSay`,
|
|
6
|
-
// `store` (platform/storage shape), `players`/`getNumPlayers` (core/state.ts's live state) and `rebuildCoins`
|
|
7
|
-
// (coin subsystem, Modo Fácil puts coins on the ground).
|
|
8
|
-
//
|
|
9
|
-
// ⚠️ `setToggleMove` DEIXOU DE ESTAR NESSA LISTA em 2026-09-08 (ADR-0106 §4, etapa 1b), e o que ela dava como
|
|
10
|
-
// razão era o argumento contrário: dizia que ele «fica fora deste módulo porque é PARTILHADO com outra
|
|
11
|
-
// superfície da interface» — o ícone `altmove` da pausa. Ser partilhado por duas superfícies da ENGINE é razão
|
|
12
|
-
// para a engine o possuir. `definirAlternanciaDeMarcha` mora aqui; o campo do `ctx` ficou OPCIONAL, então
|
|
13
|
-
// quem injecta continua a mandar e quem não injecta deixa de ficar sem ele.
|
|
14
|
-
// Overlay open/close plumbing (frontOverlay, #movement hidden toggle,
|
|
15
|
-
// Escape handling, renderMapHub) is the SHARED helper used by every settings panel and stays in game.js.
|
|
16
|
-
import { toggleLabel } from './dom.js';
|
|
17
|
-
import { t } from '../core/i18n.js';
|
|
18
|
-
import { markChanged, markMenuChanged } from './changed-mark.js';
|
|
19
|
-
import { DEFAULTS } from '../core/state.js';
|
|
20
|
-
// ⚠️ IMPORT DIRETO, e não uma peça a mais no `ctx`, pela mesma razão que o `ui/pause-icons` importa
|
|
21
|
-
// `platform/storage`: um nome de chave injetado é um campo que um consumidor pode omitir, e omiti-lo aqui
|
|
22
|
-
// faria o painel escrever num nome torto — que é o defeito que este import acaba de fechar.
|
|
23
|
-
import { KEYS } from '../platform/storage.js';
|
|
24
|
-
import { gravarAlternancia } from '../input/latch-store.js';
|
|
25
|
-
import { aplicarAlternancia, BASE_DA_MARCHA, } from '../input/latch-sync.js';
|
|
26
|
-
import { recusaDaAlternancia } from './latch-refusal.js';
|
|
27
|
-
// ---------------------------------------------------------------------------------------------
|
|
28
|
-
// Pure logic (no `document`, testable in node)
|
|
29
|
-
// ---------------------------------------------------------------------------------------------
|
|
30
|
-
/** localStorage key for a player's Modo Fácil flag (== platform/storage.ts's `easy_p{i}` pattern). */
|
|
31
|
-
export function easyKey(i) {
|
|
32
|
-
// ⚠️ ERA A ÚLTIMA CÓPIA DO LITERAL neste ficheiro, e o irmão logo abaixo (`toggleRunKey`) já regista por
|
|
33
|
-
// extenso porque isso é defeito: «duas cópias de um nome mudam uma de cada vez». O `platform/storage` diz o
|
|
34
|
-
// resto — as chaves são funções «para impedir que um deles escreva num nome torto». Passada em 2026-09-08,
|
|
35
|
-
// ao acrescentar o terceiro irmão; um gate afirma agora que os três concordam com o `KEYS`.
|
|
36
|
-
return KEYS.easyP(i);
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* localStorage key da alternância do botão de CORRER, na forma LEGADA (sem transporte).
|
|
40
|
-
*
|
|
41
|
-
* ⚠️ ERA UMA CÓPIA DO LITERAL, com um comentário ao lado a dizer «== `toggleRunP` de platform/storage» — o
|
|
42
|
-
* que é a admissão do defeito escrita como se fosse documentação. Duas cópias de um nome mudam uma de cada
|
|
43
|
-
* vez, e o `platform/storage` já tinha escrito a razão de as chaves serem funções: «virar função aqui é o
|
|
44
|
-
* que impede que um deles escreva num nome torto». Agora delega, e há um nome só.
|
|
45
|
-
*
|
|
46
|
-
* ⚠️ E É A CHAVE LEGADA. O ADR-0104 §C pôs o TRANSPORTE no nome, porque a alternância é do aparelho e não da
|
|
47
|
-
* pessoa; esta continua a ser lida para herdar o que a criança já tinha, e não é escrita. A chave nova é
|
|
48
|
-
* `chaveDaAlternancia`, em `input/latch-scope`.
|
|
49
|
-
*/
|
|
50
|
-
export function toggleRunKey(i) {
|
|
51
|
-
return KEYS.toggleRunP(i);
|
|
52
|
-
}
|
|
53
|
-
/** localStorage key da alternância de MARCHA, por jogador. Delega, como os dois irmãos acima. */
|
|
54
|
-
export function toggleMoveKey(i) {
|
|
55
|
-
return KEYS.toggleMoveP(i);
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* LIGA OU DESLIGA A ALTERNÂNCIA DE MARCHA DE UM JOGADOR — e agora é a engine que o faz (ADR-0106 §4).
|
|
59
|
-
*
|
|
60
|
-
* ⚠️ O COMENTÁRIO QUE JUSTIFICAVA A INJEÇÃO ARGUMENTAVA CONTRA ELA. Ele dizia: «SHARED setter (also used by
|
|
61
|
-
* the pause-menu quick icon `altmove`) — stays in game.js, injected». Ser partilhado por DUAS superfícies da
|
|
62
|
-
* engine é razão para a engine o possuir, não para o cartucho o guardar — e a medição de 2026-09-08 mostra
|
|
63
|
-
* que cada passo já era da engine: `toggleMove` e `walkDir` são campos do `PlayerBase`, a chave é do
|
|
64
|
-
* `platform/storage`, e `sr.motor.toggleMove*` são chaves i18n da engine. Não sobrava efeito de jogo nenhum,
|
|
65
|
-
* o que faz deste o mais limpo dos sete: aqui não há sequer um efeito colateral a injectar.
|
|
66
|
-
*/
|
|
67
|
-
export function definirAlternanciaDeMarcha(ctx, i, on) {
|
|
68
|
-
const p = ctx.players[i];
|
|
69
|
-
if (!p)
|
|
70
|
-
return;
|
|
71
|
-
// 📌 A REGRA DE DESLIGAR MORA NUM SÍTIO SÓ desde a issue #127: `aplicarAlternancia` põe o valor E pára quem
|
|
72
|
-
// anda por travamento. Ela era duas linhas aqui, e passou a ser partilhada com a sincronização da aresta
|
|
73
|
-
// (`input/latch-sync`) — que resolve a MESMA pergunta ao trocar de aparelho. Duas cópias do «senão a
|
|
74
|
-
// personagem anda sozinha» divergiriam no dia em que uma delas mudasse.
|
|
75
|
-
aplicarAlternancia(p, on);
|
|
76
|
-
// ⚠️ AS DUAS CHAVES, E A ANTIGA NÃO SAI AINDA — é a forma do `p.visual` ao lado do `p.viz` (#104 etapa 1a),
|
|
77
|
-
// e pela mesma razão: quem LÊ ainda é o cartucho, por `KEYS.toggleMoveP(i)` (`main.ts:540`). Parar de a
|
|
78
|
-
// escrever agora faria a criança perder a escolha no arranque seguinte — o defeito que o ADR-0113 nomeia
|
|
79
|
-
// como a cláusula que decide se a decisão custa um ajuste real no dia em que sai.
|
|
80
|
-
ctx.store.setBool(toggleMoveKey(i), on);
|
|
81
|
-
// 📌 E a chave NOVA, quando se sabe o aparelho. `gravarAlternancia` recusa-se nos quatro assistidos, onde
|
|
82
|
-
// não há escolha a guardar (ADR-0113 cláusula 3) — e devolve `false` para quem chama desabilitar o
|
|
83
|
-
// controle com o motivo dito. Aqui a recusa não muda mais nada: o valor em memória continua a ser o que
|
|
84
|
-
// a regra resolve, e é ela que responde `true` naqueles quatro.
|
|
85
|
-
const transporte = ctx.transporteEmUso ? ctx.transporteEmUso(i) : null;
|
|
86
|
-
if (transporte)
|
|
87
|
-
gravarAlternancia((chave, ligada) => ctx.store.setBool(chave, ligada), BASE_DA_MARCHA, i, transporte, on);
|
|
88
|
-
// 📌 O ANÚNCIO É INCONDICIONAL, ao contrário do `aplicarAlternancia`, que devolve «mudou». A criança
|
|
89
|
-
// carregou no ícone: calar-se porque o valor já era esse deixaria o botão sem resposta para quem ouve.
|
|
90
|
-
ctx.srSay(playerPrefix(i, ctx.getNumPlayers()) + t(on ? 'sr.motor.toggleMoveOn' : 'sr.motor.toggleMoveOff'));
|
|
91
|
-
}
|
|
92
|
-
/** Clamps the selected player back to 0 once it falls outside 0..numPlayers-1 (e.g. player count dropped). */
|
|
93
|
-
export function clampSelPlayer(sel, numPlayers) {
|
|
94
|
-
return sel >= numPlayers ? 0 : sel;
|
|
95
|
-
}
|
|
96
|
-
/** Whether ANY player currently uses Modo Fácil or alternância — lights the #opt-movement bar button. */
|
|
97
|
-
export function anyMotorActive(players) {
|
|
98
|
-
return players.some((p) => p.easy || p.toggleMove);
|
|
99
|
-
}
|
|
100
|
-
/** '❚❚ Ligado' / '▶ Desligado' para #opt-facil e #opt-altmove. Reexporta o de ui/dom, que é o único que
|
|
101
|
-
* existe desde o item 14 — o corpo daqui era uma cópia, e o comentário já dizia "shared" sem sê-lo. */
|
|
102
|
-
export const onOffLabel = toggleLabel;
|
|
103
|
-
/**
|
|
104
|
-
* Full innerHTML for #movement-players, given the player count and the active index. Pure string building —
|
|
105
|
-
* no DOM. NOTE (verbatim from game.js, E3): the panel keeps this list `hidden` — a single player edits only
|
|
106
|
-
* their own screen (scope = pauseActor) — but the tabs/buttons are still built and wired for >1 player.
|
|
107
|
-
*/
|
|
108
|
-
export function playerTabsHTML(numPlayers, selected) {
|
|
109
|
-
if (numPlayers <= 1)
|
|
110
|
-
return '';
|
|
111
|
-
return Array.from({ length: numPlayers }, (_, p) => `<button class="mode-btn${p === selected ? ' is-on' : ''}" data-mp="${p}" type="button">Jogador ${p + 1}</button>`).join('');
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* O 'Jogador N: ' que abre um anúncio quando há mais de uma tela. Uma tela só não leva prefixo — dizer
|
|
115
|
-
* "Jogador 1" para quem está sozinho é ruído, e ruído no leitor de tela custa tempo de escuta.
|
|
116
|
-
*/
|
|
117
|
-
export function playerPrefix(i, numPlayers) {
|
|
118
|
-
return numPlayers > 1 ? t('sr.player.prefix', { n: i + 1 }) : '';
|
|
119
|
-
}
|
|
120
|
-
/** srSay text for a Modo Fácil change. A frase inteira vem do dicionário — ver `sr.motor.easyOn`. */
|
|
121
|
-
export function easyAnnouncement(i, numPlayers, on) {
|
|
122
|
-
return playerPrefix(i, numPlayers) + t(on ? 'sr.motor.easyOn' : 'sr.motor.easyOff');
|
|
123
|
-
}
|
|
124
|
-
// ---------------------------------------------------------------------------------------------
|
|
125
|
-
// DOM-facing (thin) — requires `document`/injected ctx
|
|
126
|
-
// ---------------------------------------------------------------------------------------------
|
|
127
|
-
export function initSettingsMotor(ctx) {
|
|
128
|
-
// ⚠️ RESOLVIDO UMA VEZ: quem injecta manda, quem não injecta passa a ter. A engine sabe fazê-lo sozinha
|
|
129
|
-
// desde 2026-09-08 — ver definirAlternanciaDeMarcha, e o comentário do campo, que argumentava contra si.
|
|
130
|
-
const setToggleMove = ctx.setToggleMove ?? ((i, on) => definirAlternanciaDeMarcha(ctx, i, on));
|
|
131
|
-
let selMovPlayer = 0; // jogador selecionado no painel Acessibilidade motora
|
|
132
|
-
const facilBtn = ctx.$('#opt-facil');
|
|
133
|
-
const altMoveBtn = ctx.$('#opt-altmove');
|
|
134
|
-
/**
|
|
135
|
-
* A DICA ORIGINAL DA LINHA, guardada uma vez.
|
|
136
|
-
*
|
|
137
|
-
* ⚠️ AQUI A RECUSA VAI E VEM, e é essa a diferença para o precedente. O `render/viz-setters` ACRESCENTA
|
|
138
|
-
* o motivo à dica e nunca o retira, o que é correcto lá: aquela lista é reconstruída a cada render. Este
|
|
139
|
-
* botão é persistente e a criança pode largar a webcam e voltar ao teclado — sem guardar o texto de
|
|
140
|
-
* origem, o motivo acumular-se-ia na linha a cada troca de aparelho.
|
|
141
|
-
*/
|
|
142
|
-
const altMoveRow = altMoveBtn?.closest('.ctrl-row') ?? null;
|
|
143
|
-
const altMoveHint = altMoveRow?.querySelector('.opt-hint') ?? null;
|
|
144
|
-
const dicaOriginal = altMoveHint?.textContent ?? '';
|
|
145
|
-
/*
|
|
146
|
-
* ADR-0115 · A LINHA SOME NUM JOGO QUE NÃO SEGURA NADA — e some para TODA A GENTE.
|
|
147
|
-
*
|
|
148
|
-
* 🔴 `hidden` e não `aria-disabled`: a criança que depende da alternância abre este painel para a ligar, e
|
|
149
|
-
* num quiz não há nada para ela ligar. Um controle desabilitado com um motivo continua a ser um controle
|
|
150
|
-
* que não faz nada — e ainda ocupa um lugar na navegação por teclado, entre dois que funcionam.
|
|
151
|
-
* 📌 A cláusula 3 do ADR-0113 é o caso oposto e continua intacta: lá o aparelho EXIGE a alternância, o
|
|
152
|
-
* controle existe, e fica `aria-disabled` COM o motivo, alcançável para que ela possa lê-lo.
|
|
153
|
-
* ⚠️ E a linha é do CARTUCHO: a engine não a criou e por isso não a destrói. `hidden` é reversível e
|
|
154
|
-
* idempotente; remover markup alheio não é nenhuma das duas coisas.
|
|
155
|
-
*/
|
|
156
|
-
if (!ctx.seguraTeclas && altMoveRow)
|
|
157
|
-
altMoveRow.hidden = true;
|
|
158
|
-
/** A recusa DESTE jogador agora, ou `null`. Recalculada a cada reflexo: o aparelho em uso muda. */
|
|
159
|
-
function recusaAgora(i) {
|
|
160
|
-
return ctx.transporteEmUso ? recusaDaAlternancia(ctx.transporteEmUso(i)) : null;
|
|
161
|
-
}
|
|
162
|
-
const toggleRunBtn = ctx.$('#opt-togglerun');
|
|
163
|
-
// barra acende se QUALQUER jogador usa Fácil/alternância
|
|
164
|
-
function reflectMovementBtn() {
|
|
165
|
-
const b = ctx.$('#opt-movement');
|
|
166
|
-
if (b)
|
|
167
|
-
b.classList.toggle('is-on', anyMotorActive(ctx.players));
|
|
168
|
-
refreshMarks();
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* A marca de "saiu do padrão" (ADR-0029). Pendurada no reflect que JÁ roda a cada mudança dos dois
|
|
172
|
-
* controles, porque uma marca que precise de uma chamada própria é uma marca que alguém vai esquecer —
|
|
173
|
-
* e uma marca errada manda a criança desfazer o que ela nunca mexeu.
|
|
174
|
-
*
|
|
175
|
-
* O escopo segue o do reset deste menu: as duas PREFERÊNCIAS. Os métodos de entrada (olhos, mapeamento)
|
|
176
|
-
* ficam de fora aqui também — não porque não possam mudar, mas porque o padrão deles não mora em DEFAULTS,
|
|
177
|
-
* e marcar sem uma fonte única de "o que é padrão" seria inventar uma segunda opinião sobre isso.
|
|
178
|
-
*/
|
|
179
|
-
function refreshMarks() {
|
|
180
|
-
const easy = ctx.players.some((p) => !!p.easy) !== DEFAULTS.easy;
|
|
181
|
-
const alt = ctx.players.some((p) => !!p.toggleMove) !== DEFAULTS.toggleMove;
|
|
182
|
-
// A ALTERNÂNCIA DO CORRER PERGUNTA DIFERENTE, e a diferença é o que ela tem de próprio: ela LIGA SOZINHA
|
|
183
|
-
// no controle de tela. Marcar pelo ESTADO acenderia a marca para 100% de quem joga em tablet, sem ninguém
|
|
184
|
-
// ter tocado em nada — e uma marca sempre acesa não significa nada. Pior: o comentário do reset deste
|
|
185
|
-
// menu já diz que "uma marca errada manda a criança desfazer o que ela nunca mexeu".
|
|
186
|
-
//
|
|
187
|
-
// Então o que marca é a ESCOLHA GUARDADA. Valor salvo significa que alguém mexeu naquele controle; o
|
|
188
|
-
// ligar automático não salva nada, e por isso não marca.
|
|
189
|
-
const runEscolhido = ctx.players.some((p, i) => ctx.store.get(toggleRunKey(i)) != null && !!p.toggleRun !== DEFAULTS.toggleRun);
|
|
190
|
-
markChanged(facilBtn?.closest('.ctrl-row') ?? null, easy);
|
|
191
|
-
markChanged(altMoveBtn?.closest('.ctrl-row') ?? null, alt);
|
|
192
|
-
markChanged(toggleRunBtn?.closest('.ctrl-row') ?? null, runEscolhido);
|
|
193
|
-
markMenuChanged(ctx.$('[data-act="motora"]'), [easy, alt, runEscolhido]);
|
|
194
|
-
}
|
|
195
|
-
function reflectFacil() {
|
|
196
|
-
const p = ctx.players[selMovPlayer];
|
|
197
|
-
const on = !!(p && p.easy);
|
|
198
|
-
if (facilBtn) {
|
|
199
|
-
facilBtn.classList.toggle('is-on', on);
|
|
200
|
-
facilBtn.setAttribute('aria-pressed', String(on));
|
|
201
|
-
facilBtn.textContent = onOffLabel(on);
|
|
202
|
-
}
|
|
203
|
-
reflectMovementBtn();
|
|
204
|
-
}
|
|
205
|
-
function reflectToggleRun() {
|
|
206
|
-
const p = ctx.players[selMovPlayer];
|
|
207
|
-
const on = !!(p && p.toggleRun);
|
|
208
|
-
if (toggleRunBtn) {
|
|
209
|
-
toggleRunBtn.classList.toggle('is-on', on);
|
|
210
|
-
toggleRunBtn.setAttribute('aria-pressed', String(on));
|
|
211
|
-
toggleRunBtn.textContent = onOffLabel(on);
|
|
212
|
-
}
|
|
213
|
-
reflectMovementBtn();
|
|
214
|
-
}
|
|
215
|
-
function reflectAltMove() {
|
|
216
|
-
const p = ctx.players[selMovPlayer];
|
|
217
|
-
const on = !!(p && p.toggleMove);
|
|
218
|
-
if (altMoveBtn) {
|
|
219
|
-
altMoveBtn.classList.toggle('is-on', on);
|
|
220
|
-
altMoveBtn.setAttribute('aria-pressed', String(on));
|
|
221
|
-
altMoveBtn.textContent = onOffLabel(on);
|
|
222
|
-
/*
|
|
223
|
-
* ⚠️ A CLÁUSULA 3 DO ADR-0113 NA TELA: onde a alternância é exigida, o controle NÃO SOME — fica
|
|
224
|
-
* `aria-disabled` e o motivo entra na dica, que a casca (`ui/settings-panel.fillExplain`) move para o
|
|
225
|
-
* rodapé. Sumir ensinaria que a coisa não existe; deixá-lo activo faria a criança carregar e não
|
|
226
|
-
* perceber por que nada mudou.
|
|
227
|
-
*
|
|
228
|
-
* 📌 E `aria-disabled` e não `disabled`: um botão desabilitado de verdade SAI da ordem de tabulação, e
|
|
229
|
-
* quem navega por teclado deixaria de o alcançar — logo deixaria de poder LER o motivo. É a mesma
|
|
230
|
-
* escolha que a #128 nomeia como defeito quando é feita ao contrário (só classe CSS, sem `aria`).
|
|
231
|
-
*/
|
|
232
|
-
const recusa = recusaAgora(selMovPlayer);
|
|
233
|
-
if (recusa)
|
|
234
|
-
altMoveBtn.setAttribute('aria-disabled', 'true');
|
|
235
|
-
else
|
|
236
|
-
altMoveBtn.removeAttribute('aria-disabled');
|
|
237
|
-
if (altMoveHint)
|
|
238
|
-
altMoveHint.textContent = recusa ? `${dicaOriginal} ${t(recusa.chave)}`.trim() : dicaOriginal;
|
|
239
|
-
}
|
|
240
|
-
reflectMovementBtn();
|
|
241
|
-
}
|
|
242
|
-
function setEasy(i, on) {
|
|
243
|
-
const p = ctx.players[i];
|
|
244
|
-
if (!p)
|
|
245
|
-
return;
|
|
246
|
-
p.easy = on;
|
|
247
|
-
ctx.store.setBool(easyKey(i), on);
|
|
248
|
-
reflectFacil();
|
|
249
|
-
ctx.rebuildCoins();
|
|
250
|
-
ctx.srSay(easyAnnouncement(i, ctx.getNumPlayers(), on));
|
|
251
|
-
}
|
|
252
|
-
function renderMovPlayers() {
|
|
253
|
-
const tabs = ctx.$('#movement-players');
|
|
254
|
-
if (!tabs)
|
|
255
|
-
return;
|
|
256
|
-
const numPlayers = ctx.getNumPlayers();
|
|
257
|
-
selMovPlayer = clampSelPlayer(selMovPlayer, numPlayers);
|
|
258
|
-
tabs.hidden = true; // E3: sem abas — cada jogador edita só o seu (escopo = pauseActor)
|
|
259
|
-
tabs.innerHTML = playerTabsHTML(numPlayers, selMovPlayer);
|
|
260
|
-
tabs.querySelectorAll('button[data-mp]').forEach((b) => {
|
|
261
|
-
b.addEventListener('click', () => {
|
|
262
|
-
selMovPlayer = Number(b.dataset.mp);
|
|
263
|
-
renderMovPlayers();
|
|
264
|
-
reflectFacil();
|
|
265
|
-
reflectAltMove();
|
|
266
|
-
});
|
|
267
|
-
});
|
|
268
|
-
// A prosa volta para o rodapé depois de as linhas serem reconstruídas (CLAUDE.md §4, #109).
|
|
269
|
-
ctx.fillExplain?.(ctx.$('#movement .overlay__card'));
|
|
270
|
-
}
|
|
271
|
-
if (facilBtn) {
|
|
272
|
-
facilBtn.addEventListener('click', () => setEasy(selMovPlayer, !ctx.players[selMovPlayer].easy));
|
|
273
|
-
}
|
|
274
|
-
if (altMoveBtn) {
|
|
275
|
-
altMoveBtn.addEventListener('click', () => {
|
|
276
|
-
/*
|
|
277
|
-
* ⚠️ RECUSAR DIZENDO, E NÃO EM SILÊNCIO. O precedente (`render/viz-setters`) resolve isto não ligando
|
|
278
|
-
* ouvinte nenhum — pode, porque reconstrói a lista a cada render. Aqui o ouvinte é ligado uma vez, e
|
|
279
|
-
* um `return` mudo seria «aceitar o clique e ignorá-lo», que é a outra metade do que o ADR-0076
|
|
280
|
-
* proíbe. Então a recusa FALA: quem carregou fica a saber por quê, mesmo sem ver a dica.
|
|
281
|
-
*/
|
|
282
|
-
const recusa = recusaAgora(selMovPlayer);
|
|
283
|
-
if (recusa) {
|
|
284
|
-
ctx.srSay(t(recusa.chave));
|
|
285
|
-
return;
|
|
286
|
-
}
|
|
287
|
-
setToggleMove(selMovPlayer, !ctx.players[selMovPlayer].toggleMove);
|
|
288
|
-
reflectAltMove();
|
|
289
|
-
});
|
|
290
|
-
}
|
|
291
|
-
if (toggleRunBtn) {
|
|
292
|
-
toggleRunBtn.addEventListener('click', () => {
|
|
293
|
-
ctx.setToggleRun(selMovPlayer, !ctx.players[selMovPlayer].toggleRun);
|
|
294
|
-
reflectToggleRun();
|
|
295
|
-
});
|
|
296
|
-
}
|
|
297
|
-
// ---- restaurar os padrões DESTE menu (ADR-0028) ----
|
|
298
|
-
//
|
|
299
|
-
// O alcance aqui é MENOR que a tela, e de propósito. A Acessibilidade motora hospeda quatro coisas: Modo
|
|
300
|
-
// Fácil, movimento por alternância, o controle pelos olhos (#opt-eyes) e o mapeamento de teclas (#map-hub).
|
|
301
|
-
// O reset devolve as duas PREFERÊNCIAS e não encosta nos dois MÉTODOS DE ENTRADA, por uma razão que vale
|
|
302
|
-
// mais que a simetria:
|
|
303
|
-
//
|
|
304
|
-
// UM RESET SÓ PODE DESFAZER O QUE ELE TAMBÉM CONSEGUE REFAZER.
|
|
305
|
-
//
|
|
306
|
-
// A criança que joga com os olhos aponta com os olhos. Desligar o controle pela webcam tira dela o ponteiro
|
|
307
|
-
// com que ela clicaria o botão de volta — o reset deixaria de remover uma armadilha para virar uma, e a
|
|
308
|
-
// saída passaria a depender de outra pessoa estar por perto. O mesmo vale para quem remapeou as teclas
|
|
309
|
-
// porque só alcança algumas: devolver o mapa de fábrica é devolver teclas que a mão dela não chega. Esse
|
|
310
|
-
// mapeamento, aliás, já tem o reset dele (#ctrl-reset), onde a escolha é explícita e não um efeito colateral.
|
|
311
|
-
//
|
|
312
|
-
// Por isso o anúncio DIZ o que ficou de fora: um botão que restaura menos do que o nome promete precisa
|
|
313
|
-
// dizer isso em voz alta, ou a criança conclui que ele não funcionou.
|
|
314
|
-
const resetBtn = ctx.$('#movement-reset');
|
|
315
|
-
if (resetBtn)
|
|
316
|
-
resetBtn.addEventListener('click', () => {
|
|
317
|
-
ctx.players.forEach((p, i) => {
|
|
318
|
-
if (p.easy)
|
|
319
|
-
setEasy(i, false);
|
|
320
|
-
if (p.toggleMove)
|
|
321
|
-
setToggleMove(i, false);
|
|
322
|
-
if (p.toggleRun)
|
|
323
|
-
ctx.setToggleRun(i, false);
|
|
324
|
-
});
|
|
325
|
-
reflectFacil();
|
|
326
|
-
reflectAltMove();
|
|
327
|
-
reflectToggleRun();
|
|
328
|
-
ctx.srSay(t('sr.motor.reset'));
|
|
329
|
-
});
|
|
330
|
-
reflectFacil();
|
|
331
|
-
reflectAltMove();
|
|
332
|
-
reflectToggleRun();
|
|
333
|
-
return {
|
|
334
|
-
renderMovPlayers,
|
|
335
|
-
reflectFacil,
|
|
336
|
-
reflectAltMove,
|
|
337
|
-
reflectToggleRun,
|
|
338
|
-
setEasy,
|
|
339
|
-
setSelPlayer: (i) => { selMovPlayer = i; },
|
|
340
|
-
getSelPlayer: () => selMovPlayer,
|
|
341
|
-
};
|
|
342
|
-
}
|
package/dist-pkg/ui/webcam.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
export declare let eyeMode: boolean;
|
|
3
|
-
export declare function setEyeMode(on: boolean): void;
|
|
4
|
-
export declare function onGaze(data: unknown): void;
|
|
5
|
-
export declare function startEyeControl(): void;
|
|
6
|
-
export declare function stopEyeControl(): void;
|
|
7
|
-
export declare function loadWebGazer(cb?: () => void): void;
|
package/dist-pkg/ui/webcam.js
DELETED
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// ui/webcam.ts — JOGAR COM OS OLHOS (acessibilidade motora): controle por olhar via WebGazer (webcam). Estágio 4,
|
|
3
|
-
// Tier 1. WebGazer entra lazy (script do CDN no 1º uso; vendorizar p/ offline é futuro). onGaze mapeia o olhar
|
|
4
|
-
// para teclas SINTÉTICAS (olhar esq/dir = andar A/D; olhar p/ cima = pular Espaço) → reusa o input do teclado.
|
|
5
|
-
// O botão (#opt-eyes) fica no game.js (usa toggleBtn); aqui a lógica. Deps: ui/dom ($) + core/a11y-sr (srSay/srAlert).
|
|
6
|
-
import { t } from '../core/i18n.js';
|
|
7
|
-
import { $ } from './dom.js';
|
|
8
|
-
import { srAlert } from '../core/a11y-sr.js';
|
|
9
|
-
import { emFracao } from '../input/pointer-space.js'; // #105: um lugar so converte um ponto de tela
|
|
10
|
-
import { carimbarOrigem } from '../input/origem-sintetica.js'; // ADR-0109: a tecla sintetica declara quem a produziu
|
|
11
|
-
const wg = () => window.webgazer;
|
|
12
|
-
export let eyeMode = false; // ligado pelo botão; onGaze só age com ele ligado
|
|
13
|
-
export function setEyeMode(on) { eyeMode = on; }
|
|
14
|
-
const _eyeKeys = { left: false, right: false, up: false };
|
|
15
|
-
// Dispara keydown/keyup SINTÉTICO só na TRANSIÇÃO (evita repetir). code = tecla física (KeyA/KeyD/Space).
|
|
16
|
-
function eyeSet(k, on, code) {
|
|
17
|
-
if (_eyeKeys[k] === on)
|
|
18
|
-
return;
|
|
19
|
-
_eyeKeys[k] = on;
|
|
20
|
-
// ⚠️ CARIMBADO `'olhos'` ANTES DE DESPACHAR (ADR-0109). Sem esta linha o evento chega ao `input/keydown`
|
|
21
|
-
// indistinguível de uma tecla premida e é carimbado `teclado` — e o efeito não é cosmético: a regra 3 diz
|
|
22
|
-
// que apertar uma tecla devolve o teclado SEM alternância, logo o olhar da criança desligaria, sozinho e em
|
|
23
|
-
// silêncio, a alternância de que ela depende para jogar. É o defeito que o §C desta issue existe para fechar.
|
|
24
|
-
const ev = carimbarOrigem(new KeyboardEvent(on ? 'keydown' : 'keyup', { code, bubbles: true }), 'olhos');
|
|
25
|
-
window.dispatchEvent(ev);
|
|
26
|
-
document.dispatchEvent(ev);
|
|
27
|
-
}
|
|
28
|
-
// Recebe o ponto do olhar (px de tela), normaliza dentro do #game-region e vira direção. Exportado p/ teste.
|
|
29
|
-
//
|
|
30
|
-
// ⚠️ AQUI MORA METADE DA ISSUE #105, e vale estar escrito onde acontece: este handler recebe uma POSIÇÃO
|
|
31
|
-
// CONTÍNUA e deita-a fora em três limiares, emitindo teclas sintéticas. É a mesma coisa que os direcionais de
|
|
32
|
-
// toque fazem — e é por isso que a issue conclui que o ponteiro não é fundação nova, é a fundação que o olhar
|
|
33
|
-
// já precisava e nunca teve. Enquanto o ponto morre aqui, uma atividade de desenho não tem como usar o olhar.
|
|
34
|
-
//
|
|
35
|
-
// A conta em si passou a vir de `input/pointer-space`: um lugar só converte um ponto de tela, que é o
|
|
36
|
-
// primeiro item da `definition of done` da #105. O que este ficheiro FAZ com o ponto continua igual.
|
|
37
|
-
export function onGaze(data) {
|
|
38
|
-
const d = data;
|
|
39
|
-
if (!d || !eyeMode)
|
|
40
|
-
return;
|
|
41
|
-
const gr = $('#game-region');
|
|
42
|
-
if (!gr)
|
|
43
|
-
return;
|
|
44
|
-
const r = gr.getBoundingClientRect();
|
|
45
|
-
if (!r.width)
|
|
46
|
-
return;
|
|
47
|
-
const { fx, fy } = emFracao(d.x, d.y, r);
|
|
48
|
-
eyeSet('left', fx < 0.4, 'KeyA');
|
|
49
|
-
eyeSet('right', fx > 0.6, 'KeyD');
|
|
50
|
-
eyeSet('up', fy < 0.28, 'Space'); // esq/dir = andar; alto = pular
|
|
51
|
-
}
|
|
52
|
-
export function startEyeControl() {
|
|
53
|
-
try {
|
|
54
|
-
const g = wg();
|
|
55
|
-
if (!g) {
|
|
56
|
-
srAlert(t('sr.eyes.loadFailed'));
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
g.setRegression('ridge').setGazeListener(onGaze).begin();
|
|
60
|
-
try {
|
|
61
|
-
g.showVideoPreview(true).showPredictionPoints(true);
|
|
62
|
-
}
|
|
63
|
-
catch (e) { /* noop */ }
|
|
64
|
-
srAlert(t('sr.eyes.calibrate'));
|
|
65
|
-
}
|
|
66
|
-
catch (e) { /* noop */ }
|
|
67
|
-
}
|
|
68
|
-
export function stopEyeControl() {
|
|
69
|
-
try {
|
|
70
|
-
const g = wg();
|
|
71
|
-
if (g)
|
|
72
|
-
g.end();
|
|
73
|
-
}
|
|
74
|
-
catch (e) { /* noop */ }
|
|
75
|
-
eyeSet('left', false, 'KeyA');
|
|
76
|
-
eyeSet('right', false, 'KeyD');
|
|
77
|
-
eyeSet('up', false, 'Space');
|
|
78
|
-
}
|
|
79
|
-
// Carrega o WebGazer (uma vez) do CDN e chama cb ao terminar. Precisa de internet no 1º uso.
|
|
80
|
-
export function loadWebGazer(cb) {
|
|
81
|
-
if (wg()) {
|
|
82
|
-
if (cb)
|
|
83
|
-
cb();
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
const s = document.createElement('script');
|
|
87
|
-
s.src = 'https://webgazer.cs.brown.edu/webgazer.js';
|
|
88
|
-
s.async = true;
|
|
89
|
-
s.onload = () => { if (cb)
|
|
90
|
-
cb(); };
|
|
91
|
-
s.onerror = () => srAlert(t('sr.eyes.needsInternet'));
|
|
92
|
-
document.head.appendChild(s);
|
|
93
|
-
}
|