@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,200 +1,216 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// core/contract —
|
|
2
|
+
// core/contract — THE SEVEN FIELDS. The interface ADR-0030 chose as the engine's axis.
|
|
3
3
|
//
|
|
4
|
-
// ⚠️
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
// seria a segunda cópia da união que o `core/actions` existe para ser a primeira.
|
|
4
|
+
// ⚠️ Its one import is `import type` — erased at compile time, so the published module keeps no run-time dependency.
|
|
5
|
+
// What comes in is the VOCABULARY of the fourteen positions (ADR-0074), and it had to: a field about mapping that wrote
|
|
6
|
+
// its own keys would be a second copy of the union `core/actions` exists to be the first of.
|
|
8
7
|
//
|
|
9
|
-
// =========================
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
8
|
+
// ========================= WHAT THIS IS, AND WHAT IT IS NOT =========================
|
|
9
|
+
// Not a framework nor a base class. It is the ONLY thing the accessibility stack knows about a game. ADR-0027 measured
|
|
10
|
+
// that the three functions that looked MOST generic were the three most tied to the platformer — the role table was a
|
|
11
|
+
// tile table, the cane probe used facing and a hitbox, the sonar defined a target as "a coin this player has not taken".
|
|
12
|
+
// None was wrong; all were GUESSING the game instead of asking.
|
|
14
13
|
//
|
|
15
|
-
//
|
|
16
|
-
//
|
|
14
|
+
// These seven fields are the questions. A game that answers them gets sonar, high contrast, scanning, screen reader and
|
|
15
|
+
// Libras without writing a line of them — which is the product, not "one more 2D engine" (ADR-0027).
|
|
17
16
|
//
|
|
18
|
-
// =========================
|
|
19
|
-
//
|
|
20
|
-
//
|
|
17
|
+
// ========================= PURE, ON PURPOSE =========================
|
|
18
|
+
// Only TYPES and pure functions. No dependencies, no I/O at import: a LEAF module, importable from both sides of the
|
|
19
|
+
// boundary and from the `node` project. A contract that needed PIXI would already have chosen the genre.
|
|
21
20
|
//
|
|
22
|
-
// =========================
|
|
23
|
-
//
|
|
24
|
-
//
|
|
25
|
-
//
|
|
26
|
-
//
|
|
21
|
+
// ========================= HOW IT IS USED: SLICES, NOT THE FAT OBJECT =========================
|
|
22
|
+
// The rule of `core/entity` holds here too: a consumer declares the MINIMAL slice it needs, with `Pick`, instead of
|
|
23
|
+
// receiving the whole declaration. High contrast wants `Pick<GameDeclaration, 'roleAt'>` and nothing else; the HUD wants
|
|
24
|
+
// `'objective'`. A fat interface would destroy the project's testability — every fixture would invent fields the module
|
|
25
|
+
// does not use.
|
|
27
26
|
//
|
|
28
|
-
// =========================
|
|
29
|
-
//
|
|
30
|
-
//
|
|
31
|
-
|
|
32
|
-
// ADR-0030 registra que "o contrato basta" só vira resultado quando DOIS presets existirem.
|
|
33
|
-
/** A dimensão que a topologia declara. `hotspots` não tem espaço, logo não tem dimensão. */
|
|
27
|
+
// ========================= EVIDENCE =========================
|
|
28
|
+
// Each field was born from a REAL consumer that used to guess, and ADR-0030 records that "the contract is enough" only
|
|
29
|
+
// becomes a result when TWO presets exist.
|
|
30
|
+
/** The dimension the topology declares. `hotspots` has no space, so no dimension. */
|
|
34
31
|
export function dimension(t) { return t.kind === 'hotspots' ? 0 : t.size.length; }
|
|
35
|
-
/**
|
|
36
|
-
function
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
* Confere FORMA, não verdade: que a topologia tenha medida positiva, que as funções existam, que o objetivo
|
|
45
|
-
* não peça um alvo impossível. Não tem como conferir se `roleAt` devolve o papel CERTO — isso é o teste do
|
|
46
|
-
* preset, não deste módulo.
|
|
47
|
-
*/
|
|
48
|
-
export function conformanceProblems(d) {
|
|
49
|
-
const p = [];
|
|
50
|
-
if (!d)
|
|
51
|
-
return ['declaration missing'];
|
|
52
|
-
// ⚠️ DUAS FALHAS DIFERENTES, E ELAS PRECISAM DE DUAS MENSAGENS. `topology` ausente é um campo que ninguém
|
|
53
|
-
// escreveu; `topology` que não é função é o campo escrito à moda antiga — um VALOR, que passava no
|
|
54
|
-
// TypeScript de quem não recompilou e morreria em produção com "topology is not a function". Dizer só
|
|
55
|
-
// "ausente" mandaria o autor procurar um campo que está lá, à vista.
|
|
56
|
-
const t = typeof d.topology === 'function' ? d.topology() : undefined;
|
|
32
|
+
/** Axis `i` of a point, for whoever walks dimensions instead of naming them. */
|
|
33
|
+
function axis(s, i) { return i === 0 ? s.x : i === 1 ? s.y : (s.z ?? 0); }
|
|
34
|
+
function topologyProblems(d) {
|
|
35
|
+
// ⚠️ TWO DIFFERENT FAILURES, AND THEY NEED TWO MESSAGES. A missing `topology` is a field nobody wrote; a `topology`
|
|
36
|
+
// that is not a function is the field written the old way — a VALUE, which passed the TypeScript of whoever had not
|
|
37
|
+
// recompiled and would die in production with "topology is not a function". Saying only "missing" would send the
|
|
38
|
+
// author looking for a field that is right there.
|
|
39
|
+
// Each answer excludes the others, so each one returns: the order is the rule, and the space is asked for only once it
|
|
40
|
+
// is known to be a function.
|
|
57
41
|
if (d.topology === undefined || d.topology === null)
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
p.push('topology.move: must be "orthogonal" (L1), "diagonal" (L8/Chebyshev) or "free" (L2) - it is the metric the sonar counts in');
|
|
77
|
-
}
|
|
78
|
-
// `frame` é em que PALAVRAS a direção é dita. Sem ele a engine escolheria pela criança, e num jogo de
|
|
79
|
-
// plataforma escolheria mal: norte e sul não querem dizer nada numa vista lateral.
|
|
80
|
-
if (t.frame !== 'compass' && t.frame !== 'clock') {
|
|
81
|
-
p.push('topology.frame: must be "compass" (board, top-down, map, 3D) or "clock" (2D side view)');
|
|
82
|
-
}
|
|
83
|
-
// `unit` é o que dá MÉTRICA a um espaço contínuo: sem ela, "a dois passos" não tem como ser dito.
|
|
84
|
-
if (t.kind === 'continuous' && !(t.unit > 0)) {
|
|
85
|
-
p.push('topology.continuous: unit must be positive (it is the metric the narration counts in)');
|
|
86
|
-
}
|
|
42
|
+
return ['topology: missing'];
|
|
43
|
+
if (typeof d.topology !== 'function')
|
|
44
|
+
return ['topology: must be a FUNCTION (it was a value until ADR-0084)'];
|
|
45
|
+
const t = d.topology();
|
|
46
|
+
if (!t)
|
|
47
|
+
return ['topology: the function returned nothing'];
|
|
48
|
+
if (t.kind === 'grid' || t.kind === 'continuous')
|
|
49
|
+
return [...sizeProblems(t), ...metricProblems(t), ...frameProblems(t)];
|
|
50
|
+
if (t.kind === 'hotspots')
|
|
51
|
+
return hotspotProblems(t);
|
|
52
|
+
return ['topology: unknown kind'];
|
|
53
|
+
}
|
|
54
|
+
// ⚠️ THE DIMENSION IS `size.length`, which is why it is checked BEFORE anything: an empty or four-entry `size` is not a
|
|
55
|
+
// bad measurement, it is a space `Spot` cannot represent — and the error would show far from here, as an axis simply
|
|
56
|
+
// ignored.
|
|
57
|
+
function sizeProblems(t) {
|
|
58
|
+
if (!Array.isArray(t.size) || t.size.length < 2 || t.size.length > 3) {
|
|
59
|
+
return ['topology.size: must be [w, h] or [w, h, d] - dimension is 2 or 3, and it is size.length'];
|
|
87
60
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
61
|
+
return !t.size.every((n) => n > 0) ? ['topology.size: every extent must be positive'] : [];
|
|
62
|
+
}
|
|
63
|
+
function metricProblems(t) {
|
|
64
|
+
const p = [];
|
|
65
|
+
// `move` decides the metric. Absent, distance would be guessed — and guessing Chebyshev in a sliding puzzle
|
|
66
|
+
// under-reports up to 2×, finding §3 of ADR-0080.
|
|
67
|
+
if (t.move !== 'orthogonal' && t.move !== 'diagonal' && t.move !== 'free') {
|
|
68
|
+
p.push('topology.move: must be "orthogonal" (L1), "diagonal" (L8/Chebyshev) or "free" (L2) - it is the metric the sonar counts in');
|
|
93
69
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
// mundo NÃO foi declarado. Antes deste campo, esquecer e escolher «não tenho espaço» produziam o mesmo
|
|
98
|
-
// silêncio — e o silêncio era resolvido pela engine a adivinhar que o mundo é a canvas.
|
|
99
|
-
if (d.world === undefined || d.world === null) {
|
|
100
|
-
p.push('world: missing - declare the element that IS the game, or {kind:"none"} if it has no space');
|
|
70
|
+
// `unit` is what gives a continuous space a METRIC: without it, "two steps away" cannot be said.
|
|
71
|
+
if (t.kind === 'continuous' && !(t.unit > 0)) {
|
|
72
|
+
p.push('topology.continuous: unit must be positive (it is the metric the narration counts in)');
|
|
101
73
|
}
|
|
102
|
-
|
|
103
|
-
|
|
74
|
+
return p;
|
|
75
|
+
}
|
|
76
|
+
// `frame` is in what WORDS a direction is said. Without it the engine would choose for the child, and in a platformer it
|
|
77
|
+
// would choose badly: north and south mean nothing in a side view.
|
|
78
|
+
function frameProblems(t) {
|
|
79
|
+
return t.frame !== 'compass' && t.frame !== 'clock'
|
|
80
|
+
? ['topology.frame: must be "compass" (board, top-down, map, 3D) or "clock" (2D side view)']
|
|
81
|
+
: [];
|
|
82
|
+
}
|
|
83
|
+
function hotspotProblems(t) {
|
|
84
|
+
if (!t.order?.length)
|
|
85
|
+
return ['topology.hotspots: order is empty - there is nowhere to navigate'];
|
|
86
|
+
return new Set(t.order).size !== t.order.length ? ['topology.hotspots: order has a repeated id'] : [];
|
|
87
|
+
}
|
|
88
|
+
function worldProblems(d) {
|
|
89
|
+
// ⚠️ THREE DISTINCT FAILURES, and the third is the one this field exists to make impossible: a game whose world was
|
|
90
|
+
// NOT declared. Before this field, forgetting and choosing "I have no space" produced the same silence — and the
|
|
91
|
+
// silence was resolved by the engine guessing that the world is the canvas.
|
|
92
|
+
if (d.world === undefined || d.world === null) {
|
|
93
|
+
return ['world: missing - declare the element that IS the game, or {kind:"none"} if it has no space'];
|
|
104
94
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
}
|
|
113
|
-
else if (w.kind !== 'none')
|
|
114
|
-
p.push('world: unknown kind');
|
|
95
|
+
if (typeof d.world !== 'function')
|
|
96
|
+
return ['world: must be a FUNCTION'];
|
|
97
|
+
const w = d.world();
|
|
98
|
+
if (!w)
|
|
99
|
+
return ['world: the function returned nothing'];
|
|
100
|
+
if (w.kind === 'element') {
|
|
101
|
+
return !w.selector || !w.selector.trim() ? ['world: kind "element" needs a non-empty selector'] : [];
|
|
115
102
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
103
|
+
return w.kind !== 'none' ? ['world: unknown kind'] : [];
|
|
104
|
+
}
|
|
105
|
+
function holdsAtOnceProblems(d) {
|
|
106
|
+
// ⚠️ THE MESSAGE NAMES THE WAY OUT, like the others do. A game that does not declare this gets no default — it gets a
|
|
107
|
+
// sentence saying what to ask itself, because the answer is the game's and nobody else's. (ADR-0104 §A.)
|
|
119
108
|
if (typeof d.holdsAtOnce !== 'function') {
|
|
120
|
-
// ⚠️
|
|
121
|
-
//
|
|
122
|
-
//
|
|
123
|
-
|
|
124
|
-
p.push('holdsAtOnce: missing - declare how many positions are held AT ONCE (three if three fingers must press together, one if commands arrive one at a time)');
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
const n = d.holdsAtOnce();
|
|
128
|
-
if (!Number.isInteger(n) || n < 1) {
|
|
129
|
-
// Zero não é «não usa controle»: um jogo que não segura posição nenhuma não é jogável, e devolver zero
|
|
130
|
-
// faria a aritmética do alcance passar por vacuidade — o mesmo defeito que o `reachable` recusa.
|
|
131
|
-
p.push('holdsAtOnce: must be an integer >= 1 - a game that holds nothing cannot be played');
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
// ⚠️ E ESTA É A OUTRA PERGUNTA, que o número acima parecia responder e não responde (ADR-0115). A mensagem
|
|
135
|
-
// diz o que a ausência CUSTA, e não só o que falta: sem ela, um jogo que nada segura oferece um controle de
|
|
136
|
-
// acessibilidade que não faz nada, e um que segura tudo pode não o oferecer a quem depende dele.
|
|
137
|
-
if (typeof d.seguraTeclas !== 'function') {
|
|
138
|
-
p.push('seguraTeclas: missing - declare whether any key is HELD in this game (latching is offered only where something can be held, and a game that holds nothing must not show a control that does nothing)');
|
|
109
|
+
// ⚠️ THE MESSAGE NAMES NO GENRE, and the boundary gate insisted: a first wording used a quiz as the example and the
|
|
110
|
+
// gate refused the word in a line of engine CODE. It was right, and the sentence got better: it describes the SHAPE
|
|
111
|
+
// of the question, which serves every game, instead of two examples that serve two.
|
|
112
|
+
return ['holdsAtOnce: missing - declare how many positions are held AT ONCE (three if three fingers must press together, one if commands arrive one at a time)'];
|
|
139
113
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
//
|
|
149
|
-
//
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
// pt-BR do `engine-i18n` casa palavras funcionais isoladas, e `as` é artigo plural em português. Uma
|
|
154
|
-
// mensagem INGLESA que diga «declare it as …» é contada como texto cru e faz o tecto do módulo subir.
|
|
155
|
-
// O cabeçalho daquele gate já admite a aproximação («senão 'mode' casa 'de'»); reescrever a frase custa
|
|
156
|
-
// nada e afrouxar o detector custaria a razão de ele existir.
|
|
157
|
-
p.push('needsPointer: must be a function - write `needsPointer: () => true`, because a game may draw in one phase and not in another');
|
|
158
|
-
}
|
|
159
|
-
else if (typeof d.needsPointer() !== 'boolean') {
|
|
160
|
-
p.push('needsPointer: must return a boolean - a non-boolean would be truthy and refuse devices this game can actually use');
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
// ⚠️ E O MESMO PARA O MAPEAMENTO, com uma razão própria: aqui um valor em vez de uma função não seria um
|
|
164
|
-
// erro barulhento, seria um mapeamento SILENCIOSAMENTE ignorado — a fábrica da engine ficava, e a criança
|
|
165
|
-
// jogava com um teclado que o autor do jogo julga ter mudado. E devolver algo que não é objecto nem `null`
|
|
166
|
-
// atravessaria o `Object.assign` sem escrever nada, que é a mesma ausência com outra roupa.
|
|
167
|
-
if (d.mapeamentoDoTeclado !== undefined) {
|
|
168
|
-
if (typeof d.mapeamentoDoTeclado !== 'function') {
|
|
169
|
-
p.push('mapeamentoDoTeclado: must be a function - write `mapeamentoDoTeclado: (jogadores, assento) => ({ action1: ["KeyQ"] })`, because the keyboard of two players is not the keyboard of one');
|
|
170
|
-
}
|
|
171
|
-
else {
|
|
172
|
-
const m = d.mapeamentoDoTeclado(1, 0);
|
|
173
|
-
if (m !== null && (typeof m !== 'object' || Array.isArray(m))) {
|
|
174
|
-
p.push('mapeamentoDoTeclado: must return an object or null - anything else is merged into nothing, and this game keeps the engine factory while its author believes otherwise');
|
|
175
|
-
}
|
|
176
|
-
}
|
|
114
|
+
const n = d.holdsAtOnce();
|
|
115
|
+
// Zero is not "uses no controls": a game that holds no position cannot be played, and returning zero would pass the
|
|
116
|
+
// reach arithmetic vacuously — the same defect `reachable` refuses.
|
|
117
|
+
return !Number.isInteger(n) || n < 1
|
|
118
|
+
? ['holdsAtOnce: must be an integer >= 1 - a game that holds nothing cannot be played']
|
|
119
|
+
: [];
|
|
120
|
+
}
|
|
121
|
+
function latchingProblems(d) {
|
|
122
|
+
// ⚠️ AND THIS IS THE OTHER QUESTION, which the number above seemed to answer and does not (ADR-0115). The message says
|
|
123
|
+
// what the absence COSTS, not only what is missing: without it a game that holds nothing offers an accessibility
|
|
124
|
+
// control that does nothing, and one that holds everything may not offer it to whoever depends on it.
|
|
125
|
+
if (typeof d.holdsKeys !== 'function') {
|
|
126
|
+
return ['holdsKeys: missing - declare whether any key is HELD in this game (latching is offered only where something can be held, and a game that holds nothing must not show a control that does nothing)'];
|
|
177
127
|
}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
128
|
+
// A non-boolean would be truthy and offer the toggle to everyone — the same silent defect `needsPointer` refuses just
|
|
129
|
+
// below, for the same reason.
|
|
130
|
+
return typeof d.holdsKeys() !== 'boolean'
|
|
131
|
+
? ['holdsKeys: must return a boolean - a non-boolean is truthy and would offer latching in a game where nothing is held']
|
|
132
|
+
: [];
|
|
133
|
+
}
|
|
134
|
+
function pointerProblems(d) {
|
|
135
|
+
// ⚠️ OPTIONAL, BUT NOT UNCHECKED. Absent is the answer `false` and no problem — see the note on the field. What is
|
|
136
|
+
// refused is declaring it WRONG: `needsPointer: true` (a value instead of a function) would always be truthy for
|
|
137
|
+
// being an object, and one returning a string too. Either way the game would believe it had declared, the reach would
|
|
138
|
+
// read something other than what it meant, and nobody would know — the silent defect this whole function exists to
|
|
139
|
+
// prevent.
|
|
140
|
+
if (d.needsPointer === undefined)
|
|
141
|
+
return [];
|
|
142
|
+
if (typeof d.needsPointer !== 'function') {
|
|
143
|
+
// ⚠️ MESSAGES WITHOUT THE WORD `as`, worth a line because it bites again: the raw-prose detector of `engine-i18n`
|
|
144
|
+
// matches isolated function words, and `as` is a plural article in Portuguese. An ENGLISH message saying
|
|
145
|
+
// "declare it as …" is counted as raw text and raises the module's ceiling. Rewording costs nothing; loosening the
|
|
146
|
+
// detector would cost the reason it exists.
|
|
147
|
+
return ['needsPointer: must be a function - write `needsPointer: () => true`, because a game may draw in one phase and not in another'];
|
|
188
148
|
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
149
|
+
return typeof d.needsPointer() !== 'boolean'
|
|
150
|
+
? ['needsPointer: must return a boolean - a non-boolean would be truthy and refuse devices this game can actually use']
|
|
151
|
+
: [];
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* A MAPPING DECLARED BY THE GAME, for the keyboard or the pad.
|
|
155
|
+
*
|
|
156
|
+
* 🔴 IT WAS THE SAME CHECK WRITTEN TWICE, and the two copies were not equally guarded: the keyboard's two decisions had
|
|
157
|
+
* cases and the pad's two were BLIND — asymmetric coverage is how a duplicate announces itself, because one copy gets
|
|
158
|
+
* attention and the other is assumed.
|
|
159
|
+
*
|
|
160
|
+
* ⚠️ Here a value instead of a function would not be a loud error, it would be a mapping SILENTLY ignored — the engine's
|
|
161
|
+
* factory would stay, and the child would play with controls the game's author believes they changed. And returning
|
|
162
|
+
* something that is neither an object nor `null` would pass through `Object.assign` writing nothing, the same absence in
|
|
163
|
+
* other clothes.
|
|
164
|
+
*/
|
|
165
|
+
function mappingProblems(field, declared, example, because) {
|
|
166
|
+
if (declared === undefined)
|
|
167
|
+
return [];
|
|
168
|
+
if (typeof declared !== 'function') {
|
|
169
|
+
return [`${field}: must be a function - write \`${field}: ${example}\`, because ${because}`];
|
|
194
170
|
}
|
|
195
|
-
|
|
171
|
+
// The names of THIS annotation are mine and were born in English; the field's own (`players`, `seat`) became
|
|
172
|
+
// English with phase 7 of the English plan (ADR-0230).
|
|
173
|
+
const m = declared(1, 0);
|
|
174
|
+
return m !== null && (typeof m !== 'object' || Array.isArray(m))
|
|
175
|
+
? [`${field}: must return an object or null - anything else is merged into nothing, and this game keeps the engine factory while its author believes otherwise`]
|
|
176
|
+
: [];
|
|
177
|
+
}
|
|
178
|
+
const keyboardMappingProblems = (d) => mappingProblems('keyboardMapping', d.keyboardMapping, '(players, seat) => ({ action1: ["KeyQ"] })', 'the keyboard of two players is not the keyboard of one');
|
|
179
|
+
const padMappingProblems = (d) => mappingProblems('padMapping', d.padMapping, '(players, seat) => ({ action1: 3 })', 'two seats may want different arrangements');
|
|
180
|
+
const tickProblems = (d) => (d.tick !== 'player' && d.tick !== 'clock' ? ['tick: must be "player" or "clock"'] : []);
|
|
181
|
+
/** The five questions the engine asks the world. Each absent one is ONE problem, and the message says WHICH is missing. */
|
|
182
|
+
const READERS = ['roleAt', 'nameAt', 'focusOf', 'objectiveOf', 'targetsOf'];
|
|
183
|
+
const readerProblems = (d) => READERS.filter((f) => typeof d[f] !== 'function').map((f) => `${f}: missing`);
|
|
184
|
+
/**
|
|
185
|
+
* 📌 THIS TABLE'S ORDER IS THE ORDER OF THE MESSAGES, and it matters to the reader: an author writing a preset gets the
|
|
186
|
+
* problems in the order the fields appear in the contract, not in the order this file grew.
|
|
187
|
+
*/
|
|
188
|
+
const FIELD_CHECKS = [
|
|
189
|
+
topologyProblems,
|
|
190
|
+
worldProblems,
|
|
191
|
+
holdsAtOnceProblems,
|
|
192
|
+
latchingProblems,
|
|
193
|
+
pointerProblems,
|
|
194
|
+
keyboardMappingProblems,
|
|
195
|
+
padMappingProblems,
|
|
196
|
+
tickProblems,
|
|
197
|
+
readerProblems,
|
|
198
|
+
];
|
|
199
|
+
/**
|
|
200
|
+
* Is a declaration well formed? Returns the list of problems — EMPTY means conformant.
|
|
201
|
+
*
|
|
202
|
+
* It exists because a preset is a promise, and a promise without a check is a comment. ADR-0030 says a genre package
|
|
203
|
+
* "either satisfies the seven fields or does not"; this is the "does not".
|
|
204
|
+
*
|
|
205
|
+
* It checks SHAPE, not truth: that the topology has a positive measure, that the functions exist. It cannot check
|
|
206
|
+
* whether `roleAt` returns the RIGHT role — that is the preset's own test, not this module's.
|
|
207
|
+
*/
|
|
208
|
+
export function conformanceProblems(d) {
|
|
209
|
+
if (!d)
|
|
210
|
+
return ['declaration missing'];
|
|
211
|
+
return FIELD_CHECKS.flatMap((check) => check(d));
|
|
196
212
|
}
|
|
197
|
-
/**
|
|
213
|
+
/** Is a speakable name well formed? Empty text is the silent defect: the screen reader simply goes quiet. */
|
|
198
214
|
export function speakableProblems(s) {
|
|
199
215
|
if (!s)
|
|
200
216
|
return ['name missing'];
|
|
@@ -208,32 +224,32 @@ export function speakableProblems(s) {
|
|
|
208
224
|
return p;
|
|
209
225
|
}
|
|
210
226
|
/**
|
|
211
|
-
*
|
|
212
|
-
*
|
|
227
|
+
* The distance between two spots IN THE DECLARED METRIC — the one the game declared in `move`, over as many dimensions
|
|
228
|
+
* as it declared in `size`. It is what the sonar needs and used to compute in pixels.
|
|
213
229
|
*
|
|
214
|
-
* ⚠️
|
|
215
|
-
*
|
|
230
|
+
* ⚠️ THE GRID WAS ALWAYS CHEBYSHEV, which cost up to 2× error in a sliding puzzle. The three rules are not taste: they
|
|
231
|
+
* are what "one step" means in each game, and the sonar speaks in steps.
|
|
216
232
|
*/
|
|
217
233
|
export function distance(t, a, b) {
|
|
218
|
-
//
|
|
234
|
+
// A list: the distance is how many items lie between. There is no axis, so there is no movement rule.
|
|
219
235
|
if (t.kind === 'hotspots')
|
|
220
236
|
return Math.abs(a.x - b.x);
|
|
221
237
|
const d = [];
|
|
222
238
|
for (let i = 0; i < t.size.length; i++)
|
|
223
|
-
d.push(Math.abs(
|
|
224
|
-
const
|
|
225
|
-
: t.move === 'diagonal' ? Math.max(...d) // L∞: a diagonal
|
|
226
|
-
: Math.hypot(...d); // L²:
|
|
227
|
-
//
|
|
228
|
-
return t.kind === 'continuous' ?
|
|
239
|
+
d.push(Math.abs(axis(a, i) - axis(b, i)));
|
|
240
|
+
const rawDistance = t.move === 'orthogonal' ? d.reduce((s, v) => s + v, 0) // L¹: each axis costs on its own
|
|
241
|
+
: t.move === 'diagonal' ? Math.max(...d) // L∞: a diagonal costs one step
|
|
242
|
+
: Math.hypot(...d); // L²: the straight line between them
|
|
243
|
+
// Continuous: divided by the unit — the result is "how many steps", not "how many pixels".
|
|
244
|
+
return t.kind === 'continuous' ? rawDistance / t.unit : rawDistance;
|
|
229
245
|
}
|
|
230
246
|
/**
|
|
231
|
-
*
|
|
247
|
+
* WHERE `to` LIES AS SEEN FROM `from`, already in the words the topology declared.
|
|
232
248
|
*
|
|
233
|
-
* ⚠️
|
|
234
|
-
*
|
|
235
|
-
*
|
|
236
|
-
*
|
|
249
|
+
* ⚠️ TWO AXES WITH DIFFERENT CONVENTIONS, and silence about it would be the defect. `y` GROWS DOWNWARD — the screen's
|
|
250
|
+
* coordinate, inherited from the canvas and all existing code, not a choice of this function. `z` GROWS UPWARD, and
|
|
251
|
+
* that is a choice: nothing forces it, and in three dimensions "zenith" can only mean the side the child would look at
|
|
252
|
+
* by raising their head. A 3D game has to know both.
|
|
237
253
|
*/
|
|
238
254
|
export function bearing(t, from, to) {
|
|
239
255
|
if (t.kind === 'hotspots')
|
|
@@ -241,22 +257,22 @@ export function bearing(t, from, to) {
|
|
|
241
257
|
const dx = to.x - from.x;
|
|
242
258
|
const dy = to.y - from.y;
|
|
243
259
|
const dz = t.size.length > 2 ? (to.z ?? 0) - (from.z ?? 0) : 0;
|
|
244
|
-
const
|
|
245
|
-
//
|
|
246
|
-
//
|
|
247
|
-
if (Math.abs(dz) >
|
|
260
|
+
const plane = Math.hypot(dx, dy);
|
|
261
|
+
// SPACE's vertical axis wins when it dominates the plane — and wins in words of its own, because `up`/`down` are
|
|
262
|
+
// already ACTIONS in `core/actions`. See the comment on `Heading`.
|
|
263
|
+
if (Math.abs(dz) > plane)
|
|
248
264
|
return { kind: 'compass', heading: dz > 0 ? 'zenith' : 'nadir' };
|
|
249
|
-
if (
|
|
250
|
-
return { kind: 'none' }; //
|
|
251
|
-
// `-dy`
|
|
252
|
-
//
|
|
253
|
-
const ang = Math.atan2(-dy, dx); // 0 =
|
|
265
|
+
if (plane === 0)
|
|
266
|
+
return { kind: 'none' }; // the same place: there is no direction to say, and inventing one would lie
|
|
267
|
+
// `-dy` because north is UP and `y` grows downward. Without this swap the rose comes out inverted, and the test that
|
|
268
|
+
// would catch it is the only one that needs to exist here.
|
|
269
|
+
const ang = Math.atan2(-dy, dx); // 0 = east, growing anticlockwise
|
|
254
270
|
if (t.frame === 'clock') {
|
|
255
|
-
// 12
|
|
256
|
-
const
|
|
257
|
-
const h = Math.round(
|
|
271
|
+
// 12 o'clock is UP and the hands move clockwise — hence `90 - degrees`, not `degrees`.
|
|
272
|
+
const clockwiseDegrees = ((90 - (ang * 180) / Math.PI) % 360 + 360) % 360;
|
|
273
|
+
const h = Math.round(clockwiseDegrees / 30) % 12;
|
|
258
274
|
return { kind: 'clock', hour: h === 0 ? 12 : h };
|
|
259
275
|
}
|
|
260
|
-
const
|
|
261
|
-
return { kind: 'compass', heading:
|
|
276
|
+
const COMPASS_ROSE = ['e', 'ne', 'n', 'nw', 'w', 'sw', 's', 'se'];
|
|
277
|
+
return { kind: 'compass', heading: COMPASS_ROSE[(Math.round(ang / (Math.PI / 4)) % 8 + 8) % 8] };
|
|
262
278
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
2
|
/**
|
|
3
|
-
* `document.querySelector`,
|
|
3
|
+
* `document.querySelector`, in the shape modules receive it by INJECTION — never importing `document`.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
* `.dataset`, `.focus()`.
|
|
7
|
-
*
|
|
5
|
+
* The default is `HTMLElement` and not `Element` because that is what callers use: `.hidden`, `.textContent`,
|
|
6
|
+
* `.dataset`, `.focus()`. Whoever needs something else instantiates it — there is a `$<SVGElement>` in the tree, and
|
|
7
|
+
* it is why the CONSTRAINT stays `Element`.
|
|
8
8
|
*/
|
|
9
9
|
export type DomQuery = <T extends Element = HTMLElement>(sel: string) => T | null;
|
|
@@ -1,25 +1,17 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// core/dom-query —
|
|
2
|
+
// core/dom-query — THE INJECTED DOM SELECTOR, declared ONCE.
|
|
3
3
|
//
|
|
4
|
-
// =========================
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
// `input/touch`, `input/touch-bindings`, `ui/activities-menu`, `ui/hud`, `ui/map-hub`, `ui/menu-nav`,
|
|
8
|
-
// `ui/settings-audio`, `ui/settings-controls`, `ui/settings-motor`, `ui/settings-typo`, `ui/shell` e
|
|
9
|
-
// `ui/title`.
|
|
4
|
+
// ========================= WHY THIS FILE EXISTS =========================
|
|
5
|
+
// The same `DomQuery` declaration — a generic arrow over `Element`, returning `T | null` — was written in SIXTEEN
|
|
6
|
+
// modules: ADR-0039's defect one step up (there a FIELD described twice, here a TYPE described sixteen times).
|
|
10
7
|
//
|
|
11
|
-
//
|
|
12
|
-
//
|
|
8
|
+
// And, as copies do, they diverged. One declared it NON-generic. A generic function assigned to a non-generic
|
|
9
|
+
// signature is instantiated at its CONSTRAINT, not its default: the real `$`, `<T extends Element = HTMLElement>`,
|
|
10
|
+
// became `Element` — and `Element` has no `hidden`. Two type errors came from it, and neither mentioned a selector.
|
|
13
11
|
//
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
//
|
|
19
|
-
//
|
|
20
|
-
// ========================= POR QUE EM `core/` =========================
|
|
21
|
-
// Porque é a camada que todos podem importar sem inverter nada — `game/`, `input/`, `render/` e `ui/`. E
|
|
22
|
-
// não custa dependência nenhuma: o arquivo é SÓ TIPO, `import type` é apagado na compilação, e `Element` é
|
|
23
|
-
// global de `lib.dom`, ligado no tsconfig. Nada aqui roda, então a propriedade de `core/` ser testável sem
|
|
24
|
-
// navegador continua intacta.
|
|
12
|
+
// ========================= WHY IN `core/` =========================
|
|
13
|
+
// Because it is the layer everyone may import without inverting anything — `input/`, `render/` and `ui/` (ADR-0173).
|
|
14
|
+
// And it costs no dependency: `Element` is a `lib.dom` global, and a type is erased at build.
|
|
15
|
+
// 📌 It holds only the TYPE. The two global queries that lived here (`$`, `$$` over `globalThis.document`) left in
|
|
16
|
+
// ADR-0232 D4: every module now queries the document it is GIVEN, and the root builds its `$` over the host's.
|
|
25
17
|
export {};
|