better_ui 0.3.0 → 0.4.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.

Potentially problematic release.


This version of better_ui might be problematic. Click here for more details.

Files changed (178) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +1 -1
  3. data/README.md +174 -216
  4. data/app/assets/javascripts/better_ui/controllers/navbar_controller.js +138 -0
  5. data/app/assets/javascripts/better_ui/controllers/sidebar_controller.js +211 -0
  6. data/app/assets/javascripts/better_ui/controllers/toast_controller.js +161 -0
  7. data/app/assets/javascripts/better_ui/index.js +159 -0
  8. data/app/assets/javascripts/better_ui/toast_manager.js +77 -0
  9. data/app/assets/stylesheets/better_ui/application.css +30 -0
  10. data/app/components/better_ui/application/alert_component.html.erb +27 -0
  11. data/app/components/better_ui/application/alert_component.rb +196 -0
  12. data/app/components/better_ui/application/header_component.html.erb +88 -0
  13. data/app/components/better_ui/application/header_component.rb +188 -0
  14. data/app/components/better_ui/application/navbar_component.html.erb +294 -0
  15. data/app/components/better_ui/application/navbar_component.rb +249 -0
  16. data/app/components/better_ui/application/sidebar_component.html.erb +207 -0
  17. data/app/components/better_ui/application/sidebar_component.rb +318 -0
  18. data/app/components/better_ui/application/toast_component.html.erb +35 -0
  19. data/app/components/better_ui/application/toast_component.rb +188 -0
  20. data/app/components/better_ui/general/breadcrumb_component.html.erb +39 -0
  21. data/app/components/better_ui/general/breadcrumb_component.rb +132 -0
  22. data/app/components/better_ui/general/{button/component.html.erb → button_component.html.erb} +7 -7
  23. data/app/components/better_ui/general/button_component.rb +193 -0
  24. data/app/components/better_ui/general/heading_component.html.erb +25 -0
  25. data/app/components/better_ui/general/heading_component.rb +142 -0
  26. data/app/components/better_ui/general/icon_component.html.erb +2 -0
  27. data/app/components/better_ui/general/icon_component.rb +101 -0
  28. data/app/components/better_ui/general/panel_component.html.erb +27 -0
  29. data/app/components/better_ui/general/panel_component.rb +97 -0
  30. data/app/components/better_ui/general/table_component.html.erb +37 -0
  31. data/app/components/better_ui/general/table_component.rb +141 -0
  32. data/app/components/better_ui/theme_helper.rb +169 -0
  33. data/app/controllers/better_ui/application_controller.rb +1 -0
  34. data/app/controllers/better_ui/docs_controller.rb +34 -0
  35. data/app/helpers/better_ui_application_helper.rb +99 -0
  36. data/app/views/layouts/component_preview.html.erb +32 -0
  37. data/config/initializers/lookbook.rb +12 -12
  38. data/config/routes.rb +13 -0
  39. data/lib/better_ui/engine.rb +42 -5
  40. data/lib/better_ui/version.rb +1 -1
  41. data/lib/better_ui.rb +20 -4
  42. metadata +117 -157
  43. data/app/components/better_ui/application/card/component.html.erb +0 -20
  44. data/app/components/better_ui/application/card/component.rb +0 -214
  45. data/app/components/better_ui/application/main/component.html.erb +0 -9
  46. data/app/components/better_ui/application/main/component.rb +0 -123
  47. data/app/components/better_ui/application/navbar/component.html.erb +0 -92
  48. data/app/components/better_ui/application/navbar/component.rb +0 -136
  49. data/app/components/better_ui/application/sidebar/component.html.erb +0 -227
  50. data/app/components/better_ui/application/sidebar/component.rb +0 -130
  51. data/app/components/better_ui/general/accordion/component.html.erb +0 -5
  52. data/app/components/better_ui/general/accordion/component.rb +0 -92
  53. data/app/components/better_ui/general/accordion/item_component.html.erb +0 -12
  54. data/app/components/better_ui/general/accordion/item_component.rb +0 -176
  55. data/app/components/better_ui/general/alert/component.html.erb +0 -32
  56. data/app/components/better_ui/general/alert/component.rb +0 -242
  57. data/app/components/better_ui/general/avatar/component.html.erb +0 -20
  58. data/app/components/better_ui/general/avatar/component.rb +0 -301
  59. data/app/components/better_ui/general/badge/component.html.erb +0 -23
  60. data/app/components/better_ui/general/badge/component.rb +0 -248
  61. data/app/components/better_ui/general/breadcrumb/component.html.erb +0 -15
  62. data/app/components/better_ui/general/breadcrumb/component.rb +0 -187
  63. data/app/components/better_ui/general/button/component.rb +0 -214
  64. data/app/components/better_ui/general/divider/component.html.erb +0 -10
  65. data/app/components/better_ui/general/divider/component.rb +0 -226
  66. data/app/components/better_ui/general/dropdown/component.html.erb +0 -25
  67. data/app/components/better_ui/general/dropdown/component.rb +0 -170
  68. data/app/components/better_ui/general/dropdown/divider_component.html.erb +0 -1
  69. data/app/components/better_ui/general/dropdown/divider_component.rb +0 -41
  70. data/app/components/better_ui/general/dropdown/item_component.html.erb +0 -6
  71. data/app/components/better_ui/general/dropdown/item_component.rb +0 -119
  72. data/app/components/better_ui/general/field/component.html.erb +0 -27
  73. data/app/components/better_ui/general/field/component.rb +0 -37
  74. data/app/components/better_ui/general/heading/component.html.erb +0 -22
  75. data/app/components/better_ui/general/heading/component.rb +0 -257
  76. data/app/components/better_ui/general/icon/component.html.erb +0 -7
  77. data/app/components/better_ui/general/icon/component.rb +0 -239
  78. data/app/components/better_ui/general/input/checkbox/component.html.erb +0 -5
  79. data/app/components/better_ui/general/input/checkbox/component.rb +0 -238
  80. data/app/components/better_ui/general/input/datetime/component.html.erb +0 -5
  81. data/app/components/better_ui/general/input/datetime/component.rb +0 -223
  82. data/app/components/better_ui/general/input/radio/component.html.erb +0 -5
  83. data/app/components/better_ui/general/input/radio/component.rb +0 -230
  84. data/app/components/better_ui/general/input/select/component.html.erb +0 -16
  85. data/app/components/better_ui/general/input/select/component.rb +0 -184
  86. data/app/components/better_ui/general/input/select/select_component.html.erb +0 -5
  87. data/app/components/better_ui/general/input/select/select_component.rb +0 -37
  88. data/app/components/better_ui/general/input/text/component.html.erb +0 -5
  89. data/app/components/better_ui/general/input/text/component.rb +0 -171
  90. data/app/components/better_ui/general/input/textarea/component.html.erb +0 -5
  91. data/app/components/better_ui/general/input/textarea/component.rb +0 -166
  92. data/app/components/better_ui/general/link/component.html.erb +0 -18
  93. data/app/components/better_ui/general/link/component.rb +0 -258
  94. data/app/components/better_ui/general/modal/component.html.erb +0 -5
  95. data/app/components/better_ui/general/modal/component.rb +0 -47
  96. data/app/components/better_ui/general/modal/modal_component.html.erb +0 -52
  97. data/app/components/better_ui/general/modal/modal_component.rb +0 -160
  98. data/app/components/better_ui/general/pagination/component.html.erb +0 -85
  99. data/app/components/better_ui/general/pagination/component.rb +0 -216
  100. data/app/components/better_ui/general/panel/component.html.erb +0 -28
  101. data/app/components/better_ui/general/panel/component.rb +0 -249
  102. data/app/components/better_ui/general/progress/component.html.erb +0 -11
  103. data/app/components/better_ui/general/progress/component.rb +0 -160
  104. data/app/components/better_ui/general/spinner/component.html.erb +0 -35
  105. data/app/components/better_ui/general/spinner/component.rb +0 -93
  106. data/app/components/better_ui/general/table/component.html.erb +0 -5
  107. data/app/components/better_ui/general/table/component.rb +0 -217
  108. data/app/components/better_ui/general/table/tbody_component.html.erb +0 -3
  109. data/app/components/better_ui/general/table/tbody_component.rb +0 -30
  110. data/app/components/better_ui/general/table/td_component.html.erb +0 -3
  111. data/app/components/better_ui/general/table/td_component.rb +0 -44
  112. data/app/components/better_ui/general/table/tfoot_component.html.erb +0 -3
  113. data/app/components/better_ui/general/table/tfoot_component.rb +0 -28
  114. data/app/components/better_ui/general/table/th_component.html.erb +0 -6
  115. data/app/components/better_ui/general/table/th_component.rb +0 -51
  116. data/app/components/better_ui/general/table/thead_component.html.erb +0 -3
  117. data/app/components/better_ui/general/table/thead_component.rb +0 -28
  118. data/app/components/better_ui/general/table/tr_component.html.erb +0 -3
  119. data/app/components/better_ui/general/table/tr_component.rb +0 -30
  120. data/app/components/better_ui/general/tabs/component.html.erb +0 -11
  121. data/app/components/better_ui/general/tabs/component.rb +0 -120
  122. data/app/components/better_ui/general/tabs/panel_component.html.erb +0 -3
  123. data/app/components/better_ui/general/tabs/panel_component.rb +0 -37
  124. data/app/components/better_ui/general/tabs/tab_component.html.erb +0 -13
  125. data/app/components/better_ui/general/tabs/tab_component.rb +0 -111
  126. data/app/components/better_ui/general/tag/component.html.erb +0 -3
  127. data/app/components/better_ui/general/tag/component.rb +0 -104
  128. data/app/components/better_ui/general/tooltip/component.html.erb +0 -7
  129. data/app/components/better_ui/general/tooltip/component.rb +0 -239
  130. data/app/helpers/better_ui/application/components/card/card_helper.rb +0 -96
  131. data/app/helpers/better_ui/application/components/card.rb +0 -11
  132. data/app/helpers/better_ui/application/components/main/main_helper.rb +0 -64
  133. data/app/helpers/better_ui/application/components/navbar/navbar_helper.rb +0 -77
  134. data/app/helpers/better_ui/application/components/sidebar/sidebar_helper.rb +0 -51
  135. data/app/helpers/better_ui/application_helper.rb +0 -55
  136. data/app/helpers/better_ui/general/components/accordion/accordion_helper.rb +0 -73
  137. data/app/helpers/better_ui/general/components/accordion.rb +0 -11
  138. data/app/helpers/better_ui/general/components/alert/alert_helper.rb +0 -57
  139. data/app/helpers/better_ui/general/components/avatar/avatar_helper.rb +0 -29
  140. data/app/helpers/better_ui/general/components/badge/badge_helper.rb +0 -53
  141. data/app/helpers/better_ui/general/components/breadcrumb/breadcrumb_helper.rb +0 -37
  142. data/app/helpers/better_ui/general/components/button/button_helper.rb +0 -65
  143. data/app/helpers/better_ui/general/components/container/container_helper.rb +0 -60
  144. data/app/helpers/better_ui/general/components/divider/divider_helper.rb +0 -63
  145. data/app/helpers/better_ui/general/components/dropdown/divider_helper.rb +0 -32
  146. data/app/helpers/better_ui/general/components/dropdown/dropdown_helper.rb +0 -79
  147. data/app/helpers/better_ui/general/components/dropdown/item_helper.rb +0 -62
  148. data/app/helpers/better_ui/general/components/field/field_helper.rb +0 -26
  149. data/app/helpers/better_ui/general/components/heading/heading_helper.rb +0 -72
  150. data/app/helpers/better_ui/general/components/icon/icon_helper.rb +0 -16
  151. data/app/helpers/better_ui/general/components/input/checkbox/checkbox_helper.rb +0 -81
  152. data/app/helpers/better_ui/general/components/input/datetime/datetime_helper.rb +0 -91
  153. data/app/helpers/better_ui/general/components/input/radio/radio_helper.rb +0 -79
  154. data/app/helpers/better_ui/general/components/input/radio_group/radio_group_helper.rb +0 -124
  155. data/app/helpers/better_ui/general/components/input/select/select_helper.rb +0 -70
  156. data/app/helpers/better_ui/general/components/input/text/text_helper.rb +0 -138
  157. data/app/helpers/better_ui/general/components/input/textarea/textarea_helper.rb +0 -73
  158. data/app/helpers/better_ui/general/components/link/link_helper.rb +0 -89
  159. data/app/helpers/better_ui/general/components/modal/modal_helper.rb +0 -85
  160. data/app/helpers/better_ui/general/components/modal.rb +0 -11
  161. data/app/helpers/better_ui/general/components/pagination/pagination_helper.rb +0 -82
  162. data/app/helpers/better_ui/general/components/panel/panel_helper.rb +0 -83
  163. data/app/helpers/better_ui/general/components/progress/progress_helper.rb +0 -53
  164. data/app/helpers/better_ui/general/components/spinner/spinner_helper.rb +0 -19
  165. data/app/helpers/better_ui/general/components/table/table_helper.rb +0 -53
  166. data/app/helpers/better_ui/general/components/table/tbody_helper.rb +0 -13
  167. data/app/helpers/better_ui/general/components/table/td_helper.rb +0 -19
  168. data/app/helpers/better_ui/general/components/table/tfoot_helper.rb +0 -13
  169. data/app/helpers/better_ui/general/components/table/th_helper.rb +0 -19
  170. data/app/helpers/better_ui/general/components/table/thead_helper.rb +0 -13
  171. data/app/helpers/better_ui/general/components/table/tr_helper.rb +0 -13
  172. data/app/helpers/better_ui/general/components/tabs/panel_helper.rb +0 -62
  173. data/app/helpers/better_ui/general/components/tabs/tab_helper.rb +0 -55
  174. data/app/helpers/better_ui/general/components/tabs/tabs_helper.rb +0 -95
  175. data/app/helpers/better_ui/general/components/tag/tag_helper.rb +0 -26
  176. data/app/helpers/better_ui/general/components/tooltip/tooltip_helper.rb +0 -60
  177. data/app/views/layouts/better_ui/application.html.erb +0 -17
  178. data/lib/better_ui/railtie.rb +0 -20
