Module: UI::NavigationMenuTriggerBehavior

Included in:
NavigationMenuTrigger, NavigationMenuTriggerComponent
Defined in:
app/behaviors/ui/navigation_menu_trigger_behavior.rb

Overview

TriggerBehavior

Shared behavior for NavigationMenu Trigger component.

Instance Method Summary collapse

Instance Method Details

Returns CSS classes for the chevron icon



53
54
55
# File 'app/behaviors/ui/navigation_menu_trigger_behavior.rb', line 53

def navigation_menu_trigger_chevron_classes
  "size-3 shrink-0 transition-transform duration-200 group-data-[state=open]/navigation-menu-trigger:rotate-180"
end

Returns combined CSS classes for the trigger



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

def navigation_menu_trigger_classes
  classes_value = respond_to?(:classes, true) ? classes : @classes
  TailwindMerge::Merger.new.merge([
    # Base styles
    "group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center gap-1",
    "rounded-md bg-background px-4 py-2 text-sm font-medium",
    # Focus and hover states
    "outline-hidden transition-colors",
    "hover:bg-accent hover:text-accent-foreground",
    "focus:bg-accent focus:text-accent-foreground",
    "focus-visible:ring-[3px] focus-visible:ring-ring/50",
    # Disabled state
    "disabled:pointer-events-none disabled:opacity-50",
    # Open state
    "data-[state=open]:bg-accent/50 data-[state=open]:text-accent-foreground",
    classes_value
  ].compact.join(" "))
end

Returns data attributes



41
42
43
44
45
46
47
48
49
50
# File 'app/behaviors/ui/navigation_menu_trigger_behavior.rb', line 41

def navigation_menu_trigger_data_attributes
  attributes_value = respond_to?(:attributes, true) ? attributes : @attributes
  base_data = {
    slot: "navigation-menu-trigger",
    state: "closed",
    "ui--navigation-menu-target": "trigger",
    action: "click->ui--navigation-menu#toggle mouseenter->ui--navigation-menu#handleTriggerHover mouseleave->ui--navigation-menu#handleTriggerLeave"
  }
  (attributes_value&.fetch(:data, {}) || {}).merge(base_data)
end

Returns HTML attributes for the trigger



8
9
10
11
12
13
14
15
16
17
18
# File 'app/behaviors/ui/navigation_menu_trigger_behavior.rb', line 8

def navigation_menu_trigger_html_attributes
  first_value = defined?(@first) && @first

  {
    class: navigation_menu_trigger_classes,
    data: navigation_menu_trigger_data_attributes,
    type: "button",
    "aria-expanded": "false",
    tabindex: first_value ? "0" : "-1"
  }
end