Scrollable container, wraps child content in a scrollable viewport.
Props
| Name | Type | Default | Description |
|---|---|---|---|
width | :fill | :shrink | {:fill_portion, pos_integer()} | number() | nil | Width of the scrollable area. Default: shrink. |
height | :fill | :shrink | {:fill_portion, pos_integer()} | number() | nil | Height of the scrollable area. Default: shrink. |
direction | :horizontal | :vertical | :both | nil | Scroll direction: :vertical (default), :horizontal, or :both. |
spacing | number() | nil | Spacing between scrollbar and content. |
scrollbar_width | number() | nil | Scrollbar track width in pixels. |
scrollbar_margin | number() | nil | Margin around the scrollbar in pixels. |
scroller_width | number() | nil | Scroller handle width in pixels. |
anchor | :start | :end | nil | Scroll anchor: :start (default) or :end. |
on_scroll | boolean() | nil | When true, emits scroll viewport events. |
auto_scroll | boolean() | nil | When true, auto-scrolls to show new content. |
scrollbar_color | String.t() | nil | Scrollbar track color. |
scroller_color | String.t() | nil | Scroller handle color. |
event_rate | integer() | nil | Max events per second for coalescable events. |
a11y | %Plushie.Type.A11y{} | map() | keyword() | %{role: :scroll_view} | Accessibility annotations. |
Summary
Functions
Accessibility annotations.
Scroll anchor: :start (default) or :end.
When true, auto-scrolls to show new content.
Converts this widget struct to a ui_node() map. Validates at most one child.
Scroll direction: :vertical (default), :horizontal, or :both.
Max events per second for coalescable events.
Appends multiple children to the widget.
Height of the scrollable area. Default: shrink.
Creates a new widget struct with the given ID and keyword options.
When true, emits scroll viewport events.
Appends a child to the widget.
Creates a :scrollable widget.
Scrollbar track color.
Margin around the scrollbar in pixels.
Scrollbar track width in pixels.
Scroller handle color.
Scroller handle width in pixels.
Spacing between scrollbar and content.
Width of the scrollable area. Default: shrink.
Applies keyword options to an existing widget struct.
Types
@type option() :: (((((((((((({:width, :fill | :shrink | {:fill_portion, pos_integer()} | number()} | {:height, :fill | :shrink | {:fill_portion, pos_integer()} | number()}) | {:direction, :horizontal | :vertical | :both}) | {:spacing, number()}) | {:scrollbar_width, number()}) | {:scrollbar_margin, number()}) | {:scroller_width, number()}) | {:anchor, :start | :end}) | {:on_scroll, boolean()}) | {:auto_scroll, boolean()}) | {:scrollbar_color, atom() | String.t() | map()}) | {:scroller_color, atom() | String.t() | map()}) | {:event_rate, integer()}) | {:a11y, %Plushie.Type.A11y{ active_descendant: term(), busy: term(), described_by: term(), description: term(), disabled: term(), error_message: term(), expanded: term(), has_popup: term(), hidden: term(), invalid: term(), label: term(), label_from: term(), labelled_by: term(), level: term(), live: term(), mnemonic: term(), modal: term(), orientation: term(), position_in_set: term(), radio_group: term(), read_only: term(), required: term(), role: term(), selected: term(), size_of_set: term(), toggled: term(), value: term() } | map() | keyword()}
@type t() :: %Plushie.Widget.Scrollable{ a11y: (%Plushie.Type.A11y{ active_descendant: term(), busy: term(), described_by: term(), description: term(), disabled: term(), error_message: term(), expanded: term(), has_popup: term(), hidden: term(), invalid: term(), label: term(), label_from: term(), labelled_by: term(), level: term(), live: term(), mnemonic: term(), modal: term(), orientation: term(), position_in_set: term(), radio_group: term(), read_only: term(), required: term(), role: term(), selected: term(), size_of_set: term(), toggled: term(), value: term() } | map() | keyword()) | Plushie.Animation.Transition.t() | Plushie.Animation.Spring.t() | Plushie.Animation.Sequence.t() | nil, anchor: (:start | :end) | Plushie.Animation.Transition.t() | Plushie.Animation.Spring.t() | Plushie.Animation.Sequence.t() | nil, auto_scroll: boolean() | Plushie.Animation.Transition.t() | Plushie.Animation.Spring.t() | Plushie.Animation.Sequence.t() | nil, children: [Plushie.Widget.ui_node()], direction: (:horizontal | :vertical | :both) | Plushie.Animation.Transition.t() | Plushie.Animation.Spring.t() | Plushie.Animation.Sequence.t() | nil, event_rate: integer() | Plushie.Animation.Transition.t() | Plushie.Animation.Spring.t() | Plushie.Animation.Sequence.t() | nil, height: (:fill | :shrink | {:fill_portion, pos_integer()} | number()) | Plushie.Animation.Transition.t() | Plushie.Animation.Spring.t() | Plushie.Animation.Sequence.t() | nil, id: String.t(), on_scroll: boolean() | Plushie.Animation.Transition.t() | Plushie.Animation.Spring.t() | Plushie.Animation.Sequence.t() | nil, scrollbar_color: String.t() | Plushie.Animation.Transition.t() | Plushie.Animation.Spring.t() | Plushie.Animation.Sequence.t() | nil, scrollbar_margin: number() | Plushie.Animation.Transition.t() | Plushie.Animation.Spring.t() | Plushie.Animation.Sequence.t() | nil, scrollbar_width: number() | Plushie.Animation.Transition.t() | Plushie.Animation.Spring.t() | Plushie.Animation.Sequence.t() | nil, scroller_color: String.t() | Plushie.Animation.Transition.t() | Plushie.Animation.Spring.t() | Plushie.Animation.Sequence.t() | nil, scroller_width: number() | Plushie.Animation.Transition.t() | Plushie.Animation.Spring.t() | Plushie.Animation.Sequence.t() | nil, spacing: number() | Plushie.Animation.Transition.t() | Plushie.Animation.Spring.t() | Plushie.Animation.Sequence.t() | nil, width: (:fill | :shrink | {:fill_portion, pos_integer()} | number()) | Plushie.Animation.Transition.t() | Plushie.Animation.Spring.t() | Plushie.Animation.Sequence.t() | nil }
Functions
@spec a11y( widget :: t(), value :: (%Plushie.Type.A11y{ active_descendant: term(), busy: term(), described_by: term(), description: term(), disabled: term(), error_message: term(), expanded: term(), has_popup: term(), hidden: term(), invalid: term(), label: term(), label_from: term(), labelled_by: term(), level: term(), live: term(), mnemonic: term(), modal: term(), orientation: term(), position_in_set: term(), radio_group: term(), read_only: term(), required: term(), role: term(), selected: term(), size_of_set: term(), toggled: term(), value: term() } | map() | keyword()) | nil ) :: t()
Accessibility annotations.
Accepts %Plushie.Type.A11y{} | map() | keyword().
Scroll anchor: :start (default) or :end.
Accepts :start | :end.
When true, auto-scrolls to show new content.
Accepts boolean().
@spec build(widget :: t()) :: Plushie.Widget.ui_node()
Converts this widget struct to a ui_node() map. Validates at most one child.
Scroll direction: :vertical (default), :horizontal, or :both.
Accepts :horizontal | :vertical | :both.
Max events per second for coalescable events.
Accepts integer().
@spec extend(widget :: t(), children :: [Plushie.Widget.child()]) :: t()
Appends multiple children to the widget.
@spec height( widget :: t(), value :: (:fill | :shrink | {:fill_portion, pos_integer()} | number()) | nil ) :: t()
Height of the scrollable area. Default: shrink.
Accepts :fill | :shrink | {:fill_portion, pos_integer()} | number().
Creates a new widget struct with the given ID and keyword options.
When true, emits scroll viewport events.
Accepts boolean().
@spec push(widget :: t(), child :: Plushie.Widget.child()) :: t()
Appends a child to the widget.
Creates a :scrollable widget.
Shorthand for new/2. Import this macro to use the widget name
directly in view functions:
import Plushie.Widget.Scrollable, only: [scrollable: 2]
scrollable("my-id", prop: value)
Scrollbar track color.
Accepts String.t().
Margin around the scrollbar in pixels.
Accepts number().
Scrollbar track width in pixels.
Accepts number().
Scroller handle color.
Accepts String.t().
Scroller handle width in pixels.
Accepts number().
Spacing between scrollbar and content.
Accepts number().
@spec width( widget :: t(), value :: (:fill | :shrink | {:fill_portion, pos_integer()} | number()) | nil ) :: t()
Width of the scrollable area. Default: shrink.
Accepts :fill | :shrink | {:fill_portion, pos_integer()} | number().
Applies keyword options to an existing widget struct.