@@ -0,0 +1,169 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BetterUi
4
+ module ThemeHelper
5
+ # Colori principali del tema
6
+ THEME_COLORS = {
7
+ # Neutrali
8
+ white: 'bg-white',
9
+ black: 'bg-black',
10
+
11
+ # Colori del tema
12
+ primary: {
13
+ light: 'bg-orange-100',
14
+ default: 'bg-orange-500',
15
+ dark: 'bg-orange-600',
16
+ text: 'text-white'
17
+ },
18
+ secondary: {
19
+ light: 'bg-gray-100',
20
+ default: 'bg-gray-200',
21
+ dark: 'bg-gray-300',
22
+ text: 'text-gray-800'
23
+ },
24
+ success: {
25
+ light: 'bg-green-100',
26
+ default: 'bg-green-500',
27
+ dark: 'bg-green-600',
28
+ text: 'text-white'
29
+ },
30
+ warning: {
31
+ light: 'bg-amber-100',
32
+ default: 'bg-amber-500',
33
+ dark: 'bg-amber-600',
34
+ text: 'text-white'
35
+ },
36
+ danger: {
37
+ light: 'bg-red-100',
38
+ default: 'bg-red-500',
39
+ dark: 'bg-red-600',
40
+ text: 'text-white'
41
+ },
42
+ info: {
43
+ light: 'bg-blue-100',
44
+ default: 'bg-blue-500',
45
+ dark: 'bg-blue-600',
46
+ text: 'text-white'
47
+ }
48
+ }
49
+
50
+ # Bordi del tema
51
+ THEME_BORDERS = {
52
+ primary: 'border-orange-200',
53
+ secondary: 'border-gray-200',
54
+ success: 'border-green-200',
55
+ warning: 'border-amber-200',
56
+ danger: 'border-red-200',
57
+ info: 'border-blue-200'
58
+ }
59
+
60
+ # Effetti hover
61
+ THEME_HOVER = {
62
+ primary: 'hover:bg-orange-600',
63
+ secondary: 'hover:bg-gray-300',
64
+ success: 'hover:bg-green-600',
65
+ warning: 'hover:bg-amber-600',
66
+ danger: 'hover:bg-red-600',
67
+ info: 'hover:bg-blue-600'
68
+ }
69
+
70
+ # Stili base comuni
71
+ COMMON_STYLES = {
72
+ rounded: 'rounded-md',
73
+ shadow: 'shadow-sm',
74
+ transitions: 'transition-all duration-200'
75
+ }
76
+
77
+ # Stili per elementi di layout
78
+ LAYOUT_STYLES = {
79
+ panel: {
80
+ base: 'rounded-lg border shadow-sm',
81
+ header: 'px-4 py-3 border-b',
82
+ body: 'p-4',
83
+ footer: 'px-4 py-3 border-t'
84
+ },
85
+ table: {
86
+ container: 'overflow-hidden rounded-md border shadow-sm',
87
+ header: 'bg-gray-50 text-left text-xs uppercase tracking-wider text-gray-500 font-medium',
88
+ row: {
89
+ base: '',
90
+ hover: 'hover:bg-gray-50',
91
+ striped: 'even:bg-white odd:bg-gray-50'
92
+ },
93
+ cell: 'px-4 py-3 text-sm text-gray-700'
94
+ }
95
+ }
96
+
97
+ # Genera classi per un componente basato su variante
98
+ def self.generate_component_classes(component_type, variant, options = {})
99
+ base_classes = []
100
+
101
+ case component_type
102
+ when :button
103
+ base_classes << 'inline-flex items-center justify-center'
104
+ base_classes << 'font-medium'
105
+ base_classes << COMMON_STYLES[:rounded]
106
+ base_classes << COMMON_STYLES[:transitions]
107
+
108
+ if options[:outline]
109
+ # Versione outline
110
+ base_classes << 'border-2'
111
+ base_classes << "border-#{variant}-500"
112
+ base_classes << "text-#{variant}-500"
113
+ base_classes << "hover:bg-#{variant}-50"
114
+ else
115
+ # Versione piena
116
+ base_classes << THEME_COLORS.dig(variant.to_sym, :default)&.sub('bg-', '') || "bg-#{variant}-500"
117
+ base_classes << THEME_COLORS.dig(variant.to_sym, :text) || 'text-white'
118
+ base_classes << THEME_HOVER[variant.to_sym] || "hover:bg-#{variant}-600"
119
+ end
120
+
121
+ # Dimensione
122
+ case options[:size]
123
+ when :sm
124
+ base_classes << 'px-2.5 py-1.5 text-xs'
125
+ when :lg
126
+ base_classes << 'px-6 py-3 text-base'
127
+ else # :md (default)
128
+ base_classes << 'px-4 py-2 text-sm'
129
+ end
130
+
131
+ # Disabilitato
132
+ if options[:disabled]
133
+ base_classes << 'opacity-50 cursor-not-allowed'
134
+ end
135
+
136
+ # Larghezza piena
137
+ if options[:full_width]
138
+ base_classes << 'w-full'
139
+ end
140
+
141
+ when :panel
142
+ base_classes << LAYOUT_STYLES[:panel][:base]
143
+
144
+ # Colore di sfondo in base alla variante
145
+ if variant.to_sym == :default
146
+ base_classes << 'bg-white'
147
+ base_classes << 'border-gray-200'
148
+ else
149
+ base_classes << THEME_COLORS.dig(variant.to_sym, :light)&.sub('bg-', '') || "bg-#{variant}-50"
150
+ base_classes << THEME_BORDERS[variant.to_sym] || "border-#{variant}-200"
151
+ end
152
+
153
+ when :table
154
+ base_classes << 'min-w-full bg-white'
155
+
156
+ # Bordi
157
+ if options[:bordered]
158
+ base_classes << 'border-collapse'
159
+ base_classes << (THEME_BORDERS[variant.to_sym] || 'border-gray-200')
160
+ end
161
+
162
+ # Classi personalizzate
163
+ base_classes << options[:classes] if options[:classes].present?
164
+ end
165
+
166
+ base_classes.compact.join(' ')
167
+ end
168
+ end
169
+ end
@@ -1,4 +1,5 @@
1
1
  module BetterUi
