Packages
moon
2.72.1
2.90.5
retired
2.90.4
2.90.3
2.90.2
2.90.1
2.90.0
2.89.4
2.89.1
2.89.0
2.88.0
2.87.11
2.87.10
2.87.9
2.87.8
2.87.7
2.87.6
2.87.5
2.87.4
2.87.3
2.87.2
2.87.1
2.87.0
2.86.1
2.86.0
2.85.1
2.85.0
2.84.0
2.83.0
2.82.0
2.81.4
2.81.3
2.81.2
2.81.1
2.81.0
2.80.2
2.80.1
2.80.0
2.79.13
2.79.12
2.79.11
2.79.10
2.79.9
2.79.8
2.79.7
2.79.6
2.79.5
2.79.4
2.79.3
2.79.2
2.79.1
2.79.0
2.78.4
2.78.3
2.78.2
2.78.1
2.78.0
2.77.0
2.76.5
2.76.4
2.76.3
2.76.2
2.76.1
2.76.0
2.75.0
2.74.1
2.74.0
2.73.8
2.73.7
2.73.6
2.73.5
2.73.4
2.73.3
2.73.2
2.73.1
2.73.0
2.72.5
2.72.4
2.72.3
2.72.2
2.72.1
2.72.0
2.71.1
2.71.0
2.70.0
2.69.2
2.69.1
2.69.0
2.68.11
2.68.10
Components-based design system written in elixir
Current section
Files
Jump to
Current section
Files
lib/moon_web/examples/design/carousel_example/select_index.ex
defmodule MoonWeb.Examples.Design.CarouselExample.SelectIndex do
@moduledoc false
use Moon.StatefulComponent
use MoonWeb, :example
alias Moon.Design.MenuItem
alias Moon.Design.Carousel
prop(item_count, :integer, default: 4)
prop(value, :integer, default: 0)
defp get_items(item_count) do
0..item_count
|> Enum.to_list()
end
def render(assigns) do
~F"""
<div class="flex flex-col items-center gap-4">
<div class="flex gap-1">
<MenuItem
class="px-4"
:for={item <- get_items(@item_count)}
value={item}
is_active={item == @value}
on_click="set_selected_index"
>
{item}
</MenuItem>
</div>
<Carousel class="w-80" id="selected_index" value={@value}>
<Carousel.Reel class="overflow-x-hidden">
<Carousel.Item class="w-80 h-48">
0
</Carousel.Item>
<Carousel.Item class="w-80 h-48">
1
</Carousel.Item>
<Carousel.Item class="w-80 h-48">
2
</Carousel.Item>
<Carousel.Item class="w-80 h-48">
3
</Carousel.Item>
<Carousel.Item class="w-80 h-48">
4
</Carousel.Item>
</Carousel.Reel>
</Carousel>
</div>
"""
end
def handle_event("set_selected_index", %{"value" => item}, socket) do
socket = assign(socket, value: String.to_integer(item))
{:noreply, socket}
end
def code() do
"""
alias Moon.Design.MenuItem
alias Moon.Design.Carousel
prop(item_count, :integer, default: 4)
prop(value, :integer, default: 0)
defp get_items(item_count) do
0..item_count
|> Enum.to_list()
end
def render(assigns) do
~F\"""
<div class="flex flex-col items-center gap-4">
<div class="flex gap-1">
<MenuItem
class="px-4"
:for={item <- get_items(@item_count)}
value={item}
is_active={item == @value}
on_click="set_selected_index"
>
{item}
</MenuItem>
</div>
<Carousel class="w-80" id="selected_index" value={@value}>
<Carousel.Reel class="overflow-x-hidden">
<Carousel.Item class="w-80 h-48">
0
</Carousel.Item>
<Carousel.Item class="w-80 h-48">
1
</Carousel.Item>
<Carousel.Item class="w-80 h-48">
2
</Carousel.Item>
<Carousel.Item class="w-80 h-48">
3
</Carousel.Item>
<Carousel.Item class="w-80 h-48">
4
</Carousel.Item>
</Carousel.Reel>
</Carousel>
</div>
\"""
end
def handle_event("set_selected_index", %{"value" => item}, socket) do
socket = assign(socket, value: String.to_integer(item))
{:noreply, socket}
end
"""
end
end