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.
Files changed (198) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +257 -212
  3. data/Rakefile +11 -2
  4. data/app/components/better_ui/action_messages_component/action_messages_component.html.erb +48 -0
  5. data/app/components/better_ui/action_messages_component.rb +544 -0
  6. data/app/components/better_ui/application_component.rb +66 -0
  7. data/app/components/better_ui/button_component/button_component.html.erb +31 -0
  8. data/app/components/better_ui/button_component.rb +307 -0
  9. data/app/components/better_ui/card_component/card_component.html.erb +17 -0
  10. data/app/components/better_ui/card_component.rb +460 -0
  11. data/app/components/better_ui/drawer/header_component/header_component.html.erb +24 -0
  12. data/app/components/better_ui/drawer/header_component.rb +238 -0
  13. data/app/components/better_ui/drawer/layout_component/layout_component.html.erb +44 -0
  14. data/app/components/better_ui/drawer/layout_component.rb +270 -0
  15. data/app/components/better_ui/drawer/nav_group_component/nav_group_component.html.erb +10 -0
  16. data/app/components/better_ui/drawer/nav_group_component.rb +155 -0
  17. data/app/components/better_ui/drawer/nav_item_component/nav_item_component.html.erb +13 -0
  18. data/app/components/better_ui/drawer/nav_item_component.rb +225 -0
  19. data/app/components/better_ui/drawer/sidebar_component/sidebar_component.html.erb +17 -0
  20. data/app/components/better_ui/drawer/sidebar_component.rb +263 -0
  21. data/app/components/better_ui/forms/base_component.rb +450 -0
  22. data/app/components/better_ui/forms/checkbox_component/checkbox_component.html.erb +28 -0
  23. data/app/components/better_ui/forms/checkbox_component.rb +419 -0
  24. data/app/components/better_ui/forms/checkbox_group_component/checkbox_group_component.html.erb +40 -0
  25. data/app/components/better_ui/forms/checkbox_group_component.rb +363 -0
  26. data/app/components/better_ui/forms/number_input_component/number_input_component.html.erb +40 -0
  27. data/app/components/better_ui/forms/number_input_component.rb +320 -0
  28. data/app/components/better_ui/forms/password_input_component/password_input_component.html.erb +71 -0
  29. data/app/components/better_ui/forms/password_input_component.rb +206 -0
  30. data/app/components/better_ui/forms/text_input_component/text_input_component.html.erb +40 -0
  31. data/app/components/better_ui/forms/text_input_component.rb +258 -0
  32. data/app/components/better_ui/forms/textarea_component/textarea_component.html.erb +40 -0
  33. data/app/components/better_ui/forms/textarea_component.rb +329 -0
  34. data/app/form_builders/better_ui/ui_form_builder.rb +467 -0
  35. data/app/helpers/better_ui/application_helper.rb +325 -58
  36. data/app/views/layouts/better_ui/application.html.erb +1 -1
  37. data/config/routes.rb +1 -0
  38. data/lib/better_ui/engine.rb +34 -5
  39. data/lib/better_ui/version.rb +1 -1
  40. data/lib/better_ui.rb +32 -5
  41. data/lib/generators/better_ui/install/USAGE +44 -0
  42. data/lib/generators/better_ui/install/install_generator.rb +87 -0
  43. data/lib/generators/better_ui/install/templates/better_ui_theme.css.tt +280 -0
  44. data/lib/tasks/better_ui_tasks.rake +39 -4
  45. metadata +55 -203
  46. data/app/components/better_ui/application/card/component.html.erb +0 -20
  47. data/app/components/better_ui/application/card/component.rb +0 -214
  48. data/app/components/better_ui/application/main/component.html.erb +0 -9
  49. data/app/components/better_ui/application/main/component.rb +0 -123
  50. data/app/components/better_ui/application/navbar/component.html.erb +0 -92
  51. data/app/components/better_ui/application/navbar/component.rb +0 -136
  52. data/app/components/better_ui/application/sidebar/component.html.erb +0 -249
  53. data/app/components/better_ui/application/sidebar/component.rb +0 -187
  54. data/app/components/better_ui/general/accordion/component.html.erb +0 -5
  55. data/app/components/better_ui/general/accordion/component.rb +0 -92
  56. data/app/components/better_ui/general/accordion/item_component.html.erb +0 -12
  57. data/app/components/better_ui/general/accordion/item_component.rb +0 -176
  58. data/app/components/better_ui/general/alert/component.html.erb +0 -32
  59. data/app/components/better_ui/general/alert/component.rb +0 -242
  60. data/app/components/better_ui/general/avatar/component.html.erb +0 -20
  61. data/app/components/better_ui/general/avatar/component.rb +0 -301
  62. data/app/components/better_ui/general/badge/component.html.erb +0 -23
  63. data/app/components/better_ui/general/badge/component.rb +0 -248
  64. data/app/components/better_ui/general/breadcrumb/component.html.erb +0 -15
  65. data/app/components/better_ui/general/breadcrumb/component.rb +0 -187
  66. data/app/components/better_ui/general/button/component.html.erb +0 -34
  67. data/app/components/better_ui/general/button/component.rb +0 -214
  68. data/app/components/better_ui/general/divider/component.html.erb +0 -10
  69. data/app/components/better_ui/general/divider/component.rb +0 -226
  70. data/app/components/better_ui/general/dropdown/component.html.erb +0 -28
  71. data/app/components/better_ui/general/dropdown/component.rb +0 -192
  72. data/app/components/better_ui/general/dropdown/divider_component.html.erb +0 -1
  73. data/app/components/better_ui/general/dropdown/divider_component.rb +0 -41
  74. data/app/components/better_ui/general/dropdown/item_component.html.erb +0 -6
  75. data/app/components/better_ui/general/dropdown/item_component.rb +0 -119
  76. data/app/components/better_ui/general/field/component.html.erb +0 -27
  77. data/app/components/better_ui/general/field/component.rb +0 -37
  78. data/app/components/better_ui/general/grid/cell_component.html.erb +0 -3
  79. data/app/components/better_ui/general/grid/cell_component.rb +0 -390
  80. data/app/components/better_ui/general/grid/component.html.erb +0 -3
  81. data/app/components/better_ui/general/grid/component.rb +0 -301
  82. data/app/components/better_ui/general/heading/component.html.erb +0 -22
  83. data/app/components/better_ui/general/heading/component.rb +0 -257
  84. data/app/components/better_ui/general/icon/component.html.erb +0 -7
  85. data/app/components/better_ui/general/icon/component.rb +0 -240
  86. data/app/components/better_ui/general/input/checkbox/component.html.erb +0 -5
  87. data/app/components/better_ui/general/input/checkbox/component.rb +0 -238
  88. data/app/components/better_ui/general/input/datetime/component.html.erb +0 -5
  89. data/app/components/better_ui/general/input/datetime/component.rb +0 -223
  90. data/app/components/better_ui/general/input/pin/component.html.erb +0 -1
  91. data/app/components/better_ui/general/input/pin/component.rb +0 -201
  92. data/app/components/better_ui/general/input/radio/component.html.erb +0 -5
  93. data/app/components/better_ui/general/input/radio/component.rb +0 -230
  94. data/app/components/better_ui/general/input/rating/component.html.erb +0 -4
  95. data/app/components/better_ui/general/input/rating/component.rb +0 -272
  96. data/app/components/better_ui/general/input/select/component.html.erb +0 -78
  97. data/app/components/better_ui/general/input/select/component.rb +0 -249
  98. data/app/components/better_ui/general/input/select/select_component.html.erb +0 -5
  99. data/app/components/better_ui/general/input/select/select_component.rb +0 -37
  100. data/app/components/better_ui/general/input/text/component.html.erb +0 -5
  101. data/app/components/better_ui/general/input/text/component.rb +0 -171
  102. data/app/components/better_ui/general/input/textarea/component.html.erb +0 -5
  103. data/app/components/better_ui/general/input/textarea/component.rb +0 -166
  104. data/app/components/better_ui/general/input/toggle/component.html.erb +0 -5
  105. data/app/components/better_ui/general/input/toggle/component.rb +0 -242
  106. data/app/components/better_ui/general/link/component.html.erb +0 -18
  107. data/app/components/better_ui/general/link/component.rb +0 -258
  108. data/app/components/better_ui/general/modal/component.html.erb +0 -5
  109. data/app/components/better_ui/general/modal/component.rb +0 -47
  110. data/app/components/better_ui/general/modal/modal_component.html.erb +0 -52
  111. data/app/components/better_ui/general/modal/modal_component.rb +0 -160
  112. data/app/components/better_ui/general/pagination/component.html.erb +0 -85
  113. data/app/components/better_ui/general/pagination/component.rb +0 -216
  114. data/app/components/better_ui/general/panel/component.html.erb +0 -28
  115. data/app/components/better_ui/general/panel/component.rb +0 -249
  116. data/app/components/better_ui/general/progress/component.html.erb +0 -11
  117. data/app/components/better_ui/general/progress/component.rb +0 -160
  118. data/app/components/better_ui/general/spinner/component.html.erb +0 -35
  119. data/app/components/better_ui/general/spinner/component.rb +0 -93
  120. data/app/components/better_ui/general/table/component.html.erb +0 -5
  121. data/app/components/better_ui/general/table/component.rb +0 -217
  122. data/app/components/better_ui/general/table/tbody_component.html.erb +0 -3
  123. data/app/components/better_ui/general/table/tbody_component.rb +0 -30
  124. data/app/components/better_ui/general/table/td_component.html.erb +0 -3
  125. data/app/components/better_ui/general/table/td_component.rb +0 -44
  126. data/app/components/better_ui/general/table/tfoot_component.html.erb +0 -3
  127. data/app/components/better_ui/general/table/tfoot_component.rb +0 -28
  128. data/app/components/better_ui/general/table/th_component.html.erb +0 -6
  129. data/app/components/better_ui/general/table/th_component.rb +0 -51
  130. data/app/components/better_ui/general/table/thead_component.html.erb +0 -3
  131. data/app/components/better_ui/general/table/thead_component.rb +0 -28
  132. data/app/components/better_ui/general/table/tr_component.html.erb +0 -3
  133. data/app/components/better_ui/general/table/tr_component.rb +0 -30
  134. data/app/components/better_ui/general/tabs/component.html.erb +0 -11
  135. data/app/components/better_ui/general/tabs/component.rb +0 -120
  136. data/app/components/better_ui/general/tabs/panel_component.html.erb +0 -3
  137. data/app/components/better_ui/general/tabs/panel_component.rb +0 -37
  138. data/app/components/better_ui/general/tabs/tab_component.html.erb +0 -13
  139. data/app/components/better_ui/general/tabs/tab_component.rb +0 -111
  140. data/app/components/better_ui/general/tag/component.html.erb +0 -3
  141. data/app/components/better_ui/general/tag/component.rb +0 -104
  142. data/app/components/better_ui/general/text/component.html.erb +0 -1
  143. data/app/components/better_ui/general/text/component.rb +0 -194
  144. data/app/components/better_ui/general/tooltip/component.html.erb +0 -7
  145. data/app/components/better_ui/general/tooltip/component.rb +0 -239
  146. data/app/helpers/better_ui/application/components/card/card_helper.rb +0 -96
  147. data/app/helpers/better_ui/application/components/card.rb +0 -11
  148. data/app/helpers/better_ui/application/components/main/main_helper.rb +0 -64
  149. data/app/helpers/better_ui/application/components/navbar/navbar_helper.rb +0 -77
  150. data/app/helpers/better_ui/application/components/sidebar/sidebar_helper.rb +0 -51
  151. data/app/helpers/better_ui/general/components/accordion/accordion_helper.rb +0 -73
  152. data/app/helpers/better_ui/general/components/alert/alert_helper.rb +0 -57
  153. data/app/helpers/better_ui/general/components/avatar/avatar_helper.rb +0 -29
  154. data/app/helpers/better_ui/general/components/badge/badge_helper.rb +0 -53
  155. data/app/helpers/better_ui/general/components/breadcrumb/breadcrumb_helper.rb +0 -37
  156. data/app/helpers/better_ui/general/components/button/button_helper.rb +0 -65
  157. data/app/helpers/better_ui/general/components/container/container_helper.rb +0 -60
  158. data/app/helpers/better_ui/general/components/divider/divider_helper.rb +0 -63
  159. data/app/helpers/better_ui/general/components/dropdown/divider_helper.rb +0 -32
  160. data/app/helpers/better_ui/general/components/dropdown/dropdown_helper.rb +0 -88
  161. data/app/helpers/better_ui/general/components/dropdown/item_helper.rb +0 -68
  162. data/app/helpers/better_ui/general/components/field/field_helper.rb +0 -26
  163. data/app/helpers/better_ui/general/components/grid/grid_helper.rb +0 -145
  164. data/app/helpers/better_ui/general/components/heading/heading_helper.rb +0 -72
  165. data/app/helpers/better_ui/general/components/icon/icon_helper.rb +0 -16
  166. data/app/helpers/better_ui/general/components/input/checkbox/checkbox_helper.rb +0 -81
  167. data/app/helpers/better_ui/general/components/input/datetime/datetime_helper.rb +0 -91
  168. data/app/helpers/better_ui/general/components/input/pin/pin_helper.rb +0 -76
  169. data/app/helpers/better_ui/general/components/input/radio/radio_helper.rb +0 -79
  170. data/app/helpers/better_ui/general/components/input/radio_group/radio_group_helper.rb +0 -124
  171. data/app/helpers/better_ui/general/components/input/rating/rating_helper.rb +0 -70
  172. data/app/helpers/better_ui/general/components/input/select/select_helper.rb +0 -86
  173. data/app/helpers/better_ui/general/components/input/text/text_helper.rb +0 -138
  174. data/app/helpers/better_ui/general/components/input/textarea/textarea_helper.rb +0 -73
  175. data/app/helpers/better_ui/general/components/input/toggle/toggle_helper.rb +0 -77
  176. data/app/helpers/better_ui/general/components/link/link_helper.rb +0 -89
  177. data/app/helpers/better_ui/general/components/modal/modal_helper.rb +0 -85
  178. data/app/helpers/better_ui/general/components/pagination/pagination_helper.rb +0 -82
  179. data/app/helpers/better_ui/general/components/panel/panel_helper.rb +0 -83
  180. data/app/helpers/better_ui/general/components/progress/progress_helper.rb +0 -53
  181. data/app/helpers/better_ui/general/components/spinner/spinner_helper.rb +0 -19
  182. data/app/helpers/better_ui/general/components/table/table_helper.rb +0 -53
  183. data/app/helpers/better_ui/general/components/table/tbody_helper.rb +0 -13
  184. data/app/helpers/better_ui/general/components/table/td_helper.rb +0 -19
  185. data/app/helpers/better_ui/general/components/table/tfoot_helper.rb +0 -13
  186. data/app/helpers/better_ui/general/components/table/th_helper.rb +0 -19
  187. data/app/helpers/better_ui/general/components/table/thead_helper.rb +0 -13
  188. data/app/helpers/better_ui/general/components/table/tr_helper.rb +0 -13
  189. data/app/helpers/better_ui/general/components/tabs/panel_helper.rb +0 -62
  190. data/app/helpers/better_ui/general/components/tabs/tab_helper.rb +0 -55
  191. data/app/helpers/better_ui/general/components/tabs/tabs_helper.rb +0 -95
  192. data/app/helpers/better_ui/general/components/tag/tag_helper.rb +0 -26
  193. data/app/helpers/better_ui/general/components/text/text_helper.rb +0 -83
  194. data/app/helpers/better_ui/general/components/tooltip/tooltip_helper.rb +0 -60
  195. data/app/jobs/better_ui/application_job.rb +0 -4
  196. data/app/mailers/better_ui/application_mailer.rb +0 -6
  197. data/config/initializers/lookbook.rb +0 -23
  198. data/lib/better_ui/railtie.rb +0 -20
