Module: UI::CollapsibleTriggerBehavior

Included in:
CollapsibleTrigger, CollapsibleTriggerComponent
Defined in:
app/behaviors/ui/collapsible_trigger_behavior.rb

Overview

TriggerBehavior

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

Constant Summary collapse

TRIGGER_BASE_CLASSES =

Base classes for standalone trigger (when not using as_child with Button) Includes focus ring, sizing, and ghost-like hover styles Matches Button with variant: :ghost, size: :sm, classes: “w-9 p-0”

[
  # Focus styles
  "outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
  # Base button styles (rounded-lg to match Button)
  "inline-flex items-center justify-center rounded-lg",
  # Size (h-8 from size: :sm, w-9 and p-0 from custom classes)
  "h-8 w-9 p-0",
  # Ghost variant hover
  "hover:bg-accent hover:text-accent-foreground",
  # Transition
  "transition-colors"
].join(" ")

Instance Method Summary collapse

Instance Method Details

#collapsible_trigger_classesObject



34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'app/behaviors/ui/collapsible_trigger_behavior.rb', line 34

def collapsible_trigger_classes
  classes_value = respond_to?(:classes, true) ? classes : @classes
  as_child_value = respond_to?(:as_child, true) ? as_child : @as_child

  # Only apply base classes when NOT using as_child mode
  # When as_child is true, the parent component provides its own styling
  if as_child_value
    return nil if classes_value.blank?
    TailwindMerge::Merger.new.merge([classes_value].compact.join(" "))
  else
    TailwindMerge::Merger.new.merge([TRIGGER_BASE_CLASSES, classes_value].compact.join(" "))
  end
end

#collapsible_trigger_data_attributesObject



48
49
50
51
52
53
54
# File 'app/behaviors/ui/collapsible_trigger_behavior.rb', line 48

def collapsible_trigger_data_attributes
  {
    slot: "collapsible-trigger",
    ui__collapsible_target: "trigger",
    action: "click->ui--collapsible#toggle"
  }
end

#collapsible_trigger_html_attributesObject



25
26
27
28
29
30
31
32
# File 'app/behaviors/ui/collapsible_trigger_behavior.rb', line 25

def collapsible_trigger_html_attributes
  attrs = {
    data: collapsible_trigger_data_attributes
  }
  trigger_classes = collapsible_trigger_classes
  attrs[:class] = trigger_classes unless trigger_classes.blank?
  attrs
end