Module: UI::SelectItemBehavior

Included in:
SelectItem, SelectItemComponent
Defined in:
app/helpers/ui/select_item_behavior.rb,
app/behaviors/ui/select_item_behavior.rb

Overview

UI::SelectItemBehavior

Shared behavior for Individual select option across ERB, ViewComponent, and Phlex implementations. This module provides consistent HTML attribute generation and styling.

Instance Method Summary collapse

Instance Method Details

#select_item_classesObject

Returns combined CSS classes



34
35
36
37
38
39
40
# File 'app/helpers/ui/select_item_behavior.rb', line 34

def select_item_classes
  classes_value = respond_to?(:classes, true) ? classes : @classes
  TailwindMerge::Merger.new.merge([
    select_item_base_classes,
    classes_value
  ].compact.join(" "))
end

#select_item_html_attributesObject

Returns HTML attributes for the select item element



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'app/helpers/ui/select_item_behavior.rb', line 9

def select_item_html_attributes
  attributes_value = respond_to?(:attributes, true) ? attributes : @attributes
  attrs = {
    class: select_item_classes,
    role: "option",
    "aria-selected": "false",
    data: {
      ui__select_target: "item",
      action: "click->ui--select#selectItem mouseenter->ui--select#handleItemMouseEnter mouseleave->ui--select#handleItemMouseLeave",
      value: @value,
      slot: "select-item" # ADDED: data-slot attribute
    }
  }

  # Add disabled state if specified
  if @disabled
    attrs[:data][:disabled] = "true"
    attrs[:"aria-disabled"] = "true"
    attrs[:data][:state] = "disabled"
  end

  attrs.merge(attributes_value || {})
end