feat(engine): replace docked touch bar with floating glass tab bar
Test / fmt (pull_request) Successful in 7s
Test / test (pull_request) Successful in 4m50s

Touch layout only (desktop bar unchanged): a floating glass pill
(Undo / Draw / Hint / Pause) plus a detached circular Menu button,
margin above the bottom edge on top of the safe-area inset. Draw is
the persistently expanded accent pill (icon + label); other buttons
are icon-only and slide their label out while pressed, snapping under
reduce-motion. Buttons keep the existing marker components so click
handlers, tooltips, focus ring, and chrome toggle work unchanged.
Icons: None degrades to text-fallback labels (MinimalPlugins tests /
SVG regression), keeping the bar fully usable.

Toast stack clearance now derives from TAB_BAR_CLEARANCE_PX; the
legacy touch bar spawn path and primary-button metrics are removed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
funman300
2026-07-15 13:57:21 -07:00
parent 7c2daa1e32
commit c8fc3e7a09
8 changed files with 598 additions and 135 deletions
+8
View File
@@ -12,11 +12,13 @@ use bevy::window::WindowResized;
mod fx;
mod interaction;
mod spawn;
pub(crate) mod tab_bar;
mod updates;
pub use fx::*;
use interaction::*;
use spawn::*;
use tab_bar::*;
use updates::*;
// On wasm32 AvatarPlugin is gated out; define a placeholder type so the
@@ -595,6 +597,12 @@ impl Plugin for HudPlugin {
handle_menu_backdrop_click,
close_menu_popover_on_escape,
paint_action_buttons,
paint_glass_tab_buttons,
drive_tab_expansion,
// Writes tab-label TextColor and reads TextFont — entity-
// disjoint from the UiTextFx readout writers (tab labels
// vs HUD readouts), which Bevy can't prove, so declare it.
animate_tab_expansion.ambiguous_with(UiTextFx),
)
.chain()
.in_set(HudButtons)