Class: DaisyUI::Base
- Inherits:
-
Phlex::HTML
- Object
- Phlex::HTML
- DaisyUI::Base
- Defined in:
- lib/daisy_ui/base.rb
Overview
Base class for all DaisyUI components.
## Architecture Overview
Components accept three types of arguments:
-
Modifiers - Positional symbol arguments that map to DaisyUI CSS classes Example: Dropdown.new(:top, :hover) → “dropdown-top dropdown-hover”
-
Options - Keyword arguments for the component (as:, id:) Example: Dropdown.new(as: :div, id: “my-dropdown”)
-
Attributes - Additional keyword arguments for HTML attributes (data:, aria:, class:) Example: Dropdown.new(data: “dropdown”, class: “my-custom-class”)
## Key Methods
-
‘classes` - Builds the final CSS class string by combining base class, modifiers, responsive classes, and user-provided classes. DESTRUCTIVELY removes :class from options.
-
‘attributes` - Returns the hash of HTML attributes to splat into the element. By default includes all remaining options (after :class was removed) plus :id. Override in subclasses if different behavior is needed.
## Typical Usage Pattern
In a component’s view_template:
def view_template(&)
div(class: classes, **attributes, &)
end
This renders: <div class=“[generated classes]” id=“…” data-…=“…” …>
Direct Known Subclasses
Accordion, Alert, Aura, Avatar, AvatarGroup, Badge, Breadcrumbs, Button, Calendar, Card, Carousel, Chat, Checkbox, Collapse, CollapsibleSubMenu, Countdown, Diff, Divider, Dock, Drawer, Dropdown, Fab, Fieldset, FileInput, Filter, Footer, FormControl, Hero, Hover3d, HoverGallery, Indicator, Input, Join, Kbd, Label, Link, List, Loading, Mask, Megamenu, Menu, MenuItem, MockupBrowser, MockupCode, MockupPhone, MockupWindow, Modal, Navbar, Otp, Pagination, Progress, RadialProgress, Radio, Range, Rating, Select, Skeleton, Stack, Stat, Status, Steps, SubMenu, Swap, Tab, TabWithContent, TabWithoutContent, Table, TableRow, Tabs, TextRotate, Textarea, ThemeController, Timeline, Toast, Toggle, Tooltip, Validator
Constant Summary collapse
- BOOLS =
[true, false].freeze
- COLOR_MODIFIERS =
Shared color modifiers used across multiple components Maps color names to their DaisyUI background/text class combinations
{ # "sm:bg-primary sm:text-primary-content" # "@sm:bg-primary @sm:text-primary-content" # "md:bg-primary md:text-primary-content" # "@md:bg-primary @md:text-primary-content" # "lg:bg-primary lg:text-primary-content" # "@lg:bg-primary @lg:text-primary-content" primary: "bg-primary text-primary-content", # "sm:bg-secondary sm:text-secondary-content" # "@sm:bg-secondary @sm:text-secondary-content" # "md:bg-secondary md:text-secondary-content" # "@md:bg-secondary @md:text-secondary-content" # "lg:bg-secondary lg:text-secondary-content" # "@lg:bg-secondary @lg:text-secondary-content" secondary: "bg-secondary text-secondary-content", # "sm:bg-accent sm:text-accent-content" # "@sm:bg-accent @sm:text-accent-content" # "md:bg-accent md:text-accent-content" # "@md:bg-accent @md:text-accent-content" # "lg:bg-accent lg:text-accent-content" # "@lg:bg-accent @lg:text-accent-content" accent: "bg-accent text-accent-content", # "sm:bg-neutral sm:text-neutral-content" # "@sm:bg-neutral @sm:text-neutral-content" # "md:bg-neutral md:text-neutral-content" # "@md:bg-neutral @md:text-neutral-content" # "lg:bg-neutral lg:text-neutral-content" # "@lg:bg-neutral @lg:text-neutral-content" neutral: "bg-neutral text-neutral-content", # "sm:bg-base-100 sm:text-base-content" # "@sm:bg-base-100 @sm:text-base-content" # "md:bg-base-100 md:text-base-content" # "@md:bg-base-100 @md:text-base-content" # "lg:bg-base-100 lg:text-base-content" # "@lg:bg-base-100 @lg:text-base-content" base_100: "bg-base-100 text-base-content", # "sm:bg-base-200 sm:text-base-content" # "@sm:bg-base-200 @sm:text-base-content" # "md:bg-base-200 md:text-base-content" # "@md:bg-base-200 @md:text-base-content" # "lg:bg-base-200 lg:text-base-content" # "@lg:bg-base-200 @lg:text-base-content" base_200: "bg-base-200 text-base-content", # "sm:bg-base-300 sm:text-base-content" # "@sm:bg-base-300 @sm:text-base-content" # "md:bg-base-300 md:text-base-content" # "@md:bg-base-300 @md:text-base-content" # "lg:bg-base-300 lg:text-base-content" # "@lg:bg-base-300 @lg:text-base-content" base_300: "bg-base-300 text-base-content", # "sm:bg-info sm:text-info-content" # "@sm:bg-info @sm:text-info-content" # "md:bg-info md:text-info-content" # "@md:bg-info @md:text-info-content" # "lg:bg-info lg:text-info-content" # "@lg:bg-info @lg:text-info-content" info: "bg-info text-info-content", # "sm:bg-success sm:text-success-content" # "@sm:bg-success @sm:text-success-content" # "md:bg-success md:text-success-content" # "@md:bg-success @md:text-success-content" # "lg:bg-success lg:text-success-content" # "@lg:bg-success @lg:text-success-content" success: "bg-success text-success-content", # "sm:bg-warning sm:text-warning-content" # "@sm:bg-warning @sm:text-warning-content" # "md:bg-warning md:text-warning-content" # "@md:bg-warning @md:text-warning-content" # "lg:bg-warning lg:text-warning-content" # "@lg:bg-warning @lg:text-warning-content" warning: "bg-warning text-warning-content", # "sm:bg-error sm:text-error-content" # "@sm:bg-error @sm:text-error-content" # "md:bg-error md:text-error-content" # "@md:bg-error @md:text-error-content" # "lg:bg-error lg:text-error-content" # "@lg:bg-error @lg:text-error-content" error: "bg-error text-error-content" }.freeze
Class Attribute Summary collapse
- .component_class ⇒ Object
-
.modifiers ⇒ Object
Returns the value of attribute modifiers.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(*modifiers, as: :div, id: nil, **options) ⇒ Base
constructor
A new instance of Base.
Constructor Details
#initialize(*modifiers, as: :div, id: nil, **options) ⇒ Base
Returns a new instance of Base.
152 153 154 155 156 157 158 159 160 161 162 163 |
# File 'lib/daisy_ui/base.rb', line 152 def initialize(*modifiers, as: :div, id: nil, **) # Extract boolean modifiers from options (e.g., primary: true, secondary: false) boolean_modifiers = extract_boolean_modifiers() @modifiers = modifiers + boolean_modifiers @as = as @id = id # Store all keyword arguments (class, data, aria, etc.) # This will be processed by `classes` and `attributes` methods @options = super() end |
Class Attribute Details
.component_class ⇒ Object
125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/daisy_ui/base.rb', line 125 def component_class return @component_class if instance_variable_defined?(:@component_class) @component_class = begin # Convert "DaisyUI::Button" -> "button" class_name = name.split("::").last # demodulize class_name.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2') .gsub(/([a-z\d])([A-Z])/, '\1_\2') .tr("_", "-") .downcase end end |
.modifiers ⇒ Object
Returns the value of attribute modifiers.
123 124 125 |
# File 'lib/daisy_ui/base.rb', line 123 def modifiers @modifiers end |
Class Method Details
.inherited(subclass) ⇒ Object
138 139 140 141 142 143 144 145 |
# File 'lib/daisy_ui/base.rb', line 138 def inherited(subclass) super subclass.modifiers = (modifiers || {}).dup # Inherit component_class if it was explicitly set return unless instance_variable_defined?(:@component_class) subclass.component_class = @component_class end |
.register_modifiers(mods) ⇒ Object
147 148 149 |
# File 'lib/daisy_ui/base.rb', line 147 def register_modifiers(mods) self.modifiers = (modifiers || {}).merge(mods) end |