use gpui::{div, prelude::*, px};
use theme::ink;
mod buttons;
mod content;
mod controls;
mod layout;
mod scaffolding;
mod status;
pub use buttons::{ButtonStyle, Buttons};
pub use content::Content;
pub use controls::{Controls, SliderDrag};
pub use layout::{Layout, SplitDrag};
pub use scaffolding::{OPTION_CARD_HEIGHT, OPTION_CARD_RADIUS, Scaffolding};
pub use status::Status;
pub(crate) const RING_SLOT: gpui::Hsla = gpui::transparent_black();
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
pub struct Takeover(Option<bool>);
impl Takeover {
pub fn get(self, auto: bool) -> bool {
self.0.unwrap_or(auto)
}
pub fn toggle(&mut self, auto: bool) {
self.0 = Some(!self.get(auto));
}
}
pub fn axis_fraction(
pointer: gpui::Point<gpui::Pixels>,
bounds: gpui::Bounds<gpui::Pixels>,
axis: gpui::Axis,
min: f32,
) -> f32 {
let min = min.clamp(0.0, 0.5);
let (offset, extent) = match axis {
gpui::Axis::Horizontal => (pointer.x - bounds.left(), bounds.size.width),
gpui::Axis::Vertical => (pointer.y - bounds.top(), bounds.size.height),
};
if extent <= px(0.0) {
return min;
}
(offset / extent).clamp(min, 1.0 - min)
}
pub fn status_dot(tone: gpui::Hsla) -> gpui::Div {
div().flex_none().size(px(6.0)).rounded_full().bg(tone)
}
pub fn card_row_hover(s: gpui::StyleRefinement) -> gpui::StyleRefinement {
s.bg(ink(0.015))
}
pub fn step_row_hover(s: gpui::StyleRefinement) -> gpui::StyleRefinement {
s.bg(ink(0.03))
}
pub fn collapsible_header_hover(s: gpui::StyleRefinement) -> gpui::StyleRefinement {
s.bg(ink(0.03))
}