Module: UI::PaginationLinkBehavior

Included in:
PaginationLink, PaginationLinkComponent
Defined in:
app/behaviors/ui/pagination_link_behavior.rb

Overview

Shared behavior for Pagination Link component Handles link styling and active state

Instance Method Summary collapse

Instance Method Details

Base CSS classes for pagination link (from button component)



7
8
9
# File 'app/behaviors/ui/pagination_link_behavior.rb', line 7

def link_base_classes
  "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-lg text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive"
end

Merge all classes using TailwindMerge



37
38
39
40
41
42
43
44
# File 'app/behaviors/ui/pagination_link_behavior.rb', line 37

def link_classes
  TailwindMerge::Merger.new.merge([
    link_base_classes,
    link_variant_classes,
    link_size_classes,
    @classes
  ].compact.join(" "))
end

Build complete HTML attributes hash for pagination link



47
48
49
50
51
52
53
54
55
56
# File 'app/behaviors/ui/pagination_link_behavior.rb', line 47

def link_html_attributes
  base_attrs = @attributes&.except(:data) || {}
  base_attrs.merge(
    href: @href,
    "data-slot": "pagination-link",
    "data-active": @active ? "true" : nil,
    "aria-current": @active ? "page" : nil,
    class: link_classes
  ).compact
end

Size classes for pagination link



21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'app/behaviors/ui/pagination_link_behavior.rb', line 21

def link_size_classes
  case @size.to_s
  when "icon"
    "size-9"
  when "default"
    "h-9 px-4 py-2"
  when "sm"
    "h-8 px-3 text-xs"
  when "lg"
    "h-10 px-8"
  else
    "size-9"
  end
end

Variant classes based on active state



12
13
14
15
16
17
18
# File 'app/behaviors/ui/pagination_link_behavior.rb', line 12

def link_variant_classes
  if @active
    "border border-input bg-background hover:bg-accent hover:text-accent-foreground"
  else
    "hover:bg-accent hover:text-accent-foreground"
  end
end