2
2
  class ApplicationController < ActionController::Base
3
+ layout 'better_ui/application'
3
4
  end
4
5
  end
@@ -0,0 +1,34 @@
1
+ module BetterUi
2
+ class DocsController < ApplicationController
3
+ def index
4
+ # Pagina principale della documentazione
5
+ end
6
+
7
+ def show
8
+ # Verifica se esiste una vista con il nome richiesto
9
+ page = params[:page]
10
+ valid_pages = %w[introduction installation customization components/buttons components/icons components/panel components/table]
11
+
12
+ if valid_pages.include?(page)
13
+ if page.start_with?('components/')
14
+ # Per i componenti, rendiamo esplicitamente il template nella directory corretta
15
+ component_name = page.split('/').last
16
+ render template: "better_ui/docs/components/#{component_name}"
17
+ else
18
+ render page
19
+ end
20
+ else
21
+ # Pagina non trovata
22
+ render plain: "Pagina non trovata", status: :not_found
23
+ end
24
+ end
25
+
26
+ def component
27
+ # Gestisce le rotte tipo /better_ui/docs/components/button
28
+ component_name = params[:component]
29
+ render template: "better_ui/docs/components/#{component_name}"
30
+ rescue ActionView::MissingTemplate
31
+ render plain: "Componente non trovato", status: :not_found
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,99 @@
1
+ module BetterUi
2
+ module ApplicationHelper
3
+ # Render markdown
4
+ def better_ui_markdown(text)
5
+ return '' if text.blank?
6
+
7
+ renderer = Redcarpet::Render::HTML.new(
8
+ filter_html: false,
9
+ hard_wrap: true,
10
+ link_attributes: { target: '_blank', rel: 'noopener noreferrer' }
11
+ )
12
+
13
+ markdown = Redcarpet::Markdown.new(
14
+ renderer,
15
+ autolink: true,
16
+ tables: true,
17
+ fenced_code_blocks: true,
18
+ strikethrough: true,
19
+ superscript: true,
20
+ underline: true,
21
+ highlight: true,
22
+ quote: true,
23
+ footnotes: true
24
+ )
25
+
26
+ rendered_html = markdown.render(text).html_safe
27
+
28
+ # Applica classi Tailwind agli elementi HTML generati dal markdown
29
+ rendered_html
30
+ .gsub(/<h1>/i, '<h1 class="text-3xl font-bold mb-6 pb-2 border-b border-gray-200">')
31
+ .gsub(/<h2>/i, '<h2 class="text-2xl font-semibold mt-8 mb-4 pb-2 border-b border-gray-100">')
32
+ .gsub(/<h3>/i, '<h3 class="text-xl font-medium mt-6 mb-3">')
33
+ .gsub(/<pre>/i, '<pre class="bg-gray-100 p-4 rounded-md overflow-x-auto my-4">')
34
+ .gsub(/<code>/i, '<code class="font-mono">')
35
+ .gsub(/<ul>/i, '<ul class="ml-6 mb-4">')
36
+ .gsub(/<ol>/i, '<ol class="ml-6 mb-4">')
37
+ .gsub(/<p>/i, '<p class="mb-4 leading-relaxed">')
38
+ .gsub(/<a /i, '<a class="text-blue-600 no-underline hover:underline" ')
39
+ .gsub(/<blockquote>/i, '<blockquote class="border-l-4 border-gray-200 pl-4 ml-0 text-gray-600">')
40
+ .html_safe
41
+ end
42
+
43
+ # Determina se il path corrente corrisponde a quello dato
44
+ def current_page?(path)
45
+ request.path == path
46
+ end
47
+
48
+ # Helper per i componenti General
49
+ def better_ui_general_button(label = nil, **options)
50
+ render BetterUi::General::ButtonComponent.new(label: label, **options)
51
+ end
52
+
53
+ def better_ui_general_panel(**options, &block)
54
+ render BetterUi::General::PanelComponent.new(**options), &block
55
+ end
56
+
57
+ def better_ui_general_table(**options)
58
+ render BetterUi::General::TableComponent.new(**options)
59
+ end
60
+
61
+ def better_ui_general_icon(name, **options)
62
+ render BetterUi::General::IconComponent.new(name: name, **options)
63
+ end
64
+
65
+ # Helper per i componenti Application
66
+ def better_ui_application_button(label = nil, **options)
67
+ render BetterUi::Application::ButtonComponent.new(label: label, **options)
68
+ end
69
+
70
+ def better_ui_application_panel(**options, &block)
71
+ render BetterUi::Application::PanelComponent.new(**options), &block
72
+ end
73
+
74
+ def better_ui_application_table(**options)
75
+ render BetterUi::Application::TableComponent.new(**options)
76
+ end
77
+
78
+ def better_ui_application_icon(name, **options)
79
+ render BetterUi::Application::IconComponent.new(name: name, **options)
80
+ end
81
+
82
+ # Helper per i componenti Website
83
+ def better_ui_website_button(label = nil, **options)
84
+ render BetterUi::Website::ButtonComponent.new(label: label, **options)
85
+ end
86
+
87
+ def better_ui_website_panel(**options, &block)
88
+ render BetterUi::Website::PanelComponent.new(**options), &block
89
+ end
90
+
91
+ def better_ui_website_table(**options)
92
+ render BetterUi::Website::TableComponent.new(**options)
93
+ end
94
+
95
+ def better_ui_website_icon(name, **options)
96
+ render BetterUi::Website::IconComponent.new(name: name, **options)
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,32 @@
1
+ <!DOCTYPE html>
2
+ <html style="background-color: <%= params.dig(:lookbook, :display, :bg_color) || "white" %>">
3
+ <head>
4
+ <title><%= content_for(:title) || "BetterUI" %></title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <meta name="apple-mobile-web-app-capable" content="yes">
7
+ <meta name="mobile-web-app-capable" content="yes">
8
+ <%= csrf_meta_tags %>
9
+ <%= csp_meta_tag %>
10
+
11
+ <%= yield :head %>
12
+
13
+ <link rel="icon" href="/icon.png" type="image/png">
14
+ <link rel="icon" href="/icon.svg" type="image/svg+xml">
15
+ <link rel="apple-touch-icon" href="/icon.png">
16
+
17
+ <%# Includes all stylesheet files in app/assets/stylesheets %>
18
+ <%= stylesheet_link_tag "tailwind", "inter-font", "data-turbo-track": "reload" %>
19
+ <%= stylesheet_link_tag "better_ui/application" %>
20
+ </head>
21
+
22
+ <body class="bg-white text-gray-800">
23
+ <main class="min-h-screen p-8 bg-yellow-500">
24
+ <div style="
25
+ margin-left: auto;
26
+ margin-right: auto;
27
+ max-width: <%= params.dig(:lookbook, :display, :max_width) || "100%" %>
28
+ ">
29
+ <%= yield %> <!-- rendered preview will be injected here -->
30
+ </main>
31
+ </body>
32
+ </html>
@@ -1,23 +1,23 @@
1
1
  if defined?(Lookbook)
