fluxbit_view_components 0.2.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.
Files changed (173) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +10 -0
  3. data/app/assets/javascripts/fluxbit_view_components/assigner_controller.js +49 -0
  4. data/app/assets/javascripts/fluxbit_view_components/auto_submit_controller.js +39 -0
  5. data/app/assets/javascripts/fluxbit_view_components/drawer_controller.js +135 -0
  6. data/app/assets/javascripts/fluxbit_view_components/index.js +56 -0
  7. data/app/assets/javascripts/fluxbit_view_components/method_link_controller.js +143 -0
  8. data/app/assets/javascripts/fluxbit_view_components/modal_controller.js +118 -0
  9. data/app/assets/javascripts/fluxbit_view_components/password_controller.js +170 -0
  10. data/app/assets/javascripts/fluxbit_view_components/progress_controller.js +374 -0
  11. data/app/assets/javascripts/fluxbit_view_components/row_click_controller.js +32 -0
  12. data/app/assets/javascripts/fluxbit_view_components/select_all_controller.js +122 -0
  13. data/app/assets/javascripts/fluxbit_view_components/spinner_percent_controller.js +174 -0
  14. data/app/assets/javascripts/fluxbit_view_components/theme_button_controller.js +90 -0
  15. data/app/assets/javascripts/fluxbit_view_components.js +1175 -0
  16. data/app/components/fluxbit/accordion_component.rb +125 -0
  17. data/app/components/fluxbit/alert_component.rb +8 -8
  18. data/app/components/fluxbit/avatar_component.rb +11 -12
  19. data/app/components/fluxbit/avatar_group_component.rb +1 -1
  20. data/app/components/fluxbit/badge_component.rb +8 -7
  21. data/app/components/fluxbit/banner_component.rb +139 -0
  22. data/app/components/fluxbit/bottom_navigation_component.rb +437 -0
  23. data/app/components/fluxbit/breadcrumb_component.rb +66 -0
  24. data/app/components/fluxbit/button_component.rb +39 -11
  25. data/app/components/fluxbit/button_group_component.rb +1 -1
  26. data/app/components/fluxbit/card_component.rb +26 -23
  27. data/app/components/fluxbit/carousel_component.rb +154 -0
  28. data/app/components/fluxbit/component.rb +24 -3
  29. data/app/components/fluxbit/drawer_component.html.erb +30 -0
  30. data/app/components/fluxbit/drawer_component.rb +125 -0
  31. data/app/components/fluxbit/dropdown_component.rb +41 -0
  32. data/app/components/fluxbit/dropdown_item_component.rb +68 -0
  33. data/app/components/fluxbit/flex_component.rb +1 -1
  34. data/app/components/fluxbit/form/check_box_component.rb +56 -0
  35. data/app/components/fluxbit/form/component.rb +27 -26
  36. data/app/components/fluxbit/form/dropzone_component.html.erb +39 -0
  37. data/app/components/fluxbit/form/dropzone_component.rb +39 -0
  38. data/app/components/fluxbit/form/field_component.rb +28 -0
  39. data/app/components/fluxbit/form/form_builder_component.rb +1 -1
  40. data/app/components/fluxbit/form/{helper_text_component.rb → help_text_component.rb} +9 -4
  41. data/app/components/fluxbit/form/label_component.rb +40 -30
  42. data/app/components/fluxbit/form/password_component.rb +247 -0
  43. data/app/components/fluxbit/form/radio_group_button_component.rb +126 -0
  44. data/app/components/fluxbit/form/range_component.rb +52 -0
  45. data/app/components/fluxbit/form/select_component.rb +185 -0
  46. data/app/components/fluxbit/form/text_field_component.rb +185 -0
  47. data/app/components/fluxbit/form/toggle_component.html.erb +23 -0
  48. data/app/components/fluxbit/form/toggle_component.rb +81 -0
  49. data/app/components/fluxbit/form/upload_image_component.html.erb +50 -0
  50. data/app/components/fluxbit/form/upload_image_component.rb +61 -0
  51. data/app/components/fluxbit/gravatar_component.rb +7 -0
  52. data/app/components/fluxbit/icon_helpers.rb +167 -0
  53. data/app/components/fluxbit/link_component.rb +42 -0
  54. data/app/components/fluxbit/modal_component.rb +28 -31
  55. data/app/components/fluxbit/pagination_component.rb +206 -0
  56. data/app/components/fluxbit/popover_component.rb +14 -14
  57. data/app/components/fluxbit/progress_component.rb +196 -0
  58. data/app/components/fluxbit/skeleton_component.rb +237 -0
  59. data/app/components/fluxbit/speed_dial_action_component.html.erb +30 -0
  60. data/app/components/fluxbit/speed_dial_action_component.rb +59 -0
  61. data/app/components/fluxbit/speed_dial_component.html.erb +33 -0
  62. data/app/components/fluxbit/speed_dial_component.rb +73 -0
  63. data/app/components/fluxbit/spinner_component.rb +71 -0
  64. data/app/components/fluxbit/spinner_percent_component.rb +174 -0
  65. data/app/components/fluxbit/stepper_component.rb +223 -0
  66. data/app/components/fluxbit/tab_component.rb +44 -25
  67. data/app/components/fluxbit/table_component.rb +186 -0
  68. data/app/components/fluxbit/table_group_component.rb +28 -0
  69. data/app/components/fluxbit/theme_button_component.rb +64 -0
  70. data/app/components/fluxbit/timeline_component.rb +63 -0
  71. data/app/components/fluxbit/timeline_item_component.html.erb +64 -0
  72. data/app/components/fluxbit/timeline_item_component.rb +78 -0
  73. data/app/components/fluxbit/tooltip_component.rb +2 -2
  74. data/app/helpers/fluxbit/components_helper.rb +93 -51
  75. data/app/helpers/fluxbit/form_builder.rb +136 -0
  76. data/app/helpers/fluxbit/view_helper.rb +71 -0
  77. data/config/locales/en.yml +37 -4
  78. data/config/locales/pt-BR.yml +36 -0
  79. data/lib/fluxbit/config/accordion_component.rb +73 -0
  80. data/lib/fluxbit/config/avatar_component.rb +11 -11
  81. data/lib/fluxbit/config/badge_component.rb +14 -11
  82. data/lib/fluxbit/config/banner_component.rb +60 -0
  83. data/lib/fluxbit/config/bottom_navigation_component.rb +74 -0
  84. data/lib/fluxbit/config/breadcrumb_component.rb +24 -0
  85. data/lib/fluxbit/config/button_component.rb +6 -4
  86. data/lib/fluxbit/config/card_component.rb +23 -12
  87. data/lib/fluxbit/config/carousel_component.rb +33 -0
  88. data/lib/fluxbit/config/drawer_component.rb +48 -0
  89. data/lib/fluxbit/config/dropdown_component.rb +29 -0
  90. data/lib/fluxbit/config/form/check_box_component.rb +19 -0
  91. data/lib/fluxbit/config/form/dropzone_component.rb +20 -0
  92. data/lib/fluxbit/config/form/{helper_text_component.rb → help_text_component.rb} +2 -2
  93. data/lib/fluxbit/config/form/label_component.rb +31 -0
  94. data/lib/fluxbit/config/form/password_component.rb +19 -0
  95. data/lib/fluxbit/config/form/radio_group_button_component.rb +24 -0
  96. data/lib/fluxbit/config/form/range_component.rb +15 -0
  97. data/lib/fluxbit/config/form/text_field_component.rb +76 -0
  98. data/lib/fluxbit/config/form/toggle_component.rb +79 -0
  99. data/lib/fluxbit/config/link_component.rb +24 -0
  100. data/lib/fluxbit/config/modal_component.rb +1 -1
  101. data/lib/fluxbit/config/pagination_component.rb +31 -0
  102. data/lib/fluxbit/config/popover_component.rb +1 -1
  103. data/lib/fluxbit/config/progress_component.rb +63 -0
  104. data/lib/fluxbit/config/skeleton_component.rb +82 -0
  105. data/lib/fluxbit/config/speed_dial_component.rb +50 -0
  106. data/lib/fluxbit/config/spinner_component.rb +30 -0
  107. data/lib/fluxbit/config/spinner_percent_component.rb +61 -0
  108. data/lib/fluxbit/config/stepper_component.rb +299 -0
  109. data/lib/fluxbit/config/tab_component.rb +6 -0
  110. data/lib/fluxbit/config/table_component.rb +75 -0
  111. data/lib/fluxbit/config/theme_button_component.rb +19 -0
  112. data/lib/fluxbit/config/timeline_component.rb +77 -0
  113. data/lib/fluxbit/view_components/engine.rb +11 -3
  114. data/lib/fluxbit/view_components/version.rb +1 -1
  115. data/lib/fluxbit/view_components.rb +27 -1
  116. data/lib/generators/fluxbit/devise_views_generator.rb +116 -0
  117. data/lib/generators/fluxbit/pagy_generator.rb +39 -0
  118. data/lib/generators/fluxbit/scaffold_generator.rb +165 -0
  119. data/lib/generators/fluxbit/templates/_alert.html.erb.tt +1 -0
  120. data/lib/generators/fluxbit/templates/_flash.html.erb.tt +15 -0
  121. data/lib/generators/fluxbit/templates/_form.html.erb.tt +38 -0
  122. data/lib/generators/fluxbit/templates/_metadata.html.erb.tt +44 -0
  123. data/lib/generators/fluxbit/templates/controller.rb.tt +406 -0
  124. data/lib/generators/fluxbit/templates/create.turbo_stream.erb.tt +7 -0
  125. data/lib/generators/fluxbit/templates/destroy.turbo_stream.erb.tt +3 -0
  126. data/lib/generators/fluxbit/templates/destroy_all.turbo_stream.erb.tt +9 -0
  127. data/lib/generators/fluxbit/templates/devise_views/confirmations/new.html.erb +11 -0
  128. data/lib/generators/fluxbit/templates/devise_views/layouts/devise.html.erb +64 -0
  129. data/lib/generators/fluxbit/templates/devise_views/mailer/confirmation_instructions.html.erb +5 -0
  130. data/lib/generators/fluxbit/templates/devise_views/mailer/email_changed.html.erb +7 -0
  131. data/lib/generators/fluxbit/templates/devise_views/mailer/password_changed.html.erb +3 -0
  132. data/lib/generators/fluxbit/templates/devise_views/mailer/reset_password_instructions.html.erb +8 -0
  133. data/lib/generators/fluxbit/templates/devise_views/mailer/unlock_instructions.html.erb +7 -0
  134. data/lib/generators/fluxbit/templates/devise_views/passwords/edit.html.erb +29 -0
  135. data/lib/generators/fluxbit/templates/devise_views/passwords/new.html.erb +11 -0
  136. data/lib/generators/fluxbit/templates/devise_views/registrations/edit.html.erb +43 -0
  137. data/lib/generators/fluxbit/templates/devise_views/registrations/new.html.erb +34 -0
  138. data/lib/generators/fluxbit/templates/devise_views/sessions/new.html.erb +15 -0
  139. data/lib/generators/fluxbit/templates/devise_views/shared/_error_messages.html.erb +14 -0
  140. data/lib/generators/fluxbit/templates/devise_views/shared/_links.html.erb +25 -0
  141. data/lib/generators/fluxbit/templates/devise_views/unlocks/new.html.erb +11 -0
  142. data/lib/generators/fluxbit/templates/edit.html.erb.tt +47 -0
  143. data/lib/generators/fluxbit/templates/fluxbit_pagy.css +27 -0
  144. data/lib/generators/fluxbit/templates/i18n.en.yml.tt +121 -0
  145. data/lib/generators/fluxbit/templates/i18n.pt-BR.yml.tt +121 -0
  146. data/lib/generators/fluxbit/templates/index.html.erb.tt +254 -0
  147. data/lib/generators/fluxbit/templates/index.json.jbuilder.tt +33 -0
  148. data/lib/generators/fluxbit/templates/new.html.erb.tt +47 -0
  149. data/lib/generators/fluxbit/templates/partial.html.erb.tt +61 -0
  150. data/lib/generators/fluxbit/templates/policy.rb.tt +36 -0
  151. data/lib/generators/fluxbit/templates/send_alert_via_drawer.erb.tt +10 -0
  152. data/lib/generators/fluxbit/templates/show.html.erb.tt +44 -0
  153. data/lib/generators/fluxbit/templates/show.json.jbuilder.tt +6 -0
  154. data/lib/generators/fluxbit/templates/update.turbo_stream.erb.tt +10 -0
  155. data/lib/generators/fluxbit/templates/update_all.turbo_stream.erb.tt +20 -0
  156. data/lib/install/install.rb +61 -3
  157. metadata +127 -35
  158. data/LICENSE.txt +0 -20
  159. data/app/components/fluxbit/form/checkbox_input_component.rb +0 -61
  160. data/app/components/fluxbit/form/datepicker_component.rb +0 -7
  161. data/app/components/fluxbit/form/radio_input_component.rb +0 -21
  162. data/app/components/fluxbit/form/range_input_component.rb +0 -51
  163. data/app/components/fluxbit/form/select_free_input_component.rb +0 -77
  164. data/app/components/fluxbit/form/select_input_component.rb +0 -21
  165. data/app/components/fluxbit/form/spacer_input_component.rb +0 -12
  166. data/app/components/fluxbit/form/text_input_component.rb +0 -225
  167. data/app/components/fluxbit/form/textarea_input_component.rb +0 -57
  168. data/app/components/fluxbit/form/toggle_input_component.rb +0 -166
  169. data/app/components/fluxbit/form/upload_image_input_component.html.erb +0 -48
  170. data/app/components/fluxbit/form/upload_image_input_component.rb +0 -61
  171. data/app/components/fluxbit/form/upload_input_component.html.erb +0 -12
  172. data/app/components/fluxbit/form/upload_input_component.rb +0 -47
  173. data/app/helpers/fluxbit/classes_helper.rb +0 -9
