Class: PhlexKit::ContextMenuItem

Inherits:
BaseComponent show all
Defined in:
app/components/phlex_kit/context_menu/context_menu_item.rb

Overview

A menu row in a PhlexKit::ContextMenuContent. Matches the dropdown-menu grammar: gap-based layout (no forced inset), variant: :destructive, checked: renders a leading ✓, shortcut: a trailing kbd hint (or compose ContextMenuShortcut yourself). Closes the menu on click. See context_menu.rb.

Constant Summary collapse

VARIANTS =
{ default: nil, destructive: "destructive" }.freeze

Instance Method Summary collapse

Methods inherited from BaseComponent

#on

Constructor Details

#initialize(href: "#", checked: false, shortcut: nil, disabled: false, variant: :default, **attrs) ⇒ ContextMenuItem

Returns a new instance of ContextMenuItem.



10
11
12
13
14
15
16
17
# File 'app/components/phlex_kit/context_menu/context_menu_item.rb', line 10

def initialize(href: "#", checked: false, shortcut: nil, disabled: false, variant: :default, **attrs)
  @href = href
  @checked = checked
  @shortcut = shortcut
  @disabled = disabled
  @variant = variant.to_sym
  @attrs = attrs
end

Instance Method Details

#view_template(&block) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'app/components/phlex_kit/context_menu/context_menu_item.rb', line 19

def view_template(&block)
  classes = [ "pk-context-menu-item", VARIANTS.fetch(@variant) ].compact.join(" ")
  a(**mix({ href: @href, role: "menuitem", tabindex: "-1", class: classes,
            data: { action: "click->phlex-kit--context-menu#close", phlex_kit__context_menu_target: "menuItem", disabled: @disabled } }, @attrs)) do
    if @checked
      span(class: "pk-context-menu-check") do
        render Icon.new(:check, size: nil)
      end
    end
    yield
    span(class: "pk-context-menu-shortcut") { @shortcut } if @shortcut
  end
end