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
- #collapsible_trigger_classes ⇒ Object
- #collapsible_trigger_data_attributes ⇒ Object
- #collapsible_trigger_html_attributes ⇒ Object
Instance Method Details
#collapsible_trigger_classes ⇒ Object
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_attributes ⇒ Object
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_attributes ⇒ Object
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 |