defmodule SpazioSolazzoWeb.PageComponents do @moduledoc """ Provides UI components specific to the page live view. """ use Phoenix.Component import SpazioSolazzoWeb.CoreComponents @doc """ Renders a space card component for displaying booking spaces. ## Examples <.space_card title="Coworking" description="Flexible desk spaces for remote work" price="15" time_unit="4 hours" image_url="https://..." primary_label="Workspace" image_position={:left} booking_url="/coworking" asset_type="Desk" /> <.space_card title="Meeting Room" description="Private conference rooms" price="40" time_unit="hour" image_url="https://..." primary_label="Business" primary_label_variant={:secondary} secondary_label="Up to 8 people" secondary_label_icon="hero-user-group" image_position={:right} booking_url="/meeting" asset_type="Room" /> """ attr :title, :string, required: true attr :description, :string, required: true attr :price, :string, required: true attr :time_unit, :string, required: true attr :image_url, :string, required: true attr :primary_label, :string, required: true attr :primary_label_variant, :atom, default: :primary, values: [:primary, :secondary, :accent] attr :secondary_label, :string, default: nil attr :secondary_label_icon, :string, default: nil attr :note, :string, default: nil attr :image_position, :atom, default: :left, values: [:left, :right] attr :booking_url, :string, required: true attr :asset_type, :string, required: true attr :id, :string, default: nil def space_card(assigns) do ~H"""
{@primary_label}
{@primary_label} <%= if @secondary_label do %>
<%= if @secondary_label_icon do %> <.icon name={@secondary_label_icon} class="size-[18px]" /> <% end %> {@secondary_label}
<% end %>

{@title}

{@description} <%= if @note do %> {@note} <% end %>

Starting from €{@price} / {@time_unit}
<.link navigate={@booking_url} class="h-10 px-6 bg-sky-500 hover:bg-sky-600 text-white rounded-lg font-medium transition-colors flex items-center justify-center gap-2 group-hover:shadow-lg group-hover:shadow-sky-500/20" > <.icon name="hero-calendar" class="size-5" /> Book {@asset_type}
""" end end