Skip to main content

orbital_date_pickers/guides/
overview.rs

1//! Orbital Date Pickers product overview (DP-01).
2
3use leptos::prelude::*;
4use orbital_macros::component_doc;
5
6/// Hub for the Orbital Date Pickers plugin — component family, first picker setup, and common questions.
7///
8/// See the crate README for picker and field selection.
9/// For resource scheduling (week grid or Gantt lanes), use **Scheduling** previews
10/// (`SchedulerCalendar` / `SchedulerTimeline` in `orbital-scheduler`) — not form pickers.
11///
12/// # When to use
13///
14/// - Onboarding a new form or settings page that needs date, time, or range entry
15/// - Answering setup questions before picking a specific picker component
16///
17/// # Usage
18///
19/// Wrap the tree in [`DatetimeLocale`] and bind [`OrbitalDateTime`] through a labeled [`Field`](orbital_core_components::Field)
20/// or a picker component from this crate.
21///
22/// # Best Practices
23///
24/// ## Why OrbitalDateTime instead of unix seconds?
25///
26/// Public APIs bind `Option<OrbitalDateTime>` with explicit [`DatetimeTimezone`]. Convert at boundaries via
27/// [`ToUnixSeconds`](orbital_base_components::ToUnixSeconds) or [`ToIso8601`](orbital_base_components::ToIso8601).
28///
29/// ## Do I need an adapter?
30///
31/// No. Use [`DatetimeLocale`] plus [`DatetimeFormat`](orbital_base_components::DatetimeFormat). Orbital does not ship
32/// LocalizationProvider or dayjs adapters.
33///
34/// ## SSR and hydration
35///
36/// Wrap pickers in [`DatetimeLocale`] on server and client with matching timezone and format signals.
37///
38/// # Examples
39///
40/// ## Picker family
41/// Core plugin fields and pickers sharing one [`OrbitalDateTime`] bind model.
42/// <!-- preview -->
43/// ```rust
44/// use crate::preview::{PickerPreviewExample, PickerPreviewKnobs};
45/// use orbital_core_components::{Flex, FlexGap, FlexWrap};
46/// use crate::{DateCalendar, DateField, DateTimePicker, TimeField};
47/// use orbital_base_components::OrbitalDateTime;
48/// let date = RwSignal::new(None::<OrbitalDateTime>);
49/// let time = RwSignal::new(None::<OrbitalDateTime>);
50/// let datetime = RwSignal::new(None::<OrbitalDateTime>);
51/// view! {
52///     <PickerPreviewExample data_testid="date-pickers-overview-preview">
53///         <PickerPreviewKnobs />
54///         <Flex gap=FlexGap::Medium wrap=FlexWrap::Wrap>
55///             <DateField bind=date />
56///             <TimeField bind=time />
57///         </Flex>
58///         <DateCalendar bind=date />
59///         <DateTimePicker bind=datetime />
60///     </PickerPreviewExample>
61/// }
62/// ```
63///
64/// ## Minimal DatePicker
65/// Wrap the tree in [`DatetimeLocale`] and bind [`OrbitalDateTime`] through a labeled [`Field`].
66/// <!-- preview -->
67/// ```rust
68/// use crate::preview::{PickerPreviewExample, PickerPreviewKnobs};
69/// use crate::DatetimeLocale;
70/// use orbital_core_components::{DatePicker, DatePickerBind, Field};
71/// use orbital_base_components::{DatetimeTimezone, OrbitalDateTime};
72/// let value = RwSignal::new(None::<OrbitalDateTime>);
73/// view! {
74///     <PickerPreviewExample data_testid="date-pickers-overview-getting-started-preview">
75///         <PickerPreviewKnobs />
76///         <DatetimeLocale default_timezone=Signal::from(DatetimeTimezone::Local)>
77///             <Field label="Event date" name="event_date">
78///                 <DatePicker bind=value />
79///             </Field>
80///         </DatetimeLocale>
81///     </PickerPreviewExample>
82/// }
83/// ```
84#[component_doc(
85    category = "Calendar & Time",
86    preview_slug = "date-pickers-overview",
87    preview_label = "Overview",
88    preview_icon = icondata::AiCalendarOutlined,
89)]
90#[component]
91pub fn DatePickersOverviewGuide() -> impl IntoView {
92    view! { () }
93}