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