For the complete documentation index, see llms.txt. Markdown variants are available by appending .md to any URL or sending an Accept: text/markdown header. An agent skill is available at /.well-known/agent-skills/site-skill.md.
/
3
Sponsor

Slider

A draggable slider for selecting a value in a range.

Import

use maccn::MacSlider;

Usage

let state = cx.new(|_| SliderState::new().min(0.).max(100.).default_value(50.));
 
MacSlider::new("volume", &state);

Tick marks

use gpui::Context as _;
use gpui_base::slider::SliderState;
use maccn::MacSlider;
 
let state = cx.new(|_| SliderState::new().min(0.).max(100.).default_value(50.));
 
MacSlider::new("slider-ticks", &state);
 
// Custom tick marks rendered below the slider
div()
    .relative()
    .w_full()
    .h(px(12.))
    .children(ticks.into_iter().map(|t| {
        div()
            .absolute()
            .left(relative(t / 100.))
            .ml(px(-1.))
            .w(px(2.))
            .h(px(6.))
            .rounded_full()
            .bg(theme.label_quaternary)
    }))

Vertical

use gpui::Context as _;
use gpui_base::slider::SliderState;
use maccn::MacSlider;
 
let state = cx.new(|_| SliderState::new().min(0.).max(100.).default_value(50.));
let value = state.read(cx).value().start();
let percentage = value / 100.;
 
div()
    .h(px(160.))
    .flex()
    .items_center()
    .gap_3()
    .child(
        div()
            .relative()
            .w(px(6.))
            .h_full()
            .rounded_full()
            .bg(theme.control_track)
            .child(
                div()
                    .absolute()
                    .bottom_0()
                    .left_0()
                    .right_0()
                    .h(relative(percentage.clamp(0., 1.)))
                    .rounded_full()
                    .bg(theme.accent),
            )
            .child(
                div()
                    .absolute()
                    .left(px(-5.))
                    .bottom(relative(percentage.clamp(0., 1.)))
                    .mb(px(-8.))
                    .size(px(16.))
                    .rounded_full()
                    .bg(theme.slider_knob)
                    .shadow(switch_thumb_shadow()),
            ),
    )
    .child(div().text_color(theme.label_secondary).child(format!("{value:.0}%")))

Sizes

use gpui::div;
use maccn::{MacControlSize, MacSlider};
 
div()
    .w(px(260.))
    .flex()
    .flex_col()
    .gap_3()
    .child(MacSlider::new("slider-xl", &state).size(MacControlSize::ExtraLarge))
    .child(MacSlider::new("slider-s", &state).size(MacControlSize::Small))

Disabled

MacSlider::new("slider-disabled", &state)
    .disabled(true)
    .w(px(260.))

API

Props

PropTypeDefault
sizeMacControlSizeRegular
disabledboolfalse

SliderState

MacSlider::new(id, &state) requires an Entity<SliderState>.

MethodDescription
min(f32)Sets the minimum value.
max(f32)Sets the maximum value.
default_value(f32)Sets the initial value.