pub struct Rating { /* private fields */ }Expand description
A star rating bound to a Signal<usize>: .max stars, of which 1..=value are drawn FILLED and
the rest OUTLINED. When editable (the default), tapping the i-th star sets
the signal to i + 1. It is reactive by construction — each star is a [canvas] whose draw
closure reads the signal, so changing value re-records exactly the stars whose fill flips.
Pure composition: a [row] of canvas polygons, no per-backend code.
let stars = Signal::new(3usize);
rating(stars).max(5).star_size(28.0).color(Color::hex(0xFFB800))Implementations§
Source§impl Rating
impl Rating
Sourcepub fn star_size(self, points: f64) -> Self
pub fn star_size(self, points: f64) -> Self
The side length of each square star in points (default 28.0).
Sourcepub fn editable(self, editable: bool) -> Self
pub fn editable(self, editable: bool) -> Self
Whether tapping a star updates the bound signal (default true). Set false for a read-only
display (e.g. an average rating).
Sourcepub fn color(self, color: Color) -> Self
pub fn color(self, color: Color) -> Self
The filled-star color; empty stars are drawn as an outline in the same hue (default gold).
Sourcepub fn id(self, prefix: impl Into<String>) -> Self
pub fn id(self, prefix: impl Into<String>) -> Self
Assign a dayscript/a11y id scheme so the widget is scriptable. Because a rating is a
COMPOSITE of individually tappable stars (not one node), an inherent id sets the row’s id
to prefix AND each star’s id to prefix:N (1-based) — so a walkthrough can tap a
specific star (prefix:4 sets the value to 4). Shadows [Decorate::id], which would only
tag the row (leaving the stars unaddressable).
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Rating
impl RefUnwindSafe for Rating
impl !Send for Rating
impl !Sync for Rating
impl Unpin for Rating
impl UnsafeUnpin for Rating
impl UnwindSafe for Rating
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<P> Decorate for Pwhere
P: Piece,
impl<P> Decorate for Pwhere
P: Piece,
§fn id(self, id: impl Into<String>) -> AnyPiece
fn id(self, id: impl Into<String>) -> AnyPiece
§fn id_of(self, id: impl Fn() -> String + 'static) -> AnyPiece
fn id_of(self, id: impl Fn() -> String + 'static) -> AnyPiece
list. A plain
id is assigned once at build, but a recycled cell REBINDS to different
items over its life (and drag-to-reorder rebinds eagerly), so a static item-derived id
keeps naming the first-bound item. This variant re-registers whenever the closure’s
value changes — read your ItemSlot inside it:
.id_of(move || format!("row-remove-{}", slot.key())).§fn id_keyed(self, prefix: &'static str, key: impl Display) -> AnyPiece
fn id_keyed(self, prefix: &'static str, key: impl Display) -> AnyPiece
prefix:key (§5.5).§fn tweak(self, f: impl FnOnce(RNode) + 'static) -> AnyPiece
fn tweak(self, f: impl FnOnce(RNode) + 'static) -> AnyPiece
f runs once at mount, after the native widget exists, with the
realized node (docs/tweaks.md). Reach the typed native handle through the compiled
backend’s ext accessor (day_appkit::with_native, day_gtk::with_native, …) — or apply
a packaged day-tweak-* crate’s modifier instead of calling this directly. If the native
change affects the widget’s intrinsic size, follow it with
[day_core::invalidate_size]. Day may overwrite managed properties (title, value,
enabled, frame, a11y) on its next patch; unmanaged properties are stable.§fn selectable(self) -> AnyPiece
fn selectable(self) -> AnyPiece
label: text is NOT selectable by default
on any backend, matching each platform’s native behavior. Applied to the piece’s own
widget, so on a container it makes all the text within it selectable. Read more§fn native_ref(self, r: &NativeRef) -> AnyPiece
fn native_ref(self, r: &NativeRef) -> AnyPiece
NativeRef] to this piece’s realized node for later imperative access
(docs/tweaks.md). The ref clears automatically when the piece’s scope is disposed.fn padding(self, insets: impl IntoInsets) -> AnyPiece
§fn max_width(self, max: f64) -> AnyPiece
fn max_width(self, max: f64) -> AnyPiece
max points: the child is never PROPOSED more, so text
wraps inside the cap (chat bubbles, readable columns) while narrower content hugs.fn frame(self, width: f64, height: f64) -> AnyPiece
§fn width(self, width: f64) -> AnyPiece
fn width(self, width: f64) -> AnyPiece
width points while its height stays flexible (hugging its content
or filling on the cross axis). The single-axis complement to [Self::frame] — e.g. a
fixed-width sidebar pane in a row whose height fills the window.§fn height(self, height: f64) -> AnyPiece
fn height(self, height: f64) -> AnyPiece
height points while its width stays flexible. The single-axis
complement to [Self::frame] — e.g. a fixed-height header/toolbar bar that fills its width.fn a11y(self, f: impl FnOnce(A11yBuilder) -> A11yBuilder + 'static) -> AnyPiece
§fn on_tap(self, f: impl Fn() + 'static) -> AnyPiece
fn on_tap(self, f: impl Fn() + 'static) -> AnyPiece
§fn focused<M>(self, binding: impl IntoFocusBinding<M>) -> AnyPiece
fn focused<M>(self, binding: impl IntoFocusBinding<M>) -> AnyPiece
Signal<bool> for one control, or (Signal<Option<K>>, K::Variant) binding one control
of a group — writing false/None resigns focus (dismissing the soft keyboard on
mobile). Focus applies asynchronously: a write is a request, resolved on the next turn,
and the signal always ends up reflecting what the platform actually did.menu_item]/[sub_menu]/[menu_role]/
[menu_separator]. Passing an empty Vec removes any menu.§fn on_drag(self, f: impl Fn(Drag) + 'static) -> AnyPiece
fn on_drag(self, f: impl Fn(Drag) + 'static) -> AnyPiece
§fn background<M>(self, color: impl IntoReactive<Color, M>) -> AnyPiece
fn background<M>(self, color: impl IntoReactive<Color, M>) -> AnyPiece
Color], a Signal<Color>, or a Fn() -> Color; a
reactive color repaints the surface when its source changes. Wraps the piece in a native
container that carries the fill, so it composes with [Self::corner_radius] for a rounded
colored surface and with [Self::padding] for interior inset.§fn corner_radius(self, radius: f64) -> AnyPiece
fn corner_radius(self, radius: f64) -> AnyPiece
radius points, clipping its background and content to the
rounded rectangle. Compose after [Self::background] for a rounded colored surface, or use
alone to round a clipped child (e.g. an avatar image).§fn opacity<M>(self, opacity: impl IntoReactive<f64, M>) -> AnyPiece
fn opacity<M>(self, opacity: impl IntoReactive<f64, M>) -> AnyPiece
0.0 transparent … 1.0 opaque). Wrapped in a native
layer so it composes with .background; the change animates when made inside
[with_animation] or under a .animation ancestor (§8.4).§fn transform<M>(self, t: impl IntoReactive<Transform, M>) -> AnyPiece
fn transform<M>(self, t: impl IntoReactive<Transform, M>) -> AnyPiece
Transform] (translate/scale/rotate about the center) — the cheap
movement/scaling channel that never triggers relayout (§8.4). Prefer this over .offset
for animated motion.§fn scale<M>(self, factor: impl IntoReactive<f64, M>) -> AnyPiece
fn scale<M>(self, factor: impl IntoReactive<f64, M>) -> AnyPiece
factor about its center (animatable). Convenience over
[Self::transform].§fn rotation<M>(self, degrees: impl IntoReactive<f64, M>) -> AnyPiece
fn rotation<M>(self, degrees: impl IntoReactive<f64, M>) -> AnyPiece
degrees clockwise about its center (animatable).§fn translation<Mx, My>(
self,
x: impl IntoReactive<f64, Mx>,
y: impl IntoReactive<f64, My>,
) -> AnyPiece
fn translation<Mx, My>( self, x: impl IntoReactive<f64, Mx>, y: impl IntoReactive<f64, My>, ) -> AnyPiece
x, y) points WITHOUT relayout (animatable) — the
animation-friendly sibling of .offset.§fn animation(self, anim: AnimSpec) -> AnyPiece
fn animation(self, anim: AnimSpec) -> AnyPiece
anim even outside a [with_animation]. SwiftUI’s
.animation. The ambient with_animation takes precedence when both apply.§fn modifier(self, m: impl Modifier) -> AnyPiece
fn modifier(self, m: impl Modifier) -> AnyPiece
Modifier] — or, via the blanket impl, a plain FnOnce(AnyPiece) -> AnyPiece
closure — to this piece. Pure composition: content.modifier(m) == m.apply(content.any()).§fn overlay(self, over: impl Piece) -> AnyPiece
fn overlay(self, over: impl Piece) -> AnyPiece
over on top of this piece, centered, WITHOUT affecting layout size — a badge /
annotation overlay. self is the sizing content (bottom of the z-order); over is proposed
self’s size and drawn on top. For an explicit alignment use [Self::overlay_aligned]; for
a stack that sizes to the UNION of its children use [zstack].§fn overlay_aligned(self, align: Alignment, over: impl Piece) -> AnyPiece
fn overlay_aligned(self, align: Alignment, over: impl Piece) -> AnyPiece
Self::overlay] with an explicit [Alignment] for the annotation (e.g. a corner badge with
[Alignment::TopTrailing]).§fn grow(self) -> AnyPiece
fn grow(self) -> AnyPiece
Flex] — the stack
offers it the space and it fills; no native backing, so this is a pure layout change.§fn grid_span(self, n: usize) -> AnyPiece
fn grid_span(self, n: usize) -> AnyPiece
n columns (n ≥ 1) of the enclosing [grid] (docs/grid.md). Grid modifiers set
facts on the node the grid sees: apply them LAST (outermost), like .grow_w() — an
outer wrapper would hide the facts from the grid.§fn grid_align(self, a: Alignment) -> AnyPiece
fn grid_align(self, a: Alignment) -> AnyPiece
grid]
(docs/grid.md). Apply LAST (outermost), like [Self::grid_span].§fn defers_system_gestures(self, edges: Edges) -> AnyPiece
fn defers_system_gestures(self, edges: Edges) -> AnyPiece
edges (docs/cover.md) — the SwiftUI defersSystemGestures(on:)
analogue. Put it on a game or drawing surface whose touches run to the screen edge,
so a swipe up from the bottom doesn’t leave the app. iOS defers the chosen edges’
system gestures; Android enters swipe-to-reveal immersive mode while any subtree
requests deferral; desktop backends no-op.§fn interactive_dismiss_disabled(self) -> AnyPiece
fn interactive_dismiss_disabled(self) -> AnyPiece
cover] (or other modal surface) must
not be dismissed interactively — the SwiftUI interactiveDismissDisabled() analogue
(docs/cover.md). System back / sheet gestures are ignored; only programmatic writes
(an explicit close control) dismiss it.fn any(self) -> AnyPiece
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more