@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,61 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// platform/vozes-prontas.ts — A PONTE ENTRE O QUE DESCEU E O QUE A CRIANÇA OUVE (ADR-0110, gates 3 e 4).
|
|
3
|
-
//
|
|
4
|
-
// ========================= POR QUE ESTE MÓDULO EXISTE =========================
|
|
5
|
-
// 📏 MEDIDO EM 2026-09-09: `vozEmUso` — a função que o ADR-0110 chama «o gate 3 em forma de código» — tinha
|
|
6
|
-
// ZERO leitores em produção, e NADA no repositório produzia um `EstadosDasVozes`. O buscador que nasceu hoje
|
|
7
|
-
// relata `RelatorioPesado[]`. São DUAS linguagens para o mesmo facto, e nenhuma falava com a outra.
|
|
8
|
-
//
|
|
9
|
-
// ⚠️ ISSO NÃO É UM ENCAIXE QUE FALTAVA, É A FORMA DE DEFEITO QUE ESTE REPOSITÓRIO PERSEGUE: um modelo aferido
|
|
10
|
-
// e correcto, sem ninguém a lê-lo, ao lado de um mecanismo que produz a mesma verdade noutro vocabulário. O
|
|
11
|
-
// `render/viz-axes` esteve exactamente assim — «é ÓRFÃO» — e o que isso custou foi a composição dos dois eixos
|
|
12
|
-
// visuais a existir no papel e não na tela.
|
|
13
|
-
//
|
|
14
|
-
// ========================= 🎯 A REGRA QUE ESTE MÓDULO CARREGA, E É UMA SÓ =========================
|
|
15
|
-
// **UMA VOZ SÓ ESTÁ PRONTA QUANDO OS DOIS FICHEIROS DESCERAM.** O piper recusa-se a falar sem o `.onnx.json`,
|
|
16
|
-
// então uma voz com o modelo e sem a configuração é uma voz que NÃO FALA — e marcá-la `pronta` faria a engine
|
|
17
|
-
// anunciar «voz neural» e ficar muda. É pior do que a voz em falta, porque a primeira parece resolvida, e é
|
|
18
|
-
// literalmente a família do `reflectTTS` que o ADR-0110 nomeia ao pedir o gate 3.
|
|
19
|
-
import { VOZES_NEURAIS } from './voice-plan.js';
|
|
20
|
-
/** As duas ids que o catálogo dá a uma voz. Derivadas, não tabeladas — a tabela vive no catálogo. */
|
|
21
|
-
const idsDe = (v) => [`voz:${v.voice}`, `voz:${v.voice}:cfg`];
|
|
22
|
-
/**
|
|
23
|
-
* O ESTADO DE CADA VOZ A PARTIR DO QUE O BUSCADOR RELATOU.
|
|
24
|
-
*
|
|
25
|
-
* ⚠️ `emCurso` NÃO É COSMÉTICA, E É O QUE IMPEDE ESTA PONTE DE MENTIR NOS DOIS SENTIDOS. O relatório só
|
|
26
|
-
* contém o que JÁ resolveu, logo uma voz por relatar é ambígua: pode estar a caminho ou nunca ter sido
|
|
27
|
-
* pedida. O `voice-plan` recusa-se a confundir as duas por escrito — «ausente não se disfarça de a buscar»,
|
|
28
|
-
* porque isso esconderia um buscador que nunca arrancou atrás de uma frase tranquilizadora — e a única coisa
|
|
29
|
-
* que desfaz a ambiguidade é quem chamou saber se a descarga ainda corre.
|
|
30
|
-
*
|
|
31
|
-
* 📌 E o par contrário importa igualmente: com a descarga TERMINADA, uma voz por relatar é `ausente` e nunca
|
|
32
|
-
* `a-buscar`, senão a interface prometeria para sempre uma coisa que já não vem.
|
|
33
|
-
*/
|
|
34
|
-
export function estadosDasVozes(relatorio, opcoes = {}, catalogo = VOZES_NEURAIS) {
|
|
35
|
-
const porId = new Map(relatorio.map((r) => [r.id, r]));
|
|
36
|
-
const saida = {};
|
|
37
|
-
for (const v of catalogo) {
|
|
38
|
-
const partes = idsDe(v).map((id) => porId.get(id));
|
|
39
|
-
if (partes.some((p) => p && (p.estado === 'falhou' || p.estado === 'sem-fonte'))) {
|
|
40
|
-
// 📌 UMA METADE FALHADA CHEGA PARA A VOZ INTEIRA FALHAR, e é o mesmo argumento da regra do cabeçalho
|
|
41
|
-
// visto do outro lado: sem os dois ficheiros não há fala nenhuma, logo não há meia voz para oferecer.
|
|
42
|
-
saida[v.voice] = 'falhou';
|
|
43
|
-
continue;
|
|
44
|
-
}
|
|
45
|
-
if (partes.every((p) => p && (p.estado === 'baixado' || p.estado === 'ja-tinha'))) {
|
|
46
|
-
saida[v.voice] = 'pronta';
|
|
47
|
-
continue;
|
|
48
|
-
}
|
|
49
|
-
saida[v.voice] = opcoes.emCurso ? 'a-buscar' : 'ausente';
|
|
50
|
-
}
|
|
51
|
-
return Object.freeze(saida);
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* AS IDS DAS COISAS PESADAS QUE SÃO VOZ — para quem queira descê-las primeiro, sem adivinhar o formato da id.
|
|
55
|
-
*
|
|
56
|
-
* ⚠️ Existe porque a alternativa é o consumidor escrever `p.id.startsWith('voz:')` no ponto de uso, e aí o
|
|
57
|
-
* formato da id passa a ser contrato público sem nunca ter sido decidido como tal.
|
|
58
|
-
*/
|
|
59
|
-
export const idsDasVozes = (catalogo = VOZES_NEURAIS) => catalogo.flatMap((v) => [...idsDe(v)]);
|
|
60
|
-
/** Reexportado para quem faz a ponte não ter de importar de dois sítios para responder a uma pergunta. */
|
|
61
|
-
export { vozEmUso, estadoDe } from './voice-plan.js';
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
/** Um tamanho em pixels de mundo ou de tela. Só isto: a câmera não precisa saber de mais nada. */
|
|
3
|
-
export interface Tamanho {
|
|
4
|
-
w: number;
|
|
5
|
-
h: number;
|
|
6
|
-
}
|
|
7
|
-
/** Onde a câmera está, ANTES de arredondar. O arredondamento é do desenho, não da conta — ver `prender`. */
|
|
8
|
-
export interface Camera {
|
|
9
|
-
camX: number;
|
|
10
|
-
camY: number;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Prende a câmera dentro do mundo.
|
|
14
|
-
*
|
|
15
|
-
* ⚠️ MUNDO MENOR QUE A TELA: `mundo.w - tela.w` fica NEGATIVO, o `min` devolve esse negativo e o `max(0, …)`
|
|
16
|
-
* o zera — a câmera encosta no canto superior esquerdo e sobra vazio à direita e abaixo. É o comportamento
|
|
17
|
-
* que já existia e está preservado de propósito; o mapa de hoje (896×992 contra 320×180) nunca chega lá, mas
|
|
18
|
-
* uma fase pequena chegaria, e é melhor que o caso esteja escrito do que descoberto.
|
|
19
|
-
*/
|
|
20
|
-
export declare function prender(cam: Camera, mundo: Tamanho, tela: Tamanho): Camera;
|
|
21
|
-
/** Põe `(alvoX, alvoY)` no CENTRO da tela e prende no mundo. O alvo é um ponto — quem tem corpo o converte. */
|
|
22
|
-
export declare function enquadrar(alvoX: number, alvoY: number, mundo: Tamanho, tela: Tamanho): Camera;
|
|
23
|
-
/**
|
|
24
|
-
* Aplica o tremor (JUICE) e PRENDE DE NOVO.
|
|
25
|
-
*
|
|
26
|
-
* A segunda prisão não é zelo: sem ela o tremor empurra a câmera para fora do mundo na beirada da fase e a
|
|
27
|
-
* criança vê o vazio atrás do cenário — justamente no momento em que alguma coisa explodiu e ela está olhando.
|
|
28
|
-
*
|
|
29
|
-
* @param amp amplitude em px (0 = sem tremor; `render/fx.shakeAmp`, que decai linearmente)
|
|
30
|
-
* @param rx deslocamento horizontal já sorteado, em [-1, 1]
|
|
31
|
-
* @param ry idem, vertical
|
|
32
|
-
*/
|
|
33
|
-
export declare function tremer(cam: Camera, mundo: Tamanho, tela: Tamanho, amp: number, rx: number, ry: number): Camera;
|
|
34
|
-
/** A zona-morta, em pixels de TELA. `{w:0,h:0}` = sem zona: a câmera cola no alvo, que é o de hoje. */
|
|
35
|
-
export interface ZonaMorta {
|
|
36
|
-
readonly w: number;
|
|
37
|
-
readonly h: number;
|
|
38
|
-
}
|
|
39
|
-
export interface CameraObj {
|
|
40
|
-
/** Onde a câmera está, sem tremor, pré-arredondamento. */
|
|
41
|
-
readonly base: Camera;
|
|
42
|
-
/** Segue o alvo respeitando a zona-morta e prende no mundo. Devolve a base nova. */
|
|
43
|
-
seguir(alvoX: number, alvoY: number): Camera;
|
|
44
|
-
/** Centra no alvo AGORA, ignorando a zona-morta: nascimento, renascimento, troca de fase. */
|
|
45
|
-
pular(alvoX: number, alvoY: number): Camera;
|
|
46
|
-
/** Base + tremor, preso no mundo. NÃO altera a base — ver o cabeçalho. */
|
|
47
|
-
quadro(amp: number, rx: number, ry: number): Camera;
|
|
48
|
-
/** Mundo e/ou tela mudaram (fase nova, viewport dividido). Reprende a base no que passou a valer. */
|
|
49
|
-
redimensionar(mundo?: Tamanho, tela?: Tamanho): Camera;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Cria uma câmera com alvo, zona-morta, prisão no mundo e tremor.
|
|
53
|
-
*
|
|
54
|
-
* ⚠️ ZONA ZERO É O COMPORTAMENTO DE HOJE, e não por coincidência: com `w = h = 0` a correção de `seguir` vira
|
|
55
|
-
* `alvo - tela/2`, que é `enquadrar` letra por letra. É o que permite trocar o `placeCam` por esta câmera sem
|
|
56
|
-
* mudar um pixel do que a criança vê, e escolher um valor de zona depois, como decisão separada.
|
|
57
|
-
*/
|
|
58
|
-
export declare function criarCamera(mundo: Tamanho, tela: Tamanho, zona?: ZonaMorta): CameraObj;
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// render/camera — ONDE A CÂMERA FICA. Item 22 (ADR-0027 passo 7), opção M1: a conta sai de dentro do efeito.
|
|
3
|
-
//
|
|
4
|
-
// ========================= POR QUE ISTO É UM MÓDULO, E POR QUE SÓ AGORA =========================
|
|
5
|
-
// `placeCam` morava dentro de `render/draw.ts`, e o comentário do main.js registrava o motivo com honestidade:
|
|
6
|
-
// "placeCam NÃO ganha envólucro: fora do próprio draw ele não tinha chamador nenhum". Era verdade — e deixou
|
|
7
|
-
// de ser no dia em que o item 22 pediu uma câmera. O que muda não é o número de chamadores: é que a posição da
|
|
8
|
-
// câmera passou a ser uma coisa que se DECIDE (zona-morta? uma por viewport? quem ela segue?), e uma decisão
|
|
9
|
-
// enterrada dentro de uma função de 300 linhas de desenho não pode ser discutida nem aferida.
|
|
10
|
-
//
|
|
11
|
-
// Aqui não há decisão nova nenhuma. As fórmulas são as do `placeCam`, VERBATIM, na mesma ordem — enquadra,
|
|
12
|
-
// prende, treme, prende de novo. É de propósito: M1 é o PREFIXO COMUM de todas as alternativas de câmera que
|
|
13
|
-
// estão na mesa (extrair · zona-morta · uma por viewport), e nenhuma delas o dispensa. Extrair sem mudar é o
|
|
14
|
-
// que torna a extração reversível e o que deixa a escolha inteira nas mãos do Dev.
|
|
15
|
-
//
|
|
16
|
-
// ========================= O QUE A EXTRAÇÃO TIRA DE CIMA DA MESA =========================
|
|
17
|
-
// Duas coisas que `placeCam` sabia e não devia:
|
|
18
|
-
//
|
|
19
|
-
// 1. `BOX.h / 2` — a metade da CAIXA DE COLISÃO do jogador de plataforma, usada para converter "o y do pé"
|
|
20
|
-
// em "o y do meio do corpo". É conhecimento de gênero: um top-down não ancora no pé, um quiz não tem
|
|
21
|
-
// corpo. Agora quem chama passa o PONTO a enquadrar, e a conversão fica onde o corpo existe.
|
|
22
|
-
// 2. `LOGICAL_W`/`LOGICAL_H` — o tamanho da tela lido de uma constante de módulo. O multiplayer já desenha N
|
|
23
|
-
// viewports; no dia em que cada um tiver a sua câmera, o tamanho tem de ENTRAR, não ser lido de fora.
|
|
24
|
-
//
|
|
25
|
-
// ========================= SEM I/O, SEM PIXI, SEM ALEATÓRIO =========================
|
|
26
|
-
// Nenhuma função daqui toca sprite, container ou `Math.random`. O tremor recebe os dois deslocamentos JÁ
|
|
27
|
-
// SORTEADOS (`rx`, `ry`), e é isso que o torna testável: a mesma entrada dá a mesma câmera, sempre. Quem
|
|
28
|
-
// sorteia é `render/draw`, com o `rnd` compartilhado de core/rng — a semente continua sendo uma só.
|
|
29
|
-
/**
|
|
30
|
-
* Prende a câmera dentro do mundo.
|
|
31
|
-
*
|
|
32
|
-
* ⚠️ MUNDO MENOR QUE A TELA: `mundo.w - tela.w` fica NEGATIVO, o `min` devolve esse negativo e o `max(0, …)`
|
|
33
|
-
* o zera — a câmera encosta no canto superior esquerdo e sobra vazio à direita e abaixo. É o comportamento
|
|
34
|
-
* que já existia e está preservado de propósito; o mapa de hoje (896×992 contra 320×180) nunca chega lá, mas
|
|
35
|
-
* uma fase pequena chegaria, e é melhor que o caso esteja escrito do que descoberto.
|
|
36
|
-
*/
|
|
37
|
-
export function prender(cam, mundo, tela) {
|
|
38
|
-
return {
|
|
39
|
-
camX: Math.max(0, Math.min(cam.camX, mundo.w - tela.w)),
|
|
40
|
-
camY: Math.max(0, Math.min(cam.camY, mundo.h - tela.h)),
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
/** Põe `(alvoX, alvoY)` no CENTRO da tela e prende no mundo. O alvo é um ponto — quem tem corpo o converte. */
|
|
44
|
-
export function enquadrar(alvoX, alvoY, mundo, tela) {
|
|
45
|
-
return prender({ camX: alvoX - tela.w / 2, camY: alvoY - tela.h / 2 }, mundo, tela);
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Aplica o tremor (JUICE) e PRENDE DE NOVO.
|
|
49
|
-
*
|
|
50
|
-
* A segunda prisão não é zelo: sem ela o tremor empurra a câmera para fora do mundo na beirada da fase e a
|
|
51
|
-
* criança vê o vazio atrás do cenário — justamente no momento em que alguma coisa explodiu e ela está olhando.
|
|
52
|
-
*
|
|
53
|
-
* @param amp amplitude em px (0 = sem tremor; `render/fx.shakeAmp`, que decai linearmente)
|
|
54
|
-
* @param rx deslocamento horizontal já sorteado, em [-1, 1]
|
|
55
|
-
* @param ry idem, vertical
|
|
56
|
-
*/
|
|
57
|
-
export function tremer(cam, mundo, tela, amp, rx, ry) {
|
|
58
|
-
if (!(amp > 0))
|
|
59
|
-
return cam;
|
|
60
|
-
return prender({ camX: cam.camX + rx * amp, camY: cam.camY + ry * amp }, mundo, tela);
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Cria uma câmera com alvo, zona-morta, prisão no mundo e tremor.
|
|
64
|
-
*
|
|
65
|
-
* ⚠️ ZONA ZERO É O COMPORTAMENTO DE HOJE, e não por coincidência: com `w = h = 0` a correção de `seguir` vira
|
|
66
|
-
* `alvo - tela/2`, que é `enquadrar` letra por letra. É o que permite trocar o `placeCam` por esta câmera sem
|
|
67
|
-
* mudar um pixel do que a criança vê, e escolher um valor de zona depois, como decisão separada.
|
|
68
|
-
*/
|
|
69
|
-
export function criarCamera(mundo, tela, zona = { w: 0, h: 0 }) {
|
|
70
|
-
let m = mundo, t = tela;
|
|
71
|
-
let base = { camX: 0, camY: 0 };
|
|
72
|
-
/** Quanto a câmera precisa andar num eixo para o alvo voltar para dentro da zona. Zero se já está dentro. */
|
|
73
|
-
const correcao = (alvo, cam, telaLado, zonaLado) => {
|
|
74
|
-
const meia = Math.max(0, zonaLado) / 2;
|
|
75
|
-
const d = alvo - (cam + telaLado / 2); // distância do alvo ao CENTRO da tela
|
|
76
|
-
if (Math.abs(d) <= meia)
|
|
77
|
-
return 0;
|
|
78
|
-
return d - Math.sign(d) * meia; // anda o mínimo: o alvo pousa na BORDA da zona, não no centro
|
|
79
|
-
};
|
|
80
|
-
return {
|
|
81
|
-
get base() { return base; },
|
|
82
|
-
seguir(alvoX, alvoY) {
|
|
83
|
-
base = prender({
|
|
84
|
-
camX: base.camX + correcao(alvoX, base.camX, t.w, zona.w),
|
|
85
|
-
camY: base.camY + correcao(alvoY, base.camY, t.h, zona.h),
|
|
86
|
-
}, m, t);
|
|
87
|
-
return base;
|
|
88
|
-
},
|
|
89
|
-
pular(alvoX, alvoY) {
|
|
90
|
-
base = enquadrar(alvoX, alvoY, m, t);
|
|
91
|
-
return base;
|
|
92
|
-
},
|
|
93
|
-
quadro(amp, rx, ry) {
|
|
94
|
-
return tremer(base, m, t, amp, rx, ry);
|
|
95
|
-
},
|
|
96
|
-
redimensionar(novoMundo, novaTela) {
|
|
97
|
-
if (novoMundo)
|
|
98
|
-
m = novoMundo;
|
|
99
|
-
if (novaTela)
|
|
100
|
-
t = novaTela;
|
|
101
|
-
base = prender(base, m, t);
|
|
102
|
-
return base;
|
|
103
|
-
},
|
|
104
|
-
};
|
|
105
|
-
}
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
/** Grama e flores de um tema `v3` (render/scene-sky.drawV3Grass). Cores em '#rrggbb'. */
|
|
3
|
-
export interface Flora {
|
|
4
|
-
base: string;
|
|
5
|
-
top: string;
|
|
6
|
-
bLt: string;
|
|
7
|
-
bDk: string;
|
|
8
|
-
center: string;
|
|
9
|
-
petals: string[];
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Um cenário.
|
|
13
|
-
*
|
|
14
|
-
* O CAMPO `v3` FOI SEPARADO EM DOIS (2026-08-25), e o motivo é um pedido que ele não conseguia atender.
|
|
15
|
-
* Ele significava três coisas ao mesmo tempo — "meu fundo é gerado das cores", "tenho céu vivo compartilhado"
|
|
16
|
-
* e "tenho flora" — e isso funcionava enquanto só existiam dois tipos de tema: a Cidade (PNG, cena própria,
|
|
17
|
-
* sem flora) e os quatro gerados (cores, céu vivo, flora).
|
|
18
|
-
*
|
|
19
|
-
* O Dev pediu FUNDO RASTER PARA A FLORESTA, mantendo a floresta como floresta. Isso é uma combinação nova —
|
|
20
|
-
* PNG **com** flora e céu vivo — e ela não cabia num booleano só: virar `v3` para false teria tirado a grama,
|
|
21
|
-
* as flores e as borboletas dela junto com o fundo gerado.
|
|
22
|
-
*
|
|
23
|
-
* Agora são duas perguntas independentes, e cada leitor faz a sua:
|
|
24
|
-
* · `fundo` — de onde vêm as três camadas de parallax. Lido por render/parallax.
|
|
25
|
-
* · `decor` — que decoração viva o céu recebe. Lido por render/scene-sky, pela PRESENÇA, não por rótulo.
|
|
26
|
-
* A flora segue a mesma regra: quem tem entrada em THEME_FLORA tem flora, e ponto.
|
|
27
|
-
*/
|
|
28
|
-
/**
|
|
29
|
-
* UMA FAIXA DE PRÉDIOS de uma camada de parallax — o skyline da Cidade, como DADO (ADR-0042).
|
|
30
|
-
*
|
|
31
|
-
* TODO NÚMERO AQUI FOI MEDIDO nos três PNG que esta faixa substitui, não escolhido. O ADR-0042 registra por
|
|
32
|
-
* que eles não podiam ser reproduzidos: os fundos precisam de 11.382 retângulos de cor uniforme (2.065 +
|
|
33
|
-
* 2.899 + 6.418, cobertura gulosa 2D), duas a três ordens de grandeza acima do que a pipeline estimava,
|
|
34
|
-
* porque 400×180 com 171 cores é arte desenhada à mão e não geometria.
|
|
35
|
-
*
|
|
36
|
-
* O que se salva medindo, então, não é o pixel — é a REGRA: onde a faixa fica sólida, quanto os topos
|
|
37
|
-
* variam, quais são os dois tons do corpo e os dois da janela. Isso a torna RECOLORÍVEL, que é o que o
|
|
38
|
-
* pilar 1 existe para comprar: o alto contraste repinta um dado e não repinta um PNG. E a Cidade é a maior
|
|
39
|
-
* superfície da tela — sob PNG, era a única coisa que o modo de alto contraste jamais alcançava.
|
|
40
|
-
*/
|
|
41
|
-
export interface FaixaDePredios {
|
|
42
|
-
/** y a partir do qual a faixa é SÓLIDA: abaixo desta linha é tudo prédio, sem buraco. */
|
|
43
|
-
base: number;
|
|
44
|
-
/**
|
|
45
|
-
* Os DOIS TONS DE PROFUNDIDADE, `[fundo, frente]`, desenhados nessa ordem.
|
|
46
|
-
*
|
|
47
|
-
* Cada camada de parallax tem duas fileiras no original, não uma — é o que dá o ar de cidade. A primeira
|
|
48
|
-
* versão deste gerador tinha só uma, e por isso a Cidade saiu chapada.
|
|
49
|
-
*/
|
|
50
|
-
corpo: readonly [string, string];
|
|
51
|
-
/** Topos possíveis da fileira da FRENTE, `[mais alto, mais baixo]` — em y, o primeiro é o MENOR. */
|
|
52
|
-
topo: readonly [number, number];
|
|
53
|
-
/** Idem para a fileira do FUNDO, que é mais alta e mais simples. */
|
|
54
|
-
topoFundo: readonly [number, number];
|
|
55
|
-
/** As larguras possíveis de um prédio, em px. */
|
|
56
|
-
largura: readonly [number, number];
|
|
57
|
-
/**
|
|
58
|
-
* As cores da LUZ — janela ACESA, e só ela.
|
|
59
|
-
*
|
|
60
|
-
* ⚠️ NÃO EXISTE COR DE JANELA APAGADA, e essa foi a lição mais cara desta arte: a apagada é a parede. A
|
|
61
|
-
* primeira versão declarava um par "acesa/apagada" com dois tons quase idênticos, pintava TODA célula, e
|
|
62
|
-
* o resultado foi um quadriculado cinza. Pior: os dois tons que ela chamava de janela eram, na verdade, o
|
|
63
|
-
* segundo tom de MASSA — os prédios de trás.
|
|
64
|
-
*
|
|
65
|
-
* As luzes são QUENTES (R > B). Ausente = distante demais para acender.
|
|
66
|
-
*/
|
|
67
|
-
luz?: readonly string[];
|
|
68
|
-
/** Fração média de janelas acesas. Varia por prédio em torno dela — uns quase escuros, outros cheios. */
|
|
69
|
-
aceso?: number;
|
|
70
|
-
}
|
|
71
|
-
/** O que todo tema tem, independentemente de como o fundo dele nasce. */
|
|
72
|
-
interface TemaBase {
|
|
73
|
-
/** CHAVE i18n do nome exibido. Chave e não texto: tabela de módulo resolvida no import congelaria o idioma
|
|
74
|
-
* no boot (ver a nota em input/devices). Quem exibe resolve com `t()`. */
|
|
75
|
-
nome: string;
|
|
76
|
-
/** Paradas do gradiente vertical do céu, do TOPO ao rodapé, distribuídas por igual. DUAS ou MAIS: com N
|
|
77
|
-
* paradas, a de índice i cai em y = 180·i/(N-1) — é assim que se escolhe a ALTURA de uma cor. */
|
|
78
|
-
sky: readonly string[];
|
|
79
|
-
cloud?: [string, string];
|
|
80
|
-
/** Sol baixo com leque de raios, assado na textura do céu. Ausente = céu de puro gradiente. */
|
|
81
|
-
sol?: {
|
|
82
|
-
cor: string;
|
|
83
|
-
x: number;
|
|
84
|
-
y: number;
|
|
85
|
-
};
|
|
86
|
-
/** Este tema tem CHUVA (ciclo do clima em render/weather). Ausente = sempre seco. */
|
|
87
|
-
chuva?: true;
|
|
88
|
-
/** Quantos cúmulos na MANTA de tela, que fecha e abre com a chuva. Múltiplo de 3 (são 3 fileiras), e só a
|
|
89
|
-
* de cima aparece no tempo bom. Ausente = as 3 lajes fixas da v3. */
|
|
90
|
-
nuvens?: number;
|
|
91
|
-
decor?: string[];
|
|
92
|
-
}
|
|
93
|
-
/** Fundo de MORROS: céu em gradiente + duas bandas de morro. Os quatro temas da v3. */
|
|
94
|
-
export interface TemaMorros extends TemaBase {
|
|
95
|
-
fundo: 'morros';
|
|
96
|
-
/** As duas bandas de morro: `[fundo, frente]`. */
|
|
97
|
-
hills: readonly [string, string];
|
|
98
|
-
}
|
|
99
|
-
/** Fundo de PRÉDIOS: céu em gradiente + três faixas de skyline. A Cidade, e só ela por enquanto. */
|
|
100
|
-
export interface TemaPredios extends TemaBase {
|
|
101
|
-
fundo: 'predios';
|
|
102
|
-
/** Uma faixa por camada de parallax, do mais distante ao mais próximo. */
|
|
103
|
-
predios: readonly [FaixaDePredios, FaixaDePredios, FaixaDePredios];
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* O tema, e ele é uma UNIÃO DISCRIMINADA de propósito.
|
|
107
|
-
*
|
|
108
|
-
* Antes eram `fundo: 'gerado' | 'png'` com `sky?` e `hills?` opcionais, e o invariante de verdade — *quem é
|
|
109
|
-
* gerado TEM céu e morros* — não morava em lugar nenhum: era uma frase num comentário e um `if` em
|
|
110
|
-
* `render/parallax`. Quem lesse o tipo via quatro campos que podiam faltar; quem lesse o código via que
|
|
111
|
-
* nunca faltavam. Agora o compilador cobra, e `render/scene-parallax` deixou de precisar redescrever isto
|
|
112
|
-
* como `ParallaxTheme` — o que era o defeito do ADR-0039 outra vez, numa terceira vítima.
|
|
113
|
-
*/
|
|
114
|
-
export type CenarioTema = TemaMorros | TemaPredios;
|
|
115
|
-
/** O tema para o qual todo valor desconhecido cai. */
|
|
116
|
-
export declare const CENARIO_PADRAO = "cidade";
|
|
117
|
-
export declare const CENARIOS: Record<string, CenarioTema>;
|
|
118
|
-
/** v3 exato — grama/flores por tema. SÓ dos temas `v3`: a Cidade não tem flora (por isso o `| undefined`). */
|
|
119
|
-
export declare const THEME_FLORA: Record<string, Flora | undefined>;
|
|
120
|
-
/** '#rrggbb' → 0xrrggbb, para o `beginFill` do PIXI. Verbatim do `hexN` do game.js. */
|
|
121
|
-
export declare const hexN: (s: string) => number;
|
|
122
|
-
/**
|
|
123
|
-
* A validação de `setCenario`, sem o efeito: tema conhecido passa, o resto vira 'cidade'.
|
|
124
|
-
* ⚠️ Cópia FIEL do monólito, herança do `Object.prototype` inclusive — ver o cabeçalho.
|
|
125
|
-
*/
|
|
126
|
-
export declare function normalizarCenario(theme: string): string;
|
|
127
|
-
export {};
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// render/cenario-data — O CATÁLOGO DE CENÁRIOS: os quatro temas do jogo como DADO, e nada além disso.
|
|
3
|
-
//
|
|
4
|
-
// Este é o módulo-FOLHA da etapa D2-b: zero imports, zero PIXI, zero DOM, zero I/O. Ele responde a uma única
|
|
5
|
-
// pergunta — "quais são os cenários, e de que cor é cada um?" — e é justamente por não responder a mais
|
|
6
|
-
// nenhuma que ele pode ser lido, importado e testado por qualquer um dos seus consumidores sem arrastar meio
|
|
7
|
-
// motor junto.
|
|
8
|
-
//
|
|
9
|
-
// ======================= POR QUE A FRONTEIRA CAIU AQUI =======================
|
|
10
|
-
// `CENARIOS` e `THEME_FLORA` são as duas tabelas mais LIDAS e menos PROTEGIDAS do monólito. Antes desta
|
|
11
|
-
// extração elas eram `const` no meio do `game.js` e chegavam aos módulos por INJEÇÃO — `render/scene-sky.ts`
|
|
12
|
-
// as recebe inteiras no `SceneSkyCtx` (`CENARIOS`, `THEME_FLORA`), `game/attract.ts` recebe `CENARIOS` para
|
|
13
|
-
// sortear o tema da demo, o splash recebe a lista reduzida a `{id,nome}`, e `setCenario` as consulta para
|
|
14
|
-
// validar e para pintar. Cinco leitores, nenhum teste, e nenhum lugar onde a FORMA de um tema estivesse
|
|
15
|
-
// escrita: cada leitor descobria por acidente que `T.cloud` só existe quando `T.v3` é verdadeiro, e que
|
|
16
|
-
// `THEME_FLORA` não tem entrada para 'cidade'.
|
|
17
|
-
//
|
|
18
|
-
// Separar o dado da máquina que o consome é o corte mais barato e mais duradouro desta região: um tema novo
|
|
19
|
-
// (uma estação, um bioma) passa a ser uma linha AQUI, e as invariantes que os leitores presumem viram
|
|
20
|
-
// asserção em `tests/cenario-data.node.test.js` — em particular a mais silenciosa de todas, "todo tema `v3`
|
|
21
|
-
// tem `sky`, `cloud`, `hills`, `decor` E uma entrada em `THEME_FLORA`". Quebrar essa correspondência não
|
|
22
|
-
// derruba nada: `scene-sky` faz `const fl = THEME_FLORA[cenario]` e simplesmente não desenha grama. O tema
|
|
23
|
-
// novo nasceria careca, e ninguém saberia dizer por quê.
|
|
24
|
-
//
|
|
25
|
-
// ======================= O QUE ESTÁ AQUI, E POR QUÊ ESTÁ JUNTO =======================
|
|
26
|
-
// · `CENARIOS` — os quatro temas + a Cidade. `v3:false` (Cidade) significa "meu fundo vem de PNG e eu
|
|
27
|
-
// tenho o céu/tráfego próprios de render/scene-city"; `v3:true` significa "meu fundo é
|
|
28
|
-
// GERADO pelas fórmulas da v3.1.100 (render/scene-parallax) a partir destas cores".
|
|
29
|
-
// Nenhum tema tem chuva — chuva é da Cidade, e é decisão de render/weather.
|
|
30
|
-
// · `THEME_FLORA` — grama e flores por tema. Tabela IRMÃ da de cima e SÓ dos temas `v3`: a Cidade não tem
|
|
31
|
-
// flora. Fica no mesmo arquivo porque as duas descrevem O MESMO tema por chaves iguais e
|
|
32
|
-
// precisam ser editadas no mesmo gesto; separá-las convidaria exatamente a divergência
|
|
33
|
-
// que o teste de correspondência existe para pegar.
|
|
34
|
-
// · `hexN` — '#rrggbb' → número, o tradutor entre o dado (string, legível na tabela acima) e o PIXI
|
|
35
|
-
// (`beginFill` quer inteiro). Ele vivia solto no meio do bloco de parallax do game.js e
|
|
36
|
-
// tinha UM chamador: o `SceneSkyCtx`. É função da TABELA, não do parallax — todas as
|
|
37
|
-
// cores que ele converte estão neste arquivo — e por isso veio para cá, e não para
|
|
38
|
-
// render/parallax.
|
|
39
|
-
// · `normalizarCenario` — a validação de `setCenario` ("tema desconhecido → 'cidade'"), isolada do efeito.
|
|
40
|
-
//
|
|
41
|
-
// ======================= O QUE NÃO VEIO =======================
|
|
42
|
-
// · As FÓRMULAS que transformam estas cores em pixel (`themeSkyTexture`, `themeHillsTexture`,
|
|
43
|
-
// `parallaxPlaceholder`, `hillHeight`) já moram em render/scene-parallax.ts desde o Estágio 4. Este
|
|
44
|
-
// arquivo é a entrada delas, não a implementação.
|
|
45
|
-
// · O desenho da flora (`drawV3Grass`) e da decoração viva é de render/scene-sky.ts. Aqui só a paleta.
|
|
46
|
-
// · Os FATORES de profundidade das 3 camadas (`PARALLAX`) NÃO estão aqui, apesar de também serem dado: eles
|
|
47
|
-
// não variam por tema — descrevem a GEOMETRIA do fundo, e vivem ao lado da conta que os usa, em
|
|
48
|
-
// render/parallax.ts. Uma tabela de tema aqui, uma tabela de câmera lá.
|
|
49
|
-
//
|
|
50
|
-
// ======================= ⚠️ COMPORTAMENTO PRESERVADO: `normalizarCenario` ACEITA CHAVE HERDADA =======================
|
|
51
|
-
// O monólito valida com `if(!CENARIOS[theme])theme='cidade'`. `CENARIOS` é um objeto literal, logo herda de
|
|
52
|
-
// `Object.prototype`: `CENARIOS['toString']` é uma FUNÇÃO, e portanto truthy, e portanto 'toString' passa na
|
|
53
|
-
// validação como se fosse um tema. O `setCenario` então persiste 'toString' em `incl_cenario`, tenta baixar
|
|
54
|
-
// `assets/cenarios/toString/c4.png` e o jogo fica sem fundo. Só é alcançável por um valor forjado (chave de
|
|
55
|
-
// localStorage adulterada; `window.__incl.setCenario('constructor')`), nunca pela UI — que monta o seletor a
|
|
56
|
-
// partir de `Object.keys(CENARIOS)`.
|
|
57
|
-
// ISTO É O COMPORTAMENTO ATUAL E FOI COPIADO TAL E QUAL, de propósito: esta etapa é uma EXTRAÇÃO, e trocar a
|
|
58
|
-
// checagem por `hasOwnProperty` aqui seria consertar às escondidas, dentro de um movimento cuja garantia é
|
|
59
|
-
// justamente "nada mudou". O teste PREGA a falha (`normalizarCenario('toString') === 'toString'`), para que o
|
|
60
|
-
// conserto — quando vier — seja uma mudança visível de asserção e não uma surpresa.
|
|
61
|
-
//
|
|
62
|
-
// SEM I/O NO IMPORT: o corpo do módulo só declara literais. Não há `init`, não há factory, não há efeito —
|
|
63
|
-
// e por isso não há armadilha de ordem de boot: importar este arquivo é sempre seguro, em qualquer ponto.
|
|
64
|
-
// Ver docs/5-Refactoring/plano-modularizacao-mapa.md (D2-b).
|
|
65
|
-
/** O tema para o qual todo valor desconhecido cai. */
|
|
66
|
-
export const CENARIO_PADRAO = 'cidade';
|
|
67
|
-
/* L6 (REFEITO — fiel à v3.1.100): os 4 temas usam EXATAMENTE o céu, as nuvens, as montanhas, a grama
|
|
68
|
-
e a decoração viva de lá (fórmulas copiadas). BLOCOS = Clarity SEM recolor (a v3 não recoloria tiles
|
|
69
|
-
por tema). A CHUVA deixou de ser privilégio da Cidade: é o campo `chuva` abaixo que a concede, e a
|
|
70
|
-
Floresta também a tem (decisão do Dev, 2026-08-25). */
|
|
71
|
-
// ⚠️ TRÊS IDS MENTEM, e o rótulo é que está certo. `cemiterio` é "Amanhecer no Campo" e `espaco` é "Noite no
|
|
72
|
-
// Campo" (ver `cen.*` nos dicionários): os temas mudaram, os ids ficaram. Com `campo` = "Dia no Campo", os três
|
|
73
|
-
// são o MESMO lugar em três horas do dia, e é por isso que compartilham a silhueta em render/scene-parallax.
|
|
74
|
-
// Renomear os ids é migração de dado persistido (`incl_cenario` e as gravações de demonstração os guardam),
|
|
75
|
-
// então fica para uma rodada própria — e este aviso é a rede até lá. Quem ler só o id planta a arte errada;
|
|
76
|
-
// foi o que quase aconteceu.
|
|
77
|
-
//
|
|
78
|
-
// SE UM DIA HOUVER TEMA DE ESPAÇO OU DE HALLOWEEN (decisão do Dev, 2026-08-25): no de espaço, os BLOCOS do
|
|
79
|
-
// nível viram partes de estação espacial — não é só trocar o céu. E o de Halloween é uma FESTA de Halloween,
|
|
80
|
-
// não um cemitério: abóboras, fantasias e doces, não túmulos.
|
|
81
|
-
export const CENARIOS = {
|
|
82
|
-
// `chuva` estava ESCRITA NO CÓDIGO do clima, como `cenario === 'cidade'`. Era verdade e virou mentira no dia
|
|
83
|
-
// em que o Dev pediu chuva na Floresta — e o pior de uma condição dessas é que ela não avisa: quem lê
|
|
84
|
-
// `render/weather` não tem como saber que existe uma lista de temas, porque não existe lista, existe um `if`.
|
|
85
|
-
// Aqui a capacidade é DADO, e um tema novo declara a sua ao nascer.
|
|
86
|
-
// A CIDADE (ADR-0042), medida nos três PNG que ela substitui — e MEDIDA DE NOVO depois que a primeira
|
|
87
|
-
// versão saiu chapada na tela. O que a segunda medição corrigiu:
|
|
88
|
-
//
|
|
89
|
-
// · as cores que eu tinha listado como "janela acesa/apagada" eram o SEGUNDO TOM DE MASSA (os prédios
|
|
90
|
-
// de trás). Separando por temperatura, a luz é o que tem R > B — e ela é rara: 5,4% da área na
|
|
91
|
-
// camada próxima, 0,28% na média, 0,04% na distante;
|
|
92
|
-
// · cada camada tem DUAS fileiras de profundidade, não uma;
|
|
93
|
-
// · as janelas são 2 px de largura por 3 a 5 de altura (263 na camada próxima), não pontos 2x2.
|
|
94
|
-
cidade: {
|
|
95
|
-
nome: 'cen.cidade', fundo: 'predios', chuva: true,
|
|
96
|
-
sky: ['#5d6f8e', '#5d6f8e', '#5d6f8e', '#374866'],
|
|
97
|
-
predios: [
|
|
98
|
-
// Camada 0 — a bruma. Duas profundidades quase iguais ao céu, e quase nenhuma luz.
|
|
99
|
-
{ base: 144, topo: [96, 128], topoFundo: [71, 108], largura: [16, 40],
|
|
100
|
-
corpo: ['#4a5c7c', '#374866'], luz: ['#a5ac93', '#adb599'], aceso: 0.006 },
|
|
101
|
-
// Camada 1 — o meio. Os de trás são visivelmente mais claros (#6b7e98).
|
|
102
|
-
{ base: 139, topo: [64, 122], topoFundo: [44, 100], largura: [14, 38],
|
|
103
|
-
corpo: ['#6b7e98', '#465164'], luz: ['#c2c0be', '#baada6', '#bfbdb9'], aceso: 0.022 },
|
|
104
|
-
// Camada 2 — a de perto, e a que carrega a cidade acesa. `base` 158 é a linha em que o original fica
|
|
105
|
-
// 100% sólido; acima dela a fileira da frente cobre ~70% das colunas e o resto é vão e fileira de trás.
|
|
106
|
-
{ base: 158, topo: [88, 134], topoFundo: [66, 108], largura: [18, 44],
|
|
107
|
-
corpo: ['#637980', '#2b3e49'], luz: ['#c8c3b7', '#bdac8e', '#ccc4b5', '#d0ccc9'], aceso: 0.85 },
|
|
108
|
-
],
|
|
109
|
-
},
|
|
110
|
-
campo: { nome: 'cen.campo', fundo: 'morros', sky: ['#86c5e8', '#cfeecb'], cloud: ['#ffffff', '#d4e6f5'], hills: ['#9fd47e', '#6fb84e'], decor: ['nuvens', 'passaros', 'borboletas'] },
|
|
111
|
-
cemiterio: { nome: 'cen.cemiterio', fundo: 'morros', sky: ['#2b2540', '#5a4f6b'], cloud: ['#d9c4dd', '#a98fb6'], hills: ['#4a5f55', '#33473d'], decor: ['nuvens', 'passaros', 'sparkles', 'minhocas', 'nevoa'] },
|
|
112
|
-
espaco: { nome: 'cen.espaco', fundo: 'morros', sky: ['#05030f', '#161033'], cloud: ['#3a3550', '#262238'], hills: ['#1e3030', '#142024'], decor: ['nuvens', 'sparkles', 'vagalumes'] },
|
|
113
|
-
// A FLORESTA É UM PÔR DO SOL, e antes era um céu VERDE (`#3f6b50`→`#8fbf73`) com nuvens verdes por cima.
|
|
114
|
-
// Verde no céu não é só feio: com os morros em `#2f5e35`, a silhueta das coníferas ficava a um passo da cor
|
|
115
|
-
// do fundo e sumia — plantei árvores que ninguém via, e só depois de ver na tela é que a causa apareceu.
|
|
116
|
-
//
|
|
117
|
-
// As sete paradas caem de 30 em 30 px (y = 180·i/6), e é por isso que são sete: é o que põe o AMARELO em
|
|
118
|
-
// y=60 e o VERMELHO em y=90, que é a linha do horizonte. O laranja entre eles não é declarado — ele nasce da
|
|
119
|
-
// interpolação, como o violeta nasce entre o índigo do topo e o rosa. As três últimas paradas ficam ATRÁS
|
|
120
|
-
// dos morros; existem para o degradê não terminar num corte seco na beira da tela.
|
|
121
|
-
floresta: { nome: 'cen.floresta', fundo: 'morros',
|
|
122
|
-
sky: ['#231a52', '#a34a6e', '#ffd166', '#e0392c', '#8e2320', '#5a1a1c', '#3a1418'],
|
|
123
|
-
sol: { cor: '#ffe9a8', x: 0.30, y: 0.46 },
|
|
124
|
-
cloud: ['#ffffff', '#e9a06a'], // corpo branco, sombra alaranjada: é a luz baixa batendo por baixo
|
|
125
|
-
chuva: true, nuvens: 27, // 3 fileiras de 9: a de cima sempre, as outras duas ao fechar o tempo
|
|
126
|
-
hills: ['#2f5e35', '#1f4226'], decor: ['nuvens', 'passaros', 'borboletas'] },
|
|
127
|
-
};
|
|
128
|
-
/** v3 exato — grama/flores por tema. SÓ dos temas `v3`: a Cidade não tem flora (por isso o `| undefined`). */
|
|
129
|
-
export const THEME_FLORA = {
|
|
130
|
-
campo: { base: '#52933c', top: '#7cc35a', bLt: '#8fd968', bDk: '#46822f', center: '#ffe14d', petals: ['#ffe14d', '#ff7eb6', '#ffffff', '#ff6b6b'] },
|
|
131
|
-
cemiterio: { base: '#46624f', top: '#5e7d68', bLt: '#6f9079', bDk: '#3a5244', center: '#f0e6d0', petals: ['#c9b6e8', '#e7c9dd', '#b6c9e8'] },
|
|
132
|
-
espaco: { base: '#2d4650', top: '#40606a', bLt: '#557f88', bDk: '#26404a', center: '#fff6c0', petals: ['#d6ecff', '#ffffff', '#cfffe8'] },
|
|
133
|
-
floresta: { base: '#3a7a34', top: '#5fa84a', bLt: '#6fc255', bDk: '#2f6329', center: '#ffe14d', petals: ['#c98ce0', '#ffffff', '#ffd166', '#ff7eb6'] },
|
|
134
|
-
};
|
|
135
|
-
/** '#rrggbb' → 0xrrggbb, para o `beginFill` do PIXI. Verbatim do `hexN` do game.js. */
|
|
136
|
-
export const hexN = (s) => parseInt(String(s).slice(1), 16);
|
|
137
|
-
/**
|
|
138
|
-
* A validação de `setCenario`, sem o efeito: tema conhecido passa, o resto vira 'cidade'.
|
|
139
|
-
* ⚠️ Cópia FIEL do monólito, herança do `Object.prototype` inclusive — ver o cabeçalho.
|
|
140
|
-
*/
|
|
141
|
-
export function normalizarCenario(theme) {
|
|
142
|
-
if (!CENARIOS[theme])
|
|
143
|
-
return CENARIO_PADRAO;
|
|
144
|
-
return theme;
|
|
145
|
-
}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
import { tex, type PixelPainter } from './canvas.js';
|
|
3
|
-
type Tex = ReturnType<typeof tex>;
|
|
4
|
-
/** O par de quadros do ciclo de 2 tempos que TODA figura da rua usa. */
|
|
5
|
-
export type TexPair = [Tex, Tex];
|
|
6
|
-
/** Índice do quadro: 0 e 1, os dois tempos do ciclo. */
|
|
7
|
-
export type Frame = 0 | 1;
|
|
8
|
-
/** Pombo no chão 7×6 — corpo cinza, bico laranja, pés. f alterna cabeça alta ↔ bicando. */
|
|
9
|
-
export declare const paintPombo: (f: Frame) => PixelPainter;
|
|
10
|
-
/** Pombo em revoada 8×7 — mesmo corpo, asa batendo. */
|
|
11
|
-
export declare const paintPomboFly: (f: Frame) => PixelPainter;
|
|
12
|
-
/** Gato 12×8 — corpo/cabeça/orelhas/rabo escuros, olho verde; f alterna as patas. */
|
|
13
|
-
export declare const paintGato: (f: Frame) => PixelPainter;
|
|
14
|
-
/** Cão 13×9 — corpo marrom, focinho escuro, orelha; f alterna as patas. */
|
|
15
|
-
export declare const paintCao: (f: Frame) => PixelPainter;
|
|
16
|
-
/** Catálogo dos bichos: tamanho do canvas + painter por quadro. Fonte única que `createCityTextures` percorre
|
|
17
|
-
* e que o teste de regressão de arte itera — as chaves são as MESMAS que `game/life` lê em `LifeTexAtlas`. */
|
|
18
|
-
export declare const CREATURE_ART: {
|
|
19
|
-
readonly pombo: {
|
|
20
|
-
readonly w: 7;
|
|
21
|
-
readonly h: 6;
|
|
22
|
-
readonly paint: (f: Frame) => PixelPainter;
|
|
23
|
-
};
|
|
24
|
-
readonly pomboFly: {
|
|
25
|
-
readonly w: 8;
|
|
26
|
-
readonly h: 7;
|
|
27
|
-
readonly paint: (f: Frame) => PixelPainter;
|
|
28
|
-
};
|
|
29
|
-
readonly gato: {
|
|
30
|
-
readonly w: 12;
|
|
31
|
-
readonly h: 8;
|
|
32
|
-
readonly paint: (f: Frame) => PixelPainter;
|
|
33
|
-
};
|
|
34
|
-
readonly cao: {
|
|
35
|
-
readonly w: 13;
|
|
36
|
-
readonly h: 9;
|
|
37
|
-
readonly paint: (f: Frame) => PixelPainter;
|
|
38
|
-
};
|
|
39
|
-
};
|
|
40
|
-
export type CreatureKey = keyof typeof CREATURE_ART;
|
|
41
|
-
/** Tamanho da silhueta — casado com o do personagem jogável (render/sprites). */
|
|
42
|
-
export declare const ADULT_W = 16, ADULT_H = 32;
|
|
43
|
-
/** Cor única de toda silhueta (era o `const col` fora do `mk` no main.js). */
|
|
44
|
-
export declare const ADULT_COL = "#262b38";
|
|
45
|
-
/** As 6 silhuetas — 3 masculinas + 3 femininas, todas 16×32. A ordem é a do original (M1, M2, M3, F1, F2, F3);
|
|
46
|
-
* `game/life` sorteia por índice, então reordenar troca qual silhueta cada sorteio produz. */
|
|
47
|
-
export declare const ADULT_SHAPES: ((f: Frame) => PixelPainter)[];
|
|
48
|
-
/** Tamanho do carro — 3× NATIVO (detalhado, sem upscale); `game/traffic` conta com os 78px de largura. */
|
|
49
|
-
export declare const CAR_W = 78, CAR_H = 36;
|
|
50
|
-
/** As 4 pinturas de fábrica: `[lataria, sombra, teto]`. */
|
|
51
|
-
export declare const CAR_PALETTES: readonly (readonly [string, string, string])[];
|
|
52
|
-
/** Um carro 78×36 na paleta dada. Vidros, brilhos, farol e lanterna são fixos (não seguem a lataria). */
|
|
53
|
-
export declare const paintCar: (body: string, dark: string, top: string) => PixelPainter;
|
|
54
|
-
/** O que o main.js injeta em `game/life` e `game/traffic` — nomes iguais aos campos dos respectivos `Ctx`. */
|
|
55
|
-
export interface CityTextures {
|
|
56
|
-
lifeTex: Record<CreatureKey, TexPair>;
|
|
57
|
-
adultTex: TexPair[];
|
|
58
|
-
carTex: Tex[];
|
|
59
|
-
}
|
|
60
|
-
/** Assa TODA a arte da rua de uma vez. TOCA `document` — chame só no boot do navegador, nunca no import.
|
|
61
|
-
* Não memoiza de propósito: é chamada uma vez pelo main.js; um cache aqui só esconderia uma segunda chamada. */
|
|
62
|
-
export declare function createCityTextures(): CityTextures;
|
|
63
|
-
export {};
|