orbital-date-pickers 0.1.1

Date and time picker components for Orbital
Documentation
use leptos::prelude::*;

use crate::shared::{hour_hand_degrees, minute_hand_degrees};

use super::dial::ClockView;

#[component]
pub fn ClockPointer(
    view: Signal<ClockView>,
    draft_hour_24: Signal<u32>,
    draft_minute: Signal<u32>,
    ampm: Signal<bool>,
) -> impl IntoView {
    view! {
        {move || {
            let current_view = view.get();
            let (degrees, has_thumb) = match current_view {
                ClockView::Hours => (hour_hand_degrees(draft_hour_24.get(), ampm.get()), true),
                ClockView::Minutes => {
                    let minute = draft_minute.get();
                    (minute_hand_degrees(minute), minute.is_multiple_of(5))
                }
            };

            view! {
                <div
                    class="orb-picker-time-clock__pointer"
                    style:transform=format!("rotateZ({degrees}deg)")
                    aria-hidden="true"
                >
                    <div class="orb-picker-time-clock__pointer-line" />
                    {has_thumb.then(|| view! {
                        <div class="orb-picker-time-clock__pointer-thumb" />
                    })}
                </div>
            }
        }}
    }
}