better_ui 0.4.0 → 0.5.0

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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +165 -105
  3. data/app/components/better_ui/application/alert_component.html.erb +1 -1
  4. data/app/components/better_ui/application/alert_component.rb +95 -89
  5. data/app/components/better_ui/application/card_component.html.erb +24 -0
  6. data/app/components/better_ui/application/card_component.rb +53 -0
  7. data/app/components/better_ui/application/card_container_component.html.erb +8 -0
  8. data/app/components/better_ui/application/card_container_component.rb +14 -0
  9. data/app/components/better_ui/application/toast_component.rb +92 -57
  10. data/app/components/better_ui/general/avatar_component.html.erb +19 -0
  11. data/app/components/better_ui/general/avatar_component.rb +171 -0
  12. data/app/components/better_ui/general/badge_component.html.erb +19 -0
  13. data/app/components/better_ui/general/badge_component.rb +123 -0
  14. data/app/components/better_ui/general/breadcrumb_component.html.erb +7 -31
  15. data/app/components/better_ui/general/breadcrumb_component.rb +64 -66
  16. data/app/components/better_ui/general/button_component.html.erb +4 -4
  17. data/app/components/better_ui/general/button_component.rb +64 -95
  18. data/app/components/better_ui/general/heading_component.html.erb +3 -3
  19. data/app/components/better_ui/general/heading_component.rb +76 -70
  20. data/app/components/better_ui/general/icon_component.html.erb +1 -1
  21. data/app/components/better_ui/general/icon_component.rb +22 -23
  22. data/app/components/better_ui/general/link_component.html.erb +17 -0
  23. data/app/components/better_ui/general/link_component.rb +132 -0
  24. data/app/components/better_ui/general/panel_component.rb +62 -56
  25. data/app/components/better_ui/general/spinner_component.html.erb +15 -0
  26. data/app/components/better_ui/general/spinner_component.rb +79 -0
  27. data/app/components/better_ui/general/table_component.html.erb +56 -20
  28. data/app/components/better_ui/general/table_component.rb +106 -80
  29. data/app/components/better_ui/theme_helper.rb +77 -75
  30. data/app/views/components/better_ui/general/table/_custom_body_row.html.erb +17 -0
  31. data/app/views/components/better_ui/general/table/_custom_footer_rows.html.erb +17 -0
  32. data/app/views/components/better_ui/general/table/_custom_header_rows.html.erb +12 -0
  33. data/lib/better_ui/engine.rb +4 -10
  34. data/lib/better_ui/version.rb +1 -1
  35. data/lib/better_ui.rb +4 -0
  36. data/lib/generators/better_ui/stylesheet_generator.rb +96 -0
  37. data/lib/generators/better_ui/templates/README +56 -0
  38. data/lib/generators/better_ui/templates/components/_avatar.scss +151 -0
  39. data/lib/generators/better_ui/templates/components/_badge.scss +142 -0
  40. data/lib/generators/better_ui/templates/components/_breadcrumb.scss +107 -0
  41. data/lib/generators/better_ui/templates/components/_button.scss +106 -0
  42. data/lib/generators/better_ui/templates/components/_card.scss +69 -0
  43. data/lib/generators/better_ui/templates/components/_heading.scss +180 -0
  44. data/lib/generators/better_ui/templates/components/_icon.scss +90 -0
  45. data/lib/generators/better_ui/templates/components/_link.scss +130 -0
  46. data/lib/generators/better_ui/templates/components/_panel.scss +144 -0
  47. data/lib/generators/better_ui/templates/components/_spinner.scss +132 -0
  48. data/lib/generators/better_ui/templates/components/_table.scss +105 -0
  49. data/lib/generators/better_ui/templates/components/_variables.scss +33 -0
  50. data/lib/generators/better_ui/templates/components_stylesheet.scss +66 -0
  51. metadata +51 -22
  52. data/app/helpers/better_ui_application_helper.rb +0 -99
