class Ariadne::UI::Pagination::Component

Pagination is a horizontal set of links to navigate paginated content.

def component_classes

def component_classes
  merge_tailwind_classes(
    "ariadne:flex ariadne:items-center ariadne:justify-between ariadne:w-full",
  )
end

def counter_classes

def counter_classes
  merge_tailwind_classes(
    "ariadne:text-sm ariadne:text-gray-700 ariadne:dark:text-gray-300 ariadne:font-medium",
  )
end

def current_per_page_option

def current_per_page_option
  select_options.find { |option| option[:selected] } || select_options.first
end

def disabled_link_classes

def disabled_link_classes
  merge_tailwind_classes(
    "ariadne:inline-flex ariadne:items-center ariadne:justify-center ariadne:min-w-[2rem] ariadne:h-8 ariadne:px-2 ariadne:text-sm ariadne:font-medium ariadne:rounded-md ariadne:text-gray-300 ariadne:dark:text-gray-600 ariadne:cursor-not-allowed",
  )
end

def ellipsis_classes

def ellipsis_classes
  merge_tailwind_classes(
    "ariadne:inline-flex ariadne:items-center ariadne:justify-center ariadne:min-w-[2rem] ariadne:h-8 ariadne:px-1 ariadne:text-sm ariadne:font-medium ariadne:text-gray-500 ariadne:dark:text-gray-400",
  )
end

def formatted_info

def formatted_info
  {
    text: "#{calculator.from}-#{calculator.to} of #{total_count}",
    role: "status",
    aria: { live: "polite" },
  }
end

def initialize(**options)

def initialize(**options)
  super
  @calculator = Ariadne::PaginationCalculator.new(
    total_count: total_count,
    page: current_page,
    items_per_page: items_per_page,
  )
end

def link_classes(is_active = false)

def link_classes(is_active = false)
  base_classes = "ariadne:inline-flex ariadne:items-center ariadne:justify-center ariadne:min-w-[2rem] ariadne:h-8 ariadne:px-2 ariadne:text-sm ariadne:font-medium ariadne:rounded-md"
  active_classes = if is_active
    "ariadne:bg-gray-100 ariadne:dark:bg-gray-700 ariadne:text-gray-900 ariadne:dark:text-white ariadne:cursor-default"
  else
    "ariadne:transition-colors ariadne:text-gray-600 ariadne:hover:bg-gray-50 ariadne:dark:text-gray-300 ariadne:dark:hover:bg-gray-700 ariadne:cursor-pointer"
  end
  merge_tailwind_classes([base_classes, active_classes])
end

def nav_section_classes

def nav_section_classes
  merge_tailwind_classes(
    "ariadne:flex ariadne:items-center ariadne:gap-1 ariadne:justify-center",
  )
end

def page_links

def page_links
  calculator.page_series
end

def select_classes

def select_classes
  merge_tailwind_classes(
    "ariadne:h-8 ariadne:pl-2 ariadne:pr-8 ariadne:text-sm ariadne:font-medium ariadne:rounded-md ariadne:border ariadne:border-gray-300 ariadne:dark:border-gray-600 ariadne:bg-white ariadne:dark:bg-gray-800 ariadne:text-gray-700 ariadne:dark:text-gray-200 ariadne:hover:border-primary-500 ariadne:focus:outline-hidden ariadne:focus:ring-1 ariadne:focus:ring-primary-500 ariadne:focus:border-primary-500",
  )
end

def select_options

def select_options
  per_page_options.map do |size|
    {
      value: callback_per_page_change.call(size),
      label: "#{size} per page",
      selected: size == items_per_page,
    }
  end
end