Module: UI::SliderBehavior
- Included in:
- Slider, SliderComponent
- Defined in:
- app/behaviors/ui/slider_behavior.rb
Overview
Shared behavior for Slider Root component Handles Stimulus controller setup and data attributes for range slider
Instance Method Summary collapse
-
#merged_data_attributes ⇒ Object
Merge user-provided data attributes with slider controller data.
-
#slider_data_attributes ⇒ Object
Generate Stimulus controller data attributes.
-
#slider_html_attributes ⇒ Object
Build complete HTML attributes hash for slider root.
Instance Method Details
#merged_data_attributes ⇒ Object
Merge user-provided data attributes with slider controller data
29 30 31 32 |
# File 'app/behaviors/ui/slider_behavior.rb', line 29 def merged_data_attributes user_data = @attributes&.fetch(:data, {}) || {} user_data.merge() end |
#slider_data_attributes ⇒ Object
Generate Stimulus controller data attributes
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'app/behaviors/ui/slider_behavior.rb', line 7 def attrs = { controller: "ui--slider", ui__slider_min_value: @min || 0, ui__slider_max_value: @max || 100, ui__slider_step_value: @step || 1, ui__slider_value_value: (@value || @default_value || [0]).to_json, ui__slider_disabled_value: @disabled || false, ui__slider_orientation_value: @orientation || "horizontal", ui__slider_inverted_value: @inverted || false, ui__slider_name_value: @name || "" } # Add center_point if defined (for bidirectional sliders like balance/pan) if @center_point attrs[:ui__slider_center_point_value] = @center_point end attrs end |
#slider_html_attributes ⇒ Object
Build complete HTML attributes hash for slider root
35 36 37 38 39 40 41 42 43 44 45 |
# File 'app/behaviors/ui/slider_behavior.rb', line 35 def base_attrs = @attributes&.except(:data) || {} base_attrs.merge( class: "relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col #{@classes}".strip, "data-orientation": @orientation || "horizontal", "data-disabled": @disabled ? "" : nil, "data-slot": "slider", role: "group", data: merged_data_attributes ).compact end |