@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
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
import { FONT_GROUPS, FONT_BY_KEY, fontRole, faceAvailable } from './fonts.js';
|
|
3
|
+
/**
|
|
4
|
+
* A key is selectable when it exists in the catalog, is not marked `.off` (licence pending, etc.) — and is
|
|
5
|
+
* `geral`.
|
|
6
|
+
*
|
|
7
|
+
* ⚠️ WITHOUT THE THIRD TERM (issue #87) the menu would stop OFFERING the handwriting faces and they would stay
|
|
8
|
+
* SELECTABLE by any other path — `resolveFontKey` of a stored key, a `data-font` in a consumer's markup. "Not in the
|
|
9
|
+
* list" and "cannot be chosen" have to be the same statement, or the list is only a suggestion.
|
|
10
|
+
*/
|
|
11
|
+
export function isSelectableFont(k, installed) {
|
|
12
|
+
const it = FONT_BY_KEY[k];
|
|
13
|
+
return !!it && faceAvailable(it, installed) && fontRole(it) === 'geral';
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Maps a selectable font key to the CSS it drives. The three canonical fonts (atkinson/andika/lexend) use
|
|
17
|
+
* dedicated data-fonte values (Lexend's keeps the BDA letter/word spacing tied to data-fonte="dislexia"); every
|
|
18
|
+
* other catalog font goes through --font-custom with a generic fallback by family (serif/cursive/none).
|
|
19
|
+
*/
|
|
20
|
+
export function fontCssTarget(k, it) {
|
|
21
|
+
// ⚠️ THE THREE CANONICAL FACES ARE NOT CURSIVE, and answering `false` for them is a statement, not an oversight:
|
|
22
|
+
// Atkinson, Andika and Lexend are reading faces, and it is exactly on them that the BDA spacing must hold.
|
|
23
|
+
if (k === 'atkinson')
|
|
24
|
+
return { font: 'padrao', customFamily: null, cursive: false };
|
|
25
|
+
if (k === 'andika')
|
|
26
|
+
return { font: 'alfabetizacao', customFamily: null, cursive: false };
|
|
27
|
+
if (k === 'lexend')
|
|
28
|
+
return { font: 'dislexia', customFamily: null, cursive: false };
|
|
29
|
+
// `joined` is the word the field's own documentation uses — "is this a JOINED face?".
|
|
30
|
+
const joined = it.fb === 'cursive';
|
|
31
|
+
const suffix = it.fb === 'serif' ? ',Georgia,serif' : joined ? ',cursive' : '';
|
|
32
|
+
return { font: 'custom', customFamily: `'${it.fam}'${suffix}`, cursive: joined };
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* ONE row of the list, from a catalogue face. A function of its own so the gate of the `.off` mechanism can exercise it
|
|
36
|
+
* with a FAKE face: a case that depends on the catalogue's composition fails every time the roster changes.
|
|
37
|
+
*
|
|
38
|
+
* The mechanism is needed (issue #87, item 4): the **Ronde** can only be offered if one of three faces is installed,
|
|
39
|
+
* because two of them are free for personal use only and cannot be bundled.
|
|
40
|
+
*/
|
|
41
|
+
export function fontRow(t, it, fontKey, installed) {
|
|
42
|
+
// ⚠️ THE SAME question `isSelectableFont` asks, through the SAME function. Two answers would give a clickable row the
|
|
43
|
+
// click refuses — or, worse, a grey row that `resolveFontKey` accepts by another path. "Not available" and "cannot be
|
|
44
|
+
// chosen" have to be the same statement.
|
|
45
|
+
const disabled = !faceAvailable(it, installed);
|
|
46
|
+
// `d` and `off` hold KEYS too. The dash joining them is punctuation, not a sentence — the two halves are independent
|
|
47
|
+
// and each translates on its own.
|
|
48
|
+
const desc = it.d ? t(it.d) : '', reason = it.off ? t(it.off) : '';
|
|
49
|
+
const note = desc ? desc + (disabled ? ' — ' + reason : '') : disabled ? reason : '';
|
|
50
|
+
return { key: it.k, fam: it.fam, selected: fontKey === it.k, disabled, note };
|
|
51
|
+
}
|
|
52
|
+
/** Pure view-model for the typography list: which row is selected/disabled and its note, per catalog group. */
|
|
53
|
+
export function typoGroups(t, fontKey, installed) {
|
|
54
|
+
// ⚠️ ONLY THE GENERAL FACES ENTER THE LIST (ADR-0012 amendment, issue #87). The handwriting faces exist for the child
|
|
55
|
+
// to LEARN to read cursive — that is subject matter, and it lives INSIDE the activities, on buttons of their own.
|
|
56
|
+
// Offering them here would hand the child the subject as an obstacle everywhere they only want to navigate the menu.
|
|
57
|
+
//
|
|
58
|
+
// A group left with no general face disappears from the list, instead of appearing as an empty heading.
|
|
59
|
+
return FONT_GROUPS.map((g) => ({
|
|
60
|
+
g: t(g.g), // `g` holds an i18n KEY (see ui/fonts)
|
|
61
|
+
rows: g.items.filter((it) => fontRole(it) === 'geral').map((it) => fontRow(t, it, fontKey, installed)),
|
|
62
|
+
})).filter((group) => group.rows.length > 0);
|
|
63
|
+
}
|
|
64
|
+
/** The id of a face's button. It comes from the catalogue KEY, which is unique by construction (`FONT_BY_KEY`). */
|
|
65
|
+
export const typoControlId = (key) => `typo-font-${key}`;
|
|
66
|
+
/**
|
|
67
|
+
* What a font row SAYS, before any node exists — the shape the kit consumes.
|
|
68
|
+
*
|
|
69
|
+
* ⚠️ `shape: 'radio'` and not a switch: independent switches announcing on/off to choose ONE font say the opposite of
|
|
70
|
+
* the ADR-0012 amendment, «THE MENU IS A CHOICE, NOT A TOGGLE […] One font is active; the others are alternatives, not
|
|
71
|
+
* switches.»
|
|
72
|
+
*
|
|
73
|
+
* 📌 The note goes into the HINT — which `fillExplain` takes to the footer — and ALSO into the accessible name, because
|
|
74
|
+
* whoever does not see the row needs to hear who that face is for without hunting for the footer.
|
|
75
|
+
*/
|
|
76
|
+
export function typoRowSpec(row) {
|
|
77
|
+
return {
|
|
78
|
+
id: typoControlId(row.key),
|
|
79
|
+
label: row.fam,
|
|
80
|
+
...(row.note ? { hint: row.note } : {}),
|
|
81
|
+
shape: 'radio',
|
|
82
|
+
ariaLabel: row.fam + (row.note ? ' — ' + row.note : ''),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
@@ -1,48 +1,12 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
import { type
|
|
3
|
-
|
|
4
|
-
export declare const
|
|
5
|
-
|
|
6
|
-
export declare const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
* é o que mantém a mesma palavra nos dois sítios.
|
|
14
|
-
*/
|
|
15
|
-
export declare const CURTO_DO_TEMA: Readonly<Record<Tema, string>>;
|
|
16
|
-
export declare const CURTO_DA_CORRECAO: Readonly<Record<Correcao, string>>;
|
|
17
|
-
/** Os dois eixos, como o painel os identifica no DOM. */
|
|
18
|
-
export type EixoVisual = 'tema' | 'correcao';
|
|
19
|
-
/** Um tradutor, igual ao que o resto da interface recebe. */
|
|
20
|
-
export type Tradutor = (chave: string, params?: Record<string, string | number>) => string;
|
|
21
|
-
/**
|
|
22
|
-
* As linhas de UM eixo, no formato de rádio que o painel já usa.
|
|
23
|
-
*
|
|
24
|
-
* ⚠️ RÁDIO E NÃO SETE BOTÕES, e o motivo sobrevive à divisão: DENTRO de um eixo os valores continuam
|
|
25
|
-
* exclusivos — um tema de cada vez, uma correção de cada vez. O que deixou de ser exclusivo é a relação
|
|
26
|
-
* ENTRE os eixos, e é por isso que eles viram dois rádios em vez de um.
|
|
27
|
-
*
|
|
28
|
-
* ⚠️ E MANTÉM-SE A FORMA DE LINHA VISÍVEL, não um `<select>`. O `settings-visual` regista o erro que o Dev
|
|
29
|
-
* apanhou na primeira tentativa: dentro de uma caixa fechada, um controle cuja razão de existir é ser ACHADO
|
|
30
|
-
* por quem enxerga mal fica «quase o mesmo que não ter movido».
|
|
31
|
-
*/
|
|
32
|
-
export declare function linhasDoEixo(eixo: EixoVisual, valores: readonly string[], rotulos: Readonly<Record<string, string>>, atual: string, t: Tradutor): string;
|
|
33
|
-
/**
|
|
34
|
-
* Os DOIS eixos, um a seguir ao outro, com um título cada.
|
|
35
|
-
*
|
|
36
|
-
* O título existe porque dois rádios seguidos sem nome são um rádio de oito para quem lê depressa — e essa
|
|
37
|
-
* leitura é exactamente o mal-entendido que a divisão existe para desfazer.
|
|
38
|
-
*/
|
|
39
|
-
export declare function eixosHtml(v: VisualState, t: Tradutor): string;
|
|
40
|
-
/** O que um clique num botão do painel quer dizer. `null` quando o botão não é de eixo nenhum. */
|
|
41
|
-
export interface EscolhaDeEixo {
|
|
42
|
-
readonly eixo: EixoVisual;
|
|
43
|
-
readonly valor: string;
|
|
44
|
-
}
|
|
45
|
-
export declare function escolhaDoBotao(dataset: {
|
|
46
|
-
eixo?: string;
|
|
47
|
-
valor?: string;
|
|
48
|
-
}): EscolhaDeEixo | null;
|
|
2
|
+
import { axisRows as linhasDoEixoDeRender, axesHtml as eixosHtmlDeRender, buttonChoice as escolhaDoBotaoDeRender, type VisualAxis as EixoVisualDeRender, type Translator as TradutorDeRender, type AxisChoice as EscolhaDeEixoDeRender } from '../render/viz-axes-labels.js';
|
|
3
|
+
export declare const THEME_LABEL: Readonly<Record<import("../core/visual-state.js").Theme, string>>;
|
|
4
|
+
export declare const CORRECTION_LABEL: Readonly<Record<import("../core/visual-state.js").Correction, string>>;
|
|
5
|
+
export declare const SHORT_THEME: Readonly<Record<import("../core/visual-state.js").Theme, string>>;
|
|
6
|
+
export declare const SHORT_CORRECTION: Readonly<Record<import("../core/visual-state.js").Correction, string>>;
|
|
7
|
+
export declare const axisRows: typeof linhasDoEixoDeRender;
|
|
8
|
+
export declare const axesHtml: typeof eixosHtmlDeRender;
|
|
9
|
+
export declare const buttonChoice: typeof escolhaDoBotaoDeRender;
|
|
10
|
+
export type VisualAxis = EixoVisualDeRender;
|
|
11
|
+
export type Translator = TradutorDeRender;
|
|
12
|
+
export type AxisChoice = EscolhaDeEixoDeRender;
|
|
@@ -1,95 +1,13 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// ui/visual-axes-panel —
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
// outro. O controle único era a forma honesta de contar uma exclusividade REAL; mantê-lo agora seria contar
|
|
15
|
-
// uma exclusividade que já não existe — e continuar a negar os dois a quem precisa dos dois.
|
|
16
|
-
//
|
|
17
|
-
// ========================= OS NOMES DOS PADRÕES SÃO DECISÃO, NÃO ROTINA =========================
|
|
18
|
-
// ⚠️ «Tema padrão» e «Visão tricromática», e o ADR-0076 fecha a *definition of done* com a regra que os
|
|
19
|
-
// escolheu: **nenhum rótulo de padrão diagnostica quem lê**. `modo sem deficiência visual` foi oferecido e
|
|
20
|
-
// recusado — ele diz à criança o que ela NÃO é, no menu que ela abriu para conseguir jogar. Um padrão
|
|
21
|
-
// chama-se pelo que ele É.
|
|
22
|
-
//
|
|
23
|
-
// E `Modo padrão` (o `viz.normal` de hoje) deixa de servir aqui: era o neutro PARTILHADO, de quando os dois
|
|
24
|
-
// eixos eram um só. Com dois controles, um «padrão» sem dizer padrão de QUÊ é ambíguo em ambos.
|
|
25
|
-
//
|
|
26
|
-
// Módulo puro: devolve HTML e chaves i18n, não toca documento nenhum. Quem monta é o `render/viz-setters`.
|
|
27
|
-
import { TEMAS, CORRECOES } from '../render/viz-axes.js';
|
|
28
|
-
/** O rótulo de cada tema. Chave i18n — quem exibe resolve, como todo o resto do menu. */
|
|
29
|
-
export const ROTULO_DO_TEMA = Object.freeze({
|
|
30
|
-
padrao: 'eixo.tema.padrao',
|
|
31
|
-
hc3: 'viz.hc-direto',
|
|
32
|
-
hc45: 'viz.hc-direto-45',
|
|
33
|
-
hc7: 'viz.hc-direto-7',
|
|
34
|
-
});
|
|
35
|
-
/** O rótulo de cada correção de cor. */
|
|
36
|
-
export const ROTULO_DA_CORRECAO = Object.freeze({
|
|
37
|
-
tricro: 'eixo.correcao.tricro',
|
|
38
|
-
protan: 'viz.fix-protan',
|
|
39
|
-
deuter: 'viz.fix-deuter',
|
|
40
|
-
tritan: 'viz.fix-tritan',
|
|
41
|
-
});
|
|
42
|
-
/**
|
|
43
|
-
* Os rótulos CURTOS, para os ícones da barra rápida — «7:1», «deuteranopia».
|
|
44
|
-
*
|
|
45
|
-
* ⚠️ SÃO AS CHAVES QUE JÁ EXISTIAM (`contrast.*`, `cvd.*`), re-chaveadas por eixo. A barra rápida sempre
|
|
46
|
-
* falou curto porque anuncia UM ícone de cada vez, e o painel sempre falou por extenso porque a criança está
|
|
47
|
-
* a ler uma lista — a diferença é de contexto e sobrevive à divisão. Reaproveitar em vez de traduzir de novo
|
|
48
|
-
* é o que mantém a mesma palavra nos dois sítios.
|
|
49
|
-
*/
|
|
50
|
-
export const CURTO_DO_TEMA = Object.freeze({
|
|
51
|
-
padrao: 'contrast.off', hc3: 'contrast.3', hc45: 'contrast.45', hc7: 'contrast.7',
|
|
52
|
-
});
|
|
53
|
-
export const CURTO_DA_CORRECAO = Object.freeze({
|
|
54
|
-
tricro: 'cvd.off', protan: 'cvd.protan', deuter: 'cvd.deuter', tritan: 'cvd.tritan',
|
|
55
|
-
});
|
|
56
|
-
/**
|
|
57
|
-
* As linhas de UM eixo, no formato de rádio que o painel já usa.
|
|
58
|
-
*
|
|
59
|
-
* ⚠️ RÁDIO E NÃO SETE BOTÕES, e o motivo sobrevive à divisão: DENTRO de um eixo os valores continuam
|
|
60
|
-
* exclusivos — um tema de cada vez, uma correção de cada vez. O que deixou de ser exclusivo é a relação
|
|
61
|
-
* ENTRE os eixos, e é por isso que eles viram dois rádios em vez de um.
|
|
62
|
-
*
|
|
63
|
-
* ⚠️ E MANTÉM-SE A FORMA DE LINHA VISÍVEL, não um `<select>`. O `settings-visual` regista o erro que o Dev
|
|
64
|
-
* apanhou na primeira tentativa: dentro de uma caixa fechada, um controle cuja razão de existir é ser ACHADO
|
|
65
|
-
* por quem enxerga mal fica «quase o mesmo que não ter movido».
|
|
66
|
-
*/
|
|
67
|
-
export function linhasDoEixo(eixo, valores, rotulos, atual, t) {
|
|
68
|
-
return valores.map((valor) => {
|
|
69
|
-
const sel = valor === atual;
|
|
70
|
-
return `<div class="ctrl-row"><span><strong>${t(rotulos[valor])}</strong></span>`
|
|
71
|
-
+ `<button class="mode-btn${sel ? ' is-on' : ''}" role="radio" aria-checked="${sel}"`
|
|
72
|
-
+ ` data-eixo="${eixo}" data-valor="${valor}" type="button">${sel ? t('viz.escolhido') : t('viz.escolher')}</button></div>`;
|
|
73
|
-
}).join('');
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Os DOIS eixos, um a seguir ao outro, com um título cada.
|
|
77
|
-
*
|
|
78
|
-
* O título existe porque dois rádios seguidos sem nome são um rádio de oito para quem lê depressa — e essa
|
|
79
|
-
* leitura é exactamente o mal-entendido que a divisão existe para desfazer.
|
|
80
|
-
*/
|
|
81
|
-
export function eixosHtml(v, t) {
|
|
82
|
-
return `<h3 class="opt-sub">${t('eixo.tema.titulo')}</h3>`
|
|
83
|
-
+ linhasDoEixo('tema', TEMAS, ROTULO_DO_TEMA, v.tema, t)
|
|
84
|
-
+ `<h3 class="opt-sub">${t('eixo.correcao.titulo')}</h3>`
|
|
85
|
-
+ linhasDoEixo('correcao', CORRECOES, ROTULO_DA_CORRECAO, v.correcao, t);
|
|
86
|
-
}
|
|
87
|
-
export function escolhaDoBotao(dataset) {
|
|
88
|
-
const { eixo, valor } = dataset;
|
|
89
|
-
if (eixo !== 'tema' && eixo !== 'correcao')
|
|
90
|
-
return null;
|
|
91
|
-
if (!valor)
|
|
92
|
-
return null;
|
|
93
|
-
const validos = eixo === 'tema' ? TEMAS : CORRECOES;
|
|
94
|
-
return validos.includes(valor) ? { eixo, valor } : null;
|
|
95
|
-
}
|
|
2
|
+
// ui/visual-axes-panel — the two visual axes' labels, rows and click reading (ADR-0076): the names cartridges import from ui.
|
|
3
|
+
//
|
|
4
|
+
// The module lives in `render/viz-axes-labels` since issue #167: `render/viz-setters` uses it, and render may not import ui
|
|
5
|
+
// (ADR-0173). These names stay, bound to the same values and types.
|
|
6
|
+
import { THEME_LABEL as ROTULO_DO_TEMADeRender, CORRECTION_LABEL as ROTULO_DA_CORRECAODeRender, SHORT_THEME as CURTO_DO_TEMADeRender, SHORT_CORRECTION as CURTO_DA_CORRECAODeRender, axisRows as linhasDoEixoDeRender, axesHtml as eixosHtmlDeRender, buttonChoice as escolhaDoBotaoDeRender, } from '../render/viz-axes-labels.js';
|
|
7
|
+
export const THEME_LABEL = ROTULO_DO_TEMADeRender;
|
|
8
|
+
export const CORRECTION_LABEL = ROTULO_DA_CORRECAODeRender;
|
|
9
|
+
export const SHORT_THEME = CURTO_DO_TEMADeRender;
|
|
10
|
+
export const SHORT_CORRECTION = CURTO_DA_CORRECAODeRender;
|
|
11
|
+
export const axisRows = linhasDoEixoDeRender;
|
|
12
|
+
export const axesHtml = eixosHtmlDeRender;
|
|
13
|
+
export const buttonChoice = escolhaDoBotaoDeRender;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
import type { Translate } from '../core/i18n.js';
|
|
3
|
+
import type { HcRoleKey } from '../render/hc-role-data.js';
|
|
4
|
+
import { type VizMode } from '../render/viz-modes.js';
|
|
5
|
+
export type { HcRoleKey as RoleKey } from '../render/hc-role-data.js';
|
|
6
|
+
type RoleKey = HcRoleKey;
|
|
7
|
+
export type RGB = readonly [number, number, number];
|
|
8
|
+
/**
|
|
9
|
+
* EVERYTHING this menu writes into `p.viz`: the 4 contrast levels PLUS the 3 colour-blindness corrections, which live
|
|
10
|
+
* here by the Dev's decision (#60) — in the empathy panel a colour-blind child would have had to enter the menu for
|
|
11
|
+
* "feeling what a disability is like" to find the correction for the one they have.
|
|
12
|
+
*
|
|
13
|
+
* The seven live in ONE control, and that is not about saving space: `p.viz` holds ONE value. Two separate controls
|
|
14
|
+
* would overwrite each other silently — the child would pick the correction, then the contrast, and lose the
|
|
15
|
+
* correction with nothing saying so. One list tells the truth about the exclusivity.
|
|
16
|
+
*/
|
|
17
|
+
export declare const VISUAL_MODES: readonly string[];
|
|
18
|
+
/** Short announcement labels. */
|
|
19
|
+
export declare const CONTRAST_LABELS: Readonly<Record<string, string>>;
|
|
20
|
+
export declare const ROLE_KEYS: readonly RoleKey[];
|
|
21
|
+
/** Readable labels for the color-blocking roles. */
|
|
22
|
+
export declare const ROLE_LABELS: Readonly<Record<RoleKey, string>>;
|
|
23
|
+
/**
|
|
24
|
+
* The 7 modes as the panel OFFERS them: a radio list, with a name and a description on each row.
|
|
25
|
+
*
|
|
26
|
+
* Not a `<select>`, and the Dev caught that immediately: inside a `<select>` the corrections become one closed line in
|
|
27
|
+
* a closed box. For a control whose reason to exist is to be FOUND by someone who sees poorly, hiding it behind a
|
|
28
|
+
* click is almost the same as not offering it.
|
|
29
|
+
*
|
|
30
|
+
* Radio, and not seven buttons: `p.viz` holds ONE value, and the exclusivity is said by the shape of the control
|
|
31
|
+
* instead of being discovered by losing the correction just chosen.
|
|
32
|
+
*/
|
|
33
|
+
export declare const VISUAL_MODE_LIST: readonly VizMode[];
|
|
34
|
+
/**
|
|
35
|
+
* `viz` when it is a mode of THIS menu (contrast or correction), otherwise 'normal'.
|
|
36
|
+
*
|
|
37
|
+
* Named for what it returns: a name that said "contrast" would lie when it returns `fix-deuter`, and a name that lies
|
|
38
|
+
* about what it returns is worse than a long one.
|
|
39
|
+
*/
|
|
40
|
+
export declare function resolveVisualMode(viz: string): string;
|
|
41
|
+
/** i18n KEY of a contrast level's label; unknown modes fall back to the 'off' key. Resolve with `t()`. */
|
|
42
|
+
export declare function contrastLabel(mode: string): string;
|
|
43
|
+
export declare function clamp01(t: number): number;
|
|
44
|
+
/**
|
|
45
|
+
* i18n KEY of the L->Q slider label ('lq.off'/'lq.linear'/'lq.mixed'/'lq.quadratic'). The label belongs to the L->Q
|
|
46
|
+
* feature, so it lives with the filter that owns it (render/lq-filter) and is re-exported here under the name this
|
|
47
|
+
* overlay has always used. Two copies of one rule is one copy too many: only the owner may change what the levels
|
|
48
|
+
* mean. Callers resolve with `t()` — see the note on lqName about the `t` shadowing.
|
|
49
|
+
*/
|
|
50
|
+
export { lqName as lqLabel } from '../render/lq-filter.js';
|
|
51
|
+
/**
|
|
52
|
+
* THE FOUR POSITIONS OF THE CONTRAST BOOST, chosen with left and right (ADR-0151): off, linear, mixed and quadratic —
|
|
53
|
+
* «da mesma forma que se troca o número de jogadores, e não através de uma barra».
|
|
54
|
+
*
|
|
55
|
+
* ⚠️ THE "LINEAR" VALUE CANNOT BE ZERO: `setLq(0)` turns the filter off, and any value above turns the curve on. 0.05
|
|
56
|
+
* is the most linear value that still turns the filter on. Mixed is the middle, and quadratic is the whole S-curve.
|
|
57
|
+
* Each position falls within the range `lqName` already gives its name.
|
|
58
|
+
*/
|
|
59
|
+
export declare const LQ_STEPS: readonly number[];
|
|
60
|
+
/**
|
|
61
|
+
* Which position a continuous value is in — including one STORED by the old slider (0.35, 0.7…). By `lqName`'s range,
|
|
62
|
+
* not by the nearest value: the NAME the child heard has to stay the name now.
|
|
63
|
+
*/
|
|
64
|
+
export declare function lqPosition(amount: number): number;
|
|
65
|
+
/** t (0..1) -> slider percent (0..100, rounded) — mirrors `Math.round(lqT*100)`.
|
|
66
|
+
* @deprecated Since ADR-0151 the boost is chosen by STEPS (`LQ_STEPS`/`lqPosition`); kept for consumers.
|
|
67
|
+
* ⚠️ It has no reader inside the engine: that debt is said here so that it stays in view. */
|
|
68
|
+
export declare function lqPercent(t: number): number;
|
|
69
|
+
/** slider percent (any number) -> clamped t (0..1) — mirrors `+lq.value/100` fed into setLq's clamp.
|
|
70
|
+
* @deprecated Since ADR-0151 the boost is chosen by STEPS; kept for consumers. */
|
|
71
|
+
export declare function lqFromPercent(pct: number): number;
|
|
72
|
+
/** Defensive clamp when the player count shrank — mirrors `if(selVizPlayer>=numPlayers)selVizPlayer=0`. */
|
|
73
|
+
export declare function clampSelectedPlayer(selected: number, playerCount: number): number;
|
|
74
|
+
/** [r,g,b] (0..255) -> '#rrggbb'. */
|
|
75
|
+
export declare function rgbToHex(rgb: RGB): string;
|
|
76
|
+
/** Shared on/off button label used by this panel's toggle buttons. */
|
|
77
|
+
export declare function onOffLabel(t: Translate, on: boolean): string;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
// ui/visual-choices — WHAT A VISUAL CHOICE IS, with no document anywhere near it.
|
|
3
|
+
//
|
|
4
|
+
// 📌 THE SUITE HAD ALREADY DRAWN THIS SEAM, which is what makes the cut a reading and not an opinion:
|
|
5
|
+
// `tests/settings-visual.node.test.js` imports exactly these names and nothing else, and the node project mounts no
|
|
6
|
+
// document — so whoever wrote those cases had to know where the panel stopped being a panel. It is the fourth module to
|
|
7
|
+
// come out this way, after `ui/audio-choices`, `ui/typo-choices` and `ui/control-choices`.
|
|
8
|
+
//
|
|
9
|
+
// What lives here answers «what are the positions, what is each one called, and what does a value mean»; what stayed in
|
|
10
|
+
// `ui/settings-visual` is the work its name never mentioned — finding the controls, wiring them, and reflecting the
|
|
11
|
+
// choice on three surfaces.
|
|
12
|
+
import { toggleLabel } from './dom.js';
|
|
13
|
+
import { CONTRAST_LEVELS } from '../core/visual-cycles.js';
|
|
14
|
+
import { HC_ROLE_KEYS } from '../render/hc-role-data.js';
|
|
15
|
+
import { VIZ_CORRECTIONS, VIZ_MODES } from '../render/viz-modes.js';
|
|
16
|
+
/**
|
|
17
|
+
* EVERYTHING this menu writes into `p.viz`: the 4 contrast levels PLUS the 3 colour-blindness corrections, which live
|
|
18
|
+
* here by the Dev's decision (#60) — in the empathy panel a colour-blind child would have had to enter the menu for
|
|
19
|
+
* "feeling what a disability is like" to find the correction for the one they have.
|
|
20
|
+
*
|
|
21
|
+
* The seven live in ONE control, and that is not about saving space: `p.viz` holds ONE value. Two separate controls
|
|
22
|
+
* would overwrite each other silently — the child would pick the correction, then the contrast, and lose the
|
|
23
|
+
* correction with nothing saying so. One list tells the truth about the exclusivity.
|
|
24
|
+
*/
|
|
25
|
+
export const VISUAL_MODES = [...CONTRAST_LEVELS, ...VIZ_CORRECTIONS.map((m) => m.key)];
|
|
26
|
+
const VISUAL_MODE_SET = new Set(VISUAL_MODES);
|
|
27
|
+
/** Short announcement labels. */
|
|
28
|
+
// i18n keys, not text. The ratios look like universal numbers, but '4,5:1' uses the pt-BR decimal comma and becomes
|
|
29
|
+
// '4.5:1' in English — and 'off' is a word in each language.
|
|
30
|
+
export const CONTRAST_LABELS = { normal: 'contrast.off', 'hc-direto': 'contrast.3', 'hc-direto-45': 'contrast.45', 'hc-direto-7': 'contrast.7' };
|
|
31
|
+
export const ROLE_KEYS = HC_ROLE_KEYS;
|
|
32
|
+
/** Readable labels for the color-blocking roles. */
|
|
33
|
+
export const ROLE_LABELS = { hazard: 'perigo (lava)', climb: 'escalável (escada/trampolim)', water: 'água', gate: 'portão' };
|
|
34
|
+
/**
|
|
35
|
+
* The 7 modes as the panel OFFERS them: a radio list, with a name and a description on each row.
|
|
36
|
+
*
|
|
37
|
+
* Not a `<select>`, and the Dev caught that immediately: inside a `<select>` the corrections become one closed line in
|
|
38
|
+
* a closed box. For a control whose reason to exist is to be FOUND by someone who sees poorly, hiding it behind a
|
|
39
|
+
* click is almost the same as not offering it.
|
|
40
|
+
*
|
|
41
|
+
* Radio, and not seven buttons: `p.viz` holds ONE value, and the exclusivity is said by the shape of the control
|
|
42
|
+
* instead of being discovered by losing the correction just chosen.
|
|
43
|
+
*/
|
|
44
|
+
export const VISUAL_MODE_LIST = VIZ_MODES.filter((m) => m.kind === 'normal' || m.kind === 'hcnew').concat(VIZ_CORRECTIONS);
|
|
45
|
+
/**
|
|
46
|
+
* `viz` when it is a mode of THIS menu (contrast or correction), otherwise 'normal'.
|
|
47
|
+
*
|
|
48
|
+
* Named for what it returns: a name that said "contrast" would lie when it returns `fix-deuter`, and a name that lies
|
|
49
|
+
* about what it returns is worse than a long one.
|
|
50
|
+
*/
|
|
51
|
+
export function resolveVisualMode(viz) {
|
|
52
|
+
return VISUAL_MODE_SET.has(viz) ? viz : 'normal';
|
|
53
|
+
}
|
|
54
|
+
/** i18n KEY of a contrast level's label; unknown modes fall back to the 'off' key. Resolve with `t()`. */
|
|
55
|
+
export function contrastLabel(mode) {
|
|
56
|
+
return CONTRAST_LABELS[mode] ?? CONTRAST_LABELS.normal;
|
|
57
|
+
}
|
|
58
|
+
export function clamp01(t) {
|
|
59
|
+
return Math.max(0, Math.min(1, t));
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* i18n KEY of the L->Q slider label ('lq.off'/'lq.linear'/'lq.mixed'/'lq.quadratic'). The label belongs to the L->Q
|
|
63
|
+
* feature, so it lives with the filter that owns it (render/lq-filter) and is re-exported here under the name this
|
|
64
|
+
* overlay has always used. Two copies of one rule is one copy too many: only the owner may change what the levels
|
|
65
|
+
* mean. Callers resolve with `t()` — see the note on lqName about the `t` shadowing.
|
|
66
|
+
*/
|
|
67
|
+
export { lqName as lqLabel } from '../render/lq-filter.js';
|
|
68
|
+
import { lqName } from '../render/lq-filter.js';
|
|
69
|
+
/**
|
|
70
|
+
* THE FOUR POSITIONS OF THE CONTRAST BOOST, chosen with left and right (ADR-0151): off, linear, mixed and quadratic —
|
|
71
|
+
* «da mesma forma que se troca o número de jogadores, e não através de uma barra».
|
|
72
|
+
*
|
|
73
|
+
* ⚠️ THE "LINEAR" VALUE CANNOT BE ZERO: `setLq(0)` turns the filter off, and any value above turns the curve on. 0.05
|
|
74
|
+
* is the most linear value that still turns the filter on. Mixed is the middle, and quadratic is the whole S-curve.
|
|
75
|
+
* Each position falls within the range `lqName` already gives its name.
|
|
76
|
+
*/
|
|
77
|
+
export const LQ_STEPS = [0, 0.05, 0.5, 1];
|
|
78
|
+
/**
|
|
79
|
+
* Which position a continuous value is in — including one STORED by the old slider (0.35, 0.7…). By `lqName`'s range,
|
|
80
|
+
* not by the nearest value: the NAME the child heard has to stay the name now.
|
|
81
|
+
*/
|
|
82
|
+
export function lqPosition(amount) {
|
|
83
|
+
return Math.max(0, ['lq.off', 'lq.linear', 'lq.mixed', 'lq.quadratic'].indexOf(lqName(amount)));
|
|
84
|
+
}
|
|
85
|
+
/** t (0..1) -> slider percent (0..100, rounded) — mirrors `Math.round(lqT*100)`.
|
|
86
|
+
* @deprecated Since ADR-0151 the boost is chosen by STEPS (`LQ_STEPS`/`lqPosition`); kept for consumers.
|
|
87
|
+
* ⚠️ It has no reader inside the engine: that debt is said here so that it stays in view. */
|
|
88
|
+
export function lqPercent(t) {
|
|
89
|
+
return Math.round(clamp01(t) * 100);
|
|
90
|
+
}
|
|
91
|
+
/** slider percent (any number) -> clamped t (0..1) — mirrors `+lq.value/100` fed into setLq's clamp.
|
|
92
|
+
* @deprecated Since ADR-0151 the boost is chosen by STEPS; kept for consumers. */
|
|
93
|
+
export function lqFromPercent(pct) {
|
|
94
|
+
return clamp01(pct / 100);
|
|
95
|
+
}
|
|
96
|
+
/** Defensive clamp when the player count shrank — mirrors `if(selVizPlayer>=numPlayers)selVizPlayer=0`. */
|
|
97
|
+
export function clampSelectedPlayer(selected, playerCount) {
|
|
98
|
+
return selected >= playerCount ? 0 : selected;
|
|
99
|
+
}
|
|
100
|
+
/** [r,g,b] (0..255) -> '#rrggbb'. */
|
|
101
|
+
export function rgbToHex(rgb) {
|
|
102
|
+
return '#' + rgb.map((n) => n.toString(16).padStart(2, '0')).join('');
|
|
103
|
+
}
|
|
104
|
+
/** Shared on/off button label used by this panel's toggle buttons. */
|
|
105
|
+
export function onOffLabel(t, on) {
|
|
106
|
+
return toggleLabel(t, on);
|
|
107
|
+
}
|
package/dist-pkg/ui/vlibras.d.ts
CHANGED
|
@@ -1,11 +1,34 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export
|
|
6
|
-
/**
|
|
7
|
-
export
|
|
8
|
-
/**
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
|
|
2
|
+
import type { Translate } from '../core/i18n.js';
|
|
3
|
+
import type { Store } from '../platform/storage.js';
|
|
4
|
+
/** What deaf mode is read and written through: the page's store, built by the root (ADR-0232, issue #207). */
|
|
5
|
+
export type LibrasStore = Pick<Store, 'getBool' | 'setBool'>;
|
|
6
|
+
/** What a deaf mode is built over. */
|
|
7
|
+
export interface LibrasPorts {
|
|
8
|
+
/** Where the hidden node the interpreter clicks lives (its `body`), and where the widget's access button is looked for. */
|
|
9
|
+
readonly doc: Document;
|
|
10
|
+
/** Where the widget's close event is dispatched, and whose timer drains the one-utterance queue. */
|
|
11
|
+
readonly win: Pick<Window, 'dispatchEvent' | 'setTimeout'>;
|
|
12
|
+
/** The page's store: the person's choice is read once, at build, and written at each toggle. */
|
|
13
|
+
readonly store: LibrasStore;
|
|
14
|
+
/** Milliseconds now — the queue's clock (`Date.now`). */
|
|
15
|
+
readonly now: () => number;
|
|
16
|
+
}
|
|
17
|
+
/** One root's deaf mode. */
|
|
18
|
+
export interface Libras {
|
|
19
|
+
/** Is deaf mode on? Reads OUR state — never the widget's geometry. */
|
|
20
|
+
readonly isOpen: () => boolean;
|
|
21
|
+
/** Turns deaf mode on/off. A real toggle: the state is ours, so it always flips; the confirmation is signed in `t`'s language. */
|
|
22
|
+
readonly toggle: (t: Translate) => void;
|
|
23
|
+
/** Signs in Libras: sends the text to the interpreter (only while it is open). A queue of 1 — a new utterance replaces the pending one. */
|
|
24
|
+
readonly say: (text: string) => void;
|
|
25
|
+
/** Kept for a game loop that calls it every frame: it opens the interpreter for a choice restored from storage. It decides nothing. */
|
|
26
|
+
readonly tick: () => void;
|
|
27
|
+
/** Runs `fn` when the mode opens or closes (a host's reflow); returns its release. */
|
|
28
|
+
readonly onChange: (fn: () => void) => () => void;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Builds a deaf mode. The PERSON's choice, persisted — not an inference about a third-party widget — read from the store
|
|
32
|
+
* here, at build, never at import (ADR-0232).
|
|
33
|
+
*/
|
|
34
|
+
export declare function createLibras({ doc, win, store, now }: LibrasPorts): Libras;
|
package/dist-pkg/ui/vlibras.js
CHANGED
|
@@ -1,87 +1,64 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
//
|
|
18
|
-
// O ESTADO AGORA É NOSSO. `librasOpen` é uma escolha da pessoa, persistida, e não a leitura de um retângulo
|
|
19
|
-
// de terceiro. Um modo de acessibilidade cujo estado é inferido da geometria de outra biblioteca é um modo
|
|
20
|
-
// que desliga sozinho quando essa biblioteca muda — e quem paga é quem depende dele.
|
|
21
|
-
//
|
|
22
|
-
// O QUE AINDA NÃO É: o Dev decidiu que o intérprete deve aparecer NA FRENTE da tela quando um áudio toca e
|
|
23
|
-
// sumir depois, sem clicar em nada e sem depender de clicar em textos. O widget do VLibras não faz isso (é um
|
|
24
|
-
// painel encaixado, que traduz o texto do elemento clicado), então essa é a razão de o pilar 2 do ADR-0010
|
|
25
|
-
// prever um motor próprio em zdog. Este arquivo para de empurrar a tela e passa a ter um toggle honesto; o
|
|
26
|
-
// intérprete sob demanda é trabalho à parte.
|
|
27
|
-
import { t } from '../core/i18n.js';
|
|
28
|
-
import * as store from '../platform/storage.js';
|
|
29
|
-
/** Estado do modo pessoa surda. Escolha da PESSOA, persistida — não inferência sobre um widget de terceiro. */
|
|
30
|
-
export let librasOpen = store.getBool('incl_libras', false);
|
|
31
|
-
let _vlOpen = false, _vlNode = null, _vlBusyUntil = 0, _vlNext = null;
|
|
32
|
-
let _onLibrasChange = () => { };
|
|
33
|
-
// Registra o reflow (layout) a rodar quando o painel abre/fecha. Chamado no boot do game.js.
|
|
34
|
-
export function setOnLibrasChange(fn) { _onLibrasChange = fn; }
|
|
35
|
-
// Fala em Libras: manda o texto ao intérprete (só quando o painel está aberto). Fila de 1 — fala nova substitui a pendente.
|
|
36
|
-
export function vlibrasSay(text) {
|
|
37
|
-
if (!_vlOpen || !text)
|
|
38
|
-
return;
|
|
39
|
-
const now = Date.now();
|
|
40
|
-
if (now < _vlBusyUntil) {
|
|
41
|
-
_vlNext = text;
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
_vlBusyUntil = now + 4000;
|
|
45
|
-
if (!_vlNode) {
|
|
46
|
-
_vlNode = document.createElement('span');
|
|
47
|
-
_vlNode.setAttribute('aria-hidden', 'true');
|
|
48
|
-
_vlNode.style.cssText = 'position:fixed;left:0;top:0;width:1px;height:1px;overflow:hidden;opacity:.01;z-index:1;pointer-events:auto';
|
|
49
|
-
document.body.appendChild(_vlNode);
|
|
50
|
-
}
|
|
51
|
-
_vlNode.textContent = text;
|
|
52
|
-
try {
|
|
53
|
-
_vlNode.click();
|
|
54
|
-
}
|
|
55
|
-
catch (e) { /* noop */ }
|
|
56
|
-
setTimeout(() => { const nx = _vlNext; _vlNext = null; _vlBusyUntil = 0; if (nx)
|
|
57
|
-
vlibrasSay(nx); }, 4100);
|
|
58
|
-
}
|
|
59
|
-
const vwBtn = () => document.querySelector('[vw-access-button]');
|
|
60
|
-
/** O modo pessoa surda está ligado? Lê o NOSSO estado — nunca mais a geometria do widget. */
|
|
61
|
-
export function vlibrasOpen() { return librasOpen; }
|
|
62
|
-
/** Liga/desliga o modo pessoa surda. Um toggle de verdade: o estado é nosso, então ele sempre alterna. */
|
|
63
|
-
export function toggleLibras() {
|
|
64
|
-
librasOpen = !librasOpen;
|
|
65
|
-
_vlOpen = librasOpen;
|
|
66
|
-
store.setBool('incl_libras', librasOpen);
|
|
67
|
-
// Tentativa BEST-EFFORT de acordar o widget do VLibras, se ele estiver carregado. Falhar aqui não pode
|
|
68
|
-
// impedir o modo de ligar: o estado é a escolha da pessoa, o widget é só um tradutor possível para ela.
|
|
69
|
-
const b = vwBtn();
|
|
70
|
-
if (librasOpen && b) {
|
|
71
|
-
try {
|
|
72
|
-
b.click();
|
|
2
|
+
/**
|
|
3
|
+
* Builds a deaf mode. The PERSON's choice, persisted — not an inference about a third-party widget — read from the store
|
|
4
|
+
* here, at build, never at import (ADR-0232).
|
|
5
|
+
*/
|
|
6
|
+
export function createLibras({ doc, win, store, now }) {
|
|
7
|
+
let open = store.getBool('incl_libras', false);
|
|
8
|
+
let vlOpen = false, node = null, busyUntil = 0, next = null;
|
|
9
|
+
const changeListeners = new Set();
|
|
10
|
+
const say = (text) => {
|
|
11
|
+
if (!vlOpen || !text)
|
|
12
|
+
return;
|
|
13
|
+
const at = now();
|
|
14
|
+
if (at < busyUntil) {
|
|
15
|
+
next = text;
|
|
16
|
+
return;
|
|
73
17
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
18
|
+
busyUntil = at + 4000;
|
|
19
|
+
if (!node) {
|
|
20
|
+
node = doc.createElement('span');
|
|
21
|
+
node.setAttribute('aria-hidden', 'true');
|
|
22
|
+
node.style.cssText = 'position:fixed;left:0;top:0;width:1px;height:1px;overflow:hidden;opacity:.01;z-index:1;pointer-events:auto';
|
|
23
|
+
doc.body.appendChild(node);
|
|
24
|
+
}
|
|
25
|
+
node.textContent = text;
|
|
77
26
|
try {
|
|
78
|
-
|
|
27
|
+
node.click();
|
|
79
28
|
}
|
|
80
29
|
catch (e) { /* noop */ }
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
30
|
+
win.setTimeout(() => { const nx = next; next = null; busyUntil = 0; if (nx)
|
|
31
|
+
say(nx); }, 4100);
|
|
32
|
+
};
|
|
33
|
+
const toggle = (t) => {
|
|
34
|
+
open = !open;
|
|
35
|
+
vlOpen = open;
|
|
36
|
+
store.setBool('incl_libras', open);
|
|
37
|
+
// A BEST-EFFORT attempt to wake the VLibras widget, if it is loaded. Failing here must not stop the mode from
|
|
38
|
+
// turning on: the state is the person's choice, and the widget is only one possible translator for them.
|
|
39
|
+
const b = doc.querySelector('[vw-access-button]');
|
|
40
|
+
if (open && b) {
|
|
41
|
+
try {
|
|
42
|
+
b.click();
|
|
43
|
+
}
|
|
44
|
+
catch (e) { /* noop */ }
|
|
45
|
+
}
|
|
46
|
+
else if (!open) {
|
|
47
|
+
try {
|
|
48
|
+
win.dispatchEvent(new CustomEvent('vp-widget-close'));
|
|
49
|
+
}
|
|
50
|
+
catch (e) { /* noop */ }
|
|
51
|
+
}
|
|
52
|
+
for (const fn of [...changeListeners])
|
|
53
|
+
fn();
|
|
54
|
+
if (open)
|
|
55
|
+
say(t('sr.libras.on'));
|
|
56
|
+
};
|
|
57
|
+
return {
|
|
58
|
+
isOpen: () => open,
|
|
59
|
+
toggle,
|
|
60
|
+
say,
|
|
61
|
+
tick: () => { vlOpen = open; },
|
|
62
|
+
onChange: (fn) => { changeListeners.add(fn); return () => { changeListeners.delete(fn); }; },
|
|
63
|
+
};
|
|
85
64
|
}
|
|
86
|
-
/** Mantido para o laço do jogo, que o chama a cada quadro. Já não decide nada — o estado é nosso. */
|
|
87
|
-
export function vlTick() { _vlOpen = librasOpen; }
|