better_ui 0.6.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +257 -212
- data/Rakefile +11 -2
- data/app/components/better_ui/action_messages_component/action_messages_component.html.erb +48 -0
- data/app/components/better_ui/action_messages_component.rb +544 -0
- data/app/components/better_ui/application_component.rb +66 -0
- data/app/components/better_ui/button_component/button_component.html.erb +31 -0
- data/app/components/better_ui/button_component.rb +307 -0
- data/app/components/better_ui/card_component/card_component.html.erb +17 -0
- data/app/components/better_ui/card_component.rb +460 -0
- data/app/components/better_ui/drawer/header_component/header_component.html.erb +24 -0
- data/app/components/better_ui/drawer/header_component.rb +238 -0
- data/app/components/better_ui/drawer/layout_component/layout_component.html.erb +44 -0
- data/app/components/better_ui/drawer/layout_component.rb +270 -0
- data/app/components/better_ui/drawer/nav_group_component/nav_group_component.html.erb +10 -0
- data/app/components/better_ui/drawer/nav_group_component.rb +155 -0
- data/app/components/better_ui/drawer/nav_item_component/nav_item_component.html.erb +13 -0
- data/app/components/better_ui/drawer/nav_item_component.rb +225 -0
- data/app/components/better_ui/drawer/sidebar_component/sidebar_component.html.erb +17 -0
- data/app/components/better_ui/drawer/sidebar_component.rb +263 -0
- data/app/components/better_ui/forms/base_component.rb +450 -0
- data/app/components/better_ui/forms/checkbox_component/checkbox_component.html.erb +28 -0
- data/app/components/better_ui/forms/checkbox_component.rb +419 -0
- data/app/components/better_ui/forms/checkbox_group_component/checkbox_group_component.html.erb +40 -0
- data/app/components/better_ui/forms/checkbox_group_component.rb +363 -0
- data/app/components/better_ui/forms/number_input_component/number_input_component.html.erb +40 -0
- data/app/components/better_ui/forms/number_input_component.rb +320 -0
- data/app/components/better_ui/forms/password_input_component/password_input_component.html.erb +71 -0
- data/app/components/better_ui/forms/password_input_component.rb +206 -0
- data/app/components/better_ui/forms/text_input_component/text_input_component.html.erb +40 -0
- data/app/components/better_ui/forms/text_input_component.rb +258 -0
- data/app/components/better_ui/forms/textarea_component/textarea_component.html.erb +40 -0
- data/app/components/better_ui/forms/textarea_component.rb +329 -0
- data/app/form_builders/better_ui/ui_form_builder.rb +467 -0
- data/app/helpers/better_ui/application_helper.rb +325 -58
- data/app/views/layouts/better_ui/application.html.erb +1 -1
- data/config/routes.rb +1 -0
- data/lib/better_ui/engine.rb +34 -5
- data/lib/better_ui/version.rb +1 -1
- data/lib/better_ui.rb +32 -5
- data/lib/generators/better_ui/install/USAGE +44 -0
- data/lib/generators/better_ui/install/install_generator.rb +87 -0
- data/lib/generators/better_ui/install/templates/better_ui_theme.css.tt +280 -0
- data/lib/tasks/better_ui_tasks.rake +39 -4
- metadata +55 -203
- data/app/components/better_ui/application/card/component.html.erb +0 -20
- data/app/components/better_ui/application/card/component.rb +0 -214
- data/app/components/better_ui/application/main/component.html.erb +0 -9
- data/app/components/better_ui/application/main/component.rb +0 -123
- data/app/components/better_ui/application/navbar/component.html.erb +0 -92
- data/app/components/better_ui/application/navbar/component.rb +0 -136
- data/app/components/better_ui/application/sidebar/component.html.erb +0 -249
- data/app/components/better_ui/application/sidebar/component.rb +0 -187
- data/app/components/better_ui/general/accordion/component.html.erb +0 -5
- data/app/components/better_ui/general/accordion/component.rb +0 -92
- data/app/components/better_ui/general/accordion/item_component.html.erb +0 -12
- data/app/components/better_ui/general/accordion/item_component.rb +0 -176
- data/app/components/better_ui/general/alert/component.html.erb +0 -32
- data/app/components/better_ui/general/alert/component.rb +0 -242
- data/app/components/better_ui/general/avatar/component.html.erb +0 -20
- data/app/components/better_ui/general/avatar/component.rb +0 -301
- data/app/components/better_ui/general/badge/component.html.erb +0 -23
- data/app/components/better_ui/general/badge/component.rb +0 -248
- data/app/components/better_ui/general/breadcrumb/component.html.erb +0 -15
- data/app/components/better_ui/general/breadcrumb/component.rb +0 -187
- data/app/components/better_ui/general/button/component.html.erb +0 -34
- data/app/components/better_ui/general/button/component.rb +0 -214
- data/app/components/better_ui/general/divider/component.html.erb +0 -10
- data/app/components/better_ui/general/divider/component.rb +0 -226
- data/app/components/better_ui/general/dropdown/component.html.erb +0 -28
- data/app/components/better_ui/general/dropdown/component.rb +0 -192
- data/app/components/better_ui/general/dropdown/divider_component.html.erb +0 -1
- data/app/components/better_ui/general/dropdown/divider_component.rb +0 -41
- data/app/components/better_ui/general/dropdown/item_component.html.erb +0 -6
- data/app/components/better_ui/general/dropdown/item_component.rb +0 -119
- data/app/components/better_ui/general/field/component.html.erb +0 -27
- data/app/components/better_ui/general/field/component.rb +0 -37
- data/app/components/better_ui/general/grid/cell_component.html.erb +0 -3
- data/app/components/better_ui/general/grid/cell_component.rb +0 -390
- data/app/components/better_ui/general/grid/component.html.erb +0 -3
- data/app/components/better_ui/general/grid/component.rb +0 -301
- data/app/components/better_ui/general/heading/component.html.erb +0 -22
- data/app/components/better_ui/general/heading/component.rb +0 -257
- data/app/components/better_ui/general/icon/component.html.erb +0 -7
- data/app/components/better_ui/general/icon/component.rb +0 -240
- data/app/components/better_ui/general/input/checkbox/component.html.erb +0 -5
- data/app/components/better_ui/general/input/checkbox/component.rb +0 -238
- data/app/components/better_ui/general/input/datetime/component.html.erb +0 -5
- data/app/components/better_ui/general/input/datetime/component.rb +0 -223
- data/app/components/better_ui/general/input/pin/component.html.erb +0 -1
- data/app/components/better_ui/general/input/pin/component.rb +0 -201
- data/app/components/better_ui/general/input/radio/component.html.erb +0 -5
- data/app/components/better_ui/general/input/radio/component.rb +0 -230
- data/app/components/better_ui/general/input/rating/component.html.erb +0 -4
- data/app/components/better_ui/general/input/rating/component.rb +0 -272
- data/app/components/better_ui/general/input/select/component.html.erb +0 -78
- data/app/components/better_ui/general/input/select/component.rb +0 -249
- data/app/components/better_ui/general/input/select/select_component.html.erb +0 -5
- data/app/components/better_ui/general/input/select/select_component.rb +0 -37
- data/app/components/better_ui/general/input/text/component.html.erb +0 -5
- data/app/components/better_ui/general/input/text/component.rb +0 -171
- data/app/components/better_ui/general/input/textarea/component.html.erb +0 -5
- data/app/components/better_ui/general/input/textarea/component.rb +0 -166
- data/app/components/better_ui/general/input/toggle/component.html.erb +0 -5
- data/app/components/better_ui/general/input/toggle/component.rb +0 -242
- data/app/components/better_ui/general/link/component.html.erb +0 -18
- data/app/components/better_ui/general/link/component.rb +0 -258
- data/app/components/better_ui/general/modal/component.html.erb +0 -5
- data/app/components/better_ui/general/modal/component.rb +0 -47
- data/app/components/better_ui/general/modal/modal_component.html.erb +0 -52
- data/app/components/better_ui/general/modal/modal_component.rb +0 -160
- data/app/components/better_ui/general/pagination/component.html.erb +0 -85
- data/app/components/better_ui/general/pagination/component.rb +0 -216
- data/app/components/better_ui/general/panel/component.html.erb +0 -28
- data/app/components/better_ui/general/panel/component.rb +0 -249
- data/app/components/better_ui/general/progress/component.html.erb +0 -11
- data/app/components/better_ui/general/progress/component.rb +0 -160
- data/app/components/better_ui/general/spinner/component.html.erb +0 -35
- data/app/components/better_ui/general/spinner/component.rb +0 -93
- data/app/components/better_ui/general/table/component.html.erb +0 -5
- data/app/components/better_ui/general/table/component.rb +0 -217
- data/app/components/better_ui/general/table/tbody_component.html.erb +0 -3
- data/app/components/better_ui/general/table/tbody_component.rb +0 -30
- data/app/components/better_ui/general/table/td_component.html.erb +0 -3
- data/app/components/better_ui/general/table/td_component.rb +0 -44
- data/app/components/better_ui/general/table/tfoot_component.html.erb +0 -3
- data/app/components/better_ui/general/table/tfoot_component.rb +0 -28
- data/app/components/better_ui/general/table/th_component.html.erb +0 -6
- data/app/components/better_ui/general/table/th_component.rb +0 -51
- data/app/components/better_ui/general/table/thead_component.html.erb +0 -3
- data/app/components/better_ui/general/table/thead_component.rb +0 -28
- data/app/components/better_ui/general/table/tr_component.html.erb +0 -3
- data/app/components/better_ui/general/table/tr_component.rb +0 -30
- data/app/components/better_ui/general/tabs/component.html.erb +0 -11
- data/app/components/better_ui/general/tabs/component.rb +0 -120
- data/app/components/better_ui/general/tabs/panel_component.html.erb +0 -3
- data/app/components/better_ui/general/tabs/panel_component.rb +0 -37
- data/app/components/better_ui/general/tabs/tab_component.html.erb +0 -13
- data/app/components/better_ui/general/tabs/tab_component.rb +0 -111
- data/app/components/better_ui/general/tag/component.html.erb +0 -3
- data/app/components/better_ui/general/tag/component.rb +0 -104
- data/app/components/better_ui/general/text/component.html.erb +0 -1
- data/app/components/better_ui/general/text/component.rb +0 -194
- data/app/components/better_ui/general/tooltip/component.html.erb +0 -7
- data/app/components/better_ui/general/tooltip/component.rb +0 -239
- data/app/helpers/better_ui/application/components/card/card_helper.rb +0 -96
- data/app/helpers/better_ui/application/components/card.rb +0 -11
- data/app/helpers/better_ui/application/components/main/main_helper.rb +0 -64
- data/app/helpers/better_ui/application/components/navbar/navbar_helper.rb +0 -77
- data/app/helpers/better_ui/application/components/sidebar/sidebar_helper.rb +0 -51
- data/app/helpers/better_ui/general/components/accordion/accordion_helper.rb +0 -73
- data/app/helpers/better_ui/general/components/alert/alert_helper.rb +0 -57
- data/app/helpers/better_ui/general/components/avatar/avatar_helper.rb +0 -29
- data/app/helpers/better_ui/general/components/badge/badge_helper.rb +0 -53
- data/app/helpers/better_ui/general/components/breadcrumb/breadcrumb_helper.rb +0 -37
- data/app/helpers/better_ui/general/components/button/button_helper.rb +0 -65
- data/app/helpers/better_ui/general/components/container/container_helper.rb +0 -60
- data/app/helpers/better_ui/general/components/divider/divider_helper.rb +0 -63
- data/app/helpers/better_ui/general/components/dropdown/divider_helper.rb +0 -32
- data/app/helpers/better_ui/general/components/dropdown/dropdown_helper.rb +0 -88
- data/app/helpers/better_ui/general/components/dropdown/item_helper.rb +0 -68
- data/app/helpers/better_ui/general/components/field/field_helper.rb +0 -26
- data/app/helpers/better_ui/general/components/grid/grid_helper.rb +0 -145
- data/app/helpers/better_ui/general/components/heading/heading_helper.rb +0 -72
- data/app/helpers/better_ui/general/components/icon/icon_helper.rb +0 -16
- data/app/helpers/better_ui/general/components/input/checkbox/checkbox_helper.rb +0 -81
- data/app/helpers/better_ui/general/components/input/datetime/datetime_helper.rb +0 -91
- data/app/helpers/better_ui/general/components/input/pin/pin_helper.rb +0 -76
- data/app/helpers/better_ui/general/components/input/radio/radio_helper.rb +0 -79
- data/app/helpers/better_ui/general/components/input/radio_group/radio_group_helper.rb +0 -124
- data/app/helpers/better_ui/general/components/input/rating/rating_helper.rb +0 -70
- data/app/helpers/better_ui/general/components/input/select/select_helper.rb +0 -86
- data/app/helpers/better_ui/general/components/input/text/text_helper.rb +0 -138
- data/app/helpers/better_ui/general/components/input/textarea/textarea_helper.rb +0 -73
- data/app/helpers/better_ui/general/components/input/toggle/toggle_helper.rb +0 -77
- data/app/helpers/better_ui/general/components/link/link_helper.rb +0 -89
- data/app/helpers/better_ui/general/components/modal/modal_helper.rb +0 -85
- data/app/helpers/better_ui/general/components/pagination/pagination_helper.rb +0 -82
- data/app/helpers/better_ui/general/components/panel/panel_helper.rb +0 -83
- data/app/helpers/better_ui/general/components/progress/progress_helper.rb +0 -53
- data/app/helpers/better_ui/general/components/spinner/spinner_helper.rb +0 -19
- data/app/helpers/better_ui/general/components/table/table_helper.rb +0 -53
- data/app/helpers/better_ui/general/components/table/tbody_helper.rb +0 -13
- data/app/helpers/better_ui/general/components/table/td_helper.rb +0 -19
- data/app/helpers/better_ui/general/components/table/tfoot_helper.rb +0 -13
- data/app/helpers/better_ui/general/components/table/th_helper.rb +0 -19
- data/app/helpers/better_ui/general/components/table/thead_helper.rb +0 -13
- data/app/helpers/better_ui/general/components/table/tr_helper.rb +0 -13
- data/app/helpers/better_ui/general/components/tabs/panel_helper.rb +0 -62
- data/app/helpers/better_ui/general/components/tabs/tab_helper.rb +0 -55
- data/app/helpers/better_ui/general/components/tabs/tabs_helper.rb +0 -95
- data/app/helpers/better_ui/general/components/tag/tag_helper.rb +0 -26
- data/app/helpers/better_ui/general/components/text/text_helper.rb +0 -83
- data/app/helpers/better_ui/general/components/tooltip/tooltip_helper.rb +0 -60
- data/app/jobs/better_ui/application_job.rb +0 -4
- data/app/mailers/better_ui/application_mailer.rb +0 -6
- data/config/initializers/lookbook.rb +0 -23
- data/lib/better_ui/railtie.rb +0 -20
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module BetterUi
|
|
4
|
-
module General
|
|
5
|
-
module Dropdown
|
|
6
|
-
class Component < ViewComponent::Base
|
|
7
|
-
include BetterUi::General::Components::Icon::IconHelper
|
|
8
|
-
|
|
9
|
-
attr_reader :trigger, :position, :theme, :size, :rounded, :animation, :fullwidth, :show_chevron, :selectable, :classes, :html_options
|
|
10
|
-
|
|
11
|
-
# Classi base spostate nel template HTML per migliore leggibilità
|
|
12
|
-
|
|
13
|
-
# Temi per il trigger del dropdown con classi Tailwind dirette
|
|
14
|
-
DROPDOWN_TRIGGER_THEME = {
|
|
15
|
-
default: "bg-white border-gray-300 text-gray-700 hover:bg-gray-50 focus:ring-blue-500",
|
|
16
|
-
white: "bg-white border-gray-300 text-gray-900 hover:bg-gray-50 focus:ring-gray-500",
|
|
17
|
-
red: "bg-red-600 border-red-600 text-white hover:bg-red-700 focus:ring-red-500",
|
|
18
|
-
rose: "bg-rose-600 border-rose-600 text-white hover:bg-rose-700 focus:ring-rose-500",
|
|
19
|
-
orange: "bg-orange-600 border-orange-600 text-white hover:bg-orange-700 focus:ring-orange-500",
|
|
20
|
-
green: "bg-green-600 border-green-600 text-white hover:bg-green-700 focus:ring-green-500",
|
|
21
|
-
blue: "bg-blue-600 border-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500",
|
|
22
|
-
yellow: "bg-yellow-500 border-yellow-500 text-white hover:bg-yellow-600 focus:ring-yellow-500",
|
|
23
|
-
violet: "bg-violet-600 border-violet-600 text-white hover:bg-violet-700 focus:ring-violet-500"
|
|
24
|
-
}.freeze
|
|
25
|
-
|
|
26
|
-
# Dimensioni del trigger con classi Tailwind dirette
|
|
27
|
-
DROPDOWN_TRIGGER_SIZE = {
|
|
28
|
-
small: "px-3 py-1.5 text-sm",
|
|
29
|
-
medium: "px-4 py-2 text-sm",
|
|
30
|
-
large: "px-6 py-3 text-base"
|
|
31
|
-
}.freeze
|
|
32
|
-
|
|
33
|
-
# Border radius con classi Tailwind dirette
|
|
34
|
-
DROPDOWN_ROUNDED = {
|
|
35
|
-
none: "rounded-none",
|
|
36
|
-
small: "rounded-md",
|
|
37
|
-
medium: "rounded-lg",
|
|
38
|
-
large: "rounded-xl",
|
|
39
|
-
full: "rounded-full"
|
|
40
|
-
}.freeze
|
|
41
|
-
|
|
42
|
-
# Posizioni del menu dropdown
|
|
43
|
-
DROPDOWN_POSITION = {
|
|
44
|
-
bottom: "top-full left-0",
|
|
45
|
-
top: "bottom-full left-0",
|
|
46
|
-
left: "top-0 right-full mr-2",
|
|
47
|
-
right: "top-0 left-full ml-2"
|
|
48
|
-
}.freeze
|
|
49
|
-
|
|
50
|
-
# Animazioni del dropdown
|
|
51
|
-
DROPDOWN_ANIMATION = {
|
|
52
|
-
fade: "transition-opacity duration-150",
|
|
53
|
-
slide: "transition-all duration-150 transform",
|
|
54
|
-
none: ""
|
|
55
|
-
}.freeze
|
|
56
|
-
|
|
57
|
-
# Stili per full-width del trigger
|
|
58
|
-
DROPDOWN_FULLWIDTH = {
|
|
59
|
-
true => "w-full text-left justify-start",
|
|
60
|
-
false => "inline-flex justify-center"
|
|
61
|
-
}.freeze
|
|
62
|
-
|
|
63
|
-
def initialize(
|
|
64
|
-
trigger:,
|
|
65
|
-
position: :bottom,
|
|
66
|
-
theme: :default,
|
|
67
|
-
size: :medium,
|
|
68
|
-
rounded: :medium,
|
|
69
|
-
animation: :fade,
|
|
70
|
-
fullwidth: false,
|
|
71
|
-
show_chevron: true,
|
|
72
|
-
selectable: false,
|
|
73
|
-
classes: nil,
|
|
74
|
-
**html_options
|
|
75
|
-
)
|
|
76
|
-
@trigger = trigger
|
|
77
|
-
@position = position.to_sym
|
|
78
|
-
@theme = theme.to_sym
|
|
79
|
-
@size = size.to_sym
|
|
80
|
-
@rounded = rounded.to_sym
|
|
81
|
-
@animation = animation.to_sym
|
|
82
|
-
@fullwidth = fullwidth
|
|
83
|
-
@show_chevron = show_chevron
|
|
84
|
-
@selectable = selectable
|
|
85
|
-
@classes = classes
|
|
86
|
-
@html_options = html_options
|
|
87
|
-
|
|
88
|
-
validate_params
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
def fullwidth_classes
|
|
92
|
-
[
|
|
93
|
-
get_fullwidth_classes
|
|
94
|
-
].compact.join(" ")
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
# Restituisce solo le classi dinamiche per il trigger
|
|
98
|
-
def dynamic_trigger_classes
|
|
99
|
-
[
|
|
100
|
-
get_trigger_theme_classes,
|
|
101
|
-
get_trigger_size_classes,
|
|
102
|
-
get_trigger_rounded_classes
|
|
103
|
-
].compact.join(" ")
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
# Restituisce solo le classi dinamiche per il menu
|
|
107
|
-
def dynamic_menu_classes
|
|
108
|
-
[
|
|
109
|
-
get_position_classes,
|
|
110
|
-
get_animation_classes,
|
|
111
|
-
get_menu_rounded_classes
|
|
112
|
-
].compact.join(" ")
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
# Metodi per attributi rimossi - ora gestiti direttamente nel template HTML
|
|
116
|
-
|
|
117
|
-
# Verifica se rendere il componente
|
|
118
|
-
def render?
|
|
119
|
-
@trigger.present?
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
private
|
|
123
|
-
|
|
124
|
-
def get_trigger_theme_classes
|
|
125
|
-
DROPDOWN_TRIGGER_THEME[@theme] || DROPDOWN_TRIGGER_THEME[:default]
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
def get_trigger_size_classes
|
|
129
|
-
DROPDOWN_TRIGGER_SIZE[@size] || DROPDOWN_TRIGGER_SIZE[:medium]
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
def get_trigger_rounded_classes
|
|
133
|
-
DROPDOWN_ROUNDED[@rounded] || DROPDOWN_ROUNDED[:medium]
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
def get_menu_rounded_classes
|
|
137
|
-
DROPDOWN_ROUNDED[@rounded] || DROPDOWN_ROUNDED[:medium]
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
def get_position_classes
|
|
141
|
-
DROPDOWN_POSITION[@position] || DROPDOWN_POSITION[:bottom]
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
def get_animation_classes
|
|
145
|
-
DROPDOWN_ANIMATION[@animation] || DROPDOWN_ANIMATION[:fade]
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
def get_fullwidth_classes
|
|
149
|
-
DROPDOWN_FULLWIDTH[@fullwidth] || DROPDOWN_FULLWIDTH[false]
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
def validate_params
|
|
153
|
-
validate_theme
|
|
154
|
-
validate_size
|
|
155
|
-
validate_rounded
|
|
156
|
-
validate_position
|
|
157
|
-
validate_animation
|
|
158
|
-
end
|
|
159
|
-
|
|
160
|
-
def validate_theme
|
|
161
|
-
unless DROPDOWN_TRIGGER_THEME.keys.include?(@theme)
|
|
162
|
-
raise ArgumentError, "Il tema deve essere uno tra: #{DROPDOWN_TRIGGER_THEME.keys.join(', ')}"
|
|
163
|
-
end
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
def validate_size
|
|
167
|
-
unless DROPDOWN_TRIGGER_SIZE.keys.include?(@size)
|
|
168
|
-
raise ArgumentError, "La dimensione deve essere una tra: #{DROPDOWN_TRIGGER_SIZE.keys.join(', ')}"
|
|
169
|
-
end
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
def validate_rounded
|
|
173
|
-
unless DROPDOWN_ROUNDED.keys.include?(@rounded)
|
|
174
|
-
raise ArgumentError, "Il border radius deve essere uno tra: #{DROPDOWN_ROUNDED.keys.join(', ')}"
|
|
175
|
-
end
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
def validate_position
|
|
179
|
-
unless DROPDOWN_POSITION.keys.include?(@position)
|
|
180
|
-
raise ArgumentError, "La posizione deve essere una tra: #{DROPDOWN_POSITION.keys.join(', ')}"
|
|
181
|
-
end
|
|
182
|
-
end
|
|
183
|
-
|
|
184
|
-
def validate_animation
|
|
185
|
-
unless DROPDOWN_ANIMATION.keys.include?(@animation)
|
|
186
|
-
raise ArgumentError, "L'animazione deve essere una tra: #{DROPDOWN_ANIMATION.keys.join(', ')}"
|
|
187
|
-
end
|
|
188
|
-
end
|
|
189
|
-
end
|
|
190
|
-
end
|
|
191
|
-
end
|
|
192
|
-
end
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<div <%= tag.attributes(divider_attributes) %>></div>
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module BetterUi
|
|
4
|
-
module General
|
|
5
|
-
module Dropdown
|
|
6
|
-
class DividerComponent < ViewComponent::Base
|
|
7
|
-
attr_reader :classes, :html_options
|
|
8
|
-
|
|
9
|
-
# Classi base per il divisore del dropdown
|
|
10
|
-
DROPDOWN_DIVIDER_CLASSES = "border-t border-gray-100 my-1"
|
|
11
|
-
|
|
12
|
-
def initialize(classes: nil, **html_options)
|
|
13
|
-
@classes = classes
|
|
14
|
-
@html_options = html_options
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
# Combina tutte le classi per il divisore
|
|
18
|
-
def divider_classes
|
|
19
|
-
[
|
|
20
|
-
DROPDOWN_DIVIDER_CLASSES,
|
|
21
|
-
@classes
|
|
22
|
-
].compact.join(" ")
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
# Restituisce gli attributi per il divisore
|
|
26
|
-
def divider_attributes
|
|
27
|
-
attrs = {
|
|
28
|
-
class: divider_classes,
|
|
29
|
-
role: "separator"
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
@html_options.except(:class).each do |key, value|
|
|
33
|
-
attrs[key] = value
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
attrs
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module BetterUi
|
|
4
|
-
module General
|
|
5
|
-
module Dropdown
|
|
6
|
-
class ItemComponent < ViewComponent::Base
|
|
7
|
-
include BetterUi::General::Components::Icon::IconHelper
|
|
8
|
-
|
|
9
|
-
attr_reader :text, :icon, :href, :theme, :disabled, :active, :classes, :html_options
|
|
10
|
-
|
|
11
|
-
# Classi base per l'elemento del dropdown
|
|
12
|
-
DROPDOWN_ITEM_BASE_CLASSES = "flex items-center w-full px-4 py-2 text-sm transition-colors"
|
|
13
|
-
|
|
14
|
-
# Temi per gli elementi del dropdown con classi Tailwind dirette
|
|
15
|
-
DROPDOWN_ITEM_THEME = {
|
|
16
|
-
default: "text-gray-700 hover:bg-gray-100 hover:text-gray-900",
|
|
17
|
-
white: "text-gray-900 hover:bg-gray-50",
|
|
18
|
-
red: "text-red-700 hover:bg-red-50 hover:text-red-900",
|
|
19
|
-
rose: "text-rose-700 hover:bg-rose-50 hover:text-rose-900",
|
|
20
|
-
orange: "text-orange-700 hover:bg-orange-50 hover:text-orange-900",
|
|
21
|
-
green: "text-green-700 hover:bg-green-50 hover:text-green-900",
|
|
22
|
-
blue: "text-blue-700 hover:bg-blue-50 hover:text-blue-900",
|
|
23
|
-
yellow: "text-yellow-700 hover:bg-yellow-50 hover:text-yellow-900",
|
|
24
|
-
violet: "text-violet-700 hover:bg-violet-50 hover:text-violet-900"
|
|
25
|
-
}.freeze
|
|
26
|
-
|
|
27
|
-
# Stati per gli elementi del dropdown
|
|
28
|
-
DROPDOWN_ITEM_STATE_DISABLED = "opacity-50 cursor-not-allowed pointer-events-none"
|
|
29
|
-
DROPDOWN_ITEM_STATE_ACTIVE = "bg-gray-100 text-gray-900"
|
|
30
|
-
|
|
31
|
-
def initialize(
|
|
32
|
-
text:,
|
|
33
|
-
icon: nil,
|
|
34
|
-
href: nil,
|
|
35
|
-
theme: :default,
|
|
36
|
-
disabled: false,
|
|
37
|
-
active: false,
|
|
38
|
-
classes: nil,
|
|
39
|
-
**html_options
|
|
40
|
-
)
|
|
41
|
-
@text = text
|
|
42
|
-
@icon = icon
|
|
43
|
-
@href = href
|
|
44
|
-
@theme = theme.to_sym
|
|
45
|
-
@disabled = disabled
|
|
46
|
-
@active = active
|
|
47
|
-
@classes = classes
|
|
48
|
-
@html_options = html_options
|
|
49
|
-
|
|
50
|
-
validate_params
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
# Combina tutte le classi per l'elemento
|
|
54
|
-
def item_classes
|
|
55
|
-
classes = [
|
|
56
|
-
DROPDOWN_ITEM_BASE_CLASSES,
|
|
57
|
-
get_theme_classes,
|
|
58
|
-
@classes
|
|
59
|
-
]
|
|
60
|
-
|
|
61
|
-
classes << DROPDOWN_ITEM_STATE_DISABLED if @disabled
|
|
62
|
-
classes << DROPDOWN_ITEM_STATE_ACTIVE if @active
|
|
63
|
-
|
|
64
|
-
classes.compact.join(" ")
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
# Restituisce gli attributi per l'elemento
|
|
68
|
-
def item_attributes
|
|
69
|
-
attrs = {
|
|
70
|
-
class: item_classes,
|
|
71
|
-
role: "menuitem",
|
|
72
|
-
"data-bui-dropdown-target": "item"
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
if @href.present? && !@disabled
|
|
76
|
-
attrs[:href] = @href
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
if @disabled
|
|
80
|
-
attrs["aria-disabled"] = "true"
|
|
81
|
-
attrs[:tabindex] = "-1"
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
@html_options.except(:class).each do |key, value|
|
|
85
|
-
attrs[key] = value
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
attrs
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
# Determina se usare un link o un button
|
|
92
|
-
def tag_name
|
|
93
|
-
@href.present? && !@disabled ? :a : :button
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
# Verifica se rendere il componente
|
|
97
|
-
def render?
|
|
98
|
-
@text.present?
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
private
|
|
102
|
-
|
|
103
|
-
def get_theme_classes
|
|
104
|
-
DROPDOWN_ITEM_THEME[@theme] || DROPDOWN_ITEM_THEME[:default]
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
def validate_params
|
|
108
|
-
validate_theme
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
def validate_theme
|
|
112
|
-
unless DROPDOWN_ITEM_THEME.keys.include?(@theme)
|
|
113
|
-
raise ArgumentError, "Il tema deve essere uno tra: #{DROPDOWN_ITEM_THEME.keys.join(', ')}"
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
end
|
|
117
|
-
end
|
|
118
|
-
end
|
|
119
|
-
end
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
<%# Form field component template %>
|
|
2
|
-
<div class="<%= BASE_CLASSES %>">
|
|
3
|
-
<% if text.present? %>
|
|
4
|
-
<label for="<%= id %>" class="<%= LABEL_CLASSES %>">
|
|
5
|
-
<%= text %>
|
|
6
|
-
<% if required %>
|
|
7
|
-
<span class="<%= REQUIRED_CLASSES %>">*</span>
|
|
8
|
-
<% end %>
|
|
9
|
-
</label>
|
|
10
|
-
<% end %>
|
|
11
|
-
|
|
12
|
-
<div class="mt-1">
|
|
13
|
-
<%= content %>
|
|
14
|
-
</div>
|
|
15
|
-
|
|
16
|
-
<% if error.present? %>
|
|
17
|
-
<div class="<%= ERROR_CLASSES %>">
|
|
18
|
-
<%= error %>
|
|
19
|
-
</div>
|
|
20
|
-
<% end %>
|
|
21
|
-
|
|
22
|
-
<% if help_text.present? %>
|
|
23
|
-
<div class="<%= HELP_TEXT_CLASSES %>">
|
|
24
|
-
<%= help_text %>
|
|
25
|
-
</div>
|
|
26
|
-
<% end %>
|
|
27
|
-
</div>
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module BetterUi
|
|
4
|
-
module General
|
|
5
|
-
module Field
|
|
6
|
-
class Component < ViewComponent::Base
|
|
7
|
-
attr_reader :text, :name, :required, :error, :help_text, :id
|
|
8
|
-
|
|
9
|
-
renders_one :input
|
|
10
|
-
|
|
11
|
-
BASE_CLASSES = "flex flex-col space-y-2"
|
|
12
|
-
LABEL_CLASSES = "text-sm font-medium text-gray-700"
|
|
13
|
-
REQUIRED_CLASSES = "text-red-500 ml-1"
|
|
14
|
-
ERROR_CLASSES = "text-sm text-red-600 mt-1"
|
|
15
|
-
HELP_TEXT_CLASSES = "text-sm text-gray-500 mt-1"
|
|
16
|
-
|
|
17
|
-
def initialize(text:, name:, required: false, error: nil, help_text: nil, id: nil)
|
|
18
|
-
@text = text
|
|
19
|
-
@name = name
|
|
20
|
-
@required = required
|
|
21
|
-
@error = error
|
|
22
|
-
@help_text = help_text
|
|
23
|
-
@id = id
|
|
24
|
-
super()
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
private
|
|
28
|
-
|
|
29
|
-
def field_classes
|
|
30
|
-
classes = [BASE_CLASSES]
|
|
31
|
-
classes << ERROR_CLASSES if @error.present?
|
|
32
|
-
classes.join(" ")
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|