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