From 68d1db314e7567ed81ea69c91b661553eba5b832 Mon Sep 17 00:00:00 2001 From: ThisMad Date: Sun, 13 Sep 2026 21:11:47 +0200 Subject: [PATCH 1/5] refactor(ui): size every checkbox with MoonUI's Sm tier MoonUI replaces `MoonCheckboxSize::Compact`/`Normal` with the shared `MoonSize` scale (`.size()` now takes `impl Into`). Every terminal checkbox moves to `MoonSize::Sm`, including the settings pages that asked for `Normal` - the new `Md` tier is a 20px box with a 16px label, which reads larger than the section headings - and the import preview, which set no size and fell back to MoonUI's `Md` default. Co-Authored-By: Claude Opus 5 (1M context) --- .../src/analytics/profit_monitor/settings.rs | 6 ++--- .../src/analytics/tuner/coins/mod.rs | 8 +++---- .../src/analytics/tuner/filter/mod.rs | 7 +++--- .../src/analytics/tuner/list/mod.rs | 6 ++--- .../moon-ui-gpui/src/analytics/tuner/shell.rs | 10 ++++---- .../src/analytics/tuner/time/grid.rs | 6 ++--- .../moon-ui-gpui/src/chart_tabs/apply_row.rs | 6 ++--- .../src/chart_tabs/candle_popup.rs | 4 ++-- .../src/chart_tabs/graphics_popup.rs | 12 +++++----- .../src/chart_tabs/layout_popup.rs | 24 +++++++++---------- .../src/chart_tabs/main_stack/empty.rs | 4 ++-- .../src/chart_tabs/main_stack/empty/detect.rs | 4 ++-- .../moon-ui-gpui/src/controls/coin_search.rs | 8 +++---- .../src/controls/manual_strat/settings.rs | 10 ++++---- crates/moon-ui-gpui/src/controls/metric.rs | 12 +++++----- crates/moon-ui-gpui/src/core_expert/render.rs | 6 ++--- .../moon-ui-gpui/src/core_expert/widgets.rs | 8 +++---- crates/moon-ui-gpui/src/figstyle/mod.rs | 6 ++--- .../moon-ui-gpui/src/panels/alerts/table.rs | 8 +++---- .../moon-ui-gpui/src/panels/arb_edit/body.rs | 4 ++-- .../src/panels/assets/settings.rs | 6 ++--- .../src/panels/core_status/config_popup.rs | 8 +++---- .../moon-ui-gpui/src/panels/detects/popup.rs | 9 +++---- .../src/panels/label_edit/body.rs | 14 +++++------ crates/moon-ui-gpui/src/panels/log/mod.rs | 8 +++---- crates/moon-ui-gpui/src/panels/log/view.rs | 4 ++-- crates/moon-ui-gpui/src/panels/news/mod.rs | 12 +++++----- .../src/panels/order_edit/body.rs | 2 +- .../moon-ui-gpui/src/panels/order_edit/mod.rs | 4 ++-- .../moon-ui-gpui/src/panels/report/columns.rs | 2 +- crates/moon-ui-gpui/src/panels/report/mod.rs | 12 +++++----- crates/moon-ui-gpui/src/settings/badges.rs | 10 ++++---- .../src/settings/connections/tab.rs | 9 ++++--- .../src/settings/connections/table.rs | 6 ++--- crates/moon-ui-gpui/src/settings/general.rs | 12 +++++----- .../moon-ui-gpui/src/settings/hotkeys/tab.rs | 6 ++--- .../src/settings/import_preview.rs | 7 ++++-- crates/moon-ui-gpui/src/settings/lines.rs | 6 ++--- crates/moon-ui-gpui/src/settings/security.rs | 6 ++--- crates/moon-ui-gpui/src/settings/storage.rs | 4 ++-- crates/moon-ui-gpui/src/settings/telegram.rs | 6 ++--- .../src/settings/telegram/access.rs | 4 ++-- .../src/settings/telegram/core_section.rs | 6 ++--- .../telegram/core_section/login_steps.rs | 6 ++--- .../src/shell/core_settings_popup.rs | 6 ++--- .../src/shell/core_settings_popup/widgets.rs | 8 +++---- crates/moon-ui-gpui/src/shell/quiet_popup.rs | 4 ++-- .../src/shell/workspace/rail_settings.rs | 4 ++-- crates/moon-ui-gpui/src/strategies/mod.rs | 12 +++++----- crates/moon-ui-gpui/src/strategies/params.rs | 2 +- .../moon-ui-gpui/src/strategies/settings.rs | 6 ++--- .../src/strategies/tree/checks.rs | 4 ++-- 52 files changed, 187 insertions(+), 187 deletions(-) diff --git a/crates/moon-ui-gpui/src/analytics/profit_monitor/settings.rs b/crates/moon-ui-gpui/src/analytics/profit_monitor/settings.rs index a23bf1ba..8190cf2f 100644 --- a/crates/moon-ui-gpui/src/analytics/profit_monitor/settings.rs +++ b/crates/moon-ui-gpui/src/analytics/profit_monitor/settings.rs @@ -14,8 +14,8 @@ use std::collections::HashSet; use gpui::*; use moon_core::config::layout::WindowLayout; use moon_ui::{ - MoonCheckbox, MoonCheckboxSize, MoonGroupBox, MoonPalette, MoonPopover, MoonPopoverPlacement, - h_flex, v_flex, + MoonCheckbox, MoonGroupBox, MoonPalette, MoonPopover, MoonPopoverPlacement, MoonSize, h_flex, + v_flex, }; use rust_i18n::t; @@ -523,7 +523,7 @@ fn pref_group( ))) .label(t!(row.label).to_string()) .checked((row.read)(&prefs)) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |checked: &bool, _window, app| { let checked = *checked; target.update(app, |this, cx| { diff --git a/crates/moon-ui-gpui/src/analytics/tuner/coins/mod.rs b/crates/moon-ui-gpui/src/analytics/tuner/coins/mod.rs index 76102e02..5ba6beec 100644 --- a/crates/moon-ui-gpui/src/analytics/tuner/coins/mod.rs +++ b/crates/moon-ui-gpui/src/analytics/tuner/coins/mod.rs @@ -29,9 +29,9 @@ pub(in crate::analytics::tuner) mod state; use gpui::prelude::FluentBuilder; use gpui::*; use moon_ui::{ - MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonCheckboxSize, MoonInput, - MoonInputEvent, MoonInputState, MoonPalette, MoonScrollbarVisibility, MoonSlider, - MoonSliderEvent, MoonSliderState, MoonVirtualList, h_flex, v_flex, + MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonInput, MoonInputEvent, + MoonInputState, MoonPalette, MoonScrollbarVisibility, MoonSize, MoonSlider, MoonSliderEvent, + MoonSliderState, MoonVirtualList, h_flex, v_flex, }; use rust_i18n::t; @@ -594,7 +594,7 @@ fn coin_row( if black_side { "bl" } else { "wl" } ))) .checked(on) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |_, _w, app| { let token = coin_token(&coin); // The view may already be gone; a dropped window is not an error here. diff --git a/crates/moon-ui-gpui/src/analytics/tuner/filter/mod.rs b/crates/moon-ui-gpui/src/analytics/tuner/filter/mod.rs index c1a97ce1..00e4b1bd 100644 --- a/crates/moon-ui-gpui/src/analytics/tuner/filter/mod.rs +++ b/crates/moon-ui-gpui/src/analytics/tuner/filter/mod.rs @@ -20,8 +20,7 @@ use std::sync::Arc; use gpui::prelude::FluentBuilder; use gpui::*; use moon_ui::{ - MoonCheckbox, MoonCheckboxSize, MoonInput, MoonInputEvent, MoonInputState, MoonPalette, h_flex, - v_flex, + MoonCheckbox, MoonInput, MoonInputEvent, MoonInputState, MoonPalette, MoonSize, h_flex, v_flex, }; use rust_i18n::t; @@ -506,7 +505,7 @@ impl AnalyticsView { // The master checkbox ignores unmapped fields (no matching // strategy parameter): 'all enabled' = all MAPPED ones. .checked(self.tuner.all_mapped_enabled()) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change({ let view = cx.entity(); move |ch: &bool, _w, app| { @@ -633,7 +632,7 @@ impl AnalyticsView { div().flex_none().child( MoonCheckbox::new(SharedString::from(format!("tun-en-{fi}"))) .checked(self.tuner.enabled[fi]) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change({ let view = cx.entity(); move |ch: &bool, _w, app| { diff --git a/crates/moon-ui-gpui/src/analytics/tuner/list/mod.rs b/crates/moon-ui-gpui/src/analytics/tuner/list/mod.rs index 34ae03f0..5da3ba97 100644 --- a/crates/moon-ui-gpui/src/analytics/tuner/list/mod.rs +++ b/crates/moon-ui-gpui/src/analytics/tuner/list/mod.rs @@ -16,8 +16,8 @@ mod tests; use gpui::*; use moon_ui::{ - MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonCheckboxSize, MoonDropdown, MoonInput, - MoonInputEvent, MoonInputState, MoonMenuItem, MoonMenuSize, MoonPalette, h_flex, + MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonDropdown, MoonInput, MoonInputEvent, + MoonInputState, MoonMenuItem, MoonMenuSize, MoonPalette, MoonSize, h_flex, }; use rust_i18n::t; use std::cmp::Ordering; @@ -441,7 +441,7 @@ impl AnalyticsView { div().font_family(design::ui_font()).child( MoonCheckbox::new("an-strat-active") .checked(self.strat_active_only) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .label(t!("analytics.strat.active_only").to_string()) .on_change({ let view = cx.entity(); diff --git a/crates/moon-ui-gpui/src/analytics/tuner/shell.rs b/crates/moon-ui-gpui/src/analytics/tuner/shell.rs index bfdfce7b..bcb5b894 100644 --- a/crates/moon-ui-gpui/src/analytics/tuner/shell.rs +++ b/crates/moon-ui-gpui/src/analytics/tuner/shell.rs @@ -12,9 +12,9 @@ use gpui::prelude::FluentBuilder; use gpui::*; use moon_core::db::ReadFail; use moon_ui::{ - MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonCheckboxSize, MoonDropdown, - MoonInput, MoonInputEvent, MoonInputState, MoonMenuSize, MoonPalette, MoonPopover, - MoonPopoverPlacement, MoonTag, MoonTooltipView, h_flex, v_flex, + MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonDropdown, MoonInput, + MoonInputEvent, MoonInputState, MoonMenuSize, MoonPalette, MoonPopover, MoonPopoverPlacement, + MoonSize, MoonTag, MoonTooltipView, h_flex, v_flex, }; use rust_i18n::t; @@ -153,7 +153,7 @@ impl AnalyticsView { div().flex_none().child( MoonCheckbox::new(SharedString::from(format!("tun-round-{k}"))) .checked(round) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change({ let view = cx.entity(); move |ch: &bool, _w, app| { @@ -725,7 +725,7 @@ impl AnalyticsView { MoonCheckbox::new(SharedString::from("tun-cfg-compose-f")) .label(t!("analytics.tuner.compose_toggle").to_string()) .checked(self.tuner.compose) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) // `on_change` hands the callback an `&mut App`, not a // `Context`, so this is one of the call sites where a // `cx.listener` does not fit. diff --git a/crates/moon-ui-gpui/src/analytics/tuner/time/grid.rs b/crates/moon-ui-gpui/src/analytics/tuner/time/grid.rs index ddfa2980..58284520 100644 --- a/crates/moon-ui-gpui/src/analytics/tuner/time/grid.rs +++ b/crates/moon-ui-gpui/src/analytics/tuner/time/grid.rs @@ -16,7 +16,7 @@ use gpui::*; use moon_ui::{ - MoonCheckbox, MoonCheckboxSize, MoonInput, MoonInputEvent, MoonInputState, MoonPalette, + MoonCheckbox, MoonInput, MoonInputEvent, MoonInputState, MoonPalette, MoonSize, MoonTooltipView, h_flex, v_flex, }; use rust_i18n::t; @@ -389,7 +389,7 @@ impl AnalyticsView { div().w(design::ui_px(cx, CHECK_COL)).flex_none().child( MoonCheckbox::new("tt-en-all") .checked(self.time_tuner.enabled.iter().all(|&e| e)) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change({ let view = cx.entity(); move |ch: &bool, _w, app| { @@ -535,7 +535,7 @@ impl AnalyticsView { .child( MoonCheckbox::new(SharedString::from(format!("tt-en-{field}"))) .checked(enabled) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change({ let view = cx.entity(); move |ch: &bool, _w, app| { diff --git a/crates/moon-ui-gpui/src/chart_tabs/apply_row.rs b/crates/moon-ui-gpui/src/chart_tabs/apply_row.rs index 08341344..db5a5c4d 100644 --- a/crates/moon-ui-gpui/src/chart_tabs/apply_row.rs +++ b/crates/moon-ui-gpui/src/chart_tabs/apply_row.rs @@ -15,8 +15,8 @@ use gpui::*; use moon_core::config::ChartTabKind; use moon_ui::{ - MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonCheckboxSize, MoonPalette, - h_flex, v_flex, + MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonPalette, MoonSize, h_flex, + v_flex, }; use rust_i18n::t; @@ -120,7 +120,7 @@ pub(super) fn render_apply_row( MoonCheckbox::new(SharedString::from(format!("{id_prefix}-apply-{index}"))) .label(label) .checked(targets.has(kind)) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |checked: &bool, _w, app| { let checked = *checked; toggle_entity.update(app, |this, cx| { diff --git a/crates/moon-ui-gpui/src/chart_tabs/candle_popup.rs b/crates/moon-ui-gpui/src/chart_tabs/candle_popup.rs index 136b93f1..586ccd5f 100644 --- a/crates/moon-ui-gpui/src/chart_tabs/candle_popup.rs +++ b/crates/moon-ui-gpui/src/chart_tabs/candle_popup.rs @@ -12,7 +12,7 @@ use moon_core::market::candles::{ CandleViewCfg, }; use moon_ui::{ - MoonCheckbox, MoonCheckboxSize, MoonPalette, MoonPopover, MoonPopoverPlacement, h_flex, v_flex, + MoonCheckbox, MoonPalette, MoonPopover, MoonPopoverPlacement, MoonSize, h_flex, v_flex, }; use rust_i18n::t; @@ -108,7 +108,7 @@ fn flag_cb( MoonCheckbox::new(SharedString::from(format!("{id}-{suffix}"))) .label(t!(label_key).to_string()) .checked(checked) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |ch: &bool, _w, app| { let v = *ch; write_cfg(&entity, app, |c| set(c, v)); diff --git a/crates/moon-ui-gpui/src/chart_tabs/graphics_popup.rs b/crates/moon-ui-gpui/src/chart_tabs/graphics_popup.rs index 9230e7dd..381505dd 100644 --- a/crates/moon-ui-gpui/src/chart_tabs/graphics_popup.rs +++ b/crates/moon-ui-gpui/src/chart_tabs/graphics_popup.rs @@ -20,7 +20,7 @@ use gpui::*; use moon_core::config::ChartGraphicsCfg; use moon_ui::{ - MoonCheckbox, MoonCheckboxSize, MoonPalette, MoonPopover, MoonPopoverPlacement, h_flex, v_flex, + MoonCheckbox, MoonPalette, MoonPopover, MoonPopoverPlacement, MoonSize, h_flex, v_flex, }; use rust_i18n::t; @@ -241,7 +241,7 @@ fn render_graphics_popup( MoonCheckbox::new(SharedString::from(format!("{id}-real"))) .label(t!("chart.graphics.real_trades").to_string()) .checked(cfg.show_real_trades) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |ch: &bool, _w, app| { let v = *ch; write_cfg(&entity, app, |c| c.show_real_trades = v); @@ -252,7 +252,7 @@ fn render_graphics_popup( MoonCheckbox::new(SharedString::from(format!("{id}-emulator"))) .label(t!("chart.graphics.emulator_trades").to_string()) .checked(cfg.show_emulator_trades) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |ch: &bool, _w, app| { let v = *ch; write_cfg(&entity, app, |c| c.show_emulator_trades = v); @@ -263,7 +263,7 @@ fn render_graphics_popup( MoonCheckbox::new(SharedString::from(format!("{id}-hide-closed-sell"))) .label(t!("chart.graphics.hide_closed_sell").to_string()) .checked(cfg.hide_closed_sell_line) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |ch: &bool, _w, app| { let v = *ch; write_cfg(&entity, app, |c| c.hide_closed_sell_line = v); @@ -278,7 +278,7 @@ fn render_graphics_popup( MoonCheckbox::new(SharedString::from(format!("{id}-hide-move-history"))) .label(t!("chart.graphics.hide_move_history").to_string()) .checked(cfg.hide_order_move_history) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |ch: &bool, _w, app| { let v = *ch; write_cfg(&entity, app, |c| c.hide_order_move_history = v); @@ -410,7 +410,7 @@ fn render_graphics_popup( MoonCheckbox::new(SharedString::from(format!("{id}-volume-sides"))) .label(t!("chart.graphics.volume_sides").to_string()) .checked(sides_on) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |ch: &bool, _w, app| { let v = *ch; write_cfg(&entity, app, |c| c.candle_volume_sides = v); diff --git a/crates/moon-ui-gpui/src/chart_tabs/layout_popup.rs b/crates/moon-ui-gpui/src/chart_tabs/layout_popup.rs index a1770c4c..06f9d42c 100644 --- a/crates/moon-ui-gpui/src/chart_tabs/layout_popup.rs +++ b/crates/moon-ui-gpui/src/chart_tabs/layout_popup.rs @@ -8,8 +8,8 @@ use gpui::*; use moon_ui::{ - MoonAccent, MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonCheckboxSize, - MoonInput, MoonInputState, MoonPalette, MoonSegmentItem, MoonSegmentedControl, h_flex, v_flex, + MoonAccent, MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonInput, + MoonInputState, MoonPalette, MoonSegmentItem, MoonSegmentedControl, MoonSize, h_flex, v_flex, }; use rust_i18n::t; @@ -315,7 +315,7 @@ where let exact_cb = MoonCheckbox::new(SharedString::from(format!("{id}-divider-exact"))) .label(t!("chart.layout.divider_exact").to_string()) .checked(divider_exact) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |ch: &bool, _w, app| on_toggle_exact(*ch, app)); // Shown only where it can act: FIT-stretch, whose slots share the space and so state no size // that could say when the charts have stopped fitting. @@ -359,49 +359,49 @@ where let orderbook_cb = MoonCheckbox::new(SharedString::from(format!("{id}-orderbook"))) .label(t!("chart.layout.orderbook").to_string()) .checked(orderbook_enabled) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |ch: &bool, _w, app| on_toggle_orderbook(*ch, app)); // "Liquidations" toggles liquidation-trade crosses on this tab's charts. let liquidations_cb = MoonCheckbox::new(SharedString::from(format!("{id}-liquidations"))) .label(t!("chart.layout.liquidations").to_string()) .checked(liquidations_enabled) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |ch: &bool, _w, app| on_toggle_liquidations(*ch, app)); // "Show control zone" toggles the dim order-zone fill while the order book is hidden. let show_zone_cb = MoonCheckbox::new(SharedString::from(format!("{id}-show-zone"))) .label(t!("chart.layout.show_zone").to_string()) .checked(show_zone) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |ch: &bool, _w, app| on_toggle_show_zone(*ch, app)); // "Auto-pin on order" pins a chart when placing a long or short order. let auto_pin_cb = MoonCheckbox::new(SharedString::from(format!("{id}-auto-pin"))) .label(t!("chart.layout.auto_pin").to_string()) .checked(auto_pin) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |ch: &bool, _w, app| on_toggle_auto_pin(*ch, app)); // "Time axis" toggles bottom time labels on this tab's charts. let time_axis_cb = MoonCheckbox::new(SharedString::from(format!("{id}-time-axis"))) .label(t!("chart.layout.time_axis").to_string()) .checked(time_axis_visible) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |ch: &bool, _w, app| on_toggle_time_axis(*ch, app)); // "Line labels" toggles values beside order lines, including size, percentage, and stop. let line_labels_cb = MoonCheckbox::new(SharedString::from(format!("{id}-line-labels"))) .label(t!("chart.layout.line_labels").to_string()) .checked(line_labels) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |ch: &bool, _w, app| on_toggle_line_labels(*ch, app)); // "Crosshair label" toggles the cursor readout for time, price, percentage, volume, and size. let cursor_labels_cb = MoonCheckbox::new(SharedString::from(format!("{id}-cursor-labels"))) .label(t!("chart.layout.cursor_labels").to_string()) .checked(cursor_labels) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |ch: &bool, _w, app| on_toggle_cursor_labels(*ch, app)); // "Detect flow" frame: how many charts detects may open on this tab, what a detect does once @@ -431,7 +431,7 @@ where let evict_cb = MoonCheckbox::new(SharedString::from(format!("{id}-max-charts-evict"))) .label(t!("chart.layout.max_charts_evict").to_string()) .checked(cap.evict) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |ch: &bool, _w, app| (cap.on_toggle_evict)(*ch, app)); v_flex() .gap(design::ui_px(cx, 6.0)) @@ -444,7 +444,7 @@ where let flash_cb = MoonCheckbox::new(SharedString::from(format!("{id}-no-arrival-flash"))) .label(t!("chart.layout.no_arrival_flash").to_string()) .checked(!flow.flash) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |ch: &bool, _w, app| (flow.on_toggle_flash)(!*ch, app)); popup_group("frame-detect-flow", t!("chart.layout.frame_detect_flow")).child( v_flex() diff --git a/crates/moon-ui-gpui/src/chart_tabs/main_stack/empty.rs b/crates/moon-ui-gpui/src/chart_tabs/main_stack/empty.rs index 0d434d70..0e5712d1 100644 --- a/crates/moon-ui-gpui/src/chart_tabs/main_stack/empty.rs +++ b/crates/moon-ui-gpui/src/chart_tabs/main_stack/empty.rs @@ -41,7 +41,7 @@ use gpui::{ SharedString, StatefulInteractiveElement, Styled, Window, div, px, rgb, }; use moon_core::config::layout::{EmptyBlock, EmptyPlaces, WindowLayout}; -use moon_ui::{MoonCheckbox, MoonCheckboxSize, MoonPalette, MoonPopover, MoonPopoverPlacement}; +use moon_ui::{MoonCheckbox, MoonPalette, MoonPopover, MoonPopoverPlacement, MoonSize}; use rust_i18n::t; use super::MainChartStack; @@ -678,7 +678,7 @@ fn settings_content( MoonCheckbox::new(id(switch.id)) .label(t!(switch.label).to_string()) .checked((switch.read)(&screen)) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |checked: &bool, _window, app| { let checked = *checked; view.update(app, |this, cx| this.set_switch(switch, checked, cx)); diff --git a/crates/moon-ui-gpui/src/chart_tabs/main_stack/empty/detect.rs b/crates/moon-ui-gpui/src/chart_tabs/main_stack/empty/detect.rs index 66b7dcac..0c9ea096 100644 --- a/crates/moon-ui-gpui/src/chart_tabs/main_stack/empty/detect.rs +++ b/crates/moon-ui-gpui/src/chart_tabs/main_stack/empty/detect.rs @@ -26,7 +26,7 @@ use moon_core::config::layout::{EmptyPlaces, WindowLayout}; use moon_core::crowd::CrowdRule; use moon_core::crowd::detect::{DEFAULT_PROFIT, DEFAULT_TRADES, SEATS}; use moon_ui::{ - MoonCheckbox, MoonCheckboxSize, MoonInput, MoonInputEvent, MoonInputState, MoonPalette, h_flex, + MoonCheckbox, MoonInput, MoonInputEvent, MoonInputState, MoonPalette, MoonSize, h_flex, rgba_from, }; use rust_i18n::t; @@ -461,7 +461,7 @@ pub(super) fn block( .label(t!("crowd.settings.detect_evict", max = SEATS.to_string()).to_string()) .checked(cards.evict) .disabled(!enabled) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |checked: &bool, _window, app| { let checked = *checked; view.update(app, |this, cx| this.set_crowd_evict(checked, cx)); diff --git a/crates/moon-ui-gpui/src/controls/coin_search.rs b/crates/moon-ui-gpui/src/controls/coin_search.rs index f92c8f0c..2754b519 100644 --- a/crates/moon-ui-gpui/src/controls/coin_search.rs +++ b/crates/moon-ui-gpui/src/controls/coin_search.rs @@ -21,8 +21,8 @@ use std::collections::{HashMap, HashSet}; use gpui::prelude::FluentBuilder; use gpui::*; use moon_ui::{ - MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonCheckboxSize, MoonDisclosure, - MoonDisclosureDirection, MoonInputState, MoonPalette, h_flex, + MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonDisclosure, + MoonDisclosureDirection, MoonInputState, MoonPalette, MoonSize, h_flex, }; use rust_i18n::t; @@ -980,7 +980,7 @@ where "{id}-{section}-cb-{i}" ))) .checked(checked) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change( move |_v: &bool, _w, app| { on_toggle_row(pick_core_id, market_toggle.clone(), app); @@ -1099,7 +1099,7 @@ where "{id}-{section}-cb-{i}" ))) .checked(checked) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change( move |_v: &bool, _w, app| { on_toggle_child(core, market_toggle.clone(), app); diff --git a/crates/moon-ui-gpui/src/controls/manual_strat/settings.rs b/crates/moon-ui-gpui/src/controls/manual_strat/settings.rs index fe436e15..8dd48be1 100644 --- a/crates/moon-ui-gpui/src/controls/manual_strat/settings.rs +++ b/crates/moon-ui-gpui/src/controls/manual_strat/settings.rs @@ -21,8 +21,8 @@ use gpui::*; use moon_core::config::MANUAL_STRAT_SLOTS; use moon_core::session::CoreId; use moon_ui::{ - MoonButton, MoonButtonIconSlot, MoonButtonSize, MoonButtonVariant, MoonCheckbox, - MoonCheckboxSize, MoonDropdown, MoonMenuItem, MoonMenuSize, MoonPalette, h_flex, v_flex, + MoonButton, MoonButtonIconSlot, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonDropdown, + MoonMenuItem, MoonMenuSize, MoonPalette, MoonSize, h_flex, v_flex, }; use rust_i18n::t; @@ -137,7 +137,7 @@ pub(super) fn slot_settings_content( MoonCheckbox::new(SharedString::from(format!("ms-slot-show-{slot}"))) .label(format!("{}", slot + 1)) .checked(current.show) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |checked: &bool, _w, app| { let show = *checked; show_backend.update(app, |b, cx| { @@ -226,7 +226,7 @@ pub(super) fn slot_settings_content( MoonCheckbox::new("ms-mb-logic") .label(t!("header.ms_mb_logic").to_string()) .checked(mb_logic) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |checked: &bool, _w, app| { let on = *checked; logic_backend.update(app, |b, cx| { @@ -248,7 +248,7 @@ pub(super) fn slot_settings_content( MoonCheckbox::new("ms-ignore-strat-sell") .label(t!("header.ms_ignore_strat_sell").to_string()) .checked(on) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |checked: &bool, _w, app| { let on = *checked; sell_backend.update(app, |b, cx| { diff --git a/crates/moon-ui-gpui/src/controls/metric.rs b/crates/moon-ui-gpui/src/controls/metric.rs index fbc23f22..1de1f2f6 100644 --- a/crates/moon-ui-gpui/src/controls/metric.rs +++ b/crates/moon-ui-gpui/src/controls/metric.rs @@ -6,9 +6,9 @@ use gpui::*; use rust_i18n::t; use moon_ui::{ - MoonButton, MoonButtonSegment, MoonButtonSize, MoonButtonVariant, MoonCheckbox, - MoonCheckboxSize, MoonInput, MoonInputState, MoonPalette, MoonPopover, MoonPopoverPlacement, - MoonSlider, MoonSliderState, MoonToggle, MoonToggleLabelSide, MoonToggleSize, h_flex, v_flex, + MoonButton, MoonButtonSegment, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonInput, + MoonInputState, MoonPalette, MoonPopover, MoonPopoverPlacement, MoonSize, MoonSlider, + MoonSliderState, MoonToggle, MoonToggleLabelSide, MoonToggleSize, h_flex, v_flex, }; use moon_core::feed::ClientSettingsEdit; @@ -728,7 +728,7 @@ pub fn metric_popup_content( MoonCheckbox::new("toolbar-tp-ext") .label(t!("toolbar.tp_ext").to_string()) .checked(extended) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |ch: &bool, _w, app| { let ext = *ch; let is_live = { @@ -790,7 +790,7 @@ pub fn metric_popup_content( MoonCheckbox::new("toolbar-stop-market") .label(t!("toolbar.stop_market").to_string()) .checked(stop_market_on) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |ch: &bool, _w, app| { let on = *ch; let is_live = { @@ -814,7 +814,7 @@ pub fn metric_popup_content( MoonCheckbox::new("toolbar-hedge") .label(t!("toolbar.hedge").to_string()) .checked(hedge_on) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change({ let backend = backend.clone(); let group = group.clone(); diff --git a/crates/moon-ui-gpui/src/core_expert/render.rs b/crates/moon-ui-gpui/src/core_expert/render.rs index cce73e6c..c3aa2bae 100644 --- a/crates/moon-ui-gpui/src/core_expert/render.rs +++ b/crates/moon-ui-gpui/src/core_expert/render.rs @@ -9,8 +9,8 @@ use gpui::prelude::FluentBuilder; use gpui::*; use moon_ui::{ - MoonAlert, MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonCheckboxSize, - MoonPalette, MoonTabItem, MoonTabStrip, MoonWindowFrame, h_flex, v_flex, + MoonAlert, MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonPalette, MoonSize, + MoonTabItem, MoonTabStrip, MoonWindowFrame, h_flex, v_flex, }; use rust_i18n::t; @@ -154,7 +154,7 @@ impl CoreExpertView { MoonCheckbox::new("core-expert-mode") .label(t!("core_settings.expert").to_string()) .checked(expert) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |value, window, cx| { if *value { return; diff --git a/crates/moon-ui-gpui/src/core_expert/widgets.rs b/crates/moon-ui-gpui/src/core_expert/widgets.rs index 65aa1507..aa31ce5b 100644 --- a/crates/moon-ui-gpui/src/core_expert/widgets.rs +++ b/crates/moon-ui-gpui/src/core_expert/widgets.rs @@ -16,9 +16,9 @@ use gpui::prelude::FluentBuilder; use gpui::*; use moon_ui::{ - MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonCheckboxSize, MoonDropdown, - MoonGroupBox, MoonInput, MoonLink, MoonMenuItem, MoonMenuSize, MoonPalette, MoonRadio, - MoonRadioSize, MoonSlider, MoonStepper, MoonStepperSize, MoonText, MoonTone, h_flex, v_flex, + MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonDropdown, MoonGroupBox, + MoonInput, MoonLink, MoonMenuItem, MoonMenuSize, MoonPalette, MoonRadio, MoonRadioSize, + MoonSize, MoonSlider, MoonStepper, MoonStepperSize, MoonText, MoonTone, h_flex, v_flex, }; use rust_i18n::t; @@ -66,7 +66,7 @@ pub(super) fn flag( .checked(checked && !mixed) .tone(design::mixed_tone(mixed)) .disabled(!enabled) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |ch: &bool, _w, app| { let on = *ch; view.update(app, |this, cx| { diff --git a/crates/moon-ui-gpui/src/figstyle/mod.rs b/crates/moon-ui-gpui/src/figstyle/mod.rs index 50cb23ae..65cd0407 100644 --- a/crates/moon-ui-gpui/src/figstyle/mod.rs +++ b/crates/moon-ui-gpui/src/figstyle/mod.rs @@ -30,7 +30,7 @@ use gpui::*; use moon_ui::{ - MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonCheckboxSize, MoonPalette, + MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonPalette, MoonSize, MoonTooltipView, h_flex, v_flex, }; @@ -527,7 +527,7 @@ fn fill_row( MoonCheckbox::new("figset-fill-off") .label(t!("chart.fig.no_fill").to_string()) .checked(!has_fill) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |off, _, app| { backend_off.update(app, |b, bcx| { if edit_style(b, &target_off, &authority_off, |s| { @@ -712,7 +712,7 @@ fn hotkey_cycle_row( .child( MoonCheckbox::new("figset-hotkey-cb") .checked(on) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .label(t!("chart.fig.hotkey").to_string()) .on_change(move |checked: &bool, _window, app| { edit_hotkey_cycle(&backend, tool, *checked, app); diff --git a/crates/moon-ui-gpui/src/panels/alerts/table.rs b/crates/moon-ui-gpui/src/panels/alerts/table.rs index 3de55e70..83e412bc 100644 --- a/crates/moon-ui-gpui/src/panels/alerts/table.rs +++ b/crates/moon-ui-gpui/src/panels/alerts/table.rs @@ -3,9 +3,9 @@ use super::*; use moon_ui::{ - MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonCheckboxSize, MoonDataCell, - MoonDataRow, MoonDataTable, MoonDataTableColumn, MoonDropdown, MoonMenuSize, MoonPopover, - MoonPopoverPlacement, MoonTone, h_flex, + MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonDataCell, MoonDataRow, + MoonDataTable, MoonDataTableColumn, MoonDropdown, MoonMenuSize, MoonPopover, + MoonPopoverPlacement, MoonSize, MoonTone, h_flex, }; use rust_i18n::t; @@ -242,7 +242,7 @@ fn alert_cell(row: &FigRow, ctx: &RowCtx) -> AnyElement { MoonCheckbox::new(SharedString::from(format!("al-arm-{core}-{id}"))) .checked(row.armed) .disabled(!editable) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |on: &bool, _w, app| { let (on, market) = (*on, market.clone()); ctx.commit_core(app, core, move |b| { diff --git a/crates/moon-ui-gpui/src/panels/arb_edit/body.rs b/crates/moon-ui-gpui/src/panels/arb_edit/body.rs index 4100c621..0e432405 100644 --- a/crates/moon-ui-gpui/src/panels/arb_edit/body.rs +++ b/crates/moon-ui-gpui/src/panels/arb_edit/body.rs @@ -5,7 +5,7 @@ use gpui::*; use moon_core::config::{ArbShow, ArbVenueCfg}; -use moon_ui::{MoonButtonVariant, MoonCheckbox, MoonCheckboxSize, MoonPalette, h_flex, v_flex}; +use moon_ui::{MoonButtonVariant, MoonCheckbox, MoonPalette, MoonSize, h_flex, v_flex}; use rust_i18n::t; use super::ArbEditState; @@ -68,7 +68,7 @@ pub(super) fn dialog_body(state: &Entity, cx: &mut App) -> AnyElem MoonCheckbox::new("arb-blocked") .label(t!("arb.mark_blocked").to_string()) .checked(on) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |v: &bool, _w, cx| { let v = *v; ArbEditState::write(&state, cx, |cfg| cfg.mark_blocked = v); diff --git a/crates/moon-ui-gpui/src/panels/assets/settings.rs b/crates/moon-ui-gpui/src/panels/assets/settings.rs index cc24c4c9..282a9231 100644 --- a/crates/moon-ui-gpui/src/panels/assets/settings.rs +++ b/crates/moon-ui-gpui/src/panels/assets/settings.rs @@ -8,9 +8,7 @@ //! disagree about the shape of the list. use super::*; -use moon_ui::{ - MoonCheckbox, MoonCheckboxSize, MoonGroupBox, MoonPopover, MoonPopoverPlacement, MoonTheme, -}; +use moon_ui::{MoonCheckbox, MoonGroupBox, MoonPopover, MoonPopoverPlacement, MoonSize, MoonTheme}; use crate::panels::{ COMPACT_CHECKBOX_FONT, COMPACT_CHECKBOX_GAP, COMPACT_CHECKBOX_MARK, POPUP_GROUP_CAPTION_FONT, @@ -230,7 +228,7 @@ fn display_group(group_by_venue: bool, view: Entity) -> MoonGroupBox MoonCheckbox::new("assets-pref-group-by-venue") .label(t!(GROUP_BY_VENUE_LABEL).to_string()) .checked(group_by_venue) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |checked: &bool, _window, app| { let checked = *checked; view.update(app, |this, cx| this.write_group_by_venue(checked, cx)); diff --git a/crates/moon-ui-gpui/src/panels/core_status/config_popup.rs b/crates/moon-ui-gpui/src/panels/core_status/config_popup.rs index 0203ee5f..a54a8543 100644 --- a/crates/moon-ui-gpui/src/panels/core_status/config_popup.rs +++ b/crates/moon-ui-gpui/src/panels/core_status/config_popup.rs @@ -9,8 +9,8 @@ use gpui::prelude::FluentBuilder; use gpui::*; use moon_ui::{ - MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonCheckboxSize, MoonDropdown, - MoonMenuSize, MoonPalette, MoonPopover, MoonPopoverPlacement, h_flex, v_flex, + MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonDropdown, MoonMenuSize, + MoonPalette, MoonPopover, MoonPopoverPlacement, MoonSize, h_flex, v_flex, }; use rust_i18n::t; @@ -803,7 +803,7 @@ fn enable_checkbox( let backend = backend.clone(); MoonCheckbox::new(SharedString::from(id)) .checked(checked) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |ch: &bool, _w, app| { let on = *ch; backend.update(app, |b, cx| { @@ -825,7 +825,7 @@ fn chart_checkbox( let backend = backend.clone(); MoonCheckbox::new(SharedString::from(id)) .checked(checked) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |ch: &bool, _w, app| { let on = *ch; backend.update(app, |b, cx| { diff --git a/crates/moon-ui-gpui/src/panels/detects/popup.rs b/crates/moon-ui-gpui/src/panels/detects/popup.rs index 9619e391..9d2b3f4d 100644 --- a/crates/moon-ui-gpui/src/panels/detects/popup.rs +++ b/crates/moon-ui-gpui/src/panels/detects/popup.rs @@ -9,9 +9,10 @@ use gpui::*; use moon_ui::{ - MoonAccent, MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonCheckboxSize, - MoonDropdown, MoonMenuSize, MoonNotification, MoonPalette, MoonPopover, MoonPopoverPlacement, - MoonSegmentItem, MoonSegmentedControl, MoonSlider, MoonWindowExt as _, h_flex, v_flex, + MoonAccent, MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonDropdown, + MoonMenuSize, MoonNotification, MoonPalette, MoonPopover, MoonPopoverPlacement, + MoonSegmentItem, MoonSegmentedControl, MoonSize, MoonSlider, MoonWindowExt as _, h_flex, + v_flex, }; use rust_i18n::t; @@ -421,7 +422,7 @@ fn content( MoonCheckbox::new("det-view-add-to-chart") .label(t!("detects.cfg.show_add_to_chart").to_string()) .checked(cfg.show_add_to_chart) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |checked: &bool, _w, app| { let checked = *checked; entity_atc.update(app, |this, cx| { diff --git a/crates/moon-ui-gpui/src/panels/label_edit/body.rs b/crates/moon-ui-gpui/src/panels/label_edit/body.rs index 5374609e..3d8e5938 100644 --- a/crates/moon-ui-gpui/src/panels/label_edit/body.rs +++ b/crates/moon-ui-gpui/src/panels/label_edit/body.rs @@ -14,8 +14,8 @@ use moon_core::config::{ }; use moon_core::util::fmt::DeltaSign; use moon_ui::{ - MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonCheckboxSize, MoonDropdown, - MoonInput, MoonMenuSize, MoonPalette, MoonWindowExt as _, h_flex, v_flex, + MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonDropdown, MoonInput, + MoonMenuSize, MoonPalette, MoonSize, MoonWindowExt as _, h_flex, v_flex, }; use rust_i18n::t; @@ -90,7 +90,7 @@ pub(super) fn dialog_body(state: &Entity, cx: &mut App) -> AnyEl MoonCheckbox::new("le-plate") .label(t!("chart_labels.plate").to_string()) .checked(on) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |v: &bool, _w, cx| { let v = *v; write_row(&state, cx, |s| s.row.plate = v); @@ -103,7 +103,7 @@ pub(super) fn dialog_body(state: &Entity, cx: &mut App) -> AnyEl .label(t!("chart_labels.show_name").to_string()) .checked(on && named) .disabled(!named) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |v: &bool, _w, cx| { let v = *v; write_row(&state, cx, |s| s.row.show_name = v); @@ -591,7 +591,7 @@ fn caption_settings( MoonCheckbox::new("le-bar") .label(t!("chart_labels.menu.bars").to_string()) .checked(on) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |v: &bool, _w, cx| { let v = *v; write_row(&state, cx, |s| s.row.parts[selected].bar = v); @@ -691,7 +691,7 @@ fn caption_settings( MoonCheckbox::new("le-value-only") .label(t!("chart_labels.value_only").to_string()) .checked(on) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |v: &bool, _w, cx| { let v = *v; write_row(&state, cx, |s| { @@ -748,7 +748,7 @@ fn caption_settings( MoonCheckbox::new("le-caption") .label(label.to_string()) .checked(on) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |v: &bool, _w, cx| { let v = *v; write_row(&state, cx, |s| { diff --git a/crates/moon-ui-gpui/src/panels/log/mod.rs b/crates/moon-ui-gpui/src/panels/log/mod.rs index ae8946a1..f7d964af 100644 --- a/crates/moon-ui-gpui/src/panels/log/mod.rs +++ b/crates/moon-ui-gpui/src/panels/log/mod.rs @@ -31,10 +31,10 @@ mod view; use crate::panels::line_list::{self, RowSelection}; use gpui::*; use moon_ui::{ - DockArea, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonCheckboxSize, MoonDropdown, - MoonInput, MoonInputEvent, MoonInputState, MoonMenuItem, MoonMenuSize, MoonPalette, - MoonScrollbarVisibility, MoonVirtualList, MoonVirtualListScrollHandle, Panel, PanelEvent, - PanelState, StyledExt, h_flex, v_flex, + DockArea, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonDropdown, MoonInput, + MoonInputEvent, MoonInputState, MoonMenuItem, MoonMenuSize, MoonPalette, + MoonScrollbarVisibility, MoonSize, MoonVirtualList, MoonVirtualListScrollHandle, Panel, + PanelEvent, PanelState, StyledExt, h_flex, v_flex, }; use rust_i18n::t; diff --git a/crates/moon-ui-gpui/src/panels/log/view.rs b/crates/moon-ui-gpui/src/panels/log/view.rs index cfe26347..d324f56c 100644 --- a/crates/moon-ui-gpui/src/panels/log/view.rs +++ b/crates/moon-ui-gpui/src/panels/log/view.rs @@ -74,7 +74,7 @@ impl Render for LogPanel { MoonCheckbox::new("log-errors-only") .label(t!("log.errors_only").to_string()) .checked(self.errors_only) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(cx.listener(|t, ch: &bool, _, cx| { if t.errors_only != *ch { t.errors_only = *ch; @@ -88,7 +88,7 @@ impl Render for LogPanel { MoonCheckbox::new("log-live") .label(t!("log.follow_tail").to_string()) .checked(self.following()) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(cx.listener(|t, ch: &bool, _, cx| { // A manual toggle invalidates any delayed automatic resumption. t.scroll_gen = t.scroll_gen.wrapping_add(1); diff --git a/crates/moon-ui-gpui/src/panels/news/mod.rs b/crates/moon-ui-gpui/src/panels/news/mod.rs index 36e8db0a..dfa68121 100644 --- a/crates/moon-ui-gpui/src/panels/news/mod.rs +++ b/crates/moon-ui-gpui/src/panels/news/mod.rs @@ -31,10 +31,10 @@ use std::rc::Rc; use gpui::prelude::FluentBuilder; use gpui::*; use moon_ui::{ - DockArea, MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonCheckboxSize, + DockArea, MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonContextMenuWindowExt as _, MoonDropdown, MoonInput, MoonInputEvent, MoonInputState, MoonMenuItem, MoonMenuSize, MoonNotification, MoonPalette, MoonPopover, MoonPopoverPlacement, - MoonTooltipView, MoonWindowExt as _, Panel, PanelEvent, PanelState, h_flex, v_flex, + MoonSize, MoonTooltipView, MoonWindowExt as _, Panel, PanelEvent, PanelState, h_flex, v_flex, }; use rust_i18n::t; @@ -801,7 +801,7 @@ impl NewsView { fn untagged_row(&self, shown: bool, p: MoonPalette, cx: &mut Context) -> AnyElement { let checkbox = MoonCheckbox::new("news-untagged-vis") .checked(shown) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(cx.listener(|this, checked: &bool, _w, cx| { this.set_hide_untagged(!*checked, cx); })); @@ -837,7 +837,7 @@ impl NewsView { let cb_key = key.clone(); let checkbox = MoonCheckbox::new(SharedString::from(format!("news-tagvis-{key}"))) .checked(!hidden) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(cx.listener(move |this, checked: &bool, _w, cx| { this.toggle_tag_hidden(&cb_key, !*checked, cx); })); @@ -902,7 +902,7 @@ impl NewsView { let fixed_toggle = MoonCheckbox::new(SharedString::from(format!("nt-fixed-{key}"))) .label(t!("chart_labels.color_fixed").to_string()) .checked(fixed.is_some()) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(cx.listener(move |this, checked: &bool, _, cx| { let color = checked.then(|| format!("#{seed:06X}")); this.set_tag_color(&fixed_key, color.as_deref(), cx); @@ -1264,7 +1264,7 @@ impl Render for NewsView { MoonCheckbox::new("news-translate") .label(t!("news.translate").to_string()) .checked(self.translate) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(cx.listener(|this, ch: &bool, _w, cx| this.set_translate(*ch, cx))), ) .child( diff --git a/crates/moon-ui-gpui/src/panels/order_edit/body.rs b/crates/moon-ui-gpui/src/panels/order_edit/body.rs index 47c423fe..34b065aa 100644 --- a/crates/moon-ui-gpui/src/panels/order_edit/body.rs +++ b/crates/moon-ui-gpui/src/panels/order_edit/body.rs @@ -166,7 +166,7 @@ pub(super) fn dialog_body(state: &Entity, cx: &mut App) -> AnyEl MoonCheckbox::new(SharedString::from(id)) .label(label) .checked(checked) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |ch: &bool, _w, app| { let on = *ch; st.update(app, |s, cx| { diff --git a/crates/moon-ui-gpui/src/panels/order_edit/mod.rs b/crates/moon-ui-gpui/src/panels/order_edit/mod.rs index bf0b4208..25bd9026 100644 --- a/crates/moon-ui-gpui/src/panels/order_edit/mod.rs +++ b/crates/moon-ui-gpui/src/panels/order_edit/mod.rs @@ -9,8 +9,8 @@ use gpui::*; use moon_core::feed::{OrderRow, OrderStopsForm, StopGroupEdit, TakeProfitEdit, VStopEdit}; use moon_core::session::CoreId; use moon_ui::{ - MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonCheckboxSize, MoonInput, - MoonInputState, MoonNotification, MoonPalette, MoonTone, MoonWindowExt as _, h_flex, v_flex, + MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonInput, MoonInputState, + MoonNotification, MoonPalette, MoonSize, MoonTone, MoonWindowExt as _, h_flex, v_flex, }; use rust_i18n::t; diff --git a/crates/moon-ui-gpui/src/panels/report/columns.rs b/crates/moon-ui-gpui/src/panels/report/columns.rs index 3be51e55..1c52a295 100644 --- a/crates/moon-ui-gpui/src/panels/report/columns.rs +++ b/crates/moon-ui-gpui/src/panels/report/columns.rs @@ -589,7 +589,7 @@ fn deleted_cell(ri: usize, val: &Value) -> MoonDataCell { let checked = as_i64(val).unwrap_or(0) != 0; let cb = MoonCheckbox::new(SharedString::from(format!("rep-del-{ri}"))) .checked(checked) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .disabled(true); MoonDataCell::element( div() diff --git a/crates/moon-ui-gpui/src/panels/report/mod.rs b/crates/moon-ui-gpui/src/panels/report/mod.rs index ace011af..e512598c 100644 --- a/crates/moon-ui-gpui/src/panels/report/mod.rs +++ b/crates/moon-ui-gpui/src/panels/report/mod.rs @@ -54,12 +54,12 @@ use gpui::*; use moon_ui::MoonWindowExt as _; use moon_ui::{ DockArea, MoonButton, MoonButtonIconSlot, MoonButtonSize, MoonButtonVariant, MoonCheckbox, - MoonCheckboxSize, MoonCombobox, MoonComboboxEvent, MoonComboboxMenuChrome, MoonComboboxState, - MoonDataCell, MoonDataRow, MoonDataTable, MoonDataTableColumn, MoonDataTableState, - MoonDataTableWidthPolicy, MoonDateTimePicker, MoonDateTimePickerEvent, MoonDateTimePickerState, - MoonDropdown, MoonInput, MoonInputEvent, MoonInputState, MoonMenuItem, MoonMenuSize, - MoonNotification, MoonPalette, MoonScrollbarVisibility, MoonTone, MoonWindowFrame, Panel, - PanelEvent, PanelState, Root, StyledExt, h_flex, rgba_from, v_flex, + MoonCombobox, MoonComboboxEvent, MoonComboboxMenuChrome, MoonComboboxState, MoonDataCell, + MoonDataRow, MoonDataTable, MoonDataTableColumn, MoonDataTableState, MoonDataTableWidthPolicy, + MoonDateTimePicker, MoonDateTimePickerEvent, MoonDateTimePickerState, MoonDropdown, MoonInput, + MoonInputEvent, MoonInputState, MoonMenuItem, MoonMenuSize, MoonNotification, MoonPalette, + MoonScrollbarVisibility, MoonSize, MoonTone, MoonWindowFrame, Panel, PanelEvent, PanelState, + Root, StyledExt, h_flex, rgba_from, v_flex, }; use rusqlite::types::Value; use rust_i18n::t; diff --git a/crates/moon-ui-gpui/src/settings/badges.rs b/crates/moon-ui-gpui/src/settings/badges.rs index e03e6d6e..3f93cb17 100644 --- a/crates/moon-ui-gpui/src/settings/badges.rs +++ b/crates/moon-ui-gpui/src/settings/badges.rs @@ -9,8 +9,8 @@ use gpui::prelude::FluentBuilder; use gpui::*; use moon_ui::{ - MoonBadge, MoonBadgeSize, MoonBadgeVariant, MoonButton, MoonButtonSize, MoonCheckboxSize, - MoonColorPicker, MoonColorPickerState, MoonInput, MoonInputEvent, MoonInputState, MoonPalette, + MoonBadge, MoonBadgeSize, MoonBadgeVariant, MoonButton, MoonButtonSize, MoonColorPicker, + MoonColorPickerState, MoonInput, MoonInputEvent, MoonInputState, MoonPalette, MoonSize, MoonTooltipView, StyledExt, h_flex, rgba_from, v_flex, }; use rust_i18n::t; @@ -290,7 +290,7 @@ impl SettingsView { }, ) .label(t!("badges.col_active").to_string()) - .size(MoonCheckboxSize::Compact); + .size(MoonSize::Sm); let distinguish_chk = self .draft_checkbox( @@ -308,7 +308,7 @@ impl SettingsView { }, ) .label(t!("badges.distinguish").to_string()) - .size(MoonCheckboxSize::Compact); + .size(MoonSize::Sm); let outline_chk = self .draft_checkbox( @@ -326,7 +326,7 @@ impl SettingsView { }, ) .label(t!("badges.use_outline").to_string()) - .size(MoonCheckboxSize::Compact); + .size(MoonSize::Sm); // Keep everything on one row. Color pickers use `flex_none` at their natural 128px width // so they do not overlap the next badge. Outline colors appear to the right as L for long diff --git a/crates/moon-ui-gpui/src/settings/connections/tab.rs b/crates/moon-ui-gpui/src/settings/connections/tab.rs index 2591cc1e..8c5b0407 100644 --- a/crates/moon-ui-gpui/src/settings/connections/tab.rs +++ b/crates/moon-ui-gpui/src/settings/connections/tab.rs @@ -9,10 +9,9 @@ use std::sync::Arc; use gpui::*; use moon_ui::{ - MoonButton, MoonButtonIconSlot, MoonButtonSize, MoonButtonVariant, MoonCheckbox, - MoonCheckboxSize, MoonDropdown, MoonMenuSize, MoonPalette, MoonPopover, MoonPopoverPlacement, - MoonScrollbarVisibility, MoonSelect, MoonTooltipView, MoonVirtualList, StyledExt, h_flex, - v_flex, + MoonButton, MoonButtonIconSlot, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonDropdown, + MoonMenuSize, MoonPalette, MoonPopover, MoonPopoverPlacement, MoonScrollbarVisibility, + MoonSelect, MoonSize, MoonTooltipView, MoonVirtualList, StyledExt, h_flex, v_flex, }; use rust_i18n::t; @@ -330,7 +329,7 @@ fn group_header_row( .child( MoonCheckbox::new(SharedString::from(format!("grp-{name}"))) .checked(active) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change({ let weak = weak.clone(); move |ch: &bool, _window, cx| { diff --git a/crates/moon-ui-gpui/src/settings/connections/table.rs b/crates/moon-ui-gpui/src/settings/connections/table.rs index b17bb7b0..0d7b233b 100644 --- a/crates/moon-ui-gpui/src/settings/connections/table.rs +++ b/crates/moon-ui-gpui/src/settings/connections/table.rs @@ -14,8 +14,8 @@ use gpui::prelude::FluentBuilder; use gpui::*; use moon_ui::{ - MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonCheckboxSize, MoonColorPicker, - MoonDropdown, MoonInput, MoonInputState, MoonMenuItem, MoonMenuSize, MoonPalette, MoonText, + MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonColorPicker, MoonDropdown, + MoonInput, MoonInputState, MoonMenuItem, MoonMenuSize, MoonPalette, MoonSize, MoonText, MoonTone, MoonTooltipView, StyledExt, h_flex, }; use rust_i18n::t; @@ -268,7 +268,7 @@ fn srv_check( } false }) - .size(MoonCheckboxSize::Compact); + .size(MoonSize::Sm); if !label.is_empty() { checkbox = checkbox.label(label); } diff --git a/crates/moon-ui-gpui/src/settings/general.rs b/crates/moon-ui-gpui/src/settings/general.rs index ba8d7130..cf4b6a39 100644 --- a/crates/moon-ui-gpui/src/settings/general.rs +++ b/crates/moon-ui-gpui/src/settings/general.rs @@ -5,8 +5,8 @@ use gpui::*; use moon_ui::{ - MoonButton, MoonButtonSize, MoonCheckboxSize, MoonInput, MoonInputEvent, MoonInputState, - MoonMenuSize, MoonPalette, MoonSelect, MoonSlider, MoonSliderEvent, MoonSliderState, + MoonButton, MoonButtonSize, MoonInput, MoonInputEvent, MoonInputState, MoonMenuSize, + MoonPalette, MoonSelect, MoonSize, MoonSlider, MoonSliderEvent, MoonSliderState, MoonTooltipView, StyledExt, h_flex, rgba_from, v_flex, }; use rust_i18n::t; @@ -326,7 +326,7 @@ impl SettingsView { } }) .label(t!("general.charts_split_by_core").to_string()) - .size(MoonCheckboxSize::Normal), + .size(MoonSize::Sm), ) .child(settings_hint( "general.charts_split_by_core_hint", @@ -345,7 +345,7 @@ impl SettingsView { } }) .label(t!("general.separate_control_zones").to_string()) - .size(MoonCheckboxSize::Normal), + .size(MoonSize::Sm), ) .child(settings_hint( "general.separate_control_zones_hint", @@ -372,7 +372,7 @@ impl SettingsView { } }) .label(t!("general.main_idle_close").to_string()) - .size(MoonCheckboxSize::Normal), + .size(MoonSize::Sm), ) .child( h_flex() @@ -415,7 +415,7 @@ impl SettingsView { } }) .label(t!("general.log_to_file").to_string()) - .size(MoonCheckboxSize::Normal), + .size(MoonSize::Sm), ) .child(settings_hint( "general.log_to_file_hint", diff --git a/crates/moon-ui-gpui/src/settings/hotkeys/tab.rs b/crates/moon-ui-gpui/src/settings/hotkeys/tab.rs index 39639364..234f6890 100644 --- a/crates/moon-ui-gpui/src/settings/hotkeys/tab.rs +++ b/crates/moon-ui-gpui/src/settings/hotkeys/tab.rs @@ -21,8 +21,8 @@ use moon_core::config::{ use moon_core::feed::CoreConfigState; use moon_core::session::CoreId; use moon_ui::{ - MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonCheckboxSize, MoonDropdown, - MoonHotkeyInput, MoonKbd, MoonKbdSize, MoonMenuItem, MoonMenuSize, MoonPalette, MoonTabItem, + MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonDropdown, MoonHotkeyInput, + MoonKbd, MoonKbdSize, MoonMenuItem, MoonMenuSize, MoonPalette, MoonSize, MoonTabItem, MoonTabStrip, MoonText, MoonTooltip, MoonTooltipView, h_flex, rgba_from, v_flex, }; use rust_i18n::t; @@ -850,7 +850,7 @@ impl SettingsView { let backend = self.backend.clone(); let checkbox = MoonCheckbox::new("same-hotkeys-for-move") .checked(hotkeys.same_hotkeys_for_move) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |value, _window, cx| { backend.update(cx, |b, bcx| { if let Some(p) = b.preview.as_mut() { diff --git a/crates/moon-ui-gpui/src/settings/import_preview.rs b/crates/moon-ui-gpui/src/settings/import_preview.rs index c5d39145..6a23e9ff 100644 --- a/crates/moon-ui-gpui/src/settings/import_preview.rs +++ b/crates/moon-ui-gpui/src/settings/import_preview.rs @@ -9,8 +9,8 @@ use std::collections::HashSet; use gpui::*; use moon_ui::{ - MoonButton, MoonCheckbox, MoonPalette, MoonScrollableElement, StyledExt, h_flex, rgba_from, - v_flex, + MoonButton, MoonCheckbox, MoonPalette, MoonScrollableElement, MoonSize, StyledExt, h_flex, + rgba_from, v_flex, }; use rust_i18n::t; @@ -344,6 +344,7 @@ impl SettingsView { // The All checkbox toggles every target at once. .child( MoonCheckbox::new("imp-core-all") + .size(MoonSize::Sm) .checked(all_on) .label(t!("import.all_cores").to_string()) .on_change(cx.listener(|this, ch: &bool, _, cx| { @@ -359,6 +360,7 @@ impl SettingsView { for (idx, (_, name, on)) in state.cores.iter().enumerate() { row = row.child( MoonCheckbox::new(SharedString::from(format!("imp-core-{idx}"))) + .size(MoonSize::Sm) .checked(*on) .label(name.clone()) .on_change(cx.listener(move |this, ch: &bool, _, cx| { @@ -497,6 +499,7 @@ impl SettingsView { .gap(design::ui_px(cx, 6.0)) .child( MoonCheckbox::new(SharedString::from(format!("imp-{}", item.id))) + .size(MoonSize::Sm) .checked(state_checked) .label(wording::caption(&item.label)) .on_change(cx.listener(move |this, ch: &bool, _, cx| { diff --git a/crates/moon-ui-gpui/src/settings/lines.rs b/crates/moon-ui-gpui/src/settings/lines.rs index fdf6269a..0f02384e 100644 --- a/crates/moon-ui-gpui/src/settings/lines.rs +++ b/crates/moon-ui-gpui/src/settings/lines.rs @@ -5,8 +5,8 @@ use gpui::*; use moon_ui::{ - MoonCheckboxSize, MoonColorPicker, MoonColorPickerState, MoonPalette, MoonSliderState, - StyledExt, h_flex, v_flex, + MoonColorPicker, MoonColorPickerState, MoonPalette, MoonSize, MoonSliderState, StyledExt, + h_flex, v_flex, }; use super::{SettingsView, separator, slider_row}; @@ -283,7 +283,7 @@ impl SettingsView { } }) .label(label) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) } /// Wrap [`super::collapse_block`] for the Lines tab, storing expansion by `key`. diff --git a/crates/moon-ui-gpui/src/settings/security.rs b/crates/moon-ui-gpui/src/settings/security.rs index 5bb0406f..65dcb41a 100644 --- a/crates/moon-ui-gpui/src/settings/security.rs +++ b/crates/moon-ui-gpui/src/settings/security.rs @@ -21,8 +21,8 @@ mod vault; use gpui::prelude::FluentBuilder; use gpui::*; use moon_ui::{ - MoonButton, MoonButtonSize, MoonCheckbox, MoonCheckboxSize, MoonInput, MoonInputEvent, - MoonInputState, MoonPalette, MoonProgress, h_flex, rgba_from, v_flex, + MoonButton, MoonButtonSize, MoonCheckbox, MoonInput, MoonInputEvent, MoonInputState, + MoonPalette, MoonProgress, MoonSize, h_flex, rgba_from, v_flex, }; use rust_i18n::t; @@ -298,7 +298,7 @@ impl SettingsView { ) -> MoonCheckbox { MoonCheckbox::new(id) .checked(checked) - .size(MoonCheckboxSize::Normal) + .size(MoonSize::Sm) // Nothing to attach a password to until the config file is open. .disabled(!self.security.vault.editable) .on_change(cx.listener(move |this, checked: &bool, _window, cx| { diff --git a/crates/moon-ui-gpui/src/settings/storage.rs b/crates/moon-ui-gpui/src/settings/storage.rs index 33adf601..6a640955 100644 --- a/crates/moon-ui-gpui/src/settings/storage.rs +++ b/crates/moon-ui-gpui/src/settings/storage.rs @@ -7,7 +7,7 @@ //! on the UI thread would freeze the interface. use gpui::*; -use moon_ui::{MoonButton, MoonCheckboxSize, MoonPalette, StyledExt, h_flex, rgba_from, v_flex}; +use moon_ui::{MoonButton, MoonPalette, MoonSize, StyledExt, h_flex, rgba_from, v_flex}; use rust_i18n::t; use super::{SettingsView, StatusMsg, open_folder, section, separator}; @@ -280,7 +280,7 @@ impl SettingsView { moon_ui::MoonCheckbox::new("strat-db-enabled") .checked(enabled) .label(t!("storage.strategies_enabled").to_string()) - .size(MoonCheckboxSize::Normal) + .size(MoonSize::Sm) .on_change(cx.listener(|this, v: &bool, _, cx| { let v = *v; if this.storage.cfg.strategies.enabled != v { diff --git a/crates/moon-ui-gpui/src/settings/telegram.rs b/crates/moon-ui-gpui/src/settings/telegram.rs index 54ddd60f..794fa513 100644 --- a/crates/moon-ui-gpui/src/settings/telegram.rs +++ b/crates/moon-ui-gpui/src/settings/telegram.rs @@ -6,8 +6,8 @@ use gpui::prelude::FluentBuilder; use gpui::*; use moon_ui::{ - MoonAccent, MoonButton, MoonCheckboxSize, MoonGroupBox, MoonInput, MoonInputEvent, - MoonInputState, MoonPalette, MoonSegmentItem, MoonSegmentedControl, h_flex, rgba_from, v_flex, + MoonAccent, MoonButton, MoonGroupBox, MoonInput, MoonInputEvent, MoonInputState, MoonPalette, + MoonSegmentItem, MoonSegmentedControl, MoonSize, h_flex, rgba_from, v_flex, }; use rust_i18n::t; @@ -402,7 +402,7 @@ impl SettingsView { } }) .label(t!("telegram.mini_app").to_string()) - .size(MoonCheckboxSize::Normal), + .size(MoonSize::Sm), ) .child( div() diff --git a/crates/moon-ui-gpui/src/settings/telegram/access.rs b/crates/moon-ui-gpui/src/settings/telegram/access.rs index 25ef50e4..16afd034 100644 --- a/crates/moon-ui-gpui/src/settings/telegram/access.rs +++ b/crates/moon-ui-gpui/src/settings/telegram/access.rs @@ -3,7 +3,7 @@ use gpui::prelude::FluentBuilder; use gpui::*; use moon_core::config::telegram_access::TelegramReportAccess; use moon_ui::{ - MoonButton, MoonCheckboxSize, MoonGroupBox, MoonInput, MoonPalette, h_flex, rgba_from, v_flex, + MoonButton, MoonGroupBox, MoonInput, MoonPalette, MoonSize, h_flex, rgba_from, v_flex, }; use rust_i18n::t; @@ -388,7 +388,7 @@ impl SettingsView { }, ) .label(label) - .size(MoonCheckboxSize::Normal), + .size(MoonSize::Sm), ); } content.when(count == 0, |content| { diff --git a/crates/moon-ui-gpui/src/settings/telegram/core_section.rs b/crates/moon-ui-gpui/src/settings/telegram/core_section.rs index 56a31fd8..f45c7396 100644 --- a/crates/moon-ui-gpui/src/settings/telegram/core_section.rs +++ b/crates/moon-ui-gpui/src/settings/telegram/core_section.rs @@ -9,8 +9,8 @@ use gpui::prelude::FluentBuilder; use gpui::*; use moon_ui::{ MoonButton, MoonButtonIconSlot, MoonButtonSize, MoonButtonVariant, MoonCheckbox, - MoonCheckboxSize, MoonDisclosureDirection, MoonDropdown, MoonGroupBox, MoonInput, - MoonInputState, MoonMenuItem, MoonMenuSize, MoonPalette, h_flex, rgba_from, v_flex, + MoonDisclosureDirection, MoonDropdown, MoonGroupBox, MoonInput, MoonInputState, MoonMenuItem, + MoonMenuSize, MoonPalette, MoonSize, h_flex, rgba_from, v_flex, }; use rust_i18n::t; @@ -293,7 +293,7 @@ impl SettingsView { .checked(enabled) .disabled(!live) .mono(false) - .size(MoonCheckboxSize::Normal) + .size(MoonSize::Sm) .on_change(cx.listener(move |this, ch: &bool, _, cx| { let v = *ch; if let Some(core) = this.telegram.core.picked { diff --git a/crates/moon-ui-gpui/src/settings/telegram/core_section/login_steps.rs b/crates/moon-ui-gpui/src/settings/telegram/core_section/login_steps.rs index b4c57074..1d9fb411 100644 --- a/crates/moon-ui-gpui/src/settings/telegram/core_section/login_steps.rs +++ b/crates/moon-ui-gpui/src/settings/telegram/core_section/login_steps.rs @@ -5,8 +5,8 @@ use gpui::*; use moon_ui::{ - MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonCheckboxSize, MoonInput, - MoonInputState, MoonPalette, MoonWindowExt as _, h_flex, rgba_from, v_flex, + MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonInput, MoonInputState, + MoonPalette, MoonSize, MoonWindowExt as _, h_flex, rgba_from, v_flex, }; use rust_i18n::t; @@ -471,7 +471,7 @@ impl SettingsView { .label(t!("telegram_core.terms_accept").to_string()) .checked(accepted) .mono(false) - .size(MoonCheckboxSize::Normal) + .size(MoonSize::Sm) .on_change(cx.listener(move |this, ch: &bool, _, cx| { this.telegram.core.terms_accepted = if *ch { Some((core, terms_for_click.clone())) diff --git a/crates/moon-ui-gpui/src/shell/core_settings_popup.rs b/crates/moon-ui-gpui/src/shell/core_settings_popup.rs index 2ba63c2d..2ce14ca3 100644 --- a/crates/moon-ui-gpui/src/shell/core_settings_popup.rs +++ b/crates/moon-ui-gpui/src/shell/core_settings_popup.rs @@ -20,8 +20,8 @@ mod widgets; use gpui::prelude::FluentBuilder; use gpui::*; use moon_ui::{ - MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonCheckboxSize, MoonInputState, - MoonPalette, MoonSliderState, MoonTabItem, MoonTabStrip, h_flex, rgba_from, v_flex, + MoonButton, MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonInputState, MoonPalette, + MoonSize, MoonSliderState, MoonTabItem, MoonTabStrip, h_flex, rgba_from, v_flex, }; use rust_i18n::t; @@ -325,7 +325,7 @@ fn expert_switch(ctx: &TabCtx<'_>, view: &Entity, cx: &App) -> impl IntoE MoonCheckbox::new("core-settings-expert") .label(t!("core_settings.expert").to_string()) .checked(checked) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |value, window, app| { if !*value { return; diff --git a/crates/moon-ui-gpui/src/shell/core_settings_popup/widgets.rs b/crates/moon-ui-gpui/src/shell/core_settings_popup/widgets.rs index 75892b4e..d93c770c 100644 --- a/crates/moon-ui-gpui/src/shell/core_settings_popup/widgets.rs +++ b/crates/moon-ui-gpui/src/shell/core_settings_popup/widgets.rs @@ -7,8 +7,8 @@ use gpui::prelude::FluentBuilder; use gpui::*; use moon_ui::{ - MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonCheckboxSize, MoonDropdown, MoonInput, - MoonMenuSize, MoonPalette, MoonSlider, h_flex, v_flex, + MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonDropdown, MoonInput, MoonMenuSize, + MoonPalette, MoonSize, MoonSlider, h_flex, v_flex, }; use rust_i18n::t; @@ -141,7 +141,7 @@ pub(super) fn cs_checkbox( MoonCheckbox::new(SharedString::from(id.to_string())) .label(label) .checked(checked) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |ch: &bool, _w, app| { let on = *ch; let b = backend.read(app); @@ -241,7 +241,7 @@ pub(super) fn flag( MoonCheckbox::new(SharedString::from(id)) .label(label) .checked(checked) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |ch: &bool, _w, app| { let on = *ch; view.update(app, |this, cx| { diff --git a/crates/moon-ui-gpui/src/shell/quiet_popup.rs b/crates/moon-ui-gpui/src/shell/quiet_popup.rs index b448db51..6e9718a7 100644 --- a/crates/moon-ui-gpui/src/shell/quiet_popup.rs +++ b/crates/moon-ui-gpui/src/shell/quiet_popup.rs @@ -10,7 +10,7 @@ //! The checkbox rows write straight through the backend, like the Core Status alert popup. use gpui::*; -use moon_ui::{MoonCheckbox, MoonCheckboxSize, MoonInput, MoonPalette, h_flex, v_flex}; +use moon_ui::{MoonCheckbox, MoonInput, MoonPalette, MoonSize, h_flex, v_flex}; use rust_i18n::t; use moon_core::config::quiet::QuietCfg; @@ -223,7 +223,7 @@ impl Shell { MoonCheckbox::new(SharedString::from(format!("header-{id}"))) .label(label) .checked(checked) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .mono(true) .on_change(move |value, _window, cx| { let value = *value; diff --git a/crates/moon-ui-gpui/src/shell/workspace/rail_settings.rs b/crates/moon-ui-gpui/src/shell/workspace/rail_settings.rs index b4bb80d2..edfccdda 100644 --- a/crates/moon-ui-gpui/src/shell/workspace/rail_settings.rs +++ b/crates/moon-ui-gpui/src/shell/workspace/rail_settings.rs @@ -8,7 +8,7 @@ use gpui::*; use moon_core::config::layout::WindowLayout; use moon_ui::{ - MoonCheckbox, MoonCheckboxSize, MoonPalette, MoonPopover, MoonPopoverPlacement, h_flex, v_flex, + MoonCheckbox, MoonPalette, MoonPopover, MoonPopoverPlacement, MoonSize, h_flex, v_flex, }; use rust_i18n::t; @@ -264,7 +264,7 @@ fn settings_content( ))) .label(t!(row.label).to_string()) .checked((row.read)(&prefs)) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |checked: &bool, _window, app| { let checked = *checked; backend.update(app, |backend, backend_cx| { diff --git a/crates/moon-ui-gpui/src/strategies/mod.rs b/crates/moon-ui-gpui/src/strategies/mod.rs index 153cb1b6..52373df0 100644 --- a/crates/moon-ui-gpui/src/strategies/mod.rs +++ b/crates/moon-ui-gpui/src/strategies/mod.rs @@ -47,12 +47,12 @@ use gpui::prelude::FluentBuilder; use gpui::*; use moon_ui::{ MoonAlert, MoonBackgroundPolicy, MoonBadge, MoonBadgeSize, MoonBadgeVariant, MoonButton, - MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonCheckboxSize, MoonColorPicker, - MoonColorPickerEvent, MoonColorPickerState, MoonDropdown, MoonInput, MoonInputEvent, - MoonInputState, MoonMenuItem, MoonMenuSize, MoonPalette, MoonScrollbarVisibility, - MoonSegmentItem, MoonSegmentedControl, MoonTextArea, MoonTextAreaEvent, MoonTextAreaState, - MoonTone, MoonTreeEvent, MoonTreeItem, MoonTreeState, MoonVirtualList, - MoonVirtualListScrollHandle, MoonWindowExt as _, MoonWindowFrame, Root, h_flex, v_flex, + MoonButtonSize, MoonButtonVariant, MoonCheckbox, MoonColorPicker, MoonColorPickerEvent, + MoonColorPickerState, MoonDropdown, MoonInput, MoonInputEvent, MoonInputState, MoonMenuItem, + MoonMenuSize, MoonPalette, MoonScrollbarVisibility, MoonSegmentItem, MoonSegmentedControl, + MoonSize, MoonTextArea, MoonTextAreaEvent, MoonTextAreaState, MoonTone, MoonTreeEvent, + MoonTreeItem, MoonTreeState, MoonVirtualList, MoonVirtualListScrollHandle, MoonWindowExt as _, + MoonWindowFrame, Root, h_flex, v_flex, }; use crate::design::{moon, moon_alpha}; diff --git a/crates/moon-ui-gpui/src/strategies/params.rs b/crates/moon-ui-gpui/src/strategies/params.rs index e1581ed4..cdd8a5e3 100644 --- a/crates/moon-ui-gpui/src/strategies/params.rs +++ b/crates/moon-ui-gpui/src/strategies/params.rs @@ -1762,7 +1762,7 @@ impl StrategiesView { .checked(on) .indeterminate(differ) .disabled(!active) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(cx.listener(move |this, ch: &bool, _, cx| { this.stage_field_value( &keys, diff --git a/crates/moon-ui-gpui/src/strategies/settings.rs b/crates/moon-ui-gpui/src/strategies/settings.rs index c9078b40..6ac3122d 100644 --- a/crates/moon-ui-gpui/src/strategies/settings.rs +++ b/crates/moon-ui-gpui/src/strategies/settings.rs @@ -12,7 +12,7 @@ use moon_core::config::layout::{ STRATEGIES_TREE_TEXT_STEP_MIN, WindowLayout, clamp_strategies_tree_text_step, }; use moon_ui::{ - MoonCheckbox, MoonCheckboxSize, MoonGroupBox, MoonPalette, MoonPopover, MoonPopoverPlacement, + MoonCheckbox, MoonGroupBox, MoonPalette, MoonPopover, MoonPopoverPlacement, MoonSize, MoonStepper, MoonStepperSize, MoonTheme, h_flex, v_flex, }; use rust_i18n::t; @@ -312,7 +312,7 @@ impl StrategiesView { .child( MoonCheckbox::new("strategies-active-only-mark") .checked(checked) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |value: &bool, _window, app| { let value = *value; view.update(app, |this, cx| this.set_active_only(value, cx)); @@ -629,7 +629,7 @@ fn pref_group( MoonCheckbox::new(SharedString::from(format!("strategies-pref-{}", row.id))) .label(t!(row.label).to_string()) .checked((row.read)(&prefs)) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) .on_change(move |checked: &bool, _window, app| { let checked = *checked; target.update(app, |this, cx| this.write_pref(row, checked, cx)); diff --git a/crates/moon-ui-gpui/src/strategies/tree/checks.rs b/crates/moon-ui-gpui/src/strategies/tree/checks.rs index c625a39f..1cc11586 100644 --- a/crates/moon-ui-gpui/src/strategies/tree/checks.rs +++ b/crates/moon-ui-gpui/src/strategies/tree/checks.rs @@ -12,7 +12,7 @@ //! Both boxes are built here so their tone, size and id convention cannot drift apart, and both //! stage through [`stage_value`], the one rule deciding what a click leaves in `staged`. -use moon_ui::{MoonCheckbox, MoonCheckboxSize, MoonTone}; +use moon_ui::{MoonCheckbox, MoonSize, MoonTone}; use super::super::logic::{ strategy_core_is_visible, subtree_check_targets, subtree_displayed_all_checked, @@ -37,7 +37,7 @@ pub(super) fn row_checkbox(id: SharedString, checked: bool) -> MoonCheckbox { MoonCheckbox::new(id) .checked(checked) .tone(MoonTone::Positive) - .size(MoonCheckboxSize::Compact) + .size(MoonSize::Sm) } /// Decide what one checkbox click leaves in [`StrategiesView::staged`] for a single strategy. From a031fed57ee22d56e20e68f18b61e0bb9308319f Mon Sep 17 00:00:00 2001 From: ThisMad Date: Sun, 13 Sep 2026 21:12:57 +0200 Subject: [PATCH 2/5] fix(ui): stop fixed-width columns from clipping Sm checkboxes Three wrappers still sized for the old 12px compact box. The order-edit stop toggles and the manual-strategy slot column become minimum widths, so the rows keep their column alignment while a longer (localized) label is never cut off. The tuner time grid drops its hard-coded `CHECK_COL` width: the checkboxes size themselves, and the slider rows reserve the same column with an invisible `Sm` checkbox - the strategy tree's `bulk_check_slot` technique - so the columns match MoonUI's own box at any UI zoom. Co-Authored-By: Claude Opus 5 (1M context) --- .../src/analytics/tuner/time/grid.rs | 7 +------ .../src/analytics/tuner/time/sliders.rs | 17 ++++++++++++----- .../src/controls/manual_strat/settings.rs | 2 +- .../moon-ui-gpui/src/panels/order_edit/body.rs | 4 +++- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/crates/moon-ui-gpui/src/analytics/tuner/time/grid.rs b/crates/moon-ui-gpui/src/analytics/tuner/time/grid.rs index 58284520..38257485 100644 --- a/crates/moon-ui-gpui/src/analytics/tuner/time/grid.rs +++ b/crates/moon-ui-gpui/src/analytics/tuner/time/grid.rs @@ -28,10 +28,6 @@ use crate::design; use crate::design::{moon, moon_alpha}; use moon_core::db::tuner::TimeWindow; -/// Width of the row-checkbox column, in `design::ui_px` units. The header spacer and the -/// slider lead-in reuse it so the field names stay in one line down the card; it is sized -/// above the compact checkbox's own box, which moonui draws at a fixed size. -pub(in crate::analytics::tuner) const CHECK_COL: f32 = 16.0; /// Field-name column: fits "WorkingWeekTime" on one line next to the checkbox. pub(in crate::analytics::tuner) const NAME_COL: f32 = 110.0; @@ -386,7 +382,7 @@ impl AnalyticsView { .bg(moon(p.table_head)) // Master checkbox over the rows' column — the filter tuner's "all on/off". .child( - div().w(design::ui_px(cx, CHECK_COL)).flex_none().child( + div().flex_none().child( MoonCheckbox::new("tt-en-all") .checked(self.time_tuner.enabled.iter().all(|&e| e)) .size(MoonSize::Sm) @@ -530,7 +526,6 @@ impl AnalyticsView { let check = div() .id(SharedString::from(format!("tt-en-w-{field}"))) .flex_none() - .w(design::ui_px(cx, CHECK_COL)) .tooltip(move |_w, cx| cx.new(|_| MoonTooltipView::new(tip.clone())).into()) .child( MoonCheckbox::new(SharedString::from(format!("tt-en-{field}"))) diff --git a/crates/moon-ui-gpui/src/analytics/tuner/time/sliders.rs b/crates/moon-ui-gpui/src/analytics/tuner/time/sliders.rs index 53445ada..bd90f3aa 100644 --- a/crates/moon-ui-gpui/src/analytics/tuner/time/sliders.rs +++ b/crates/moon-ui-gpui/src/analytics/tuner/time/sliders.rs @@ -13,12 +13,12 @@ //! cursor is not lost once it leaves the track. use gpui::*; -use moon_ui::{MoonPalette, h_flex, v_flex}; +use moon_ui::{MoonCheckbox, MoonPalette, MoonSize, h_flex, v_flex}; use rust_i18n::t; use super::super::super::AnalyticsView; use super::super::super::calendar::split_i18n; -use super::grid::{CHECK_COL, NAME_COL}; +use super::grid::NAME_COL; use super::state::{WEEK_MIN, fmt_min, fmt_week_ep, parse_moh, parse_time}; use crate::design; use crate::design::{moon, moon_alpha}; @@ -437,11 +437,18 @@ impl AnalyticsView { h_flex() .w_full() .items_end() - // Gap 4 (not 6) plus a CHECK_COL lead-in: together they reproduce the grid - // row's checkbox column, so the slider labels stay under the field names. + // Gap 4 (not 6) plus a checkbox-wide lead-in: together they reproduce the grid + // row's checkbox column, so the slider labels stay under the field names. The + // lead-in is an invisible `Sm` checkbox rather than a stated width, so it keeps MoonUI's + // own box size at any UI zoom; hidden, it takes layout but paints nothing. .gap(design::ui_px(cx, 4.0)) .opacity(if dim { 0.5 } else { 1.0 }) - .child(div().w(design::ui_px(cx, CHECK_COL)).flex_none()) + .child( + div().flex_none().invisible().child( + MoonCheckbox::new(SharedString::from(format!("tt-slider-lead-{field}"))) + .size(MoonSize::Sm), + ), + ) .child( // Matches the grid's field-name column so the slider labels line up under it. div() diff --git a/crates/moon-ui-gpui/src/controls/manual_strat/settings.rs b/crates/moon-ui-gpui/src/controls/manual_strat/settings.rs index 8dd48be1..97c72593 100644 --- a/crates/moon-ui-gpui/src/controls/manual_strat/settings.rs +++ b/crates/moon-ui-gpui/src/controls/manual_strat/settings.rs @@ -131,7 +131,7 @@ pub(super) fn slot_settings_content( .gap(gap) .child( div() - .w(px(design::font_w(cx, SLOT_COL_W))) + .min_w(px(design::font_w(cx, SLOT_COL_W))) .flex_none() .child( MoonCheckbox::new(SharedString::from(format!("ms-slot-show-{slot}"))) diff --git a/crates/moon-ui-gpui/src/panels/order_edit/body.rs b/crates/moon-ui-gpui/src/panels/order_edit/body.rs index 34b065aa..7c4d03b2 100644 --- a/crates/moon-ui-gpui/src/panels/order_edit/body.rs +++ b/crates/moon-ui-gpui/src/panels/order_edit/body.rs @@ -159,8 +159,10 @@ pub(super) fn dialog_body(state: &Entity, cx: &mut App) -> AnyEl apply: fn(&mut OrderEditState, bool)| -> AnyElement { let st = state.clone(); + // A floor, not a fixed width: it lines the rows' columns up, but a localized label can be + // longer than the column and must never be clipped by it. div() - .w(px(w)) + .min_w(px(w)) .flex_none() .child( MoonCheckbox::new(SharedString::from(id)) From 154cee0a77a236d5cacec619065f9c97741c30d3 Mon Sep 17 00:00:00 2001 From: ThisMad Date: Sun, 13 Sep 2026 21:13:37 +0200 Subject: [PATCH 3/5] fix(ui): measure checkbox labels at the Sm tier's fixed geometry Two settings popups size themselves from a mirror of the checkbox's geometry in `panels/common.rs`, and a few rows copy its label face. That mirror still described the old compact box (12px mark, 6px gap, 9.5px label), so the popups came out too narrow for the new `Sm` checkbox. It now mirrors `Sm` (16px box, 8px gap, 14px medium label). MoonUI fixes a tier checkbox's text: it follows the UI zoom but not the Font slider. Measuring it through `ui_text_width` would add the slider's delta, so `design::ui_text_width_zoomed` measures at `ui(base)` instead, sharing the glyph-advance cache. The Strategies and Assets popups measure their checkbox labels with it, and the rows that copy the label face size their text with `ui_px` rather than the font-scaled `text_px`. Co-Authored-By: Claude Opus 5 (1M context) --- .../chart_tabs/main_stack/empty/arrange.rs | 2 +- .../src/chart_tabs/main_stack/empty/detect.rs | 2 +- crates/moon-ui-gpui/src/design.rs | 43 ++++++++++++++++--- .../src/panels/assets/settings.rs | 9 ++-- crates/moon-ui-gpui/src/panels/common.rs | 29 ++++++++----- crates/moon-ui-gpui/src/panels/mod.rs | 11 ++--- .../moon-ui-gpui/src/strategies/settings.rs | 32 +++++++++----- 7 files changed, 91 insertions(+), 37 deletions(-) diff --git a/crates/moon-ui-gpui/src/chart_tabs/main_stack/empty/arrange.rs b/crates/moon-ui-gpui/src/chart_tabs/main_stack/empty/arrange.rs index c6c13a73..8d5c6c1d 100644 --- a/crates/moon-ui-gpui/src/chart_tabs/main_stack/empty/arrange.rs +++ b/crates/moon-ui-gpui/src/chart_tabs/main_stack/empty/arrange.rs @@ -268,7 +268,7 @@ fn row( div() .flex_1() .min_w_0() - .text_size(design::text_px(cx, COMPACT_CHECKBOX_FONT)) + .text_size(design::ui_px(cx, COMPACT_CHECKBOX_FONT)) .text_color(rgb(palette.text_soft)) .child(t!(block_label(block)).to_string()), ) diff --git a/crates/moon-ui-gpui/src/chart_tabs/main_stack/empty/detect.rs b/crates/moon-ui-gpui/src/chart_tabs/main_stack/empty/detect.rs index 0c9ea096..020d39db 100644 --- a/crates/moon-ui-gpui/src/chart_tabs/main_stack/empty/detect.rs +++ b/crates/moon-ui-gpui/src/chart_tabs/main_stack/empty/detect.rs @@ -505,7 +505,7 @@ fn field_row( // soft text, and the same fade when dead. div() .flex_1() - .text_size(design::text_px(cx, COMPACT_CHECKBOX_FONT)) + .text_size(design::ui_px(cx, COMPACT_CHECKBOX_FONT)) .text_color(if enabled { rgba_from(palette.text_soft, 1.0) } else { diff --git a/crates/moon-ui-gpui/src/design.rs b/crates/moon-ui-gpui/src/design.rs index 80c577f6..4e9e3e0b 100644 --- a/crates/moon-ui-gpui/src/design.rs +++ b/crates/moon-ui-gpui/src/design.rs @@ -1085,15 +1085,18 @@ pub const ACTION_LABEL_BASE: f32 = 10.5; /// font: a key derived from a hand-copied version of these three lines would keep validating stale /// widths the day the resolution changes. fn measure_font(cx: &App, base_font_size: f32, weight: f32, mono: bool) -> (FontId, Pixels) { + let size = MoonTheme::active_tokens(cx).font(base_font_size); + measure_font_at(cx, px(size), weight, mono) +} + +/// Resolve the active theme font at an already rendered `size`. +fn measure_font_at(cx: &App, size: Pixels, weight: f32, mono: bool) -> (FontId, Pixels) { let tokens = MoonTheme::active_tokens(cx); let font = Font { weight: FontWeight(weight), ..font(tokens.font_family(mono)) }; - ( - cx.text_system().resolve_font(&font), - px(tokens.font(base_font_size)), - ) + (cx.text_system().resolve_font(&font), size) } /// Identity of the typography a text measurement was taken under. @@ -1134,6 +1137,37 @@ pub fn text_metrics_key(cx: &App, base_font_size: f32, weight: f32, mono: bool) /// Returns: /// The summed glyph-advance estimate in pixels. pub fn ui_text_width(cx: &App, text: &str, base_font_size: f32, weight: f32, mono: bool) -> f32 { + glyph_advance_width(cx, text, measure_font(cx, base_font_size, weight, mono)) +} + +/// Estimate text width for text that follows only the UI zoom, not the Font slider. +/// +/// For MoonUI controls whose tiers fix their text size, such as the `Sm`/`Md` `MoonCheckbox` +/// label: that text renders at `ui(base_font_size)` whatever the Font slider says, so measuring it +/// through [`ui_text_width`] would over-reserve by the slider's delta. Same estimate otherwise. +/// +/// Args: +/// cx: Application context providing active tokens and the text system. +/// text: Text to measure. +/// base_font_size: Design size before UI zoom. +/// weight: Font weight represented as the GPUI numeric value. +/// mono: Whether to use the theme's monospaced rather than UI font family. +/// +/// Returns: +/// The summed glyph-advance estimate in pixels. +pub fn ui_text_width_zoomed( + cx: &App, + text: &str, + base_font_size: f32, + weight: f32, + mono: bool, +) -> f32 { + let size = ui_px(cx, base_font_size); + glyph_advance_width(cx, text, measure_font_at(cx, size, weight, mono)) +} + +/// Sum the cached glyph advances of `text` in one resolved font and size. +fn glyph_advance_width(cx: &App, text: &str, (font_id, size): (FontId, Pixels)) -> f32 { // Counted, because the callers run this every frame: see `diag::UI_TEXT_WIDTH_CALLS`. let measured = crate::diag::timer(); crate::diag::bump(&crate::diag::UI_TEXT_WIDTH_CALLS); @@ -1141,7 +1175,6 @@ pub fn ui_text_width(cx: &App, text: &str, base_font_size: f32, weight: f32, mon &crate::diag::UI_TEXT_WIDTH_CHARS, text.chars().count() as u64, ); - let (font_id, size) = measure_font(cx, base_font_size, weight, mono); let size_bits = size.as_f32().to_bits(); let ts = cx.text_system(); let width: f32 = GLYPH_ADVANCE.with(|cache| { diff --git a/crates/moon-ui-gpui/src/panels/assets/settings.rs b/crates/moon-ui-gpui/src/panels/assets/settings.rs index 282a9231..af034261 100644 --- a/crates/moon-ui-gpui/src/panels/assets/settings.rs +++ b/crates/moon-ui-gpui/src/panels/assets/settings.rs @@ -11,8 +11,9 @@ use super::*; use moon_ui::{MoonCheckbox, MoonGroupBox, MoonPopover, MoonPopoverPlacement, MoonSize, MoonTheme}; use crate::panels::{ - COMPACT_CHECKBOX_FONT, COMPACT_CHECKBOX_GAP, COMPACT_CHECKBOX_MARK, POPUP_GROUP_CAPTION_FONT, - popup_close_button, popup_gear_trigger, popup_group, popup_group_inset_px, popup_title, + COMPACT_CHECKBOX_FONT, COMPACT_CHECKBOX_GAP, COMPACT_CHECKBOX_MARK, COMPACT_CHECKBOX_WEIGHT, + POPUP_GROUP_CAPTION_FONT, popup_close_button, popup_gear_trigger, popup_group, + popup_group_inset_px, popup_title, }; /// Caption of the popup's display-preferences group. @@ -162,11 +163,11 @@ fn settings_content_width(cx: &App) -> f32 { 600.0, true, ); - let label_width = design::ui_text_width( + let label_width = design::ui_text_width_zoomed( cx, &t!(GROUP_BY_VENUE_LABEL), COMPACT_CHECKBOX_FONT, - 400.0, + COMPACT_CHECKBOX_WEIGHT, false, ); let checkbox_leading = f32::from(design::ui_px( diff --git a/crates/moon-ui-gpui/src/panels/common.rs b/crates/moon-ui-gpui/src/panels/common.rs index 0fdbb731..def087d9 100644 --- a/crates/moon-ui-gpui/src/panels/common.rs +++ b/crates/moon-ui-gpui/src/panels/common.rs @@ -343,20 +343,27 @@ pub(crate) const POPUP_GROUP_PAD: f32 = 6.0; /// all three. pub(crate) const POPUP_GROUP_INSET: f32 = 2.0 * (POPUP_GROUP_PAD + 1.0); -/// Compact `MoonCheckbox` mark width in design units. +/// `MoonSize::Sm` `MoonCheckbox` box width in design units. /// -/// The Compact checkbox's own geometry, which MoonUI exposes as a size variant rather than as -/// readable tokens: a settings popup that measures its content has to know how much room the mark -/// and its gap take before the label starts. Stated once here for the same reason -/// [`POPUP_GROUP_INSET`] is — two popups measuring the same control with numbers of their own -/// drift apart the first time either is nudged. -pub(crate) const COMPACT_CHECKBOX_MARK: f32 = 12.0; +/// The `Sm` checkbox's own geometry, which MoonUI exposes as a size tier rather than as readable +/// tokens: a settings popup that measures its content has to know how much room the box and its +/// gap take before the label starts. Stated once here for the same reason [`POPUP_GROUP_INSET`] +/// is — two popups measuring the same control with numbers of their own drift apart the first time +/// either is nudged. MIRRORS MoonUI's `MoonCheckboxMetrics::base_for_size(Size::Small)`. +pub(crate) const COMPACT_CHECKBOX_MARK: f32 = 16.0; -/// Design-unit gap a compact `MoonCheckbox` leaves between its mark and its label. -pub(crate) const COMPACT_CHECKBOX_GAP: f32 = 6.0; +/// Design-unit gap an `Sm` `MoonCheckbox` leaves between its box and its label. +pub(crate) const COMPACT_CHECKBOX_GAP: f32 = 8.0; -/// Compact `MoonCheckbox` label size before font scaling. -pub(crate) const COMPACT_CHECKBOX_FONT: f32 = 9.5; +/// `Sm` `MoonCheckbox` label size before UI zoom. +/// +/// MoonUI fixes a tier checkbox's text: it follows the UI zoom but not the Font slider. Size text +/// that matches this label with `design::ui_px` and measure it with `design::ui_text_width_zoomed`, +/// never through the font-scaled `text_px` / `ui_text_width`, which would add the slider's delta. +pub(crate) const COMPACT_CHECKBOX_FONT: f32 = 14.0; + +/// `Sm` `MoonCheckbox` label weight (medium), as GPUI's numeric font weight. +pub(crate) const COMPACT_CHECKBOX_WEIGHT: f32 = 500.0; /// Opacity a compact `MoonCheckbox` fades its label to while disabled. /// diff --git a/crates/moon-ui-gpui/src/panels/mod.rs b/crates/moon-ui-gpui/src/panels/mod.rs index 545dfabb..77152da7 100644 --- a/crates/moon-ui-gpui/src/panels/mod.rs +++ b/crates/moon-ui-gpui/src/panels/mod.rs @@ -49,11 +49,12 @@ pub(crate) mod tab_menu; pub(crate) use arb_edit::open_arb_edit; pub(crate) use common::{ COMPACT_CHECKBOX_DISABLED_ALPHA, COMPACT_CHECKBOX_FONT, COMPACT_CHECKBOX_GAP, - COMPACT_CHECKBOX_MARK, FooterWeight, POPUP_GROUP_CAPTION_FONT, POPUP_GROUP_GAP, - POPUP_GROUP_INSET, RadioMark, RenderGate, data_table_host, detach_button, footer_caption, - footer_row, footer_text_style, footer_value, micro_button, micro_icon_button, num, panel_band, - pinned_scope_host, popup_apply_all_button, popup_close_button, popup_frame, popup_gear_trigger, - popup_group, popup_group_inset_px, popup_title, radio_items, side_label, toggle_variant, + COMPACT_CHECKBOX_MARK, COMPACT_CHECKBOX_WEIGHT, FooterWeight, POPUP_GROUP_CAPTION_FONT, + POPUP_GROUP_GAP, POPUP_GROUP_INSET, RadioMark, RenderGate, data_table_host, detach_button, + footer_caption, footer_row, footer_text_style, footer_value, micro_button, micro_icon_button, + num, panel_band, pinned_scope_host, popup_apply_all_button, popup_close_button, popup_frame, + popup_gear_trigger, popup_group, popup_group_inset_px, popup_title, radio_items, side_label, + toggle_variant, }; pub(crate) use label_edit::open_label_edit; pub(crate) use order_edit::open_order_edit; diff --git a/crates/moon-ui-gpui/src/strategies/settings.rs b/crates/moon-ui-gpui/src/strategies/settings.rs index 6ac3122d..e02edfa6 100644 --- a/crates/moon-ui-gpui/src/strategies/settings.rs +++ b/crates/moon-ui-gpui/src/strategies/settings.rs @@ -20,8 +20,9 @@ use rust_i18n::t; use super::StrategiesView; use crate::design::{self, moon}; use crate::panels::{ - COMPACT_CHECKBOX_FONT, COMPACT_CHECKBOX_GAP, COMPACT_CHECKBOX_MARK, POPUP_GROUP_CAPTION_FONT, - popup_close_button, popup_gear_trigger, popup_group, popup_group_inset_px, popup_title, + COMPACT_CHECKBOX_FONT, COMPACT_CHECKBOX_GAP, COMPACT_CHECKBOX_MARK, COMPACT_CHECKBOX_WEIGHT, + POPUP_GROUP_CAPTION_FONT, popup_close_button, popup_gear_trigger, popup_group, + popup_group_inset_px, popup_title, }; #[cfg(test)] @@ -411,18 +412,13 @@ fn settings_content_width(cx: &App) -> f32 { let group_width = design::ui_text_width(cx, &group, POPUP_GROUP_CAPTION_FONT, 600.0, true); let checkbox_label_width = POPUP_ROWS .iter() - .map(|row| popup_text_width(cx, &t!(row.label), COMPACT_CHECKBOX_FONT, 400.0)) + .map(|row| checkbox_face_width(cx, &t!(row.label), COMPACT_CHECKBOX_WEIGHT)) .fold(0.0_f32, f32::max); let checkbox_leading = f32::from(design::ui_px( cx, COMPACT_CHECKBOX_MARK + COMPACT_CHECKBOX_GAP, )); - let text_step_label_width = popup_text_width( - cx, - &t!("strat.settings.text_step"), - COMPACT_CHECKBOX_FONT, - 400.0, - ); + let text_step_label_width = checkbox_face_width(cx, &t!("strat.settings.text_step"), 400.0); // The stepper's two halves scale differently, so they are reserved differently: its buttons // reach `MoonButton::width`, which draws a RAW pixel width, while its value cell is // `ui()`-scaled. Reserving `ui(button*2 + value)` agreed with the rendered control only at @@ -463,6 +459,22 @@ fn popup_text_width(cx: &App, text: &str, base_size: f32, weight: f32) -> f32 { design::ui_text_width(cx, text, base_size, weight, false) } +/// Measure text set in the `Sm` checkbox label's face, in the popup's proportional family. +/// +/// That face follows the UI zoom but not the Font slider (see [`COMPACT_CHECKBOX_FONT`]), so it is +/// measured apart from [`popup_text_width`], which adds the slider's delta. +/// +/// Args: +/// cx: Application context providing active tokens and the text system. +/// text: Text to measure. +/// weight: Font weight represented as the GPUI numeric value. +/// +/// Returns: +/// The summed glyph-advance estimate in pixels. +fn checkbox_face_width(cx: &App, text: &str, weight: f32) -> f32 { + design::ui_text_width_zoomed(cx, text, COMPACT_CHECKBOX_FONT, weight, false) +} + /// Pure arithmetic core of [`settings_content_width`], free of `cx` and the GPUI text system. /// /// Split out so a later prover can assert on the `max`/`+` nesting directly: `title_w.max(group_ @@ -525,7 +537,7 @@ fn tree_text_step_row( .flex_1() .min_w_0() .truncate() - .text_size(design::text_px(cx, COMPACT_CHECKBOX_FONT)) + .text_size(design::ui_px(cx, COMPACT_CHECKBOX_FONT)) .child(t!("strat.settings.text_step").to_string()), ) .child( From d597cdcc75602645a3169ee90e604b7c3375c287 Mon Sep 17 00:00:00 2001 From: ThisMad Date: Sun, 13 Sep 2026 21:14:05 +0200 Subject: [PATCH 4/5] feat(ui): checkbox titles and hints through MoonCheckbox label and description MoonUI's checkbox now renders supporting text under its label (`.description()`). Every place that drew a checkbox's hint as a separate muted element below it, or its title as separate text beside a bare box, now hands that text to the checkbox itself, so the title is part of the hit target and the hint aligns under it in the standard muted style. - Descriptions: General (split tabs, control zones, idle close, file log), Telegram Mini App, Security launch and servers.enc passwords, Storage strategy history, chart graphics hide toggles, manual-strategy stop logic, tuner compose, core-settings expert mode, and the core expert Telegram premium and debug-data rows (via a new `flag_described` helper). - General keeps `settings_hint`'s first-sentence shortening: `checkbox_with_hint` shows the short text as the description and hosts the full text in the same wide tooltip over the whole control. - Labels: the Strategies active-only filter (one labelled checkbox instead of a caption and a mark with two click handlers; the contract test now requires that), the tuner round-results toggle, and the News untagged and `#tag` visibility rows (mono label for tag identifiers). Left alone on purpose: the connections group header (an icon sits between box and name), the tuner grids' unlabelled master checkboxes (kept bare for column alignment), and hints that describe a group of controls rather than one checkbox. Co-Authored-By: Claude Opus 5 (1M context) --- .../src/analytics/tuner/coins/picker.rs | 1 - .../src/analytics/tuner/filter/mod.rs | 1 - .../moon-ui-gpui/src/analytics/tuner/shell.rs | 70 +++++------- .../src/analytics/tuner/time/grid.rs | 1 - .../src/chart_tabs/graphics_popup.rs | 14 +-- .../src/controls/manual_strat/settings.rs | 33 ++---- .../src/core_expert/pages/login.rs | 10 +- .../src/core_expert/pages/telegram.rs | 28 ++--- .../moon-ui-gpui/src/core_expert/widgets.rs | 17 +++ crates/moon-ui-gpui/src/panels/news/mod.rs | 38 ++----- crates/moon-ui-gpui/src/settings/general.rs | 103 +++++++++++------- crates/moon-ui-gpui/src/settings/security.rs | 17 +-- crates/moon-ui-gpui/src/settings/storage.rs | 2 +- crates/moon-ui-gpui/src/settings/telegram.rs | 6 +- .../src/shell/core_settings_popup.rs | 10 +- .../moon-ui-gpui/src/strategies/settings.rs | 48 ++------ .../moon-ui-gpui/src/strategies/tree/mod.rs | 2 +- .../tests/theme_contract/strategies.rs | 13 ++- 18 files changed, 179 insertions(+), 235 deletions(-) diff --git a/crates/moon-ui-gpui/src/analytics/tuner/coins/picker.rs b/crates/moon-ui-gpui/src/analytics/tuner/coins/picker.rs index e9ad2e22..b41c7cc2 100644 --- a/crates/moon-ui-gpui/src/analytics/tuner/coins/picker.rs +++ b/crates/moon-ui-gpui/src/analytics/tuner/coins/picker.rs @@ -514,7 +514,6 @@ impl AnalyticsView { Some(n) => format!("{} {n}", t!("analytics.coins.pick_title")), None => t!("analytics.coins.pick_title").to_string(), }, - p, cx, )) // The field's own label, spelled as the strategy parameter it will be written to diff --git a/crates/moon-ui-gpui/src/analytics/tuner/filter/mod.rs b/crates/moon-ui-gpui/src/analytics/tuner/filter/mod.rs index 00e4b1bd..6ef25d6a 100644 --- a/crates/moon-ui-gpui/src/analytics/tuner/filter/mod.rs +++ b/crates/moon-ui-gpui/src/analytics/tuner/filter/mod.rs @@ -800,7 +800,6 @@ impl AnalyticsView { let header = self.shell_toolbar( TunerKind::Filter, t!("analytics.tuner.fields_title").to_string(), - p, cx, ); v_flex() diff --git a/crates/moon-ui-gpui/src/analytics/tuner/shell.rs b/crates/moon-ui-gpui/src/analytics/tuner/shell.rs index bcb5b894..44c517a8 100644 --- a/crates/moon-ui-gpui/src/analytics/tuner/shell.rs +++ b/crates/moon-ui-gpui/src/analytics/tuner/shell.rs @@ -102,7 +102,6 @@ impl AnalyticsView { &self, kind: TunerKind, title: String, - p: MoonPalette, cx: &Context, ) -> AnyElement { let k = match kind { @@ -142,41 +141,35 @@ impl AnalyticsView { // Rounding the result affects the SUGGESTION — always shown (the suggestion is // available without a selected strategy too, over the current scope). if let Some(round) = round { - header = header - .child( - div() - .text_size(design::t_caption(cx)) - .text_color(moon(p.text_muted)) - .child(t!("analytics.tuner.round_lbl").to_string()), - ) - .child( - div().flex_none().child( - MoonCheckbox::new(SharedString::from(format!("tun-round-{k}"))) - .checked(round) - .size(MoonSize::Sm) - .on_change({ - let view = cx.entity(); - move |ch: &bool, _w, app| { - let on = *ch; - view.update(app, |this, cx| { - match kind { - TunerKind::Filter => { - this.tuner.round_results = on; - this.tuner.invalidate_suggest(); - } - TunerKind::Time => { - this.time_tuner.round_results = on; - this.time_tuner.invalidate_suggest(); - } - // No rounding on this axis — the control is hidden. - TunerKind::Coins => {} + header = header.child( + div().flex_none().child( + MoonCheckbox::new(SharedString::from(format!("tun-round-{k}"))) + .label(t!("analytics.tuner.round_lbl").to_string()) + .checked(round) + .size(MoonSize::Sm) + .on_change({ + let view = cx.entity(); + move |ch: &bool, _w, app| { + let on = *ch; + view.update(app, |this, cx| { + match kind { + TunerKind::Filter => { + this.tuner.round_results = on; + this.tuner.invalidate_suggest(); } - cx.notify(); - }); - } - }), - ), - ); + TunerKind::Time => { + this.time_tuner.round_results = on; + this.time_tuner.invalidate_suggest(); + } + // No rounding on this axis — the control is hidden. + TunerKind::Coins => {} + } + cx.notify(); + }); + } + }), + ), + ); } // Render write controls for a retained anchor, but enable them only when the action // authority admits at least one selected target. @@ -724,6 +717,7 @@ impl AnalyticsView { .child( MoonCheckbox::new(SharedString::from("tun-cfg-compose-f")) .label(t!("analytics.tuner.compose_toggle").to_string()) + .description(t!("analytics.tuner.compose_short").to_string()) .checked(self.tuner.compose) .size(MoonSize::Sm) // `on_change` hands the callback an `&mut App`, not a @@ -745,12 +739,6 @@ impl AnalyticsView { } }), ) - .child( - div() - .w_full() - .text_color(moon(p.text_muted)) - .child(t!("analytics.tuner.compose_short").to_string()), - ) .child( h_flex() .w_full() diff --git a/crates/moon-ui-gpui/src/analytics/tuner/time/grid.rs b/crates/moon-ui-gpui/src/analytics/tuner/time/grid.rs index 38257485..ae168f8d 100644 --- a/crates/moon-ui-gpui/src/analytics/tuner/time/grid.rs +++ b/crates/moon-ui-gpui/src/analytics/tuner/time/grid.rs @@ -355,7 +355,6 @@ impl AnalyticsView { let header = self.shell_toolbar( TunerKind::Time, t!("analytics.time.autopick_title").to_string(), - p, cx, ); let cfg_row = self.shell_config_row(TunerKind::Time, p, window, cx); diff --git a/crates/moon-ui-gpui/src/chart_tabs/graphics_popup.rs b/crates/moon-ui-gpui/src/chart_tabs/graphics_popup.rs index 381505dd..f5428a08 100644 --- a/crates/moon-ui-gpui/src/chart_tabs/graphics_popup.rs +++ b/crates/moon-ui-gpui/src/chart_tabs/graphics_popup.rs @@ -262,6 +262,7 @@ fn render_graphics_popup( let entity = entity.clone(); MoonCheckbox::new(SharedString::from(format!("{id}-hide-closed-sell"))) .label(t!("chart.graphics.hide_closed_sell").to_string()) + .description(t!("chart.graphics.hide_closed_sell_hint").to_string()) .checked(cfg.hide_closed_sell_line) .size(MoonSize::Sm) .on_change(move |ch: &bool, _w, app| { @@ -269,14 +270,11 @@ fn render_graphics_popup( write_cfg(&entity, app, |c| c.hide_closed_sell_line = v); }) }; - let hide_sell_hint = div() - .text_size(design::t_caption(cx)) - .text_color(rgb(p.text_muted)) - .child(t!("chart.graphics.hide_closed_sell_hint").to_string()); let hide_move_cb = { let entity = entity.clone(); MoonCheckbox::new(SharedString::from(format!("{id}-hide-move-history"))) .label(t!("chart.graphics.hide_move_history").to_string()) + .description(t!("chart.graphics.hide_move_history_hint").to_string()) .checked(cfg.hide_order_move_history) .size(MoonSize::Sm) .on_change(move |ch: &bool, _w, app| { @@ -284,10 +282,6 @@ fn render_graphics_popup( write_cfg(&entity, app, |c| c.hide_order_move_history = v); }) }; - let hide_move_hint = div() - .text_size(design::t_caption(cx)) - .text_color(rgb(p.text_muted)) - .child(t!("chart.graphics.hide_move_history_hint").to_string()); // --- Trade marks: the live trade crosses and their per-trade volume bars. --- let marker_scale_row = { @@ -585,9 +579,7 @@ fn render_graphics_popup( v_flex() .gap(design::ui_px(cx, 6.0)) .child(hide_sell_cb) - .child(hide_sell_hint) - .child(hide_move_cb) - .child(hide_move_hint), + .child(hide_move_cb), ), ) .child( diff --git a/crates/moon-ui-gpui/src/controls/manual_strat/settings.rs b/crates/moon-ui-gpui/src/controls/manual_strat/settings.rs index 97c72593..904ab9e5 100644 --- a/crates/moon-ui-gpui/src/controls/manual_strat/settings.rs +++ b/crates/moon-ui-gpui/src/controls/manual_strat/settings.rs @@ -220,27 +220,18 @@ pub(super) fn slot_settings_content( // Moonbot's own stop rule, and the default. Local state, so it is offered whether or not // the core has reported anything. .child( - v_flex() - .gap(design::ui_px(cx, 2.0)) - .child( - MoonCheckbox::new("ms-mb-logic") - .label(t!("header.ms_mb_logic").to_string()) - .checked(mb_logic) - .size(MoonSize::Sm) - .on_change(move |checked: &bool, _w, app| { - let on = *checked; - logic_backend.update(app, |b, cx| { - b.set_ms_mb_logic(core, on); - cx.notify(); - }); - }), - ) - .child( - div() - .text_size(design::t_caption(cx)) - .text_color(rgb(p.text_muted)) - .child(t!("header.ms_mb_logic_hint").to_string()), - ), + MoonCheckbox::new("ms-mb-logic") + .label(t!("header.ms_mb_logic").to_string()) + .description(t!("header.ms_mb_logic_hint").to_string()) + .checked(mb_logic) + .size(MoonSize::Sm) + .on_change(move |checked: &bool, _w, app| { + let on = *checked; + logic_backend.update(app, |b, cx| { + b.set_ms_mb_logic(core, on); + cx.notify(); + }); + }), ) // The core's own flag, not a local one: while it is OFF the core applies a manual // strategy's own sell price and the toolbar's TP/S do not reach a manual order at all. diff --git a/crates/moon-ui-gpui/src/core_expert/pages/login.rs b/crates/moon-ui-gpui/src/core_expert/pages/login.rs index 4e3e19d2..e71d0a15 100644 --- a/crates/moon-ui-gpui/src/core_expert/pages/login.rs +++ b/crates/moon-ui-gpui/src/core_expert/pages/login.rs @@ -19,8 +19,8 @@ use crate::shell::editors::EditorStore; use super::super::CoreExpertView; use super::super::widgets::{ - action, caption, columns, dropdown, field, field_masked, flag, group, hint, labeled, link, - rows, text_block, text_line, + action, caption, columns, dropdown, field, field_masked, flag, flag_described, group, hint, + labeled, link, rows, text_block, text_line, }; /// Nothing on this page reaches the draft; every field stages through this. @@ -151,15 +151,15 @@ pub(super) fn body( t!("core_expert.log_change_password").to_string(), false, )) - .child(flag( + .child(flag_described( "exp-log-debug-data", t!("core_expert.log_debug_data").to_string(), + Some(t!("core_expert.log_debug_hint").to_string()), false, false, view, |_, _| {}, - )) - .child(hint(t!("core_expert.log_debug_hint").to_string(), p, cx)); + )); // --- Right: licence, support, and what Moonbot sends to its own server ----------------------- let support = group( diff --git a/crates/moon-ui-gpui/src/core_expert/pages/telegram.rs b/crates/moon-ui-gpui/src/core_expert/pages/telegram.rs index 74608950..f06a5b2d 100644 --- a/crates/moon-ui-gpui/src/core_expert/pages/telegram.rs +++ b/crates/moon-ui-gpui/src/core_expert/pages/telegram.rs @@ -21,8 +21,8 @@ use crate::shell::editors::{CoreDraftHost, EditorStore}; use super::super::CoreExpertView; use super::super::widgets::{ - action, action_live, caption, columns, field, flag, group, hint, list_box_select, rows, - text_block, + action, action_live, caption, columns, field, flag, flag_described, group, list_box_select, + rows, text_block, }; /// See [`super::scratch_specs`]. @@ -295,21 +295,15 @@ pub(super) fn body( .w_full() .items_start() .gap(design::ui_px(cx, 12.0)) - .child( - v_flex() - .flex_1() - .min_w_0() - .gap(design::ui_px(cx, 2.0)) - .child(flag( - "exp-tlg-premium", - t!("core_expert.tlg_premium").to_string(), - t.listen_moon_channel, - true, - view, - |d, on| d.telegram.listen_moon_channel = on, - )) - .child(hint(t!("core_expert.tlg_premium_paid").to_string(), p, cx)), - ) + .child(div().flex_1().min_w_0().child(flag_described( + "exp-tlg-premium", + t!("core_expert.tlg_premium").to_string(), + Some(t!("core_expert.tlg_premium_paid").to_string()), + t.listen_moon_channel, + true, + view, + |d, on| d.telegram.listen_moon_channel = on, + ))) .child(div().flex_1().min_w_0().child(flag( "exp-tlg-send-stats", t!("core_expert.tlg_send_stats").to_string(), diff --git a/crates/moon-ui-gpui/src/core_expert/widgets.rs b/crates/moon-ui-gpui/src/core_expert/widgets.rs index aa31ce5b..ea3d7c44 100644 --- a/crates/moon-ui-gpui/src/core_expert/widgets.rs +++ b/crates/moon-ui-gpui/src/core_expert/widgets.rs @@ -50,6 +50,20 @@ pub(super) fn flag( enabled: bool, view: &Entity, set: fn(&mut CoreConfig, bool), +) -> impl IntoElement { + flag_described(id, label, None, checked, enabled, view, set) +} + +/// [`flag`] with Moonbot's explanatory line for the row, drawn as the checkbox's own description +/// under its caption rather than as a separate [`hint`] beside it. +pub(super) fn flag_described( + id: &'static str, + label: String, + description: Option, + checked: bool, + enabled: bool, + view: &Entity, + set: fn(&mut CoreConfig, bool), ) -> impl IntoElement { let view = view.clone(); // Mixed across the selection: drawn EMPTY inside the mixed frame until the trader picks one, @@ -63,6 +77,9 @@ pub(super) fn flag( mixed, MoonCheckbox::new(SharedString::from(id)) .label(label) + .when_some(description, |this, description| { + this.description(description) + }) .checked(checked && !mixed) .tone(design::mixed_tone(mixed)) .disabled(!enabled) diff --git a/crates/moon-ui-gpui/src/panels/news/mod.rs b/crates/moon-ui-gpui/src/panels/news/mod.rs index dfa68121..dc5079c3 100644 --- a/crates/moon-ui-gpui/src/panels/news/mod.rs +++ b/crates/moon-ui-gpui/src/panels/news/mod.rs @@ -759,7 +759,7 @@ impl NewsView { }), )); // "No tags" visibility toggle — untagged news carry nothing to colour, so it has no swatches. - let untagged = self.untagged_row(!settings.hide_untagged(), p, cx); + let untagged = self.untagged_row(!settings.hide_untagged(), cx); let tag_rows: Vec = rows .into_iter() .map(|(key, label)| { @@ -798,27 +798,18 @@ impl NewsView { /// The "no tags" row: a visibility checkbox for news that carry no tags at all (no colour picker). /// `shown` is the checkbox state (checked = show tagless news). - fn untagged_row(&self, shown: bool, p: MoonPalette, cx: &mut Context) -> AnyElement { + fn untagged_row(&self, shown: bool, cx: &mut Context) -> AnyElement { let checkbox = MoonCheckbox::new("news-untagged-vis") + .label(t!("news.tags.untagged").to_string()) .checked(shown) .size(MoonSize::Sm) .on_change(cx.listener(|this, checked: &bool, _w, cx| { this.set_hide_untagged(!*checked, cx); })); - h_flex() + div() .w_full() - .items_center() - .gap(design::ui_px(cx, 8.0)) .py(design::ui_px(cx, 2.0)) .child(checkbox) - .child( - div() - .flex_1() - .min_w(px(0.0)) - .text_size(design::t_body(cx)) - .text_color(rgb(p.text_muted)) - .child(t!("news.tags.untagged").to_string()), - ) .into_any_element() } @@ -835,7 +826,10 @@ impl NewsView { cx: &mut Context, ) -> AnyElement { let cb_key = key.clone(); + // User-defined tag identifiers are values rather than prose, so the label is mono. let checkbox = MoonCheckbox::new(SharedString::from(format!("news-tagvis-{key}"))) + .label(format!("#{label}")) + .mono(true) .checked(!hidden) .size(MoonSize::Sm) .on_change(cx.listener(move |this, checked: &bool, _w, cx| { @@ -925,23 +919,7 @@ impl NewsView { .w_full() .gap(design::ui_px(cx, 4.0)) .py(design::ui_px(cx, 2.0)) - .child( - h_flex() - .w_full() - .items_center() - .gap(design::ui_px(cx, 8.0)) - .child(checkbox) - .child( - // User-defined tag identifiers are values rather than prose. - div() - .flex_1() - .min_w(px(0.0)) - .font_family(design::mono()) - .text_size(design::t_body(cx)) - .text_color(rgb(p.text)) - .child(format!("#{label}")), - ), - ) + .child(checkbox) .child( h_flex() .items_center() diff --git a/crates/moon-ui-gpui/src/settings/general.rs b/crates/moon-ui-gpui/src/settings/general.rs index cf4b6a39..81760996 100644 --- a/crates/moon-ui-gpui/src/settings/general.rs +++ b/crates/moon-ui-gpui/src/settings/general.rs @@ -5,8 +5,8 @@ use gpui::*; use moon_ui::{ - MoonButton, MoonButtonSize, MoonInput, MoonInputEvent, MoonInputState, MoonMenuSize, - MoonPalette, MoonSelect, MoonSize, MoonSlider, MoonSliderEvent, MoonSliderState, + MoonButton, MoonButtonSize, MoonCheckbox, MoonInput, MoonInputEvent, MoonInputState, + MoonMenuSize, MoonPalette, MoonSelect, MoonSize, MoonSlider, MoonSliderEvent, MoonSliderState, MoonTooltipView, StyledExt, h_flex, rgba_from, v_flex, }; use rust_i18n::t; @@ -65,29 +65,69 @@ fn labeled_select( /// Returns: /// The hint row, with a tooltip only when the visible text was shortened. fn settings_hint(key: &'static str, text: &str, muted: Hsla) -> AnyElement { - let sentence_end = [". ", "! ", "? "] - .into_iter() - .filter_map(|boundary| text.find(boundary).map(|index| index + 1)) - .min(); - let Some(sentence_end) = sentence_end else { - return div() - .text_color(muted) - .child(text.to_string()) - .into_any_element(); + let (shown, full) = hint_parts(text); + let Some(full) = full else { + return div().text_color(muted).child(shown).into_any_element(); }; - let full = text.to_string(); div() .id(key) .text_color(muted) - .child(format!("{} …", &text[..sentence_end])) - .tooltip(move |_window, cx| { - cx.new(|_| MoonTooltipView::new(full.clone()).max_width(420.0)) - .into() - }) + .child(shown) + .tooltip(hint_tooltip(full)) + .into_any_element() +} + +/// Attach a settings hint to its checkbox as the checkbox's description. +/// +/// The hint is shortened exactly as [`settings_hint`] shortens it. A shortened hint's full text +/// moves to the same wide tooltip, hosted on the whole control because the description is part of +/// the checkbox rather than an element of its own. +/// +/// Args: +/// checkbox: The labelled checkbox the hint explains. +/// key: Stable localization key used as the tooltip host ID. +/// text: Complete localized hint text. +/// +/// Returns: +/// The checkbox, wrapped in a tooltip host only when the visible text was shortened. +fn checkbox_with_hint(checkbox: MoonCheckbox, key: &'static str, text: &str) -> AnyElement { + let (shown, full) = hint_parts(text); + let checkbox = checkbox.description(shown); + let Some(full) = full else { + return checkbox.into_any_element(); + }; + + div() + .id(key) + .child(checkbox) + .tooltip(hint_tooltip(full)) .into_any_element() } +/// Split a hint into its visible text and, when that is shortened, the complete text. +/// +/// Multi-sentence text is cut after its first sentence, keeping the sentence-ending punctuation and +/// adding an ellipsis. Text without a sentence boundary is returned unchanged with no full text. +fn hint_parts(text: &str) -> (String, Option) { + let sentence_end = [". ", "! ", "? "] + .into_iter() + .filter_map(|boundary| text.find(boundary).map(|index| index + 1)) + .min(); + match sentence_end { + Some(end) => (format!("{} …", &text[..end]), Some(text.to_string())), + None => (text.to_string(), None), + } +} + +/// Build the standard wide settings tooltip showing a hint's complete text. +fn hint_tooltip(full: String) -> impl Fn(&mut Window, &mut App) -> AnyView + 'static { + move |_window, cx| { + cx.new(|_| MoonTooltipView::new(full.clone()).max_width(420.0)) + .into() + } +} + impl SettingsView { /// Adjust the draft log-retention period, clamped to `0..=365` days. fn adjust_ret(&mut self, delta: i32, cx: &mut Context) { @@ -316,7 +356,7 @@ impl SettingsView { )) .child(super::separator(p, cx)) // Place each core in a separate chart tab. - .child( + .child(checkbox_with_hint( self.draft_checkbox(cx, "split", split, |p, v| { if p.charts_split_by_core != v { p.charts_split_by_core = v; @@ -327,15 +367,12 @@ impl SettingsView { }) .label(t!("general.charts_split_by_core").to_string()) .size(MoonSize::Sm), - ) - .child(settings_hint( "general.charts_split_by_core_hint", &t!("general.charts_split_by_core_hint"), - muted, )) .child(super::separator(p, cx)) // Restrict order and line controls to the order-book control zone. - .child( + .child(checkbox_with_hint( self.draft_checkbox(cx, "separate-zones", scz, |p, v| { if p.separate_control_zones != v { p.separate_control_zones = v; @@ -346,15 +383,13 @@ impl SettingsView { }) .label(t!("general.separate_control_zones").to_string()) .size(MoonSize::Sm), - ) - .child(settings_hint( "general.separate_control_zones_hint", &t!("general.separate_control_zones_hint"), - muted, )) .child(super::separator(p, cx)) - // Close Main charts after window inactivity; zero disables the timeout. - .child( + // Close Main charts after window inactivity; zero disables the timeout. The hint defines + // "idle" for the checkbox, so it is the checkbox's description, above the stepper. + .child(checkbox_with_hint( self.draft_checkbox(cx, "idle-close", idle_secs > 0, move |p, v| { // Enabling restores the last remembered value; disabling stores zero. let want = if v { idle_restore } else { 0 }; @@ -373,7 +408,9 @@ impl SettingsView { }) .label(t!("general.main_idle_close").to_string()) .size(MoonSize::Sm), - ) + "general.main_idle_close_hint", + &t!("general.main_idle_close_hint"), + )) .child( h_flex() .gap(design::ui_px(cx, 8.0)) @@ -397,15 +434,10 @@ impl SettingsView { Self::adjust_idle, )), ) - .child(settings_hint( - "general.main_idle_close_hint", - &t!("general.main_idle_close_hint"), - muted, - )) .child(super::separator(p, cx)) // Stack layout is now configured per tab from the chart-tabs layout popup. // File logging and retention period. - .child( + .child(checkbox_with_hint( self.draft_checkbox(cx, "logf", logf, |p, v| { if p.log_to_file != v { p.log_to_file = v; @@ -416,11 +448,8 @@ impl SettingsView { }) .label(t!("general.log_to_file").to_string()) .size(MoonSize::Sm), - ) - .child(settings_hint( "general.log_to_file_hint", &t!("general.log_to_file_hint"), - muted, )) // Retention controls are enabled only while file logging is enabled; otherwise the // buttons are disabled and the value and labels are muted. diff --git a/crates/moon-ui-gpui/src/settings/security.rs b/crates/moon-ui-gpui/src/settings/security.rs index 65dcb41a..06e80d5d 100644 --- a/crates/moon-ui-gpui/src/settings/security.rs +++ b/crates/moon-ui-gpui/src/settings/security.rs @@ -309,19 +309,14 @@ impl SettingsView { /// Build the launch-password group: checkbox, both fields, and the mismatch line. fn launch_group(&self, cx: &Context) -> impl IntoElement { - let p = MoonPalette::active(cx); let on = self.security.launch_on; let (value, confirm) = self.security.launch.read(cx); v_flex() .gap(design::ui_px(cx, 4.0)) .child( self.security_checkbox(cx, "sec-launch", on, |ed, v| ed.launch_on = v) - .label(t!("security.launch").to_string()), - ) - .child( - div() - .text_color(rgba_from(p.text_muted, 1.0)) - .child(t!("security.launch_hint").to_string()), + .label(t!("security.launch").to_string()) + .description(t!("security.launch_hint").to_string()), ) .when(on, |this| { this.child(password_row( @@ -353,12 +348,8 @@ impl SettingsView { .gap(design::ui_px(cx, 4.0)) .child( self.security_checkbox(cx, "sec-file", on, |ed, v| ed.file_on = v) - .label(t!("security.file").to_string()), - ) - .child( - div() - .text_color(rgba_from(p.text_muted, 1.0)) - .child(t!("security.file_hint").to_string()), + .label(t!("security.file").to_string()) + .description(t!("security.file_hint").to_string()), ) .when(on, |this| { this.child(password_row( diff --git a/crates/moon-ui-gpui/src/settings/storage.rs b/crates/moon-ui-gpui/src/settings/storage.rs index 6a640955..e1ea2047 100644 --- a/crates/moon-ui-gpui/src/settings/storage.rs +++ b/crates/moon-ui-gpui/src/settings/storage.rs @@ -280,6 +280,7 @@ impl SettingsView { moon_ui::MoonCheckbox::new("strat-db-enabled") .checked(enabled) .label(t!("storage.strategies_enabled").to_string()) + .description(t!("storage.strategies_enabled_hint").to_string()) .size(MoonSize::Sm) .on_change(cx.listener(|this, v: &bool, _, cx| { let v = *v; @@ -291,7 +292,6 @@ impl SettingsView { } })), ) - .child(hint(t!("storage.strategies_enabled_hint").to_string())) // MIXED NODE: same as the reports readout above — stays mono. .child( hint(format!( diff --git a/crates/moon-ui-gpui/src/settings/telegram.rs b/crates/moon-ui-gpui/src/settings/telegram.rs index 794fa513..82fb7329 100644 --- a/crates/moon-ui-gpui/src/settings/telegram.rs +++ b/crates/moon-ui-gpui/src/settings/telegram.rs @@ -402,13 +402,9 @@ impl SettingsView { } }) .label(t!("telegram.mini_app").to_string()) + .description(t!("telegram.mini_app_hint").to_string()) .size(MoonSize::Sm), ) - .child( - div() - .text_color(muted) - .child(t!("telegram.mini_app_hint").to_string()), - ) .child(div().text_color(rgba_from(p.text, 1.0)).child(mini_status)) .when_some(mini_url, |tab, url| { tab.child( diff --git a/crates/moon-ui-gpui/src/shell/core_settings_popup.rs b/crates/moon-ui-gpui/src/shell/core_settings_popup.rs index 2ce14ca3..944a3469 100644 --- a/crates/moon-ui-gpui/src/shell/core_settings_popup.rs +++ b/crates/moon-ui-gpui/src/shell/core_settings_popup.rs @@ -308,9 +308,7 @@ pub(crate) fn core_settings_content( /// Returns: /// The switch row. fn expert_switch(ctx: &TabCtx<'_>, view: &Entity, cx: &App) -> impl IntoElement { - let TabCtx { - backend, group, p, .. - } = *ctx; + let TabCtx { backend, group, .. } = *ctx; // Read rather than assumed: this popup is only drawn while the preference is off, but a // hardcoded tick is how the two faces would come to disagree if that ever stopped holding. let checked = backend.read(cx).core_settings_expert(); @@ -324,6 +322,7 @@ fn expert_switch(ctx: &TabCtx<'_>, view: &Entity, cx: &App) -> impl IntoE .child( MoonCheckbox::new("core-settings-expert") .label(t!("core_settings.expert").to_string()) + .description(t!("core_settings.expert_hint").to_string()) .checked(checked) .size(MoonSize::Sm) .on_change(move |value, window, app| { @@ -342,11 +341,6 @@ fn expert_switch(ctx: &TabCtx<'_>, view: &Entity, cx: &App) -> impl IntoE ); }), ) - .child(widgets::caption( - t!("core_settings.expert_hint").to_string(), - p, - cx, - )) } /// Immediate actions above the tab strip: restart, emulator, cancel all orders. diff --git a/crates/moon-ui-gpui/src/strategies/settings.rs b/crates/moon-ui-gpui/src/strategies/settings.rs index e02edfa6..05106e69 100644 --- a/crates/moon-ui-gpui/src/strategies/settings.rs +++ b/crates/moon-ui-gpui/src/strategies/settings.rs @@ -18,7 +18,7 @@ use moon_ui::{ use rust_i18n::t; use super::StrategiesView; -use crate::design::{self, moon}; +use crate::design; use crate::panels::{ COMPACT_CHECKBOX_FONT, COMPACT_CHECKBOX_GAP, COMPACT_CHECKBOX_MARK, COMPACT_CHECKBOX_WEIGHT, POPUP_GROUP_CAPTION_FONT, popup_close_button, popup_gear_trigger, popup_group, @@ -261,57 +261,29 @@ impl StrategiesView { self.write_pref(&PARAMS_FULL, value, cx); } - /// Build the filter-row active-only toggle: its label, then its compact checkbox. + /// Build the filter-row active-only toggle: a labelled `Sm` checkbox. /// - /// The label sits left of the mark because the row reads left to right into the settings gear - /// that follows it — which is also why this is not a labelled `MoonCheckbox`, the one thing that - /// component cannot place. Clicking either half writes the same preference, so the label is not - /// a dead zone beside a live checkbox, and the cluster carries one tooltip spelling the - /// preference out in full. + /// The caption is the checkbox's own MoonUI label, so a press on the box or the caption writes + /// the same preference, and the control carries one tooltip spelling the preference out in full. /// /// Args: - /// palette: Active MoonUI palette, resolved once by the caller. - /// cx: View context used to read the resolved preference and wire the callbacks. + /// cx: View context used to read the resolved preference and wire the callback. /// /// Returns: - /// The label and checkbox as one flex-none cluster. - pub(super) fn active_only_toggle( - &self, - palette: MoonPalette, - cx: &Context, - ) -> AnyElement { + /// The checkbox as one flex-none control. + pub(super) fn active_only_toggle(&self, cx: &Context) -> AnyElement { let checked = (ACTIVE_ONLY.read)(&self.prefs); let view = cx.entity(); - h_flex() + div() .id("strategies-active-only") .flex_none() - .items_center() - .gap(design::ui_px(cx, COMPACT_CHECKBOX_GAP)) .tooltip(crate::panels::common::text_tooltip( t!(ACTIVE_ONLY.label).to_string(), )) .child( - div() - .id("strategies-active-only-label") - .cursor_pointer() - .font_family(design::ui_font()) - .text_size(design::t_caption(cx)) - .text_color(moon(palette.text_soft)) - .child(t!("strat.active_only").to_string()) - // Reads the preference at click time rather than flipping the value this frame - // captured, so the label cannot write a stale flip. - .on_click({ - let view = view.clone(); - move |_, _window, app: &mut App| { - view.update(app, |this, cx| { - let next = !(ACTIVE_ONLY.read)(&this.prefs); - this.set_active_only(next, cx); - }); - } - }), - ) - .child( + // The caption is the checkbox's own label, so a press on either toggles it. MoonCheckbox::new("strategies-active-only-mark") + .label(t!("strat.active_only").to_string()) .checked(checked) .size(MoonSize::Sm) .on_change(move |value: &bool, _window, app| { diff --git a/crates/moon-ui-gpui/src/strategies/tree/mod.rs b/crates/moon-ui-gpui/src/strategies/tree/mod.rs index d431fad8..359c6b2c 100644 --- a/crates/moon-ui-gpui/src/strategies/tree/mod.rs +++ b/crates/moon-ui-gpui/src/strategies/tree/mod.rs @@ -194,7 +194,7 @@ impl StrategiesView { .cleanable(true), ), ) - .child(self.active_only_toggle(p, cx)) + .child(self.active_only_toggle(cx)) .child(settings), ) .child( diff --git a/crates/moon-ui-gpui/tests/theme_contract/strategies.rs b/crates/moon-ui-gpui/tests/theme_contract/strategies.rs index 52461f80..2894eb96 100644 --- a/crates/moon-ui-gpui/tests/theme_contract/strategies.rs +++ b/crates/moon-ui-gpui/tests/theme_contract/strategies.rs @@ -329,12 +329,17 @@ fn persisted_active_filter_does_not_restore_retired_controls_or_hide_params() { tree_panel.contains("self.active_only_toggle("), "the pane must render the active-only toggle it delegates to settings.rs" ); - // Twice: the label and the mark are separate hit targets, and a half that stopped writing - // through the setter would look alive while persisting nothing. + // Once, through a labelled checkbox: the caption is MoonUI's own label, so the box and the + // caption are one hit target, and a separate caption handler would be a second writer to keep + // in step. assert_eq!( toggle.matches("set_active_only(").count(), - 2, - "both halves of the filter-row toggle must write through the persisted setter" + 1, + "the filter-row toggle must write through the persisted setter exactly once" + ); + assert!( + toggle.contains(".label(") && toggle.contains("strat.active_only"), + "the filter-row toggle must own its localized clickable label" ); assert!( !toggle.contains("prefs.active_only ="), From e23df30af8c4dc2949a0d62e94a4ce317718385a Mon Sep 17 00:00:00 2001 From: ThisMad Date: Sun, 13 Sep 2026 21:14:27 +0200 Subject: [PATCH 5/5] refactor(startup): take Inter from MoonUI's bundled fonts `moon_ui::init` now registers MoonUI's static Inter cuts (Regular, Medium, SemiBold, Bold) under the `"Inter"` family its theme and `design::ui_font` name. The terminal registered its own `"Inter"` on top: one variable font file embedded three times as Inter-400/500/600. Two faces under one family compete for every weight, and the Medium cut is the one the new checkbox label needs, so the terminal's copy goes and MoonUI's is the only Inter. Geist Mono stays: MoonUI ships only its Regular and Bold, while the chart draws at 500 and 600. Co-Authored-By: Claude Opus 5 (1M context) --- assets/fonts/Inter-400.ttf | Bin 122480 -> 0 bytes assets/fonts/Inter-500.ttf | Bin 122480 -> 0 bytes assets/fonts/Inter-600.ttf | Bin 122480 -> 0 bytes crates/moon-ui-gpui/src/startup.rs | 15 ++++++--------- 4 files changed, 6 insertions(+), 9 deletions(-) delete mode 100644 assets/fonts/Inter-400.ttf delete mode 100644 assets/fonts/Inter-500.ttf delete mode 100644 assets/fonts/Inter-600.ttf diff --git a/assets/fonts/Inter-400.ttf b/assets/fonts/Inter-400.ttf deleted file mode 100644 index b5616ecfc71c9904f26900389ef3c140f6e0471d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122480 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, on_commi } } +/// Fonts the terminal registers on top of MoonUI's own. +/// +/// Inter is not among them: `moon_ui::init` registers MoonUI's static Inter cuts (Regular, Medium, +/// SemiBold, Bold) under the `"Inter"` family the theme and `design::ui_font` name, and a second +/// `"Inter"` registered here would compete with them for every weight. Geist Mono stays, because +/// MoonUI ships only its Regular and Bold while the chart draws at 500 and 600. fn embedded_fonts() -> Vec> { vec![ - include_bytes!("../../../assets/fonts/Inter-400.ttf") - .as_slice() - .into(), - include_bytes!("../../../assets/fonts/Inter-500.ttf") - .as_slice() - .into(), - include_bytes!("../../../assets/fonts/Inter-600.ttf") - .as_slice() - .into(), include_bytes!("../../../assets/fonts/GeistMono-400.ttf") .as_slice() .into(),