Files
buzz/mobile/assets/fonts
klopez4212 bbcbd7ce13 Preview Tabler icons in the mobile app (#8109)
## Summary

Preview buzz-app's Tabler icon style in the mobile app, replacing
app-drawn Lucide glyphs across channels, messages, activity, search, and
settings. A shared `BuzzIcons` mapping uses the bundled Tabler 3.46.0
outline font, matching buzz-app's version, with its MIT license and
source documented.

Native UIKit controls retain SF Symbols. The former 300/500 navigation
glyphs use Tabler's standard outline; existing selection colors and
labels remain.

### Related issue

No matching Tabler mobile migration issue or PR found. Related native
iOS controls: #8055.

### Testing

- Pre-push mobile analysis, formatting, file-size checks, and the full
mobile test suite passed.
- 194 focused widget tests passed, including channels, home, search,
settings, and message content.
- Light and dark community-settings renders inspected.
- Signed iPhone Release build succeeded; installed and launched as Buzz
Tabler on a physical iPhone.
- Full `just ci` attempted; stopped during Rust clippy compilation
because the Mac ran low on disk space. Full repository validation is not
claimed.

Signed-off-by: kenny lopez <klopez4212@gmail.com>
2026-10-08 10:40:12 -04:00
..

Inter heart and warning fallback

The two Inter 4.001 variable fonts are derived from the previously bundled fonts by removing only U+2764 and U+26A0 from their Unicode character maps. Flutter can then choose a native font for heart and warning characters, including emoji presentation in reactions and message text. No glyphs, language coverage, other symbols, font metrics, or variation tables are removed. The license remains in Inter-LICENSE.txt.

To reproduce from the repository root:

mkdir -p /tmp/buzz-inter-source
for font in InterVariable.ttf InterVariable-Italic.ttf; do
  git show ec7ea38f62ea917f15e85a678bc94f3bbee5bb64:mobile/assets/fonts/$font > /tmp/buzz-inter-source/$font
done
python3 -m venv /tmp/buzz-inter-tools
/tmp/buzz-inter-tools/bin/pip install fonttools==4.60.1
/tmp/buzz-inter-tools/bin/python mobile/scripts/prepare-inter.py /tmp/buzz-inter-source
/tmp/buzz-inter-tools/bin/python mobile/scripts/prepare-inter.py /tmp/buzz-inter-source --check

The script checks pristine source hashes and verifies every character mapping and every other font table. Only the cmap table and the font checksum may change. Repeated generation from the same sources produces identical bytes. ©, ®, ™, arrows, math symbols, accents, and supported languages keep their original Inter mappings.

Use test/visual/heart_sim_app.dart on an actual iOS simulator to compare reactions, plain/emoji/text-presentation hearts, bold/italic message text, warning signs, and preserved symbols. Font fallback for plain and explicit text-presentation hearts and warnings is platform-dependent; do not infer their appearance from a macOS widget-test renderer. On iOS 26.5, all three heart and warning presentations fall back to the color emoji, including explicit VS15. Message line metrics can change with the fallback font.

The native screenshot regression check (requires Pillow) covers both reaction states, each heart and warning presentation, bold/italic text, and unchanged symbols:

python3 mobile/test/visual/verify_heart_screenshots.py before.png after.png

Use original 1206×2622 captures from the documented simulator and fixture for this check. PR images may be cropped afterward for readability.

test/shared/fonts/inter_assets_test.dart pins the verified generated font artifacts in the existing Flutter test lane. Restoring either original font or changing any other font data fails CI. When upgrading Inter, verify the transformation and native rendering before updating the expected digests.

Tabler mobile preview

TablerIcons.ttf is the unmodified outline webfont from @tabler/icons-webfont@3.46.0, matching buzz-app's Tabler dependency version. Source: https://cdn.jsdelivr.net/npm/@tabler/icons-webfont@3.46.0/dist/fonts/tabler-icons.ttf The upstream MIT license is bundled in TablerIcons-LICENSE.txt.

lib/shared/theme/buzz_icons.dart maps the existing mobile semantic names to Tabler glyphs using the package's dist/tabler-icons.css codepoints. Native UIKit controls retain SF Symbols. Lucide's 300/500 navigation weight variants both map to Tabler's standard outline; selection still uses the existing color and label treatment.