@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,46 +1,42 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// render/high-contrast —
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
// directSpriteTexture DAQUI mas não estão na lista de extração desta onda.
|
|
13
|
-
// Ver docs/2-Architecture/adr/ADR-0011-visual-accessibility.yaml + docs/5-Refactoring/plano-modularizacao-mapa.md.
|
|
2
|
+
// render/high-contrast — Direct Rendering: the accessibility high-contrast engine (ADR-0011) — outline + color-blocking
|
|
3
|
+
// by role + a pushed-back background (desaturated/darkened), 3 contrast levels (3:1/4.5:1/7:1).
|
|
4
|
+
// `createHighContrast(ctx)` returns worldToTextureDirect/directBgTexture/directSprite{Canvas,Texture} + the caches
|
|
5
|
+
// (worldTexFor/spriteTexFor) + the role palette (persisted) — ONE instance per world, built by whoever HAS a world: the
|
|
6
|
+
// root has none, so a game that draws one builds it (ADR-0232 D4, issue #207). INJECTED: the document the canvases are
|
|
7
|
+
// made in, the grid's bounds (W/H), the tile lookup, the two outline levels (outlineFg/outlineBg, which the host changes)
|
|
8
|
+
// and the NORMAL world canvas/texture (the scenery can swap it → getter). The "mode already applied" cache that the
|
|
9
|
+
// host's static render pipeline uses to decide when to reapply textures per viewport is NOT here: it is not a
|
|
10
|
+
// high-contrast cache, and several subsystems outside write into it.
|
|
11
|
+
// See the ADR-0011 record (visual accessibility).
|
|
14
12
|
import { makeCanvas, tex } from './canvas.js';
|
|
15
13
|
import { outlineCanvas } from './sprite-fx.js';
|
|
16
14
|
import { TILE } from '../core/constants.js';
|
|
17
|
-
import { tileAt } from '../core/collision.js';
|
|
18
15
|
import { HC_ROLE_DEF } from './hc-role-data.js';
|
|
19
|
-
import
|
|
16
|
+
import { KEYS } from '../platform/storage-keys.js';
|
|
20
17
|
export { HC_ROLE_KEYS, HC_ROLE_DEF } from './hc-role-data.js';
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
18
|
+
/** The defaults with the stored colours laid over them, each clamped to 0–255; a malformed entry keeps its default. */
|
|
19
|
+
function storedPalette(store) {
|
|
20
|
+
const palette = JSON.parse(JSON.stringify(HC_ROLE_DEF));
|
|
21
|
+
const s = store.getJSON(KEYS.hcrole, null);
|
|
22
|
+
if (!s || typeof s !== 'object')
|
|
23
|
+
return palette;
|
|
24
|
+
for (const k of Object.keys(palette)) {
|
|
25
|
+
const v = s[k];
|
|
26
|
+
if (Array.isArray(v) && v.length === 3)
|
|
27
|
+
palette[k] = v.map((n) => Math.max(0, Math.min(255, n | 0)));
|
|
30
28
|
}
|
|
31
|
-
return
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
// off/mul = mapa da plataforma (mais off = mais clara → mais contraste); bgMul = fundo (menor = mais escuro/
|
|
36
|
-
// recuado). Contraste plataforma×fundo ≈ 3 / 4,5 / 7 (ver ADR-0011: 3:1 é o default, "7:1 fica feio").
|
|
29
|
+
return palette;
|
|
30
|
+
}
|
|
31
|
+
// off/mul = the platform map (more off = lighter → more contrast); bgMul = the background (lower = darker/pushed back).
|
|
32
|
+
// Platform×background contrast ≈ 3 / 4.5 / 7 (see ADR-0011: 3:1 is the default, and 7:1 looks ugly).
|
|
37
33
|
export const DIRECT_CFG = {
|
|
38
34
|
'hc-direto': { off: 55, mul: 0.5, bgMul: 0.30 },
|
|
39
35
|
'hc-direto-45': { off: 66, mul: 0.5, bgMul: 0.28 },
|
|
40
36
|
'hc-direto-7': { off: 100, mul: 0.48, bgMul: 0.13 },
|
|
41
37
|
};
|
|
42
38
|
export function dcfg(mode) { return DIRECT_CFG[mode] || DIRECT_CFG['hc-direto']; }
|
|
43
|
-
/* =====================
|
|
39
|
+
/* ===================== desaturation/darkening (background/structure) ===================== */
|
|
44
40
|
export function dimDesat(c, w, h, mul, blue, off) {
|
|
45
41
|
off = off || 0;
|
|
46
42
|
const img = c.getImageData(0, 0, w, h), d = img.data;
|
|
@@ -54,201 +50,210 @@ export function dimDesat(c, w, h, mul, blue, off) {
|
|
|
54
50
|
}
|
|
55
51
|
c.putImageData(img, 0, 0);
|
|
56
52
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
53
|
+
/** LADDER: black + rails and rungs in the role's colour → it reads as a ladder, not a solid band. */
|
|
54
|
+
function drawLadder(c, X, Y, climb) {
|
|
55
|
+
c.fillStyle = '#0a0e14';
|
|
56
|
+
c.fillRect(X, Y, TILE, TILE);
|
|
57
|
+
c.fillStyle = 'rgb(' + climb.join(',') + ')';
|
|
58
|
+
c.fillRect(X + 1, Y, 2, TILE);
|
|
59
|
+
c.fillRect(X + TILE - 3, Y, 2, TILE); // side rails (the role's colour, customisable)
|
|
60
|
+
for (let ry = 2; ry < TILE - 1; ry += 5)
|
|
61
|
+
c.fillRect(X + 1, Y + ry, TILE - 2, 2); // rungs
|
|
63
62
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
63
|
+
/** A tile repainted in its role's colour `rc`, by the brightness of each pixel (BT.601 luma); a hazard starts from brighter. */
|
|
64
|
+
function repaintByRole(c, X, Y, role, rc) {
|
|
65
|
+
const img = c.getImageData(X, Y, TILE, TILE), d = img.data, lo = role === 'hazard' ? 0.58 : 0.44;
|
|
66
|
+
for (let i = 0; i < d.length; i += 4) {
|
|
67
|
+
if (d[i + 3] < 8)
|
|
68
|
+
continue;
|
|
69
|
+
const g = (0.299 * d[i] + 0.587 * d[i + 1] + 0.114 * d[i + 2]) / 255, f = lo + (1 - lo) * g;
|
|
70
|
+
d[i] = Math.min(255, rc[0] * f) | 0;
|
|
71
|
+
d[i + 1] = Math.min(255, rc[1] * f) | 0;
|
|
72
|
+
d[i + 2] = Math.min(255, rc[2] * f) | 0;
|
|
73
|
+
}
|
|
74
|
+
c.putImageData(img, X, Y);
|
|
75
|
+
}
|
|
76
|
+
/** Tiles 0 and 1 are this map's air (see the note in the loop below: a platformer's numbering, declared, not generalised). */
|
|
77
|
+
const isAir = (t) => t === 0 || t === 1;
|
|
78
|
+
/** The background outline: ONLY the outer perimeter — a block's edges that face the air —, not every block. */
|
|
79
|
+
function outlineSecondPlane(c, hc, th) {
|
|
80
|
+
if (th <= 0)
|
|
81
|
+
return;
|
|
82
|
+
const air = (x, y) => isAir(hc.tileAt(x, y));
|
|
83
|
+
c.fillStyle = 'rgba(200,222,255,0.97)';
|
|
73
84
|
for (let y = 0; y < hc.H; y++)
|
|
74
85
|
for (let x = 0; x < hc.W; x++) {
|
|
75
|
-
|
|
76
|
-
if (!role)
|
|
77
|
-
continue; // repinta tiles não-estruturais pela cor do papel
|
|
78
|
-
const X = x * TILE, Y = y * TILE;
|
|
79
|
-
// ⚠️ O QUE SOBRA DE PLATAFORMA AQUI. A escada é desenhada com trilhos e degraus porque uma faixa sólida
|
|
80
|
-
// não LÊ como escada — decisão de acessibilidade, que serviria a qualquer jogo com algo escalável. Mas a
|
|
81
|
-
// forma da pergunta injetada ("este tile se desenha como escada?" · "que pintor este papel usa?") ainda
|
|
82
|
-
// não tem evidência que a escolha, e foi um consumidor que mostrou, no menu-nav, que a forma importa mais
|
|
83
|
-
// que a existência da injeção. Declarado em vez de adivinhado. Ver game/tile-roles.
|
|
84
|
-
if (t === 4) { // ESCADA: preto + trilhos e degraus ciano → lê como escada (não faixa verde sólida)
|
|
85
|
-
c.fillStyle = '#0a0e14';
|
|
86
|
-
c.fillRect(X, Y, TILE, TILE);
|
|
87
|
-
c.fillStyle = 'rgb(' + HC_ROLE.climb.join(',') + ')';
|
|
88
|
-
c.fillRect(X + 1, Y, 2, TILE);
|
|
89
|
-
c.fillRect(X + TILE - 3, Y, 2, TILE); // trilhos laterais (cor do papel, customizável)
|
|
90
|
-
for (let ry = 2; ry < TILE - 1; ry += 5)
|
|
91
|
-
c.fillRect(X + 1, Y + ry, TILE - 2, 2); // degraus
|
|
86
|
+
if (air(x, y))
|
|
92
87
|
continue;
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}
|
|
103
|
-
c.putImageData(img, X, Y);
|
|
88
|
+
const X = x * TILE, Y = y * TILE;
|
|
89
|
+
if (air(x, y - 1))
|
|
90
|
+
c.fillRect(X, Y, TILE, th);
|
|
91
|
+
if (air(x, y + 1))
|
|
92
|
+
c.fillRect(X, Y + TILE - th, TILE, th);
|
|
93
|
+
if (air(x - 1, y))
|
|
94
|
+
c.fillRect(X, Y, th, TILE);
|
|
95
|
+
if (air(x + 1, y))
|
|
96
|
+
c.fillRect(X + TILE - th, Y, th, TILE);
|
|
104
97
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Builds one world's high contrast and READS the stored role colours into its palette — at build, never at import
|
|
101
|
+
* (ADR-0232). The palette and the two texture caches live in this closure, so two worlds on one page share none of them.
|
|
102
|
+
*/
|
|
103
|
+
export function createHighContrast(ctx) {
|
|
104
|
+
const { store, doc } = ctx;
|
|
105
|
+
const role = storedPalette(store);
|
|
106
|
+
const saveRole = () => { store.setJSON(KEYS.hcrole, role); };
|
|
107
|
+
/* ===================== Direct Rendering: world + background + foreground sprites ===================== */
|
|
108
|
+
/** The world in high contrast: a desaturated/lightened base + repaint by role (with the ladder as a special case:
|
|
109
|
+
* rails/rungs, not a solid band) + a background outline on the outer perimeter (walkable × not walkable). */
|
|
110
|
+
function worldToTextureDirect(srcCanvas, mode) {
|
|
111
|
+
const cfg = dcfg(mode);
|
|
112
|
+
const cv = makeCanvas(doc, srcCanvas.width, srcCanvas.height), c = cv.getContext('2d');
|
|
113
|
+
c.drawImage(srcCanvas, 0, 0);
|
|
114
|
+
dimDesat(c, cv.width, cv.height, cfg.mul, 1.22, cfg.off); // base: structure turns blue-grey (lighter = more contrast)
|
|
115
|
+
for (let y = 0; y < ctx.H; y++)
|
|
116
|
+
for (let x = 0; x < ctx.W; x++) {
|
|
117
|
+
const t = ctx.tileAt(x, y), r = ctx.roleOf(t);
|
|
118
|
+
if (!r)
|
|
119
|
+
continue; // repaint non-structural tiles in the role's colour
|
|
120
|
+
// ⚠️ WHAT PLATFORMER IS LEFT HERE. The ladder is drawn with rails and rungs because a solid band does not READ as a
|
|
121
|
+
// ladder — an accessibility decision that would serve any game with something climbable. But the shape of the
|
|
122
|
+
// injected question ("does this tile draw as a ladder?" · "which painter does this role use?") has no evidence to
|
|
123
|
+
// choose it yet, and a consumer showed, in menu-nav, that the shape matters more than the existence of the
|
|
124
|
+
// injection. Declared instead of guessed.
|
|
125
|
+
if (t === 4)
|
|
126
|
+
drawLadder(c, x * TILE, y * TILE, role.climb);
|
|
127
|
+
else
|
|
128
|
+
repaintByRole(c, x * TILE, y * TILE, r, role[r]);
|
|
123
129
|
}
|
|
130
|
+
outlineSecondPlane(c, ctx, ctx.outlineBg());
|
|
131
|
+
return tex(cv);
|
|
124
132
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
133
|
+
/** Background/decoration in high contrast: only desaturation/darkening (it steps back) — no repaint by role and no
|
|
134
|
+
* outline. Used by render/viewports for decoration (treeTexFor) and parallax (parallaxTexFor). */
|
|
135
|
+
function directBgTexture(srcTex, mode) {
|
|
136
|
+
const cfg = dcfg(mode);
|
|
137
|
+
const cv = makeCanvas(doc, Math.max(1, srcTex.orig.width), Math.max(1, srcTex.orig.height)), dst = tex(cv);
|
|
138
|
+
const paint = () => {
|
|
139
|
+
const s = srcTex.baseTexture.resource && srcTex.baseTexture.resource.source;
|
|
140
|
+
if (!s || !s.width)
|
|
141
|
+
return;
|
|
142
|
+
cv.width = s.width;
|
|
143
|
+
cv.height = s.height;
|
|
144
|
+
const c = cv.getContext('2d');
|
|
145
|
+
c.clearRect(0, 0, cv.width, cv.height);
|
|
146
|
+
c.drawImage(s, 0, 0);
|
|
147
|
+
dimDesat(c, cv.width, cv.height, cfg.bgMul, 1.2);
|
|
148
|
+
dst.update();
|
|
149
|
+
};
|
|
150
|
+
if (srcTex.baseTexture.valid)
|
|
151
|
+
paint();
|
|
152
|
+
else
|
|
153
|
+
srcTex.baseTexture.once('loaded', paint);
|
|
154
|
+
return dst;
|
|
155
|
+
}
|
|
156
|
+
/** A foreground sprite (player/coin/power-up) in high contrast: it keeps the art's colour + a DARK outline (WCAG 2.4.7 —
|
|
157
|
+
* it "jumps" off the pushed-back background). `mode` is unused (kept only for signature parity with the other 3
|
|
158
|
+
* "direct*" functions — the dispatch by DIRECT_CFG[mode] already happened in the caller). fg=0 → no outline. */
|
|
159
|
+
function directSpriteCanvas(srcCanvas, mode) {
|
|
160
|
+
void mode;
|
|
161
|
+
const fg = ctx.outlineFg();
|
|
162
|
+
return fg > 0 ? outlineCanvas(srcCanvas, fg) : srcCanvas;
|
|
163
|
+
}
|
|
164
|
+
/** The PIXI.Texture variant of directSpriteCanvas (player: the source texture is already a PIXI.Texture, not a raw
|
|
165
|
+
* canvas). `mode` likewise — unused, kept for signature parity. */
|
|
166
|
+
function directSpriteTexture(srcTex, mode) {
|
|
167
|
+
void mode;
|
|
168
|
+
const fg = ctx.outlineFg();
|
|
169
|
+
if (fg <= 0)
|
|
170
|
+
return srcTex;
|
|
171
|
+
const th = fg;
|
|
172
|
+
const cv = makeCanvas(doc, Math.max(1, srcTex.orig.width), Math.max(1, srcTex.orig.height)), dst = tex(cv);
|
|
173
|
+
const paint = () => {
|
|
174
|
+
const s = srcTex.baseTexture.resource && srcTex.baseTexture.resource.source;
|
|
175
|
+
if (!s || !s.width)
|
|
176
|
+
return;
|
|
177
|
+
// ===================== THE CLIP COMES BEFORE THE OUTLINE =====================
|
|
178
|
+
// Reading the BASE and ignoring the `frame` draws, for a frame packed in an atlas, the whole atlas: every frame of the
|
|
179
|
+
// character at once, in a grid — the "kage bunshin" defect. It happened once the character's sprites were packed
|
|
180
|
+
// into an atlas, where only the frames that go through the seam fixer (idle/walk/run) become canvases of their own
|
|
181
|
+
// and jump, ladder, wall, ceiling, swim and flight are CLIPS.
|
|
182
|
+
//
|
|
183
|
+
// The seam fixer is asynchronous, so the idle frame showed it too: with high contrast on early, the outlined-frame
|
|
184
|
+
// cache memorises the atlas-based version and keeps it forever.
|
|
185
|
+
const f = srcTex.frame;
|
|
186
|
+
const needsClipping = !!f && (f.x !== 0 || f.y !== 0 || f.width !== s.width || f.height !== s.height);
|
|
187
|
+
let drawSource = s;
|
|
188
|
+
if (needsClipping && f) {
|
|
189
|
+
const rec = makeCanvas(doc, Math.max(1, f.width), Math.max(1, f.height));
|
|
190
|
+
const rc = rec.getContext('2d');
|
|
191
|
+
rc.imageSmoothingEnabled = false; // pixel art: resampling here would blur the outline the mode promises
|
|
192
|
+
rc.drawImage(s, f.x, f.y, f.width, f.height, 0, 0, f.width, f.height);
|
|
193
|
+
drawSource = rec;
|
|
194
|
+
}
|
|
195
|
+
// outlineCanvas only declares HTMLCanvasElement; the clip already returns a canvas, and an unclipped base is
|
|
196
|
+
// canvas-sourced on the paths that remain. The cast changes nothing at runtime.
|
|
197
|
+
const o = outlineCanvas(drawSource, th);
|
|
198
|
+
cv.width = o.width;
|
|
199
|
+
cv.height = o.height;
|
|
200
|
+
const c = cv.getContext('2d');
|
|
201
|
+
c.clearRect(0, 0, cv.width, cv.height);
|
|
202
|
+
c.drawImage(o, 0, 0);
|
|
203
|
+
dst.update();
|
|
204
|
+
};
|
|
205
|
+
if (srcTex.baseTexture.valid)
|
|
206
|
+
paint();
|
|
207
|
+
else
|
|
208
|
+
srcTex.baseTexture.once('loaded', paint);
|
|
209
|
+
return dst;
|
|
210
|
+
}
|
|
211
|
+
/* ===================== lazy caches (world/sprites) + per-mode selector ===================== */
|
|
212
|
+
const worldTexHC = {};
|
|
213
|
+
/** The recoloured-sprite cache, keyed by `id|mode` — one cache for every sprite of this world, not one per game's coin. */
|
|
214
|
+
const spriteTexHC = {};
|
|
215
|
+
function worldTexFor(mode) {
|
|
216
|
+
if (DIRECT_CFG[mode]) {
|
|
217
|
+
if (!worldTexHC[mode])
|
|
218
|
+
worldTexHC[mode] = worldToTextureDirect(ctx.getWorldCanvasNormal(), mode);
|
|
219
|
+
return worldTexHC[mode];
|
|
190
220
|
}
|
|
191
|
-
|
|
192
|
-
// canvas-sourced pelos caminhos que restam. O cast preserva o runtime idêntico ao original.
|
|
193
|
-
const o = outlineCanvas(fonte, th);
|
|
194
|
-
cv.width = o.width;
|
|
195
|
-
cv.height = o.height;
|
|
196
|
-
const c = cv.getContext('2d');
|
|
197
|
-
c.clearRect(0, 0, cv.width, cv.height);
|
|
198
|
-
c.drawImage(o, 0, 0);
|
|
199
|
-
dst.update();
|
|
200
|
-
};
|
|
201
|
-
if (srcTex.baseTexture.valid)
|
|
202
|
-
paint();
|
|
203
|
-
else
|
|
204
|
-
srcTex.baseTexture.once('loaded', paint);
|
|
205
|
-
return dst;
|
|
206
|
-
}
|
|
207
|
-
/* ===================== caches preguiçosos (mundo/moeda) + seletor por modo ===================== */
|
|
208
|
-
const _worldTexHC = {};
|
|
209
|
-
/** Cache de sprite recolorido, chaveado por `id|modo`. Era `_coinTexHC[modo]` — um cache por jogo. */
|
|
210
|
-
const _spriteTexHC = {};
|
|
211
|
-
/** Textura do MUNDO para `mode` (normal → a textura viva; hc-* → Renderização Direta, cacheada). */
|
|
212
|
-
export function worldTexFor(mode) {
|
|
213
|
-
const hc = requireCtx();
|
|
214
|
-
if (DIRECT_CFG[mode]) {
|
|
215
|
-
if (!_worldTexHC[mode])
|
|
216
|
-
_worldTexHC[mode] = worldToTextureDirect(hc.getWorldCanvasNormal(), mode);
|
|
217
|
-
return _worldTexHC[mode];
|
|
221
|
+
return ctx.getWorldTexNormal();
|
|
218
222
|
}
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
return _spriteTexHC[chave] ?? src.tex;
|
|
223
|
+
/**
|
|
224
|
+
* Sprite `id`'s texture for `mode` (the same logic as `worldTexFor`, cached by `id|mode`).
|
|
225
|
+
*
|
|
226
|
+
* Outside the direct rendering modes it returns the normal texture the game declared — and it returns `undefined` for
|
|
227
|
+
* an id the game did not declare, instead of throwing: a missing sprite becomes "no texture" in the drawing, which is
|
|
228
|
+
* degradation; throwing here would take the whole frame down because of one item.
|
|
229
|
+
*/
|
|
230
|
+
function spriteTexFor(id, mode) {
|
|
231
|
+
const src = ctx.sprites()[id];
|
|
232
|
+
if (!src)
|
|
233
|
+
return undefined;
|
|
234
|
+
if (DIRECT_CFG[mode]) {
|
|
235
|
+
const key = id + '|' + mode;
|
|
236
|
+
if (!spriteTexHC[key] && src.canvas)
|
|
237
|
+
spriteTexHC[key] = tex(directSpriteCanvas(src.canvas, mode));
|
|
238
|
+
return spriteTexHC[key] ?? src.tex;
|
|
239
|
+
}
|
|
240
|
+
return src.tex;
|
|
238
241
|
}
|
|
239
|
-
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
for (const k in _spriteTexHC) {
|
|
251
|
-
if (id === undefined || k.startsWith(id + '|'))
|
|
252
|
-
delete _spriteTexHC[k];
|
|
242
|
+
function clearWorldTexCache() { for (const k in worldTexHC)
|
|
243
|
+
delete worldTexHC[k]; }
|
|
244
|
+
/**
|
|
245
|
+
* With no argument it clears EVERYTHING; with an `id`, only that sprite's entries — what a game with many sprites will
|
|
246
|
+
* want, and what a cache keyed only by mode could not offer.
|
|
247
|
+
*/
|
|
248
|
+
function clearSpriteTexCache(id) {
|
|
249
|
+
for (const k in spriteTexHC) {
|
|
250
|
+
if (id === undefined || k.startsWith(id + '|'))
|
|
251
|
+
delete spriteTexHC[k];
|
|
252
|
+
}
|
|
253
253
|
}
|
|
254
|
+
return {
|
|
255
|
+
role, saveRole,
|
|
256
|
+
worldToTextureDirect, directBgTexture, directSpriteCanvas, directSpriteTexture,
|
|
257
|
+
worldTexFor, spriteTexFor, clearWorldTexCache, clearSpriteTexCache,
|
|
258
|
+
};
|
|
254
259
|
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
/** The simulations drawn rather than filtered. `haze` is also a filter under `createGame`, which draws only the other three. */
|
|
3
|
+
export type LowVisionDrawing = 'haze' | 'tunnel' | 'macular' | 'diabetic';
|
|
4
|
+
/** Draws simulation `lv` on a `w`×`h` context, over transparency. A key that is not a drawn simulation draws nothing. */
|
|
5
|
+
export declare function drawLowVision(c: CanvasRenderingContext2D, lv: string, w: number, h: number): void;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
// render/low-vision-drawing — what a colour filter cannot make: the white film of cataract, the tunnel of glaucoma, the central
|
|
3
|
+
// scotoma of macular degeneration and the scattered scotomas of diabetic retinopathy. They are a DRAWING over the world, not a
|
|
4
|
+
// transformation of its colours.
|
|
5
|
+
//
|
|
6
|
+
// One drawing, two consumers: `render/viewports` stamps it into each viewport's texture, and `boot/create-game` lays it over
|
|
7
|
+
// the declared world for the empathy panel (issue #182). Written once so the two cannot show different simulations under one name.
|
|
8
|
+
/** Where the scattered scotomas of diabetic retinopathy sit, as fractions of the view: x, y and radius (of the width). */
|
|
9
|
+
const SCATTERED_SPOTS = [[.22, .3, .1], [.64, .22, .075], [.8, .58, .11], [.4, .7, .085], [.16, .8, .07], [.54, .48, .06]];
|
|
10
|
+
/** One radial gradient: its centre and radii, and its colour stops from the inside out. */
|
|
11
|
+
function radial(c, [x0, y0, r0, x1, y1, r1], stops) {
|
|
12
|
+
const g = c.createRadialGradient(x0, y0, r0, x1, y1, r1);
|
|
13
|
+
for (const [at, colour] of stops)
|
|
14
|
+
g.addColorStop(at, colour);
|
|
15
|
+
return g;
|
|
16
|
+
}
|
|
17
|
+
/** Each drawn simulation, one row. A table and not a chain of `else if`: a fifth simulation is one more row. */
|
|
18
|
+
const DRAWN = Object.freeze({
|
|
19
|
+
// a film over everything, translucent — the world shows through it, washed out
|
|
20
|
+
haze: (c, w, h) => { c.fillStyle = 'rgba(244,246,250,0.42)'; c.fillRect(0, 0, w, h); },
|
|
21
|
+
// the edges close in, the centre stays clear
|
|
22
|
+
tunnel: (c, w, h) => {
|
|
23
|
+
c.fillStyle = radial(c, [w / 2, h / 2, h * 0.12, w / 2, h / 2, h * 0.6], [[0, 'rgba(0,0,0,0)'], [.5, 'rgba(0,0,0,.55)'], [1, 'rgba(0,0,0,.99)']]);
|
|
24
|
+
c.fillRect(0, 0, w, h);
|
|
25
|
+
},
|
|
26
|
+
// the centre is gone, the edges stay
|
|
27
|
+
macular: (c, w, h) => {
|
|
28
|
+
c.fillStyle = radial(c, [w / 2, h / 2, 2, w / 2, h / 2, h * 0.34], [[0, 'rgba(12,12,15,.95)'], [.55, 'rgba(12,12,15,.5)'], [1, 'rgba(12,12,15,0)']]);
|
|
29
|
+
c.fillRect(0, 0, w, h);
|
|
30
|
+
},
|
|
31
|
+
// several dark spots, scattered, each in its own square
|
|
32
|
+
diabetic: (c, w, h) => {
|
|
33
|
+
for (const [fx, fy, fr] of SCATTERED_SPOTS) {
|
|
34
|
+
const x = fx * w, y = fy * h, r = fr * w;
|
|
35
|
+
c.fillStyle = radial(c, [x, y, 1, x, y, r], [[0, 'rgba(10,10,14,.95)'], [.5, 'rgba(10,10,14,.7)'], [1, 'rgba(10,10,14,0)']]);
|
|
36
|
+
c.fillRect(x - r, y - r, 2 * r, 2 * r);
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
/** Draws simulation `lv` on a `w`×`h` context, over transparency. A key that is not a drawn simulation draws nothing. */
|
|
41
|
+
export function drawLowVision(c, lv, w, h) {
|
|
42
|
+
// an OWN key only: `toString` is on every object, and it is not a simulation
|
|
43
|
+
if (!Object.hasOwn(DRAWN, lv))
|
|
44
|
+
return;
|
|
45
|
+
DRAWN[lv](c, w, h);
|
|
46
|
+
}
|
|
@@ -1,37 +1,49 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
import type { Store } from '../platform/storage.js';
|
|
2
3
|
/**
|
|
3
4
|
* 17-sample `feFuncR/G/B` table for tableValues, blending contrast-stretch (linear, α=1.3, μ=0.5) with an
|
|
4
|
-
* S-curve (quadratic) by `t`. NOT clamped —
|
|
5
|
+
* S-curve (quadratic) by `t`. NOT clamped — callers clamp `t` upstream.
|
|
5
6
|
*/
|
|
6
7
|
export declare function lqCurve(t: number): string;
|
|
7
8
|
/**
|
|
8
|
-
* Continuous `t` -> the i18n KEY of the screen-reader/UI label. NOT clamped
|
|
9
|
-
*
|
|
9
|
+
* Continuous `t` -> the i18n KEY of the screen-reader/UI label. NOT clamped (t<=0 and t>=1-ish inputs fall through to
|
|
10
|
+
* the end labels naturally).
|
|
10
11
|
*
|
|
11
12
|
* Returns a key rather than resolved text for two reasons. This module is a render leaf and stays free of the
|
|
12
13
|
* i18n dependency; and its parameter is already called `t`, so importing i18n's `t` here would shadow it — a
|
|
13
14
|
* rename to dodge a name clash is a worse reason to change a signature than the boundary itself.
|
|
14
15
|
*/
|
|
15
16
|
export declare function lqName(t: number): string;
|
|
16
|
-
/**
|
|
17
|
-
export
|
|
18
|
-
/** CSS `filter` fragment for the current lqT ('' when off) — ensures the SVG node exists BEFORE returning the
|
|
19
|
-
* `url()` reference (a dangling reference would hide the canvas). Composed by callers with viz-mode filters. */
|
|
20
|
-
export declare function lqFilter(): string;
|
|
21
|
-
/** Current lqT (0..1) — read by the visual-settings panel and the debug/`__incl` surface. */
|
|
22
|
-
export declare function getLqT(): number;
|
|
17
|
+
/** The document the `<filter>` node lives in — only what the shell touches. */
|
|
18
|
+
export type LqDoc = Pick<Document, 'getElementById' | 'createElementNS' | 'body'>;
|
|
23
19
|
export interface LqFilterCtx {
|
|
20
|
+
/** The document the SVG `<filter>` is created in and looked up from — passed, never the global one (ADR-0232). */
|
|
21
|
+
doc: LqDoc;
|
|
24
22
|
/**
|
|
25
|
-
* Recomposes the app's CSS filter after
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* composition — and the texture-cache invalidation it triggers elsewhere — belongs to other subsystems and
|
|
29
|
-
* stays in game.js; this module only owns lqT + the SVG filter node.
|
|
23
|
+
* Recomposes the app's CSS filter after the amount changes — composed with the active colour/simulation filter, and
|
|
24
|
+
* with whatever texture-cache invalidation that triggers elsewhere. That composition belongs to other subsystems and
|
|
25
|
+
* stays with the host; this module only owns the amount + the SVG filter node.
|
|
30
26
|
*/
|
|
31
27
|
onChange: () => void;
|
|
28
|
+
/**
|
|
29
|
+
* Where the amount is kept — the page's store, built by the root (ADR-0232, issue #207). Required: an enhancement read
|
|
30
|
+
* from nowhere starts OFF at every visit for the child with low vision who turned it on.
|
|
31
|
+
*/
|
|
32
|
+
store: Pick<Store, 'getNum' | 'set'>;
|
|
33
|
+
}
|
|
34
|
+
/** One root's L→Q enhancement. */
|
|
35
|
+
export interface LqFilter {
|
|
36
|
+
/** CSS `filter` fragment for the current amount ('' when off) — ensures the SVG node exists BEFORE returning the
|
|
37
|
+
* `url()` reference (a dangling reference would hide the canvas). Composed by callers with viz-mode filters. */
|
|
38
|
+
filter(): string;
|
|
39
|
+
/** The current amount (0..1) — read by the visual-settings panel and the debug/`__incl` surface. */
|
|
40
|
+
t(): number;
|
|
41
|
+
/** Sets the amount (clamped to 0..1), persists it, updates the live SVG table (if the filter is already on-screen),
|
|
42
|
+
* then calls the injected `onChange` to let the host recompose the CSS filter. */
|
|
43
|
+
set(t: number): void;
|
|
32
44
|
}
|
|
33
|
-
/**
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
export declare function
|
|
45
|
+
/**
|
|
46
|
+
* Builds the enhancement and READS the stored amount — at build, never at import (ADR-0232). The amount lives in this
|
|
47
|
+
* closure: two roots on one page each keep their own.
|
|
48
|
+
*/
|
|
49
|
+
export declare function createLqFilter(ctx: LqFilterCtx): LqFilter;
|