@@ -12,19 +12,30 @@ module Fluxbit::Config::CardComponent
12
12
  # rubocop: disable Layout/LineLength, Metrics/BlockLength
13
13
  mattr_accessor :styles do
14
14
  {
15
- base: "flex rounded-lg border border-gray-200 bg-white shadow-md dark:border-gray-700 dark:bg-gray-800",
16
- children: "flex h-full flex-col justify-center gap-4 p-6",
17
- horizontal: {
18
- off: "flex-col",
19
- on: "flex-col md:max-w-xl md:flex-row"
15
+ base: "",
16
+ base_image_left: "flex flex-row",
17
+ border: "border border-gray-200 dark:border-gray-700",
18
+ shadow: "shadow-sm",
19
+ rounded: "rounded-lg",
20
+ hoverable: "transition-shadow hover:shadow-lg",
21
+ clickable: {
22
+ default: "cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-700",
23
+ primary: "cursor-pointer hover:bg-blue-100 dark:hover:bg-blue-800",
24
+ success: "cursor-pointer hover:bg-green-100 dark:hover:bg-green-800",
25
+ danger: "cursor-pointer hover:bg-red-100 dark:hover:bg-red-800"
20
26
  },
21
- href: "hover:bg-gray-100 dark:hover:bg-gray-700",
22
- img: {
23
- base: "",
24
- horizontal: {
25
- off: "rounded-t-lg",
26
- on: "h-96 w-full rounded-t-lg object-cover md:h-auto md:w-48 md:rounded-none md:rounded-l-lg"
27
- }
27
+ # "flex flex-col items-center bg-white border border-gray-200 rounded-lg shadow-sm md:flex-row md:max-w-xl dark:border-gray-700"
28
+ header: "px-4 py-2 font-semibold text-gray-900 dark:text-gray-100",
29
+ body: "px-4 py-2 space-y-4",
30
+ footer: "px-4 py-2 text-sm text-gray-500 dark:text-gray-400",
31
+ image_top: "w-full",
32
+ image_left: "object-cover w-full rounded-t-lg h-96 md:h-auto md:w-48 md:rounded-none md:rounded-s-lg",
33
+ content_left: "px-4 py-2",
34
+ colors: {
35
+ default: "bg-white dark:bg-gray-800 text-gray-900 dark:text-gray-100",
36
+ primary: "bg-blue-50 text-blue-900 border-blue-200 dark:bg-blue-900 dark:text-white dark:border-blue-800",
37
+ success: "bg-green-50 text-green-900 border-green-200 dark:bg-green-900 dark:text-white dark:border-green-800",
38
+ danger: "bg-red-50 text-red-900 border-red-200 dark:bg-red-900 dark:text-white dark:border-red-800"
28
39
  }
29
40
  }
30
41
  end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fluxbit::Config::CarouselComponent
4
+ mattr_accessor :slide, default: true
5
+ mattr_accessor :slide_interval, default: 3000
6
+ mattr_accessor :indicators, default: true
7
+ mattr_accessor :controls, default: true
8
+
9
+ # rubocop:disable Layout/LineLength
10
+ mattr_accessor :styles do
11
+ {
12
+ base: "relative w-full",
13
+ slides_container: "relative h-56 overflow-hidden rounded-lg md:h-96",
14
+ slide: {
15
+ base: "duration-700 ease-in-out",
16
+ inactive: "hidden"
17
+ },
18
+ indicators: {
19
+ container: "absolute z-30 flex -translate-x-1/2 bottom-5 left-1/2 space-x-3 rtl:space-x-reverse",
20
+ button: "w-3 h-3 rounded-full bg-white/50 hover:bg-white dark:bg-gray-800/50 dark:hover:bg-gray-800"
21
+ },
22
+ controls: {
23
+ button: "absolute top-0 z-30 flex items-center justify-center h-full px-4 cursor-pointer group focus:outline-none",
24
+ previous: "start-0",
25
+ next: "end-0",
26
+ icon_wrapper: "inline-flex items-center justify-center w-10 h-10 rounded-full bg-white/30 dark:bg-gray-800/30 group-hover:bg-white/50 dark:group-hover:bg-gray-800/60 group-focus:ring-4 group-focus:ring-white dark:group-focus:ring-gray-800/70 group-focus:outline-none",
27
+ icon: "w-4 h-4 text-white dark:text-gray-800 rtl:rotate-180",
28
+ sr_only: "sr-only"
29
+ }
30
+ }
31
+ end
32
+ # rubocop:enable Layout/LineLength
33
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fluxbit::Config::DrawerComponent
4
+ mattr_accessor :placement, default: :left
5
+ mattr_accessor :sizing, default: :sm
6
+ mattr_accessor :show_close_button, default: true
7
+ mattr_accessor :swipeable, default: false
8
+ mattr_accessor :shadow, default: true
9
+ mattr_accessor :backdrop, default: true
10
+ mattr_accessor :auto_show, default: false
11
+ mattr_accessor :body_scrolling, default: false
12
+
13
+ # rubocop: disable Layout/LineLength, Metrics/BlockLength
14
+ mattr_accessor :styles do
15
+ {
16
+ root: "fixed z-40 p-4",
17
+ color: "bg-white dark:bg-gray-800",
18
+ shadow: "shadow-lg dark:shadow-gray-900/50",
19
+ placements: {
20
+ left: "top-0 left-0 h-screen overflow-y-auto transition-transform -translate-x-full",
21
+ right: "top-0 right-0 h-screen overflow-y-auto transition-transform translate-x-full",
22
+ top: "top-0 left-0 right-0 w-full transition-transform -translate-y-full",
23
+ bottom: "bottom-0 left-0 right-0 w-full overflow-y-auto transition-transform transform-none"
24
+ },
25
+ sizes: {
26
+ horizontal: {
27
+ sm: "w-64",
28
+ md: "w-80",
29
+ lg: "w-96",
30
+ xl: "w-128",
31
+ full: "w-full"
32
+ },
33
+ vertical: {
34
+ sm: "h-64",
35
+ md: "h-80",
36
+ lg: "h-96",
37
+ xl: "h-128",
38
+ full: "h-full"
39
+ }
40
+ },
41
+ swipeable: {
42
+ default: "border-t border-gray-200 rounded-t-lg dark:border-gray-700 translate-y-full bottom-[-60px]",
43
+ swipe: "bottom-[60px]"
44
+ }
45
+ }
46
+ end
47
+ # rubocop: enable Layout/LineLength, Metrics/BlockLength
48
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fluxbit::Config::DropdownComponent
4
+ # mattr_accessor :placement, default: :left
5
+ mattr_accessor :sizing, default: 0
6
+ mattr_accessor :auto_divider, default: true
7
+ mattr_accessor :height, default: 0
8
+
9
+ # rubocop: disable Layout/LineLength, Metrics/BlockLength
10
+ mattr_accessor :styles do
11
+ {
12
+ base: "z-10 hidden bg-white rounded-lg shadow-sm dark:bg-gray-700",
13
+ ul: "py-1 text-sm text-gray-700 dark:text-gray-200",
14
+ auto_divider: "divide-y divide-gray-200 dark:divide-gray-600",
15
+ divider: "border-t border-gray-200 dark:border-gray-600",
16
+ icon: "mr-2 h-4 w-4",
17
+ sizes: [ "w-44", "w-60", "w-72", "w-80" ],
18
+ items: {
19
+ types: {
20
+ div: "py-2 overflow-y-auto text-gray-700 dark:text-gray-200",
21
+ button: "flex items-center justify-between w-full px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white",
22
+ li: "text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-600"
23
+ },
24
+ heights: [ "", "h-48", "h-60", "h-72", "h-80" ]
25
+ }
26
+ }
27
+ end
28
+ # rubocop: enable Layout/LineLength, Metrics/BlockLength
29
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fluxbit::Config::Form::CheckBoxComponent
4
+ # rubocop: disable Layout/LineLength, Metrics/BlockLength
5
+ mattr_accessor :styles do
6
+ {
7
+ checkbox: "rounded-sm",
8
+ base: "size-4 text-blue-600 bg-slate-100 border-gray-300 focus:ring-blue-500 dark:focus:ring-blue-600 dark:ring-offset-gray-800 focus:ring-2 dark:bg-slate-700 dark:border-slate-600",
9
+ label: {
10
+ with_helper: "font-medium text-slate-900 dark:text-slate-300",
11
+ base: "ml-2 text-sm font-medium text-slate-900 dark:text-slate-300"
12
+ },
13
+ input_div: "flex items-center h-5",
14
+ helper_div: "ml-2 text-sm",
15
+ no_helper_div: "flex items-center"
16
+ }
17
+ end
18
+ # rubocop: enable Layout/LineLength, Metrics/BlockLength
19
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fluxbit::Config::Form::DropzoneComponent
4
+ mattr_accessor :icon, default: "heroicons_outline:cloud-arrow-up"
5
+ mattr_accessor :height, default: 0
6
+
7
+ # rubocop: disable Layout/LineLength, Metrics/BlockLength
8
+ mattr_accessor :styles do
9
+ {
10
+ base: "flex items-center justify-center w-full",
11
+ label: "flex flex-col items-center justify-center w-full border-2 border-slate-300 border-dashed rounded-lg cursor-pointer bg-slate-50 dark:hover:bg-bray-800 dark:bg-slate-700 hover:bg-slate-100 dark:border-slate-600 dark:hover:border-slate-500 dark:hover:bg-slate-600",
12
+ inner_div: "flex flex-col items-center justify-center pt-5 pb-6",
13
+ title: "mb-2 text-sm text-slate-500 dark:text-slate-400",
14
+ subtitle: "text-xs text-slate-500 dark:text-slate-400",
15
+ icon: "size-10 mb-4 text-slate-500 dark:text-slate-400",
16
+ height: [ "", "h-32", "h-64", "h-96" ]
17
+ }
18
+ end
19
+ # rubocop: enable Layout/LineLength, Metrics/BlockLength
20
+ end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Fluxbit::Config::Form::HelperTextComponent
3
+ module Fluxbit::Config::Form::HelpTextComponent
4
4
  mattr_accessor :color, default: :default
5
5
 
6
6
  # rubocop: disable Layout/LineLength, Metrics/BlockLength
@@ -10,7 +10,7 @@ module Fluxbit::Config::Form::HelperTextComponent
10
10
  colors: {
11
11
  default: "text-gray-500 dark:text-gray-400",
12
12
  success: "text-green-600 dark:text-green-500",
13
- failure: "text-red-600 dark:text-red-500",
13
+ danger: "text-red-600 dark:text-red-500",
14
14
  info: "text-cyan-600 dark:text-cyan-500",
15
15
  warning: "text-yellow-600 dark:text-yellow-500"
16
16
  }
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fluxbit::Config::Form::LabelComponent
4
+ mattr_accessor :color, default: :default
5
+ mattr_accessor :helper_popover_icon, default: "heroicons_solid:question-mark-circle"
6
+ mattr_accessor :helper_popover_icon_class, default: "size-4"
7
+ mattr_accessor :sizing, default: 1
8
+ mattr_accessor :helper_popover_placement, default: "right"
9
+
10
+ # rubocop: disable Layout/LineLength, Metrics/BlockLength
11
+ mattr_accessor :styles do
12
+ {
13
+ base: "flex font-medium",
14
+ colors: {
15
+ default: "text-gray-900 dark:text-white",
16
+ success: "text-green-700 dark:text-green-500",
17
+ danger: "text-red-700 dark:text-red-500",
18
+ info: "text-cyan-500 dark:text-cyan-600",
19
+ warning: "text-yellow-500 dark:text-yellow-600"
20
+ },
21
+ sizes: [
22
+ "text-sm",
23
+ "text-md",
24
+ "text-lg"
25
+ ],
26
+ required: "text-red-500 px-1 required",
27
+ helper_popover: "px-2 text-slate-400"
28
+ }
29
+ end
30
+ # rubocop: enable Layout/LineLength, Metrics/BlockLength
31
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fluxbit::Config::Form::PasswordComponent
4
+ # rubocop: disable Layout/LineLength, Metrics/BlockLength
5
+ mattr_accessor :styles do
6
+ {
7
+ strength_wrapper: "mt-2 space-y-2",
8
+ strength_bar_wrapper: "space-y-1",
9
+ strength_bar_label: "text-sm font-medium text-slate-700 dark:text-slate-300",
10
+ strength_bar_container: "w-full bg-slate-200 rounded-full h-2 dark:bg-slate-700",
11
+ strength_bar: "h-2 rounded-full transition-all duration-300 bg-slate-300 dark:bg-slate-600",
12
+ checks_list: "space-y-1",
13
+ check_item: "flex items-center gap-2 text-sm text-slate-600 dark:text-slate-400",
14
+ check_icon: "flex-shrink-0 text-red-500 dark:text-red-400",
15
+ check_label: ""
16
+ }
17
+ end
18
+ # rubocop: enable Layout/LineLength, Metrics/BlockLength
19
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fluxbit::Config::Form::RadioGroupButtonComponent
4
+ mattr_accessor :color, default: :default
5
+ mattr_accessor :size, default: 1
6
+
7
+ # rubocop: disable Layout/LineLength, Metrics/BlockLength
8
+ mattr_accessor :styles do
9
+ {
10
+ group: "inline-flex rounded-md shadow-xs",
11
+ input: "sr-only peer",
12
+ label: {
13
+ base: "group flex items-center justify-center text-center font-medium relative focus:z-10 focus:outline-hidden cursor-pointer",
14
+ selected: "brightness-90 dark:brightness-75",
15
+ position: {
16
+ start: "rounded-r-none",
17
+ middle: "rounded-none",
18
+ end: "rounded-l-none"
19
+ }
20
+ }
21
+ }
22
+ end
23
+ # rubocop: enable Layout/LineLength, Metrics/BlockLength
24
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fluxbit::Config::Form::RangeComponent
4
+ mattr_accessor :vertical, default: false
5
+ mattr_accessor :sizing, default: 1
6
+
7
+ # rubocop: disable Layout/LineLength, Metrics/BlockLength
8
+ mattr_accessor :styles do
9
+ {
10
+ base: "w-full bg-slate-200 rounded-lg appearance-none cursor-pointer dark:bg-slate-700",
11
+ sizes: [ "h-1 range-sm", "h-2", "h-3 range-lg" ]
12
+ }
13
+ end
14
+ # rubocop: enable Layout/LineLength, Metrics/BlockLength
15
+ end
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fluxbit::Config::Form::TextFieldComponent
4
+ mattr_accessor :color, default: :default
5
+ mattr_accessor :sizing, default: 0
6
+
7
+ # rubocop: disable Layout/LineLength, Metrics/BlockLength
8
+ mattr_accessor :styles do
9
+ {
10
+ default: "mt-1 block w-full border disabled:cursor-not-allowed disabled:opacity-50 disabled:text-slate-900 disabled:dark:text-slate-400 disabled:bg-slate-100 disabled:dark:bg-slate-700",
11
+ text: {
12
+ default: "text-slate-900 dark:text-white",
13
+ success: "text-green-900",
14
+ danger: "text-red-900",
15
+ info: "text-cyan-900",
16
+ warning: "text-yellow-900"
17
+ },
18
+ ring: {
19
+ default: "focus:ring-blue-500 dark:focus:ring-blue-500",
20
+ success: "focus:ring-green-500",
21
+ danger: "focus:ring-red-500",
22
+ info: "focus:ring-cyan-500",
23
+ warning: "focus:ring-yellow-500"
24
+ },
25
+ bg: {
26
+ default: "bg-slate-50 dark:bg-slate-700",
27
+ success: "bg-green-50 dark:bg-green-100",
28
+ danger: "bg-red-50 dark:bg-red-100",
29
+ info: "bg-cyan-50 dark:bg-cyan-100",
30
+ warning: "bg-yellow-50 dark:bg-yellow-100"
31
+ },
32
+ placeholder: {
33
+ default: "dark:placeholder-slate-400",
34
+ success: "placeholder-green-700",
35
+ danger: "placeholder-red-700",
36
+ info: "placeholder-cyan-700",
37
+ warning: "placeholder-yellow-700"
38
+ },
39
+ border: {
40
+ default: "border-slate-300 focus:border-blue-500 dark:border-slate-600 dark:focus:border-blue-500",
41
+ success: "border-green-500 focus:border-green-500 dark:border-green-400",
42
+ danger: "border-red-500 focus:border-red-500 dark:border-red-400",
43
+ info: "border-cyan-500 focus:border-cyan-500 dark:border-cyan-400",
44
+ warning: "border-yellow-500 focus:border-yellow-500 dark:border-yellow-400"
45
+ },
46
+ shadow: "shadow-xs dark:shadow-xs-light",
47
+ icon: "pl-10",
48
+ right_icon: "pr-10",
49
+ sizing_md_addon: "p-2.5 rounded-none rounded-r-lg flex-1 min-w-0 text-sm",
50
+ sizes: [
51
+ "p-2.5 text-sm rounded-lg",
52
+ "p-4 sm:text-md rounded-lg",
53
+ "p-2 rounded-lg sm:text-xs"
54
+ ],
55
+ additional_icons: {
56
+ class: {
57
+ default: "mt-1 size-4 text-slate-500 dark:text-slate-400",
58
+ success: "mt-1 size-4 text-green-500 dark:text-green-400",
59
+ danger: "mt-1 size-4 text-red-500 dark:text-red-400",
60
+ info: "mt-1 size-4 text-cyan-500 dark:text-cyan-400",
61
+ warning: "mt-1 size-4 text-yellow-500 dark:text-yellow-400"
62
+ },
63
+ icon: "absolute inset-y-0 left-0 flex items-center pl-3",
64
+ right_icon: "absolute inset-y-0 right-0 flex items-center pr-3",
65
+ addon: {
66
+ default: "mt-1 inline-flex items-center px-3 text-sm text-slate-900 bg-slate-200 border border-r-0 border-slate-300 rounded-l-md dark:bg-slate-600 dark:text-slate-400 dark:border-slate-600",
67
+ success: "mt-1 inline-flex items-center px-3 text-sm text-green-900 bg-green-200 border border-r-0 border-green-300 rounded-l-md dark:bg-green-600 dark:text-green-400 dark:border-green-600",
68
+ danger: "mt-1 inline-flex items-center px-3 text-sm text-red-900 bg-red-200 border border-r-0 border-red-300 rounded-l-md dark:bg-red-600 dark:text-red-400 dark:border-red-600",
69
+ info: "mt-1 inline-flex items-center px-3 text-sm text-cyan-900 bg-cyan-200 border border-r-0 border-cyan-300 rounded-l-md dark:bg-cyan-600 dark:text-cyan-400 dark:border-cyan-600",
70
+ warning: "mt-1 inline-flex items-center px-3 text-sm text-yellow-900 bg-yellow-200 border border-r-0 border-yellow-300 rounded-l-md dark:bg-yellow-600 dark:text-yellow-400 dark:border-yellow-600"
71
+ }
72
+ }
73
+ }
74
+ end
75
+ # rubocop: enable Layout/LineLength, Metrics/BlockLength
76
+ end
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fluxbit::Config::Form::ToggleComponent
4
+ mattr_accessor :color, default: :default
5
+ mattr_accessor :unchecked_color, default: :default
6
+ mattr_accessor :button_color, default: :default
7
+ mattr_accessor :invert_label, default: false
8
+ mattr_accessor :sizing, default: 1
9
+
10
+ # rubocop: disable Layout/LineLength, Metrics/BlockLength
11
+ mattr_accessor :styles do
12
+ {
13
+ label: "text-sm rtl:text-right font-medium text-gray-700 dark:text-gray-200 flex items-center",
14
+ input: "size-4 bg-gray-100 border-gray-300 dark:ring-offset-gray-800 focus:ring-2 rounded-sm dark:bg-gray-700 dark:border-gray-600 sr-only peer",
15
+ toggle: {
16
+ base: "me-3 shrink-0 rounded-full peer-focus:ring-4 peer-checked:after:translate-x-full peer-checked:rtl:after:-translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:border after:rounded-full after:transition-all relative",
17
+ checked: {
18
+ default: "peer-focus:ring-blue-300 dark:peer-focus:ring-blue-800 peer-checked:bg-blue-600",
19
+ success: "peer-focus:ring-green-300 dark:peer-focus:ring-green-800 peer-checked:bg-green-600",
20
+ danger: "peer-focus:ring-red-300 dark:peer-focus:ring-red-800 peer-checked:bg-red-600",
21
+ info: "peer-focus:ring-cyan-300 dark:peer-focus:ring-cyan-800 peer-checked:bg-cyan-600",
22
+ warning: "peer-focus:ring-yellow-300 dark:peer-focus:ring-yellow-800 peer-checked:bg-yellow-600",
23
+ dark: "peer-focus:ring-gray-300 dark:peer-focus:ring-gray-800 peer-checked:bg-gray-600",
24
+ light: "peer-focus:ring-gray-300 dark:peer-focus:ring-gray-100 peer-checked:bg-gray-100",
25
+ teal: "peer-focus:ring-teal-300 dark:peer-focus:ring-teal-800 peer-checked:bg-teal-600",
26
+ purple: "peer-focus:ring-purple-300 dark:peer-focus:ring-purple-800 peer-checked:bg-purple-600",
27
+ cyan: "peer-focus:ring-cyan-300 dark:peer-focus:ring-cyan-800 peer-checked:bg-cyan-600",
28
+ lime: "peer-focus:ring-lime-300 dark:peer-focus:ring-lime-800 peer-checked:bg-lime-600",
29
+ indigo: "peer-focus:ring-indigo-300 dark:peer-focus:ring-indigo-800 peer-checked:bg-indigo-600",
30
+ pink: "peer-focus:ring-pink-300 dark:peer-focus:ring-pink-800 peer-checked:bg-pink-600"
31
+ },
32
+ unchecked: {
33
+ default: "bg-slate-200 dark:bg-slate-700 dark:border-slate-600 after:border-slate-300",
34
+ blue: "bg-blue-600 dark:bg-blue-500 dark:border-blue-500 after:border-blue-600",
35
+ success: "bg-green-600 dark:bg-green-500 dark:border-green-500 after:border-green-600",
36
+ danger: "bg-red-600 dark:bg-red-500 dark:border-red-500 after:border-red-600",
37
+ info: "bg-cyan-600 dark:bg-cyan-500 dark:border-cyan-500 after:border-cyan-600",
38
+ warning: "bg-yellow-600 dark:bg-yellow-500 dark:border-yellow-500 after:border-yellow-600",
39
+ teal: "bg-teal-600 dark:bg-teal-500 dark:border-teal-500 after:border-teal-600",
40
+ purple: "bg-purple-600 dark:bg-purple-500 dark:border-purple-500 after:border-purple-600",
41
+ cyan: "bg-cyan-600 dark:bg-cyan-500 dark:border-cyan-500 after:border-cyan-600",
42
+ lime: "bg-lime-600 dark:bg-lime-500 dark:border-lime-500 after:border-lime-600",
43
+ indigo: "bg-indigo-600 dark:bg-indigo-500 dark:border-indigo-500 after:border-indigo-600",
44
+ pink: "bg-pink-600 dark:bg-pink-500 dark:border-pink-500 after:border-pink-600",
45
+ dark: "bg-gray-600 dark:bg-gray-800 dark:border-gray-600 after:border-gray-300",
46
+ light: "bg-gray-50 dark:bg-gray-300 dark:border-gray-200 after:border-gray-50",
47
+ light_success: "bg-green-200 dark:bg-green-700 dark:border-green-600 after:border-green-300",
48
+ light_danger: "bg-red-200 dark:bg-red-700 dark:border-red-600 after:border-red-300",
49
+ light_info: "bg-cyan-200 dark:bg-cyan-700 dark:border-cyan-600 after:border-cyan-300",
50
+ light_warning: "bg-yellow-200 dark:bg-yellow-700 dark:border-yellow-600 after:border-yellow-300",
51
+ light_teal: "bg-teal-200 dark:bg-teal-700 dark:border-teal-600 after:border-teal-300",
52
+ light_purple: "bg-purple-200 dark:bg-purple-700 dark:border-purple-600 after:border-purple-300",
53
+ light_cyan: "bg-cyan-200 dark:bg-cyan-700 dark:border-cyan-600 after:border-cyan-300",
54
+ light_lime: "bg-lime-200 dark:bg-lime-700 dark:border-lime-600 after:border-lime-300",
55
+ light_indigo: "bg-indigo-200 dark:bg-indigo-700 dark:border-indigo-600 after:border-indigo-300",
56
+ light_pink: "bg-pink-200 dark:bg-pink-700 dark:border-pink-600 after:border-pink-300"
57
+ },
58
+ button: {
59
+ default: "after:bg-white",
60
+ success: "after:bg-green-500",
61
+ danger: "after:bg-red-500",
62
+ info: "after:bg-cyan-500"
63
+
64
+ },
65
+ sizes: [
66
+ "w-9 h-5 after:top-[2px] after:start-[2px] after:h-4 after:w-4",
67
+ "w-11 h-6 after:top-0.5 after:start-[2px] after:h-5 after:w-5",
68
+ "w-14 h-7 after:top-0.5 after:start-[4px] after:h-6 after:w-6"
69
+ ],
70
+ active: {
71
+ on: "cursor-pointer",
72
+ off: "cursor-not-allowed opacity-50"
73
+ },
74
+ invert_label: "ms-3"
75
+ }
76
+ }
77
+ end
78
+ # rubocop: enable Layout/LineLength, Metrics/BlockLength
79
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fluxbit::Config::LinkComponent
4
+ mattr_accessor :color, default: :primary
5
+
6
+ # rubocop: disable Layout/LineLength, Metrics/BlockLength
7
+ mattr_accessor :styles do
8
+ {
9
+ base: "font-medium text-blue-600 dark:text-blue-500 hover:underline",
10
+ colors: {
11
+ default: "text-gray-900 dark:text-white",
12
+ primary: "text-blue-600 dark:text-blue-500",
13
+ secondary: "text-gray-500 dark:text-gray-400",
14
+ success: "text-green-600 dark:text-green-500",
15
+ danger: "text-red-600 dark:text-red-500",
16
+ warning: "text-yellow-600 dark:text-yellow-500",
17
+ info: "text-blue-400 dark:text-blue-300",
18
+ light: "text-gray-300 dark:text-gray-200",
19
+ dark: "text-gray-800 dark:text-gray-700"
20
+ }
21
+ }
22
+ end
23
+ # rubocop: enable Layout/LineLength, Metrics/BlockLength
24
+ end
@@ -53,7 +53,7 @@ module Fluxbit::Config::ModalComponent
53
53
  no_title: "-mt-4"
54
54
  },
55
55
  header: {
56
- base: "flex items-start justify-between rounded-t border-b p-5 dark:border-gray-600",
56
+ base: "flex items-start justify-between rounded-t border-b p-5 border-gray-200 dark:border-gray-600",
57
57
  flat: "border-b-0 p-2",
58
58
  title: "text-xl font-medium text-gray-900 dark:text-white",
59
59
  close: {
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fluxbit::Config::PaginationComponent
4
+ mattr_accessor :show_first_last, default: false
5
+ mattr_accessor :show_prev_next, default: true
6
+ mattr_accessor :show_pages, default: true
7
+ mattr_accessor :show_icons, default: true
8
+ mattr_accessor :show_texts, default: false
9
+ mattr_accessor :sizing, default: 0
10
+
11
+ # rubocop: disable Layout/LineLength, Metrics/BlockLength
12
+ mattr_accessor :styles do
13
+ {
14
+ root: "inline-flex -space-x-px border-e-0 rounded-s-lg",
15
+ page_link: "flex items-center justify-center px-3 h-8 leading-tight text-slate-500 bg-white border border-slate-300 hover:bg-slate-100 hover:text-slate-700 dark:bg-slate-800 dark:border-slate-700 dark:text-slate-400 dark:hover:bg-slate-700 dark:hover:text-white",
16
+ previous: "ms-0 border-e-0 rounded-s-lg",
17
+ next: "rounded-e-lg",
18
+ disabled: "px-3 py-1 text-slate-400 cursor-default",
19
+ current: "flex items-center justify-center px-3 h-8 leading-tight border border-slate-300 text-blue-600 bg-blue-50 hover:bg-blue-100 hover:text-blue-700 dark:bg-slate-700 dark:border-slate-700 dark:text-white",
20
+ text_with_icon_prev: "ms-2",
21
+ text_with_icon_next: "me-2",
22
+ only_text: "",
23
+ only_icon: "sr-only",
24
+ sizes: [
25
+ { root: "text-sm", page_link: "px-3 h-8" },
26
+ { root: "text-base h-10", page_link: "px-4 h-10" }
27
+ ]
28
+ }
29
+ end
30
+ # rubocop: enable Layout/LineLength, Metrics/BlockLength
31
+ end
@@ -3,7 +3,7 @@
3
3
  module Fluxbit::Config::PopoverComponent
4
4
  mattr_accessor :has_arrow, default: true
5
5
  mattr_accessor :image_position, default: :right
6
- mattr_accessor :image_props, default: {}
6
+ mattr_accessor :image_html, default: {}
7
7
  mattr_accessor :size, default: 2
8
8
 
9
9
  # rubocop: disable Layout/LineLength, Metrics/BlockLength
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fluxbit::Config::ProgressComponent
4
+ # Default values
5
+ mattr_accessor :progress, default: 0
6
+ mattr_accessor :color, default: :default
7
+ mattr_accessor :size, default: 1
8
+ mattr_accessor :text_label, default: nil
9
+ mattr_accessor :label_progress, default: false
10
+ mattr_accessor :label_text, default: false
11
+ mattr_accessor :progress_label_position, default: :inside
12
+ mattr_accessor :text_label_position, default: :outside
13
+ mattr_accessor :label_html, default: {}
14
+ mattr_accessor :stimulus, default: false
15
+
16
+ # Styling system
17
+ mattr_accessor :styles do
18
+ {
19
+ base: "w-full bg-gray-200 rounded-full dark:bg-gray-700",
20
+ bar: {
21
+ base: "h-full font-medium text-center leading-none rounded-full transition-all duration-300 ease-in-out flex items-center justify-center",
22
+ colors: {
23
+ default: "bg-blue-600 text-blue-100",
24
+ dark: "bg-gray-600 text-gray-100",
25
+ blue: "bg-blue-600 text-blue-100",
26
+ red: "bg-red-600 text-red-100",
27
+ green: "bg-green-600 text-green-100",
28
+ yellow: "bg-yellow-400 text-yellow-800",
29
+ indigo: "bg-indigo-600 text-indigo-100",
30
+ purple: "bg-purple-600 text-purple-100",
31
+ cyan: "bg-cyan-600 text-cyan-100",
32
+ gray: "bg-gray-600 text-gray-100",
33
+ lime: "bg-lime-600 text-lime-100",
34
+ pink: "bg-pink-600 text-pink-100",
35
+ teal: "bg-teal-600 text-teal-100"
36
+ },
37
+ text_sizes: [
38
+ "text-xs px-1", # size 0 - very small text, minimal padding
39
+ "text-xs px-1", # size 1 - small text, minimal padding
40
+ "text-xs px-2", # size 2 - normal text, normal padding
41
+ "text-sm px-2" # size 3 - larger text, normal padding
42
+ ]
43
+ },
44
+ sizes: [
45
+ "h-1.5", # size 0 - sm
46
+ "h-2.5", # size 1 - md (default)
47
+ "h-4", # size 2 - lg
48
+ "h-6" # size 3 - xl
49
+ ],
50
+ labels: {
51
+ outside: {
52
+ base: "flex justify-between items-center mb-1",
53
+ text: "text-base font-medium text-blue-700 dark:text-white",
54
+ progress: "text-sm font-medium text-blue-700 dark:text-white"
55
+ },
56
+ inside: {
57
+ text: "text-xs font-medium text-center",
58
+ progress: "text-xs font-medium text-center"
59
+ }
60
+ }
61
+ }
62
+ end
63
+ end