@the-inclusionist/engine 9.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 +444 -215
- package/dist-pkg/boot/create-game.js +3530 -549
- 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 +249 -351
- 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,353 +1,582 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
import { type
|
|
2
|
+
import { type Translate } from '../core/i18n.js';
|
|
3
|
+
import { type LiveInput } from '../input/state.js';
|
|
4
|
+
import { type FlashMeasurement } from '../platform/flash-sampler.js';
|
|
5
|
+
import { type Reach, type Availability } from '../input/transports.js';
|
|
6
|
+
import { type AccommodationAnswers } from '../core/accommodations.js';
|
|
3
7
|
import { type ActionPreset } from '../core/actions.js';
|
|
4
8
|
import type { KeyScheme } from '../core/entity.js';
|
|
9
|
+
import { type HowToPlaySlide } from '../ui/help-panel.js';
|
|
10
|
+
import { type SettingsStore } from '../core/state.js';
|
|
5
11
|
import { type GameDeclaration } from '../core/contract.js';
|
|
6
12
|
import { type SceneStack } from '../core/scenes.js';
|
|
7
|
-
import { createTts
|
|
13
|
+
import { createTts } from '../platform/tts.js';
|
|
14
|
+
import { type Reading } from '../platform/reading.js';
|
|
15
|
+
import { type Audio } from '../platform/audio.js';
|
|
8
16
|
import { type AudioSonar, type SonarPlayer } from '../platform/audio-sonar.js';
|
|
9
|
-
import { type
|
|
10
|
-
import type {
|
|
17
|
+
import { type Theme, type Correction } from '../render/viz-axes.js';
|
|
18
|
+
import type { FilterReach } from '../render/port.js';
|
|
11
19
|
import { type SettingsPanelApi } from '../ui/settings-panel.js';
|
|
20
|
+
import { type VirtualCommand, type VirtualController } from '../input/virtual-controller.js';
|
|
21
|
+
export type { VirtualCommand } from '../input/virtual-controller.js';
|
|
22
|
+
import { type LqFilter } from '../render/lq-filter.js';
|
|
23
|
+
import { type Crt } from '../render/crt.js';
|
|
24
|
+
import { type HudNumber } from '../ui/hud-bands.js';
|
|
25
|
+
import { type GameOption } from '../ui/game-options.js';
|
|
26
|
+
import { type StorageLike } from '../platform/storage.js';
|
|
12
27
|
import { type MenuNavApi } from '../ui/menu-nav.js';
|
|
13
28
|
import type { NavKeys } from '../input/edges.js';
|
|
29
|
+
import { type GamepadGameHooks } from '../input/gamepad.js';
|
|
30
|
+
export type { GamepadGameHooks } from '../input/gamepad.js';
|
|
14
31
|
import { type KeyboardRuntime } from '../input/keyboard-runtime.js';
|
|
15
|
-
import { type
|
|
16
|
-
|
|
32
|
+
import { type KeyboardConfigApi } from '../input/keyboard.js';
|
|
33
|
+
import { type HeavyReport } from '../platform/heavy.js';
|
|
34
|
+
/** What the game lends from the document. Everything optional but `doc`/`win`: what is missing becomes `problems`. */
|
|
17
35
|
export interface EngineHost {
|
|
18
36
|
readonly doc: Document;
|
|
19
37
|
readonly win: Window;
|
|
20
|
-
/**
|
|
38
|
+
/** An empty `<svg>` where the six colour-vision filters are mounted at run time. */
|
|
21
39
|
readonly cvdHost?: SVGElement | Element | null;
|
|
22
40
|
/**
|
|
23
|
-
*
|
|
41
|
+
* WHERE THE ACCESSIBILITY BAR GOES, on the game's FIRST screen.
|
|
24
42
|
*
|
|
25
|
-
* ⚠️
|
|
43
|
+
* ⚠️ THE DEV'S REQUEST, 2026-09-07: «o menu de pausa, o design do menu de pausa e os ícones de acessibilidade
|
|
26
44
|
* que aparecem no jogo desde a primeira tela devem ser oferecidos pela ENGINE e não pela programação do
|
|
27
45
|
* jogo. Todo jogo da engine inclusionist deve ter o mesmo menu de pausa e ícones de acessibilidade desde a
|
|
28
46
|
* primeira.»
|
|
29
47
|
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* os montou por eles. O comentário do `ui/pause-icons` diz porquê sem o notar: «`initPauseIcons` é chamado
|
|
34
|
-
* pela raiz de composição de CADA jogo» — ou seja, cada jogo tinha de se lembrar, e cinco não se lembraram.
|
|
35
|
-
* A criança que depende do modo cego, do TTS ou do alto contraste abre esses cinco jogos e não tem por onde.
|
|
48
|
+
* Left to each game, the bar was missing from most of the catalogue: each game had to remember to call
|
|
49
|
+
* `initPauseIcons`, and a child who depends on blind mode, narration or high contrast opened those games with no way
|
|
50
|
+
* in. So the engine mounts it (ADR-0106 §4, step 2).
|
|
36
51
|
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
* ✅ E DESDE 2026-09-08 ELA TAMBÉM **MONTA** (etapa 2 do ADR-0106 §4). Este parágrafo dizia «dizer não é
|
|
41
|
-
* montar, e a montagem é o passo seguinte»; o passo seguinte aconteceu. O que a destravou foram as etapas
|
|
42
|
-
* 1 e 3: nenhuma delas era sobre montar, e sem as duas o `PauseIconsCtx` exigia sete coisas que esta raiz
|
|
43
|
-
* não sabe responder por um jogo que não conhece.
|
|
44
|
-
*
|
|
45
|
-
* ⚠️ Achando o hospedeiro, a barra é escrita e fiada aqui. Não achando, continua a ser `problems` — porque
|
|
46
|
-
* a engine pode oferecer os ícones, mas não pode adivinhar ONDE eles cabem no desenho de um jogo alheio.
|
|
52
|
+
* Absent, the engine looks for `#title-icons` — the id the platformer has always used. Found, the bar is written and
|
|
53
|
+
* wired here; not found, it is a line of `problems`: the engine can offer the icons, but it cannot guess WHERE they
|
|
54
|
+
* fit in the layout of a game it does not know.
|
|
47
55
|
*/
|
|
48
56
|
readonly a11yBarHost?: Element | null;
|
|
49
57
|
/**
|
|
50
|
-
*
|
|
58
|
+
* WHERE THE PAUSE CARD of the first screen is hung. Absent, the engine uses `#game-region`.
|
|
51
59
|
*
|
|
52
|
-
* ⚠️
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
60
|
+
* ⚠️ For the same reason as `a11yBarHost`: the engine OFFERS the pause, but does not know where it fits in the
|
|
61
|
+
* layout of a game it does not know. 📌 And since ADR-0120/ADR-0122 WHERE is not WHETHER: the pause is not
|
|
62
|
+
* declinable, and what this field keeps is the place. A host that takes no children becomes a line of `problems` —
|
|
63
|
+
* the difference between the engine not knowing and the engine keeping quiet.
|
|
56
64
|
*/
|
|
57
65
|
readonly pauseHost?: Element | null;
|
|
66
|
+
/**
|
|
67
|
+
* WHERE THE VIRTUAL CONTROLLER IS HUNG (ADR-0143). Absent, the engine uses `#game-region`.
|
|
68
|
+
*
|
|
69
|
+
* ⚠️ For the same reason as `pauseHost`: the engine draws the pad from the `preset`, but does not know where it fits
|
|
70
|
+
* in the layout of a game it does not know. And the stylesheet puts `.touch` at `position:absolute` at the bottom of
|
|
71
|
+
* the host — so the host is the game's rectangle, not the page.
|
|
72
|
+
*/
|
|
73
|
+
readonly touchHost?: Element | null;
|
|
74
|
+
/**
|
|
75
|
+
* WHERE THE CHILD'S SETTINGS ARE KEPT (ADR-0232, issue #207). The root builds the page's one store from it and hands that
|
|
76
|
+
* store to every module that persists.
|
|
77
|
+
*
|
|
78
|
+
* 📌 OPTIONAL, against ADR-0224/ADR-0227's preference for required ports, because here absence has a SAFE answer rather
|
|
79
|
+
* than a silent one: the host window's `localStorage`, which is what «this browser remembers the child's choices» means.
|
|
80
|
+
* A host passes one to keep a root's settings apart from everything else on the origin — a test file its own
|
|
81
|
+
* `memoryBackend()`, so no file inherits or races another's keys; a page with two roots one each (ADR-0142).
|
|
82
|
+
*/
|
|
83
|
+
readonly storage?: StorageLike;
|
|
58
84
|
}
|
|
59
85
|
/**
|
|
60
|
-
*
|
|
86
|
+
* What this game does NOT have. Declared, not deduced from a getter that returns null.
|
|
61
87
|
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
88
|
+
* Finding 10 of the second consumer is why this exists as a type: the quiz had to declare itself paused to navigate its
|
|
89
|
+
* own menus, because the engine had no way to hear that a game has no phases.
|
|
64
90
|
*/
|
|
65
91
|
export interface Declinios {
|
|
66
|
-
/**
|
|
67
|
-
readonly
|
|
68
|
-
/** Sem "ator da pausa" — quem apertou o botão que abriu o menu. */
|
|
69
|
-
readonly semAtorDePausa?: boolean;
|
|
92
|
+
/** No pause actor — who pressed the button that opened the menu. */
|
|
93
|
+
readonly noPauseActor?: boolean;
|
|
70
94
|
/**
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
* ⚠️ EXISTE PORQUE A AUSÊNCIA ESTAVA A SER SILENCIOSA, e a medição de 2026-09-08 diz quanto: dos SEIS jogos
|
|
74
|
-
* do catálogo local, TRÊS declaram `carregarVozNeural` (platformer, 15-puzzle, 2048) e TRÊS não
|
|
75
|
-
* (`game-soccer`, `whackwhack`, `game-chess`). Nos três últimos não há voz neural nenhuma, e nada o dizia.
|
|
95
|
+
* No neural voice — this game does not declare `uses: { neuralVoice: true }` (ADR-0216 §3).
|
|
76
96
|
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
* — passou a exigir UMA LINHA do jogo. As duas coisas podem ser verdade ao mesmo tempo (a engine é dona das
|
|
80
|
-
* VOZES, o jogo nomeia o FORNECEDOR), mas só se quem esquece a linha for avisado. Declinar é escolha; não
|
|
81
|
-
* declarar era omissão.
|
|
97
|
+
* Exists because the absence is otherwise silent: a game that does not ask for one has only the browser's voice, which a school
|
|
98
|
+
* Chromebook may not have for the child's language. Declining is a choice; not declaring is an omission, and `problems` says so.
|
|
82
99
|
*/
|
|
83
|
-
readonly
|
|
100
|
+
readonly noNeuralVoice?: boolean;
|
|
84
101
|
}
|
|
85
102
|
export interface CreateGameOptions {
|
|
86
|
-
/**
|
|
103
|
+
/** The SEVEN FIELDS (core/contract). It is what the accessibility stack reads, and the only thing it reads. */
|
|
87
104
|
readonly declaration: GameDeclaration;
|
|
88
105
|
readonly host: EngineHost;
|
|
89
106
|
readonly declines?: Declinios;
|
|
90
107
|
/**
|
|
91
|
-
*
|
|
92
|
-
*
|
|
108
|
+
* Is it menu-navigation time NOW? The platformer answers `phase === 'paused'`; a quiz answers `true`.
|
|
109
|
+
* Absent = `true`, the case of a game with no phases — the simplest one, and the one that does not force one to be invented.
|
|
93
110
|
*/
|
|
94
111
|
readonly isNavigable?: () => boolean;
|
|
112
|
+
/** Is the position index (item N of M) on? Absent = yes. See `withIndex` in ui/menu-nav. */
|
|
113
|
+
readonly withIndex?: () => boolean;
|
|
95
114
|
/**
|
|
96
|
-
*
|
|
115
|
+
* ADR-0044's `accessibility` MODE (item 7): the directional drives the quick bar instead of the character.
|
|
97
116
|
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
117
|
+
* Optional: absent, the engine answers with the bar it mounted itself (`ui/pause-icons`). A game that draws its own
|
|
118
|
+
* bar answers for it.
|
|
100
119
|
*/
|
|
101
|
-
|
|
102
|
-
readonly comIndice?: () => boolean;
|
|
103
|
-
readonly naBarraDe?: (i: number) => boolean;
|
|
120
|
+
readonly onBar?: (i: number) => boolean;
|
|
104
121
|
readonly navBar?: (i: number, k: NavKeys) => void;
|
|
105
|
-
/**
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
122
|
+
/**
|
|
123
|
+
* Players for the remappable keyboard. `Pick<ControlledPlayer,'ctrl'>` — a key scheme and nothing more.
|
|
124
|
+
* ⚠️ `KeyScheme` and not `Record<string, string[]>` (#118): a structural COPY of a type that nothing forces to agree
|
|
125
|
+
* drifts — the lesson `core/entity` opens with.
|
|
126
|
+
*
|
|
127
|
+
* ⚠️ `audioSink` is ADDITIVE AND OPTIONAL: no consumer needs to write it.
|
|
128
|
+
*
|
|
129
|
+
* 🎯 It is here because the seat has a second reader inside the engine. The hearing panel, which the engine mounts,
|
|
130
|
+
* writes into it the audio output the child chose — and `ui/pause-icons` reads it to answer a question that changes
|
|
131
|
+
* what the bar offers: does this child have an output of HER OWN? Without it, changing sound, narration or blind
|
|
132
|
+
* mode on a shared headset would change everyone's audio.
|
|
133
|
+
*
|
|
134
|
+
* 📌 AND ONLY THIS FIELD. The MOTOR fields (`easy`, `toggleMove`, `toggleRun`) are left out: they are required in
|
|
135
|
+
* `MobilityPlayer` — the panel READS them to draw its state — and making them required here would force every game
|
|
136
|
+
* to carry them. That is a contract decision still to be taken, and it is not taken in passing by a cast that would
|
|
137
|
+
* silence the compiler.
|
|
138
|
+
*/
|
|
109
139
|
readonly players?: {
|
|
110
140
|
ctrl: KeyScheme;
|
|
141
|
+
audioSink?: string | null;
|
|
111
142
|
}[];
|
|
112
|
-
/**
|
|
143
|
+
/** Phase change, for a game that has phases. Absent = does nothing (a game without phases loses nothing). */
|
|
113
144
|
readonly setPhase?: (p: 'title' | 'playing' | 'paused') => void;
|
|
114
145
|
/**
|
|
115
|
-
*
|
|
116
|
-
*
|
|
146
|
+
* The players as NAVIGATION SOUND sees them. Absent, `createGame` DERIVES one from field 4 of the contract: the focus
|
|
147
|
+
* says where the player is, which is all the sonar needs to know about position.
|
|
117
148
|
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
149
|
+
* A game with several players, or with an audio device per player, supplies its own list. A one-child game supplies
|
|
150
|
+
* nothing — and gets the sonar anyway, which is the point.
|
|
120
151
|
*/
|
|
121
152
|
readonly sonarPlayers?: () => SonarPlayer[];
|
|
122
|
-
/**
|
|
153
|
+
/** Blind mode on? Absent = the engine's own stored value (`core/state.blindMode`). Applies to every player. */
|
|
123
154
|
readonly isBlindMode?: () => boolean;
|
|
124
155
|
/**
|
|
125
|
-
*
|
|
126
|
-
*
|
|
127
|
-
* aritmética existia, testada, e o `createGame` tinha ZERO ocorrências de qualquer coisa sobre ações.
|
|
156
|
+
* THIS GAME'S WORDS (`core/actions`). Without them the engine does not know HOW MANY actions to ask of a transport,
|
|
157
|
+
* and ADR-0079 §3's guarantee cannot be measured (issue #112).
|
|
128
158
|
*
|
|
129
|
-
*
|
|
130
|
-
*
|
|
159
|
+
* Optional because a game may not declare a preset yet; without it the reach notice simply does not appear, and the
|
|
160
|
+
* help and the scan have no words to show.
|
|
131
161
|
*/
|
|
132
162
|
readonly preset?: ActionPreset;
|
|
133
163
|
/**
|
|
134
|
-
*
|
|
164
|
+
* THE ON-SCREEN PAD, only when the cartridge asks for it (ADR-0166): «Controle de tela é só para jogo que não funciona tão
|
|
165
|
+
* bem como via mouse e/ou touch (o cartucho decide), nunca para menu.» Absent = no pad — a game played by touching its
|
|
166
|
+
* own elements, and every menu, need none on top of them. It leaves the pause card and the panels; it stays on the quick
|
|
167
|
+
* pause.
|
|
168
|
+
*/
|
|
169
|
+
readonly onScreenPad?: boolean;
|
|
170
|
+
/**
|
|
171
|
+
* THE NUMBERS THIS GAME SHOWS, each in the band of what it is about (ADR-0168, ADR-0175; issue #162). The engine mounts
|
|
172
|
+
* the HUD and places them: `identity` top left and `mission` under it, `power` top right (under the clock), `learning` bars (one to three, as
|
|
173
|
+
* `educational/segment-bar.barOf` returns them) centred in the footer, under the explanation; the room the game leaves free at the
|
|
174
|
+
* top (`--barra-a11y-h`) grows by what they take. Absent = no HUD mounted, and the game keeps drawing its own.
|
|
175
|
+
* 📏 Measured on 2026-09-13: six sibling games, six HUDs of their own, none in the bands.
|
|
176
|
+
* A malformed list is refused at boot and at `mount`, like the declaration.
|
|
177
|
+
*/
|
|
178
|
+
readonly hud?: readonly HudNumber[];
|
|
179
|
+
/**
|
|
180
|
+
* THE OPTIONS OF THIS GAME, as rows the engine draws (ADR-0182; issue #178): a label and hint in the game's words, a kind
|
|
181
|
+
* (steps, list or switch), how to read the value and how to write it. «Opções do jogo» opens them in a panel of the
|
|
182
|
+
* engine's own; absent or empty, the door stays on the card locked with its reason (ADR-0161). A cartridge draws its own
|
|
183
|
+
* options only where rows cannot express what it needs. A malformed list is refused at boot and at `mount`.
|
|
184
|
+
*/
|
|
185
|
+
readonly gameOptions?: readonly GameOption[];
|
|
186
|
+
/**
|
|
187
|
+
* HOW TO PLAY THIS GAME, as slides the help shows before the buttons (ADR-0195; issue #188): «O "Como jogar" é justamente algo a
|
|
188
|
+
* ser feito pelo cartucho.» Each slide's text is read at every showing, in the page's language; its figure, when given, is drawn
|
|
189
|
+
* by the cartridge on a surface the engine gives, with the time for an animation (still under reduced motion). Absent = the help
|
|
190
|
+
* shows the buttons alone. A malformed list is refused at boot and at `mount`.
|
|
191
|
+
*/
|
|
192
|
+
readonly howToPlay?: readonly HowToPlaySlide[];
|
|
193
|
+
/**
|
|
194
|
+
* THIS GAME'S DICTIONARIES, one per language (`pt`, `en`, `es`), registered into THIS ROOT's translator before anything is
|
|
195
|
+
* translated (ADR-0232 D3 erratum): a key resolves for this game and for no other root on the page. A string with markup is
|
|
196
|
+
* refused and named in the console, as `registerDict` does; a key given in one language and not another is a line of
|
|
197
|
+
* `problems`. Decision (mechanical, ADR-0232 D3): an option and not a method on the handle, because every game measured
|
|
198
|
+
* registers BEFORE `createGame` — and a method would come after the markup was translated.
|
|
199
|
+
*/
|
|
200
|
+
readonly dictionaries?: Readonly<Record<string, Readonly<Record<string, string>>>>;
|
|
201
|
+
/**
|
|
202
|
+
* THE VIRTUAL CONTROLLER'S COMMANDS, CARRIED TO THE GAME (ADR-0111 and its erratum; issue #197): «a engine lida com o hardware e passa
|
|
203
|
+
* para o jogo o nome virtual do botão». Each press and release of a position the child's hardware reached — the keyboard by the
|
|
204
|
+
* child's scheme, the eyes — with its source and seat. What it executes is the game's, named by its `preset`. Not called while a menu
|
|
205
|
+
* has the directional. Absent = the game hears commands only through what it reads itself.
|
|
206
|
+
*/
|
|
207
|
+
readonly onCommand?: (command: VirtualCommand) => void;
|
|
208
|
+
/**
|
|
209
|
+
/**
|
|
210
|
+
* WHAT ONLY THIS GAME KNOWS ABOUT THE GAMEPAD (ADR-0224). The engine mounts the transport; these are the few answers
|
|
211
|
+
* nothing in it can know — the title screen, the attract demo, the modal, joining and respawning a seat, the waiting
|
|
212
|
+
* badge, the wizard's art, and whether the world is running.
|
|
135
213
|
*
|
|
136
|
-
*
|
|
214
|
+
* 🎯 **Absent altogether is an answer**, not an oversight: the gamepad works, and what depends on the cartridge's
|
|
215
|
+
* world simply does not happen. Each absence is written in `GamepadGameHooks`.
|
|
216
|
+
*/
|
|
217
|
+
readonly gamepad?: GamepadGameHooks;
|
|
218
|
+
/**
|
|
219
|
+
* THE ACCOMMODATIONS THAT HAVE A SUBJECT IN THIS GAME — the cartridge's answer, REQUIRED (ADR-0153).
|
|
137
220
|
*
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
* `devDependencies`, que era o estado até 06/09, publicou uma engine que NÃO COMPILAVA para ninguém
|
|
142
|
-
* (ADR-0093). A porta é a única forma que resolve as duas coisas ao mesmo tempo.
|
|
221
|
+
* 🔴 For each of the sixteen only the game can answer (`GAME_KEYED` in `core/accommodations`): the game's WORD, if
|
|
222
|
+
* it has a subject here, or `false`. In the Dev's words: «Gênero não precisa responder todas as acomodações, mas
|
|
223
|
+
* sim o cartucho, obrigatoriamente.»
|
|
143
224
|
*
|
|
144
|
-
*
|
|
145
|
-
*
|
|
225
|
+
* ⚠️ REQUIRED, by the `holdsAtOnce` rubric: there is no safe default — yes mounts the wheelchair in chess, no
|
|
226
|
+
* hides it from the platformer — and forgetting fails INVISIBLY to whoever writes the game. A missing or incomplete
|
|
227
|
+
* answer is a malformed declaration, and the boot REFUSES.
|
|
228
|
+
*
|
|
229
|
+
* 📌 The general ones always mount and the contract's are derived; none of them is answered here.
|
|
230
|
+
*/
|
|
231
|
+
readonly accommodations: AccommodationAnswers;
|
|
232
|
+
/**
|
|
233
|
+
* The game's genre, OPTIONAL (ADR-0153), from the engine's list (`core/genres`, ADR-0156): what the game plays like.
|
|
234
|
+
* The cartridge chooses it and nobody assigns it. Casino game and a name outside the list refuse the boot; Horror game
|
|
235
|
+
* boots and `problems` carries its «avoid» mark.
|
|
146
236
|
*/
|
|
147
|
-
readonly
|
|
237
|
+
readonly genre?: string;
|
|
148
238
|
/**
|
|
149
|
-
*
|
|
239
|
+
* WHAT THIS GAME USES OF THE VOICE (ADR-0216 §3) — never how. Two answers, and each one is a sentence about the child, not
|
|
240
|
+
* about a library:
|
|
241
|
+
*
|
|
242
|
+
* · `neuralVoice: true` — a child who cannot read is read TO by this game, so it wants a voice even where the device has
|
|
243
|
+
* none of its own. The engine loads Kokoro from the delivery at the first such utterance (ADR-0216 §1); the game names no
|
|
244
|
+
* phonemizer, runtime or model. Absent, no Kokoro voice is listed, the audio panel does not offer the neural engine, and
|
|
245
|
+
* the 371 MiB of model, voices and runtime never enter the delivery.
|
|
246
|
+
* · `reading: true` — a child reads aloud TO this game and it wants the text; the engine decides who hears her, and a
|
|
247
|
+
* delivery carries the reading model of her language because of this answer. Absent, `motor.reading.listen()` refuses and
|
|
248
|
+
* says which line is missing: a game that asks for a microphone it never declared would also be a delivery without the
|
|
249
|
+
* model, which is a silence in a school nobody can debug.
|
|
250
|
+
*/
|
|
251
|
+
readonly uses?: {
|
|
252
|
+
readonly reading?: boolean;
|
|
253
|
+
readonly neuralVoice?: boolean;
|
|
254
|
+
};
|
|
255
|
+
/**
|
|
256
|
+
* FETCH THE HEAVY FILES ON THE FIRST LOAD? Default **yes** (ADR-0110 (b), ADR-0116, ADR-0119).
|
|
150
257
|
*
|
|
151
|
-
*
|
|
152
|
-
*
|
|
153
|
-
*
|
|
154
|
-
* ADR-0116
|
|
258
|
+
* The vision runtime and models, and with `uses.neuralVoice` Kokoro's model, voices and runtime (371 MiB), come down in the
|
|
259
|
+
* BACKGROUND, one at a time, without blocking the game: the child plays while they arrive, and what must not happen is a child
|
|
260
|
+
* back on the second day, offline, finding they were never fetched. Pillar 8 is «first day ONLINE, then offline-first», and
|
|
261
|
+
* ADR-0116 removed the contradiction that blocked this — installing is already a network act.
|
|
155
262
|
*
|
|
156
|
-
* ⚠️
|
|
157
|
-
*
|
|
158
|
-
* que o desligue está a decidir que a criança dele fica sem voz neural offline.
|
|
263
|
+
* ⚠️ `false` IS FOR WHOEVER HAS A REASON, and the reason that exists is a TEST: a case that mounts the start in a real browser
|
|
264
|
+
* cannot fire hundreds of MB at the network. A game in production that turns it off decides its child has no neural voice offline.
|
|
159
265
|
*
|
|
160
|
-
* 📌
|
|
161
|
-
*
|
|
162
|
-
*
|
|
266
|
+
* 📌 ADR-0117 says the one who should pay this once is the PLATFORM, not each cartridge — the Cache Storage is partitioned by
|
|
267
|
+
* origin, and on one site the heavy files come down once for every game. Until the platform asks for them, the game does: better
|
|
268
|
+
* twice than never.
|
|
163
269
|
*/
|
|
164
|
-
readonly
|
|
270
|
+
readonly downloadHeavy?: boolean;
|
|
165
271
|
/**
|
|
166
|
-
*
|
|
272
|
+
* WHAT HAPPENED TO EACH HEAVY FILE, as it happens. Absent = nobody is watching.
|
|
167
273
|
*
|
|
168
|
-
* ⚠️
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
* empurrar para uma lista que já foi entregue.
|
|
274
|
+
* ⚠️ HERE AND NOT IN `problems`, because the download runs in the BACKGROUND: `createGame` returns `problems` synchronously, and a
|
|
275
|
+
* line arriving later lands in an array its reader already read. ADR-0110 asks that a failed fetch be REPORTED — reporting is having
|
|
276
|
+
* a channel that exists when the news arrives, not pushing into a list already delivered.
|
|
172
277
|
*
|
|
173
|
-
* 📌
|
|
174
|
-
*
|
|
278
|
+
* 📌 The engine invents no surface for this: where «N MB left» fits on a game's screen is the game's to know.
|
|
279
|
+
* `bytesLeftToDownload(relatorio)` gives the number for the sentence.
|
|
175
280
|
*/
|
|
176
|
-
readonly
|
|
281
|
+
readonly onHeavyProgress?: (r: HeavyReport) => void;
|
|
177
282
|
/**
|
|
178
|
-
*
|
|
283
|
+
* How each transport is found to be here. Absent = the engine asks the device.
|
|
179
284
|
*
|
|
180
|
-
*
|
|
181
|
-
*
|
|
285
|
+
* Injectable because whether a gamepad is connected and whether this is a touch screen are questions to the browser, and a
|
|
286
|
+
* test that cannot answer them cannot exercise the screen that depends on them.
|
|
182
287
|
*/
|
|
183
|
-
readonly
|
|
288
|
+
readonly availability?: Availability;
|
|
184
289
|
/**
|
|
185
|
-
*
|
|
186
|
-
*
|
|
187
|
-
* 🔴 ESTE CAMPO FALTAVA, E A FALTA ALCANÇAVA TODOS OS CONSUMIDORES DE UMA VEZ. O `initPauseIcons`
|
|
188
|
-
* aceita `getPauseActs` desde que existe; esta raiz não o passava e não tinha campo para ele, logo
|
|
189
|
-
* **nenhum jogo montado por `createGame`** conseguia ligar um item. O `refrescarItensDaPausa` esconde o
|
|
190
|
-
* que não acciona — o §5 do ADR-0106, que proíbe botão morto — e o resultado era um cartão com os TRÊS
|
|
191
|
-
* itens que a engine acciona sozinha (`ITENS_DA_ENGINE`) e nada mais, em todo o catálogo.
|
|
290
|
+
* WHAT EACH ITEM OF THE PAUSE CARD DOES IN THIS GAME — «continuar», «sair», «ajuda», whatever the game wires.
|
|
192
291
|
*
|
|
193
|
-
*
|
|
194
|
-
*
|
|
195
|
-
* `
|
|
196
|
-
* — era **inalcançável a partir de qualquer jogo**.
|
|
292
|
+
* 🔴 The engine hides every item nothing acts on (ADR-0106 §5, no dead buttons — `refreshPauseItems` in
|
|
293
|
+
* `ui/pause-icons`), so without this field a game could wire no item beyond the ones the engine acts on itself
|
|
294
|
+
* (`ENGINE_ITEMS` and the engine's own actions below). The game's table is spread over the engine's, so the game wins.
|
|
197
295
|
*
|
|
198
|
-
* 📌
|
|
199
|
-
*
|
|
200
|
-
*
|
|
296
|
+
* 📌 A FUNCTION and not a value, for the reason `ui/pause-icons` records: a game's table changes during a match (a
|
|
297
|
+
* «sair» that is wired only after the first level), and freezing it at boot broke a case there. Absent = only what
|
|
298
|
+
* the engine acts on.
|
|
201
299
|
*/
|
|
202
300
|
readonly getPauseActs?: () => Record<string, (() => void) | undefined>;
|
|
203
301
|
/**
|
|
204
|
-
*
|
|
302
|
+
* WHO OPENED THE PAUSE, when there is more than one seat — the keyboard panel edits the seat of THIS index.
|
|
205
303
|
*
|
|
206
|
-
* ⚠️
|
|
207
|
-
*
|
|
208
|
-
* O que faltava para a linha ser accionável era este campo — até agora ela dizia «conserte» sem haver por
|
|
209
|
-
* onde, e a única saída era declarar `semAtorDePausa`, que é aceitar a perda em vez de a corrigir.
|
|
304
|
+
* ⚠️ Without it the child in the SECOND seat cannot remap, and `problems` says so for a game that declares more than
|
|
305
|
+
* one player and does not answer this (`core/cartridge-problems`).
|
|
210
306
|
*/
|
|
211
|
-
readonly setPauseActor?: (i: number, ...
|
|
307
|
+
readonly setPauseActor?: (i: number, ...rest: unknown[]) => void;
|
|
212
308
|
/**
|
|
213
|
-
*
|
|
309
|
+
* HOW THIS GAME REPAINTS FOR HIGH CONTRAST, and how it corrects colour vision — the two axes of ADR-0104.
|
|
214
310
|
*
|
|
215
|
-
* 🔴
|
|
216
|
-
*
|
|
217
|
-
*
|
|
218
|
-
*
|
|
219
|
-
*
|
|
311
|
+
* 🔴 THE ⚫ ICON IS OFFERED ONLY TO A GAME THAT HANDS IN A WRITER. `iconsThatAct` mounts an icon only for whoever
|
|
312
|
+
* hands in its writer, and that rule is right — an icon that acts on nothing is worse than one icon fewer. What
|
|
313
|
+
* these fields add is the DOOR: without it, an outside consumer read the absence as this game having its own
|
|
314
|
+
* controls, true about the result and false about the cause. A gap the consumer reads as a choice is the worst kind.
|
|
315
|
+
* The 🚥 has an engine default (a filter over the world, below); a game that corrects colour in its own render wins.
|
|
220
316
|
*
|
|
221
|
-
* ⚠️
|
|
222
|
-
*
|
|
223
|
-
*
|
|
317
|
+
* ⚠️ TWO FIELDS AND NOT ONE, because they are two questions: a game may know how to repaint textures and have no way
|
|
318
|
+
* to correct colour, or the other way round — `game-pinball`'s image is a 320×180 framebuffer with no texture to
|
|
319
|
+
* repaint, and it applies the colour filter itself.
|
|
224
320
|
*/
|
|
225
|
-
readonly
|
|
226
|
-
readonly
|
|
321
|
+
readonly setPlayerTheme?: (i: number, theme: Theme) => void;
|
|
322
|
+
readonly setPlayerCorrection?: (i: number, correction: Correction) => void;
|
|
227
323
|
}
|
|
324
|
+
export type { FlashMeasurement };
|
|
228
325
|
export interface Engine {
|
|
229
326
|
readonly declaration: GameDeclaration;
|
|
230
327
|
/**
|
|
231
|
-
*
|
|
328
|
+
* THE PAUSE THIS ROOT MOUNTED — show and hide, without the consumer hunting for any id.
|
|
232
329
|
*
|
|
233
|
-
* ⚠️
|
|
234
|
-
*
|
|
235
|
-
*
|
|
236
|
-
*
|
|
330
|
+
* ⚠️ IT EXISTS BECAUSE MOUNTING IS NOT SHOWING. The card is born `hidden` (that is how `buildScreenPause` delivers
|
|
331
|
+
* it, and it must be: a pause is opened, not open). The engine opens it on SELECT, the ☰ and the quick pause's
|
|
332
|
+
* `action4`; these two let a game open and close it too, without looking for `#vp-pause-0` in the document — exactly
|
|
333
|
+
* the kind of knowledge this file exists not to demand.
|
|
237
334
|
*
|
|
238
|
-
*
|
|
239
|
-
*
|
|
240
|
-
* exactamente o tipo de conhecimento que este ficheiro existe para não exigir.
|
|
241
|
-
*
|
|
242
|
-
* 📌 A engine OFERECE o mecanismo e não toma a fase. Quando abrir a pausa continua a ser do jogo, porque só
|
|
243
|
-
* ele sabe o que é estar a jogar; o que deixa de ser dele é saber COMO.
|
|
335
|
+
* 📌 The engine OFFERS the mechanism and does not take the phase. When to open the pause stays the game's, because
|
|
336
|
+
* only it knows what playing is; what stops being its business is HOW.
|
|
244
337
|
*/
|
|
245
|
-
readonly
|
|
246
|
-
/**
|
|
247
|
-
readonly
|
|
248
|
-
/**
|
|
249
|
-
readonly
|
|
338
|
+
readonly pause: {
|
|
339
|
+
/** Reveals screen `i`'s card and rebuilds its items — ADR-0106 §5 evaluated the moment it opens. */
|
|
340
|
+
readonly show: (i: number) => void;
|
|
341
|
+
/** Hides it again. */
|
|
342
|
+
readonly hide: (i: number) => void;
|
|
250
343
|
};
|
|
251
344
|
readonly tts: ReturnType<typeof createTts>;
|
|
345
|
+
/**
|
|
346
|
+
* THE CHILD READS ALOUD AND THIS ANSWERS WITH TEXT (ADR-0216, issue #200; the Dev, 2026-09-21: «o jogo… apenas deve pedir
|
|
347
|
+
* para ouvir e receber o texto»). `listen()` ends when she goes quiet or the ceiling falls; `stop()` gives the microphone
|
|
348
|
+
* back; `ready()` says whether this device can hear her language at all. Which recogniser hears her is the engine's
|
|
349
|
+
* business — and never one that would send her voice to a server. A game that wants it declares `uses: { reading: true }`.
|
|
350
|
+
*/
|
|
351
|
+
readonly reading: Reading;
|
|
352
|
+
/**
|
|
353
|
+
* THE SOUND CAPTION, hosted by the engine (study item D3; ADR-0014; ADR-0164 rules 4–5): a line for eyes that cannot
|
|
354
|
+
* hear, in the screen footer above the explanation, at most two lines, gone after a moment. Written only while the
|
|
355
|
+
* child has captions on. Pass it as `createAudioEarcons`'s `showCaption`.
|
|
356
|
+
* 📏 Before it, each game wrote its own `#caption` with its own timer (platformer 1300 ms, soccer 2600 ms).
|
|
357
|
+
*/
|
|
358
|
+
readonly captionSound: (text: string) => void;
|
|
359
|
+
/**
|
|
360
|
+
* The game speed the child chose on the quick bar (ADR-0180): 1 is 100%, down to 0.5. Pass it as `startLoop`'s REQUIRED
|
|
361
|
+
* `speed` (ADR-0232 D2c), which multiplies the frame time by it; a game that runs its own frames multiplies by this.
|
|
362
|
+
*/
|
|
363
|
+
readonly gameSpeed: () => number;
|
|
364
|
+
/**
|
|
365
|
+
* Does the child want the «N de M» said after an item (ADR-0044 item 3)? Read at each announcement: the hearing panel
|
|
366
|
+
* turns it off and on. A game that announces its own items asks here instead of reading the settings store by import
|
|
367
|
+
* (ADR-0232 D2c), as it asks `gameSpeed` — the demo quiz does.
|
|
368
|
+
*/
|
|
369
|
+
readonly menuIndexOn: () => boolean;
|
|
370
|
+
/**
|
|
371
|
+
* TRANSLATES IN THIS ROOT'S LANGUAGE (ADR-0232 D3): the root's own `t`, the one every engine module receives. A game that
|
|
372
|
+
* writes its own words asks here instead of importing `core/i18n` — the demo quiz does — as it asks `gameSpeed`.
|
|
373
|
+
*/
|
|
374
|
+
readonly t: Translate;
|
|
375
|
+
/**
|
|
376
|
+
* Resolves when the language chosen at boot has loaded — at once for pt (ADR-0232 D3). A game that draws its first screen
|
|
377
|
+
* waits on it, or the screen is born in the fallback language.
|
|
378
|
+
*/
|
|
379
|
+
readonly localeReady: () => Promise<void>;
|
|
380
|
+
/**
|
|
381
|
+
* THIS ROOT'S SCREEN-READER ANNOUNCEMENTS (ADR-0232 D4): «polite» (`#sr-status`, does not interrupt) — the announcer every
|
|
382
|
+
* engine module receives. A game announces HERE instead of importing `core/a11y-sr`, which is a factory now: a second
|
|
383
|
+
* announcer would write the same regions but carry none of this root's Libras mirror.
|
|
384
|
+
*/
|
|
385
|
+
readonly say: (text: string) => void;
|
|
386
|
+
/** The «assertive» announcement (`#sr-alert`): interrupts and speaks now — errors, a checkmate, a crash. See `say`. */
|
|
387
|
+
readonly alert: (text: string) => void;
|
|
388
|
+
/**
|
|
389
|
+
* SIGNS THIS ROOT'S ANNOUNCEMENTS TOO: every `say`/`alert` — the engine's and the game's — also goes to `sink`, until the
|
|
390
|
+
* returned release. Pass `engine.libras.say`. The root connects nothing by itself (decision DD1, pending the Dev): a game
|
|
391
|
+
* that signed its announcements before connects it here, and a game that did not keeps not signing.
|
|
392
|
+
*/
|
|
393
|
+
readonly mirrorAnnouncements: (sink: (text: string) => void) => () => void;
|
|
394
|
+
/**
|
|
395
|
+
* THIS ROOT'S DEAF MODE (ADR-0232 D4): the one the bar's 🦻 toggles. `isOpen` is the child's choice; `say` signs a text
|
|
396
|
+
* while it is open (a queue of one); `tick` opens the interpreter for a choice restored from storage, and a game that
|
|
397
|
+
* signs calls it from its loop; `toggle` flips the mode from a game's own control, confirming in this root's language.
|
|
398
|
+
*/
|
|
399
|
+
readonly libras: {
|
|
400
|
+
readonly isOpen: () => boolean;
|
|
401
|
+
readonly say: (text: string) => void;
|
|
402
|
+
readonly tick: () => void;
|
|
403
|
+
readonly toggle: () => void;
|
|
404
|
+
};
|
|
405
|
+
/**
|
|
406
|
+
* THIS ROOT'S SETTINGS STORE (ADR-0232 D4): the child's settings, read through live getters (`settings.blindMode`) and written
|
|
407
|
+
* by the setters, plus the bus a game subscribes and emits on. A game reads HERE instead of importing `core/state`, which is
|
|
408
|
+
* a factory now: a second store would read the same storage but hear none of this root's changes.
|
|
409
|
+
*/
|
|
410
|
+
readonly settings: SettingsStore;
|
|
411
|
+
/**
|
|
412
|
+
* THIS ROOT'S INPUT STATE (ADR-0232 D4): the held keys and who pressed them, the transport in use per player, the pads'
|
|
413
|
+
* frames, and `held(player, action)`. A game reads and writes HERE instead of importing `input/state`, which is a factory
|
|
414
|
+
* now: a second instance would hold keys this root's transports never press.
|
|
415
|
+
*/
|
|
416
|
+
readonly input: LiveInput;
|
|
417
|
+
/**
|
|
418
|
+
* THIS ROOT'S KEYBOARD MAP and its doors (ADR-0232 D4): `kb()` the live map, `set`, `save`, `reset` (back to the GAME's
|
|
419
|
+
* default, ADR-0115), `factoryWithGame()` and `load()`. For a game with a remapping screen of its own — `game-2048`'s —
|
|
420
|
+
* instead of importing `input/keyboard`'s module map, which no longer exists.
|
|
421
|
+
*/
|
|
422
|
+
readonly keyboardConfig: KeyboardConfigApi;
|
|
423
|
+
/**
|
|
424
|
+
* THIS ROOT'S SOUND (ADR-0232 D4): the context (made at the first sound, from the host's window), the master, the mixer and
|
|
425
|
+
* the syntheses. Read through live getters (`audio.soundOn`, `audio.audioCat`) and moved by its methods (`ensureAC()`,
|
|
426
|
+
* `tone(…)`). A game asks HERE instead of importing `platform/audio`, which is a factory now: a second one would make a
|
|
427
|
+
* second context and a second mixer, deaf to this root's volume and categories.
|
|
428
|
+
*/
|
|
429
|
+
readonly audio: Audio;
|
|
430
|
+
/**
|
|
431
|
+
* THIS ROOT'S CRT (ADR-0232 D4): its live config, `apply()` (classes on `#game-region`, kept in the store) and
|
|
432
|
+
* `scanVars()`, which re-anchors the scanlines to real pixels. A game that scales its own stage with `ui/layout`'s
|
|
433
|
+
* `createLayout` passes `engine.crt.scanVars` as `afterScale`; a game with a CRT menu of its own reads and writes `cfg`
|
|
434
|
+
* and calls `apply()` here instead of importing `render/crt`, as it asks `gameSpeed`.
|
|
435
|
+
*/
|
|
436
|
+
readonly crt: Crt;
|
|
437
|
+
/**
|
|
438
|
+
* THIS ROOT'S L→Q CONTRAST ENHANCEMENT (ADR-0232 D4): `filter()` for composing a CSS filter, `t()` the amount, `set(t)`
|
|
439
|
+
* to change it (kept in the store; the root recomposes the world's filter). A game asks here instead of importing
|
|
440
|
+
* `render/lq-filter`.
|
|
441
|
+
*/
|
|
442
|
+
readonly lq: LqFilter;
|
|
443
|
+
/**
|
|
444
|
+
* MEASURES WHAT THE WORLD'S CANVAS FLASHES for `ms`, against the WCAG 2.3.1 general flash threshold (study item B2;
|
|
445
|
+
* `core/flash-threshold`). Only when called — reading pixels every frame costs a school machine (pillar 1), so play never
|
|
446
|
+
* pays for it. A failure is also a line of `problems`. `lido: false` says why nothing was measured (no canvas, a canvas
|
|
447
|
+
* the page may not read, or one that reads transparent, as a WebGL canvas without `preserveDrawingBuffer` does) — never a
|
|
448
|
+
* pass by silence. The red flash is not measured.
|
|
449
|
+
*/
|
|
450
|
+
readonly measureFlashes: (ms: number) => Promise<FlashMeasurement>;
|
|
252
451
|
readonly overlays: SettingsPanelApi;
|
|
253
452
|
readonly nav: MenuNavApi;
|
|
254
453
|
readonly keyboard: KeyboardRuntime;
|
|
255
454
|
/**
|
|
256
|
-
*
|
|
455
|
+
* THE CONTROLLER OBJECT, offered to the cartridge (ADR-0216, in the Dev's words: «Assim como a engine oferece o objeto de
|
|
456
|
+
* controle, ela deve oferecer objetos de leitura e TTS»).
|
|
457
|
+
*
|
|
458
|
+
* 📌 Every transport the engine knows — keyboard, gamepad (ADR-0224), touch, eyes, face, hands, voice, scan — is mounted
|
|
459
|
+
* here and presses this controller by itself. This is for a transport a game mounts ITSELF: pressing a position by hand
|
|
460
|
+
* is telling the engine that the child's device produced that position — with the source, which ADR-0109 demands.
|
|
461
|
+
*
|
|
462
|
+
* ⚠️ What it is NOT: a second way for the game to receive input. The game receives through `onCommand`.
|
|
463
|
+
*/
|
|
464
|
+
readonly controller: VirtualController;
|
|
465
|
+
/**
|
|
466
|
+
* APPLIES THE VISION FILTER TO THE WORLD THIS GAME DECLARED (ADR-0087).
|
|
257
467
|
*
|
|
258
|
-
* ⚠️
|
|
259
|
-
*
|
|
260
|
-
*
|
|
261
|
-
*
|
|
262
|
-
* criança dentro da simulação (#82).
|
|
468
|
+
* ⚠️ It exists because, without it, each consumer wrote its own — and `game-15puzzle` did, with the right reasoning
|
|
469
|
+
* and on its own. What it adds is the rule of MENUS, which a consumer has no way to know: they live over the
|
|
470
|
+
* simulation and are the way out of it, so if they inherited the filter by being INSIDE the world, it is undone on
|
|
471
|
+
* them. A blindness that blacked out the pause menu would lock the child inside the simulation (#82).
|
|
263
472
|
*/
|
|
264
|
-
readonly
|
|
473
|
+
readonly applyVisionFilter: (css: string, reach: FilterReach) => void;
|
|
265
474
|
/**
|
|
266
|
-
*
|
|
475
|
+
* NAVIGATION SOUND, ready and wired to this game's declaration (item 19).
|
|
267
476
|
*
|
|
268
|
-
*
|
|
269
|
-
*
|
|
270
|
-
*
|
|
477
|
+
* It comes for free because the sonar no longer needs tiles: it asks for topology (field 1), targets (field 5) and
|
|
478
|
+
* names (field 3), and the game already declared all three to exist. It was finding 9 of the second consumer: wiring
|
|
479
|
+
* the sonar meant LYING to the engine, and the lie was demanded by the SHAPE of the question, not by the sound.
|
|
271
480
|
*/
|
|
272
481
|
readonly sonar: AudioSonar;
|
|
273
482
|
/**
|
|
274
|
-
*
|
|
483
|
+
* THE SCENE STACK (item 22, C3 of ADR-0030), empty and ready.
|
|
484
|
+
*
|
|
485
|
+
* It comes from `createGame` and not from each game for the same reason as the sonar: it is infrastructure. What it
|
|
486
|
+
* replaces is `phase: 'title' | 'playing' | 'paused'` — ONE game's enum that engine modules read, and that a game
|
|
487
|
+
* with a level map or a results screen could not extend without asking the engine for a new constant (ADR-0030
|
|
488
|
+
* records widening the union as a NON-option, and that is why).
|
|
489
|
+
*
|
|
490
|
+
* It is born EMPTY: the game pushes, because which scenes there are is the only part of this that is its own.
|
|
491
|
+
*/
|
|
492
|
+
readonly scenes: SceneStack;
|
|
493
|
+
/**
|
|
494
|
+
* TELLS THE CARTRIDGE THE LANGUAGE CHANGED — the only thing it needs to know about it (ADR-0225).
|
|
275
495
|
*
|
|
276
|
-
*
|
|
277
|
-
*
|
|
278
|
-
*
|
|
279
|
-
*
|
|
280
|
-
*
|
|
496
|
+
* 📌 The engine already redraws everything that IS its own: the bar, the caption, the card, the pad, an open panel, the
|
|
497
|
+
* voice that speaks and the model that listens. What it cannot redraw is the ACTIVITY — and without this door the
|
|
498
|
+
* cartridge would have to subscribe to `i18n:change` on the window, knowing the event's name and reaching a global to
|
|
499
|
+
* do it. It is the rule the Dev wrote for reading and speech: «o jogo não deve precisar saber como isso funciona»
|
|
500
|
+
* (ADR-0216).
|
|
281
501
|
*
|
|
282
|
-
*
|
|
502
|
+
* ⚠️ Called AFTER the engine has redrawn itself, so the cartridge never sees a half-translated screen.
|
|
283
503
|
*/
|
|
284
|
-
readonly
|
|
285
|
-
/**
|
|
504
|
+
readonly onLocaleChange: (fn: () => void) => void;
|
|
505
|
+
/** How many colour-vision filters were mounted. `0` = there was no host, and the visual menu loses half. */
|
|
286
506
|
readonly cvdFilters: number;
|
|
287
|
-
/**
|
|
507
|
+
/** What the host page lacks and what the cartridge left undone, each line naming its fix. Empty = nothing to fix. */
|
|
288
508
|
readonly problems: readonly string[];
|
|
289
|
-
/**
|
|
509
|
+
/** What this game declared it does not have. Returned so it can be audited — declining stays on the record. */
|
|
290
510
|
readonly declines: Declinios;
|
|
291
511
|
/**
|
|
292
|
-
*
|
|
512
|
+
* THE ANNOUNCEMENT THAT THE LOOP STOPPED, ready to go into `startLoop(ticker, frame, maxDt, { onFailure })`.
|
|
293
513
|
*
|
|
294
|
-
* ⚠️
|
|
295
|
-
*
|
|
296
|
-
*
|
|
514
|
+
* ⚠️ ADR-0054 says in writing that it is only half true while this does not exist, and the missing half is the one
|
|
515
|
+
* that matters: **a blind child does not see a frozen screen.** Without an announcement, blind mode cannot tell
|
|
516
|
+
* a crash from a pause to think, and the silence is the same in both cases.
|
|
297
517
|
*
|
|
298
|
-
* ⚠️
|
|
299
|
-
*
|
|
300
|
-
*
|
|
301
|
-
* parar não é opcional; o que ele perde é dizer que parou.
|
|
518
|
+
* ⚠️ IT COMES FROM THE ENGINE AND NOT FROM EACH GAME because the message is the same in all of them and the channel
|
|
519
|
+
* (screen reader + narration + what is SEEN) is infrastructure. The game owns the ticker and calls `startLoop`, whose
|
|
520
|
+
* `onFailure` is REQUIRED (ADR-0232 D4): the game passes this, and no registration in `core/loop` stands in for it.
|
|
302
521
|
*/
|
|
303
|
-
readonly
|
|
522
|
+
readonly onFailure: (failure: unknown) => void;
|
|
304
523
|
/**
|
|
305
|
-
*
|
|
524
|
+
* THE REACH MEASURED FOR THE MOUNTED CARTRIDGE — ADR-0079 §3's guarantee as data, for whoever wants to read it.
|
|
306
525
|
*
|
|
307
|
-
*
|
|
308
|
-
*
|
|
309
|
-
*
|
|
526
|
+
* The engine has already shown the notice if there was something to say; this is returned because a game may want to
|
|
527
|
+
* decide more (hide a level that demands twelve actions, for example), and because `ok: false` is the kind of fact
|
|
528
|
+
* that must be auditable instead of living only on a screen that has closed.
|
|
310
529
|
*/
|
|
311
|
-
readonly
|
|
530
|
+
readonly reach: Reach;
|
|
312
531
|
/**
|
|
313
|
-
*
|
|
532
|
+
* MAKES THIS CARTRIDGE THE CURRENT ONE (ADR-0142). One composition root, several games.
|
|
314
533
|
*
|
|
315
|
-
* ⚠️ **
|
|
316
|
-
*
|
|
534
|
+
* ⚠️ **THROWS** on a malformed declaration, and does not put it in `problems`: the contract is a PRECONDITION and not
|
|
535
|
+
* a diagnosis, as at boot. A bad cartridge is never mounted.
|
|
317
536
|
*
|
|
318
|
-
* 📌
|
|
319
|
-
*
|
|
320
|
-
*
|
|
537
|
+
* 📌 What it redoes is only what reading again cannot fix: effects written elsewhere — the two mapping registers, the
|
|
538
|
+
* HUD, the game-options rows, the bar, the reach notice and the pad. `problems` and `reach` describe the mounted
|
|
539
|
+
* cartridge because they are derived when read, not because `mount` copies them.
|
|
321
540
|
*/
|
|
322
|
-
mount(declaration: GameDeclaration,
|
|
541
|
+
mount(declaration: GameDeclaration, hooks?: CartridgeHooks): void;
|
|
323
542
|
/**
|
|
324
|
-
*
|
|
543
|
+
* RELEASES THE CURRENT ONE: mappings set to `null`, reach notice and HUD removed, reading thread
|
|
544
|
+
* closed, scene stack emptied.
|
|
325
545
|
*
|
|
326
|
-
* ⚠️
|
|
327
|
-
*
|
|
328
|
-
* Um `clear()` que os saltasse seria o conserto errado.
|
|
546
|
+
* ⚠️ The stack is emptied with `pop()` and not with a `clear()`, and the difference is the decision: a scene's `exit()`
|
|
547
|
+
* is its DOM cleanup, so running it is the teardown wanted. A `clear()` that skipped them would be the wrong fix.
|
|
329
548
|
*/
|
|
330
549
|
unmount(): void;
|
|
550
|
+
/**
|
|
551
|
+
* ENDS THIS ROOT: it releases the current cartridge, like `unmount()`, AND STOPS LISTENING TO THE WINDOW.
|
|
552
|
+
*
|
|
553
|
+
* 🔴 The two are separate on purpose, and the separation is the whole point. `unmount()` releases the CARTRIDGE (ADR-0142) and
|
|
554
|
+
* a `mount()` after it must find a root that still hears the keyboard — so `unmount()` may not take the listeners off. But a
|
|
555
|
+
* page that is finished with a root had, until this method existed, no way to say so: the root kept its ~30 window listeners
|
|
556
|
+
* for the lifetime of the document, and since every query it makes is document-wide, it went on driving the pause card of
|
|
557
|
+
* whatever root came after it. 📏 Measured: one ArrowDown moved the cursor one item with one root, two with a second root
|
|
558
|
+
* alive, three with a third.
|
|
559
|
+
*
|
|
560
|
+
* ⚠️ A disposed root is not to be used again: it no longer hears anything. Call it when the page drops the root, not between
|
|
561
|
+
* cartridges — that is what `unmount()` is for.
|
|
562
|
+
*/
|
|
563
|
+
dispose(): void;
|
|
331
564
|
}
|
|
332
|
-
/**
|
|
333
|
-
export type
|
|
565
|
+
/** The game's half WITHOUT the declaration — what `mount` receives beside it. */
|
|
566
|
+
export type CartridgeHooks = Omit<GameHalf, 'declaration'>;
|
|
334
567
|
/**
|
|
335
|
-
*
|
|
568
|
+
* THE GAME'S HALF of `CreateGameOptions` — the fields ADR-0139 §1 says a cartridge SUPPLIES, apart from the ones that
|
|
569
|
+
* describe the page and the device.
|
|
336
570
|
*
|
|
337
|
-
*
|
|
338
|
-
* declaração errada é defeito de PROGRAMA, e um jogo que roda meio declarado é pior do que um que não abre;
|
|
339
|
-
* um id ausente é lacuna do HOSPEDEIRO, e o quiz provou que ligar só a parte que serve é legítimo — foi
|
|
340
|
-
* assim que ele recusou o pad e o sonar sem mentir. Por isso um vira exceção e o outro vira `problems`.
|
|
571
|
+
* The test that record gives: could a PAGE answer this without knowing which game runs? If not, the field is here.
|
|
341
572
|
*/
|
|
573
|
+
type GameHalf = Pick<CreateGameOptions, 'declaration' | 'isNavigable' | 'withIndex' | 'onBar' | 'navBar' | 'players' | 'setPhase' | 'sonarPlayers' | 'isBlindMode' | 'preset' | 'declines' | 'getPauseActs' | 'setPauseActor' | 'setPlayerTheme' | 'setPlayerCorrection' | 'accommodations' | 'genre' | 'onScreenPad' | 'hud' | 'gameOptions' | 'howToPlay' | 'onCommand' | 'gamepad'>;
|
|
342
574
|
/**
|
|
343
|
-
*
|
|
344
|
-
* FORNECE, separados dos cinco que descrevem a página e o aparelho.
|
|
575
|
+
* Switches the engine on for a declared game.
|
|
345
576
|
*
|
|
346
|
-
* ⚠️
|
|
347
|
-
*
|
|
348
|
-
*
|
|
349
|
-
*
|
|
577
|
+
* ⚠️ THROWS if the declaration is malformed, and does NOT throw if markup is missing. The difference is not taste: a
|
|
578
|
+
* wrong declaration is a PROGRAM defect, and a game that runs half-declared is worse than one that does not open; a
|
|
579
|
+
* missing id is a gap of the HOST, and the quiz proved that switching on only the part that serves is legitimate —
|
|
580
|
+
* that is how it declined the pad and the sonar without lying. So one becomes an exception and the other `problems`.
|
|
350
581
|
*/
|
|
351
|
-
type MetadeDoJogo = Pick<CreateGameOptions, 'declaration' | 'isNavigable' | 'comIndice' | 'naBarraDe' | 'navBar' | 'players' | 'setPhase' | 'sonarPlayers' | 'isBlindMode' | 'preset' | 'declines' | 'getPauseActs' | 'setPauseActor' | 'setTemaDoJogador' | 'setCorrecaoDoJogador'>;
|
|
352
582
|
export declare function createGame(o: CreateGameOptions): Engine;
|
|
353
|
-
export {};
|