@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,103 +1,129 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// ui/panel-shell —
|
|
2
|
+
// ui/panel-shell — THE SHELL OF A SETTINGS PANEL, built instead of required.
|
|
3
3
|
//
|
|
4
|
-
// =========================
|
|
5
|
-
//
|
|
4
|
+
// ========================= WHAT THIS FIXES =========================
|
|
5
|
+
// A second consumer (issue #63) measured it: a panel's ctx asks for `$` and `store`, but what it REALLY requires is
|
|
6
|
+
// that the consumer's document contain five ids (`#typo`, `#typo-list`, `#typo-close`, …). Nothing in the type says so;
|
|
7
|
+
// it is found by trial, and the failure mode is the worst possible one — the panel opens EMPTY, with no error.
|
|
6
8
|
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
// possível: o painel abre VAZIO, sem erro.»
|
|
9
|
+
// Each `ui/settings-*.ts` fills the INSIDE of its panel; this module builds the OUTSIDE — the veil, the card, the title,
|
|
10
|
+
// the actions row and the reset button — and returns the ids it created, so the contract is stated instead of
|
|
11
|
+
// discovered.
|
|
11
12
|
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
//
|
|
13
|
+
// ⚠️ AND THE MENU RULE OF `CLAUDE.md` §4 IS BUILT IN, not remembered. A panel's introduction goes in the card's
|
|
14
|
+
// `data-explain-idle` — never in a `<p>` of prose at the top —, because a menu that explains item by item makes the
|
|
15
|
+
// child READ EVERYTHING to find what they want (issue #62). The shell has no way to receive a `<p>` at the top.
|
|
15
16
|
//
|
|
16
|
-
//
|
|
17
|
-
// `data-explain-idle` do cartão — nunca num `<p>` de prosa no topo —, porque um menu que explica item a item
|
|
18
|
-
// obriga a criança a LER TUDO para achar o que procura. A issue #62 mandava editar seis blocos de markup para
|
|
19
|
-
// isso; o markup saiu, e a regra ficou sem alvo. Aqui ela deixa de ser lembrete e passa a ser construção: a
|
|
20
|
-
// casca não tem por onde receber um `<p>` no topo.
|
|
21
|
-
//
|
|
22
|
-
// ========================= A FORMA, QUE FOI MEDIDA E NÃO INVENTADA =========================
|
|
23
|
-
// É a do painel de tipografia do `app/quiz.html`, que é o único que sobrou e o que o segundo consumidor
|
|
24
|
-
// exercitou de facto:
|
|
17
|
+
// ========================= THE SHAPE =========================
|
|
25
18
|
//
|
|
26
19
|
// <div id="X" class="overlay" hidden>
|
|
27
20
|
// <div class="overlay__card" role="dialog" aria-modal="true" aria-labelledby="X-title" [data-explain-idle]>
|
|
28
21
|
// <h2 id="X-title">…</h2>
|
|
29
|
-
// <
|
|
22
|
+
// <button id="X-close">…</button> ← item 1 (ADR-0158)
|
|
23
|
+
// <div id="X-list" class="ctrl-list" role="group" aria-label="…"></div> ← the inside, from settings-*
|
|
30
24
|
// <div class="overlay__actions">
|
|
31
|
-
// <button id="X-reset">…</button>
|
|
25
|
+
// <button id="X-reset">…</button>
|
|
32
26
|
// </div>
|
|
33
27
|
// </div>
|
|
34
28
|
// </div>
|
|
35
29
|
//
|
|
36
|
-
// ⚠️
|
|
37
|
-
//
|
|
38
|
-
//
|
|
30
|
+
// ⚠️ THE `.opt-explain` FOOTER IS NOT CREATED HERE, on purpose: `ui/settings-panel.fillExplain` creates it when it moves
|
|
31
|
+
// the first hint there. Creating it empty here would give an `aria-live` region that announces nothing, and two hands
|
|
32
|
+
// creating the same node is how it would end up duplicated.
|
|
39
33
|
//
|
|
40
|
-
//
|
|
41
|
-
//
|
|
42
|
-
//
|
|
34
|
+
// No `innerHTML`: everything through `create` + `textContent`, like `ui/loop-crash` and `ui/focus-trap`. The title and
|
|
35
|
+
// the list label come from the CALLER already resolved — this module does not translate, so it can be exercised with no
|
|
36
|
+
// dictionary.
|
|
43
37
|
//
|
|
44
|
-
// ⚠️
|
|
45
|
-
//
|
|
46
|
-
//
|
|
47
|
-
/**
|
|
48
|
-
export function
|
|
49
|
-
return {
|
|
38
|
+
// ⚠️ AND IT IMPORTS NOTHING. A shell that does not use `innerHTML` does not need to escape text either: `textContent`
|
|
39
|
+
// escapes by construction. An import "for convenience" is how a leaf module stops being one, and how a future reader
|
|
40
|
+
// starts looking for an interpolation that does not exist.
|
|
41
|
+
/** The ids a panel of `id` occupies. Exported because a gate and a consumer need to name them. */
|
|
42
|
+
export function shellIds(id, customListId) {
|
|
43
|
+
return {
|
|
44
|
+
overlay: id,
|
|
45
|
+
title: `${id}-title`,
|
|
46
|
+
list: customListId ?? `${id}-list`,
|
|
47
|
+
reset: `${id}-reset`,
|
|
48
|
+
close: `${id}-close`,
|
|
49
|
+
};
|
|
50
50
|
}
|
|
51
51
|
/**
|
|
52
|
-
*
|
|
52
|
+
* Mounts (or reuses) the shell of panel `spec.id` and returns its parts.
|
|
53
53
|
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
* contagem de jogadores muda a grade de telas.
|
|
54
|
+
* IDEMPOTENT: if a `#id` already exists, it is reused and the card's content is rebuilt. A panel mounted twice cannot
|
|
55
|
+
* end up with two veils — and it can be mounted more than once (two cartridges on one page, ADR-0139).
|
|
57
56
|
*/
|
|
58
|
-
export function
|
|
59
|
-
const ids =
|
|
60
|
-
const overlay = ctx.
|
|
57
|
+
export function mountShell(ctx, spec) {
|
|
58
|
+
const ids = shellIds(spec.id, spec.listId);
|
|
59
|
+
const overlay = ctx.find('#' + ids.overlay) ?? ctx.create('div');
|
|
61
60
|
overlay.id = ids.overlay;
|
|
62
61
|
overlay.className = 'overlay';
|
|
63
62
|
overlay.hidden = true;
|
|
64
63
|
while (overlay.firstChild)
|
|
65
64
|
overlay.removeChild(overlay.firstChild);
|
|
66
|
-
const card = ctx.
|
|
65
|
+
const card = ctx.create('div');
|
|
67
66
|
card.className = 'overlay__card';
|
|
68
67
|
card.setAttribute('role', 'dialog');
|
|
69
68
|
card.setAttribute('aria-modal', 'true');
|
|
70
69
|
card.setAttribute('aria-labelledby', ids.title);
|
|
71
|
-
|
|
72
|
-
if (spec.introducao)
|
|
73
|
-
card.setAttribute('data-explain-idle', spec.introducao);
|
|
74
|
-
const h2 = ctx.criar('h2');
|
|
70
|
+
const h2 = ctx.create('h2');
|
|
75
71
|
h2.id = ids.title;
|
|
76
|
-
h2.textContent = spec.titulo;
|
|
77
72
|
card.appendChild(h2);
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
73
|
+
// ADR-0158: «Voltar» is item 1 and nothing closes the panel after its rows. The way out is where the cursor lands
|
|
74
|
+
// when the panel opens — a close button at the bottom made the child walk every row to leave. The id stays
|
|
75
|
+
// `#X-close`, which is contract; only its place and its word changed.
|
|
76
|
+
const backButton = button(ctx, ids.close, 'mode-btn overlay__back');
|
|
77
|
+
card.appendChild(backButton);
|
|
78
|
+
const listNode = ctx.create('div');
|
|
79
|
+
listNode.id = ids.list;
|
|
80
|
+
listNode.className = 'ctrl-list';
|
|
81
|
+
listNode.setAttribute('role', 'group');
|
|
82
|
+
card.appendChild(listNode);
|
|
83
|
+
const actionsRow = ctx.create('div');
|
|
84
|
+
actionsRow.className = 'overlay__actions';
|
|
85
|
+
const reset = button(ctx, ids.reset, 'mode-btn');
|
|
86
|
+
actionsRow.appendChild(reset);
|
|
87
|
+
card.appendChild(actionsRow);
|
|
91
88
|
overlay.appendChild(card);
|
|
92
|
-
|
|
89
|
+
const shell = { overlay, card, title: h2, list: listNode, reset, close: backButton, ids };
|
|
90
|
+
applyLabels(shell, spec);
|
|
91
|
+
return shell;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* WRITES THE SHELL'S WORDS — separate from construction because they change AFTER it exists.
|
|
95
|
+
*
|
|
96
|
+
* 🔴 `initI18n` applies the fallback language synchronously — so the page is never blank — and, if the preferred
|
|
97
|
+
* language is another, REQUESTS the switch, which is asynchronous. Anything JavaScript builds in that gap captures the
|
|
98
|
+
* fallback text and nothing rebuilds it; and the language can also change mid-game.
|
|
99
|
+
*
|
|
100
|
+
* ⚠️ AND REBUILDING THE SHELL TO FIX THE TITLE DOES NOT WORK. `mountShell` empties the card, and each `ui/settings-*`
|
|
101
|
+
* wires its `#X-reset` ONCE, at `init` — remounting leaves the reset button in the document with no listener, a dead
|
|
102
|
+
* button that looks alive (ADR-0106 §5). Writing only the words touches no listener.
|
|
103
|
+
*
|
|
104
|
+
* IDEMPOTENT: writing the same labels twice is writing the same labels.
|
|
105
|
+
*/
|
|
106
|
+
export function applyLabels(shell, r) {
|
|
107
|
+
shell.title.textContent = r.title;
|
|
108
|
+
shell.list.setAttribute('aria-label', r.listLabel);
|
|
109
|
+
shell.reset.textContent = r.resetLabel;
|
|
110
|
+
shell.close.textContent = r.closeLabel;
|
|
111
|
+
// the arrow is drawn by the stylesheet, out of the name (ADR-0159 rule 12)
|
|
112
|
+
shell.close.setAttribute('data-glifo', '↩');
|
|
113
|
+
// The panel's introduction is the footer's RESTING text (CLAUDE.md §4), never a `<p>` at the top.
|
|
114
|
+
// ⚠️ ABSENCE HAS TO ERASE, not just stop writing: on a retranslation into a dictionary without the key, the old
|
|
115
|
+
// attribute would survive and the footer would rest in the previous language.
|
|
116
|
+
if (r.intro)
|
|
117
|
+
shell.card.setAttribute('data-explain-idle', r.intro);
|
|
118
|
+
else
|
|
119
|
+
shell.card.removeAttribute('data-explain-idle');
|
|
93
120
|
}
|
|
94
|
-
function
|
|
95
|
-
const b = ctx.
|
|
121
|
+
function button(ctx, id, cssClass) {
|
|
122
|
+
const b = ctx.create('button');
|
|
96
123
|
b.id = id;
|
|
97
|
-
b.className =
|
|
124
|
+
b.className = cssClass;
|
|
98
125
|
b.setAttribute('type', 'button');
|
|
99
|
-
//
|
|
100
|
-
//
|
|
101
|
-
b.textContent = rotulo;
|
|
126
|
+
// The label comes in through `applyLabels`, by `textContent` and not `innerHTML`: a translated label is outside data
|
|
127
|
+
// like any other, and a consumer's dictionary can bring anything inside it.
|
|
102
128
|
return b;
|
|
103
129
|
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
import type { PanelShellCtx } from './panel-shell.js';
|
|
3
|
+
/**
|
|
4
|
+
* The control's SHAPE, not its tag — because the question a panel asks is "does this turn on and off?", not "is this a
|
|
5
|
+
* `<button>`?".
|
|
6
|
+
*
|
|
7
|
+
* 📏 The first three came from measuring the panels: `interruptor` (a switch) covers most of the controls they reach,
|
|
8
|
+
* `escolha` (a select) and `cursor` (a slider) the rest. A new shape enters when a panel demands it, not before.
|
|
9
|
+
*/
|
|
10
|
+
export type ControlShape = 'interruptor' | 'escolha' | 'cursor' | 'radio' | 'button';
|
|
11
|
+
export interface ControlRowSpec {
|
|
12
|
+
/** The CONTROL's id — `opt-facil`, `cane-div`. It is how the `settings-*` finds it. */
|
|
13
|
+
readonly id: string;
|
|
14
|
+
/** The SHORT label, already translated. It goes in the `<strong>`, and it is the only thing in view on the row. */
|
|
15
|
+
readonly label: string;
|
|
16
|
+
/**
|
|
17
|
+
* The explanation, already translated. It goes into a SINGLE `.opt-hint`, which `fillExplain` moves to the footer.
|
|
18
|
+
*
|
|
19
|
+
* 📌 Absent = this row has no explanation, which is a legitimate answer. The footer then rests on the panel's text
|
|
20
|
+
* (`data-explain-idle`) while the cursor is on it.
|
|
21
|
+
*/
|
|
22
|
+
readonly hint?: string;
|
|
23
|
+
/** The control's shape. Absent: `interruptor`, the most common case. */
|
|
24
|
+
readonly shape?: ControlShape;
|
|
25
|
+
/**
|
|
26
|
+
* The name a screen reader announces, when it is not the label.
|
|
27
|
+
*
|
|
28
|
+
* ⚠️ IT EXISTS BECAUSE A SWITCH'S TEXT IS ITS STATE, not its name: a `<button>` whose `textContent` says "Off"
|
|
29
|
+
* announces "Off, button" and the person does not know off WHAT. The `<strong>` beside it solves that for whoever SEES
|
|
30
|
+
* the whole row; for whoever navigates control by control, this attribute solves it. Absent, it falls back to
|
|
31
|
+
* `label` — which is the right answer, not a fallback.
|
|
32
|
+
*/
|
|
33
|
+
readonly ariaLabel?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface ControlRow {
|
|
36
|
+
/** The whole `.ctrl-row`. It is where ADR-0029's `markChanged` puts the left-the-default mark. */
|
|
37
|
+
readonly row: HTMLElement;
|
|
38
|
+
/** The control itself, with the requested id. */
|
|
39
|
+
readonly control: HTMLElement;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Builds a menu row: a short label, a hint that goes to the footer, and a control.
|
|
43
|
+
*
|
|
44
|
+
* The row is NOT inserted anywhere — whoever mounts it decides the order, which in this project's menus is part of the
|
|
45
|
+
* decision (ADR-0044 §2).
|
|
46
|
+
*/
|
|
47
|
+
export declare function controlRow(ctx: PanelShellCtx, spec: ControlRowSpec): ControlRow;
|
|
48
|
+
/**
|
|
49
|
+
* REWRITES THE WORDS OF A ROW THAT ALREADY EXISTS — the counterpart of `ui/panel-shell.applyLabels`, one level down.
|
|
50
|
+
*
|
|
51
|
+
* 🔴 The inside of a panel is mounted once, and anything mounted at boot captures the fallback language's text:
|
|
52
|
+
* `initI18n` applies the fallback synchronously and REQUESTS the preferred one, which arrives later — a panel would serve
|
|
53
|
+
* its TITLE in one language and its ROWS in another, on the same screen.
|
|
54
|
+
*
|
|
55
|
+
* ⚠️ AND NO UNIT TEST CATCHES IT, because they all run in a single language.
|
|
56
|
+
*
|
|
57
|
+
* ⚠️ REWRITE AND NOT REBUILD, for the reason `applyLabels` already states: each `ui/settings-*` wires its controls'
|
|
58
|
+
* clicks ONCE, at boot. Remaking the row would leave a control in the document with no listener — a dead button that
|
|
59
|
+
* looks alive (ADR-0106 §5).
|
|
60
|
+
*/
|
|
61
|
+
export declare function labelRow(rowNode: HTMLElement, spec: ControlRowSpec): void;
|
|
62
|
+
/**
|
|
63
|
+
* The header of a panel section: a title and a tag that qualifies it.
|
|
64
|
+
*
|
|
65
|
+
* 📏 It is in the kit because several panels wrote it by hand, with the `.panel-sub__tag` markup copied into each — the
|
|
66
|
+
* same reason as `controlRow`: a rule repeated across files is a rule that drifts.
|
|
67
|
+
*
|
|
68
|
+
* ⚠️ AND IT REFUSES TO EXIST OVER NOTHING, which is the behaviour that makes it worth a function. An "awaiting
|
|
69
|
+
* negotiation" heading with no row under it tells the reader something is there when nothing is, and the person looks
|
|
70
|
+
* for what the title promises. `rows` is the NUMBER of rows the section will have — passing it is what makes this rule
|
|
71
|
+
* exercisable by a case, instead of an `if` no fixed tree reaches.
|
|
72
|
+
*
|
|
73
|
+
* 📌 The title and tag arrive ALREADY TRANSLATED, as in `controlRow`: the kit does not decide language, it builds shape.
|
|
74
|
+
*/
|
|
75
|
+
export declare function sectionHeader(ctx: PanelShellCtx, title: string, tag: string, rows: number): HTMLElement | null;
|
|
76
|
+
/**
|
|
77
|
+
* What a steps control needs: a name, the positions (already translated) and the current one.
|
|
78
|
+
*
|
|
79
|
+
* 🎯 THE DEV ASKED FOR IT, with an exact shape: the contrast boost «deve funcionar trocando entre desligado, linear,
|
|
80
|
+
* misto e quadrático da mesma forma que se troca o número de jogadores, isto é, apertando botões direita e esquerda, e
|
|
81
|
+
* não através de uma barra», and the rounded corners «também». A slider hides how many positions there are; a dropdown
|
|
82
|
+
* hides them all until it opens. Steps always say where you are.
|
|
83
|
+
*
|
|
84
|
+
* 🔴 AND THE SHAPE IS A SINGLE LINE: «◀ Rótulo: valor ▶» (ADR-0130 errata, rule 3) — the Dev: «Não faça essa coisa
|
|
85
|
+
* estranha. Escreva "< Rounded corner: off >"». It is the way to cycle between FEW positions — up to five; above that,
|
|
86
|
+
* a dropdown.
|
|
87
|
+
*/
|
|
88
|
+
export interface StepsSpec {
|
|
89
|
+
/** The control's spoken name — it goes to `aria-label`. */
|
|
90
|
+
readonly label: string;
|
|
91
|
+
/** The positions, in order, already translated. */
|
|
92
|
+
readonly values: readonly string[];
|
|
93
|
+
/** The index of the current position. */
|
|
94
|
+
readonly current: number;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* The next step, CLAMPED at the ends — not a ring, and the difference is the decision.
|
|
98
|
+
*
|
|
99
|
+
* ⚠️ In a ring, right from the largest position would return to off: whoever adjusts looking for the maximum would pass
|
|
100
|
+
* it without warning and switch off what they wanted to raise. Clamped, the end is a wall you feel — the number of
|
|
101
|
+
* players, the model the Dev gave, does not wrap either.
|
|
102
|
+
*/
|
|
103
|
+
export declare function nextStep(from: number, total: number, delta: number): number;
|
|
104
|
+
/**
|
|
105
|
+
* Builds the control: ONE focusable element (`role="spinbutton"`) with the two arrows inside.
|
|
106
|
+
*
|
|
107
|
+
* ⚠️ THE ARROWS ARE NOT BUTTONS, on purpose: menu navigation treats every `button` as an item, and three items for one
|
|
108
|
+
* adjustment would make the cursor stop twice on nameless arrows. Focus belongs to the control; the arrows are FINGER
|
|
109
|
+
* targets (`data-passo`), outside the accessibility tree — whoever listens gets the `aria-valuetext`.
|
|
110
|
+
*
|
|
111
|
+
* The control emits `passo` (`CustomEvent<number>`, -1 or +1): a tapped arrow emits it from here, and the keyboard's and
|
|
112
|
+
* controller's left and right emit it through `ui/menu-nav`. The user listens to a single event.
|
|
113
|
+
*/
|
|
114
|
+
export declare function mountSteps(ctx: PanelShellCtx, spec: StepsSpec): HTMLElement;
|
|
115
|
+
/** Reflects the current position: the written value, what is heard, and the ends that no longer move. */
|
|
116
|
+
export declare function updateSteps(el: HTMLElement, spec: StepsSpec): void;
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
/**
|
|
3
|
+
* Builds a menu row: a short label, a hint that goes to the footer, and a control.
|
|
4
|
+
*
|
|
5
|
+
* The row is NOT inserted anywhere — whoever mounts it decides the order, which in this project's menus is part of the
|
|
6
|
+
* decision (ADR-0044 §2).
|
|
7
|
+
*/
|
|
8
|
+
export function controlRow(ctx, spec) {
|
|
9
|
+
const rowNode = ctx.create('div');
|
|
10
|
+
rowNode.className = 'ctrl-row';
|
|
11
|
+
const text = ctx.create('span');
|
|
12
|
+
const shortLabel = ctx.create('strong');
|
|
13
|
+
shortLabel.textContent = spec.label;
|
|
14
|
+
text.appendChild(shortLabel);
|
|
15
|
+
if (spec.hint) {
|
|
16
|
+
// ⚠️ ONLY ONE, and it is what `fillExplain` looks for. Two `.opt-hint`s on one row would give the control two
|
|
17
|
+
// descriptions, and the footer would show the first — the other would stay on the row, exactly the defect rule §4
|
|
18
|
+
// exists to prevent.
|
|
19
|
+
const explanation = ctx.create('span');
|
|
20
|
+
explanation.className = 'opt-hint';
|
|
21
|
+
explanation.textContent = spec.hint;
|
|
22
|
+
text.appendChild(explanation);
|
|
23
|
+
}
|
|
24
|
+
rowNode.appendChild(text);
|
|
25
|
+
const control = buildControl(ctx, spec);
|
|
26
|
+
control.id = spec.id;
|
|
27
|
+
control.setAttribute('aria-label', spec.ariaLabel ?? spec.label);
|
|
28
|
+
rowNode.appendChild(control);
|
|
29
|
+
return { row: rowNode, control: control };
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* REWRITES THE WORDS OF A ROW THAT ALREADY EXISTS — the counterpart of `ui/panel-shell.applyLabels`, one level down.
|
|
33
|
+
*
|
|
34
|
+
* 🔴 The inside of a panel is mounted once, and anything mounted at boot captures the fallback language's text:
|
|
35
|
+
* `initI18n` applies the fallback synchronously and REQUESTS the preferred one, which arrives later — a panel would serve
|
|
36
|
+
* its TITLE in one language and its ROWS in another, on the same screen.
|
|
37
|
+
*
|
|
38
|
+
* ⚠️ AND NO UNIT TEST CATCHES IT, because they all run in a single language.
|
|
39
|
+
*
|
|
40
|
+
* ⚠️ REWRITE AND NOT REBUILD, for the reason `applyLabels` already states: each `ui/settings-*` wires its controls'
|
|
41
|
+
* clicks ONCE, at boot. Remaking the row would leave a control in the document with no listener — a dead button that
|
|
42
|
+
* looks alive (ADR-0106 §5).
|
|
43
|
+
*/
|
|
44
|
+
export function labelRow(rowNode, spec) {
|
|
45
|
+
const shortLabel = rowNode.querySelector('strong');
|
|
46
|
+
if (shortLabel)
|
|
47
|
+
shortLabel.textContent = spec.label;
|
|
48
|
+
const explanation = rowNode.querySelector('.opt-hint');
|
|
49
|
+
// ⚠️ A hint that DISAPPEARS has to be erased, not just left unwritten: on a retranslation into a dictionary without
|
|
50
|
+
// the key, the old text would survive and the footer would rest in the previous language.
|
|
51
|
+
if (explanation)
|
|
52
|
+
explanation.textContent = spec.hint ?? '';
|
|
53
|
+
// The control is found by COMPARING its id, not by building a selector from it: a selector needs the id escaped, escaping
|
|
54
|
+
// needs `CSS.escape`, and `CSS` is a browser global that THROWS where it does not exist — it took down a boot in a case's fake
|
|
55
|
+
// document once (2026-09-21). No selector, nothing to escape, no global (ADR-0221 step 7d).
|
|
56
|
+
const control = [...rowNode.querySelectorAll('[id]')].find((el) => el.id === spec.id);
|
|
57
|
+
if (control)
|
|
58
|
+
control.setAttribute('aria-label', spec.ariaLabel ?? spec.label);
|
|
59
|
+
}
|
|
60
|
+
function buildControl(ctx, spec) {
|
|
61
|
+
const controlShape = spec.shape ?? 'interruptor';
|
|
62
|
+
if (controlShape === 'escolha') {
|
|
63
|
+
const s = ctx.create('select');
|
|
64
|
+
s.className = 'vol';
|
|
65
|
+
return s;
|
|
66
|
+
}
|
|
67
|
+
if (controlShape === 'cursor') {
|
|
68
|
+
const i = ctx.create('input');
|
|
69
|
+
i.className = 'vol';
|
|
70
|
+
i.setAttribute('type', 'range');
|
|
71
|
+
// The volume slider's bounds, the same the audio panel reads: 0..100 in steps of 1, converted to the project's
|
|
72
|
+
// 0..1 volume by the panel.
|
|
73
|
+
i.setAttribute('min', '0');
|
|
74
|
+
i.setAttribute('max', '100');
|
|
75
|
+
i.setAttribute('step', '1');
|
|
76
|
+
return i;
|
|
77
|
+
}
|
|
78
|
+
if (controlShape === 'button') {
|
|
79
|
+
/*
|
|
80
|
+
* 🎯 THE ONE SHAPE THAT HOLDS NO VALUE: the others answer "which position am I in", this one DOES something.
|
|
81
|
+
* `ui/settings-controls` demands it — its button opens the capture of a key.
|
|
82
|
+
*
|
|
83
|
+
* 📌 No `aria-pressed` and no `role`: a button that acts already IS a button to whoever listens, and an announced
|
|
84
|
+
* state that does not exist is worse than no state. The panel puts the FACE on it — for remapping, the current
|
|
85
|
+
* keys —, because only the panel knows what the button shows.
|
|
86
|
+
*/
|
|
87
|
+
const a = ctx.create('button');
|
|
88
|
+
a.className = 'mode-btn';
|
|
89
|
+
a.setAttribute('type', 'button');
|
|
90
|
+
return a;
|
|
91
|
+
}
|
|
92
|
+
if (controlShape === 'radio') {
|
|
93
|
+
/*
|
|
94
|
+
* 🔴 A CHOICE IS NOT A SWITCH, and the difference is what the ADR-0012 amendment says in so many words: «THE MENU IS
|
|
95
|
+
* A CHOICE, NOT A TOGGLE […] One font is active; the others are alternatives, not switches.» Hence three
|
|
96
|
+
* differences: no `switch` class (which draws a 52×28 px knob, the drawing of a state that does not exist),
|
|
97
|
+
* `role="radio"`, and `aria-checked` instead of `aria-pressed` — independent switches would announce on/off to
|
|
98
|
+
* choose ONE thing.
|
|
99
|
+
*
|
|
100
|
+
* 📌 `ui/settings-typo` demands it. The panel, not the kit, groups the `role="radio"`s in a `role="radiogroup"`,
|
|
101
|
+
* because the panel knows whether exclusivity covers a section or the whole menu.
|
|
102
|
+
*/
|
|
103
|
+
const r = ctx.create('button');
|
|
104
|
+
r.className = 'mode-btn';
|
|
105
|
+
r.setAttribute('type', 'button');
|
|
106
|
+
r.setAttribute('role', 'radio');
|
|
107
|
+
r.setAttribute('aria-checked', 'false');
|
|
108
|
+
return r;
|
|
109
|
+
}
|
|
110
|
+
const b = ctx.create('button');
|
|
111
|
+
// `switch` is the class this project's CSS gives switches, and `aria-pressed` is what tells the state to whoever
|
|
112
|
+
// listens. The panel reflects the value; what is born here is the HONEST state of something that has read nothing
|
|
113
|
+
// yet: off.
|
|
114
|
+
b.className = 'mode-btn switch';
|
|
115
|
+
b.setAttribute('type', 'button');
|
|
116
|
+
b.setAttribute('aria-pressed', 'false');
|
|
117
|
+
return b;
|
|
118
|
+
}
|
|
119
|
+
/* ===================== THE SECTION HEADER — whose turn it is to act ===================== */
|
|
120
|
+
/**
|
|
121
|
+
* The header of a panel section: a title and a tag that qualifies it.
|
|
122
|
+
*
|
|
123
|
+
* 📏 It is in the kit because several panels wrote it by hand, with the `.panel-sub__tag` markup copied into each — the
|
|
124
|
+
* same reason as `controlRow`: a rule repeated across files is a rule that drifts.
|
|
125
|
+
*
|
|
126
|
+
* ⚠️ AND IT REFUSES TO EXIST OVER NOTHING, which is the behaviour that makes it worth a function. An "awaiting
|
|
127
|
+
* negotiation" heading with no row under it tells the reader something is there when nothing is, and the person looks
|
|
128
|
+
* for what the title promises. `rows` is the NUMBER of rows the section will have — passing it is what makes this rule
|
|
129
|
+
* exercisable by a case, instead of an `if` no fixed tree reaches.
|
|
130
|
+
*
|
|
131
|
+
* 📌 The title and tag arrive ALREADY TRANSLATED, as in `controlRow`: the kit does not decide language, it builds shape.
|
|
132
|
+
*/
|
|
133
|
+
export function sectionHeader(ctx, title, tag, rows) {
|
|
134
|
+
if (rows === 0)
|
|
135
|
+
return null;
|
|
136
|
+
const h = ctx.create('h3');
|
|
137
|
+
h.className = 'panel-sub';
|
|
138
|
+
h.textContent = title + ' ';
|
|
139
|
+
const mark = ctx.create('span');
|
|
140
|
+
mark.className = 'panel-sub__tag';
|
|
141
|
+
mark.textContent = tag;
|
|
142
|
+
h.appendChild(mark);
|
|
143
|
+
return h;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* The next step, CLAMPED at the ends — not a ring, and the difference is the decision.
|
|
147
|
+
*
|
|
148
|
+
* ⚠️ In a ring, right from the largest position would return to off: whoever adjusts looking for the maximum would pass
|
|
149
|
+
* it without warning and switch off what they wanted to raise. Clamped, the end is a wall you feel — the number of
|
|
150
|
+
* players, the model the Dev gave, does not wrap either.
|
|
151
|
+
*/
|
|
152
|
+
export function nextStep(from, total, delta) {
|
|
153
|
+
if (total <= 0)
|
|
154
|
+
return 0;
|
|
155
|
+
return Math.max(0, Math.min(total - 1, from + Math.sign(delta)));
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Builds the control: ONE focusable element (`role="spinbutton"`) with the two arrows inside.
|
|
159
|
+
*
|
|
160
|
+
* ⚠️ THE ARROWS ARE NOT BUTTONS, on purpose: menu navigation treats every `button` as an item, and three items for one
|
|
161
|
+
* adjustment would make the cursor stop twice on nameless arrows. Focus belongs to the control; the arrows are FINGER
|
|
162
|
+
* targets (`data-passo`), outside the accessibility tree — whoever listens gets the `aria-valuetext`.
|
|
163
|
+
*
|
|
164
|
+
* The control emits `passo` (`CustomEvent<number>`, -1 or +1): a tapped arrow emits it from here, and the keyboard's and
|
|
165
|
+
* controller's left and right emit it through `ui/menu-nav`. The user listens to a single event.
|
|
166
|
+
*/
|
|
167
|
+
export function mountSteps(ctx, spec) {
|
|
168
|
+
const el = ctx.create('div');
|
|
169
|
+
el.className = 'passos';
|
|
170
|
+
el.setAttribute('role', 'spinbutton');
|
|
171
|
+
el.setAttribute('tabindex', '0');
|
|
172
|
+
el.setAttribute('data-passos', '');
|
|
173
|
+
const arrow = (delta, glyph) => {
|
|
174
|
+
const s = ctx.create('span');
|
|
175
|
+
s.className = 'passo-seta';
|
|
176
|
+
s.setAttribute('data-passo', String(delta));
|
|
177
|
+
s.setAttribute('aria-hidden', 'true');
|
|
178
|
+
s.textContent = glyph;
|
|
179
|
+
s.addEventListener('click', () => el.dispatchEvent(new CustomEvent('passo', { detail: delta, bubbles: true })));
|
|
180
|
+
return s;
|
|
181
|
+
};
|
|
182
|
+
const value = ctx.create('span');
|
|
183
|
+
value.className = 'passo-valor';
|
|
184
|
+
el.appendChild(arrow(-1, '◀'));
|
|
185
|
+
el.appendChild(value);
|
|
186
|
+
el.appendChild(arrow(1, '▶'));
|
|
187
|
+
updateSteps(el, spec);
|
|
188
|
+
return el;
|
|
189
|
+
}
|
|
190
|
+
/** Reflects the current position: the written value, what is heard, and the ends that no longer move. */
|
|
191
|
+
export function updateSteps(el, spec) {
|
|
192
|
+
const lastIndex = Math.max(0, spec.values.length - 1);
|
|
193
|
+
const from = Math.max(0, Math.min(lastIndex, spec.current));
|
|
194
|
+
const text = spec.values[from] ?? '';
|
|
195
|
+
el.setAttribute('aria-label', spec.label);
|
|
196
|
+
el.setAttribute('aria-valuemin', '0');
|
|
197
|
+
el.setAttribute('aria-valuemax', String(lastIndex));
|
|
198
|
+
el.setAttribute('aria-valuenow', String(from));
|
|
199
|
+
el.setAttribute('aria-valuetext', text);
|
|
200
|
+
const value = el.querySelector('.passo-valor');
|
|
201
|
+
// THE LABEL GOES INTO THE TEXT: the whole row is the control, «◀ Cantos arredondados: pequeno ▶». Whoever listens gets
|
|
202
|
+
// the same in two parts — the name in `aria-label` and the position in `aria-valuetext` —, without the name repeated.
|
|
203
|
+
if (value)
|
|
204
|
+
value.textContent = spec.label ? `${spec.label}: ${text}` : text;
|
|
205
|
+
// The end that no longer moves is marked — otherwise a wall's arrow looks like a broken button.
|
|
206
|
+
el.querySelector('[data-passo="-1"]')?.classList.toggle('no-limite', from === 0);
|
|
207
|
+
el.querySelector('[data-passo="1"]')?.classList.toggle('no-limite', from === lastIndex);
|
|
208
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
/** One row of the per-screen pause menu. `letra` marks the label that ABC/abc rewrites live. */
|
|
3
|
+
export interface PauseBtnDef {
|
|
4
|
+
readonly act: string;
|
|
5
|
+
/**
|
|
6
|
+
* RAW label, used only when the button has a dynamic label (`dynamicLabel`/`level`).
|
|
7
|
+
*
|
|
8
|
+
* Optional because `pmBtnMarkup` resolves every ordinary button through `t('pause.' + act)`, so text here would
|
|
9
|
+
* never reach a screen — it would be raw text inside an ENGINE module, waiting for someone to trust it. No entry
|
|
10
|
+
* today sets a dynamic label; the `pause.*` key is the source, and it exists in all three languages.
|
|
11
|
+
*/
|
|
12
|
+
readonly lbl?: string;
|
|
13
|
+
readonly dynamicLabel?: boolean;
|
|
14
|
+
readonly level?: boolean;
|
|
15
|
+
}
|
|
16
|
+
/** The pause menu's items — MENU DATA, so it lives with the other menu tables. The pause slice (ui/pause-icons)
|
|
17
|
+
* receives it through its own ctx instead of re-declaring it; nobody owns two copies of a list of buttons. */
|
|
18
|
+
export declare const PM_BTNS: readonly PauseBtnDef[];
|
|
19
|
+
/**
|
|
20
|
+
* THE THIRD LIST: what belongs to THIS game (ADR-0146, ADR-0145).
|
|
21
|
+
*
|
|
22
|
+
* ⚠️ IT STARTS WITH THE BACK ITEM AND NOTHING ELSE, and the emptiness is the decision: the engine does not know what a
|
|
23
|
+
* game has of its own — the game declares it. A list the engine filled in would be the wheelchair in chess again.
|
|
24
|
+
*
|
|
25
|
+
* 📌 And that is why the door drops by itself: `rootThatActs` drops a door whose room is empty, and with this list
|
|
26
|
+
* reduced to `pmback` that is exactly the case of a game that declares nothing.
|
|
27
|
+
*/
|
|
28
|
+
export declare const PM_GAME_BTNS: readonly PauseBtnDef[];
|
|
29
|
+
/**
|
|
30
|
+
* THE INCLUSION SETTINGS SUBMENU — the panels, in the order the Dev dictated (ADR-0151).
|
|
31
|
+
*
|
|
32
|
+
* The way out comes FIRST here too, for the same reason `resume` comes first there: ADR-0044's rule is about menus,
|
|
33
|
+
* not about one menu. A submenu you cannot leave is the same trap, one level down.
|
|
34
|
+
*/
|
|
35
|
+
export declare const PM_OPTIONS_BTNS: readonly PauseBtnDef[];
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
// ui/pause-buttons — the items of the pause card the engine mounts: root, the game's options and the inclusion settings.
|
|
3
|
+
//
|
|
4
|
+
// Menu data for `ui/pause-icons`. They lived in `ui/activities-menu`, the platformer's title menu, which left the engine
|
|
5
|
+
// (ADR-0174, issue #171); the card is the engine's, so its buttons stay.
|
|
6
|
+
/** The pause menu's items — MENU DATA, so it lives with the other menu tables. The pause slice (ui/pause-icons)
|
|
7
|
+
* receives it through its own ctx instead of re-declaring it; nobody owns two copies of a list of buttons. */
|
|
8
|
+
export const PM_BTNS = [
|
|
9
|
+
// ===================== THE ORDER IS THE DECISION (ADR-0044 §2) =====================
|
|
10
|
+
// A menu you cannot leave is a trap, and the trap costs most to whoever cannot see it. `resume` comes FIRST because
|
|
11
|
+
// that is what a pause is for. `quit` comes LAST because it is its least wanted outcome — and, since the list is a
|
|
12
|
+
// RING, one key UP from `resume` reaches it: far in reading order, near to the finger.
|
|
13
|
+
//
|
|
14
|
+
// The settings panels live in `PM_OPTIONS_BTNS`.
|
|
15
|
+
//
|
|
16
|
+
// 🔴 SIX (ADR-0151), and the number is MEASURED, not taste: at 640×360, the target screen, seven items fit exactly
|
|
17
|
+
// and more overflow, while the target ruler is already at its floor (ADR-0095: «tela menor mostra menos itens, não
|
|
18
|
+
// alvos menores»).
|
|
19
|
+
//
|
|
20
|
+
// 📌 The accessibility bar and the print view are reached through SELECT — «basta apertar SELECT que se tem a visão
|
|
21
|
+
// apropriada pra print», in the Dev's words. Their `act`s still exist and work for whoever passes a list of their own.
|
|
22
|
+
{ act: 'resume' },
|
|
23
|
+
// Help — how to play comes SECOND: it is the first thing someone who paused without knowing how to play looks for.
|
|
24
|
+
{ act: 'ajuda' },
|
|
25
|
+
// ⚠️ The `act` stays `addplayer` and the LABEL is the number of players (ADR-0147 §3): `ui/shell.ts` implements
|
|
26
|
+
// `pauseActs.addplayer`, and cases in `shell.browser.test.js` call it.
|
|
27
|
+
{ act: 'addplayer' },
|
|
28
|
+
// Inclusion settings: what the child CARRIES between games (ADR-0146, named by ADR-0151).
|
|
29
|
+
{ act: 'options' },
|
|
30
|
+
// Game options: what belongs to THIS game. The door drops by itself when the game declares nothing of its own.
|
|
31
|
+
{ act: 'opcoesdojogo' },
|
|
32
|
+
{ act: 'quit' },
|
|
33
|
+
];
|
|
34
|
+
/**
|
|
35
|
+
* THE THIRD LIST: what belongs to THIS game (ADR-0146, ADR-0145).
|
|
36
|
+
*
|
|
37
|
+
* ⚠️ IT STARTS WITH THE BACK ITEM AND NOTHING ELSE, and the emptiness is the decision: the engine does not know what a
|
|
38
|
+
* game has of its own — the game declares it. A list the engine filled in would be the wheelchair in chess again.
|
|
39
|
+
*
|
|
40
|
+
* 📌 And that is why the door drops by itself: `rootThatActs` drops a door whose room is empty, and with this list
|
|
41
|
+
* reduced to `pmback` that is exactly the case of a game that declares nothing.
|
|
42
|
+
*/
|
|
43
|
+
export const PM_GAME_BTNS = [
|
|
44
|
+
{ act: 'pmback' },
|
|
45
|
+
];
|
|
46
|
+
/**
|
|
47
|
+
* THE INCLUSION SETTINGS SUBMENU — the panels, in the order the Dev dictated (ADR-0151).
|
|
48
|
+
*
|
|
49
|
+
* The way out comes FIRST here too, for the same reason `resume` comes first there: ADR-0044's rule is about menus,
|
|
50
|
+
* not about one menu. A submenu you cannot leave is the same trap, one level down.
|
|
51
|
+
*/
|
|
52
|
+
export const PM_OPTIONS_BTNS = [
|
|
53
|
+
// 📌 Not here, and each has somewhere to go (ADR-0151): letter case walks the communication cycle of the bar's
|
|
54
|
+
// eleventh button, and typography — «quem escolhe a tipografia é o jogo, o jogador escolhe suas fontes via o menu de
|
|
55
|
+
// acessibilidade rápida».
|
|
56
|
+
// 📏 AND THE NUMBER IS WHAT FITS at 640×360; the submenu has its own case in the 44 px gate, not only the root.
|
|
57
|
+
// ✅ The audio panel (music, ambience, interaction, earcons), separate from hearing accessibility, is listed because
|
|
58
|
+
// the panel it opens exists — a door to a panel that does not exist would be ADR-0106 §5's dead button.
|
|
59
|
+
{ act: 'pmback' },
|
|
60
|
+
{ act: 'empatia' },
|
|
61
|
+
{ act: 'audio' },
|
|
62
|
+
{ act: 'som' },
|
|
63
|
+
{ act: 'motora' },
|
|
64
|
+
{ act: 'visual' },
|
|
65
|
+
{ act: 'anim' },
|
|
66
|
+
];
|