@the-inclusionist/engine 8.0.0 → 10.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +89 -78
- package/app/css/style.css +584 -374
- package/app/public/vendor/fonts/bitter-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/bitter-var.woff2 +0 -0
- package/app/public/vendor/fonts/bodonimoda-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/bodonimoda-var.woff2 +0 -0
- package/app/public/vendor/fonts/cat-abril_fatface-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-abril_fatface-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-adlam_display-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-adlam_display-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-agu_display-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-agu_display-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-alfa_slab_one-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-alfa_slab_one-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-are_you_serious-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-are_you_serious-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-asimovian-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-asimovian-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-atkinson_hyperlegible_next-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-atkinson_hyperlegible_next-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bakbak_one-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bakbak_one-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bangers-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bangers-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-barriecito-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-barriecito-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-berkshire_swash-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-berkshire_swash-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bevan-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bevan-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bitcount-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bitcount-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bowlby_one_sc-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bowlby_one_sc-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bungee_shade-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-bungee_shade-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-charm-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-charm-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-charm-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-charm-700.woff2 +0 -0
- package/app/public/vendor/fonts/cat-cherry_bomb_one-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-cherry_bomb_one-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-chokokutai-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-chokokutai-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-chonburi-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-chonburi-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-climate_crisis-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-climate_crisis-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-cookie-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-dela_gothic_one-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-dela_gothic_one-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-fascinate_inline-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-fascinate_inline-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ga_maamli-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ga_maamli-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-itim-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-itim-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-jacquard_24-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-jacquard_24-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-kablammo-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-kablammo-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-kalam-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-kalam-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-kalam-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-kalam-700.woff2 +0 -0
- package/app/public/vendor/fonts/cat-katibeh-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-katibeh-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-lemonada-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-lemonada-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-lilita_one-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-lilita_one-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-lobster-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-lobster-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-luckiest_guy-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-luckiest_guy-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-marhey-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-marhey-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-modak-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-modak-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-momo_signature-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-momo_signature-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-monofett-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-monofett-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-monomakh-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-monomakh-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-monoton-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-monoton-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-nerko_one-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-nerko_one-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_adlam-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_adlam-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_arabic-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_arabic-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_devanagari-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_devanagari-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_hebrew-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_hebrew-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_jp-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_jp-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_khmer-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_khmer-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_kr-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_kr-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_sc-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_sc-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_thai-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-noto_sans_thai-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ole-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ole-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-pacifico-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-pacifico-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-patrick_hand-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-patrick_hand-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-petit_formal_script-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-petit_formal_script-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-pixelify_sans-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-pixelify_sans-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-plaster-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-plaster-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_ar_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_at-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_at_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_nsw-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_nsw_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_qld-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_qld_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_sa-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_sa_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_tas-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_tas_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_vic-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_au_vic_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_be_vlg-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_be_vlg_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_be_wal-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_be_wal_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_br_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_ca_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_cl_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_co_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_cu_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_cz-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_cz_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_de_grund-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_de_grund_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_de_la-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_de_la_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_de_sas-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_de_sas_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_de_va-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_de_va_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_dk_loopet-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_dk_loopet_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_dk_uloopet-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_dk_uloopet_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_es_deco_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_es_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_fr_moderne-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_fr_moderne_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_fr_trad-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_fr_trad_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_gb_j_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_gb_s_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_hr-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_hr_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_hr_lijeva-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_hr_lijeva_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_hu-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_hu_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_id-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_id_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_ie-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_ie_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_in-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_in_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_is-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_is_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_it_moderna-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_it_moderna_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_it_trad-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_it_trad_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_mx_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_ng_modern-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_ng_modern_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_nl-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_nl_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_no-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_no_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_nz-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_nz_basic-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_nz_basic_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_nz_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_pe_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_pl-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_pl_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_pt_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_ro-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_ro_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_sk-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_sk_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_tz-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_tz_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_us_modern_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_us_trad_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_vn-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_vn_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_za-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-playwrite_za_guides-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-potta_one-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-potta_one-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ranchers-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ranchers-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ranga-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ranga-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ranga-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ranga-700.woff2 +0 -0
- package/app/public/vendor/fonts/cat-risque-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-risque-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-rowdies-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-rowdies-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-rowdies-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-rowdies-700.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ruge_boogie-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ruge_boogie-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ruslan_display-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-ruslan_display-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sacramento-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sacramento-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sancreek-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sancreek-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sankofa_display-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sankofa_display-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sedgwick_ave_display-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sedgwick_ave_display-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-shantell_sans-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-shantell_sans-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-smokum-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-smokum-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-solitreo-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-solitreo-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-spicy_rice-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-spicy_rice-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sriracha-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-sriracha-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-srisakdi-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-srisakdi-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-srisakdi-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-srisakdi-700.woff2 +0 -0
- package/app/public/vendor/fonts/cat-stix_two_math-400-0.woff2 +0 -0
- package/app/public/vendor/fonts/cat-tillana-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-tillana-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-tillana-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-tillana-700.woff2 +0 -0
- package/app/public/vendor/fonts/cat-titan_one-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-titan_one-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-yatra_one-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-yatra_one-400.woff2 +0 -0
- package/app/public/vendor/fonts/cat-yomogi-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/cat-yomogi-400.woff2 +0 -0
- package/app/public/vendor/fonts/dmserifdisplay-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/dmserifdisplay-400.woff2 +0 -0
- package/app/public/vendor/fonts/domine-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/domine-var.woff2 +0 -0
- package/app/public/vendor/fonts/fraunces-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/fraunces-var.woff2 +0 -0
- package/app/public/vendor/fonts/fredoka-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/fredoka-var.woff2 +0 -0
- package/app/public/vendor/fonts/jakarta-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/jakarta-var.woff2 +0 -0
- package/app/public/vendor/fonts/lora-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/lora-var.woff2 +0 -0
- package/app/public/vendor/fonts/merriweather-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/merriweather-var.woff2 +0 -0
- package/app/public/vendor/fonts/notosans-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/notosans-var.woff2 +0 -0
- package/app/public/vendor/fonts/nunito-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/nunito-var.woff2 +0 -0
- package/app/public/vendor/fonts/playfair-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/playfair-var.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-cu.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-es-deco.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-es.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-gb-j.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-gb-s.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-pe.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-pt.woff2 +0 -0
- package/app/public/vendor/fonts/quicksand-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/quicksand-var.woff2 +0 -0
- package/app/public/vendor/fonts/robotoflex-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/robotoflex-var.woff2 +0 -0
- package/app/public/vendor/fonts/sora-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/sora-var.woff2 +0 -0
- package/app/public/vendor/fonts/spacegrotesk-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/spacegrotesk-var.woff2 +0 -0
- package/app/public/vendor/fonts/spectral-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/spectral-400.woff2 +0 -0
- package/app/public/vendor/fonts/spectral-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/spectral-700.woff2 +0 -0
- package/app/public/vendor/fonts/teachers-var-ext.woff2 +0 -0
- package/app/public/vendor/fonts/teachers-var.woff2 +0 -0
- package/app/public/vendor/fonts/ubuntu-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/ubuntu-400.woff2 +0 -0
- package/app/public/vendor/fonts/ubuntu-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/ubuntu-700.woff2 +0 -0
- package/app/public/vendor/fonts.css +1167 -51
- package/dist-pkg/boot/create-game.d.ts +467 -162
- package/dist-pkg/boot/create-game.js +3563 -426
- package/dist-pkg/core/a11y-sr.d.ts +25 -3
- package/dist-pkg/core/a11y-sr.js +40 -19
- package/dist-pkg/core/accessible-label.d.ts +17 -0
- package/dist-pkg/core/accessible-label.js +37 -0
- package/dist-pkg/core/accommodation-subjects.d.ts +26 -0
- package/dist-pkg/core/accommodation-subjects.js +32 -0
- package/dist-pkg/core/accommodations.d.ts +107 -0
- package/dist-pkg/core/accommodations.js +178 -0
- package/dist-pkg/core/actions.d.ts +75 -51
- package/dist-pkg/core/actions.js +98 -69
- package/dist-pkg/core/calm-mode.d.ts +31 -0
- package/dist-pkg/core/calm-mode.js +47 -0
- package/dist-pkg/core/camera-cycle.d.ts +15 -0
- package/dist-pkg/core/camera-cycle.js +7 -0
- package/dist-pkg/core/caption-duration.d.ts +15 -0
- package/dist-pkg/core/caption-duration.js +19 -0
- package/dist-pkg/core/cartridge-problems.d.ts +34 -0
- package/dist-pkg/core/cartridge-problems.js +53 -0
- package/dist-pkg/core/constants.d.ts +0 -54
- package/dist-pkg/core/constants.js +9 -76
- package/dist-pkg/core/contract.d.ts +143 -163
- package/dist-pkg/core/contract.js +223 -207
- package/dist-pkg/core/dom-query.d.ts +4 -4
- package/dist-pkg/core/dom-query.js +12 -20
- package/dist-pkg/core/entity.d.ts +62 -77
- package/dist-pkg/core/entity.js +18 -32
- package/dist-pkg/core/escape-html.d.ts +9 -10
- package/dist-pkg/core/escape-html.js +16 -20
- package/dist-pkg/core/flash-threshold.d.ts +17 -0
- package/dist-pkg/core/flash-threshold.js +113 -0
- package/dist-pkg/core/game-speed.d.ts +11 -0
- package/dist-pkg/core/game-speed.js +16 -0
- package/dist-pkg/core/genres.d.ts +20 -0
- package/dist-pkg/core/genres.js +44 -0
- package/dist-pkg/core/i18n.d.ts +87 -41
- package/dist-pkg/core/i18n.js +206 -153
- package/dist-pkg/core/loop.d.ts +17 -6
- package/dist-pkg/core/loop.js +26 -26
- package/dist-pkg/core/pause-icon-catalogue.d.ts +15 -0
- package/dist-pkg/core/pause-icon-catalogue.js +54 -0
- package/dist-pkg/core/ring.d.ts +17 -0
- package/dist-pkg/core/ring.js +29 -0
- package/dist-pkg/core/rng.d.ts +7 -12
- package/dist-pkg/core/rng.js +23 -53
- package/dist-pkg/core/route.d.ts +26 -26
- package/dist-pkg/core/route.js +126 -121
- package/dist-pkg/core/scenes.d.ts +37 -40
- package/dist-pkg/core/scenes.js +41 -43
- package/dist-pkg/core/screens.d.ts +4 -4
- package/dist-pkg/core/screens.js +11 -16
- package/dist-pkg/core/setting-defaults.d.ts +61 -0
- package/dist-pkg/core/setting-defaults.js +66 -0
- package/dist-pkg/core/speech-rate.d.ts +29 -0
- package/dist-pkg/core/speech-rate.js +47 -0
- package/dist-pkg/core/state.d.ts +118 -118
- package/dist-pkg/core/state.js +322 -297
- package/dist-pkg/core/visual-cycles.d.ts +30 -0
- package/dist-pkg/core/visual-cycles.js +52 -0
- package/dist-pkg/core/visual-state.d.ts +13 -0
- package/dist-pkg/core/visual-state.js +6 -0
- package/dist-pkg/educational/activities-registry.d.ts +1 -1
- package/dist-pkg/educational/activities-registry.js +9 -8
- package/dist-pkg/educational/adaptive-engine.d.ts +11 -11
- package/dist-pkg/educational/adaptive-engine.js +17 -17
- package/dist-pkg/educational/segment-bar.d.ts +12 -12
- package/dist-pkg/educational/segment-bar.js +9 -9
- package/dist-pkg/i18n/en.js +321 -215
- package/dist-pkg/i18n/es.js +320 -215
- package/dist-pkg/i18n/pt.js +342 -215
- package/dist-pkg/input/default-bindings.d.ts +37 -38
- package/dist-pkg/input/default-bindings.js +127 -144
- package/dist-pkg/input/devices.d.ts +7 -7
- package/dist-pkg/input/devices.js +17 -16
- package/dist-pkg/input/edges.d.ts +23 -32
- package/dist-pkg/input/edges.js +23 -28
- package/dist-pkg/input/empathy-filter.d.ts +22 -0
- package/dist-pkg/input/empathy-filter.js +34 -0
- package/dist-pkg/input/face-map.d.ts +96 -0
- package/dist-pkg/input/face-map.js +255 -0
- package/dist-pkg/input/face-signals.d.ts +40 -0
- package/dist-pkg/input/face-signals.js +48 -0
- package/dist-pkg/input/gamepad.d.ts +164 -145
- package/dist-pkg/input/gamepad.js +351 -559
- package/dist-pkg/input/gaze-cycle.d.ts +64 -0
- package/dist-pkg/input/gaze-cycle.js +133 -0
- package/dist-pkg/input/gaze-relative.d.ts +68 -0
- package/dist-pkg/input/gaze-relative.js +142 -0
- package/dist-pkg/input/hand-map.d.ts +28 -0
- package/dist-pkg/input/hand-map.js +142 -0
- package/dist-pkg/input/input-cooldown.d.ts +17 -0
- package/dist-pkg/input/input-cooldown.js +39 -0
- package/dist-pkg/input/keyboard-runtime.d.ts +18 -20
- package/dist-pkg/input/keyboard-runtime.js +23 -27
- package/dist-pkg/input/keyboard.d.ts +68 -62
- package/dist-pkg/input/keyboard.js +83 -105
- package/dist-pkg/input/keydown.d.ts +124 -132
- package/dist-pkg/input/keydown.js +283 -288
- package/dist-pkg/input/latch-edge.d.ts +25 -21
- package/dist-pkg/input/latch-edge.js +33 -35
- package/dist-pkg/input/latch-scope.d.ts +43 -47
- package/dist-pkg/input/latch-scope.js +66 -75
- package/dist-pkg/input/latch-store.d.ts +28 -29
- package/dist-pkg/input/latch-store.js +44 -47
- package/dist-pkg/input/latch-sync.d.ts +28 -29
- package/dist-pkg/input/latch-sync.js +25 -25
- package/dist-pkg/input/latch.d.ts +14 -17
- package/dist-pkg/input/latch.js +29 -37
- package/dist-pkg/input/pad-defaults.d.ts +13 -16
- package/dist-pkg/input/pad-defaults.js +21 -28
- package/dist-pkg/input/pad-reading.d.ts +76 -0
- package/dist-pkg/input/pad-reading.js +164 -0
- package/dist-pkg/input/pad-wizard.d.ts +96 -0
- package/dist-pkg/input/pad-wizard.js +205 -0
- package/dist-pkg/input/pointer-space.d.ts +19 -20
- package/dist-pkg/input/pointer-space.js +27 -32
- package/dist-pkg/input/pointer.d.ts +39 -40
- package/dist-pkg/input/pointer.js +42 -45
- package/dist-pkg/input/state.d.ts +101 -89
- package/dist-pkg/input/state.js +54 -134
- package/dist-pkg/input/switch-scan.d.ts +42 -0
- package/dist-pkg/input/switch-scan.js +54 -0
- package/dist-pkg/input/synthetic-source.d.ts +42 -0
- package/dist-pkg/input/synthetic-source.js +57 -0
- package/dist-pkg/input/touch-bindings.d.ts +127 -113
- package/dist-pkg/input/touch-bindings.js +158 -173
- package/dist-pkg/input/touch.d.ts +130 -70
- package/dist-pkg/input/touch.js +321 -123
- package/dist-pkg/input/transport-in-use.d.ts +107 -0
- package/dist-pkg/input/transport-in-use.js +130 -0
- package/dist-pkg/input/transports.d.ts +96 -114
- package/dist-pkg/input/transports.js +104 -106
- package/dist-pkg/input/virtual-controller.d.ts +46 -0
- package/dist-pkg/input/virtual-controller.js +41 -0
- package/dist-pkg/input/vocabulary-migration.d.ts +50 -49
- package/dist-pkg/input/vocabulary-migration.js +80 -79
- package/dist-pkg/input/voice-map.d.ts +43 -0
- package/dist-pkg/input/voice-map.js +125 -0
- package/dist-pkg/platform/audio-ambient.d.ts +13 -1
- package/dist-pkg/platform/audio-ambient.js +11 -13
- package/dist-pkg/platform/audio-earcons.d.ts +20 -19
- package/dist-pkg/platform/audio-earcons.js +51 -42
- package/dist-pkg/platform/audio-jingles.js +9 -10
- package/dist-pkg/platform/audio-mixer.d.ts +14 -2
- package/dist-pkg/platform/audio-mixer.js +36 -39
- package/dist-pkg/platform/audio-sonar.d.ts +96 -113
- package/dist-pkg/platform/audio-sonar.js +245 -238
- package/dist-pkg/platform/audio.d.ts +53 -19
- package/dist-pkg/platform/audio.js +161 -169
- package/dist-pkg/platform/flash-sampler.d.ts +19 -0
- package/dist-pkg/platform/flash-sampler.js +79 -0
- package/dist-pkg/platform/guide-intensity.d.ts +26 -27
- package/dist-pkg/platform/guide-intensity.js +50 -52
- package/dist-pkg/platform/heavy-catalogue.d.ts +31 -0
- package/dist-pkg/platform/heavy-catalogue.js +223 -0
- package/dist-pkg/platform/heavy-mirror.d.ts +26 -0
- package/dist-pkg/platform/heavy-mirror.js +76 -0
- package/dist-pkg/platform/heavy.d.ts +104 -0
- package/dist-pkg/platform/heavy.js +169 -0
- package/dist-pkg/platform/interruptible-speech.d.ts +16 -16
- package/dist-pkg/platform/interruptible-speech.js +50 -51
- package/dist-pkg/platform/kokoro-port.d.ts +27 -0
- package/dist-pkg/platform/kokoro-port.js +50 -0
- package/dist-pkg/platform/kokoro-runtime.d.ts +20 -0
- package/dist-pkg/platform/kokoro-runtime.js +52 -0
- package/dist-pkg/platform/kokoro.d.ts +70 -0
- package/dist-pkg/platform/kokoro.js +133 -0
- package/dist-pkg/platform/listener-scope.d.ts +12 -0
- package/dist-pkg/platform/listener-scope.js +81 -0
- package/dist-pkg/platform/locale-host.d.ts +10 -0
- package/dist-pkg/platform/locale-host.js +34 -0
- package/dist-pkg/platform/microphone.d.ts +51 -0
- package/dist-pkg/platform/microphone.js +118 -0
- package/dist-pkg/platform/onnx-runtime.d.ts +34 -0
- package/dist-pkg/platform/onnx-runtime.js +42 -0
- package/dist-pkg/platform/reading-in-worker.d.ts +40 -0
- package/dist-pkg/platform/reading-in-worker.js +87 -0
- package/dist-pkg/platform/reading-model.d.ts +73 -0
- package/dist-pkg/platform/reading-model.js +247 -0
- package/dist-pkg/platform/reading-runtime.d.ts +24 -0
- package/dist-pkg/platform/reading-runtime.js +159 -0
- package/dist-pkg/platform/reading-worker.d.ts +41 -0
- package/dist-pkg/platform/reading-worker.js +58 -0
- package/dist-pkg/platform/reading.d.ts +69 -0
- package/dist-pkg/platform/reading.js +128 -0
- package/dist-pkg/platform/speech-recognition.d.ts +51 -0
- package/dist-pkg/platform/speech-recognition.js +84 -0
- package/dist-pkg/platform/speech.d.ts +14 -1
- package/dist-pkg/platform/speech.js +13 -13
- package/dist-pkg/platform/storage-keys.d.ts +96 -0
- package/dist-pkg/platform/storage-keys.js +106 -0
- package/dist-pkg/platform/storage.d.ts +46 -111
- package/dist-pkg/platform/storage.js +104 -169
- package/dist-pkg/platform/tts.d.ts +51 -38
- package/dist-pkg/platform/tts.js +217 -119
- package/dist-pkg/platform/vision-loop.d.ts +23 -0
- package/dist-pkg/platform/vision-loop.js +56 -0
- package/dist-pkg/platform/vision.d.ts +132 -0
- package/dist-pkg/platform/vision.js +117 -0
- package/dist-pkg/platform/voice-listener.d.ts +36 -0
- package/dist-pkg/platform/voice-listener.js +88 -0
- package/dist-pkg/platform/voice-plan.d.ts +6 -102
- package/dist-pkg/platform/voice-plan.js +9 -151
- package/dist-pkg/platform/vosk-runtime.d.ts +71 -0
- package/dist-pkg/platform/vosk-runtime.js +93 -0
- package/dist-pkg/render/canvas.d.ts +13 -7
- package/dist-pkg/render/canvas.js +13 -13
- package/dist-pkg/render/crt.d.ts +46 -12
- package/dist-pkg/render/crt.js +82 -80
- package/dist-pkg/render/cvd-matrices.d.ts +18 -18
- package/dist-pkg/render/cvd-matrices.js +33 -38
- package/dist-pkg/render/hc-role-data.d.ts +7 -7
- package/dist-pkg/render/hc-role-data.js +14 -14
- package/dist-pkg/render/high-contrast.d.ts +66 -54
- package/dist-pkg/render/high-contrast.js +221 -216
- package/dist-pkg/render/low-vision-drawing.d.ts +5 -0
- package/dist-pkg/render/low-vision-drawing.js +46 -0
- package/dist-pkg/render/lq-filter.d.ts +32 -20
- package/dist-pkg/render/lq-filter.js +59 -65
- package/dist-pkg/render/port.d.ts +86 -88
- package/dist-pkg/render/port.js +17 -23
- package/dist-pkg/render/screen-pipeline.d.ts +42 -42
- package/dist-pkg/render/screen-pipeline.js +80 -87
- package/dist-pkg/render/sprite-fx.d.ts +2 -1
- package/dist-pkg/render/sprite-fx.js +16 -14
- package/dist-pkg/render/viewports.d.ts +20 -15
- package/dist-pkg/render/viewports.js +83 -114
- package/dist-pkg/render/viz-axes-labels.d.ts +47 -0
- package/dist-pkg/render/viz-axes-labels.js +88 -0
- package/dist-pkg/render/viz-axes.d.ts +80 -86
- package/dist-pkg/render/viz-axes.js +115 -116
- package/dist-pkg/render/viz-modes.d.ts +28 -29
- package/dist-pkg/render/viz-modes.js +40 -45
- package/dist-pkg/render/viz-refusal.d.ts +32 -0
- package/dist-pkg/render/viz-refusal.js +57 -0
- package/dist-pkg/render/viz-setters.d.ts +104 -66
- package/dist-pkg/render/viz-setters.js +182 -191
- package/dist-pkg/ui/aac-sets.d.ts +40 -0
- package/dist-pkg/ui/aac-sets.js +49 -0
- package/dist-pkg/ui/audio-choices.d.ts +63 -0
- package/dist-pkg/ui/audio-choices.js +94 -0
- package/dist-pkg/ui/audio-rows-that-apply.d.ts +12 -0
- package/dist-pkg/ui/audio-rows-that-apply.js +43 -0
- package/dist-pkg/ui/camera-control.d.ts +6 -0
- package/dist-pkg/ui/camera-control.js +14 -0
- package/dist-pkg/ui/changed-mark.d.ts +9 -8
- package/dist-pkg/ui/changed-mark.js +22 -53
- package/dist-pkg/ui/control-choices.d.ts +37 -0
- package/dist-pkg/ui/control-choices.js +84 -0
- package/dist-pkg/ui/debug-panel.d.ts +59 -43
- package/dist-pkg/ui/debug-panel.js +68 -69
- package/dist-pkg/ui/dom.d.ts +10 -14
- package/dist-pkg/ui/dom.js +10 -47
- package/dist-pkg/ui/drawing-problems.d.ts +25 -0
- package/dist-pkg/ui/drawing-problems.js +93 -0
- package/dist-pkg/ui/eye-control.d.ts +36 -0
- package/dist-pkg/ui/eye-control.js +178 -0
- package/dist-pkg/ui/face-control.d.ts +25 -0
- package/dist-pkg/ui/face-control.js +183 -0
- package/dist-pkg/ui/focus-trap.d.ts +39 -49
- package/dist-pkg/ui/focus-trap.js +56 -65
- package/dist-pkg/ui/fonts.d.ts +118 -63
- package/dist-pkg/ui/fonts.js +267 -111
- package/dist-pkg/ui/game-options.d.ts +42 -0
- package/dist-pkg/ui/game-options.js +138 -0
- package/dist-pkg/ui/gaze-overlay.d.ts +64 -0
- package/dist-pkg/ui/gaze-overlay.js +165 -0
- package/dist-pkg/ui/hand-control.d.ts +25 -0
- package/dist-pkg/ui/hand-control.js +143 -0
- package/dist-pkg/ui/help-panel.d.ts +76 -0
- package/dist-pkg/ui/help-panel.js +232 -0
- package/dist-pkg/ui/hud-bands.d.ts +45 -0
- package/dist-pkg/ui/hud-bands.js +108 -0
- package/dist-pkg/ui/hud.d.ts +73 -70
- package/dist-pkg/ui/hud.js +94 -98
- package/dist-pkg/ui/item-announcement.d.ts +13 -12
- package/dist-pkg/ui/item-announcement.js +25 -26
- package/dist-pkg/ui/latch-refusal.d.ts +22 -21
- package/dist-pkg/ui/latch-refusal.js +37 -37
- package/dist-pkg/ui/layout.d.ts +103 -28
- package/dist-pkg/ui/layout.js +114 -99
- package/dist-pkg/ui/locale-flags.d.ts +16 -0
- package/dist-pkg/ui/locale-flags.js +30 -0
- package/dist-pkg/ui/loop-crash.d.ts +17 -17
- package/dist-pkg/ui/loop-crash.js +33 -62
- package/dist-pkg/ui/menu-intent.d.ts +32 -0
- package/dist-pkg/ui/menu-intent.js +54 -0
- package/dist-pkg/ui/menu-items.d.ts +10 -0
- package/dist-pkg/ui/menu-items.js +22 -0
- package/dist-pkg/ui/menu-nav.d.ts +60 -90
- package/dist-pkg/ui/menu-nav.js +301 -274
- package/dist-pkg/ui/mobility-choices.d.ts +26 -0
- package/dist-pkg/ui/mobility-choices.js +41 -0
- package/dist-pkg/ui/motion-choices.d.ts +31 -0
- package/dist-pkg/ui/motion-choices.js +68 -0
- package/dist-pkg/ui/motion-scene.d.ts +24 -19
- package/dist-pkg/ui/motion-scene.js +29 -61
- package/dist-pkg/ui/mount-panel.d.ts +81 -0
- package/dist-pkg/ui/mount-panel.js +61 -0
- package/dist-pkg/ui/panel-shell.d.ts +65 -31
- package/dist-pkg/ui/panel-shell.js +92 -66
- package/dist-pkg/ui/panel-widgets.d.ts +116 -0
- package/dist-pkg/ui/panel-widgets.js +208 -0
- package/dist-pkg/ui/pause-buttons.d.ts +35 -0
- package/dist-pkg/ui/pause-buttons.js +66 -0
- package/dist-pkg/ui/pause-icons.d.ts +250 -343
- package/dist-pkg/ui/pause-icons.js +614 -605
- package/dist-pkg/ui/pause-markup.d.ts +86 -0
- package/dist-pkg/ui/pause-markup.js +125 -0
- package/dist-pkg/ui/reach-notice.d.ts +22 -23
- package/dist-pkg/ui/reach-notice.js +55 -58
- package/dist-pkg/ui/scan-overlay.d.ts +23 -0
- package/dist-pkg/ui/scan-overlay.js +42 -0
- package/dist-pkg/ui/settings-aac.d.ts +68 -0
- package/dist-pkg/ui/settings-aac.js +189 -0
- package/dist-pkg/ui/settings-audio.d.ts +91 -113
- package/dist-pkg/ui/settings-audio.js +407 -405
- package/dist-pkg/ui/settings-controls.d.ts +53 -92
- package/dist-pkg/ui/settings-controls.js +143 -215
- package/dist-pkg/ui/settings-empathy.d.ts +39 -30
- package/dist-pkg/ui/settings-empathy.js +53 -60
- package/dist-pkg/ui/settings-mobility.d.ts +195 -0
- package/dist-pkg/ui/settings-mobility.js +374 -0
- package/dist-pkg/ui/settings-motion.d.ts +91 -70
- package/dist-pkg/ui/settings-motion.js +287 -198
- package/dist-pkg/ui/settings-panel.d.ts +48 -45
- package/dist-pkg/ui/settings-panel.js +164 -93
- package/dist-pkg/ui/settings-typo.d.ts +28 -76
- package/dist-pkg/ui/settings-typo.js +145 -125
- package/dist-pkg/ui/settings-visual.d.ts +29 -87
- package/dist-pkg/ui/settings-visual.js +240 -193
- package/dist-pkg/ui/shell.d.ts +113 -134
- package/dist-pkg/ui/shell.js +143 -216
- package/dist-pkg/ui/simulation-list.d.ts +27 -0
- package/dist-pkg/ui/simulation-list.js +76 -0
- package/dist-pkg/ui/simulation-over-the-world.d.ts +23 -0
- package/dist-pkg/ui/simulation-over-the-world.js +131 -0
- package/dist-pkg/ui/simulation-refusal.d.ts +5 -31
- package/dist-pkg/ui/simulation-refusal.js +8 -56
- package/dist-pkg/ui/switchable-control.d.ts +11 -0
- package/dist-pkg/ui/switchable-control.js +19 -0
- package/dist-pkg/ui/title.d.ts +4 -4
- package/dist-pkg/ui/title.js +11 -13
- package/dist-pkg/ui/top-band.d.ts +24 -0
- package/dist-pkg/ui/top-band.js +100 -0
- package/dist-pkg/ui/typo-choices.d.ts +71 -0
- package/dist-pkg/ui/typo-choices.js +84 -0
- package/dist-pkg/ui/visual-axes-panel.d.ts +11 -47
- package/dist-pkg/ui/visual-axes-panel.js +12 -94
- package/dist-pkg/ui/visual-choices.d.ts +77 -0
- package/dist-pkg/ui/visual-choices.js +107 -0
- package/dist-pkg/ui/vlibras.d.ts +33 -10
- package/dist-pkg/ui/vlibras.js +58 -81
- package/dist-pkg/ui/voice-control.d.ts +46 -0
- package/dist-pkg/ui/voice-control.js +143 -0
- package/dist-pkg/ui/voice-settings.d.ts +96 -0
- package/dist-pkg/ui/voice-settings.js +302 -0
- package/dist-pkg/ui/where-the-child-is.d.ts +31 -0
- package/dist-pkg/ui/where-the-child-is.js +70 -0
- package/docs/CREDITS.md +198 -54
- package/docs/LICENSES.md +160 -145
- package/package.json +24 -25
- package/scripts/heavy-into-the-delivery.mjs +144 -0
- package/scripts/licences/Apache-2.0.txt +176 -0
- package/scripts/licences/GPL-3.0.txt +674 -0
- package/scripts/licences/MIT.txt +17 -0
- package/scripts/licences/third-party.mjs +287 -0
- package/scripts/licences/vosk-browser.NOTICE.txt +268 -0
- package/app/public/vendor/fonts/comicneue-400.woff2 +0 -0
- package/app/public/vendor/fonts/comicneue-700.woff2 +0 -0
- package/dist-pkg/core/anel.d.ts +0 -17
- package/dist-pkg/core/anel.js +0 -31
- package/dist-pkg/core/collision.d.ts +0 -21
- package/dist-pkg/core/collision.js +0 -62
- package/dist-pkg/core/layers.d.ts +0 -63
- package/dist-pkg/core/layers.js +0 -95
- package/dist-pkg/core/letter-grid.d.ts +0 -55
- package/dist-pkg/core/letter-grid.js +0 -116
- package/dist-pkg/core/password.d.ts +0 -34
- package/dist-pkg/core/password.js +0 -205
- package/dist-pkg/core/rotulo-acessivel.d.ts +0 -17
- package/dist-pkg/core/rotulo-acessivel.js +0 -41
- package/dist-pkg/core/run-state.d.ts +0 -115
- package/dist-pkg/core/run-state.js +0 -40
- package/dist-pkg/core/tiles.d.ts +0 -12
- package/dist-pkg/core/tiles.js +0 -61
- package/dist-pkg/core/world.d.ts +0 -4
- package/dist-pkg/core/world.js +0 -58
- package/dist-pkg/input/origem-sintetica.d.ts +0 -44
- package/dist-pkg/input/origem-sintetica.js +0 -60
- package/dist-pkg/input/transporte-em-uso.d.ts +0 -101
- package/dist-pkg/input/transporte-em-uso.js +0 -130
- package/dist-pkg/platform/audio-nav.d.ts +0 -51
- package/dist-pkg/platform/audio-nav.js +0 -99
- package/dist-pkg/platform/pesados-catalogo.d.ts +0 -14
- package/dist-pkg/platform/pesados-catalogo.js +0 -177
- package/dist-pkg/platform/pesados.d.ts +0 -31
- package/dist-pkg/platform/pesados.js +0 -75
- package/dist-pkg/platform/vozes-prontas.d.ts +0 -28
- package/dist-pkg/platform/vozes-prontas.js +0 -61
- package/dist-pkg/render/camera.d.ts +0 -58
- package/dist-pkg/render/camera.js +0 -105
- package/dist-pkg/render/cenario-data.d.ts +0 -127
- package/dist-pkg/render/cenario-data.js +0 -145
- package/dist-pkg/render/city-tex.d.ts +0 -63
- package/dist-pkg/render/city-tex.js +0 -228
- package/dist-pkg/render/city-tiles.d.ts +0 -11
- package/dist-pkg/render/city-tiles.js +0 -140
- package/dist-pkg/render/draw.d.ts +0 -149
- package/dist-pkg/render/draw.js +0 -231
- package/dist-pkg/render/fx.d.ts +0 -63
- package/dist-pkg/render/fx.js +0 -123
- package/dist-pkg/render/minimap.d.ts +0 -11
- package/dist-pkg/render/minimap.js +0 -94
- package/dist-pkg/render/parallax.d.ts +0 -85
- package/dist-pkg/render/parallax.js +0 -158
- package/dist-pkg/render/player-anim.d.ts +0 -71
- package/dist-pkg/render/player-anim.js +0 -152
- package/dist-pkg/render/recycling-tex.d.ts +0 -48
- package/dist-pkg/render/recycling-tex.js +0 -164
- package/dist-pkg/render/scene-city.d.ts +0 -77
- package/dist-pkg/render/scene-city.js +0 -181
- package/dist-pkg/render/scene-parallax.d.ts +0 -72
- package/dist-pkg/render/scene-parallax.js +0 -426
- package/dist-pkg/render/scene-sky.d.ts +0 -126
- package/dist-pkg/render/scene-sky.js +0 -295
- package/dist-pkg/render/set-cenario.d.ts +0 -54
- package/dist-pkg/render/set-cenario.js +0 -103
- package/dist-pkg/render/textures.d.ts +0 -75
- package/dist-pkg/render/textures.js +0 -240
- package/dist-pkg/render/title-scene.d.ts +0 -46
- package/dist-pkg/render/title-scene.js +0 -75
- package/dist-pkg/render/weather.d.ts +0 -96
- package/dist-pkg/render/weather.js +0 -171
- package/dist-pkg/render/wheelchair-sprites.d.ts +0 -32
- package/dist-pkg/render/wheelchair-sprites.js +0 -69
- package/dist-pkg/render/world-tex.d.ts +0 -18
- package/dist-pkg/render/world-tex.js +0 -87
- package/dist-pkg/ui/activities-menu.d.ts +0 -258
- package/dist-pkg/ui/activities-menu.js +0 -648
- package/dist-pkg/ui/caa-sets.d.ts +0 -39
- package/dist-pkg/ui/caa-sets.js +0 -65
- package/dist-pkg/ui/map-hub.d.ts +0 -56
- package/dist-pkg/ui/map-hub.js +0 -138
- package/dist-pkg/ui/settings-caa.d.ts +0 -45
- package/dist-pkg/ui/settings-caa.js +0 -137
- package/dist-pkg/ui/settings-motor.d.ts +0 -175
- package/dist-pkg/ui/settings-motor.js +0 -342
- package/dist-pkg/ui/webcam.d.ts +0 -7
- package/dist-pkg/ui/webcam.js +0 -93
|
@@ -1,29 +1,27 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
2
|
import type { Action } from './actions.js';
|
|
3
|
-
import type { VisualState } from '
|
|
3
|
+
import type { VisualState } from './visual-state.js';
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* Action → list of physical codes (`KeyA`, `ArrowLeft`…). The single source: it was written three times in input/.
|
|
6
6
|
*
|
|
7
|
-
* ⚠️
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
7
|
+
* ⚠️ CLOSED OVER `Action` (issue #118, the Dev's decision); it was `Record<string, string[]>`. While it was open,
|
|
8
|
+
* **a missing position was no compile error** — that is how a two-player scheme ended up with eight of the fourteen and
|
|
9
|
+
* player 1's `Space` vanished with nothing going off. The defect was not a typo: the type accepted an incomplete scheme
|
|
10
|
+
* as complete.
|
|
11
11
|
*
|
|
12
|
-
* ⚠️
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
12
|
+
* ⚠️ AND `null` IS NOT A HOLE — it is a DECLARED ABSENCE, the half that gives closing the type its meaning. A keyboard
|
|
13
|
+
* split four ways may have no physical room for shoulders and triggers; `null` says so, and it is what the reach notice
|
|
14
|
+
* (`ui/reach-notice`, issue #112) reads to tell the child, BEFORE they start, which of the game's actions their
|
|
15
|
+
* controls cannot reach. Inventing keys to fill it would lie to them in silence.
|
|
16
16
|
*
|
|
17
|
-
*
|
|
18
|
-
* `ui/settings-controls` fazem-no, e é isso que impede um `null` de virar um `undefined.includes`.
|
|
17
|
+
* Consumers have to handle the `null`, and that is what keeps a `null` from becoming an `undefined.includes`.
|
|
19
18
|
*/
|
|
20
19
|
export type KeyScheme = Record<Action, readonly string[] | null>;
|
|
21
|
-
/**
|
|
20
|
+
/** The sides a clinging player can stick to: right, left, ceiling, floor. */
|
|
22
21
|
export type ClingSide = 'R' | 'L' | 'U' | 'D';
|
|
23
22
|
/**
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* a lógica rode no project `node` com um sprite de mentira.
|
|
23
|
+
* The player's sprite as the game sees it: position, opacity, scale and texture. A PIXI.Sprite reduced to what the
|
|
24
|
+
* game writes on it, on purpose, so the logic runs in the `node` project with a fake sprite.
|
|
27
25
|
*/
|
|
28
26
|
export interface PlayerSpriteLike {
|
|
29
27
|
x: number;
|
|
@@ -36,13 +34,12 @@ export interface PlayerSpriteLike {
|
|
|
36
34
|
texture: unknown;
|
|
37
35
|
}
|
|
38
36
|
/**
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
37
|
+
* THE PLAYER. The fields down to `_swapSonar` are the ones the player factory creates — all required, because the
|
|
38
|
+
* factory always writes them. After them come the ones other subsystems ADD at run time, optional because a freshly
|
|
39
|
+
* made player genuinely does not have them.
|
|
42
40
|
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
* deste arquivo.
|
|
41
|
+
* The split is not cosmetic: two modules reading the SAME object used to disagree about which side of this line a
|
|
42
|
+
* field falls on. Writing it down is half the value of this file.
|
|
46
43
|
*/
|
|
47
44
|
export interface Player {
|
|
48
45
|
i: number;
|
|
@@ -54,7 +51,7 @@ export interface Player {
|
|
|
54
51
|
onLadder: boolean;
|
|
55
52
|
inWater: boolean;
|
|
56
53
|
clinging: boolean;
|
|
57
|
-
/**
|
|
54
|
+
/** The side the player is clinging to; `null` when not clinging. */
|
|
58
55
|
clingN: ClingSide | null;
|
|
59
56
|
flying: boolean;
|
|
60
57
|
airTime: number;
|
|
@@ -67,7 +64,7 @@ export interface Player {
|
|
|
67
64
|
groundIdle: number;
|
|
68
65
|
flavor: number;
|
|
69
66
|
flavorT: number;
|
|
70
|
-
/**
|
|
67
|
+
/** The current frame. Opaque to the game — the texture is the renderer's business. */
|
|
71
68
|
_tx: unknown;
|
|
72
69
|
jumpBuffer: number;
|
|
73
70
|
jumpChain: number;
|
|
@@ -85,45 +82,37 @@ export interface Player {
|
|
|
85
82
|
activePower: string;
|
|
86
83
|
hasKey: boolean;
|
|
87
84
|
/**
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
* apagada: quem estreitar precisa fazê-lo explicitamente, no ponto onde sabe que já foi atribuído.
|
|
85
|
+
* The key scheme. A player is born with `null` and `assignControls` fills it at boot — hence the `| null`. Modules
|
|
86
|
+
* that only run after boot may treat it as non-null, which is true at that instant but not in the type: a REAL
|
|
87
|
+
* divergence, left visible on purpose — whoever narrows it does so explicitly, where they know it was assigned.
|
|
92
88
|
*/
|
|
93
89
|
ctrl: KeyScheme | null;
|
|
94
|
-
/**
|
|
90
|
+
/** The gamepad index, or -1 when the player has no physical pad. */
|
|
95
91
|
pad: number;
|
|
96
92
|
/**
|
|
97
|
-
*
|
|
93
|
+
* This child's VISUAL STATE, in TWO AXES plus the simulation (ADR-0076, issue #104).
|
|
98
94
|
*
|
|
99
|
-
*
|
|
100
|
-
* ESTADO discutivelmente devia morar aqui em vez de lá. Fica assim de propósito e declarado: é só tipo,
|
|
101
|
-
* apagado em execução, sem aresta em runtime — e mover o módulo a meio da migração seria churn no ficheiro
|
|
102
|
-
* mais partilhado do repositório. Se `viz-axes` se dividir um dia, o `VisualState` vem para `core/` e as
|
|
103
|
-
* funções de renderização ficam lá.
|
|
95
|
+
* The shape lives in `core/visual-state`; `render/viz-axes` applies it (issue #167).
|
|
104
96
|
*/
|
|
105
97
|
visual: VisualState;
|
|
106
98
|
/**
|
|
107
|
-
* @deprecated ⚠️
|
|
108
|
-
*
|
|
109
|
-
* árvore verde entre cada passo, em vez de uma passagem única onde não há onde parar.
|
|
99
|
+
* @deprecated ⚠️ THE LEGACY MIRROR, and it dies in this migration. While both exist, `setPlayerViz` writes BOTH and a
|
|
100
|
+
* gate requires they never disagree — that lets each reader migrate on its own, with the tree green between steps.
|
|
110
101
|
*
|
|
111
|
-
* ⚠️
|
|
112
|
-
*
|
|
113
|
-
* ainda escrevem um valor de cada vez; assim que eles passam a escrever por eixo, ele deixa de poder
|
|
114
|
-
* acompanhar e sai.
|
|
102
|
+
* ⚠️ AND IT CANNOT EXPRESS WHAT #104 EXISTS TO ALLOW: a child with `hc7` AND a colour correction at once has no single
|
|
103
|
+
* key describing them. So the mirror survives only while the controls still write one value at a time.
|
|
115
104
|
*/
|
|
116
105
|
viz: string;
|
|
117
106
|
easy: boolean;
|
|
118
107
|
toggleMove: boolean;
|
|
119
108
|
/**
|
|
120
|
-
*
|
|
109
|
+
* THE RUN-BUTTON TOGGLE (asked for by the Dev): running becomes a STATE instead of "holding".
|
|
121
110
|
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
111
|
+
* Sibling of `toggleMove` for the same reason — whoever cannot keep a button held could walk without holding and
|
|
112
|
+
* still could not RUN. Automatic on the touch pad.
|
|
124
113
|
*/
|
|
125
114
|
toggleRun: boolean;
|
|
126
|
-
/**
|
|
115
|
+
/** The run latch: with `toggleRun`, it says whether the player is running now. Lives for a ROUND. */
|
|
127
116
|
runLatch: boolean;
|
|
128
117
|
rmWalk: boolean;
|
|
129
118
|
rmBreath: boolean;
|
|
@@ -134,60 +123,56 @@ export interface Player {
|
|
|
134
123
|
_swapT: number;
|
|
135
124
|
_swapSonar: boolean;
|
|
136
125
|
sprite: PlayerSpriteLike | null;
|
|
137
|
-
/**
|
|
126
|
+
/** The player asked to quit. */
|
|
138
127
|
quit?: boolean;
|
|
139
|
-
/** game
|
|
128
|
+
/** Joined mid-game and waits for the next round. */
|
|
140
129
|
waiting?: boolean;
|
|
141
|
-
/**
|
|
130
|
+
/** The target floor of the lift the player is on. */
|
|
142
131
|
elevTarget?: number | null;
|
|
143
|
-
/**
|
|
132
|
+
/** The fall speed remembered for the landing sound. */
|
|
144
133
|
_fallV?: number;
|
|
145
|
-
/**
|
|
134
|
+
/** The distance walked since the last cane tap. */
|
|
146
135
|
caneDist?: number;
|
|
147
|
-
/**
|
|
136
|
+
/** Uses the running cane (a blind player only runs with it). */
|
|
148
137
|
runCane?: boolean;
|
|
149
|
-
/**
|
|
150
|
-
*
|
|
151
|
-
*
|
|
152
|
-
* tipo nenhum e ninguém percebe, porque metade da regra continua compilando. */
|
|
138
|
+
/** The squash factor and the timer that decays it (8 → 0). The two GO TOGETHER — one step writes both and the
|
|
139
|
+
* drawing reads both. Declaring only `sq` is the half-pair mistake: the field left over has no type at all and
|
|
140
|
+
* nobody notices, because half the rule still compiles. */
|
|
153
141
|
sq?: number;
|
|
154
142
|
sqT?: number;
|
|
155
|
-
/**
|
|
156
|
-
*
|
|
157
|
-
*
|
|
143
|
+
/** The player is walking / running. Derived each frame from speed and contact; they exist because the CANE needs to
|
|
144
|
+
* know (the running cane only shows when running, and running needs `runCane`). Written by the renderer, never by
|
|
145
|
+
* the factory. */
|
|
158
146
|
walking?: boolean;
|
|
159
147
|
running?: boolean;
|
|
160
|
-
/**
|
|
161
|
-
|
|
162
|
-
/**
|
|
148
|
+
/** Wins in the literacy activity, reset at each new game. */
|
|
149
|
+
literacyWins?: number;
|
|
150
|
+
/** The player's own audio output; `null`/absent = shared. */
|
|
163
151
|
audioSink?: string | null;
|
|
164
152
|
/**
|
|
165
|
-
* platform/audio-nav
|
|
153
|
+
* The wall-sonar timer, read by the platformer's `platform/audio-nav` (moved there in note CC).
|
|
166
154
|
*
|
|
167
|
-
* ⚠️ `guideT`
|
|
168
|
-
*
|
|
169
|
-
*
|
|
170
|
-
* mesma regra que o parágrafo acima explica.
|
|
155
|
+
* ⚠️ `guideT` is gone (#84 item 2): it counted the frames between two guide beeps, and there is no beep left to time.
|
|
156
|
+
* What replaced it — the live audio graph — is not the engine entity's and so is not born here: it lives in
|
|
157
|
+
* `PlayerAudioOut`, beside `_ac`, by the rule the paragraph above explains.
|
|
171
158
|
*/
|
|
172
159
|
wnT?: number;
|
|
173
160
|
}
|
|
174
161
|
/**
|
|
175
|
-
*
|
|
162
|
+
* A player AFTER `assignControls` — `ctrl` is no longer `null`.
|
|
176
163
|
*
|
|
177
|
-
*
|
|
178
|
-
*
|
|
179
|
-
*
|
|
180
|
-
* redigitada, onde ninguém a lia como afirmação. Aqui ela tem nome, e quem a usa está dizendo "eu só rodo
|
|
181
|
-
* depois do boot", que é uma frase verificável, em vez de simplesmente não mencionar o `null`.
|
|
164
|
+
* It names an invariant otherwise assumed in silence: modules that only run after boot treat `ctrl` as non-null. That
|
|
165
|
+
* is true — but it was an assertion hidden inside a retyped interface, where nobody read it as one. Here it has a name,
|
|
166
|
+
* and whoever uses it is saying "I only run after boot", a checkable sentence, instead of not mentioning the `null`.
|
|
182
167
|
*/
|
|
183
168
|
export type ControlledPlayer = Player & {
|
|
184
169
|
ctrl: KeyScheme;
|
|
185
170
|
};
|
|
186
171
|
/**
|
|
187
|
-
*
|
|
172
|
+
* A shortcut for the narrow views: `PlayerView<'x' | 'y'>` instead of rewriting the fields.
|
|
188
173
|
*
|
|
189
|
-
*
|
|
190
|
-
*
|
|
191
|
-
*
|
|
174
|
+
* The point of not using the whole `Player` is in the header: the Vitest `node` project builds fake players with only
|
|
175
|
+
* the fields a module reads, and a fat interface would make every fixture invent all of them. Deriving keeps the module
|
|
176
|
+
* coupled to its slice while each field's NAME and TYPE have one source.
|
|
192
177
|
*/
|
|
193
178
|
export type PlayerView<K extends keyof Player> = Pick<Player, K>;
|
package/dist-pkg/core/entity.js
CHANGED
|
@@ -1,38 +1,24 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// core/entity —
|
|
3
|
-
//
|
|
2
|
+
// core/entity — THE PLAYER, written ONCE. Step 1 of ADR-0027, the one that record calls the prerequisite of all the
|
|
3
|
+
// others. It moves nothing and changes nothing at run time: `tsc --noEmit` is its whole test.
|
|
4
4
|
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
5
|
+
// THE PROBLEM THIS SOLVES. `core/state.players` is `unknown[]`. The type is lost exactly at the boundary where the
|
|
6
|
+
// entity crosses the program, so every module that needed a player wrote its own structural view by hand and cast.
|
|
7
|
+
// There were twenty-three, and they no longer agreed: the same field required in one module and optional in another
|
|
8
|
+
// for the SAME object, so a player was accepted by half the program and rejected by the other half. That is the
|
|
9
|
+
// failure that already cost a broken climb in Easy mode, when three copies of the action→edge table diverged: a copy
|
|
10
|
+
// nobody forces to agree, diverges.
|
|
9
11
|
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
// e draw. Um jogador sem `easy` é aceito por metade do programa e rejeitado pela outra.
|
|
15
|
-
// · `jumpEdge`, idem: obrigatório em physics/gamepad/attract, opcional em session/keydown/touch-bindings.
|
|
16
|
-
// · `quit` é obrigatório em gamepad e hud, opcional em session. `toggleMove` é obrigatório em
|
|
17
|
-
// settings-motor, opcional em pause-icons. `viz` é obrigatório em draw, opcional em pause-icons.
|
|
18
|
-
// · `KeyScheme` (= `Record<string, string[]>`) está declarado três vezes: em input/keyboard-runtime,
|
|
19
|
-
// input/keyboard e input/keydown.
|
|
12
|
+
// HOW IT IS USED — and why modules must NOT import the whole `Player`. What makes the project testable in the Vitest
|
|
13
|
+
// `node` project is that each module declares the MINIMAL slice it needs and the test builds a fake with only those
|
|
14
|
+
// fields. Swapping the narrow views for one fat interface would destroy that: every fixture would have to invent every
|
|
15
|
+
// field.
|
|
20
16
|
//
|
|
21
|
-
//
|
|
22
|
-
//
|
|
17
|
+
// The way out is to derive instead of retyping: `Pick<Player, 'x' | 'y' | 'vx'>` instead of rewriting three fields.
|
|
18
|
+
// The module stays coupled only to its slice and the test still builds only that — but each field's NAME and TYPE have
|
|
19
|
+
// one source, and renaming a field breaks every consumer's compilation at the same instant.
|
|
23
20
|
//
|
|
24
|
-
//
|
|
25
|
-
//
|
|
26
|
-
//
|
|
27
|
-
// destruiria isso: todo fixture de teste passaria a ter de inventar 52 campos.
|
|
28
|
-
//
|
|
29
|
-
// A saída é derivar em vez de redigitar: `Pick<Player, 'x' | 'y' | 'vx'>` em vez de reescrever os três campos.
|
|
30
|
-
// O módulo continua acoplado só à sua fatia; o teste continua montando só aquilo; mas o NOME e o TIPO de cada
|
|
31
|
-
// campo passam a ter uma fonte única, e renomear um campo quebra a compilação de todos os consumidores no
|
|
32
|
-
// mesmo instante, que é precisamente o que hoje não acontece.
|
|
33
|
-
//
|
|
34
|
-
// A FRONTEIRA DE CAMADA. `core/` não pode importar de `game/` nem de `render/` — seria inverter a dependência.
|
|
35
|
-
// Por isso os campos que apontam para outras camadas entram aqui pelo MÍNIMO ESTRUTURAL: `core` sabe que o
|
|
36
|
-
// jogador tem um quiz, não sabe o que é um quiz. Os tipos ricos (`Quiz` em game/quiz, `PlayerSprite` em
|
|
37
|
-
// render/draw) são atribuíveis a estes, e é o compilador que garante isso no ponto de uso.
|
|
21
|
+
// THE LAYER BOUNDARY. `core/` may not import upward (ADR-0173), so fields that point at other layers enter here as the
|
|
22
|
+
// STRUCTURAL MINIMUM: the rich types (a sprite in `render/`) are assignable to these, and the compiler checks it where
|
|
23
|
+
// they are used.
|
|
38
24
|
export {};
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* The FIVE characters, covering both contexts: element (`<` `>`) and ATTRIBUTE (`"` `'`).
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
* `aria-label="…"`
|
|
7
|
-
* uma única tag.
|
|
5
|
+
* The attribute is the one usually missing, and the worst: inside an element a quote is harmless; inside
|
|
6
|
+
* `aria-label="…"` it CLOSES the attribute and what follows becomes an attribute — an `onmouseover` without a single tag.
|
|
8
7
|
*
|
|
9
|
-
* ⚠️
|
|
10
|
-
*
|
|
11
|
-
*
|
|
8
|
+
* ⚠️ `&` GOES FIRST, AND THE ORDER IS THIS HELPER'S CLASSIC DEFECT. Escaped last, the `&` of the `<` just produced is
|
|
9
|
+
* escaped again and the screen shows a literal `<`. It is silent because a test with only `<b>` never sees it: the
|
|
10
|
+
* output still "looks" escaped.
|
|
12
11
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
12
|
+
* And it escapes, it does not delete. Deleting would change the word the child typed, and an activity whose text changes
|
|
13
|
+
* by itself is a different defect, and just as serious.
|
|
15
14
|
*/
|
|
16
|
-
export declare function
|
|
15
|
+
export declare function escapeHtml(s: string): string;
|
|
@@ -1,31 +1,27 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// core/escape-html.ts —
|
|
2
|
+
// core/escape-html.ts — ESCAPING TEXT THAT ENDS UP IN MARKUP. A leaf module: one function, no dependencies.
|
|
3
3
|
//
|
|
4
|
-
// ⚠️
|
|
5
|
-
//
|
|
6
|
-
// ele, e o `consumer-quiz` — que é prova da ENGINE — nem sequer pode importar de `game/`, porque o
|
|
7
|
-
// `engine-boundary` o proíbe. Um utilitário de segurança que vive do lado errado da fronteira é um utilitário
|
|
8
|
-
// que o próximo consumidor reescreve, e duas versões de um escape divergem em silêncio.
|
|
4
|
+
// ⚠️ It lives in the engine, not in a cartridge, because a security helper on the wrong side of a boundary is one the
|
|
5
|
+
// next consumer rewrites — and two versions of an escape diverge in silence.
|
|
9
6
|
//
|
|
10
|
-
// ⚠️
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
7
|
+
// ⚠️ AND ESCAPING IS THE SECOND RESORT, NOT THE FIRST. Where the value fits a node — `textContent`, `setAttribute` —
|
|
8
|
+
// that is how it goes in, because then there is nothing to forget. This exists for text inside a dense markup
|
|
9
|
+
// builder, and there it always comes with a gate fed hostile content: an escape without a trace is worse than
|
|
10
|
+
// building nodes.
|
|
14
11
|
/**
|
|
15
|
-
*
|
|
12
|
+
* The FIVE characters, covering both contexts: element (`<` `>`) and ATTRIBUTE (`"` `'`).
|
|
16
13
|
*
|
|
17
|
-
*
|
|
18
|
-
* `aria-label="…"`
|
|
19
|
-
* uma única tag.
|
|
14
|
+
* The attribute is the one usually missing, and the worst: inside an element a quote is harmless; inside
|
|
15
|
+
* `aria-label="…"` it CLOSES the attribute and what follows becomes an attribute — an `onmouseover` without a single tag.
|
|
20
16
|
*
|
|
21
|
-
* ⚠️
|
|
22
|
-
*
|
|
23
|
-
*
|
|
17
|
+
* ⚠️ `&` GOES FIRST, AND THE ORDER IS THIS HELPER'S CLASSIC DEFECT. Escaped last, the `&` of the `<` just produced is
|
|
18
|
+
* escaped again and the screen shows a literal `<`. It is silent because a test with only `<b>` never sees it: the
|
|
19
|
+
* output still "looks" escaped.
|
|
24
20
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
21
|
+
* And it escapes, it does not delete. Deleting would change the word the child typed, and an activity whose text changes
|
|
22
|
+
* by itself is a different defect, and just as serious.
|
|
27
23
|
*/
|
|
28
|
-
export function
|
|
24
|
+
export function escapeHtml(s) {
|
|
29
25
|
return String(s)
|
|
30
26
|
.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>')
|
|
31
27
|
.replaceAll('"', '"').replaceAll("'", ''');
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
/** The grid: 64×64 cells of a 1024×768 reference. */
|
|
3
|
+
export declare const COLUMNS = 16;
|
|
4
|
+
export declare const ROWS = 12;
|
|
5
|
+
export interface LuminanceFrame {
|
|
6
|
+
/** Milliseconds. */
|
|
7
|
+
readonly t: number;
|
|
8
|
+
/** Relative luminance 0..1 per cell, row by row, `COLUMNS * ROWS` long. */
|
|
9
|
+
readonly luminances: ArrayLike<number>;
|
|
10
|
+
}
|
|
11
|
+
export interface FlashVerdict {
|
|
12
|
+
readonly passes: boolean;
|
|
13
|
+
/** The most general flashes any 10° field showed within one second. */
|
|
14
|
+
readonly worstSecond: number;
|
|
15
|
+
}
|
|
16
|
+
/** Counts general flashes per 10° field and returns the worst second. */
|
|
17
|
+
export declare function analyseFlashes(frames: readonly LuminanceFrame[]): FlashVerdict;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
// core/flash-threshold — THE GENERAL FLASH THRESHOLD OF WCAG 2.3.1, over a grid of relative luminance (study item B2).
|
|
3
|
+
//
|
|
4
|
+
// ADR-0020 names a FLASH_LIMIT pass and the engine limits nothing a cartridge flashes: it does not own the render. What it
|
|
5
|
+
// can do is MEASURE what a game draws and say it. This file is the pure half — frames in, a verdict out, no DOM, no clock —
|
|
6
|
+
// so the rule is tested by numbers written from the source; the sampler that reads a canvas lives with the root.
|
|
7
|
+
//
|
|
8
|
+
// 📌 THE SOURCE (read 2026-09-13), W3C Understanding SC 2.3.1, WCAG 2.2: a general flash is «a pair of opposing changes in
|
|
9
|
+
// relative luminance of 10% or more of the maximum relative luminance (1.0) where the relative luminance of the darker
|
|
10
|
+
// image is below 0.80»; the threshold passes with «no more than three … within any one-second period» or when the
|
|
11
|
+
// concurrent area is «no more than … .006 steradians within any 10 degree visual field» (341×256 px at 1024×768; 25%).
|
|
12
|
+
// ⚠️ NOT HERE: the red flash (CIE 1976 UCS chromaticity) — a verdict of «passes» from this file says nothing about red.
|
|
13
|
+
// A LEAF: imports nothing.
|
|
14
|
+
/** The grid: 64×64 cells of a 1024×768 reference. */
|
|
15
|
+
export const COLUMNS = 16;
|
|
16
|
+
export const ROWS = 12;
|
|
17
|
+
/** The 10° field as whole cells: 5×4 = 320×256, the nearest rectangle to 341×256. */
|
|
18
|
+
const WINDOW_C = 5;
|
|
19
|
+
const WINDOW_L = 4;
|
|
20
|
+
/** More than 25% of the field: 21 824 px of 87 296, 5.3 cells of 4 096 px — so 6 cells. */
|
|
21
|
+
const CELLS_FOR_AREA = 6;
|
|
22
|
+
const CHANGE = 0.1;
|
|
23
|
+
const DARK_BELOW = 0.8;
|
|
24
|
+
const MAX_PER_SECOND = 3;
|
|
25
|
+
const CELLS = COLUMNS * ROWS;
|
|
26
|
+
const WINDOWS = (COLUMNS - WINDOW_C + 1) * (ROWS - WINDOW_L + 1);
|
|
27
|
+
/**
|
|
28
|
+
* Per cell, a TRANSITION is a move of 10% or more away from the last extreme, with the darker side below 0.80; a move
|
|
29
|
+
* further in the same direction extends the extreme instead of counting.
|
|
30
|
+
*/
|
|
31
|
+
function markCellTransitions(frame, s) {
|
|
32
|
+
for (let c = 0; c < CELLS; c++) {
|
|
33
|
+
s.transition[c] = 0;
|
|
34
|
+
const l = Number(frame.luminances[c] ?? 0);
|
|
35
|
+
const ref = s.reference[c];
|
|
36
|
+
if (Number.isNaN(ref)) {
|
|
37
|
+
s.reference[c] = l;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
const way = Math.sign(l - ref);
|
|
41
|
+
if (way === s.direction[c]) {
|
|
42
|
+
s.reference[c] = l;
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
if (Math.abs(l - ref) >= CHANGE && Math.min(l, ref) < DARK_BELOW) {
|
|
46
|
+
s.transition[c] = way;
|
|
47
|
+
s.direction[c] = way;
|
|
48
|
+
s.reference[c] = l;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/** A field makes a transition when 6 of its cells make one in the same direction in the same frame. */
|
|
53
|
+
function fieldTransition(transition, row, col) {
|
|
54
|
+
let wentUp = 0;
|
|
55
|
+
let wentDown = 0;
|
|
56
|
+
for (let dr = 0; dr < WINDOW_L; dr++) {
|
|
57
|
+
for (let dc = 0; dc < WINDOW_C; dc++) {
|
|
58
|
+
const way = transition[(row + dr) * COLUMNS + col + dc];
|
|
59
|
+
if (way > 0)
|
|
60
|
+
wentUp++;
|
|
61
|
+
else if (way < 0)
|
|
62
|
+
wentDown++;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return wentUp >= CELLS_FOR_AREA ? 1 : wentDown >= CELLS_FOR_AREA ? -1 : 0;
|
|
66
|
+
}
|
|
67
|
+
/** A FLASH is two opposing field transitions, and the pair then starts afresh. */
|
|
68
|
+
function pairFieldTransitions(t, s) {
|
|
69
|
+
let j = 0;
|
|
70
|
+
for (let row = 0; row + WINDOW_L <= ROWS; row++) {
|
|
71
|
+
for (let col = 0; col + WINDOW_C <= COLUMNS; col++, j++) {
|
|
72
|
+
const way = fieldTransition(s.transition, row, col);
|
|
73
|
+
if (!way)
|
|
74
|
+
continue;
|
|
75
|
+
if (s.openHalf[j] !== 0 && s.openHalf[j] !== way) {
|
|
76
|
+
s.flashTimes[j].push(t);
|
|
77
|
+
s.openHalf[j] = 0;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
s.openHalf[j] = way;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/** The most flashes any one field showed «within any one-second period». */
|
|
86
|
+
function worstSecond(flashTimes) {
|
|
87
|
+
let worst = 0;
|
|
88
|
+
for (const times of flashTimes) {
|
|
89
|
+
for (let i = 0, k = 0; i < times.length; i++) {
|
|
90
|
+
// less than a second apart; half a millisecond absorbs frame arithmetic
|
|
91
|
+
while (k < times.length && times[k] - times[i] < 1000 - 0.5)
|
|
92
|
+
k++;
|
|
93
|
+
worst = Math.max(worst, k - i);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return worst;
|
|
97
|
+
}
|
|
98
|
+
/** Counts general flashes per 10° field and returns the worst second. */
|
|
99
|
+
export function analyseFlashes(frames) {
|
|
100
|
+
const s = {
|
|
101
|
+
reference: new Float64Array(CELLS).fill(Number.NaN),
|
|
102
|
+
direction: new Int8Array(CELLS),
|
|
103
|
+
transition: new Int8Array(CELLS),
|
|
104
|
+
openHalf: new Int8Array(WINDOWS),
|
|
105
|
+
flashTimes: Array.from({ length: WINDOWS }, () => []),
|
|
106
|
+
};
|
|
107
|
+
for (const frame of frames) {
|
|
108
|
+
markCellTransitions(frame, s);
|
|
109
|
+
pairFieldTransitions(frame.t, s);
|
|
110
|
+
}
|
|
111
|
+
const worst = worstSecond(s.flashTimes);
|
|
112
|
+
return { passes: worst <= MAX_PER_SECOND, worstSecond: worst };
|
|
113
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
/**
|
|
3
|
+
* THE GAME SPEED STEPS (ADR-0180): 100% down to 50% in steps of 10%, Celeste's Assist Mode, the example the Game Accessibility
|
|
4
|
+
* Guidelines cite for «Include an option to adjust the game speed» (Basic). One control slows timers, reaction windows and the
|
|
5
|
+
* world's pace at once.
|
|
6
|
+
*/
|
|
7
|
+
export declare const GAME_SPEEDS: readonly number[];
|
|
8
|
+
/** A value outside the steps is not a speed: a stored typo lands on 100%, never on zero or on a speed nobody chose. */
|
|
9
|
+
export declare function isGameSpeed(v: number): number;
|
|
10
|
+
/** One press: the next step down, wrapping from 50% back to 100%. */
|
|
11
|
+
export declare function nextGameSpeed(v: number): number;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
/**
|
|
3
|
+
* THE GAME SPEED STEPS (ADR-0180): 100% down to 50% in steps of 10%, Celeste's Assist Mode, the example the Game Accessibility
|
|
4
|
+
* Guidelines cite for «Include an option to adjust the game speed» (Basic). One control slows timers, reaction windows and the
|
|
5
|
+
* world's pace at once.
|
|
6
|
+
*/
|
|
7
|
+
export const GAME_SPEEDS = Object.freeze([1, 0.9, 0.8, 0.7, 0.6, 0.5]);
|
|
8
|
+
/** A value outside the steps is not a speed: a stored typo lands on 100%, never on zero or on a speed nobody chose. */
|
|
9
|
+
export function isGameSpeed(v) {
|
|
10
|
+
return GAME_SPEEDS.includes(v) ? v : 1;
|
|
11
|
+
}
|
|
12
|
+
/** One press: the next step down, wrapping from 50% back to 100%. */
|
|
13
|
+
export function nextGameSpeed(v) {
|
|
14
|
+
const i = GAME_SPEEDS.indexOf(isGameSpeed(v));
|
|
15
|
+
return GAME_SPEEDS[(i + 1) % GAME_SPEEDS.length];
|
|
16
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
/**
|
|
3
|
+
* THE ENGINE'S GENRE LIST — the Dev's transcription of the Wikipedia list of video game genres (ADR-0156 §1).
|
|
4
|
+
*
|
|
5
|
+
* Optional (ADR-0153): a cartridge MAY declare one, and nobody assigns one to a game (§5). The transcription is the
|
|
6
|
+
* decision and the page only its source, so families and genres are written as the Dev wrote them. A family name is not a
|
|
7
|
+
* declarable genre, except MMO, which the list gives as both. Not in the list, and so not declarable: the by-purpose genres
|
|
8
|
+
* and sandbox / open world (§4).
|
|
9
|
+
*/
|
|
10
|
+
export interface Genre {
|
|
11
|
+
readonly name: string;
|
|
12
|
+
readonly family: string;
|
|
13
|
+
/** Casino game is refused (§2); Horror game is to be avoided (§3). */
|
|
14
|
+
readonly mark?: 'refused' | 'avoid';
|
|
15
|
+
}
|
|
16
|
+
export declare const GENRES: readonly Genre[];
|
|
17
|
+
/** Is a declared genre acceptable? EMPTY means conformant; any line refuses the boot (a malformed declaration). */
|
|
18
|
+
export declare function genreProblems(genre: unknown): string[];
|
|
19
|
+
/** The line `problems` carries for an accepted genre with a mark: Horror game plays, and the author reads why to avoid it. */
|
|
20
|
+
export declare function genreWarning(genre: unknown): string | null;
|