@the-inclusionist/engine 8.0.0 → 10.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +89 -78
- package/app/css/style.css +584 -374
- package/app/public/vendor/fonts/bitter-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/bitter-var.woff2 +0 -0
- package/app/public/vendor/fonts/bodonimoda-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/bodonimoda-var.woff2 +0 -0
- package/app/public/vendor/fonts/cat-abril_fatface-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-abril_fatface-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-adlam_display-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-adlam_display-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-agu_display-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-agu_display-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-alfa_slab_one-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-alfa_slab_one-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-are_you_serious-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-are_you_serious-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-asimovian-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-asimovian-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-atkinson_hyperlegible_next-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-atkinson_hyperlegible_next-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bakbak_one-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bakbak_one-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bangers-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bangers-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-barriecito-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-barriecito-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-berkshire_swash-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-berkshire_swash-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bevan-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bevan-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bitcount-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bitcount-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bowlby_one_sc-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bowlby_one_sc-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bungee_shade-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bungee_shade-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-charm-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-charm-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-charm-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-charm-700.woff2 +0 -0
- package/app/public/vendor/fonts/cat-cherry_bomb_one-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-cherry_bomb_one-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-chokokutai-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-chokokutai-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-chonburi-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-chonburi-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-climate_crisis-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-climate_crisis-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-cookie-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-dela_gothic_one-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-dela_gothic_one-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-fascinate_inline-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-fascinate_inline-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ga_maamli-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ga_maamli-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-itim-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-itim-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-jacquard_24-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-jacquard_24-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-kablammo-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-kablammo-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-kalam-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-kalam-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-kalam-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-kalam-700.woff2 +0 -0
- package/app/public/vendor/fonts/cat-katibeh-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-katibeh-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-lemonada-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-lemonada-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-lilita_one-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-lilita_one-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-lobster-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-lobster-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-luckiest_guy-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-luckiest_guy-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-marhey-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-marhey-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-modak-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-modak-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-momo_signature-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-momo_signature-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-monofett-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-monofett-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-monomakh-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-monomakh-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-monoton-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-monoton-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-nerko_one-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-nerko_one-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_adlam-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_adlam-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_arabic-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_arabic-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_devanagari-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_devanagari-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_hebrew-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_hebrew-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_jp-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_jp-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_khmer-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_khmer-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_kr-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_kr-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_sc-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_sc-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_thai-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_thai-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ole-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ole-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-pacifico-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-pacifico-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-patrick_hand-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-patrick_hand-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-petit_formal_script-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-petit_formal_script-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-pixelify_sans-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-pixelify_sans-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-plaster-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-plaster-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_ar_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_at-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_at_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_nsw-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_nsw_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_qld-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_qld_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_sa-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_sa_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_tas-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_tas_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_vic-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_vic_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_be_vlg-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_be_vlg_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_be_wal-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_be_wal_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_br_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_ca_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_cl_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_co_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_cu_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_cz-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_cz_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_de_grund-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_de_grund_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_de_la-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_de_la_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_de_sas-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_de_sas_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_de_va-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_de_va_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_dk_loopet-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_dk_loopet_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_dk_uloopet-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_dk_uloopet_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_es_deco_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_es_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_fr_moderne-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_fr_moderne_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_fr_trad-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_fr_trad_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_gb_j_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_gb_s_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_hr-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_hr_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_hr_lijeva-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_hr_lijeva_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_hu-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_hu_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_id-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_id_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_ie-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_ie_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_in-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_in_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_is-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_is_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_it_moderna-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_it_moderna_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_it_trad-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_it_trad_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_mx_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_ng_modern-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_ng_modern_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_nl-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_nl_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_no-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_no_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_nz-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_nz_basic-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_nz_basic_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_nz_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_pe_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_pl-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_pl_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_pt_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_ro-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_ro_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_sk-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_sk_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_tz-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_tz_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_us_modern_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_us_trad_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_vn-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_vn_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_za-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_za_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-potta_one-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-potta_one-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ranchers-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ranchers-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ranga-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ranga-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ranga-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ranga-700.woff2 +0 -0
- package/app/public/vendor/fonts/cat-risque-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-risque-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-rowdies-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-rowdies-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-rowdies-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-rowdies-700.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ruge_boogie-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ruge_boogie-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ruslan_display-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ruslan_display-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sacramento-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sacramento-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sancreek-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sancreek-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sankofa_display-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sankofa_display-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sedgwick_ave_display-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sedgwick_ave_display-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-shantell_sans-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-shantell_sans-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-smokum-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-smokum-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-solitreo-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-solitreo-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-spicy_rice-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-spicy_rice-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sriracha-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sriracha-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-srisakdi-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-srisakdi-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-srisakdi-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-srisakdi-700.woff2 +0 -0
- package/app/public/vendor/fonts/cat-stix_two_math-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-tillana-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-tillana-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-tillana-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-tillana-700.woff2 +0 -0
- package/app/public/vendor/fonts/cat-titan_one-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-titan_one-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-yatra_one-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-yatra_one-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-yomogi-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-yomogi-400.woff2 +0 -0
- package/app/public/vendor/fonts/dmserifdisplay-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/dmserifdisplay-400.woff2 +0 -0
- package/app/public/vendor/fonts/domine-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/domine-var.woff2 +0 -0
- package/app/public/vendor/fonts/fraunces-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/fraunces-var.woff2 +0 -0
- package/app/public/vendor/fonts/fredoka-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/fredoka-var.woff2 +0 -0
- package/app/public/vendor/fonts/jakarta-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/jakarta-var.woff2 +0 -0
- package/app/public/vendor/fonts/lora-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/lora-var.woff2 +0 -0
- package/app/public/vendor/fonts/merriweather-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/merriweather-var.woff2 +0 -0
- package/app/public/vendor/fonts/notosans-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/notosans-var.woff2 +0 -0
- package/app/public/vendor/fonts/nunito-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/nunito-var.woff2 +0 -0
- package/app/public/vendor/fonts/playfair-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/playfair-var.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-cu.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-es-deco.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-es.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-gb-j.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-gb-s.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-pe.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-pt.woff2 +0 -0
- package/app/public/vendor/fonts/quicksand-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/quicksand-var.woff2 +0 -0
- package/app/public/vendor/fonts/robotoflex-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/robotoflex-var.woff2 +0 -0
- package/app/public/vendor/fonts/sora-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/sora-var.woff2 +0 -0
- package/app/public/vendor/fonts/spacegrotesk-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/spacegrotesk-var.woff2 +0 -0
- package/app/public/vendor/fonts/spectral-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/spectral-400.woff2 +0 -0
- package/app/public/vendor/fonts/spectral-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/spectral-700.woff2 +0 -0
- package/app/public/vendor/fonts/teachers-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/teachers-var.woff2 +0 -0
- package/app/public/vendor/fonts/ubuntu-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/ubuntu-400.woff2 +0 -0
- package/app/public/vendor/fonts/ubuntu-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/ubuntu-700.woff2 +0 -0
- package/app/public/vendor/fonts.css +1167 -51
- package/dist-pkg/boot/create-game.d.ts +467 -162
- package/dist-pkg/boot/create-game.js +3563 -426
- package/dist-pkg/core/a11y-sr.d.ts +25 -3
- package/dist-pkg/core/a11y-sr.js +40 -19
- package/dist-pkg/core/accessible-label.d.ts +17 -0
- package/dist-pkg/core/accessible-label.js +37 -0
- package/dist-pkg/core/accommodation-subjects.d.ts +26 -0
- package/dist-pkg/core/accommodation-subjects.js +32 -0
- package/dist-pkg/core/accommodations.d.ts +107 -0
- package/dist-pkg/core/accommodations.js +178 -0
- package/dist-pkg/core/actions.d.ts +75 -51
- package/dist-pkg/core/actions.js +98 -69
- package/dist-pkg/core/calm-mode.d.ts +31 -0
- package/dist-pkg/core/calm-mode.js +47 -0
- package/dist-pkg/core/camera-cycle.d.ts +15 -0
- package/dist-pkg/core/camera-cycle.js +7 -0
- package/dist-pkg/core/caption-duration.d.ts +15 -0
- package/dist-pkg/core/caption-duration.js +19 -0
- package/dist-pkg/core/cartridge-problems.d.ts +34 -0
- package/dist-pkg/core/cartridge-problems.js +53 -0
- package/dist-pkg/core/constants.d.ts +0 -54
- package/dist-pkg/core/constants.js +9 -76
- package/dist-pkg/core/contract.d.ts +143 -163
- package/dist-pkg/core/contract.js +223 -207
- package/dist-pkg/core/dom-query.d.ts +4 -4
- package/dist-pkg/core/dom-query.js +12 -20
- package/dist-pkg/core/entity.d.ts +62 -77
- package/dist-pkg/core/entity.js +18 -32
- package/dist-pkg/core/escape-html.d.ts +9 -10
- package/dist-pkg/core/escape-html.js +16 -20
- package/dist-pkg/core/flash-threshold.d.ts +17 -0
- package/dist-pkg/core/flash-threshold.js +113 -0
- package/dist-pkg/core/game-speed.d.ts +11 -0
- package/dist-pkg/core/game-speed.js +16 -0
- package/dist-pkg/core/genres.d.ts +20 -0
- package/dist-pkg/core/genres.js +44 -0
- package/dist-pkg/core/i18n.d.ts +87 -41
- package/dist-pkg/core/i18n.js +206 -153
- package/dist-pkg/core/loop.d.ts +17 -6
- package/dist-pkg/core/loop.js +26 -26
- package/dist-pkg/core/pause-icon-catalogue.d.ts +15 -0
- package/dist-pkg/core/pause-icon-catalogue.js +54 -0
- package/dist-pkg/core/ring.d.ts +17 -0
- package/dist-pkg/core/ring.js +29 -0
- package/dist-pkg/core/rng.d.ts +7 -12
- package/dist-pkg/core/rng.js +23 -53
- package/dist-pkg/core/route.d.ts +26 -26
- package/dist-pkg/core/route.js +126 -121
- package/dist-pkg/core/scenes.d.ts +37 -40
- package/dist-pkg/core/scenes.js +41 -43
- package/dist-pkg/core/screens.d.ts +4 -4
- package/dist-pkg/core/screens.js +11 -16
- package/dist-pkg/core/setting-defaults.d.ts +61 -0
- package/dist-pkg/core/setting-defaults.js +66 -0
- package/dist-pkg/core/speech-rate.d.ts +29 -0
- package/dist-pkg/core/speech-rate.js +47 -0
- package/dist-pkg/core/state.d.ts +118 -118
- package/dist-pkg/core/state.js +322 -297
- package/dist-pkg/core/visual-cycles.d.ts +30 -0
- package/dist-pkg/core/visual-cycles.js +52 -0
- package/dist-pkg/core/visual-state.d.ts +13 -0
- package/dist-pkg/core/visual-state.js +6 -0
- package/dist-pkg/educational/activities-registry.d.ts +1 -1
- package/dist-pkg/educational/activities-registry.js +9 -8
- package/dist-pkg/educational/adaptive-engine.d.ts +11 -11
- package/dist-pkg/educational/adaptive-engine.js +17 -17
- package/dist-pkg/educational/segment-bar.d.ts +12 -12
- package/dist-pkg/educational/segment-bar.js +9 -9
- package/dist-pkg/i18n/en.js +321 -215
- package/dist-pkg/i18n/es.js +320 -215
- package/dist-pkg/i18n/pt.js +342 -215
- package/dist-pkg/input/default-bindings.d.ts +37 -38
- package/dist-pkg/input/default-bindings.js +127 -144
- package/dist-pkg/input/devices.d.ts +7 -7
- package/dist-pkg/input/devices.js +17 -16
- package/dist-pkg/input/edges.d.ts +23 -32
- package/dist-pkg/input/edges.js +23 -28
- package/dist-pkg/input/empathy-filter.d.ts +22 -0
- package/dist-pkg/input/empathy-filter.js +34 -0
- package/dist-pkg/input/face-map.d.ts +96 -0
- package/dist-pkg/input/face-map.js +255 -0
- package/dist-pkg/input/face-signals.d.ts +40 -0
- package/dist-pkg/input/face-signals.js +48 -0
- package/dist-pkg/input/gamepad.d.ts +164 -145
- package/dist-pkg/input/gamepad.js +351 -559
- package/dist-pkg/input/gaze-cycle.d.ts +64 -0
- package/dist-pkg/input/gaze-cycle.js +133 -0
- package/dist-pkg/input/gaze-relative.d.ts +68 -0
- package/dist-pkg/input/gaze-relative.js +142 -0
- package/dist-pkg/input/hand-map.d.ts +28 -0
- package/dist-pkg/input/hand-map.js +142 -0
- package/dist-pkg/input/input-cooldown.d.ts +17 -0
- package/dist-pkg/input/input-cooldown.js +39 -0
- package/dist-pkg/input/keyboard-runtime.d.ts +18 -20
- package/dist-pkg/input/keyboard-runtime.js +23 -27
- package/dist-pkg/input/keyboard.d.ts +68 -62
- package/dist-pkg/input/keyboard.js +83 -105
- package/dist-pkg/input/keydown.d.ts +124 -132
- package/dist-pkg/input/keydown.js +283 -288
- package/dist-pkg/input/latch-edge.d.ts +25 -21
- package/dist-pkg/input/latch-edge.js +33 -35
- package/dist-pkg/input/latch-scope.d.ts +43 -47
- package/dist-pkg/input/latch-scope.js +66 -75
- package/dist-pkg/input/latch-store.d.ts +28 -29
- package/dist-pkg/input/latch-store.js +44 -47
- package/dist-pkg/input/latch-sync.d.ts +28 -29
- package/dist-pkg/input/latch-sync.js +25 -25
- package/dist-pkg/input/latch.d.ts +14 -17
- package/dist-pkg/input/latch.js +29 -37
- package/dist-pkg/input/pad-defaults.d.ts +13 -16
- package/dist-pkg/input/pad-defaults.js +21 -28
- package/dist-pkg/input/pad-reading.d.ts +76 -0
- package/dist-pkg/input/pad-reading.js +164 -0
- package/dist-pkg/input/pad-wizard.d.ts +96 -0
- package/dist-pkg/input/pad-wizard.js +205 -0
- package/dist-pkg/input/pointer-space.d.ts +19 -20
- package/dist-pkg/input/pointer-space.js +27 -32
- package/dist-pkg/input/pointer.d.ts +39 -40
- package/dist-pkg/input/pointer.js +42 -45
- package/dist-pkg/input/state.d.ts +101 -89
- package/dist-pkg/input/state.js +54 -134
- package/dist-pkg/input/switch-scan.d.ts +42 -0
- package/dist-pkg/input/switch-scan.js +54 -0
- package/dist-pkg/input/synthetic-source.d.ts +42 -0
- package/dist-pkg/input/synthetic-source.js +57 -0
- package/dist-pkg/input/touch-bindings.d.ts +127 -113
- package/dist-pkg/input/touch-bindings.js +158 -173
- package/dist-pkg/input/touch.d.ts +130 -70
- package/dist-pkg/input/touch.js +321 -123
- package/dist-pkg/input/transport-in-use.d.ts +107 -0
- package/dist-pkg/input/transport-in-use.js +130 -0
- package/dist-pkg/input/transports.d.ts +96 -114
- package/dist-pkg/input/transports.js +104 -106
- package/dist-pkg/input/virtual-controller.d.ts +46 -0
- package/dist-pkg/input/virtual-controller.js +41 -0
- package/dist-pkg/input/vocabulary-migration.d.ts +50 -49
- package/dist-pkg/input/vocabulary-migration.js +80 -79
- package/dist-pkg/input/voice-map.d.ts +43 -0
- package/dist-pkg/input/voice-map.js +125 -0
- package/dist-pkg/platform/audio-ambient.d.ts +13 -1
- package/dist-pkg/platform/audio-ambient.js +11 -13
- package/dist-pkg/platform/audio-earcons.d.ts +20 -19
- package/dist-pkg/platform/audio-earcons.js +51 -42
- package/dist-pkg/platform/audio-jingles.js +9 -10
- package/dist-pkg/platform/audio-mixer.d.ts +14 -2
- package/dist-pkg/platform/audio-mixer.js +36 -39
- package/dist-pkg/platform/audio-sonar.d.ts +96 -113
- package/dist-pkg/platform/audio-sonar.js +245 -238
- package/dist-pkg/platform/audio.d.ts +53 -19
- package/dist-pkg/platform/audio.js +161 -169
- package/dist-pkg/platform/flash-sampler.d.ts +19 -0
- package/dist-pkg/platform/flash-sampler.js +79 -0
- package/dist-pkg/platform/guide-intensity.d.ts +26 -27
- package/dist-pkg/platform/guide-intensity.js +50 -52
- package/dist-pkg/platform/heavy-catalogue.d.ts +31 -0
- package/dist-pkg/platform/heavy-catalogue.js +223 -0
- package/dist-pkg/platform/heavy-mirror.d.ts +26 -0
- package/dist-pkg/platform/heavy-mirror.js +76 -0
- package/dist-pkg/platform/heavy.d.ts +104 -0
- package/dist-pkg/platform/heavy.js +169 -0
- package/dist-pkg/platform/interruptible-speech.d.ts +16 -16
- package/dist-pkg/platform/interruptible-speech.js +50 -51
- package/dist-pkg/platform/kokoro-port.d.ts +27 -0
- package/dist-pkg/platform/kokoro-port.js +50 -0
- package/dist-pkg/platform/kokoro-runtime.d.ts +20 -0
- package/dist-pkg/platform/kokoro-runtime.js +52 -0
- package/dist-pkg/platform/kokoro.d.ts +70 -0
- package/dist-pkg/platform/kokoro.js +133 -0
- package/dist-pkg/platform/listener-scope.d.ts +12 -0
- package/dist-pkg/platform/listener-scope.js +81 -0
- package/dist-pkg/platform/locale-host.d.ts +10 -0
- package/dist-pkg/platform/locale-host.js +34 -0
- package/dist-pkg/platform/microphone.d.ts +51 -0
- package/dist-pkg/platform/microphone.js +118 -0
- package/dist-pkg/platform/onnx-runtime.d.ts +34 -0
- package/dist-pkg/platform/onnx-runtime.js +42 -0
- package/dist-pkg/platform/reading-in-worker.d.ts +40 -0
- package/dist-pkg/platform/reading-in-worker.js +87 -0
- package/dist-pkg/platform/reading-model.d.ts +73 -0
- package/dist-pkg/platform/reading-model.js +247 -0
- package/dist-pkg/platform/reading-runtime.d.ts +24 -0
- package/dist-pkg/platform/reading-runtime.js +159 -0
- package/dist-pkg/platform/reading-worker.d.ts +41 -0
- package/dist-pkg/platform/reading-worker.js +58 -0
- package/dist-pkg/platform/reading.d.ts +69 -0
- package/dist-pkg/platform/reading.js +128 -0
- package/dist-pkg/platform/speech-recognition.d.ts +51 -0
- package/dist-pkg/platform/speech-recognition.js +84 -0
- package/dist-pkg/platform/speech.d.ts +14 -1
- package/dist-pkg/platform/speech.js +13 -13
- package/dist-pkg/platform/storage-keys.d.ts +96 -0
- package/dist-pkg/platform/storage-keys.js +106 -0
- package/dist-pkg/platform/storage.d.ts +46 -111
- package/dist-pkg/platform/storage.js +104 -169
- package/dist-pkg/platform/tts.d.ts +51 -38
- package/dist-pkg/platform/tts.js +217 -119
- package/dist-pkg/platform/vision-loop.d.ts +23 -0
- package/dist-pkg/platform/vision-loop.js +56 -0
- package/dist-pkg/platform/vision.d.ts +132 -0
- package/dist-pkg/platform/vision.js +117 -0
- package/dist-pkg/platform/voice-listener.d.ts +36 -0
- package/dist-pkg/platform/voice-listener.js +88 -0
- package/dist-pkg/platform/voice-plan.d.ts +6 -102
- package/dist-pkg/platform/voice-plan.js +9 -151
- package/dist-pkg/platform/vosk-runtime.d.ts +71 -0
- package/dist-pkg/platform/vosk-runtime.js +93 -0
- package/dist-pkg/render/canvas.d.ts +13 -7
- package/dist-pkg/render/canvas.js +13 -13
- package/dist-pkg/render/crt.d.ts +46 -12
- package/dist-pkg/render/crt.js +82 -80
- package/dist-pkg/render/cvd-matrices.d.ts +18 -18
- package/dist-pkg/render/cvd-matrices.js +33 -38
- package/dist-pkg/render/hc-role-data.d.ts +7 -7
- package/dist-pkg/render/hc-role-data.js +14 -14
- package/dist-pkg/render/high-contrast.d.ts +66 -54
- package/dist-pkg/render/high-contrast.js +221 -216
- package/dist-pkg/render/low-vision-drawing.d.ts +5 -0
- package/dist-pkg/render/low-vision-drawing.js +46 -0
- package/dist-pkg/render/lq-filter.d.ts +32 -20
- package/dist-pkg/render/lq-filter.js +59 -65
- package/dist-pkg/render/port.d.ts +86 -88
- package/dist-pkg/render/port.js +17 -23
- package/dist-pkg/render/screen-pipeline.d.ts +42 -42
- package/dist-pkg/render/screen-pipeline.js +80 -87
- package/dist-pkg/render/sprite-fx.d.ts +2 -1
- package/dist-pkg/render/sprite-fx.js +16 -14
- package/dist-pkg/render/viewports.d.ts +20 -15
- package/dist-pkg/render/viewports.js +83 -114
- package/dist-pkg/render/viz-axes-labels.d.ts +47 -0
- package/dist-pkg/render/viz-axes-labels.js +88 -0
- package/dist-pkg/render/viz-axes.d.ts +80 -86
- package/dist-pkg/render/viz-axes.js +115 -116
- package/dist-pkg/render/viz-modes.d.ts +28 -29
- package/dist-pkg/render/viz-modes.js +40 -45
- package/dist-pkg/render/viz-refusal.d.ts +32 -0
- package/dist-pkg/render/viz-refusal.js +57 -0
- package/dist-pkg/render/viz-setters.d.ts +104 -66
- package/dist-pkg/render/viz-setters.js +182 -191
- package/dist-pkg/ui/aac-sets.d.ts +40 -0
- package/dist-pkg/ui/aac-sets.js +49 -0
- package/dist-pkg/ui/audio-choices.d.ts +63 -0
- package/dist-pkg/ui/audio-choices.js +94 -0
- package/dist-pkg/ui/audio-rows-that-apply.d.ts +12 -0
- package/dist-pkg/ui/audio-rows-that-apply.js +43 -0
- package/dist-pkg/ui/camera-control.d.ts +6 -0
- package/dist-pkg/ui/camera-control.js +14 -0
- package/dist-pkg/ui/changed-mark.d.ts +9 -8
- package/dist-pkg/ui/changed-mark.js +22 -53
- package/dist-pkg/ui/control-choices.d.ts +37 -0
- package/dist-pkg/ui/control-choices.js +84 -0
- package/dist-pkg/ui/debug-panel.d.ts +59 -43
- package/dist-pkg/ui/debug-panel.js +68 -69
- package/dist-pkg/ui/dom.d.ts +10 -14
- package/dist-pkg/ui/dom.js +10 -47
- package/dist-pkg/ui/drawing-problems.d.ts +25 -0
- package/dist-pkg/ui/drawing-problems.js +93 -0
- package/dist-pkg/ui/eye-control.d.ts +36 -0
- package/dist-pkg/ui/eye-control.js +178 -0
- package/dist-pkg/ui/face-control.d.ts +25 -0
- package/dist-pkg/ui/face-control.js +183 -0
- package/dist-pkg/ui/focus-trap.d.ts +39 -49
- package/dist-pkg/ui/focus-trap.js +56 -65
- package/dist-pkg/ui/fonts.d.ts +118 -63
- package/dist-pkg/ui/fonts.js +267 -111
- package/dist-pkg/ui/game-options.d.ts +42 -0
- package/dist-pkg/ui/game-options.js +138 -0
- package/dist-pkg/ui/gaze-overlay.d.ts +64 -0
- package/dist-pkg/ui/gaze-overlay.js +165 -0
- package/dist-pkg/ui/hand-control.d.ts +25 -0
- package/dist-pkg/ui/hand-control.js +143 -0
- package/dist-pkg/ui/help-panel.d.ts +76 -0
- package/dist-pkg/ui/help-panel.js +232 -0
- package/dist-pkg/ui/hud-bands.d.ts +45 -0
- package/dist-pkg/ui/hud-bands.js +108 -0
- package/dist-pkg/ui/hud.d.ts +73 -70
- package/dist-pkg/ui/hud.js +94 -98
- package/dist-pkg/ui/item-announcement.d.ts +13 -12
- package/dist-pkg/ui/item-announcement.js +25 -26
- package/dist-pkg/ui/latch-refusal.d.ts +22 -21
- package/dist-pkg/ui/latch-refusal.js +37 -37
- package/dist-pkg/ui/layout.d.ts +103 -28
- package/dist-pkg/ui/layout.js +114 -99
- package/dist-pkg/ui/locale-flags.d.ts +16 -0
- package/dist-pkg/ui/locale-flags.js +30 -0
- package/dist-pkg/ui/loop-crash.d.ts +17 -17
- package/dist-pkg/ui/loop-crash.js +33 -62
- package/dist-pkg/ui/menu-intent.d.ts +32 -0
- package/dist-pkg/ui/menu-intent.js +54 -0
- package/dist-pkg/ui/menu-items.d.ts +10 -0
- package/dist-pkg/ui/menu-items.js +22 -0
- package/dist-pkg/ui/menu-nav.d.ts +60 -90
- package/dist-pkg/ui/menu-nav.js +301 -274
- package/dist-pkg/ui/mobility-choices.d.ts +26 -0
- package/dist-pkg/ui/mobility-choices.js +41 -0
- package/dist-pkg/ui/motion-choices.d.ts +31 -0
- package/dist-pkg/ui/motion-choices.js +68 -0
- package/dist-pkg/ui/motion-scene.d.ts +24 -19
- package/dist-pkg/ui/motion-scene.js +29 -61
- package/dist-pkg/ui/mount-panel.d.ts +81 -0
- package/dist-pkg/ui/mount-panel.js +61 -0
- package/dist-pkg/ui/panel-shell.d.ts +65 -31
- package/dist-pkg/ui/panel-shell.js +92 -66
- package/dist-pkg/ui/panel-widgets.d.ts +116 -0
- package/dist-pkg/ui/panel-widgets.js +208 -0
- package/dist-pkg/ui/pause-buttons.d.ts +35 -0
- package/dist-pkg/ui/pause-buttons.js +66 -0
- package/dist-pkg/ui/pause-icons.d.ts +250 -343
- package/dist-pkg/ui/pause-icons.js +614 -605
- package/dist-pkg/ui/pause-markup.d.ts +86 -0
- package/dist-pkg/ui/pause-markup.js +125 -0
- package/dist-pkg/ui/reach-notice.d.ts +22 -23
- package/dist-pkg/ui/reach-notice.js +55 -58
- package/dist-pkg/ui/scan-overlay.d.ts +23 -0
- package/dist-pkg/ui/scan-overlay.js +42 -0
- package/dist-pkg/ui/settings-aac.d.ts +68 -0
- package/dist-pkg/ui/settings-aac.js +189 -0
- package/dist-pkg/ui/settings-audio.d.ts +91 -113
- package/dist-pkg/ui/settings-audio.js +407 -405
- package/dist-pkg/ui/settings-controls.d.ts +53 -92
- package/dist-pkg/ui/settings-controls.js +143 -215
- package/dist-pkg/ui/settings-empathy.d.ts +39 -30
- package/dist-pkg/ui/settings-empathy.js +53 -60
- package/dist-pkg/ui/settings-mobility.d.ts +195 -0
- package/dist-pkg/ui/settings-mobility.js +374 -0
- package/dist-pkg/ui/settings-motion.d.ts +91 -70
- package/dist-pkg/ui/settings-motion.js +287 -198
- package/dist-pkg/ui/settings-panel.d.ts +48 -45
- package/dist-pkg/ui/settings-panel.js +164 -93
- package/dist-pkg/ui/settings-typo.d.ts +28 -76
- package/dist-pkg/ui/settings-typo.js +145 -125
- package/dist-pkg/ui/settings-visual.d.ts +29 -87
- package/dist-pkg/ui/settings-visual.js +240 -193
- package/dist-pkg/ui/shell.d.ts +113 -134
- package/dist-pkg/ui/shell.js +143 -216
- package/dist-pkg/ui/simulation-list.d.ts +27 -0
- package/dist-pkg/ui/simulation-list.js +76 -0
- package/dist-pkg/ui/simulation-over-the-world.d.ts +23 -0
- package/dist-pkg/ui/simulation-over-the-world.js +131 -0
- package/dist-pkg/ui/simulation-refusal.d.ts +5 -31
- package/dist-pkg/ui/simulation-refusal.js +8 -56
- package/dist-pkg/ui/switchable-control.d.ts +11 -0
- package/dist-pkg/ui/switchable-control.js +19 -0
- package/dist-pkg/ui/title.d.ts +4 -4
- package/dist-pkg/ui/title.js +11 -13
- package/dist-pkg/ui/top-band.d.ts +24 -0
- package/dist-pkg/ui/top-band.js +100 -0
- package/dist-pkg/ui/typo-choices.d.ts +71 -0
- package/dist-pkg/ui/typo-choices.js +84 -0
- package/dist-pkg/ui/visual-axes-panel.d.ts +11 -47
- package/dist-pkg/ui/visual-axes-panel.js +12 -94
- package/dist-pkg/ui/visual-choices.d.ts +77 -0
- package/dist-pkg/ui/visual-choices.js +107 -0
- package/dist-pkg/ui/vlibras.d.ts +33 -10
- package/dist-pkg/ui/vlibras.js +58 -81
- package/dist-pkg/ui/voice-control.d.ts +46 -0
- package/dist-pkg/ui/voice-control.js +143 -0
- package/dist-pkg/ui/voice-settings.d.ts +96 -0
- package/dist-pkg/ui/voice-settings.js +302 -0
- package/dist-pkg/ui/where-the-child-is.d.ts +31 -0
- package/dist-pkg/ui/where-the-child-is.js +70 -0
- package/docs/CREDITS.md +198 -54
- package/docs/LICENSES.md +160 -145
- package/package.json +24 -25
- package/scripts/heavy-into-the-delivery.mjs +144 -0
- package/scripts/licences/Apache-2.0.txt +176 -0
- package/scripts/licences/GPL-3.0.txt +674 -0
- package/scripts/licences/MIT.txt +17 -0
- package/scripts/licences/third-party.mjs +287 -0
- package/scripts/licences/vosk-browser.NOTICE.txt +268 -0
- package/app/public/vendor/fonts/comicneue-400.woff2 +0 -0
- package/app/public/vendor/fonts/comicneue-700.woff2 +0 -0
- package/dist-pkg/core/anel.d.ts +0 -17
- package/dist-pkg/core/anel.js +0 -31
- package/dist-pkg/core/collision.d.ts +0 -21
- package/dist-pkg/core/collision.js +0 -62
- package/dist-pkg/core/layers.d.ts +0 -63
- package/dist-pkg/core/layers.js +0 -95
- package/dist-pkg/core/letter-grid.d.ts +0 -55
- package/dist-pkg/core/letter-grid.js +0 -116
- package/dist-pkg/core/password.d.ts +0 -34
- package/dist-pkg/core/password.js +0 -205
- package/dist-pkg/core/rotulo-acessivel.d.ts +0 -17
- package/dist-pkg/core/rotulo-acessivel.js +0 -41
- package/dist-pkg/core/run-state.d.ts +0 -115
- package/dist-pkg/core/run-state.js +0 -40
- package/dist-pkg/core/tiles.d.ts +0 -12
- package/dist-pkg/core/tiles.js +0 -61
- package/dist-pkg/core/world.d.ts +0 -4
- package/dist-pkg/core/world.js +0 -58
- package/dist-pkg/input/origem-sintetica.d.ts +0 -44
- package/dist-pkg/input/origem-sintetica.js +0 -60
- package/dist-pkg/input/transporte-em-uso.d.ts +0 -101
- package/dist-pkg/input/transporte-em-uso.js +0 -130
- package/dist-pkg/platform/audio-nav.d.ts +0 -51
- package/dist-pkg/platform/audio-nav.js +0 -99
- package/dist-pkg/platform/pesados-catalogo.d.ts +0 -14
- package/dist-pkg/platform/pesados-catalogo.js +0 -177
- package/dist-pkg/platform/pesados.d.ts +0 -31
- package/dist-pkg/platform/pesados.js +0 -75
- package/dist-pkg/platform/vozes-prontas.d.ts +0 -28
- package/dist-pkg/platform/vozes-prontas.js +0 -61
- package/dist-pkg/render/camera.d.ts +0 -58
- package/dist-pkg/render/camera.js +0 -105
- package/dist-pkg/render/cenario-data.d.ts +0 -127
- package/dist-pkg/render/cenario-data.js +0 -145
- package/dist-pkg/render/city-tex.d.ts +0 -63
- package/dist-pkg/render/city-tex.js +0 -228
- package/dist-pkg/render/city-tiles.d.ts +0 -11
- package/dist-pkg/render/city-tiles.js +0 -140
- package/dist-pkg/render/draw.d.ts +0 -149
- package/dist-pkg/render/draw.js +0 -231
- package/dist-pkg/render/fx.d.ts +0 -63
- package/dist-pkg/render/fx.js +0 -123
- package/dist-pkg/render/minimap.d.ts +0 -11
- package/dist-pkg/render/minimap.js +0 -94
- package/dist-pkg/render/parallax.d.ts +0 -85
- package/dist-pkg/render/parallax.js +0 -158
- package/dist-pkg/render/player-anim.d.ts +0 -71
- package/dist-pkg/render/player-anim.js +0 -152
- package/dist-pkg/render/recycling-tex.d.ts +0 -48
- package/dist-pkg/render/recycling-tex.js +0 -164
- package/dist-pkg/render/scene-city.d.ts +0 -77
- package/dist-pkg/render/scene-city.js +0 -181
- package/dist-pkg/render/scene-parallax.d.ts +0 -72
- package/dist-pkg/render/scene-parallax.js +0 -426
- package/dist-pkg/render/scene-sky.d.ts +0 -126
- package/dist-pkg/render/scene-sky.js +0 -295
- package/dist-pkg/render/set-cenario.d.ts +0 -54
- package/dist-pkg/render/set-cenario.js +0 -103
- package/dist-pkg/render/textures.d.ts +0 -75
- package/dist-pkg/render/textures.js +0 -240
- package/dist-pkg/render/title-scene.d.ts +0 -46
- package/dist-pkg/render/title-scene.js +0 -75
- package/dist-pkg/render/weather.d.ts +0 -96
- package/dist-pkg/render/weather.js +0 -171
- package/dist-pkg/render/wheelchair-sprites.d.ts +0 -32
- package/dist-pkg/render/wheelchair-sprites.js +0 -69
- package/dist-pkg/render/world-tex.d.ts +0 -18
- package/dist-pkg/render/world-tex.js +0 -87
- package/dist-pkg/ui/activities-menu.d.ts +0 -258
- package/dist-pkg/ui/activities-menu.js +0 -648
- package/dist-pkg/ui/caa-sets.d.ts +0 -39
- package/dist-pkg/ui/caa-sets.js +0 -65
- package/dist-pkg/ui/map-hub.d.ts +0 -56
- package/dist-pkg/ui/map-hub.js +0 -138
- package/dist-pkg/ui/settings-caa.d.ts +0 -45
- package/dist-pkg/ui/settings-caa.js +0 -137
- package/dist-pkg/ui/settings-motor.d.ts +0 -175
- package/dist-pkg/ui/settings-motor.js +0 -342
- package/dist-pkg/ui/webcam.d.ts +0 -7
- package/dist-pkg/ui/webcam.js +0 -93
package/dist-pkg/core/screens.js
CHANGED
|
@@ -1,27 +1,22 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// core/screens —
|
|
2
|
+
// core/screens — the multiplayer screen grid, in one place.
|
|
3
3
|
//
|
|
4
|
-
//
|
|
5
|
-
// ADR-0010).
|
|
6
|
-
//
|
|
7
|
-
//
|
|
4
|
+
// The game splits the window into one screen per player (pillar: multiplayer on SEPARATE screens, no split-screen —
|
|
5
|
+
// ADR-0010). How many columns and rows that gives was a one-line sum copied into several places (the layout's integer
|
|
6
|
+
// scale, the CRT's scanline step, the HUD's `.player-screen` positions), and one copy DIVERGED: without the `n<=1`
|
|
7
|
+
// guard, n=0 gives zero columns and every geometry becomes NaN. It survived because that case is unreachable today,
|
|
8
|
+
// not because anyone checked it — which is why the sum lives here once.
|
|
8
9
|
//
|
|
9
|
-
// A
|
|
10
|
-
//
|
|
11
|
-
// dividir por 0 colunas daria NaN em toda a geometria. Vale a pena guardar essa história: a cópia errada
|
|
12
|
-
// sobreviveu justamente porque o caso onde ela erra é inalcançável hoje, e não porque alguém a conferiu.
|
|
13
|
-
//
|
|
14
|
-
// Módulo FOLHA de propósito: zero dependências, nem de estado. `n` é parâmetro, nunca `numPlayers` global —
|
|
15
|
-
// é isso que deixa a conta testável e que permite o render, o layout e o HUD importarem daqui sem que um
|
|
16
|
-
// passe a depender do outro.
|
|
10
|
+
// A LEAF module on purpose: no dependencies, not even on state. `n` is a parameter, never a global `numPlayers` —
|
|
11
|
+
// that is what makes the sum testable and lets render, layout and HUD import it without depending on each other.
|
|
17
12
|
/**
|
|
18
|
-
*
|
|
19
|
-
* `n`
|
|
13
|
+
* The grid for `n` players: 1 -> 1x1 · 2 -> 2x1 · 3 and 4 -> 2x2.
|
|
14
|
+
* `n` below 1 gives the grid of one screen, not zero columns.
|
|
20
15
|
*/
|
|
21
16
|
export function screenGrid(n) {
|
|
22
17
|
return { cols: n <= 1 ? 1 : (n <= 2 ? n : 2), rows: n <= 2 ? 1 : 2 };
|
|
23
18
|
}
|
|
24
|
-
/**
|
|
19
|
+
/** Size in art pixels of the grid of `n` screens (320x180 per screen — the canonical pixel of ADR-0010). */
|
|
25
20
|
export function screenBaseSize(n) {
|
|
26
21
|
const { cols, rows } = screenGrid(n);
|
|
27
22
|
return { w: 320 * cols, h: 180 * rows };
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
import type { CameraControl } from './camera-cycle.js';
|
|
3
|
+
/**
|
|
4
|
+
* The browser's media-query question, as the composition root passes it (`win.matchMedia`). Only `matches` is read.
|
|
5
|
+
* A test passes a double; nothing here reaches `window`.
|
|
6
|
+
*/
|
|
7
|
+
export type MediaQuery = (query: string) => {
|
|
8
|
+
readonly matches: boolean;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* The REDUCED MOTION default is not a constant — it is what the operating system asks for, asked NOW and not at boot.
|
|
12
|
+
*
|
|
13
|
+
* It lives beside `DEFAULTS` because ADR-0029's rule is ONE source for what a default is, and a computed default is no less
|
|
14
|
+
* a default for not fitting a frozen object. Its readers are the help slides, the scene flags when nothing is stored, and the
|
|
15
|
+
* motion panel's mark and «restore defaults».
|
|
16
|
+
*
|
|
17
|
+
* Why the reset must read this and not `false`: on a machine whose owner asked for less motion, `false` would TURN THE
|
|
18
|
+
* ANIMATION BACK ON — the reset would do, by itself, exactly what WCAG 2.3.3 exists to prevent, on the screen of someone who
|
|
19
|
+
* already said they cannot take it.
|
|
20
|
+
*
|
|
21
|
+
* 📌 THE QUESTION ARRIVES AS A PARAMETER (ADR-0232): whoever calls passes `matchMedia`; the query itself stays here, once.
|
|
22
|
+
*/
|
|
23
|
+
export declare function defaultReducedMotion(matchMedia: MediaQuery): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* THE DEFAULTS, named. One value per line, each used in TWO places: the boot's read (when nothing is stored) and the
|
|
26
|
+
* "restore defaults" of the panel that holds it (ADR-0028).
|
|
27
|
+
*
|
|
28
|
+
* The alternative is writing each default twice — once in the stored read, once in the reset — and two copies nobody
|
|
29
|
+
* forces to agree diverge. Here the divergence would be worse than elsewhere: a reset that restores a value DIFFERENT
|
|
30
|
+
* from what the game uses when nothing was set leaves the child in a third state, neither theirs nor the factory's, that
|
|
31
|
+
* they have no name for when asking for help.
|
|
32
|
+
*
|
|
33
|
+
* `as const` + `Object.freeze` on purpose: a default someone can write at run time stops being a default.
|
|
34
|
+
*/
|
|
35
|
+
export declare const DEFAULTS: Readonly<{
|
|
36
|
+
readonly blindMode: false;
|
|
37
|
+
readonly caneBlockDiv: 1;
|
|
38
|
+
readonly captionsOn: true;
|
|
39
|
+
readonly menuIndexOn: true;
|
|
40
|
+
readonly wheelchair: false;
|
|
41
|
+
readonly oneButton: false;
|
|
42
|
+
readonly inputCooldown: 0;
|
|
43
|
+
readonly switchScan: false;
|
|
44
|
+
readonly voiceControl: false;
|
|
45
|
+
readonly gameSpeed: 1;
|
|
46
|
+
readonly captionPpm: 125;
|
|
47
|
+
readonly speechPpm: 254;
|
|
48
|
+
readonly noGripStrength: false;
|
|
49
|
+
readonly cameraControl: CameraControl;
|
|
50
|
+
readonly easy: false;
|
|
51
|
+
readonly toggleMove: false;
|
|
52
|
+
readonly toggleRun: false;
|
|
53
|
+
readonly cbSafe: false;
|
|
54
|
+
readonly ownerColors: true;
|
|
55
|
+
readonly lq: 0;
|
|
56
|
+
readonly hcOutlineFg: 1;
|
|
57
|
+
readonly hcOutlineBg: 1;
|
|
58
|
+
readonly letterCase: "upper";
|
|
59
|
+
readonly calmMode: 0;
|
|
60
|
+
readonly viz: "normal";
|
|
61
|
+
}>;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
/**
|
|
3
|
+
* The REDUCED MOTION default is not a constant — it is what the operating system asks for, asked NOW and not at boot.
|
|
4
|
+
*
|
|
5
|
+
* It lives beside `DEFAULTS` because ADR-0029's rule is ONE source for what a default is, and a computed default is no less
|
|
6
|
+
* a default for not fitting a frozen object. Its readers are the help slides, the scene flags when nothing is stored, and the
|
|
7
|
+
* motion panel's mark and «restore defaults».
|
|
8
|
+
*
|
|
9
|
+
* Why the reset must read this and not `false`: on a machine whose owner asked for less motion, `false` would TURN THE
|
|
10
|
+
* ANIMATION BACK ON — the reset would do, by itself, exactly what WCAG 2.3.3 exists to prevent, on the screen of someone who
|
|
11
|
+
* already said they cannot take it.
|
|
12
|
+
*
|
|
13
|
+
* 📌 THE QUESTION ARRIVES AS A PARAMETER (ADR-0232): whoever calls passes `matchMedia`; the query itself stays here, once.
|
|
14
|
+
*/
|
|
15
|
+
export function defaultReducedMotion(matchMedia) {
|
|
16
|
+
return matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* THE DEFAULTS, named. One value per line, each used in TWO places: the boot's read (when nothing is stored) and the
|
|
20
|
+
* "restore defaults" of the panel that holds it (ADR-0028).
|
|
21
|
+
*
|
|
22
|
+
* The alternative is writing each default twice — once in the stored read, once in the reset — and two copies nobody
|
|
23
|
+
* forces to agree diverge. Here the divergence would be worse than elsewhere: a reset that restores a value DIFFERENT
|
|
24
|
+
* from what the game uses when nothing was set leaves the child in a third state, neither theirs nor the factory's, that
|
|
25
|
+
* they have no name for when asking for help.
|
|
26
|
+
*
|
|
27
|
+
* `as const` + `Object.freeze` on purpose: a default someone can write at run time stops being a default.
|
|
28
|
+
*/
|
|
29
|
+
export const DEFAULTS = Object.freeze({
|
|
30
|
+
// hearing
|
|
31
|
+
blindMode: false,
|
|
32
|
+
caneBlockDiv: 1,
|
|
33
|
+
captionsOn: true,
|
|
34
|
+
menuIndexOn: true, // the index is born ON: whoever does not know it exists is whoever needs it most
|
|
35
|
+
// motor
|
|
36
|
+
wheelchair: false,
|
|
37
|
+
oneButton: false,
|
|
38
|
+
inputCooldown: 0,
|
|
39
|
+
switchScan: false,
|
|
40
|
+
voiceControl: false,
|
|
41
|
+
gameSpeed: 1,
|
|
42
|
+
captionPpm: 125,
|
|
43
|
+
speechPpm: 254, // the voice's normal speed, the minimum (ADR-0196)
|
|
44
|
+
noGripStrength: false,
|
|
45
|
+
cameraControl: 'off',
|
|
46
|
+
easy: false, // per player (Easy mode)
|
|
47
|
+
toggleMove: false, // per player (movement by toggling)
|
|
48
|
+
// The run-button toggle is born off at the FACTORY — and switches itself on with the on-screen pad, which is context,
|
|
49
|
+
// not choice. The difference matters to ADR-0029's mark, which marks the stored CHOICE and not the state.
|
|
50
|
+
toggleRun: false, // per player (run-button toggle)
|
|
51
|
+
// visual
|
|
52
|
+
cbSafe: false,
|
|
53
|
+
ownerColors: true,
|
|
54
|
+
lq: 0, // the L→Q contrast boost, off
|
|
55
|
+
hcOutlineFg: 1,
|
|
56
|
+
hcOutlineBg: 1,
|
|
57
|
+
// communication (the letter case today; the AAC panel of ADR-0028 widens this)
|
|
58
|
+
letterCase: 'upper',
|
|
59
|
+
// ⚠️ THE LAST TWO are here because they were missing and it had a cost (issue #61): ADR-0029's mark reads `DEFAULTS`
|
|
60
|
+
// and nothing else, so a value with no named default here is one the mark CANNOT mark.
|
|
61
|
+
// · `calmMode` — the autism-support level (0 normal · 1 calm · 2 quiet).
|
|
62
|
+
// · `viz` — the vision mode. `'normal'` is the mode that does nothing, now said instead of deduced from an empty
|
|
63
|
+
// string that happened to match no mode.
|
|
64
|
+
calmMode: 0,
|
|
65
|
+
viz: 'normal',
|
|
66
|
+
});
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
/**
|
|
3
|
+
* THE SPEECH RATE (ADR-0183 §1, ADR-0196; issue #179): the child's words per minute, 254 to 504 by 50 — «velocidade normal é a
|
|
4
|
+
* mínima» (the Dev): no voice is played slower than it speaks — mapped onto each engine by MEASURING
|
|
5
|
+
* the voice rather than assuming it — the record: «the mapping needs each voice's words per minute at rate 1, measured, not
|
|
6
|
+
* assumed.» Measured in the lab on 2026-09-14, a neural voice spoke 255 words per minute of speech; another voice or
|
|
7
|
+
* sentence differs, so every synthesised utterance is measured (its words over its speech time) and played at the ratio.
|
|
8
|
+
*
|
|
9
|
+
* Pure: no I/O, no audio — the engine hands in the samples it synthesised.
|
|
10
|
+
*/
|
|
11
|
+
export declare const SPEECH_RATES: readonly [254, 304, 354, 404, 454, 504];
|
|
12
|
+
export type SpeechRate = (typeof SPEECH_RATES)[number];
|
|
13
|
+
/** The playback-rate bounds: never under the voice's own speed (ADR-0196), and a measurement error never garbles it. */
|
|
14
|
+
export declare const MIN_PLAYBACK_RATE = 1;
|
|
15
|
+
export declare const MAX_PLAYBACK_RATE = 3;
|
|
16
|
+
/** A stored or passed rate that is not a step — the old 150…500 by 35 among them — reads as the normal speed, the first step. */
|
|
17
|
+
export declare function isSpeechRate(ppm: number): SpeechRate;
|
|
18
|
+
/** The words a voice says: tokens holding a letter; a dash, a number or a sign alone is not counted. */
|
|
19
|
+
export declare function spokenWords(text: string): number;
|
|
20
|
+
/** Seconds from the first to the last sample above the silence threshold — the pauses inside stay, the silent ends go. */
|
|
21
|
+
export declare function speechSeconds(samples: ArrayLike<number>, sampleRate: number, silenceThreshold?: number): number;
|
|
22
|
+
/**
|
|
23
|
+
* The rate to play an utterance at, and the voice's words per minute measured on it (`null` when it was too short to measure).
|
|
24
|
+
* Too short, it takes the voice's running average; with none yet, it plays as synthesised.
|
|
25
|
+
*/
|
|
26
|
+
export declare function speechPlaybackRate(words: number, seconds: number, ppm: number, voiceAverage: number | null): {
|
|
27
|
+
readonly rate: number;
|
|
28
|
+
readonly voiceWpm: number | null;
|
|
29
|
+
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
/**
|
|
3
|
+
* THE SPEECH RATE (ADR-0183 §1, ADR-0196; issue #179): the child's words per minute, 254 to 504 by 50 — «velocidade normal é a
|
|
4
|
+
* mínima» (the Dev): no voice is played slower than it speaks — mapped onto each engine by MEASURING
|
|
5
|
+
* the voice rather than assuming it — the record: «the mapping needs each voice's words per minute at rate 1, measured, not
|
|
6
|
+
* assumed.» Measured in the lab on 2026-09-14, a neural voice spoke 255 words per minute of speech; another voice or
|
|
7
|
+
* sentence differs, so every synthesised utterance is measured (its words over its speech time) and played at the ratio.
|
|
8
|
+
*
|
|
9
|
+
* Pure: no I/O, no audio — the engine hands in the samples it synthesised.
|
|
10
|
+
*/
|
|
11
|
+
export const SPEECH_RATES = [254, 304, 354, 404, 454, 504];
|
|
12
|
+
/** The playback-rate bounds: never under the voice's own speed (ADR-0196), and a measurement error never garbles it. */
|
|
13
|
+
export const MIN_PLAYBACK_RATE = 1;
|
|
14
|
+
export const MAX_PLAYBACK_RATE = 3;
|
|
15
|
+
/** Below this an utterance is too short to measure («Voltar»): its silent ends and one stressed syllable dominate. */
|
|
16
|
+
const WORDS_TO_MEASURE = 3;
|
|
17
|
+
const SECONDS_TO_MEASURE = 0.8;
|
|
18
|
+
/** A stored or passed rate that is not a step — the old 150…500 by 35 among them — reads as the normal speed, the first step. */
|
|
19
|
+
export function isSpeechRate(ppm) {
|
|
20
|
+
return SPEECH_RATES.includes(ppm) ? ppm : SPEECH_RATES[0];
|
|
21
|
+
}
|
|
22
|
+
/** The words a voice says: tokens holding a letter; a dash, a number or a sign alone is not counted. */
|
|
23
|
+
export function spokenWords(text) {
|
|
24
|
+
return text.split(/\s+/).filter((w) => /\p{L}/u.test(w)).length;
|
|
25
|
+
}
|
|
26
|
+
/** Seconds from the first to the last sample above the silence threshold — the pauses inside stay, the silent ends go. */
|
|
27
|
+
export function speechSeconds(samples, sampleRate, silenceThreshold = 0.01) {
|
|
28
|
+
let a = 0, b = samples.length - 1;
|
|
29
|
+
while (a <= b && Math.abs(samples[a]) < silenceThreshold)
|
|
30
|
+
a++;
|
|
31
|
+
while (b >= a && Math.abs(samples[b]) < silenceThreshold)
|
|
32
|
+
b--;
|
|
33
|
+
return b >= a ? (b - a + 1) / sampleRate : 0;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The rate to play an utterance at, and the voice's words per minute measured on it (`null` when it was too short to measure).
|
|
37
|
+
* Too short, it takes the voice's running average; with none yet, it plays as synthesised.
|
|
38
|
+
*/
|
|
39
|
+
export function speechPlaybackRate(words, seconds, ppm, voiceAverage) {
|
|
40
|
+
const target = isSpeechRate(ppm);
|
|
41
|
+
const clampInside = (x) => Math.min(MAX_PLAYBACK_RATE, Math.max(MIN_PLAYBACK_RATE, +x.toFixed(6)));
|
|
42
|
+
if (words >= WORDS_TO_MEASURE && seconds >= SECONDS_TO_MEASURE) {
|
|
43
|
+
const measuredWpm = (words / seconds) * 60;
|
|
44
|
+
return { rate: clampInside(target / measuredWpm), voiceWpm: measuredWpm };
|
|
45
|
+
}
|
|
46
|
+
return { rate: voiceAverage ? clampInside(target / voiceAverage) : 1, voiceWpm: null };
|
|
47
|
+
}
|
package/dist-pkg/core/state.d.ts
CHANGED
|
@@ -1,35 +1,40 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
import { type CameraControl } from './camera-cycle.js';
|
|
3
|
+
/** The port the settings are read and written through. `platform/storage` has this shape; a test passes a double. */
|
|
4
|
+
export interface StatePort {
|
|
5
|
+
get(key: string, fallback: string | null): string | null;
|
|
6
|
+
set(key: string, value: string | number | boolean): unknown;
|
|
7
|
+
getBool(key: string, fallback?: boolean): boolean;
|
|
8
|
+
setBool(key: string, on: boolean): unknown;
|
|
9
|
+
getNum(key: string, fallback?: number): number;
|
|
10
|
+
readonly KEYS: {
|
|
11
|
+
readonly letterCase: string;
|
|
12
|
+
readonly captions: string;
|
|
13
|
+
readonly menuIndex: string;
|
|
14
|
+
readonly cbsafe: string;
|
|
15
|
+
readonly ownercolors: string;
|
|
16
|
+
readonly outfg: string;
|
|
17
|
+
readonly outbg: string;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
2
20
|
/**
|
|
3
|
-
* =========================
|
|
4
|
-
*
|
|
5
|
-
* Era `emit(evt: string, val: unknown)`. Duas coisas erradas numa assinatura só:
|
|
6
|
-
*
|
|
7
|
-
* · O NOME ERA `string`. Um `emit('viz', …)` em vez de `'vizMode'` não é erro em lugar nenhum — é
|
|
8
|
-
* SILÊNCIO. O assinante certo nunca é chamado, nada fica vermelho, e a única pista é um painel que
|
|
9
|
-
* parou de se atualizar. Hoje são dezessete pontos de emissão e cada nome aparece UMA vez; a chance de
|
|
10
|
-
* digitar errado é exatamente a chance de escrever a próxima linha.
|
|
11
|
-
* · A CARGA ERA `unknown`. Quem assinasse tinha de converter, e a conversão é onde a mentira entra.
|
|
21
|
+
* ========================= THE BUS, TYPED =========================
|
|
12
22
|
*
|
|
13
|
-
*
|
|
14
|
-
* compila; carga errada não compila.
|
|
23
|
+
* It was `emit(evt: string, val: unknown)`, two wrongs in one signature:
|
|
15
24
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* estado, e o `boot/create-game` assina o mesmo evento para a barra montada não mentir o dela. Os dois
|
|
20
|
-
* chegaram pela razão que o parágrafo previa — «painéis que se redesenham quando a criança muda um ajuste» —
|
|
21
|
-
* e chegaram com o contrato já tipado, que era o ponto de ele nascer assim.
|
|
25
|
+
* · THE NAME WAS A `string`. An `emit('viz', …)` instead of `'vizMode'` is an error nowhere — it is SILENCE. The right
|
|
26
|
+
* subscriber is never called, nothing goes red, and the only clue is a panel that stopped updating.
|
|
27
|
+
* · THE PAYLOAD WAS `unknown`. A subscriber had to cast, and the cast is where the lie gets in.
|
|
22
28
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* pronto, em vez de chegar e ser seguido por uma migração.
|
|
29
|
+
* Now `GameEvent` maps name → payload and `emit`/`on` are generic over it: an unknown name does not compile, a wrong
|
|
30
|
+
* payload does not compile. It was typed before it had subscribers on purpose — ADR-0031 already required panels to
|
|
31
|
+
* redraw when the child changes a setting, and the first subscribers (the bar and the audio panel, which must not lie
|
|
32
|
+
* about blind mode) arrived with the contract already typed instead of being followed by a migration.
|
|
28
33
|
*/
|
|
29
|
-
export interface
|
|
34
|
+
export interface GameEvent {
|
|
30
35
|
numPlayers: number;
|
|
31
36
|
vizMode: string;
|
|
32
|
-
|
|
37
|
+
blindMode: boolean;
|
|
33
38
|
letterCase: LetterCase;
|
|
34
39
|
captionsOn: boolean;
|
|
35
40
|
menuIndexOn: boolean;
|
|
@@ -40,108 +45,103 @@ export interface EventoDoJogo {
|
|
|
40
45
|
caneBlockDiv: number;
|
|
41
46
|
wheelchair: boolean;
|
|
42
47
|
oneButton: boolean;
|
|
48
|
+
/** The wait after an accepted key, in milliseconds (ADR-0217); 0 is off, which is how it leaves the factory. */
|
|
49
|
+
inputCooldown: number;
|
|
50
|
+
/** Playing with ONE button: the machine offers each position and any press takes the one showing (ADR-0218). */
|
|
51
|
+
switchScan: boolean;
|
|
52
|
+
/** Playing by SPEAKING: the child says a word of the game and the position it names is pressed (ADR-0189, issue #184). */
|
|
53
|
+
voiceControl: boolean;
|
|
54
|
+
/** The game speed, a step of `core/game-speed` (ADR-0180): 1 is 100%. */
|
|
55
|
+
gameSpeed: number;
|
|
56
|
+
/** The child's caption reading rate, words a minute (ADR-0183 §4): 125, 145 or 175. */
|
|
57
|
+
captionPpm: number;
|
|
58
|
+
/** The child's speech rate, words a minute (ADR-0183 §1, ADR-0196): 254 to 504 by 50. */
|
|
59
|
+
speechPpm: number;
|
|
60
|
+
/** The «no strength to hold» empathy simulation (ADR-0181): a held game key reads as one tap. */
|
|
61
|
+
noGripStrength: boolean;
|
|
62
|
+
/** Playing through the webcam (ADR-0215): off, hands, face or eyes — one mode at a time, each with its lines. */
|
|
63
|
+
cameraControl: CameraControl;
|
|
43
64
|
}
|
|
44
|
-
type
|
|
45
|
-
/** Assina `evt`. Devolve a função que cancela — guardar o retorno é mais barato que lembrar do `off`. */
|
|
46
|
-
export declare function on<K extends keyof EventoDoJogo>(evt: K, fn: Ouvinte<K>): () => void;
|
|
47
|
-
export declare function off<K extends keyof EventoDoJogo>(evt: K, fn: Ouvinte<K>): void;
|
|
65
|
+
type Listener<K extends keyof GameEvent> = (val: GameEvent[K]) => void;
|
|
48
66
|
/**
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* simplesmente não seria avisado — sem erro, sem teste vermelho.
|
|
52
|
-
*
|
|
53
|
-
* O `try` em volta de cada assinante NÃO é preguiça: um ouvinte que estoura não pode impedir os outros de
|
|
54
|
-
* receber. Um painel quebrado derruba o painel; não derruba o jogo.
|
|
67
|
+
* A gate tile: a gate is a LIST of these, not one object with a position. A STRUCTURAL minimum — `core/` does not
|
|
68
|
+
* import a game's types, and a game's richer tile is assignable to this.
|
|
55
69
|
*/
|
|
56
|
-
export
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
70
|
+
export interface GateTile {
|
|
71
|
+
readonly tx: number;
|
|
72
|
+
readonly ty: number;
|
|
73
|
+
}
|
|
60
74
|
/**
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
* Existe porque a alternativa é escrever o mesmo padrão duas vezes — uma no `store.getBool(chave, X)` e outra
|
|
65
|
-
* no reset — e este repositório já mostrou quatro vezes o que acontece com duas cópias que ninguém obriga a
|
|
66
|
-
* concordar. Aqui a divergência seria pior que as anteriores: um reset que restaura um valor DIFERENTE do que
|
|
67
|
-
* o jogo usa quando nunca foi configurado deixa a criança num terceiro estado, que não é nem o dela nem o de
|
|
68
|
-
* fábrica, e que ela não tem como nomear para pedir ajuda.
|
|
69
|
-
*
|
|
70
|
-
* `as const` + `Object.freeze` de propósito: um padrão que alguém consiga escrever em tempo de execução deixa
|
|
71
|
-
* de ser padrão.
|
|
75
|
+
* letterCase: letters show in UPPER CASE or in their natural case. A stored 'lower' reads as 'mixed': the Dev asked for two
|
|
76
|
+
* options, upper and lower case together or upper case only (see the store's `letterCase`).
|
|
72
77
|
*/
|
|
78
|
+
export type LetterCase = 'mixed' | 'upper';
|
|
79
|
+
/** Outline thickness: 0 none · 1 thin · 2 thick. Out of range saturates, it is not rejected. */
|
|
80
|
+
export type OutlineLevel = 0 | 1 | 2;
|
|
73
81
|
/**
|
|
74
|
-
*
|
|
82
|
+
* A root's settings store: every read is a LIVE getter (it answers the value of now, not of when it was taken), every write
|
|
83
|
+
* a setter that does three things and only three — stores, persists, tells.
|
|
75
84
|
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
* boot (main.js) e o "restaurar padrões" do menu de sensibilidade visual.
|
|
79
|
-
*
|
|
80
|
-
* Por que importa que o reset leia isto em vez de `false`: numa máquina cujo dono pediu menos movimento,
|
|
81
|
-
* devolver `false` RELIGARIA a animação — o reset passaria a fazer, sozinho, exatamente o que a WCAG 2.3.3
|
|
82
|
-
* existe para impedir, e faria isso na tela de quem já tinha dito que não aguenta.
|
|
83
|
-
*
|
|
84
|
-
* `matchMedia` é guardado: este módulo roda no projeto `node` dos testes, onde `window` não existe.
|
|
85
|
+
* ⚠️ DESTRUCTURING A READ FREEZES IT: `const { blindMode } = store` copies the value of that moment. Read `store.blindMode`.
|
|
86
|
+
* The setters and the bus hold no `this`, so they can be taken apart (`const { on, emit } = store`).
|
|
85
87
|
*/
|
|
86
|
-
export
|
|
87
|
-
|
|
88
|
-
readonly
|
|
89
|
-
readonly
|
|
90
|
-
readonly
|
|
91
|
-
readonly
|
|
92
|
-
readonly
|
|
93
|
-
readonly
|
|
94
|
-
readonly
|
|
95
|
-
readonly
|
|
96
|
-
readonly
|
|
97
|
-
readonly
|
|
98
|
-
readonly
|
|
99
|
-
readonly
|
|
100
|
-
readonly
|
|
101
|
-
readonly
|
|
102
|
-
readonly
|
|
103
|
-
readonly
|
|
104
|
-
readonly
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
88
|
+
export interface SettingsStore {
|
|
89
|
+
/** The active visual/colour mode (stored in incl_viz by its setter; `initVizMode` does not store). */
|
|
90
|
+
readonly vizMode: string;
|
|
91
|
+
readonly blindMode: boolean;
|
|
92
|
+
readonly letterCase: LetterCase;
|
|
93
|
+
readonly captionsOn: boolean;
|
|
94
|
+
readonly menuIndexOn: boolean;
|
|
95
|
+
readonly cbSafe: boolean;
|
|
96
|
+
readonly ownerColors: boolean;
|
|
97
|
+
readonly hcOutlineFg: OutlineLevel;
|
|
98
|
+
readonly hcOutlineBg: OutlineLevel;
|
|
99
|
+
readonly caneBlockDiv: number;
|
|
100
|
+
readonly wheelchair: boolean;
|
|
101
|
+
readonly oneButton: boolean;
|
|
102
|
+
readonly noGripStrength: boolean;
|
|
103
|
+
readonly inputCooldown: number;
|
|
104
|
+
readonly switchScan: boolean;
|
|
105
|
+
readonly voiceControl: boolean;
|
|
106
|
+
readonly cameraControl: CameraControl;
|
|
107
|
+
readonly gameSpeed: number;
|
|
108
|
+
readonly captionPpm: number;
|
|
109
|
+
readonly speechPpm: number;
|
|
110
|
+
/** Sets the visual mode WITHOUT storing it: a default taken from the media query must follow the OS at every boot. */
|
|
111
|
+
initVizMode(mode: string): void;
|
|
112
|
+
setVizModeValue(mode: string): void;
|
|
113
|
+
setBlindModeValue(on: boolean): void;
|
|
114
|
+
setLetterCaseValue(c: LetterCase): void;
|
|
115
|
+
setCaptionsOnValue(on: boolean): void;
|
|
116
|
+
setMenuIndexOnValue(on: boolean): void;
|
|
117
|
+
setCbSafeValue(on: boolean): void;
|
|
118
|
+
setOwnerColorsValue(on: boolean): void;
|
|
119
|
+
setOutlineFgValue(v: number): void;
|
|
120
|
+
setOutlineBgValue(v: number): void;
|
|
121
|
+
setCaneBlockDivValue(div: number): void;
|
|
122
|
+
setWheelchairValue(on: boolean): void;
|
|
123
|
+
setOneButtonValue(on: boolean): void;
|
|
124
|
+
setNoGripStrengthValue(on: boolean): void;
|
|
125
|
+
setInputCooldownValue(ms: number): void;
|
|
126
|
+
setSwitchScanValue(on: boolean): void;
|
|
127
|
+
setVoiceControlValue(on: boolean): void;
|
|
128
|
+
setCameraControlValue(v: CameraControl): void;
|
|
129
|
+
setGameSpeedValue(v: number): void;
|
|
130
|
+
setCaptionPpmValue(ppm: number): void;
|
|
131
|
+
setSpeechPpmValue(ppm: number): void;
|
|
132
|
+
/** Subscribes to `evt`. Returns the function that cancels — keeping the return is cheaper than remembering `off`. */
|
|
133
|
+
on<K extends keyof GameEvent>(evt: K, fn: Listener<K>): () => void;
|
|
134
|
+
off<K extends keyof GameEvent>(evt: K, fn: Listener<K>): void;
|
|
135
|
+
/**
|
|
136
|
+
* Tells the subscribers of `evt`. PUBLIC because a game emits on the same channels: a second map of subscribers would be a
|
|
137
|
+
* second bus, and whoever subscribed in the wrong one would simply never be told — no error, no red test.
|
|
138
|
+
*/
|
|
139
|
+
emit<K extends keyof GameEvent>(evt: K, val: GameEvent[K]): void;
|
|
140
|
+
}
|
|
108
141
|
/**
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
* O `tsc` não podia pegar. Quem chama `setLevelExtras` é o `main.js`, que é JavaScript, então o tipo declarado
|
|
113
|
-
* aqui não tinha do outro lado nada que o contradissesse. É um argumento concreto para o `createGame()` do
|
|
114
|
-
* passo 4 nascer em TypeScript: enquanto o composition root for JS, todo contrato que só ele exercita é uma
|
|
115
|
-
* afirmação sem verificador.
|
|
116
|
-
*
|
|
117
|
-
* Mínimo ESTRUTURAL, como o `PlayerQuiz`: o `MapGateTile` de verdade mora em `game/level-geometry` e é
|
|
118
|
-
* atribuível a este. `core/` não importa de `game/`.
|
|
142
|
+
* Builds a settings store over `port`, READING THE CHILD'S STORED SETTINGS FIRST (ADR-0178): the composition root builds it
|
|
143
|
+
* before anything reads or writes a setting, so no write can put a default over what the child saved. The port is
|
|
144
|
+
* REQUIRED — an optional one falling back to a shared store would be the singleton again (ADR-0232, erratum D2b).
|
|
119
145
|
*/
|
|
120
|
-
export
|
|
121
|
-
readonly tx: number;
|
|
122
|
-
readonly ty: number;
|
|
123
|
-
}
|
|
124
|
-
export type LetterCase = 'mixed' | 'upper';
|
|
125
|
-
export declare let letterCase: LetterCase;
|
|
126
|
-
export declare function setLetterCaseValue(c: LetterCase): void;
|
|
127
|
-
export declare let captionsOn: boolean;
|
|
128
|
-
export declare function setCaptionsOnValue(on: boolean): void;
|
|
129
|
-
export declare let menuIndexOn: boolean;
|
|
130
|
-
export declare function setMenuIndexOnValue(on: boolean): void;
|
|
131
|
-
export declare let cbSafe: boolean;
|
|
132
|
-
export declare function setCbSafeValue(on: boolean): void;
|
|
133
|
-
export declare let ownerColors: boolean;
|
|
134
|
-
export declare function setOwnerColorsValue(on: boolean): void;
|
|
135
|
-
/** Espessura de contorno: 0 nenhum · 1 fino · 2 grosso. Fora da faixa satura, não rejeita. */
|
|
136
|
-
export type OutlineLevel = 0 | 1 | 2;
|
|
137
|
-
export declare let hcOutlineFg: OutlineLevel;
|
|
138
|
-
export declare function setOutlineFgValue(v: number): void;
|
|
139
|
-
export declare let hcOutlineBg: OutlineLevel;
|
|
140
|
-
export declare function setOutlineBgValue(v: number): void;
|
|
141
|
-
export declare let caneBlockDiv: number;
|
|
142
|
-
export declare function setCaneBlockDivValue(div: number): void;
|
|
143
|
-
export declare let wheelchair: boolean;
|
|
144
|
-
export declare function setWheelchairValue(on: boolean): void;
|
|
145
|
-
export declare let oneButton: boolean;
|
|
146
|
-
export declare function setOneButtonValue(on: boolean): void;
|
|
146
|
+
export declare function createSettingsStore(port: StatePort): SettingsStore;
|
|
147
147
|
export {};
|