@@ -1,91 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module BetterUi
4
- module General
5
- module Components
6
- module Input
7
- module Datetime
8
- module DatetimeHelper
9
- # Crea un campo input datetime unificato
10
- #
11
- # @param name [String] Nome del campo input (obbligatorio)
12
- # @param type [Symbol] Tipo del campo datetime (default: :date)
13
- # Valori disponibili: :date, :month, :week, :time
14
- # @param value [String] Valore del campo nel formato appropriato per il tipo
15
- # @param required [Boolean] Se il campo è obbligatorio (default: false)
16
- # @param disabled [Boolean] Se il campo è disabilitato (default: false)
17
- # @param min [String] Valore minimo selezionabile nel formato appropriato
18
- # @param max [String] Valore massimo selezionabile nel formato appropriato
19
- # @param theme [Symbol] Tema del componente (default: :default)
20
- # Valori disponibili: :default, :white, :red, :rose, :orange, :green, :blue, :yellow, :violet
21
- # @param size [Symbol] Dimensione del componente (default: :medium)
22
- # Valori disponibili: :small, :medium, :large
23
- # @param rounded [Symbol] Border radius (default: :medium)
24
- # Valori disponibili: :none, :small, :medium, :large, :full
25
- # @param classes [String] Classi CSS aggiuntive
26
- # @param form [ActionView::Helpers::FormBuilder] Form builder Rails opzionale per integrazione con form
27
- # @param options [Hash] Attributi HTML aggiuntivi da passare all'elemento input
28
- # @return [String] HTML del componente datetime input renderizzato
29
- #
30
- # @example Uso base per date
31
- # <%= bui_input_datetime(name: 'birthdate', type: :date) %>
32
- #
33
- # @example Input per mese con validazione
34
- # <%= bui_input_datetime(name: 'report_month', type: :month, required: true, min: '2024-01', max: '2024-12') %>
35
- #
36
- # @example Input per settimana con tema
37
- # <%= bui_input_datetime(name: 'work_week', type: :week, theme: :blue, size: :large) %>
38
- #
39
- # @example Input per time con stili personalizzati
40
- # <%= bui_input_datetime(name: 'meeting_time', type: :time, theme: :green, rounded: :full) %>
41
- #
42
- # @example Con Rails form builder
43
- # <%= form_with model: @event do |form| %>
44
- # <%= bui_input_datetime(name: :start_date, type: :date, form: form, theme: :blue, required: true) %>
45
- # <%= bui_input_datetime(name: :start_time, type: :time, form: form, theme: :green) %>
46
- # <% end %>
47
- def bui_input_datetime(name:, type: :date, value: nil, required: false, disabled: false,
48
- min: nil, max: nil, theme: :default, size: :medium, rounded: :medium,
49
- classes: '', form: nil, **options)
50
- render BetterUi::General::Input::Datetime::Component.new(
51
- name: name,
52
- type: type,
53
- value: value,
54
- required: required,
55
- disabled: disabled,
56
- min: min,
57
- max: max,
58
- theme: theme,
59
- size: size,
60
- rounded: rounded,
61
- classes: classes,
62
- form: form,
63
- **options
64
- )
65
- end
66
-
67
- # Helper convenienza per input date
68
- def bui_input_date(name:, **options)
69
- bui_input_datetime(name: name, type: :date, **options)
70
- end
71
-
72
- # Helper convenienza per input month
73
- def bui_input_month(name:, **options)
74
- bui_input_datetime(name: name, type: :month, **options)
75
- end
76
-
77
- # Helper convenienza per input week
78
- def bui_input_week(name:, **options)
79
- bui_input_datetime(name: name, type: :week, **options)
80
- end
81
-
82
- # Helper convenienza per input time
83
- def bui_input_time(name:, **options)
84
- bui_input_datetime(name: name, type: :time, **options)
85
- end
86
- end
87
- end
88
- end
89
- end
90
- end
91
- end
@@ -1,76 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module BetterUi
4
- module General
5
- module Components
6
- module Input
7
- module Pin
8
- module PinHelper
9
- # Renderizza un componente Pin/OTP Input per inserimento codici di verifica numerici.
10
- #
11
- # @param name [String] Nome del campo pin (obbligatorio)
12
- # @param value [String] Valore del pin preimpostato
13
- # @param length [Integer] Numero di campi pin (4-8, default: 6)
14
- # @param placeholder [String] Placeholder per campi vuoti (default: '•')
15
- # @param required [Boolean] Se il campo è obbligatorio
16
- # @param disabled [Boolean] Se il campo è disabilitato
17
- # @param theme [Symbol] Tema del componente (:default, :white, :red, :rose, :orange, :green, :blue, :yellow, :violet)
18
- # @param size [Symbol] Dimensione del componente (:small, :medium, :large)
19
- # @param form [ActionView::Helpers::FormBuilder, nil] Form builder Rails opzionale
20
- # @param classes [String] Classi CSS aggiuntive
21
- # @param options [Hash] Opzioni aggiuntive per attributi HTML
22
- #
23
- # @return [String] HTML del componente Pin renderizzato
24
- #
25
- # @example Uso base per codice OTP
26
- # <%= bui_input_pin(name: 'verification_code') %>
27
- #
28
- # @example Con lunghezza personalizzata e tema
29
- # <%= bui_input_pin(name: 'pin_code', length: 4, theme: :blue, size: :large) %>
30
- #
31
- # @example Con Rails form builder
32
- # <%= form_with model: @user do |form| %>
33
- # <%= bui_input_pin(name: :otp_code, form: form, value: @user.otp_code) %>
34
- # <% end %>
35
- #
36
- # @example Con validazione e attributi personalizzati
37
- # <%= bui_input_pin(
38
- # name: 'sms_code',
39
- # length: 6,
40
- # required: true,
41
- # placeholder: '_',
42
- # theme: :green,
43
- # classes: 'my-custom-class',
44
- # id: 'sms-verification'
45
- # ) %>
46
- #
47
- # @example Per codice bancario a 8 cifre
48
- # <%= bui_input_pin(
49
- # name: 'bank_code',
50
- # length: 8,
51
- # theme: :violet,
52
- # size: :small,
53
- # placeholder: '0'
54
- # ) %>
55
- def bui_input_pin(name:, value: '', length: 6, placeholder: '•', required: false, disabled: false,
56
- theme: :default, size: :medium, form: nil, classes: '', **options)
57
- render BetterUi::General::Input::Pin::Component.new(
58
- name: name,
59
- value: value,
60
- length: length,
61
- placeholder: placeholder,
62
- required: required,
63
- disabled: disabled,
64
- theme: theme,
65
- size: size,
66
- form: form,
67
- classes: classes,
68
- **options
69
- )
70
- end
71
- end
72
- end
73
- end
74
- end
75
- end
76
- end
@@ -1,79 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module BetterUi
4
- module General
5
- module Components
6
- module Input
7
- module Radio
8
- # Helper specifico per radio button Better UI
9
- module RadioHelper
10
- # Genera un radio button con stili Better UI
11
- #
12
- # @param name [String] Nome del campo radio (obbligatorio)
13
- # @param value [String] Valore del radio button (obbligatorio)
14
- # @param checked [Boolean] Se il radio è selezionato
15
- # @param required [Boolean] Se il campo è obbligatorio
16
- # @param disabled [Boolean] Se il campo è disabilitato
17
- # @param label [String, nil] Testo della label associata al radio
18
- # @param label_position [Symbol] Posizione della label (:left, :right)
19
- # @param theme [Symbol] Tema del componente (:default, :white, :red, :rose, :orange, :green, :blue, :yellow, :violet)
20
- # @param size [Symbol] Dimensione del componente (:small, :medium, :large)
21
- # @param rounded [Symbol] Border radius (:none, :small, :medium, :large, :full)
22
- # @param classes [String] Classi CSS aggiuntive
23
- # @param form [ActionView::Helpers::FormBuilder, nil] Form builder Rails opzionale
24
- # @param options [Hash] Opzioni aggiuntive per l'input
25
- # @return [String] HTML del radio button renderizzato
26
- #
27
- # @example Gruppo radio base - Selezione genere (STESSO name, value DIVERSI)
28
- # bui_input_radio(name: "gender", value: "male", label: "Maschio")
29
- # bui_input_radio(name: "gender", value: "female", label: "Femmina")
30
- # bui_input_radio(name: "gender", value: "other", label: "Altro")
31
- #
32
- # @example Gruppo radio con temi diversi - Priorità task
33
- # bui_input_radio(name: "priority", value: "low", label: "Bassa", theme: :green)
34
- # bui_input_radio(name: "priority", value: "medium", label: "Media", theme: :yellow)
35
- # bui_input_radio(name: "priority", value: "high", label: "Alta", theme: :red, size: :large)
36
- #
37
- # @example Gruppo radio con Rails form builder
38
- # <%= form_with model: @user do |form| %>
39
- # <%= bui_input_radio(name: :role, value: "admin", label: "Amministratore", form: form) %>
40
- # <%= bui_input_radio(name: :role, value: "user", label: "Utente", form: form) %>
41
- # <%= bui_input_radio(name: :role, value: "guest", label: "Ospite", form: form) %>
42
- # <% end %>
43
- #
44
- # @example Gruppo radio con selezione dinamica e validazione
45
- # current_method = @user&.payment_method
46
- # bui_input_radio(name: "payment", value: "card", label: "Carta", checked: current_method == "card", required: true)
47
- # bui_input_radio(name: "payment", value: "bank", label: "Bonifico", checked: current_method == "bank", required: true)
48
- # bui_input_radio(name: "payment", value: "cash", label: "Contrassegno", checked: current_method == "cash", required: true)
49
- #
50
- # @example Gruppo radio con attributi HTML personalizzati
51
- # bui_input_radio(name: "notification", value: "email", label: "Email", theme: :blue, data: { action: "change->form#updateNotification" })
52
- # bui_input_radio(name: "notification", value: "sms", label: "SMS", theme: :blue, data: { action: "change->form#updateNotification" })
53
- # bui_input_radio(name: "notification", value: "push", label: "Push", theme: :blue, data: { action: "change->form#updateNotification" })
54
- #
55
- def bui_input_radio(name:, value:, checked: false, required: false, disabled: false,
56
- label: nil, label_position: :right, theme: :default,
57
- size: :medium, rounded: :full, classes: '', form: nil, **options)
58
- render BetterUi::General::Input::Radio::Component.new(
59
- name: name,
60
- value: value,
61
- checked: checked,
62
- required: required,
63
- disabled: disabled,
64
- label: label,
65
- label_position: label_position,
66
- theme: theme,
67
- size: size,
68
- rounded: rounded,
69
- classes: classes,
70
- form: form,
71
- **options
72
- )
73
- end
74
- end
75
- end
76
- end
77
- end
78
- end
79
- end
@@ -1,124 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module BetterUi
4
- module General
5
- module Components
6
- module Input
7
- module RadioGroup
8
- # Helper per creare gruppi di radio button Better UI
9
- module RadioGroupHelper
10
- # Genera un gruppo completo di radio button con stili Better UI
11
- #
12
- # @param name [String] Nome del campo radio (comune a tutto il gruppo)
13
- # @param options [Array<Hash>] Array di opzioni per ogni radio button
14
- # @param selected [String, nil] Valore dell'opzione selezionata
15
- # @param theme [Symbol] Tema del componente (:default, :white, :red, :rose, :orange, :green, :blue, :yellow, :violet)
16
- # @param size [Symbol] Dimensione del componente (:small, :medium, :large)
17
- # @param rounded [Symbol] Border radius (:none, :small, :medium, :large, :full)
18
- # @param direction [Symbol] Direzione del gruppo (:vertical, :horizontal)
19
- # @param required [Boolean] Se il gruppo è obbligatorio
20
- # @param disabled [Boolean] Se il gruppo è disabilitato
21
- # @param classes [String] Classi CSS aggiuntive per il contenitore
22
- # @param form [ActionView::Helpers::FormBuilder, nil] Form builder Rails opzionale
23
- # @param html_options [Hash] Opzioni HTML aggiuntive per ogni radio
24
- # @return [String] HTML del gruppo radio renderizzato
25
- #
26
- # @example Gruppo radio base - Selezione genere
27
- # bui_input_radio_group(
28
- # name: "gender",
29
- # options: [
30
- # { value: "male", label: "Maschio" },
31
- # { value: "female", label: "Femmina" },
32
- # { value: "other", label: "Altro" }
33
- # ]
34
- # )
35
- #
36
- # @example Gruppo radio con tema e selezione
37
- # bui_input_radio_group(
38
- # name: "priority",
39
- # options: [
40
- # { value: "low", label: "Bassa", theme: :green },
41
- # { value: "medium", label: "Media", theme: :yellow },
42
- # { value: "high", label: "Alta", theme: :red }
43
- # ],
44
- # selected: "medium",
45
- # size: :large
46
- # )
47
- #
48
- # @example Gruppo radio orizzontale con Rails form
49
- # <%= form_with model: @user do |form| %>
50
- # <%= bui_input_radio_group(
51
- # name: :role,
52
- # options: [
53
- # { value: "admin", label: "Amministratore" },
54
- # { value: "user", label: "Utente" },
55
- # { value: "guest", label: "Ospite" }
56
- # ],
57
- # selected: @user.role,
58
- # direction: :horizontal,
59
- # form: form
60
- # ) %>
61
- # <% end %>
62
- #
63
- # @example Gruppo radio con validazione e attributi HTML
64
- # bui_input_radio_group(
65
- # name: "notification_type",
66
- # options: [
67
- # { value: "email", label: "Email" },
68
- # { value: "sms", label: "SMS" },
69
- # { value: "push", label: "Push Notification" }
70
- # ],
71
- # required: true,
72
- # theme: :blue,
73
- # html_options: { data: { action: "change->form#validateNotification" } }
74
- # )
75
- #
76
- # @example Gruppo radio con temi personalizzati per opzione
77
- # bui_input_radio_group(
78
- # name: "status",
79
- # options: [
80
- # { value: "active", label: "Attivo", theme: :green },
81
- # { value: "pending", label: "In Sospeso", theme: :yellow },
82
- # { value: "inactive", label: "Inattivo", theme: :red }
83
- # ],
84
- # selected: "active",
85
- # direction: :horizontal
86
- # )
87
- #
88
- def bui_input_radio_group(name:, options:, selected: nil, theme: :default, size: :medium,
89
- rounded: :full, direction: :vertical, required: false, disabled: false,
90
- classes: '', form: nil, **html_options)
91
- container_classes = [
92
- 'space-y-2',
93
- direction == :horizontal ? 'flex flex-wrap gap-6' : 'space-y-2',
94
- classes
95
- ].compact.join(' ')
96
-
97
- content_tag(:div, class: container_classes) do
98
- options.map do |option|
99
- option_theme = option[:theme] || theme
100
- option_classes = option[:classes] || ''
101
-
102
- render BetterUi::General::Input::Radio::Component.new(
103
- name: name,
104
- value: option[:value],
105
- label: option[:label],
106
- checked: selected.to_s == option[:value].to_s,
107
- theme: option_theme,
108
- size: size,
109
- rounded: rounded,
110
- required: required,
111
- disabled: disabled || option[:disabled],
112
- classes: option_classes,
113
- form: form,
114
- **html_options
115
- )
116
- end.join.html_safe
117
- end
118
- end
119
- end
120
- end
121
- end
122
- end
123
- end
124
- end
@@ -1,70 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module BetterUi
4
- module General
5
- module Components
6
- module Input
7
- module Rating
8
- module RatingHelper
9
- # Renderizza un componente Rating (Input) interattivo con stelle per valutazioni e feedback.
10
- #
11
- # @param name [String] Nome del campo rating (obbligatorio se non readonly)
12
- # @param value [Float, Integer] Valore del rating attuale (0.0 - max_stars)
13
- # @param max_stars [Integer] Numero massimo di stelle (default: 5)
14
- # @param readonly [Boolean] Se il rating è in sola lettura
15
- # @param half_stars [Boolean] Se supportare mezze stelle
16
- # @param theme [Symbol] Tema del componente (:default, :yellow, :orange, :red, :pink, :purple, :blue, :green, :gray)
17
- # @param size [Symbol] Dimensione del componente (:small, :medium, :large)
18
- # @param show_value [Boolean] Se mostrare il valore numerico accanto alle stelle
19
- # @param form [ActionView::Helpers::FormBuilder, nil] Form builder Rails opzionale
20
- # @param classes [String] Classi CSS aggiuntive
21
- # @param options [Hash] Opzioni aggiuntive per attributi HTML
22
- #
23
- # @return [String] HTML del componente Rating renderizzato
24
- #
25
- # @example Uso base per inserimento rating
26
- # <%= bui_input_rating(name: 'review_rating') %>
27
- #
28
- # @example Rating read-only per visualizzazione
29
- # <%= bui_input_rating(value: 4.5, readonly: true, show_value: true) %>
30
- #
31
- # @example Con tema e dimensioni personalizzate
32
- # <%= bui_input_rating(name: 'quality', theme: :orange, size: :large, max_stars: 10) %>
33
- #
34
- # @example Con Rails form builder
35
- # <%= form_with model: @review do |form| %>
36
- # <%= bui_input_rating(name: :rating, form: form, value: @review.rating, show_value: true) %>
37
- # <% end %>
38
- #
39
- # @example Rating con mezze stelle e valore preimpostato
40
- # <%= bui_input_rating(
41
- # name: 'service_rating',
42
- # value: 3.5,
43
- # half_stars: true,
44
- # theme: :green,
45
- # size: :medium,
46
- # show_value: true
47
- # ) %>
48
- def bui_input_rating(name: nil, value: 0, max_stars: 5, readonly: false, half_stars: true,
49
- theme: :default, size: :medium, show_value: false, form: nil,
50
- classes: '', **options)
51
- render BetterUi::General::Input::Rating::Component.new(
52
- name: name,
53
- value: value,
54
- max_stars: max_stars,
55
- readonly: readonly,
56
- half_stars: half_stars,
57
- theme: theme,
58
- size: size,
59
- show_value: show_value,
60
- form: form,
61
- classes: classes,
62
- **options
63
- )
64
- end
65
- end
66
- end
67
- end
68
- end
69
- end
70
- end
@@ -1,86 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module BetterUi
4
- module General
5
- module Components
6
- module Input
7
- module Select
8
- module SelectHelper
9
- # Renderizza un componente Select personalizzato con ricerca, animazioni e multi-selezione.
10
- #
11
- # @param name [String] Nome del campo select (obbligatorio)
12
- # @param options [Array<Hash>] Array di opzioni nel formato [{value: 'value', label: 'label'}, ...]
13
- # @param selected [String, Array, nil] Valore/i selezionato/i
14
- # @param required [Boolean] Se il campo è obbligatorio
15
- # @param disabled [Boolean] Se il campo è disabilitato
16
- # @param multiple [Boolean] Se multiple opzioni possono essere selezionate
17
- # @param searchable [Boolean] Se abilitare la ricerca
18
- # @param theme [Symbol] Tema del componente (:default, :white, :red, :rose, :orange, :green, :blue, :yellow, :violet)
19
- # @param size [Symbol] Dimensione del componente (:small, :medium, :large)
20
- # @param rounded [Symbol] Border radius (:none, :small, :medium, :large, :full)
21
- # @param placeholder [String] Testo placeholder per il trigger
22
- # @param search_placeholder [String] Testo placeholder per il campo search
23
- # @param max_height [String] Altezza massima del dropdown (default: "300px")
24
- # @param form [ActionView::Helpers::FormBuilder, nil] Form builder Rails opzionale
25
- # @param classes [String] Classi CSS aggiuntive
26
- # @param options [Hash] Opzioni aggiuntive per attributi HTML
27
- #
28
- # @return [String] HTML del componente Select renderizzato
29
- #
30
- # @example Uso base
31
- # <%= bui_input_select(name: 'country', options: [{value: 'it', label: 'Italia'}, {value: 'us', label: 'USA'}]) %>
32
- #
33
- # @example Con selezione multipla
34
- # <%= bui_input_select(name: 'skills', multiple: true, options: skills_options) %>
35
- #
36
- # @example Con ricerca e temi
37
- # <%= bui_input_select(name: 'category', searchable: true, theme: :blue, options: categories) %>
38
- #
39
- # @example Con dimensioni personalizzate
40
- # <%= bui_input_select(name: 'priority', size: :large, options: priorities, selected: 'high') %>
41
- #
42
- # @example Con Rails form builder
43
- # <%= form_with model: @user do |form| %>
44
- # <%= bui_input_select(name: :role, form: form, options: role_options, theme: :green) %>
45
- # <% end %>
46
- #
47
- # @example Con opzioni avanzate
48
- # <%= bui_input_select(
49
- # name: 'tags',
50
- # multiple: true,
51
- # searchable: true,
52
- # placeholder: 'Seleziona tag...',
53
- # search_placeholder: 'Cerca tag...',
54
- # max_height: '200px',
55
- # options: tag_options,
56
- # selected: ['ruby', 'rails']
57
- # ) %>
58
- def bui_input_select(name:, options:, selected: nil, required: false, disabled: false,
59
- multiple: false, searchable: true, theme: :default, size: :medium,
60
- rounded: :medium, placeholder: nil, search_placeholder: nil,
61
- max_height: "300px", form: nil, classes: '', **html_options)
62
- render BetterUi::General::Input::Select::Component.new(
63
- name: name,
64
- options: options,
65
- selected: selected,
66
- required: required,
67
- disabled: disabled,
68
- multiple: multiple,
69
- searchable: searchable,
70
- theme: theme,
71
- size: size,
72
- rounded: rounded,
73
- placeholder: placeholder,
74
- search_placeholder: search_placeholder,
75
- max_height: max_height,
76
- form: form,
77
- classes: classes,
78
- **html_options
79
- )
80
- end
81
- end
82
- end
83
- end
84
- end
85
- end
86
- end
@@ -1,138 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module BetterUi
4
- module General
5
- module Components
6
- module Input
7
- module Text
8
- module TextHelper
9
- # Renderizza un componente Text Input con tutti i parametri disponibili.
10
- #
11
- # @param name [String] Nome del campo input (obbligatorio)
12
- # @param value [String, nil] Valore del campo
13
- # @param placeholder [String, nil] Placeholder del campo
14
- # @param required [Boolean] Se il campo è obbligatorio
15
- # @param disabled [Boolean] Se il campo è disabilitato
16
- # @param type [Symbol] Tipo del campo input (:text, :password, :email, :tel, :url, :number, :search, :color)
17
- # @param theme [Symbol] Tema del componente (:default, :white, :red, :rose, :orange, :green, :blue, :yellow, :violet)
18
- # @param size [Symbol] Dimensione del componente (:small, :medium, :large)
19
- # @param rounded [Symbol] Border radius (:none, :small, :medium, :large, :full)
20
- # @param classes [String] Classi CSS aggiuntive
21
- # @param form [ActionView::Helpers::FormBuilder, nil] Form builder Rails opzionale
22
- # @param options [Hash] Opzioni aggiuntive per l'input (es. data attributes, aria attributes)
23
- #
24
- # @return [String] HTML del componente Text Input renderizzato
25
- #
26
- # @example Uso base
27
- # <%= bui_input_text(name: 'email') %>
28
- #
29
- # @example Con placeholder e validazione
30
- # <%= bui_input_text(name: 'email', placeholder: 'Inserisci la tua email', required: true) %>
31
- #
32
- # @example Con tema e dimensione personalizzati
33
- # <%= bui_input_text(name: 'search', theme: :blue, size: :large, placeholder: 'Cerca...') %>
34
- #
35
- # @example Con border radius personalizzato
36
- # <%= bui_input_text(name: 'username', rounded: :full, placeholder: 'Username') %>
37
- #
38
- # @example Con classi aggiuntive
39
- # <%= bui_input_text(name: 'custom', classes: 'mb-4', placeholder: 'Campo personalizzato') %>
40
- #
41
- # @example Con attributi HTML aggiuntivi
42
- # <%= bui_input_text(name: 'data-field', 'data-validation': 'email', 'aria-label': 'Campo email') %>
43
- #
44
- # @example Con Rails form builder
45
- # <%= form_with model: @user do |form| %>
46
- # <%= bui_input_text(name: :email, form: form, theme: :blue, placeholder: 'Email utente') %>
47
- # <% end %>
48
- def bui_input_text(name:, value: nil, placeholder: nil, required: false, disabled: false,
49
- type: :text, theme: :default, size: :medium, rounded: :medium, classes: '', form: nil, **options)
50
- render BetterUi::General::Input::Text::Component.new(
51
- name: name,
52
- value: value,
53
- placeholder: placeholder,
54
- required: required,
55
- disabled: disabled,
56
- type: type,
57
- theme: theme,
58
- size: size,
59
- rounded: rounded,
60
- classes: classes,
61
- form: form,
62
- **options
63
- )
64
- end
65
-
66
- # Helper specifici per ogni tipo di input
67
-
68
- # Input di tipo password
69
- def bui_input_password(name:, value: nil, placeholder: nil, required: false, disabled: false,
70
- theme: :default, size: :medium, rounded: :medium, classes: '', form: nil, **options)
71
- bui_input_text(
72
- name: name, value: value, placeholder: placeholder, required: required, disabled: disabled,
73
- type: :password, theme: theme, size: size, rounded: rounded, classes: classes, form: form, **options
74
- )
75
- end
76
-
77
- # Input di tipo email
78
- def bui_input_email(name:, value: nil, placeholder: nil, required: false, disabled: false,
79
- theme: :default, size: :medium, rounded: :medium, classes: '', form: nil, **options)
80
- bui_input_text(
81
- name: name, value: value, placeholder: placeholder, required: required, disabled: disabled,
82
- type: :email, theme: theme, size: size, rounded: rounded, classes: classes, form: form, **options
83
- )
84
- end
85
-
86
- # Input di tipo tel
87
- def bui_input_tel(name:, value: nil, placeholder: nil, required: false, disabled: false,
88
- theme: :default, size: :medium, rounded: :medium, classes: '', form: nil, **options)
89
- bui_input_text(
90
- name: name, value: value, placeholder: placeholder, required: required, disabled: disabled,
91
- type: :tel, theme: theme, size: size, rounded: rounded, classes: classes, form: form, **options
92
- )
93
- end
94
-
95
- # Input di tipo url
96
- def bui_input_url(name:, value: nil, placeholder: nil, required: false, disabled: false,
97
- theme: :default, size: :medium, rounded: :medium, classes: '', form: nil, **options)
98
- bui_input_text(
99
- name: name, value: value, placeholder: placeholder, required: required, disabled: disabled,
100
- type: :url, theme: theme, size: size, rounded: rounded, classes: classes, form: form, **options
101
- )
102
- end
103
-
104
- # Input di tipo number
105
- def bui_input_number(name:, value: nil, placeholder: nil, required: false, disabled: false,
106
- theme: :default, size: :medium, rounded: :medium, classes: '', form: nil, **options)
107
- bui_input_text(
108
- name: name, value: value, placeholder: placeholder, required: required, disabled: disabled,
109
- type: :number, theme: theme, size: size, rounded: rounded, classes: classes, form: form, **options
110
- )
111
- end
112
-
113
- # Input di tipo search
114
- def bui_input_search(name:, value: nil, placeholder: nil, required: false, disabled: false,
115
- theme: :default, size: :medium, rounded: :medium, classes: '', form: nil, **options)
116
- bui_input_text(
117
- name: name, value: value, placeholder: placeholder, required: required, disabled: disabled,
118
- type: :search, theme: theme, size: size, rounded: rounded, classes: classes, form: form, **options
119
- )
120
- end
121
-
122
-
123
-
124
-
125
- # Input di tipo color
126
- def bui_input_color(name:, value: nil, placeholder: nil, required: false, disabled: false,
127
- theme: :default, size: :medium, rounded: :medium, classes: '', form: nil, **options)
128
- bui_input_text(
129
- name: name, value: value, placeholder: placeholder, required: required, disabled: disabled,
130
- type: :color, theme: theme, size: size, rounded: rounded, classes: classes, form: form, **options
131
- )
132
- end
133
- end
134
- end
135
- end
136
- end
137
- end
138
- end