Module: UI::MenubarSubTriggerBehavior

Included in:
MenubarSubTrigger, MenubarSubTriggerComponent
Defined in:
app/behaviors/ui/menubar_sub_trigger_behavior.rb

Overview

MenubarSubTriggerBehavior

Shared behavior for MenubarSubTrigger component across ERB, ViewComponent, and Phlex implementations.

Instance Method Summary collapse

Instance Method Details

Returns combined CSS classes for the sub trigger



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

def menubar_sub_trigger_classes
  classes_value = respond_to?(:classes, true) ? classes : @classes
  inset_class = inset? ? "pl-8" : ""

  TailwindMerge::Merger.new.merge([
    "focus:bg-accent focus:text-accent-foreground",
    "data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
    "flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm",
    "outline-hidden select-none whitespace-nowrap",
    "[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
    inset_class,
    classes_value
  ].compact.join(" "))
end

Returns data attributes for the sub trigger



39
40
41
42
43
44
45
46
# File 'app/behaviors/ui/menubar_sub_trigger_behavior.rb', line 39

def menubar_sub_trigger_data_attributes
  attributes_value = respond_to?(:attributes, true) ? attributes : @attributes
  (attributes_value&.fetch(:data, {}) || {}).merge({
    "ui--menubar-target": "item",
    action: "mouseenter->ui--menubar#openSubmenu mouseleave->ui--menubar#closeSubmenu",
    state: "closed"
  })
end

Returns HTML attributes for the sub trigger



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

def menubar_sub_trigger_html_attributes
  attrs = {
    class: menubar_sub_trigger_classes,
    data: menubar_sub_trigger_data_attributes,
    role: "menuitem",
    tabindex: "-1"
  }

  # Add disabled attribute if specified
  attrs[:"data-disabled"] = "" if disabled?

  attrs
end