Class: Panda::Core::Base
- Inherits:
-
Phlex::HTML
- Object
- Phlex::HTML
- Panda::Core::Base
- Extended by:
- Literal::Properties
- Includes:
- Phlex::Rails::Helpers::Routes
- Defined in:
- app/components/panda/core/base.rb
Overview
Base class for all Phlex components in the Panda ecosystem.
This base component provides:
-
Type-safe properties via Literal
-
Tailwind CSS class merging
-
Attribute merging with sensible defaults
-
Rails helper integration
-
Development-mode debugging comments
Direct Known Subclasses
Admin::BreadcrumbComponent, Admin::ButtonComponent, Admin::ContainerComponent, Admin::FileGalleryComponent, Admin::FlashMessageComponent, Admin::FormErrorComponent, Admin::FormInputComponent, Admin::FormSelectComponent, Admin::HeadingComponent, Admin::PageHeaderComponent, Admin::PanelComponent, Admin::SlideoverComponent, Admin::StatisticsComponent, Admin::TabBarComponent, Admin::TableComponent, Admin::TagComponent, Admin::UserActivityComponent, Admin::UserDisplayComponent, UI::Badge, UI::Button, UI::Card
Constant Summary collapse
- TAILWIND_MERGER =
Frozen instance of TailwindMerge for efficient class merging
::TailwindMerge::Merger.new.freeze
Instance Method Summary collapse
- #after_template ⇒ Object
-
#attrs ⇒ Hash
Special handling for the attrs property - merges user attributes with defaults and intelligently handles Tailwind class merging.
- #before_template ⇒ Object
-
#default_attrs ⇒ Hash
Override this method in subclasses to provide default attributes for your component.
-
#merge_attrs(user_attrs, default_attrs) ⇒ Hash
Merges user-provided attributes with default attributes.
-
#tailwind_merge_attrs(user_attrs, default_attrs) ⇒ Hash
Helper alias for merge_attrs with clearer intent.
Instance Method Details
#after_template ⇒ Object
114 115 116 117 118 |
# File 'app/components/panda/core/base.rb', line 114 def after_template class_name = self.class.name super comment { "End #{class_name}" } end |
#attrs ⇒ Hash
Special handling for the attrs property - merges user attributes with defaults and intelligently handles Tailwind class merging
61 62 63 |
# File 'app/components/panda/core/base.rb', line 61 prop :attrs, Hash, :**, reader: :private do |value| merge_attrs(value, default_attrs) end |
#before_template ⇒ Object
108 109 110 111 112 |
# File 'app/components/panda/core/base.rb', line 108 def before_template class_name = self.class.name comment { "Begin #{class_name}" } super end |
#default_attrs ⇒ Hash
Override this method in subclasses to provide default attributes for your component.
101 102 103 |
# File 'app/components/panda/core/base.rb', line 101 def default_attrs {} end |
#merge_attrs(user_attrs, default_attrs) ⇒ Hash
Merges user-provided attributes with default attributes. Special handling for :class to merge Tailwind classes intelligently.
71 72 73 74 75 76 77 |
# File 'app/components/panda/core/base.rb', line 71 def merge_attrs(user_attrs, default_attrs) attrs = default_attrs.merge(user_attrs) if attrs[:class].is_a?(String) attrs[:class] = TAILWIND_MERGER.merge(attrs[:class]) end attrs end |
#tailwind_merge_attrs(user_attrs, default_attrs) ⇒ Hash
Helper alias for merge_attrs with clearer intent
84 85 86 |
# File 'app/components/panda/core/base.rb', line 84 def tailwind_merge_attrs(user_attrs, default_attrs) merge_attrs(user_attrs, default_attrs) end |