Chandra
view release on metacpan or search on metacpan
lib/Chandra/Breadcrumb.pm view on Meta::CPAN
bc_separator $self, "\x{203A}" unless defined bc_separator $self;
}
sub render {
my ($self) = @_;
my $items = bc_items $self;
my $sep = bc_separator $self;
my $nav = Chandra::Element->new({ tag => 'nav', class => 'chandra-breadcrumb' });
my $ol = Chandra::Element->new({ tag => 'ol', class => 'chandra-breadcrumb-list' });
for my $i (0 .. $#$items) {
my $item = $items->[$i];
my $li = Chandra::Element->new({ tag => 'li', class => 'chandra-breadcrumb-item' });
if ($i < $#$items && $item->{route}) {
my $route = $item->{route};
$route =~ s/'/\\'/g;
$li->add_child(Chandra::Element->new({
tag => 'a', class => 'chandra-breadcrumb-link',
data => $item->{label} // '',
'data-action' => "navigate:$route",
}));
} else {
$li->add_child(Chandra::Element->new({
tag => 'span', class => 'chandra-breadcrumb-current',
data => $item->{label} // '',
}));
}
if ($i < $#$items) {
$li->add_child(Chandra::Element->new({
tag => 'span', class => 'chandra-breadcrumb-sep',
data => $sep,
}));
}
$ol->add_child($li);
}
$nav->add_child($ol);
return $nav->render;
}
sub on_navigate {
my ($self, $route) = @_;
my $app = $self->_app;
$app->navigate($route) if $app && $app->can('navigate');
}
sub css {
return <<'CSS';
.chandra-breadcrumb-list {
list-style: none; margin: 0; padding: 0;
display: flex; align-items: center; gap: 0;
font-size: 0.9em;
}
.chandra-breadcrumb-item { display: flex; align-items: center; }
.chandra-breadcrumb-link {
color: var(--chandra-primary, #2196F3);
text-decoration: none; cursor: pointer;
}
.chandra-breadcrumb-link:hover { text-decoration: underline; }
.chandra-breadcrumb-current { color: var(--chandra-text-muted, #757575); }
.chandra-breadcrumb-sep {
margin: 0 8px;
color: var(--chandra-text-muted, #999);
}
CSS
}
1;
__END__
=head1 NAME
Chandra::Breadcrumb - Breadcrumb navigation component
=head1 SYNOPSIS
use Chandra::Breadcrumb;
my $crumbs = Chandra::Breadcrumb->new(
items => [
{ label => 'Home', route => '/' },
{ label => 'Users', route => '/users' },
{ label => 'Alice' },
],
);
$app->css(Chandra::Breadcrumb->css);
$crumbs->mount($app, '#breadcrumb');
=head1 SEE ALSO
L<Chandra::Nav>, L<Chandra::Tabs>, L<Chandra::Component>
=cut
( run in 0.572 second using v1.01-cache-2.11-cpan-140bd7fdf52 )