Selkie--Widget--Checkbox
NAME
Selkie::Widget::Checkbox - Focusable boolean toggle
SYNOPSIS
use Selkie::Widget::Checkbox;
use Selkie::Sizing;
my $cb = Selkie::Widget::Checkbox.new(
label => 'Enable notifications',
sizing => Sizing.fixed(1),
);
$cb.on-change.tap: -> Bool $checked {
$app.store.dispatch('settings/notifications', value => $checked);
};DESCRIPTION
Renders as [x] label when checked, [ ] label when unchecked. Space or Enter toggles the state, as does a primary mouse click on any cell of the checkbox row. User activation is debounced by default so duplicate terminal press events from one physical click do not flip the checkbox twice.
set-checked is idempotent ā passing the current value is a no-op and doesn't emit on on-change. Safe to call from a store subscription without causing feedback loops.
EXAMPLES
Syncing with the store
# Subscribe: reflect store changes into the widget
$app.store.subscribe-with-callback(
'sync-notif',
-> $s { $s.get-in('settings', 'notifications') // True },
-> Bool $v { $cb.set-checked($v) }, # no-op if unchanged ā safe
$cb,
);
# Emit: user toggle dispatches to the store
$cb.on-change.tap: -> Bool $v {
$app.store.dispatch('settings/set', field => 'notifications', value => $v);
};SEE ALSO
Selkie::Widget::RadioGroup ā one-of-many selection
Selkie::Widget::Button ā plain action button
has Str $.label
The label displayed after the [x] / [ ] indicator. Required.
has UInt $.debounce-ms
Reject user toggles that arrive within this many milliseconds of the previous accepted user toggle. Defaults to 120ms to collapse duplicate mouse press events and repeat-key bursts. Set to 0 to allow every user activation. Direct toggle and set-checked calls remain immediate for programmatic state changes.
method checked
method checked() returns BoolCurrent state.
method set-checked
method set-checked(
Bool:D $v
) returns MuSet the state, emitting on-change only if the value actually changed. No-op on same-value assignments ā safe to call from a store subscription.
method toggle
method toggle() returns MuFlip the state and emit on-change unconditionally.
method on-change
method on-change() returns SupplySupply emitting Bool each time the state changes.
method set-focused
method set-focused(
Bool $f
) returns MuSet focus state. Called by Selkie::App's focus dispatcher; the focused-styling palette flips on/off accordingly.
method is-focused
method is-focused() returns BoolWhether the checkbox currently has keyboard focus.