Selkie.git | xt/snapshots/ | 53-vbox-cross-center.raku
use lib 'lib';
use Selkie::Test::Snapshot;
use Selkie::Align;
use Selkie::Layout::VBox;
use Selkie::Widget::Border;
use Selkie::Sizing;
# VBox cross-axis alignment: `align-items => CrossCenter` places every
# child horizontally, `cross-sizing` decides how wide it is.
#
# * 'full' — no cross-sizing, so it fills all 30 columns. This is
# the pane every existing app has, and it must render
# exactly where it always did.
# * 'card' — cross-sizing fixed(14), centred: (30 - 14) / 2 = 8.
# * 'stamp' — cross-sizing fixed(10) but align-self CrossEnd, so it
# ignores the container's rule and sits at column 20.
#
# `gap => 1` is on at the same time, which is the orthogonality check:
# the gutters take rows off the *main* axis while the columns above are
# untouched by them.
my $box = Selkie::Layout::VBox.new(
sizing => Sizing.flex,
gap => 1,
align-items => CrossCenter,
);
$box.add: Selkie::Widget::Border.new(title => 'full', sizing => Sizing.fixed(3));
$box.add: Selkie::Widget::Border.new(
title => 'card',
sizing => Sizing.fixed(3),
cross-sizing => Sizing.fixed(14),
);
$box.add: Selkie::Widget::Border.new(
title => 'stamp',
sizing => Sizing.fixed(3),
cross-sizing => Sizing.fixed(10),
align-self => CrossEnd,
);
print render-to-string($box, rows => 11, cols => 30);