@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
package/dist-pkg/ui/shell.js
CHANGED
|
@@ -1,207 +1,138 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// ui/shell.ts —
|
|
2
|
+
// ui/shell.ts — THE SHELL: which SCREEN the game is on (title, playing, paused), and what the screen turns on and off
|
|
3
|
+
// when it changes.
|
|
3
4
|
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
5
|
+
// It knows nothing of physics or pixels; it knows `hidden`, focus, mute and the pause cards. `createGame` does NOT mount
|
|
6
|
+
// it — nothing in `app/js` calls `initShell`. It is a published kit for a game that has a title screen and wants the
|
|
7
|
+
// engine's projection of scenes onto the document; several of its ctx fields (`setQuizLevel`, `openTypo`, the pause
|
|
8
|
+
// actions) are one game's vocabulary.
|
|
8
9
|
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
//
|
|
10
|
+
// WHY `projectScene` IS NOT A STATE MACHINE WITH A TRANSITION TABLE. There are three scenes and every transition between
|
|
11
|
+
// them is legal — no guard, no named event, no entry/exit hook beyond the body below. A `Map<[from, to], handler>` would
|
|
12
|
+
// forbid no illegal state (there is none) and turn a block read top to bottom into a jump. What IS worth it is separating
|
|
13
|
+
// the DECISION from the EFFECT: `phaseView(facts)` returns everything a scene asks of the document, and `applyPhaseView`
|
|
14
|
+
// is the only part that touches it. The decision is then testable in the `node` project, and a sign error (the title
|
|
15
|
+
// overlay visible during play, sound not muted on pause — accessibility broken silently) becomes an assertion instead of a
|
|
16
|
+
// symptom found by playing. `ui/title.ts` made the same move with `computeTitleMenuView`.
|
|
17
|
+
// The only part with MEMORY — giving the touch controls back on resume, from the `dataset.wasOn` written on pause — is
|
|
18
|
+
// `touchControlsPlan`, a pure function of (scene facts, previous state, number of screens).
|
|
18
19
|
//
|
|
19
|
-
//
|
|
20
|
-
//
|
|
21
|
-
//
|
|
22
|
-
// · NÃO vale a tabela de transição. São TRÊS estados e as nove transições são todas legais — de qualquer
|
|
23
|
-
// fase para qualquer fase, sem guarda, sem evento nomeado, sem hook de entrada/saída além do corpo que já
|
|
24
|
-
// está aqui. Uma `Map<[from,to], handler>` sobre isso não impede nenhum estado ilegal (não existe nenhum),
|
|
25
|
-
// não descreve nada que o código já não diga, e troca um bloco linear que se lê de cima a baixo por uma
|
|
26
|
-
// indireção que obriga a saltar. Seria cerimônia sobre três estados. Não fiz.
|
|
27
|
-
// · VALE, e muito, separar a DECISÃO do EFEITO. Os `if`s do original não são transições: são nove perguntas
|
|
28
|
-
// diferentes feitas à MESMA fase (`p!=='playing'`, `p!=='title'`, `p!=='paused'`, `p==='paused'`…),
|
|
29
|
-
// espalhadas no meio de nove escritas no DOM. Isso é uma PROJEÇÃO pura da fase disfarçada de sequência
|
|
30
|
-
// imperativa. Extraí a projeção — `phaseView(p)` devolve o registro completo do que a fase manda fazer, e
|
|
31
|
-
// `applyPhaseView` é a única parte que toca o documento. O ganho é concreto e não é estético: a decisão
|
|
32
|
-
// passa a ser testável no project `node`, sem DOM, sem PIXI e sem áudio, e um erro de sinal num `!==`
|
|
33
|
-
// (o tipo de erro que aqui deixa a11y quebrada em silêncio: overlay do título visível durante o jogo,
|
|
34
|
-
// áudio não silenciado na pausa) vira uma asserção em vez de um sintoma que só aparece jogando.
|
|
35
|
-
// É o mesmo movimento que ui/title.ts já fez com `computeTitleMenuView`, e por isso é o precedente da casa.
|
|
36
|
-
// · O único pedaço com MEMÓRIA (e portanto o único candidato legítimo a "estado") é a restauração dos
|
|
37
|
-
// controles de toque, que depende do `dataset.wasOn` gravado na pausa anterior. Esse virou
|
|
38
|
-
// `touchControlsPlan(...)`, uma função pura de (fase, wasOn, escondido, nº de telas) → (escondido', wasOn').
|
|
39
|
-
// Ver, logo abaixo, o defeito que essa separação tornou visível.
|
|
20
|
+
// WHAT IS NOT HERE: the `.pm-btn`/`.pi-btn` markup and click delegation belong to `ui/pause-icons`, which reads this
|
|
21
|
+
// module's action table through `getPauseActs()`. Opening and closing the settings panels belongs to
|
|
22
|
+
// `ui/settings-panel` and the `ui/settings-*` panels; `pauseActs` only CALLS them, by injection.
|
|
40
23
|
//
|
|
41
|
-
//
|
|
42
|
-
//
|
|
43
|
-
//
|
|
44
|
-
// tela. Trazê-lo para cá acoplaria o "em que tela estamos" ao "quantos quadros por segundo" sem nenhum
|
|
45
|
-
// parentesco. O precedente da casa já é esse: ui/layout.ts diz, no cabeçalho, "fpsTick/configureRender
|
|
46
|
-
// seguem no game.js (outro concern)". Não forcei; segue no game.js, e o lar natural dele, quando chegar a
|
|
47
|
-
// vez, é ui/hud.ts.
|
|
48
|
-
// · `padKind()` — NÃO extraí porque JÁ ESTÁ EXTRAÍDO: `input/touch.ts` exporta `padKind()` desde a Onda A,
|
|
49
|
-
// com o corpo idêntico ao do game.js, e o cabeçalho de lá registra que a cópia é órfã. A que sobrou no
|
|
50
|
-
// game.js é código morto duplicado (nenhum chamador — ver o relatório). O certo é apagá-la, não mudá-la
|
|
51
|
-
// de lugar mais uma vez.
|
|
52
|
-
// · `updateTitleLegend()` — a fronteira deixava em aberto se ela é de shell ou de menu-nav. É de SHELL, e a
|
|
53
|
-
// razão é simples: ela não navega nada. Não lê foco, não trata tecla, não anda entre itens; ela pinta o
|
|
54
|
-
// rodapé de UMA tela específica (o título) com a configuração de entrada vigente, e quem a chama é o
|
|
55
|
-
// próprio `setPhase('title')`. Se morasse em ui/menu-nav, a casca precisaria importar o módulo de
|
|
56
|
-
// navegação só para desenhar uma legenda, e a dependência apontaria para o lado errado (a casca chamando o
|
|
57
|
-
// teclado). Ficando aqui, ui/menu-nav não precisa saber que existe uma tela de título.
|
|
58
|
-
// · O `.pm-btn`/`.pi-btn` (markup e delegação de clique) é de ui/pause-icons.ts, que já os constrói e já
|
|
59
|
-
// consome esta tabela por `getPauseActs()`. Aqui está só a TABELA, não o botão.
|
|
60
|
-
// · Abrir/fechar os nove diálogos de configuração é de ui/settings-panel.ts + ui/settings-*.ts. `pauseActs`
|
|
61
|
-
// apenas os CHAMA, por injeção.
|
|
24
|
+
// INJECTION: every entry of `pauseActs` is a callback resolved when it is CALLED, so the host can wire the shell before
|
|
25
|
+
// the panels it opens exist. The number of players and the players are asked through getters: they are round state,
|
|
26
|
+
// owned by the host, and a module-level binding would be shared by a second game on the same page.
|
|
62
27
|
//
|
|
63
|
-
//
|
|
64
|
-
//
|
|
65
|
-
|
|
66
|
-
//
|
|
67
|
-
//
|
|
68
|
-
|
|
69
|
-
//
|
|
70
|
-
|
|
71
|
-
// `openAudio`, `openMovement`, `openVisual`, `openHelp`, `quitGame`, `fitsN`, `joinPlayer` — são
|
|
72
|
-
// `function` içadas OU `const` declarados depois (`motor`, `motion`, `empathy`, `hud`, `selVizPlayer`).
|
|
73
|
-
// Com callbacks, a resolução acontece na CHAMADA (sempre pós-boot) e não na montagem do ctx.
|
|
74
|
-
// · `setPhase` é chamado de fora por game/session.ts, input/gamepad.ts, game/attract.ts e
|
|
75
|
-
// ui/activities-menu.ts, todos com o ctx montado ANTES do ponto de extração. Por isso o game.js deve
|
|
76
|
-
// manter um envelope `function setPhase(p){ shell.setPhase(p); }` — declaração de função, içada — em vez
|
|
77
|
-
// de trocar as quatro fiações. É o mesmo padrão já usado lá para `hideTouchControls`, `showTouchControls`,
|
|
78
|
-
// `restartGame`, `fitsN`, `joinPlayer` e `quitGame`.
|
|
79
|
-
// · O original protegia duas chamadas com `typeof pauseSelect==='function'` / `typeof reflectPauseIcons===
|
|
80
|
-
// 'function'`. Eram guardas de TDZ do tempo do monólito; aqui `pauseSelect` é função local (sempre
|
|
81
|
-
// definida) e `reflectPauseIcons` é injetada (sempre função). Verifiquei que `reflectPauseIcons` é `const`
|
|
82
|
-
// declarado no game.js MUITO antes de a primeira pausa acontecer, então as guardas nunca foram falsas em
|
|
83
|
-
// execução real — removê-las não muda comportamento, só tira ruído. Registrado aqui porque é a única
|
|
84
|
-
// linha que não é cópia literal.
|
|
85
|
-
//
|
|
86
|
-
// SEM I/O NO IMPORT: o corpo do módulo só declara dados e funções puras. Todo efeito passa por `initShell`.
|
|
87
|
-
// GUARDAS: cada consulta ao DOM passa por guarda de nulo, como manda a casa — é o que permite rodar no project
|
|
88
|
-
// `node` com um `$` falso que devolve `null`.
|
|
89
|
-
//
|
|
90
|
-
// Ver docs/5-Refactoring/plano-modularizacao-mapa.md (C3).
|
|
91
|
-
import { t } from '../core/i18n.js';
|
|
92
|
-
import { PAD_DESIGNS, PAD_GLYPH_SPOKEN } from '../input/devices.js'; // módulo-folha de DADOS (zero deps) — importado, não injetado
|
|
93
|
-
// UMA constante, e não um seletor repetido: com o submenu de opções (ADR-0044, item 5) o cartão de pausa passou
|
|
94
|
-
// a ter DUAS listas, e quem varrer `.pm-btn` cru enxerga também a que está escondida.
|
|
95
|
-
import { PM_ITENS_VISIVEIS } from './pause-icons.js';
|
|
96
|
-
// `FatosDaCena` mora em `core/scenes`, ao lado da pilha que os produz — é tipo de ENGINE, e precisa ser
|
|
97
|
-
// alcançável também por `game/`, que não pode importar de `ui/`. Ver o cabeçalho de lá.
|
|
98
|
-
/** Verbatim das nove perguntas que o `setPhase` do game.js fazia à fase, agora feitas de uma vez só. */
|
|
28
|
+
// NO I/O ON IMPORT: the module body only declares data and pure functions. Every effect goes through `initShell`.
|
|
29
|
+
// GUARDS: every DOM lookup is null-guarded, which is what lets the `node` project run it with a fake `$` returning `null`.
|
|
30
|
+
import { PAD_DESIGNS, PAD_GLYPH_SPOKEN } from '../input/devices.js'; // a DATA leaf module (zero deps) — imported, not injected
|
|
31
|
+
// ONE constant, not a repeated selector: the pause card has more than one list (ADR-0044 item 5), and whoever scans raw
|
|
32
|
+
// `.pm-btn` also sees the hidden ones.
|
|
33
|
+
import { PM_VISIBLE_ITEMS } from './pause-icons.js';
|
|
34
|
+
// `SceneFacts` lives in `core/scenes`, beside the stack that produces them — it is an ENGINE type.
|
|
35
|
+
/** Every question the scene change asks of the scene, asked at once. */
|
|
99
36
|
export function phaseView(f) {
|
|
100
37
|
return {
|
|
101
|
-
titleOverlayHidden: !f.
|
|
102
|
-
screenPauseHidden: !f.
|
|
103
|
-
masterMuted: !f.
|
|
104
|
-
hideTouchControls: !f.
|
|
105
|
-
pausePressed: f.
|
|
106
|
-
focus: f.
|
|
38
|
+
titleOverlayHidden: !f.titleScreen,
|
|
39
|
+
screenPauseHidden: !f.pauseMenu,
|
|
40
|
+
masterMuted: !f.worldRunning,
|
|
41
|
+
hideTouchControls: !f.worldRunning,
|
|
42
|
+
pausePressed: f.pauseMenu,
|
|
43
|
+
focus: f.worldRunning ? 'game-region' : f.pauseMenu ? 'pause-menu' : 'title-button',
|
|
107
44
|
};
|
|
108
45
|
}
|
|
109
46
|
/**
|
|
110
|
-
*
|
|
111
|
-
*
|
|
47
|
+
* The ONE part of a scene change with memory: hide the touch controls on pause (recording that they were on) and give them
|
|
48
|
+
* back on resume. Pure, so it can be pinned without a browser.
|
|
112
49
|
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
50
|
+
* The state that arrives here is the one from BEFORE `hideTouchControls()` — the caller reads first and hides after.
|
|
51
|
+
* The other order never records `wasOn` (the plan sees the pad already off), and resuming on a phone would not give the
|
|
52
|
+
* virtual d-pad back.
|
|
116
53
|
*/
|
|
117
54
|
export function touchControlsPlan(f, st, screens) {
|
|
118
|
-
if (f.
|
|
55
|
+
if (f.pauseMenu) {
|
|
119
56
|
if (!st.hidden)
|
|
120
|
-
return { hidden: true, wasOn: true }; //
|
|
121
|
-
return st; //
|
|
57
|
+
return { hidden: true, wasOn: true }; // record that it was on, and hide
|
|
58
|
+
return st; // already hidden: nothing changes (not even `wasOn`)
|
|
122
59
|
}
|
|
123
|
-
if (f.
|
|
60
|
+
if (f.worldRunning) {
|
|
124
61
|
return { hidden: st.wasOn && screens <= 1 ? false : st.hidden, wasOn: false };
|
|
125
62
|
}
|
|
126
|
-
return { hidden: true, wasOn: false }; //
|
|
63
|
+
return { hidden: true, wasOn: false }; // the title (or any scene that is neither play nor pause): hide and forget
|
|
127
64
|
}
|
|
128
65
|
// ---------------------------------------------------------------------------------------------------------
|
|
129
|
-
//
|
|
66
|
+
// THE TITLE LEGEND — the pure part (building the two rows of chips from the chosen glyphs)
|
|
130
67
|
// ---------------------------------------------------------------------------------------------------------
|
|
131
|
-
/**
|
|
68
|
+
/** One legend «chip»: the glyph (with an optional background colour) followed by the word it stands for. */
|
|
132
69
|
export function chip(txt, col, word) {
|
|
133
70
|
return `<span class="lg"><span class="lg-ico"${col ? ` style="background:${col}"` : ''}>${txt}</span>${word ? ' ' + word : ''}</span>`;
|
|
134
71
|
}
|
|
135
72
|
/**
|
|
136
|
-
*
|
|
73
|
+
* The SPOKEN name of a controller glyph. A glyph that already reads as a word passes untouched.
|
|
137
74
|
*
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
* cada chamada, com o idioma vigente naquele instante.
|
|
75
|
+
* `PAD_GLYPH_SPOKEN` in `input/devices` holds KEYS, not text, because it is a module `const` evaluated once on import —
|
|
76
|
+
* resolved text would freeze the language at boot. It is resolved here, on each call, in the language of that moment.
|
|
141
77
|
*/
|
|
142
|
-
export function
|
|
78
|
+
export function spokenGlyph(t, g) {
|
|
143
79
|
const k = PAD_GLYPH_SPOKEN[g];
|
|
144
80
|
return k ? t(k) : g;
|
|
145
81
|
}
|
|
146
82
|
/**
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
* Ela dizia qual botão confirma e qual volta, e carregava `aria-hidden="true"` — ou seja, era invisível
|
|
150
|
-
* justamente para quem não pode ver o glifo. A XAG 106 manda narrar exatamente isto ("A to Select").
|
|
83
|
+
* THE PAUSE LEGEND — two layers in the same place (ADR-0044 item 4).
|
|
151
84
|
*
|
|
152
|
-
*
|
|
153
|
-
*
|
|
154
|
-
*
|
|
155
|
-
*
|
|
85
|
+
* It says which button confirms and which goes back, and XAG 106 asks for exactly this to be narrated ("A to Select").
|
|
86
|
+
* The CHIPS stay visible and silent — a screen reader would read `✕` as a multiplication sign — and beside them a single
|
|
87
|
+
* sentence exists for screen readers only, with the glyphs already turned into words. Two readings of the same
|
|
88
|
+
* information, each in the sense that reaches it.
|
|
156
89
|
*
|
|
157
|
-
*
|
|
158
|
-
*
|
|
90
|
+
* Takes the `[glyph, colour]` pairs of the pad's design by position: yes is the south button (A · ✕ · B) and no the east one
|
|
91
|
+
* (B · ◯ · A) on every design — no design swaps them (the Dev's association, ADR-0013 erratum).
|
|
159
92
|
*/
|
|
160
|
-
export function pauseLegendHtml(sim,
|
|
161
|
-
const
|
|
162
|
-
const
|
|
163
|
-
return
|
|
93
|
+
export function pauseLegendHtml(t, sim, no) {
|
|
94
|
+
const silentLegend = (g, word) => `<span class="lg" aria-hidden="true"><span class="lg-ico" style="background:${g[1]}">${g[0]}</span> ${word}</span>`;
|
|
95
|
+
const spoken = t('menu.legendSpoken', { sim: spokenGlyph(t, sim[0]), nao: spokenGlyph(t, no[0]) });
|
|
96
|
+
return silentLegend(sim, t('menu.yes')) + silentLegend(no, t('menu.no')) + `<span class="sr-only">${spoken}</span>`;
|
|
164
97
|
}
|
|
165
98
|
/**
|
|
166
|
-
*
|
|
99
|
+
* Legend row 1: the d-pad and START/Enter. The same for touch and gamepad; the keyboard overrides the labels.
|
|
167
100
|
*
|
|
168
|
-
*
|
|
169
|
-
*
|
|
170
|
-
*
|
|
101
|
+
* The words come from `legend.*` and are resolved HERE, on each call — not in a module table, which would freeze the
|
|
102
|
+
* language at boot. The SHORT register on purpose: this row sits under a glyph and has no room for the longer wording the
|
|
103
|
+
* remapping list uses.
|
|
171
104
|
*/
|
|
172
|
-
export function legendRow1(dirTxt, pauseTxt) {
|
|
105
|
+
export function legendRow1(t, dirTxt, pauseTxt) {
|
|
173
106
|
return chip(dirTxt, null, t('legend.move')) + chip(pauseTxt, null, t('legend.pause'));
|
|
174
107
|
}
|
|
175
108
|
/**
|
|
176
|
-
*
|
|
109
|
+
* Legend row 2: the action buttons, in glyph order.
|
|
177
110
|
*
|
|
178
|
-
*
|
|
179
|
-
*
|
|
180
|
-
* especial, correr e trocar, nessa ordem. Agora `rotulo` é perguntado ao jogo (a versão CURTA, ver
|
|
181
|
-
* `ActionWord.short`), e uma posição que o jogo não nomeia não vira ficha nenhuma.
|
|
111
|
+
* The words are asked of the GAME (`wordFor`, the SHORT version — see `ActionWord.short`): the engine does not assume
|
|
112
|
+
* every game has jump, special, run and swap. A position the game does not name becomes no chip at all.
|
|
182
113
|
*/
|
|
183
|
-
export function legendRow2(g,
|
|
184
|
-
const
|
|
185
|
-
return
|
|
186
|
-
const
|
|
187
|
-
return
|
|
114
|
+
export function legendRow2(g, wordFor) {
|
|
115
|
+
const GLYPH_ORDER = ['action2', 'action3', 'action1', 'action4'];
|
|
116
|
+
return GLYPH_ORDER.map((a) => {
|
|
117
|
+
const word = wordFor(a);
|
|
118
|
+
return word ? chip(g[a][0], g[a][1], word) : '';
|
|
188
119
|
}).join('');
|
|
189
120
|
}
|
|
190
|
-
/**
|
|
121
|
+
/** The final innerHTML of `#title-legend`: two `.lg-row`. */
|
|
191
122
|
export function legendHtml(l1, l2) {
|
|
192
123
|
return `<span class="lg-row">${l1}</span><span class="lg-row">${l2}</span>`;
|
|
193
124
|
}
|
|
194
125
|
/**
|
|
195
|
-
*
|
|
196
|
-
*
|
|
197
|
-
*
|
|
198
|
-
*
|
|
126
|
+
* The glyphs of a PHYSICAL pad. `layout` comes from `padLayoutFromId` (only when `mapping === 'standard'`; off-standard it
|
|
127
|
+
* is always 'generic'), and `custom` is the wizard's map (only consulted OFF the standard). A button with no entry in the
|
|
128
|
+
* custom map falls back to its default index ('0'..'3'), and an index the design does not know becomes the pair
|
|
129
|
+
* `[index, '#3a4a6a']` — the fallback grey.
|
|
199
130
|
*/
|
|
200
131
|
export function padActionGlyphs(layout, custom) {
|
|
201
132
|
const set = PAD_DESIGNS[layout] || PAD_DESIGNS.generic;
|
|
202
|
-
//
|
|
203
|
-
//
|
|
204
|
-
//
|
|
133
|
+
// The `typeof b === 'object'` is not ceremony: a `PadMap` admits a `boolean` besides a `PadBinding` — the mapping
|
|
134
|
+
// wizard's `_skip: true` sentinel. The four keys read here are never it, so nothing changes at run time; what changes is
|
|
135
|
+
// that the read ASKS instead of assuming.
|
|
205
136
|
const bOf = (k, def) => {
|
|
206
137
|
const b = custom && custom[k];
|
|
207
138
|
return b && typeof b === 'object' && typeof b.b === 'number' ? String(b.b) : def;
|
|
@@ -209,14 +140,14 @@ export function padActionGlyphs(layout, custom) {
|
|
|
209
140
|
const gy = (k) => set[k] || [k, '#3a4a6a'];
|
|
210
141
|
return { action2: gy(bOf('action2', '0')), action3: gy(bOf('action3', '1')), action1: gy(bOf('action1', '2')), action4: gy(bOf('action4', '3')) };
|
|
211
142
|
}
|
|
212
|
-
/**
|
|
143
|
+
/** The glyphs of the VIRTUAL (touch) pad: always the 'generic' design (0/1/2/3), no custom map. */
|
|
213
144
|
export function touchActionGlyphs() {
|
|
214
145
|
return padActionGlyphs('generic', null);
|
|
215
146
|
}
|
|
216
147
|
/**
|
|
217
|
-
*
|
|
218
|
-
*
|
|
219
|
-
*
|
|
148
|
+
* Chooses WHICH gamepad the legend describes: Player 1's, if they have one (`players[0].pad`); otherwise the first one
|
|
149
|
+
* connected. With `p1pad >= 0` and no pad of that index present, the result is `null` (the legend falls back to the
|
|
150
|
+
* keyboard) rather than picking another.
|
|
220
151
|
*/
|
|
221
152
|
export function pickLegendPad(pads, p1pad) {
|
|
222
153
|
let gp = null;
|
|
@@ -235,54 +166,55 @@ export function pickLegendPad(pads, p1pad) {
|
|
|
235
166
|
return gp;
|
|
236
167
|
}
|
|
237
168
|
export function initShell(ctx) {
|
|
238
|
-
|
|
239
|
-
|
|
169
|
+
const { t } = ctx;
|
|
170
|
+
/* ===================== the title legend ===================== */
|
|
171
|
+
/** Rows 1 and 2 when there is neither touch nor a gamepad: Player 1's ACTUALLY configured keys. */
|
|
240
172
|
function keyboardLegend() {
|
|
241
173
|
const m = ctx.kbFor(0);
|
|
242
174
|
const K = (a) => ctx.keyName((m[a] || [])[0] || '?');
|
|
243
|
-
const l1 = legendRow1(`${K('up')} ${K('left')} ${K('down')} ${K('right')}`, 'Enter');
|
|
244
|
-
const l2 = legendRow2({ action2: [K('action2'), null], action3: [K('action3'), null], action1: [K('action1'), null], action4: [K('action4'), null] }, ctx.
|
|
175
|
+
const l1 = legendRow1(t, `${K('up')} ${K('left')} ${K('down')} ${K('right')}`, 'Enter');
|
|
176
|
+
const l2 = legendRow2({ action2: [K('action2'), null], action3: [K('action3'), null], action1: [K('action1'), null], action4: [K('action4'), null] }, ctx.shortLabel);
|
|
245
177
|
return [l1, l2];
|
|
246
178
|
}
|
|
247
179
|
function updateTitleLegend() {
|
|
248
180
|
const el = ctx.$('#title-legend');
|
|
249
181
|
if (!el)
|
|
250
|
-
return; // 2
|
|
182
|
+
return; // 2 ROWS, with what is CONFIGURED for the screen's player
|
|
251
183
|
let l1, l2;
|
|
252
|
-
if (ctx.isTouchMode()) { //
|
|
253
|
-
l1 = legendRow1('✜', 'START');
|
|
254
|
-
l2 = legendRow2(touchActionGlyphs(), ctx.
|
|
184
|
+
if (ctx.isTouchMode()) { // VIRTUAL pad: 0/1/2/3 + START
|
|
185
|
+
l1 = legendRow1(t, '✜', 'START');
|
|
186
|
+
l2 = legendRow2(touchActionGlyphs(), ctx.shortLabel);
|
|
255
187
|
}
|
|
256
188
|
else {
|
|
257
189
|
const p0 = ctx.getPlayers()[0];
|
|
258
190
|
const p1pad = p0 && typeof p0.pad === 'number' && p0.pad >= 0 ? p0.pad : -1;
|
|
259
191
|
const gp = pickLegendPad(ctx.getGamepads(), p1pad);
|
|
260
|
-
if (gp) { //
|
|
192
|
+
if (gp) { // PHYSICAL pad: the model's design + the wizard's custom map
|
|
261
193
|
const layout = gp.mapping === 'standard' ? ctx.padLayoutFromId(gp.id) : 'generic';
|
|
262
194
|
const custom = gp.mapping !== 'standard' ? ctx.padMapFor(gp.id) : null;
|
|
263
|
-
l1 = legendRow1('✜', 'START');
|
|
264
|
-
l2 = legendRow2(padActionGlyphs(layout, custom), ctx.
|
|
195
|
+
l1 = legendRow1(t, '✜', 'START');
|
|
196
|
+
l2 = legendRow2(padActionGlyphs(layout, custom), ctx.shortLabel);
|
|
265
197
|
}
|
|
266
198
|
else {
|
|
267
|
-
[l1, l2] = keyboardLegend(); //
|
|
199
|
+
[l1, l2] = keyboardLegend(); // KEYBOARD: the configured keys (remap honoured)
|
|
268
200
|
}
|
|
269
201
|
}
|
|
270
202
|
el.innerHTML = legendHtml(l1, l2);
|
|
271
203
|
const w = ctx.$('#title-wait');
|
|
272
204
|
if (w)
|
|
273
|
-
w.hidden = ctx.getNumPlayers() <= 1; //
|
|
205
|
+
w.hidden = ctx.getNumPlayers() <= 1; // multiplayer: the «wait for Player 1» notice
|
|
274
206
|
}
|
|
275
|
-
/* =====================
|
|
207
|
+
/* ===================== selection and Print ===================== */
|
|
276
208
|
function pauseSelect() {
|
|
277
209
|
ctx.getPauseScreens().forEach((sp) => {
|
|
278
|
-
const items = [...sp.querySelectorAll(
|
|
210
|
+
const items = [...sp.querySelectorAll(PM_VISIBLE_ITEMS)];
|
|
279
211
|
items.forEach((b) => b.classList.remove('pm-sel'));
|
|
280
212
|
if (items[0])
|
|
281
|
-
items[0].classList.add('pm-sel'); //
|
|
213
|
+
items[0].classList.add('pm-sel'); // the 1st item (Continue) selected on each screen
|
|
282
214
|
});
|
|
283
215
|
}
|
|
284
216
|
function printMode() {
|
|
285
|
-
ctx.getPauseScreens().forEach((sp) => { sp.hidden = true; }); //
|
|
217
|
+
ctx.getPauseScreens().forEach((sp) => { sp.hidden = true; }); // see the screen clean; any button brings them back
|
|
286
218
|
const back = (e) => {
|
|
287
219
|
if (e && e.preventDefault) {
|
|
288
220
|
try {
|
|
@@ -292,41 +224,40 @@ export function initShell(ctx) {
|
|
|
292
224
|
}
|
|
293
225
|
ctx.win.removeEventListener('keydown', back, true);
|
|
294
226
|
ctx.win.removeEventListener('pointerdown', back, true);
|
|
295
|
-
if (ctx.
|
|
227
|
+
if (ctx.sceneFacts().pauseMenu) {
|
|
296
228
|
ctx.getPauseScreens().forEach((sp) => { sp.hidden = false; });
|
|
297
229
|
pauseSelect();
|
|
298
230
|
}
|
|
299
231
|
};
|
|
300
|
-
//
|
|
232
|
+
// An 80 ms delay: the very event that TRIGGERED Print must not be the one that undoes it.
|
|
301
233
|
ctx.win.setTimeout(() => {
|
|
302
234
|
ctx.win.addEventListener('keydown', back, true);
|
|
303
235
|
ctx.win.addEventListener('pointerdown', back, true);
|
|
304
236
|
}, 80);
|
|
305
237
|
ctx.srSay(t('sr.print.on'));
|
|
306
238
|
}
|
|
307
|
-
/* =====================
|
|
308
|
-
/**
|
|
239
|
+
/* ===================== the scene change ===================== */
|
|
240
|
+
/** The IMPURE half: takes the ready projection and stamps it on the document. */
|
|
309
241
|
function applyPhaseView(v) {
|
|
310
|
-
//
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
t.hidden = v.titleOverlayHidden;
|
|
242
|
+
// There is no global pause overlay to look for — see the note in `PhaseView`.
|
|
243
|
+
const title = ctx.$('#title-overlay');
|
|
244
|
+
if (title)
|
|
245
|
+
title.hidden = v.titleOverlayHidden;
|
|
315
246
|
ctx.getPauseScreens().forEach((sp) => { sp.hidden = v.screenPauseHidden; });
|
|
316
247
|
}
|
|
317
|
-
/**
|
|
248
|
+
/** The state of `#touch-controls` BEFORE anything in this scene change touches it. */
|
|
318
249
|
function readTouchControls() {
|
|
319
250
|
const tc = ctx.$('#touch-controls');
|
|
320
251
|
return tc ? { hidden: tc.hidden, wasOn: tc.dataset.wasOn === '1' } : null;
|
|
321
252
|
}
|
|
322
|
-
/**
|
|
253
|
+
/** The IMPURE half of the touch plan: receives the state read BEFORE the hide and writes the plan back. */
|
|
323
254
|
function applyTouchControls(f, before) {
|
|
324
255
|
const tc = ctx.$('#touch-controls');
|
|
325
256
|
if (!tc || !before)
|
|
326
257
|
return;
|
|
327
258
|
const after = touchControlsPlan(f, before, ctx.getNumPlayers());
|
|
328
|
-
//
|
|
329
|
-
//
|
|
259
|
+
// Writes only what CHANGED: on pause with the pad already hidden nothing is touched, and removing a flag that was
|
|
260
|
+
// never set is not attempted.
|
|
330
261
|
if (after.hidden !== before.hidden)
|
|
331
262
|
tc.hidden = after.hidden;
|
|
332
263
|
if (after.wasOn !== before.wasOn) {
|
|
@@ -354,29 +285,26 @@ export function initShell(ctx) {
|
|
|
354
285
|
b.focus();
|
|
355
286
|
}
|
|
356
287
|
/**
|
|
357
|
-
*
|
|
358
|
-
*
|
|
359
|
-
* projeta só precisa dos três fatos.
|
|
288
|
+
* Projects the scene on top onto the document. Called by the root AFTER it changes the stack — the shell neither pushes
|
|
289
|
+
* nor pops: whoever changes scenes knows their names, whoever projects only needs the three facts.
|
|
360
290
|
*/
|
|
361
|
-
function
|
|
362
|
-
const f = ctx.
|
|
291
|
+
function projectScene() {
|
|
292
|
+
const f = ctx.sceneFacts();
|
|
363
293
|
const v = phaseView(f);
|
|
364
|
-
//
|
|
365
|
-
//
|
|
366
|
-
|
|
367
|
-
// direcional e retomar não o devolvia.
|
|
368
|
-
const antesDoHide = readTouchControls();
|
|
294
|
+
// READ BEFORE HIDING: `hideTouchControls()` below already sets `tc.hidden`, and a plan that read after it would see the
|
|
295
|
+
// pad as already off, never record `wasOn`, and never give the d-pad back on resume.
|
|
296
|
+
const touchStateBeforeHiding = readTouchControls();
|
|
369
297
|
if (v.hideTouchControls)
|
|
370
|
-
ctx.hideTouchControls(); // menu
|
|
371
|
-
// GAG:
|
|
298
|
+
ctx.hideTouchControls(); // an active menu (title or pause) = no virtual controller
|
|
299
|
+
// GAG: on pause, ALL the game's sound goes quiet (ambient and rain loops included) — it comes back on resume.
|
|
372
300
|
ctx.setMasterMuted(v.masterMuted);
|
|
373
301
|
applyPhaseView(v);
|
|
374
|
-
applyTouchControls(f,
|
|
375
|
-
//
|
|
302
|
+
applyTouchControls(f, touchStateBeforeHiding); // the state from BEFORE the hide — see above
|
|
303
|
+
// `aria-pressed` comes AFTER the touch block.
|
|
376
304
|
//
|
|
377
|
-
//
|
|
378
|
-
//
|
|
379
|
-
//
|
|
305
|
+
// On the TITLE the attribute is REMOVED rather than set to `false`. There the button means «start», and
|
|
306
|
+
// `aria-pressed` on a button that toggles nothing makes a screen reader announce a state that does not exist — worse
|
|
307
|
+
// than announcing nothing. `titleOverlayHidden` is true outside the title.
|
|
380
308
|
const pb = ctx.$('#touch-start');
|
|
381
309
|
if (pb) {
|
|
382
310
|
if (v.titleOverlayHidden)
|
|
@@ -386,18 +314,17 @@ export function initShell(ctx) {
|
|
|
386
314
|
}
|
|
387
315
|
applyFocus(v.focus);
|
|
388
316
|
}
|
|
389
|
-
/* =====================
|
|
390
|
-
//
|
|
391
|
-
//
|
|
317
|
+
/* ===================== the pause card's table ===================== */
|
|
318
|
+
// The pause card's actions (shared by the per-screen cards). Opening an accessibility panel scopes it to the player who
|
|
319
|
+
// acted (pauseActor) — the panel opens on their tab.
|
|
392
320
|
const pauseActs = {
|
|
393
|
-
resume: () => ctx.
|
|
394
|
-
//
|
|
395
|
-
//
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
nivel: () => ctx.setQuizLevel(ctx.getQuizLevel() % 5 + 1, true), // L3: cicla 1..5
|
|
321
|
+
resume: () => ctx.resumeGame(),
|
|
322
|
+
// The door to the Augmentative and Alternative Communication menu (ADR-0028), where the letter case is one choice
|
|
323
|
+
// among others.
|
|
324
|
+
caa: () => ctx.openAac(),
|
|
325
|
+
nivel: () => ctx.setQuizLevel(ctx.getQuizLevel() % 5 + 1, true), // cycles 1..5
|
|
399
326
|
tipo: () => ctx.openTypo(),
|
|
400
|
-
//
|
|
327
|
+
// Only ever ADDS a player (never removes); the new screen WAITS for its player to press a button
|
|
401
328
|
addplayer: () => {
|
|
402
329
|
const n = ctx.getNumPlayers();
|
|
403
330
|
if (n >= 4) {
|
|
@@ -413,11 +340,11 @@ export function initShell(ctx) {
|
|
|
413
340
|
const p = ctx.getPlayers()[ctx.getNumPlayers() - 1];
|
|
414
341
|
p.waiting = true;
|
|
415
342
|
ctx.showWaitingBadge(p.i);
|
|
416
|
-
ctx.
|
|
343
|
+
ctx.resumeGame();
|
|
417
344
|
ctx.srAlert(t('sr.player.pressToJoin', { n: p.i + 1 }));
|
|
418
345
|
},
|
|
419
346
|
audio: () => ctx.openAudio(),
|
|
420
|
-
motora: () => { ctx.
|
|
347
|
+
motora: () => { ctx.setMobilityPlayer(ctx.getPauseActor()); ctx.openMovement(); },
|
|
421
348
|
anim: () => { ctx.setMotionPlayer(ctx.getPauseActor()); ctx.openMotion(); },
|
|
422
349
|
visual: () => { ctx.setSelVizPlayer(ctx.getPauseActor()); ctx.openVisual(); },
|
|
423
350
|
empatia: () => { ctx.setSelVizPlayer(ctx.getPauseActor()); ctx.openEmpathy(); },
|
|
@@ -425,5 +352,5 @@ export function initShell(ctx) {
|
|
|
425
352
|
quit: () => ctx.quitGame(),
|
|
426
353
|
ajuda: () => ctx.openHelp(),
|
|
427
354
|
};
|
|
428
|
-
return {
|
|
355
|
+
return { applyScene: projectScene, pauseSelect, printMode, updateTitleLegend, pauseActs };
|
|
429
356
|
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
import type { Translate } from '../core/i18n.js';
|
|
3
|
+
export interface SimulationListCtx {
|
|
4
|
+
/** Translates in the page's language — the root's translator (ADR-0232 D3). REQUIRED: text built from nowhere is a raw key. */
|
|
5
|
+
t: Translate;
|
|
6
|
+
/** The host's DOM query — this module never reaches a global (ADR-0221 step 7d). */
|
|
7
|
+
readonly find: <T extends Element>(selector: string) => T | null;
|
|
8
|
+
/** Makes an element. Injected for the same reason: no `document` in here. */
|
|
9
|
+
readonly make: <K extends keyof HTMLElementTagNameMap>(tag: K) => HTMLElementTagNameMap[K];
|
|
10
|
+
/**
|
|
11
|
+
* The simulations offered, in the order the child reads them.
|
|
12
|
+
*
|
|
13
|
+
* 📌 DATA AND NOT A CONSTANT OF THIS MODULE: which simulations an engine offers is a decision of whoever composes it, and
|
|
14
|
+
* a key this module cannot resolve is then something a caller can actually do — which is what lets the guard below be
|
|
15
|
+
* driven by a case instead of only protecting a future edit of a private list.
|
|
16
|
+
*/
|
|
17
|
+
readonly keys: readonly string[];
|
|
18
|
+
/** What is running on the world right now. The list always shows IT, so a refused choice (ADR-0076) comes back by itself. */
|
|
19
|
+
readonly running: () => string | null;
|
|
20
|
+
/** The child picked one. */
|
|
21
|
+
readonly picked: (key: string) => void;
|
|
22
|
+
}
|
|
23
|
+
export interface SimulationList {
|
|
24
|
+
/** Builds the row if it is not there yet, and writes every word of it in the language of now. */
|
|
25
|
+
render(listSelector: string): void;
|
|
26
|
+
}
|
|
27
|
+
export declare function createSimulationList(ctx: SimulationListCtx): SimulationList;
|