Class: BetterUi::ActionMessagesComponent
- Inherits:
-
ApplicationComponent
- Object
- ViewComponent::Base
- ApplicationComponent
- BetterUi::ActionMessagesComponent
- Defined in:
- app/components/better_ui/action_messages_component.rb
Overview
ActionMessagesComponent displays a list of messages with customizable styles and variants.
This component is designed for displaying form validation errors, flash notifications, success messages, warnings, and other user feedback. It supports multiple visual styles (solid, soft, outline, ghost), all semantic color variants, optional titles, dismissible functionality, and auto-dismiss timers.
Features:
- 9 color variants (primary, secondary, accent, success, danger, warning, info, light, dark)
- 4 visual styles (solid, soft, outline, ghost)
- Optional title/heading
- Dismissible with close button
- Auto-dismiss after N seconds
- Stimulus controller integration for interactivity
- Icon slot for custom icons (via ViewComponent slots)
Constant Summary
Constants inherited from ApplicationComponent
BetterUi::ApplicationComponent::SHADOWS, BetterUi::ApplicationComponent::VARIANTS, BetterUi::ApplicationComponent::VARIANT_BODY_DIVIDE, BetterUi::ApplicationComponent::VARIANT_DIVIDE, BetterUi::ApplicationComponent::VARIANT_HEADER_BG, BetterUi::ApplicationComponent::VARIANT_HEADER_TEXT, BetterUi::ApplicationComponent::VARIANT_HIGHLIGHTED, BetterUi::ApplicationComponent::VARIANT_HOVERABLE, BetterUi::ApplicationComponent::VARIANT_RING, BetterUi::ApplicationComponent::VARIANT_SORT_ICON, BetterUi::ApplicationComponent::VARIANT_STRIPED
Instance Attribute Summary collapse
-
#auto_dismiss ⇒ Object
readonly
Returns the value of attribute auto_dismiss.
-
#container_classes ⇒ Object
readonly
Returns the value of attribute container_classes.
-
#dismissible ⇒ Object
readonly
Returns the value of attribute dismissible.
-
#messages ⇒ Object
readonly
Returns the value of attribute messages.
-
#style ⇒ Object
readonly
Returns the value of attribute style.
-
#title ⇒ Object
readonly
Returns the value of attribute title.
-
#variant ⇒ Object
readonly
Returns the value of attribute variant.
Instance Method Summary collapse
-
#component_attributes ⇒ Hash
Build HTML attributes for the component Adds Stimulus controller and auto-dismiss data attribute if configured.
-
#component_classes ⇒ String
Build CSS classes for the main container Combines base classes (rounded, padding) with style-specific classes and custom classes.
-
#content_wrapper_classes ⇒ String
CSS classes for the content wrapper (contains icon slot and message list).
-
#dismiss_button_classes ⇒ String
CSS classes for the dismiss button.
-
#initialize(messages: [], variant: :info, style: :soft, dismissible: false, auto_dismiss: nil, title: nil, container_classes: nil, **options) ⇒ ActionMessagesComponent
constructor
Initialize the ActionMessages component.
-
#list_classes ⇒ String
CSS classes for the message list (
- ).
-
#list_item_classes ⇒ String
CSS classes for individual message list items (
- ).
-
#title_classes ⇒ String
CSS classes for the title element.
Constructor Details
#initialize(messages: [], variant: :info, style: :soft, dismissible: false, auto_dismiss: nil, title: nil, container_classes: nil, **options) ⇒ ActionMessagesComponent
Initialize the ActionMessages component
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'app/components/better_ui/action_messages_component.rb', line 62 def initialize( messages: [], variant: :info, style: :soft, dismissible: false, auto_dismiss: nil, title: nil, container_classes: nil, ** ) # Convert messages to array (handles nil and single strings) = Array() @variant = variant.to_sym @style = style.to_sym @dismissible = dismissible @auto_dismiss = auto_dismiss @title = title @container_classes = container_classes = # Validate parameters on initialization validate_variant! validate_style! end |
Instance Attribute Details
#auto_dismiss ⇒ Object (readonly)
Returns the value of attribute auto_dismiss.
50 51 52 |
# File 'app/components/better_ui/action_messages_component.rb', line 50 def auto_dismiss @auto_dismiss end |
#container_classes ⇒ Object (readonly)
Returns the value of attribute container_classes.
50 51 52 |
# File 'app/components/better_ui/action_messages_component.rb', line 50 def container_classes @container_classes end |
#dismissible ⇒ Object (readonly)
Returns the value of attribute dismissible.
50 51 52 |
# File 'app/components/better_ui/action_messages_component.rb', line 50 def dismissible @dismissible end |
#messages ⇒ Object (readonly)
Returns the value of attribute messages.
50 51 52 |
# File 'app/components/better_ui/action_messages_component.rb', line 50 def end |
#style ⇒ Object (readonly)
Returns the value of attribute style.
50 51 52 |
# File 'app/components/better_ui/action_messages_component.rb', line 50 def style @style end |
#title ⇒ Object (readonly)
Returns the value of attribute title.
50 51 52 |
# File 'app/components/better_ui/action_messages_component.rb', line 50 def title @title end |
#variant ⇒ Object (readonly)
Returns the value of attribute variant.
50 51 52 |
# File 'app/components/better_ui/action_messages_component.rb', line 50 def variant @variant end |
Instance Method Details
#component_attributes ⇒ Hash
Build HTML attributes for the component Adds Stimulus controller and auto-dismiss data attribute if configured
101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'app/components/better_ui/action_messages_component.rb', line 101 def component_attributes attrs = .dup attrs[:data] ||= {} # Register Stimulus controller for dismiss/auto-dismiss functionality attrs[:data][:controller] = "better-ui--action-messages" # Add auto-dismiss value if configured (Stimulus will read this) if @auto_dismiss.present? && @auto_dismiss.to_f > 0 attrs[:data][:"better-ui--action-messages-auto-dismiss-value"] = @auto_dismiss.to_f end attrs end |
#component_classes ⇒ String
Build CSS classes for the main container Combines base classes (rounded, padding) with style-specific classes and custom classes
90 91 92 93 94 95 96 |
# File 'app/components/better_ui/action_messages_component.rb', line 90 def component_classes base_classes = [ "rounded-lg", "p-4", "relative" ] style_classes = send("#{@style}_classes") # Dynamically call solid_classes, soft_classes, etc. # Use TailwindMerge to intelligently merge classes (handles conflicts) css_classes(base_classes, style_classes, @container_classes) end |
#content_wrapper_classes ⇒ String
CSS classes for the content wrapper (contains icon slot and message list)
123 124 125 |
# File 'app/components/better_ui/action_messages_component.rb', line 123 def content_wrapper_classes css_classes("flex", "gap-3") end |
#dismiss_button_classes ⇒ String
CSS classes for the dismiss button
141 142 143 144 145 146 |
# File 'app/components/better_ui/action_messages_component.rb', line 141 def = [ "absolute", "top-3", "right-3", "p-1", "rounded", "transition-colors" ] = css_classes(, ) end |
#list_classes ⇒ String
CSS classes for the message list (
- )
129 130 131 |
# File 'app/components/better_ui/action_messages_component.rb', line 129 def list_classes css_classes("list-none", "list-inside", "space-y-1", "flex-1") end |
#list_item_classes ⇒ String
CSS classes for individual message list items (
135 136 137 |
# File 'app/components/better_ui/action_messages_component.rb', line 135 def list_item_classes css_classes("text-sm") end |
#title_classes ⇒ String
CSS classes for the title element
117 118 119 |
# File 'app/components/better_ui/action_messages_component.rb', line 117 def title_classes css_classes("font-semibold", "mb-2", title_color_classes) end |