2
2
  Lookbook.configure do |config|
3
3
  # Configura la directory delle preview dei componenti
4
- config.preview_paths << BetterUi::Engine.root.join("test/components/previews")
5
-
4
+ config.preview_paths << BetterUi::Engine.root.join('test/components/previews')
5
+
6
6
  # Configura il titolo della pagina Lookbook
7
- config.page_title = "BetterUI - Catalogo Componenti"
8
-
7
+ config.page_title = 'BetterUI - Catalogo Componenti'
8
+
9
9
  # Configura i tag principali
10
10
  config.preview_display_names = {
11
- "BetterUi::General" => "Componenti Generali",
12
- "BetterUi::Application" => "Componenti Applicazione",
13
- "BetterUi::Website" => "Componenti Sito Web"
11
+ 'BetterUi::General' => 'Componenti Generali',
12
+ 'BetterUi::Application' => 'Componenti Applicazione',
13
+ 'BetterUi::Website' => 'Componenti Sito Web'
14
14
  }
15
-
15
+
16
16
  # Per supportare i componenti ViewComponent
17
17
  config.listen_for_changes = {
18
- component: "app/components/**/*.rb",
19
- preview: "test/components/previews/**/*_preview.rb",
20
- template: "app/components/**/*.erb"
18
+ component: 'app/components/**/*.rb',
19
+ preview: 'test/components/previews/**/*_preview.rb',
20
+ template: 'app/components/**/*.erb'
21
21
  }
