@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,128 +1,160 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// ui/settings-motion.ts —
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
// motor), e rm/saveRM/RM_KEYS/RM_CHAR (estado de movimento reduzido — fica em game.js porque applyCalm(), o
|
|
10
|
-
// modo TEA, também os usa; não é exclusivo deste painel). `players`/`numPlayers` (core/state.ts) e CRT/applyCrt
|
|
11
|
-
// (render/crt.ts, já extraído) são importados DIRETO — são módulos-folha, não game.js. A API de render/fx.ts
|
|
12
|
-
// NÃO é referenciada aqui: renderMotion() nunca leu/escreveu JUICE (só o painel ?debug o faz) — ver nota no
|
|
13
|
-
// retorno da extração antes de assumir que falta wiring.
|
|
2
|
+
// ui/settings-motion.ts — the Motion panel (#animation overlay): reduced motion (WCAG 2.3.3 + Pause/Stop/Hide 2.2.2) per
|
|
3
|
+
// CHARACTER (walk/breath/flavour) and per SCENE (parallax/decor/items/particles), the stop/resume-all master button, the
|
|
4
|
+
// player selection and the CRT look (scanlines/vignette/corners), which lives on the SAME screen. What a choice IS lives in
|
|
5
|
+
// ./motion-choices.js. INJECTED via initSettingsMotion(ctx): $ (selector), srSay, store (persistence), matchMedia (the
|
|
6
|
+
// operating system's reduced-motion answer, ADR-0232), frontOverlay/toggleBtn (helpers shared with the sibling panels),
|
|
7
|
+
// the root's CRT (`crt`, ADR-0232 D4), and optionally rm/saveRM/rmKeys/rmChar (reduced-motion state, which a cartridge may
|
|
8
|
+
// share by reference). Only the factory default (`CRT_DEFAULT`, a frozen constant) is imported from render/crt.ts.
|
|
14
9
|
import { toggleLabel, toggleAria } from './dom.js';
|
|
15
|
-
import {
|
|
16
|
-
import { defaultReducedMotion } from '../core/
|
|
10
|
+
import { CRT_DEFAULT } from '../render/crt.js';
|
|
11
|
+
import { defaultReducedMotion } from '../core/setting-defaults.js';
|
|
17
12
|
import { markChanged, markMenuChanged } from './changed-mark.js';
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
|
|
21
|
-
*
|
|
22
|
-
*
|
|
13
|
+
import { mountSteps, updateSteps, nextStep, controlRow, labelRow, sectionHeader } from './panel-widgets.js';
|
|
14
|
+
import { SCENE_KEYS, CHARACTER_ANIMATIONS, readStoredScene, storeScene } from './motion-scene.js';
|
|
15
|
+
/*
|
|
16
|
+
* 📌 THE PURE HALF LIVES IN `ui/motion-choices` (ADR-0221), and the SUITE pointed at the seam:
|
|
17
|
+
* `tests/settings-motion.node.test.js` exercises exactly these names, and the node project mounts no document.
|
|
23
18
|
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
|
|
27
|
-
|
|
19
|
+
* ⚠️ NO ALIAS: a re-export would keep alive a path nothing in here uses and make the surface snapshot lie, because it
|
|
20
|
+
* does not see re-exports (issue #204).
|
|
21
|
+
*/
|
|
22
|
+
import { RM_LABEL, CRT_LBL, CRT_ROUND_LEVELS, clampSelectedPlayer, allMotionFrozen, motionMasterLabel, sceneMotionAnnouncement, crtToggleAnnouncement, crtLevelLabel, crtRoundAnnouncement, stopResumeAllAnnouncement, } from './motion-choices.js';
|
|
23
|
+
/*
|
|
24
|
+
* 🎯 NO "SOON" MECHANISM: it had no subject — no path let a cartridge supply a coming-soon row, so the only thing
|
|
25
|
+
* keeping it alive would be tests. The `ui.soon` key stays in the three dictionaries, because the no-parentheses label
|
|
26
|
+
* gate still reads it.
|
|
28
27
|
*/
|
|
29
|
-
export const RM_LABEL = {
|
|
30
|
-
parallax: 'rm.parallax', decor: 'rm.decor', items: 'rm.items',
|
|
31
|
-
walk: 'rm.walk', breath: 'rm.breath', flavor: 'rm.flavor', particles: 'rm.particles',
|
|
32
|
-
};
|
|
33
|
-
// Alvos de cena "em breve" (hoje nenhum — os 4 já agem).
|
|
34
|
-
export const RM_SOON = new Set([]);
|
|
35
|
-
/** Cabeçalho de seção, com a etiqueta "vale para todos os jogadores".
|
|
36
|
-
*
|
|
37
|
-
* A etiqueta estava escrita à mão em cada `<h3>` e ia ser repetida pela quarta vez quando a seção nova chegou.
|
|
38
|
-
* Reunida num ponto só, ela pôde finalmente passar por `t()` — e foi a seção nova que tornou isso urgente: com
|
|
39
|
-
* o cabeçalho traduzido ao lado de uma etiqueta em português cru, a mistura aparecia na mesma linha da tela.
|
|
40
|
-
* Os títulos das outras três seções continuam crus; é dívida anterior a esta mudança, contada pelo gate. */
|
|
41
|
-
const secao = (titulo) => `<h3 class="panel-sub">${titulo} <span class="panel-sub__tag">${t('rm.sec.all')}</span></h3>`;
|
|
42
|
-
const CRT_LBL = { scan: 'rm.crt.scan', vig: 'rm.crt.vig', round: 'rm.crt.round' }; // CHAVES i18n (ver RM_LABEL)
|
|
43
|
-
const CRT_ROUND_LEVELS = ['desligado', 'pequeno', 'grande'];
|
|
44
28
|
// ---------------------------------------------------------------------------------------------------------
|
|
45
|
-
//
|
|
29
|
+
// PURE logic — testable in node, no `document`.
|
|
46
30
|
// ---------------------------------------------------------------------------------------------------------
|
|
47
|
-
/**
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
/** Toggle liga/desliga da estética CRT (scanlines/vinheta). */
|
|
69
|
-
export function crtToggleRowHtml(label, key, on) {
|
|
70
|
-
const cls = 'mode-btn switch' + (on ? ' is-on' : '');
|
|
71
|
-
return `<div class="ctrl-row"><span>${label}</span><button class="${cls}" data-crt-tgl="${key}" type="button" aria-pressed="${on}" aria-label="${toggleAria(label, on)}">${toggleLabel(on)}</button></div>`;
|
|
72
|
-
}
|
|
73
|
-
/** Cantos CRT: 3 níveis (0=quadrado · 1=pequeno · 2=grande). */
|
|
74
|
-
export function crtRoundRowHtml(label, round) {
|
|
75
|
-
const opt = (v, text) => `<option value="${v}"${round === v ? ' selected' : ''}>${text}</option>`;
|
|
76
|
-
return `<div class="ctrl-row"><span>${label}</span><select class="vol" data-crt="round" aria-label="${label}">${opt(0, 'Desligado (quadrado)')}${opt(1, 'Pequeno')}${opt(2, 'Grande')}</select></div>`;
|
|
77
|
-
}
|
|
78
|
-
/** true quando TUDO (cena + personagem selecionado) já está com movimento reduzido LIGADO, isto é,
|
|
79
|
-
* congelado — nome fiel ao `rm[k]`/`player[prop]` que representam "reduzido", não "animado". Controla
|
|
80
|
-
* se o botão-mestre oferece "Retomar" (true) ou "Parar" (false) — mesma variável `allOn` do game.js
|
|
81
|
-
* original, aqui renomeada por clareza (o valor/comportamento não muda). */
|
|
82
|
-
export function allMotionFrozen(rmKeys, rm, rmChar, player) {
|
|
83
|
-
return rmKeys.every((k) => rm[k]) && rmChar.every((c) => !!(player && player[c.prop]));
|
|
84
|
-
}
|
|
85
|
-
/** allFrozen=true (tudo já congelado) → oferece "Retomar"; caso contrário → oferece "Parar". */
|
|
86
|
-
export function motionMasterLabel(allFrozen) {
|
|
87
|
-
return allFrozen ? '▶ Retomar todas as animações' : '⏸ Parar todas as animações';
|
|
88
|
-
}
|
|
89
|
-
/** `label` chega JÁ TRADUZIDO; o que era concatenação (' congelado.') virou moldura com `{alvo}` — é o que
|
|
90
|
-
* permite a uma língua pôr o estado ANTES do alvo, coisa que uma concatenação não deixa. */
|
|
91
|
-
export function sceneMotionAnnouncement(label, frozen) {
|
|
92
|
-
return t(frozen ? 'sr.rm.frozen' : 'sr.rm.animated', { alvo: label });
|
|
93
|
-
}
|
|
94
|
-
export function crtToggleAnnouncement(label, on) {
|
|
95
|
-
return t(on ? 'sr.crt.on' : 'sr.crt.off', { efeito: label });
|
|
96
|
-
}
|
|
97
|
-
export function crtLevelLabel(level) {
|
|
98
|
-
return CRT_ROUND_LEVELS[level];
|
|
31
|
+
/**
|
|
32
|
+
* The NAME of each part of this inside, which is what mounting reconciles by.
|
|
33
|
+
*
|
|
34
|
+
* 📌 A key and not a position: the character rows appear and disappear with the cartridge (ADR-0153), so mounting has to
|
|
35
|
+
* know WHICH row is which to relabel the one that stayed and remove the one that lost its subject.
|
|
36
|
+
*/
|
|
37
|
+
const partOfChar = (prop) => `char:${prop}`;
|
|
38
|
+
const partOfScene = (key) => `scene:${key}`;
|
|
39
|
+
const partOfCrt = (key) => `crt:${key}`;
|
|
40
|
+
/**
|
|
41
|
+
* Mounts this panel's inside and reconciles it afterwards — creates what is missing, rewrites what stayed, removes what
|
|
42
|
+
* lost its subject. It NEVER moves a node that already exists.
|
|
43
|
+
*
|
|
44
|
+
* 🔴 Rebuilding costs the child their place: with the cursor on the rounded corners, a click on the neighbouring row
|
|
45
|
+
* would destroy the control and drop focus on `<body>`. ⚠️ And moving also blurs, which is why this function INSERTS at
|
|
46
|
+
* the right position instead of appending and reordering: a node that changes parent is removed and re-added, and the
|
|
47
|
+
* browser takes its focus away on removal.
|
|
48
|
+
*/
|
|
49
|
+
function mountMotionInside(ctx, list, spec) {
|
|
50
|
+
reconcile(list, motionParts(ctx, spec));
|
|
99
51
|
}
|
|
100
|
-
|
|
101
|
-
|
|
52
|
+
/**
|
|
53
|
+
* What this inside HAS, in order — a different question from how the document gets there.
|
|
54
|
+
*
|
|
55
|
+
* ⚠️ Separate from `reconcile` so each stays under McCabe's ceiling of 10 (ADR-0221): each is a sentence with a name.
|
|
56
|
+
*/
|
|
57
|
+
function motionParts(ctx, spec) {
|
|
58
|
+
const sectionPart = (key, title, tag, rows) => (rows === 0 ? null : {
|
|
59
|
+
key,
|
|
60
|
+
build: () => sectionHeader(ctx, title, tag, rows) ?? ctx.create('h3'),
|
|
61
|
+
write: (el) => {
|
|
62
|
+
el.textContent = title + ' ';
|
|
63
|
+
const mark = ctx.create('span');
|
|
64
|
+
mark.className = 'panel-sub__tag';
|
|
65
|
+
mark.textContent = tag;
|
|
66
|
+
el.appendChild(mark);
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
const switchPart = (key, id, label, mark) => ({
|
|
70
|
+
key,
|
|
71
|
+
build: () => {
|
|
72
|
+
const { row: newRow, control: switchButton } = controlRow(ctx, { id, label: label, ariaLabel: label });
|
|
73
|
+
switchButton.setAttribute(mark[0], mark[1]);
|
|
74
|
+
return newRow;
|
|
75
|
+
},
|
|
76
|
+
// ⚠️ ONLY THE WORDS. The state (class, `aria-pressed`, the button's text) is written by the panel's reflect, which
|
|
77
|
+
// knows the value — writing it here would give two answers to the same question.
|
|
78
|
+
write: (el) => labelRow(el, { id, label: label, ariaLabel: label }),
|
|
79
|
+
});
|
|
80
|
+
const parts = [];
|
|
81
|
+
const charHeader = sectionPart('sec:char', spec.charTitle ?? '', spec.charTag, spec.charTitle ? spec.charRows.length : 0);
|
|
82
|
+
if (charHeader)
|
|
83
|
+
parts.push(charHeader);
|
|
84
|
+
for (const r of spec.charRows)
|
|
85
|
+
parts.push(switchPart(partOfChar(r.prop), `motion-char-${r.prop}`, r.label, ['data-rmc', r.prop]));
|
|
86
|
+
const sceneHeader = sectionPart('sec:scene', spec.sceneTitle, spec.allTag, spec.sceneRows.length);
|
|
87
|
+
if (sceneHeader)
|
|
88
|
+
parts.push(sceneHeader);
|
|
89
|
+
for (const r of spec.sceneRows)
|
|
90
|
+
parts.push(switchPart(partOfScene(r.key), `motion-scene-${r.key}`, r.label, ['data-rm', r.key]));
|
|
91
|
+
const crtHeader = sectionPart('sec:crt', spec.crtTitle, spec.allTag, spec.crtToggles.length + 1);
|
|
92
|
+
if (crtHeader)
|
|
93
|
+
parts.push(crtHeader);
|
|
94
|
+
for (const r of spec.crtToggles)
|
|
95
|
+
parts.push(switchPart(partOfCrt(r.key), `crt-${r.key}`, r.label, ['data-crt-tgl', r.key]));
|
|
96
|
+
parts.push({
|
|
97
|
+
key: partOfCrt('round'),
|
|
98
|
+
build: () => {
|
|
99
|
+
// ⚠️ NO SEPARATE LABEL (ADR-0130 errata): the steps control writes «◀ Cantos arredondados: pequeno ▶» across the
|
|
100
|
+
// whole row, and a label beside it would say the name twice.
|
|
101
|
+
const row = ctx.create('div');
|
|
102
|
+
row.className = 'ctrl-row ctrl-row--passos';
|
|
103
|
+
const steps = mountSteps(ctx, spec.roundSpec());
|
|
104
|
+
steps.setAttribute('data-crt', 'round');
|
|
105
|
+
row.appendChild(steps);
|
|
106
|
+
return row;
|
|
107
|
+
},
|
|
108
|
+
write: (el) => {
|
|
109
|
+
const steps = el.querySelector('[data-passos]');
|
|
110
|
+
if (steps)
|
|
111
|
+
updateSteps(steps, spec.roundSpec());
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
return parts;
|
|
102
115
|
}
|
|
103
|
-
/**
|
|
104
|
-
*
|
|
105
|
-
|
|
106
|
-
|
|
116
|
+
/**
|
|
117
|
+
* The document brought in line with the list: creates what is missing AT THE RIGHT POSITION, rewrites what stayed,
|
|
118
|
+
* removes what is no longer asked for.
|
|
119
|
+
*
|
|
120
|
+
* ⚠️ IT NEVER MOVES A NODE THAT ALREADY EXISTS, and not for thrift: a node that changes parent is removed and re-added,
|
|
121
|
+
* and the browser takes its focus away on removal — the defect building nodes exists to avoid, through another door.
|
|
122
|
+
*/
|
|
123
|
+
function reconcile(list, parts) {
|
|
124
|
+
let previous = null;
|
|
125
|
+
for (const part of parts) {
|
|
126
|
+
let el = list.querySelector(`[data-motion-part="${part.key}"]`);
|
|
127
|
+
if (!el) {
|
|
128
|
+
el = part.build();
|
|
129
|
+
el.dataset.motionPart = part.key;
|
|
130
|
+
list.insertBefore(el, previous ? previous.nextSibling : list.firstChild);
|
|
131
|
+
}
|
|
132
|
+
part.write(el);
|
|
133
|
+
previous = el;
|
|
134
|
+
}
|
|
135
|
+
const keep = new Set(parts.map((p) => p.key));
|
|
136
|
+
for (const el of [...list.querySelectorAll('[data-motion-part]')]) {
|
|
137
|
+
if (!keep.has(el.dataset.motionPart ?? ''))
|
|
138
|
+
el.remove();
|
|
139
|
+
}
|
|
107
140
|
}
|
|
108
|
-
// ---------------------------------------------------------------------------------------------------------
|
|
109
|
-
// Estado do módulo — equivalente a `let selAnimPlayer=0` + `animationOpen=false` do game.js.
|
|
110
|
-
// ---------------------------------------------------------------------------------------------------------
|
|
111
|
-
let selectedPlayer = 0;
|
|
112
|
-
export function getSelectedPlayer() { return selectedPlayer; }
|
|
113
|
-
/** Chamado de fora (ex.: o atalho "anim" do menu de pausa) antes de open(). */
|
|
114
|
-
export function setSelectedPlayer(i) { selectedPlayer = i; }
|
|
115
141
|
export function initSettingsMotion(ctx) {
|
|
142
|
+
const { t } = ctx;
|
|
143
|
+
const crtCfg = ctx.crt.cfg;
|
|
144
|
+
const applyCrt = () => { ctx.crt.apply(); };
|
|
145
|
+
/** The selected player: THIS panel's, in its closure (ADR-0232 D4) — a module `let` was shared by every root's panel. */
|
|
146
|
+
let selectedPlayer = 0;
|
|
116
147
|
/*
|
|
117
|
-
* ⚠️
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
* continuaria a mexer-se.
|
|
148
|
+
* ⚠️ RESOLVED ONCE, AT BOOT, not on every use. `rm` is mutated in place and shared by REFERENCE with whoever draws
|
|
149
|
+
* the scene; resolving it on every read would create a new object per call, the switch would stop reaching the
|
|
150
|
+
* drawing, and there would be no error at all — the menu would say reduced and the scene would keep moving.
|
|
121
151
|
*/
|
|
122
|
-
const rm = ctx.rm ??
|
|
123
|
-
const rmKeys = ctx.rmKeys ??
|
|
124
|
-
const
|
|
125
|
-
|
|
152
|
+
const rm = ctx.rm ?? readStoredScene(ctx.store, defaultReducedMotion(ctx.matchMedia));
|
|
153
|
+
const rmKeys = ctx.rmKeys ?? SCENE_KEYS;
|
|
154
|
+
const allCharAnimations = ctx.rmChar ?? CHARACTER_ANIMATIONS;
|
|
155
|
+
/** The character targets that HAVE A SUBJECT in this game — read on every use, because the cartridge changes on `mount()`. */
|
|
156
|
+
const rmChar = () => (ctx.hasCharacter?.() === false ? [] : allCharAnimations);
|
|
157
|
+
const saveRM = ctx.saveRM ?? (() => storeScene(ctx.store, rm));
|
|
126
158
|
function reflectMotionBtn() {
|
|
127
159
|
const b = ctx.$('#opt-animation');
|
|
128
160
|
if (b)
|
|
@@ -134,119 +166,172 @@ export function initSettingsMotion(ctx) {
|
|
|
134
166
|
if (!m)
|
|
135
167
|
return;
|
|
136
168
|
const player = ctx.getPlayers()[selectedPlayer];
|
|
137
|
-
const allFrozen = allMotionFrozen(rmKeys, rm, rmChar, player);
|
|
138
|
-
m.textContent = motionMasterLabel(allFrozen);
|
|
169
|
+
const allFrozen = allMotionFrozen(rmKeys, rm, rmChar(), player);
|
|
170
|
+
m.textContent = motionMasterLabel(t, allFrozen);
|
|
139
171
|
ctx.toggleBtn(m, allFrozen);
|
|
140
172
|
}
|
|
173
|
+
const kitCtx = (list) => ({
|
|
174
|
+
find: (sel) => ctx.$(sel),
|
|
175
|
+
create: (tag) => list.ownerDocument.createElement(tag),
|
|
176
|
+
});
|
|
177
|
+
const roundSpec = () => ({ label: t(CRT_LBL.round), values: [0, 1, 2].map((level) => crtLevelLabel(t, level)), current: crtCfg.round });
|
|
178
|
+
/** Each switch's STATE — what the kit does not write, because the panel knows the value. */
|
|
179
|
+
function reflectSwitches(el) {
|
|
180
|
+
const player = ctx.getPlayers()[selectedPlayer];
|
|
181
|
+
const writeSwitch = (sel, on, name) => {
|
|
182
|
+
const b = el.querySelector(sel);
|
|
183
|
+
if (!b)
|
|
184
|
+
return;
|
|
185
|
+
ctx.toggleBtn(b, on);
|
|
186
|
+
b.textContent = toggleLabel(t, on);
|
|
187
|
+
b.setAttribute('aria-label', toggleAria(t, name, on));
|
|
188
|
+
};
|
|
189
|
+
// ⚠️ "Animated" is the OPPOSITE of `rm`/`player[prop]`, which store "reduced motion". The faithful name is in
|
|
190
|
+
// `allMotionFrozen`, and the inversion lives here, in one place.
|
|
191
|
+
for (const c of rmChar())
|
|
192
|
+
writeSwitch(`[data-rmc="${c.prop}"]`, !(player && player[c.prop]), t(c.lbl));
|
|
193
|
+
for (const k of rmKeys)
|
|
194
|
+
writeSwitch(`[data-rm="${k}"]`, !rm[k], t(RM_LABEL[k]));
|
|
195
|
+
writeSwitch('[data-crt-tgl="scan"]', !!crtCfg.scan, t(CRT_LBL.scan));
|
|
196
|
+
writeSwitch('[data-crt-tgl="vig"]', !!crtCfg.vig, t(CRT_LBL.vig));
|
|
197
|
+
}
|
|
198
|
+
/** The listeners, ONCE and by delegation: the character rows come and go with the cartridge (ADR-0153), and wiring
|
|
199
|
+
* button by button on every render would pile one listener per pass onto each button that survived. */
|
|
200
|
+
let wired = false;
|
|
201
|
+
function wireOnce(el) {
|
|
202
|
+
if (wired)
|
|
203
|
+
return;
|
|
204
|
+
wired = true;
|
|
205
|
+
el.addEventListener('click', (ev) => {
|
|
206
|
+
const b = ev.target?.closest('button');
|
|
207
|
+
if (!b || !el.contains(b))
|
|
208
|
+
return;
|
|
209
|
+
const crt = b.dataset.crtTgl;
|
|
210
|
+
if (crt) {
|
|
211
|
+
crtCfg[crt] = crtCfg[crt] ? 0 : 1;
|
|
212
|
+
applyCrt();
|
|
213
|
+
reflectSwitches(el);
|
|
214
|
+
refreshMarks();
|
|
215
|
+
ctx.srSay(crtToggleAnnouncement(t, t(CRT_LBL[crt]), !!crtCfg[crt]));
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
const prop = b.dataset.rmc;
|
|
219
|
+
if (prop) {
|
|
220
|
+
const p = ctx.getPlayers()[selectedPlayer];
|
|
221
|
+
p[prop] = !p[prop];
|
|
222
|
+
ctx.store.setBool('incl_' + prop + '_p' + selectedPlayer, !!p[prop]);
|
|
223
|
+
render();
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
const k = b.dataset.rm;
|
|
227
|
+
if (!k)
|
|
228
|
+
return;
|
|
229
|
+
rm[k] = !rm[k];
|
|
230
|
+
saveRM();
|
|
231
|
+
render();
|
|
232
|
+
updateMotionMaster();
|
|
233
|
+
ctx.srSay(sceneMotionAnnouncement(t, t(RM_LABEL[k]), rm[k]));
|
|
234
|
+
});
|
|
235
|
+
el.addEventListener('passo', (ev) => {
|
|
236
|
+
const stepper = ev.target?.closest('[data-crt="round"]');
|
|
237
|
+
if (!stepper)
|
|
238
|
+
return;
|
|
239
|
+
const next = nextStep(crtCfg.round, CRT_ROUND_LEVELS.length, ev.detail);
|
|
240
|
+
// ⚠️ AT THE END NOTHING IS ANNOUNCED: repeating the largest level to someone already there would sound like a step.
|
|
241
|
+
if (next === crtCfg.round)
|
|
242
|
+
return;
|
|
243
|
+
crtCfg.round = next;
|
|
244
|
+
applyCrt();
|
|
245
|
+
updateSteps(stepper, roundSpec());
|
|
246
|
+
refreshMarks();
|
|
247
|
+
ctx.srSay(crtRoundAnnouncement(t, t(CRT_LBL.round), crtCfg.round));
|
|
248
|
+
});
|
|
249
|
+
}
|
|
141
250
|
function render() {
|
|
142
251
|
const el = ctx.$('#motion-list');
|
|
143
252
|
if (!el)
|
|
144
253
|
return;
|
|
145
254
|
selectedPlayer = clampSelectedPlayer(selectedPlayer, ctx.getNumPlayers());
|
|
146
|
-
//
|
|
147
|
-
// retorno da extração): innerHTML='' roda ANTES do querySelectorAll, então o forEach abaixo nunca acha
|
|
148
|
-
// botões — este bloco de wiring é código morto tanto aqui quanto no original.
|
|
255
|
+
// No tabs — each player edits only their own. The strip stays hidden and empty.
|
|
149
256
|
const tabs = ctx.$('#animation-players');
|
|
150
257
|
if (tabs) {
|
|
151
258
|
tabs.hidden = true;
|
|
152
|
-
tabs.
|
|
153
|
-
tabs.querySelectorAll('button[data-ap]').forEach((b) => b.addEventListener('click', () => {
|
|
154
|
-
selectedPlayer = Number(b.dataset.ap);
|
|
155
|
-
render();
|
|
156
|
-
// A prosa volta para o rodapé depois de as linhas serem reconstruídas (CLAUDE.md §4, #109).
|
|
157
|
-
ctx.fillExplain?.(ctx.$('#animation .overlay__card'));
|
|
158
|
-
}));
|
|
259
|
+
tabs.textContent = '';
|
|
159
260
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
ctx.srSay(crtRoundAnnouncement(t(CRT_LBL[key]), CRT[key]));
|
|
180
|
-
}));
|
|
181
|
-
el.querySelectorAll('button[data-rmc]').forEach((b) => b.addEventListener('click', () => {
|
|
182
|
-
const prop = b.dataset.rmc;
|
|
183
|
-
const p = ctx.getPlayers()[selectedPlayer];
|
|
184
|
-
p[prop] = !p[prop];
|
|
185
|
-
ctx.store.setBool('incl_' + prop + '_p' + selectedPlayer, !!p[prop]);
|
|
186
|
-
render();
|
|
187
|
-
}));
|
|
188
|
-
el.querySelectorAll('button[data-rm]').forEach((b) => b.addEventListener('click', () => {
|
|
189
|
-
const k = b.dataset.rm;
|
|
190
|
-
rm[k] = !rm[k];
|
|
191
|
-
saveRM();
|
|
192
|
-
render();
|
|
193
|
-
updateMotionMaster();
|
|
194
|
-
ctx.srSay(sceneMotionAnnouncement(t(RM_LABEL[k]), rm[k]));
|
|
195
|
-
}));
|
|
261
|
+
mountMotionInside(kitCtx(el), el, {
|
|
262
|
+
// ⚠️ THE SEAT SUFFIX is a key, and reuses the card's `pause.cardSeat`: it is the SAME sentence for the SAME person,
|
|
263
|
+
// and two keys would be two places for it to drift between languages.
|
|
264
|
+
charTitle: rmChar().length
|
|
265
|
+
? (ctx.characterLabel?.() ?? 'Personagem') + (ctx.getNumPlayers() > 1 ? t('pause.cardSeat', { n: selectedPlayer + 1 }) : '')
|
|
266
|
+
: null,
|
|
267
|
+
// 📌 Three section labels are still raw and are in this module's raw-prose ledger — fixing them in passing would
|
|
268
|
+
// mix two decisions in one commit.
|
|
269
|
+
charTag: 'por jogador',
|
|
270
|
+
charRows: rmChar().map((c) => ({ prop: c.prop, label: t(c.lbl) })),
|
|
271
|
+
sceneTitle: 'Cena',
|
|
272
|
+
sceneRows: rmKeys.map((k) => ({ key: k, label: t(RM_LABEL[k]) })),
|
|
273
|
+
crtTitle: 'Estética CRT',
|
|
274
|
+
allTag: t('rm.sec.all'),
|
|
275
|
+
crtToggles: [{ key: 'scan', label: t(CRT_LBL.scan) }, { key: 'vig', label: t(CRT_LBL.vig) }],
|
|
276
|
+
roundSpec,
|
|
277
|
+
});
|
|
278
|
+
reflectSwitches(el);
|
|
279
|
+
wireOnce(el);
|
|
196
280
|
updateMotionMaster();
|
|
197
281
|
refreshMarks();
|
|
282
|
+
// The prose goes back to the footer after the rows change (CLAUDE.md §4, #109).
|
|
283
|
+
ctx.fillExplain?.(ctx.$('#animation .overlay__card'));
|
|
198
284
|
}
|
|
199
285
|
/**
|
|
200
|
-
*
|
|
286
|
+
* The left-the-default mark (ADR-0029), against the COMPUTED default — not against `false`.
|
|
201
287
|
*
|
|
202
|
-
*
|
|
203
|
-
*
|
|
204
|
-
*
|
|
205
|
-
* na direção mais cara.
|
|
288
|
+
* On a machine whose owner asked for less motion, the animation rows' default is FROZEN. Marking against `false` would
|
|
289
|
+
* accuse "changed" on rows the child never touched, and send exactly them to undo their own system's preference. A
|
|
290
|
+
* wrong mark is worse than no mark, and here it would err in the costliest direction.
|
|
206
291
|
*/
|
|
207
292
|
function refreshMarks() {
|
|
208
|
-
const
|
|
293
|
+
const reducedByDefault = defaultReducedMotion(ctx.matchMedia);
|
|
209
294
|
const el = ctx.$('#motion-list');
|
|
210
295
|
const player = ctx.getPlayers()[selectedPlayer];
|
|
211
|
-
const
|
|
212
|
-
const
|
|
213
|
-
|
|
214
|
-
markChanged(el?.querySelector(sel)?.closest('.ctrl-row') ?? null, changed);
|
|
296
|
+
const changedFlags = [];
|
|
297
|
+
const markRow = (sel, changed) => {
|
|
298
|
+
changedFlags.push(changed);
|
|
299
|
+
markChanged(t, el?.querySelector(sel)?.closest('.ctrl-row') ?? null, changed);
|
|
215
300
|
};
|
|
216
|
-
for (const c of rmChar)
|
|
217
|
-
|
|
301
|
+
for (const c of rmChar())
|
|
302
|
+
markRow(`[data-rmc="${c.prop}"]`, !!(player && player[c.prop]) !== reducedByDefault);
|
|
218
303
|
for (const k of rmKeys)
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
markMenuChanged(ctx.$('[data-act="anim"]'),
|
|
304
|
+
markRow(`[data-rm="${k}"]`, !!rm[k] !== reducedByDefault);
|
|
305
|
+
markRow('[data-crt-tgl="scan"]', !!crtCfg.scan !== !!CRT_DEFAULT.scan);
|
|
306
|
+
markRow('[data-crt-tgl="vig"]', !!crtCfg.vig !== !!CRT_DEFAULT.vig);
|
|
307
|
+
markRow('[data-crt="round"]', crtCfg.round !== CRT_DEFAULT.round);
|
|
308
|
+
markMenuChanged(t, ctx.$('[data-act="anim"]'), changedFlags);
|
|
224
309
|
}
|
|
225
|
-
// ----
|
|
310
|
+
// ---- reset THIS menu's defaults (ADR-0028) ----
|
|
226
311
|
//
|
|
227
|
-
//
|
|
228
|
-
//
|
|
229
|
-
//
|
|
230
|
-
//
|
|
312
|
+
// The only menu whose default is NOT a constant: the animation rows' default is what the operating system asks for
|
|
313
|
+
// (`prefers-reduced-motion`). Returning `false` here would TURN ANIMATION BACK ON for whoever already asked for less
|
|
314
|
+
// motion — the reset alone would do what WCAG 2.3.3 exists to prevent. That is why it calls `defaultReducedMotion`
|
|
315
|
+
// and does not write the value by hand.
|
|
231
316
|
//
|
|
232
|
-
//
|
|
233
|
-
//
|
|
317
|
+
// The scope is ALL players, as in the mobility menu: the panel edits one at a time, but the reset belongs to the menu,
|
|
318
|
+
// and leaving player 2 frozen because the open tab was player 1's would give two states one name.
|
|
234
319
|
const resetBtn = ctx.$('#animation-reset');
|
|
235
320
|
if (resetBtn)
|
|
236
321
|
resetBtn.addEventListener('click', () => {
|
|
237
|
-
const
|
|
322
|
+
const reducedByDefault = defaultReducedMotion(ctx.matchMedia);
|
|
238
323
|
for (const k of rmKeys)
|
|
239
|
-
rm[k] =
|
|
324
|
+
rm[k] = reducedByDefault;
|
|
240
325
|
saveRM();
|
|
241
326
|
ctx.getPlayers().forEach((p, i) => {
|
|
242
|
-
for (const c of rmChar) {
|
|
243
|
-
p[c.prop] =
|
|
244
|
-
ctx.store.setBool('incl_' + c.prop + '_p' + i,
|
|
327
|
+
for (const c of rmChar()) {
|
|
328
|
+
p[c.prop] = reducedByDefault;
|
|
329
|
+
ctx.store.setBool('incl_' + c.prop + '_p' + i, reducedByDefault);
|
|
245
330
|
}
|
|
246
331
|
});
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
332
|
+
crtCfg.scan = CRT_DEFAULT.scan;
|
|
333
|
+
crtCfg.vig = CRT_DEFAULT.vig;
|
|
334
|
+
crtCfg.round = CRT_DEFAULT.round;
|
|
250
335
|
applyCrt();
|
|
251
336
|
render();
|
|
252
337
|
ctx.srSay(t('sr.motion.reset'));
|
|
@@ -271,25 +356,29 @@ export function initSettingsMotion(ctx) {
|
|
|
271
356
|
return;
|
|
272
357
|
const b = ctx.$('#opt-animation');
|
|
273
358
|
if (b)
|
|
274
|
-
b.focus(); //
|
|
359
|
+
b.focus(); // fallback: this id does not exist in the document today (a hook for a future bar)
|
|
275
360
|
}
|
|
276
361
|
const master = ctx.$('#motion-master');
|
|
277
362
|
if (master)
|
|
278
363
|
master.addEventListener('click', () => {
|
|
279
364
|
const player = ctx.getPlayers()[selectedPlayer];
|
|
280
|
-
const allFrozen = allMotionFrozen(rmKeys, rm, rmChar, player);
|
|
365
|
+
const allFrozen = allMotionFrozen(rmKeys, rm, rmChar(), player);
|
|
281
366
|
const next = !allFrozen;
|
|
282
367
|
for (const k of rmKeys)
|
|
283
368
|
rm[k] = next;
|
|
284
369
|
saveRM();
|
|
285
370
|
if (player)
|
|
286
|
-
for (const c of rmChar) {
|
|
371
|
+
for (const c of rmChar()) {
|
|
287
372
|
player[c.prop] = next;
|
|
288
373
|
ctx.store.setBool('incl_' + c.prop + '_p' + selectedPlayer, next);
|
|
289
374
|
}
|
|
290
375
|
render();
|
|
291
|
-
ctx.srSay(stopResumeAllAnnouncement(next));
|
|
376
|
+
ctx.srSay(stopResumeAllAnnouncement(t, next));
|
|
292
377
|
});
|
|
293
|
-
reflectMotionBtn(); //
|
|
294
|
-
return {
|
|
378
|
+
reflectMotionBtn(); // initial state (e.g. prefers-reduced-motion switches it on by default)
|
|
379
|
+
return {
|
|
380
|
+
render, open, close,
|
|
381
|
+
selectedPlayer: () => selectedPlayer,
|
|
382
|
+
setSelectedPlayer: (i) => { selectedPlayer = i; },
|
|
383
|
+
};
|
|
295
384
|
}
|