@@ -1,46 +1,55 @@
1
1
  module BetterUi
2
2
  module General
3
3
  class ButtonComponent < ViewComponent::Base
4
- attr_reader :label, :type, :size, :outline, :full_width, :disabled,
5
- :icon, :icon_position, :href, :method, :data, :classes, :id
4
+ attr_reader :label, :type, :size, :full_width, :disabled,
5
+ :icon, :icon_position, :href, :method, :data, :classes, :id, :rounded
6
6
 
7
- # Tipi di bottoni disponibili con classi Tailwind staticamente definite
8
- BUTTON_TYPES = {
9
- primary: "bg-blue-600 hover:bg-blue-700 text-white",
10
- secondary: "bg-gray-200 hover:bg-gray-300 text-gray-800",
11
- success: "bg-green-600 hover:bg-green-700 text-white",
12
- danger: "bg-red-600 hover:bg-red-700 text-white",
13
- warning: "bg-yellow-500 hover:bg-yellow-600 text-white",
14
- info: "bg-sky-500 hover:bg-sky-600 text-white",
15
- light: "bg-white hover:bg-gray-100 text-gray-800 border border-gray-300",
16
- dark: "bg-gray-800 hover:bg-gray-900 text-white"
7
+ # Temi di bottoni disponibili con classi CSS personalizzate
8
+ BUTTON_THEME = {
9
+ default: "bui-btn-default",
10
+ white: "bui-btn-white",
11
+ red: "bui-btn-red",
12
+ rose: "bui-btn-rose",
13
+ orange: "bui-btn-orange",
14
+ green: "bui-btn-green",
15
+ blue: "bui-btn-blue",
16
+ yellow: "bui-btn-yellow",
17
+ violet: "bui-btn-violet"
17
18
  }
18
19
 
19
- # Classi per bottoni outline
20
- OUTLINE_BUTTON_TYPES = {
21
- primary: "bg-transparent text-blue-600 border-blue-600 border hover:text-white hover:bg-blue-600",
22
- secondary: "bg-transparent text-gray-800 border-gray-200 border hover:text-white hover:bg-gray-200",
23
- success: "bg-transparent text-green-600 border-green-600 border hover:text-white hover:bg-green-600",
24
- danger: "bg-transparent text-red-600 border-red-600 border hover:text-white hover:bg-red-600",
25
- warning: "bg-transparent text-yellow-500 border-yellow-500 border hover:text-white hover:bg-yellow-500",
26
- info: "bg-transparent text-sky-500 border-sky-500 border hover:text-white hover:bg-sky-500",
27
- light: "bg-transparent text-gray-800 border-gray-300 border hover:text-gray-900 hover:bg-gray-100",
28
- dark: "bg-transparent text-gray-800 border-gray-800 border hover:text-white hover:bg-gray-800"
29
- }
30
-
31
- # Dimensioni disponibili
20
+ # Dimensioni disponibili con classi CSS personalizzate
32
21
  BUTTON_SIZES = {
33
- sm: "py-1 px-2 text-sm",
34
- md: "py-2 px-4 text-base",
35
- lg: "py-3 px-6 text-lg"
22
+ small: "bui-btn-size-small",
23
+ medium: "bui-btn-size-medium",
24
+ large: "bui-btn-size-large"
25
+ }
26
+
27
+ # Border radius disponibili con classi CSS personalizzate
28
+ BUTTON_RADIUS = {
29
+ none: "bui-btn-radius-none",
30
+ small: "bui-btn-radius-small",
31
+ medium: "bui-btn-radius-medium",
32
+ large: "bui-btn-radius-large",
33
+ full: "bui-btn-radius-full"
34
+ }
35
+
36
+ # Stati e comportamenti del bottone
37
+ BUTTON_STATES = {
38
+ disabled: "bui-btn-disabled",
39
+ full_width: "bui-btn-full-width"
40
+ }
41
+
42
+ # Layout e stili comuni
43
+ BUTTON_LAYOUT = {
44
+ default: "bui-btn-layout-default",
45
+ focus: "bui-btn-focus"
36
46
  }
37
47
 
38
48
  # Inizializzazione del componente
39
49
  def initialize(
40
50
  label: nil,
41
- type: :primary,
42
- size: :md,
43
- outline: false,
51
+ type: :default,
52
+ size: :medium,
44
53
  full_width: false,
45
54
  disabled: false,
46
55
  icon: nil,
@@ -49,12 +58,12 @@ module BetterUi
49
58
  method: nil,
50
59
  data: {},
51
60
  classes: nil,
52
- id: nil
61
+ id: nil,
62
+ rounded: :small
53
63
  )
54
64
  @label = label
55
65
  @type = type.to_sym
56
66
  @size = size.to_sym
57
- @outline = outline
58
67
  @full_width = full_width
59
68
  @disabled = disabled
60
69
  @icon = icon
@@ -64,6 +73,7 @@ module BetterUi
64
73
  @data = data
65
74
  @classes = classes
66
75
  @id = id
76
+ @rounded = rounded.to_sym
67
77
  end
68
78
 
69
79
  # Determina se il bottone è un link o un button
@@ -74,79 +84,28 @@ module BetterUi
74
84
  # Combina tutte le classi
75
85
  def combined_classes
76
86
  [
77
- "inline-flex items-center justify-center rounded-md font-medium",
78
- "transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2",
87
+ "bui-btn", # Classe base per tutti i bottoni
88
+ BUTTON_LAYOUT[:default],
89
+ BUTTON_LAYOUT[:focus],
90
+ get_border_radius_class,
79
91
  get_button_type_classes,
80
92
  get_button_size_classes,
81
- @full_width ? "w-full" : "",
82
- @disabled ? "opacity-50 cursor-not-allowed" : "",
93
+ @full_width ? BUTTON_STATES[:full_width] : "",
94
+ @disabled ? BUTTON_STATES[:disabled] : "",
83
95
  @classes
84
96
  ].compact.join(" ")
85
97
  end
86
98
 
87
99
  def get_button_type_classes
88
- if @outline
89
- get_outline_button_classes
90
- else
91
- get_solid_button_classes
92
- end
100
+ BUTTON_THEME[@type] || BUTTON_THEME[:default]
93
101
  end
94
102
 
95
- def get_solid_button_classes
96
- case @type
97
- when :primary
98
- "bg-orange-500 text-white hover:bg-orange-600 focus:ring-orange-500"
99
- when :secondary
100
- "bg-gray-200 text-gray-800 hover:bg-gray-300 focus:ring-gray-300"
101
- when :success
102
- "bg-green-500 text-white hover:bg-green-600 focus:ring-green-500"
103
- when :danger
104
- "bg-red-500 text-white hover:bg-red-600 focus:ring-red-500"
105
- when :warning
106
- "bg-amber-500 text-white hover:bg-amber-600 focus:ring-amber-500"
107
- when :info
108
- "bg-blue-500 text-white hover:bg-blue-600 focus:ring-blue-500"
109
- when :light
110
- "bg-white text-gray-800 border border-gray-300 hover:bg-gray-100 focus:ring-gray-300"
111
- when :dark
112
- "bg-gray-800 text-white hover:bg-gray-900 focus:ring-gray-800"
113
- else
114
- "bg-orange-500 text-white hover:bg-orange-600 focus:ring-orange-500"
115
- end
116
- end
117
-
118
- def get_outline_button_classes
119
- case @type
120
- when :primary
121
- "bg-transparent text-orange-500 border-2 border-orange-500 hover:bg-orange-50 focus:ring-orange-500"
122
- when :secondary
123
- "bg-transparent text-gray-800 border-2 border-gray-300 hover:bg-gray-50 focus:ring-gray-300"
124
- when :success
125
- "bg-transparent text-green-500 border-2 border-green-500 hover:bg-green-50 focus:ring-green-500"
126
- when :danger
127
- "bg-transparent text-red-500 border-2 border-red-500 hover:bg-red-50 focus:ring-red-500"
128
- when :warning
129
- "bg-transparent text-amber-500 border-2 border-amber-500 hover:bg-amber-50 focus:ring-amber-500"
130
- when :info
131
- "bg-transparent text-blue-500 border-2 border-blue-500 hover:bg-blue-50 focus:ring-blue-500"
132
- when :light
133
- "bg-transparent text-gray-800 border-2 border-gray-300 hover:bg-gray-50 focus:ring-gray-300"
134
- when :dark
135
- "bg-transparent text-gray-800 border-2 border-gray-800 hover:bg-gray-50 focus:ring-gray-800"
136
- else
137
- "bg-transparent text-orange-500 border-2 border-orange-500 hover:bg-orange-50 focus:ring-orange-500"
138
- end
103
+ def get_border_radius_class
104
+ BUTTON_RADIUS[@rounded] || BUTTON_RADIUS[:small]
139
105
  end
140
106
 
141
107
  def get_button_size_classes
142
- case @size
143
- when :sm
144
- "py-1 px-2.5 text-xs"
145
- when :lg
146
- "py-2.5 px-6 text-base"
147
- else # :md
148
- "py-2 px-4 text-sm"
149
- end
108
+ BUTTON_SIZES[@size] || BUTTON_SIZES[:medium]
150
109
  end
151
110
 
152
111
  # Restituisce gli attributi per il bottone
@@ -181,10 +140,20 @@ module BetterUi
181
140
 
182
141
  # Helper per renderizzare le icone
183
142
  def render_icon(icon_name)
143
+ # Mappa le dimensioni del bottone alle dimensioni dell'icona
144
+ icon_size = case @size
145
+ when :large
146
+ :large
147
+ when :small
148
+ :small
149
+ else
150
+ :medium
151
+ end
152
+
184
153
  # Utilizziamo il componente Icon
185
154
  render BetterUi::General::IconComponent.new(
186
155
  name: icon_name,
187
- size: @size == :lg ? :lg : :md,
156
+ size: icon_size,
188
157
  fixed_width: true
189
158
  )
190
159
  end
@@ -2,9 +2,9 @@
2
2
  <%# Utilizzo di tag heading dinamico in base al livello specificato %>
3
3
  <<%= "h#{@level}" %> class="<%= heading_classes %>">
4
4
  <% if @icon.present? %>
5
- <span class="inline-flex items-center">
6
- <span class="mr-2">
7
- <%= render BetterUi::General::IconComponent.new(name: @icon) %>
5
+ <span class="bui-header-icon-container">
6
+ <span class="bui-header-icon-wrapper">
7
+ <%= render BetterUi::General::IconComponent.new(name: @icon, size: get_icon_size) %>
8
8
  </span>
9
9
  <%= @text || content %>
10
10
  </span>
@@ -4,77 +4,75 @@ module BetterUi
4
4
  attr_reader :text, :level, :variant, :size, :align, :classes, :icon, :subtitle, :with_divider
5
5
 
6
6
  # Varianti di colore disponibili
7
- VARIANTS = {
7
+ HEADER_THEME = {
8
8
  default: {
9
- heading: "text-gray-900",
10
- subtitle: "text-gray-600",
11
- divider: "border-gray-200"
9
+ heading: "bui-header-default-heading",
10
+ subtitle: "bui-header-default-subtitle",
11
+ divider: "bui-header-default-divider"
12
12
  },
13
- primary: {
14
- heading: "text-orange-700",
15
- subtitle: "text-orange-500",
16
- divider: "border-orange-300"
13
+ white: {
14
+ heading: "bui-header-white-heading",
15
+ subtitle: "bui-header-white-subtitle",
16
+ divider: "bui-header-white-divider"
17
17
  },
18
- success: {
19
- heading: "text-green-700",
20
- subtitle: "text-green-500",
21
- divider: "border-green-300"
18
+ red: {
19
+ heading: "bui-header-red-heading",
20
+ subtitle: "bui-header-red-subtitle",
21
+ divider: "bui-header-red-divider"
22
22
  },
23
- warning: {
24
- heading: "text-yellow-700",
25
- subtitle: "text-yellow-500",
26
- divider: "border-yellow-300"
23
+ rose: {
24
+ heading: "bui-header-rose-heading",
25
+ subtitle: "bui-header-rose-subtitle",
26
+ divider: "bui-header-rose-divider"
27
27
  },
28
- danger: {
29
- heading: "text-red-700",
30
- subtitle: "text-red-500",
31
- divider: "border-red-300"
28
+ orange: {
29
+ heading: "bui-header-orange-heading",
30
+ subtitle: "bui-header-orange-subtitle",
31
+ divider: "bui-header-orange-divider"
32
32
  },
33
- info: {
34
- heading: "text-blue-700",
35
- subtitle: "text-blue-500",
36
- divider: "border-blue-300"
33
+ green: {
34
+ heading: "bui-header-green-heading",
35
+ subtitle: "bui-header-green-subtitle",
36
+ divider: "bui-header-green-divider"
37
37
  },
38
- light: {
39
- heading: "text-gray-100",
40
- subtitle: "text-gray-300",
41
- divider: "border-gray-700"
38
+ blue: {
39
+ heading: "bui-header-blue-heading",
40
+ subtitle: "bui-header-blue-subtitle",
41
+ divider: "bui-header-blue-divider"
42
+ },
43
+ yellow: {
44
+ heading: "bui-header-yellow-heading",
45
+ subtitle: "bui-header-yellow-subtitle",
46
+ divider: "bui-header-yellow-divider"
47
+ },
48
+ violet: {
49
+ heading: "bui-header-violet-heading",
50
+ subtitle: "bui-header-violet-subtitle",
51
+ divider: "bui-header-violet-divider"
42
52
  }
43
53
  }
44
54
 
45
55
  # Dimensioni disponibili
46
- SIZES = {
47
- xs: {
48
- heading: "text-lg",
49
- subtitle: "text-sm"
50
- },
51
- sm: {
52
- heading: "text-xl",
53
- subtitle: "text-base"
54
- },
55
- md: {
56
- heading: "text-2xl",
57
- subtitle: "text-lg"
56
+ HEADER_SIZES = {
57
+ small: {
58
+ heading: "bui-header-small-heading",
59
+ subtitle: "bui-header-small-subtitle"
58
60
  },
59
- lg: {
60
- heading: "text-3xl",
61
- subtitle: "text-xl"
61
+ medium: {
62
+ heading: "bui-header-medium-heading",
63
+ subtitle: "bui-header-medium-subtitle"
62
64
  },
63
- xl: {
64
- heading: "text-4xl",
65
- subtitle: "text-2xl"
66
- },
67
- xxl: {
68
- heading: "text-5xl",
69
- subtitle: "text-3xl"
65
+ large: {
66
+ heading: "bui-header-large-heading",
67
+ subtitle: "bui-header-large-subtitle"
70
68
  }
71
69
  }
72
70
 
73
71
  # Allineamenti disponibili
74
- ALIGNMENTS = {
75
- left: "text-left",
76
- center: "text-center",
77
- right: "text-right"
72
+ HEADER_ALIGNMENTS = {
73
+ left: "bui-header-left",
74
+ center: "bui-header-center",
75
+ right: "bui-header-right"
78
76
  }
79
77
 
80
78
  # Inizializzazione del componente
@@ -82,7 +80,7 @@ module BetterUi
82
80
  text: nil,
83
81
  level: 2,
84
82
  variant: :default,
85
- size: :md,
83
+ size: :medium,
86
84
  align: :left,
87
85
  classes: nil,
88
86
  icon: nil,
@@ -103,10 +101,10 @@ module BetterUi
103
101
  # Genera le classi per l'heading
104
102
  def heading_classes
105
103
  [
106
- VARIANTS.fetch(@variant, VARIANTS[:default])[:heading],
107
- SIZES.fetch(@size, SIZES[:md])[:heading],
108
- ALIGNMENTS.fetch(@align, ALIGNMENTS[:left]),
109
- "font-bold",
104
+ HEADER_THEME.fetch(@variant, HEADER_THEME[:default])[:heading],
105
+ HEADER_SIZES.fetch(@size, HEADER_SIZES[:medium])[:heading],
106
+ HEADER_ALIGNMENTS.fetch(@align, HEADER_ALIGNMENTS[:left]),
107
+ "bui-header-heading-base",
110
108
  @classes
111
109
  ].compact.join(" ")
112
110
  end
@@ -114,28 +112,36 @@ module BetterUi
114
112
  # Genera le classi per il sottotitolo
115
113
  def subtitle_classes
116
114
  [
117
- VARIANTS.fetch(@variant, VARIANTS[:default])[:subtitle],
118
- SIZES.fetch(@size, SIZES[:md])[:subtitle],
119
- ALIGNMENTS.fetch(@align, ALIGNMENTS[:left]),
120
- "mt-1"
115
+ HEADER_THEME.fetch(@variant, HEADER_THEME[:default])[:subtitle],
116
+ HEADER_SIZES.fetch(@size, HEADER_SIZES[:medium])[:subtitle],
117
+ HEADER_ALIGNMENTS.fetch(@align, HEADER_ALIGNMENTS[:left]),
118
+ "bui-header-subtitle-base"
121
119
  ].compact.join(" ")
122
120
  end
123
121
 
124
122
  # Genera le classi per il divisore
125
123
  def divider_classes
126
124
  [
127
- "border-t",
128
- "mt-2",
129
- VARIANTS.fetch(@variant, VARIANTS[:default])[:divider]
125
+ "bui-header-divider-base",
126
+ HEADER_THEME.fetch(@variant, HEADER_THEME[:default])[:divider]
130
127
  ].compact.join(" ")
131
128
  end
132
129
 
133
130
  # Genera le classi per il container
134
131
  def container_classes
135
- [
136
- "mb-4",
137
- @with_divider ? "pb-2" : ""
138
- ].compact.join(" ")
132
+ @with_divider ? "bui-header-container-with-divider" : "bui-header-container-base"
133
+ end
134
+
135
+ # Helper per determinare la dimensione dell'icona in base alla dimensione dell'heading
136
+ def get_icon_size
137
+ case @size
138
+ when :large
139
+ :medium
140
+ when :small
141
+ :xsmall
142
+ else
143
+ :small
144
+ end
139
145
  end
140
146
  end
141
147
  end
@@ -1,2 +1,2 @@
1
1
  <%# Template per l'icona %>
2
- <i class="<%= combined_classes %>" aria-hidden="true"></i>
2
+ <i class="bui-icon-base <%= combined_classes %>" aria-hidden="true"></i>
@@ -2,28 +2,27 @@ module BetterUi
2
2
  module General
3
3
  class IconComponent < ViewComponent::Base
4
4
  # Dimensioni disponibili
5
- SIZE_CLASSES = {
6
- xs: "fa-xs",
7
- sm: "fa-sm",
8
- md: "", # Default di Font Awesome
9
- lg: "fa-lg",
10
- xl: "fa-xl",
11
- "2xl": "fa-2xl"
5
+ ICON_SIZES = {
6
+ xsmall: "bui-icon-xsmall",
7
+ small: "bui-icon-small",
8
+ medium: "bui-icon-medium",
9
+ large: "bui-icon-large",
10
+ xlarge: "bui-icon-xlarge"
12
11
  }
13
12
 
14
13
  # Stili disponibili
15
- STYLE_CLASSES = {
16
- solid: "fas",
17
- regular: "far",
18
- light: "fal",
19
- brands: "fab",
20
- duotone: "fad"
14
+ ICON_STYLES = {
15
+ solid: "bui-icon-solid",
16
+ regular: "bui-icon-regular",
17
+ light: "bui-icon-light",
18
+ brands: "bui-icon-brands",
19
+ duotone: "bui-icon-duotone"
21
20
  }
22
21
 
23
22
  # Inizializzazione del componente
24
23
  def initialize(
25
24
  name:,
26
- size: :md,
25
+ size: :medium,
27
26
  style: :solid,
28
27
  fixed_width: false,
29
28
  spin: false,
@@ -47,39 +46,39 @@ module BetterUi
47
46
 
48
47
  # Classe CSS per lo stile dell'icona
49
48
  def style_class
50
- STYLE_CLASSES[@style] || STYLE_CLASSES[:solid]
49
+ ICON_STYLES[@style] || ICON_STYLES[:solid]
51
50
  end
52
51
 
53
52
  # Classe CSS per la dimensione
54
53
  def size_class
55
- SIZE_CLASSES[@size] || SIZE_CLASSES[:md]
54
+ ICON_SIZES[@size] || ICON_SIZES[:medium]
56
55
  end
57
56
 
58
57
  # Classe per rotazione
59
58
  def rotation_class
60
59
  return "" unless @rotation
61
- "fa-rotate-#{@rotation}"
60
+ "bui-icon-rotate-#{@rotation}"
62
61
  end
63
62
 
64
63
  # Classe per rovesciamento
65
64
  def flip_class
66
65
  return "" unless @flip
67
- "fa-flip-#{@flip}"
66
+ "bui-icon-flip-#{@flip}"
68
67
  end
69
68
 
70
69
  # Classi per animazioni
71
70
  def animation_classes
72
71
  classes = []
73
- classes << "fa-spin" if @spin
74
- classes << "fa-pulse" if @pulse
72
+ classes << "bui-icon-spin" if @spin
73
+ classes << "bui-icon-pulse" if @pulse
75
74
  classes.join(" ")
76
75
  end
77
76
 
78
77
  # Classi per caratteristiche aggiuntive
79
78
  def feature_classes
80
79
  classes = []
81
- classes << "fa-fw" if @fixed_width
82
- classes << "fa-border" if @border
80
+ classes << "bui-icon-fw" if @fixed_width
81
+ classes << "bui-icon-border" if @border
83
82
  classes.join(" ")
84
83
  end
85
84
 
@@ -87,7 +86,7 @@ module BetterUi
87
86
  def combined_classes
88
87
  [
89
88
  style_class,
90
- "fa-#{@name}",
89
+ "fa-#{@name}", # Questa classe deve rimanere specifica di Font Awesome
91
90
  size_class,
92
91
  rotation_class,
93
92
  flip_class,
@@ -0,0 +1,17 @@
1
+ <% if link? %>
2
+ <%= link_to href, **link_attributes do %>
3
+ <% if render_icon %>
4
+ <span class="bui-link-icon-wrapper"><%= render_icon %></span>
5
+ <% end %>
6
+ <span><%= label %></span>
7
+ <%= content if content.present? %>
8
+ <% end %>
9
+ <% else %>
10
+ <span class="<%= component_classes %>" <%= "aria-current='page'" if active? %>>
11
+ <% if render_icon %>
12
+ <span class="bui-link-icon-wrapper"><%= render_icon %></span>
13
+ <% end %>
14
+ <span><%= label %></span>
15
+ <%= content if content.present? %>
16
+ </span>
17
+ <% end %>