22
22
  end
23
- end
23
+ end
data/config/routes.rb CHANGED
@@ -1,2 +1,15 @@
1
1
  BetterUi::Engine.routes.draw do
2
+ # Route principale per la documentazione
3
+ root to: 'docs#index'
4
+
5
+ # Route per le pagine di documentazione generiche
6
+ get 'docs/:page', to: 'docs#show', as: :docs_page
7
+
8
+ # Route specifica per i componenti
9
+ get 'docs/components/:component', to: 'docs#component', as: :docs_component
10
+
11
+ # Montaggio di Lookbook per lo sviluppo e il test
12
+ if Rails.env.development? || Rails.env.test?
13
+ mount Lookbook::Engine, at: "/lookbook"
14
+ end
2
15
  end
@@ -1,14 +1,51 @@
1
+ require 'view_component'
2
+ require 'redcarpet'
3
+ require 'tailwindcss-rails'
4
+ require 'coderay'
5
+ require 'font-awesome-sass'
6
+
1
7
  module BetterUi
2
8
  class Engine < ::Rails::Engine
3
9
  isolate_namespace BetterUi
4
-
5
- initializer "better_ui.view_helpers" do
10
+
11
+ # Configurazione per rendere disponibili gli assets all'applicazione host
12
+ initializer 'better_ui.assets' do |app|
13
+ app.config.assets.paths << root.join('app', 'assets', 'stylesheets')
14
+ app.config.assets.paths << root.join('app', 'assets', 'images')
15
+ end
16
+
17
+ # Assicuriamo che gli helper siano correttamente caricati
18
+ config.autoload_paths << root.join('app', 'helpers')
19
+
20
+ # Configurazione per rendere disponibili i componenti all'applicazione host
21
+ initializer 'better_ui.view_helpers' do
22
+ require_relative '../../app/helpers/better_ui_application_helper'
23
+
6
24
  ActiveSupport.on_load :action_controller do
