defmodule MoonComponents.Banner.Container do
@moduledoc false
use Moon.StatelessComponent
prop(is_mobile, :boolean, default: false)
prop(has_buttons, :boolean, default: false)
slot(default)
def render(assigns) do
~F"""
<#slot />
"""
end
defp get_container_padding(is_mobile) do
if is_mobile do
"p-4"
else
"p-6"
end
end
defp get_container_display(has_buttons, is_mobile) do
if has_buttons && !is_mobile do
"flex flex-row justify-between"
else
"block"
end
end
end
defmodule MoonComponents.Banner.Body do
@moduledoc false
use Moon.StatelessComponent
prop(is_multiline, :boolean, default: true)
slot(default)
def render(assigns) do
~F"""
<#slot />
"""
end
defp get_body_classes(is_multiline) do
if is_multiline do
"grid grid-rows-[1fr_1fr]"
else
"flex gap-2"
end
end
end
defmodule MoonComponents.Banner.BodyContent do
@moduledoc false
use Moon.StatelessComponent
prop(is_multiline, :boolean, default: true)
slot(default)
def render(assigns) do
~F"""
<#slot />
"""
end
defp get_body_content_classes(is_multiline) do
if is_multiline do
"block"
else
"flex"
end
end
end
defmodule MoonComponents.Banner.BodyButtonContainer do
@moduledoc false
use Moon.StatelessComponent
slot(default)
def render(assigns) do
~F"""
<#slot />
"""
end
end
defmodule Moon.Components.Banner do
@moduledoc false
use Moon.StatelessComponent
alias MoonComponents.Banner.Container
alias MoonComponents.Banner.Body
alias MoonComponents.Banner.BodyContent
alias MoonComponents.Banner.BodyButtonContainer
prop(description, :string, required: true)
prop(title, :string)
prop(is_multiline, :boolean, default: true)
prop(is_mobile, :boolean, default: false)
slot(icon_header_slot)
slot(buttons_slot)
slot(link_slot)
def render(assigns) do
~F"""
{@description}
<#slot {@link_slot} />
{@title}
<#slot {@icon_header_slot} />
{@description}
<#slot {@buttons_slot} />
"""
end
end