defmodule <%= @module_name %>.Components.UI.Pagination do @moduledoc """ Pagination navigation component. Ejected from PhiaUI — you own this copy. Customise freely. ## Example <.pagination> <.pagination_content> <.pagination_item> <.pagination_previous current_page={@page} total_pages={@total} on_change="go" /> <%= for p <- 1..@total do %> <.pagination_item> <.pagination_link page={p} current_page={@page} on_change="go"> <%= p %> <% end %> <.pagination_item> <.pagination_next current_page={@page} total_pages={@total} on_change="go" /> In your LiveView: def handle_event("go", %{"page" => page}, socket) do {:noreply, assign(socket, page: String.to_integer(page))} end """ use Phoenix.Component import <%= @module_name %>.ClassMerger, only: [cn: 1] import <%= @module_name %>.Components.UI.Icon, only: [icon: 1] attr :class, :string, default: nil, doc: "Additional CSS classes" attr :rest, :global slot :inner_block, required: true def pagination(assigns) do ~H""" """ end attr :class, :string, default: nil attr :rest, :global slot :inner_block, required: true def pagination_content(assigns) do ~H""" """ end attr :class, :string, default: nil attr :rest, :global slot :inner_block, required: true def pagination_item(assigns) do ~H"""
  • <%%= render_slot(@inner_block) %>
  • """ end attr :page, :integer, required: true, doc: "The page number this link represents" attr :current_page, :integer, required: true, doc: "The currently active page" attr :on_change, :string, default: "page-changed", doc: "phx-click event name" attr :class, :string, default: nil attr :rest, :global slot :inner_block, required: true def pagination_link(assigns) do ~H""" """ end attr :current_page, :integer, required: true attr :total_pages, :integer, required: true attr :on_change, :string, default: "page-changed" attr :class, :string, default: nil attr :rest, :global def pagination_previous(assigns) do ~H""" """ end attr :current_page, :integer, required: true attr :total_pages, :integer, required: true attr :on_change, :string, default: "page-changed" attr :class, :string, default: nil attr :rest, :global def pagination_next(assigns) do ~H""" """ end attr :class, :string, default: nil attr :rest, :global def pagination_ellipsis(assigns) do ~H""" """ end end