7
- helper BetterUi::ApplicationHelper if defined?(BetterUi::ApplicationHelper)
25
+ helper BetterUi::ApplicationHelper
8
26
  end
9
-
27
+
10
28
  ActiveSupport.on_load :action_view do
11
- include BetterUi::ApplicationHelper if defined?(BetterUi::ApplicationHelper)
29
+ include BetterUi::ApplicationHelper
30
+ end
31
+ end
32
+
33
+ # Configurazione per ViewComponent
34
+ config.view_component.preview_paths << root.join('test', 'components', 'previews')
35
+
36
+ # Configurazione per Lookbook in sviluppo e test
37
+ initializer 'better_ui.lookbook' do
38
+ if defined?(Lookbook) && (Rails.env.development? || Rails.env.test?)
39
+ # Carica esplicitamente le dipendenze per le funzionalità avanzate di Lookbook
40
+ begin
41
+ require 'listen'
42
+ require 'action_cable'
43
+ rescue LoadError => e
44
+ # Log che le dipendenze opzionali non sono disponibili
45
+ puts "NOTA: Alcune funzionalità avanzate di Lookbook potrebbero non essere disponibili: #{e.message}"
46
+ end
47
+
48
+ config.lookbook = Lookbook
12
49
  end
13
50
  end
14
51
  end
@@ -1,3 +1,3 @@
1
1
  module BetterUi
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
data/lib/better_ui.rb CHANGED
@@ -1,9 +1,25 @@
1
1
  require "better_ui/version"
2
2
  require "better_ui/engine"
3
- require "better_ui/railtie"
4
-
5
- require "font-awesome-sass"
6
3
 
7
4
  module BetterUi
8
- # Your code goes here...
5
+ class Configuration
6
+ attr_accessor :button_defaults, :alert_defaults, :card_defaults, :tabs_defaults
7
+
8
+ def initialize
9
+ @button_defaults = {}
10
+ @alert_defaults = {}
11
+ @card_defaults = {}
12
+ @tabs_defaults = {}
13
+ end
14
+ end
15
+
16
+ class << self
17
+ def configuration
18
+ @configuration ||= Configuration.new
19
+ end
20
+
21
+ def configure
22
+ yield(configuration) if block_given?
23
+ end
24
+ end
9
25
  end