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.
- checksums.yaml +4 -4
- data/README.md +10 -0
- data/app/assets/javascripts/fluxbit_view_components/assigner_controller.js +49 -0
- data/app/assets/javascripts/fluxbit_view_components/auto_submit_controller.js +39 -0
- data/app/assets/javascripts/fluxbit_view_components/drawer_controller.js +135 -0
- data/app/assets/javascripts/fluxbit_view_components/index.js +56 -0
- data/app/assets/javascripts/fluxbit_view_components/method_link_controller.js +143 -0
- data/app/assets/javascripts/fluxbit_view_components/modal_controller.js +118 -0
- data/app/assets/javascripts/fluxbit_view_components/password_controller.js +170 -0
- data/app/assets/javascripts/fluxbit_view_components/progress_controller.js +374 -0
- data/app/assets/javascripts/fluxbit_view_components/row_click_controller.js +32 -0
- data/app/assets/javascripts/fluxbit_view_components/select_all_controller.js +122 -0
- data/app/assets/javascripts/fluxbit_view_components/spinner_percent_controller.js +174 -0
- data/app/assets/javascripts/fluxbit_view_components/theme_button_controller.js +90 -0
- data/app/assets/javascripts/fluxbit_view_components.js +1175 -0
- data/app/components/fluxbit/accordion_component.rb +125 -0
- data/app/components/fluxbit/alert_component.rb +8 -8
- data/app/components/fluxbit/avatar_component.rb +11 -12
- data/app/components/fluxbit/avatar_group_component.rb +1 -1
- data/app/components/fluxbit/badge_component.rb +8 -7
- data/app/components/fluxbit/banner_component.rb +139 -0
- data/app/components/fluxbit/bottom_navigation_component.rb +437 -0
- data/app/components/fluxbit/breadcrumb_component.rb +66 -0
- data/app/components/fluxbit/button_component.rb +39 -11
- data/app/components/fluxbit/button_group_component.rb +1 -1
- data/app/components/fluxbit/card_component.rb +26 -23
- data/app/components/fluxbit/carousel_component.rb +154 -0
- data/app/components/fluxbit/component.rb +24 -3
- data/app/components/fluxbit/drawer_component.html.erb +30 -0
- data/app/components/fluxbit/drawer_component.rb +125 -0
- data/app/components/fluxbit/dropdown_component.rb +41 -0
- data/app/components/fluxbit/dropdown_item_component.rb +68 -0
- data/app/components/fluxbit/flex_component.rb +1 -1
- data/app/components/fluxbit/form/check_box_component.rb +56 -0
- data/app/components/fluxbit/form/component.rb +27 -26
- data/app/components/fluxbit/form/dropzone_component.html.erb +39 -0
- data/app/components/fluxbit/form/dropzone_component.rb +39 -0
- data/app/components/fluxbit/form/field_component.rb +28 -0
- data/app/components/fluxbit/form/form_builder_component.rb +1 -1
- data/app/components/fluxbit/form/{helper_text_component.rb → help_text_component.rb} +9 -4
- data/app/components/fluxbit/form/label_component.rb +40 -30
- data/app/components/fluxbit/form/password_component.rb +247 -0
- data/app/components/fluxbit/form/radio_group_button_component.rb +126 -0
- data/app/components/fluxbit/form/range_component.rb +52 -0
- data/app/components/fluxbit/form/select_component.rb +185 -0
- data/app/components/fluxbit/form/text_field_component.rb +185 -0
- data/app/components/fluxbit/form/toggle_component.html.erb +23 -0
- data/app/components/fluxbit/form/toggle_component.rb +81 -0
- data/app/components/fluxbit/form/upload_image_component.html.erb +50 -0
- data/app/components/fluxbit/form/upload_image_component.rb +61 -0
- data/app/components/fluxbit/gravatar_component.rb +7 -0
- data/app/components/fluxbit/icon_helpers.rb +167 -0
- data/app/components/fluxbit/link_component.rb +42 -0
- data/app/components/fluxbit/modal_component.rb +28 -31
- data/app/components/fluxbit/pagination_component.rb +206 -0
- data/app/components/fluxbit/popover_component.rb +14 -14
- data/app/components/fluxbit/progress_component.rb +196 -0
- data/app/components/fluxbit/skeleton_component.rb +237 -0
- data/app/components/fluxbit/speed_dial_action_component.html.erb +30 -0
- data/app/components/fluxbit/speed_dial_action_component.rb +59 -0
- data/app/components/fluxbit/speed_dial_component.html.erb +33 -0
- data/app/components/fluxbit/speed_dial_component.rb +73 -0
- data/app/components/fluxbit/spinner_component.rb +71 -0
- data/app/components/fluxbit/spinner_percent_component.rb +174 -0
- data/app/components/fluxbit/stepper_component.rb +223 -0
- data/app/components/fluxbit/tab_component.rb +44 -25
- data/app/components/fluxbit/table_component.rb +186 -0
- data/app/components/fluxbit/table_group_component.rb +28 -0
- data/app/components/fluxbit/theme_button_component.rb +64 -0
- data/app/components/fluxbit/timeline_component.rb +63 -0
- data/app/components/fluxbit/timeline_item_component.html.erb +64 -0
- data/app/components/fluxbit/timeline_item_component.rb +78 -0
- data/app/components/fluxbit/tooltip_component.rb +2 -2
- data/app/helpers/fluxbit/components_helper.rb +93 -51
- data/app/helpers/fluxbit/form_builder.rb +136 -0
- data/app/helpers/fluxbit/view_helper.rb +71 -0
- data/config/locales/en.yml +37 -4
- data/config/locales/pt-BR.yml +36 -0
- data/lib/fluxbit/config/accordion_component.rb +73 -0
- data/lib/fluxbit/config/avatar_component.rb +11 -11
- data/lib/fluxbit/config/badge_component.rb +14 -11
- data/lib/fluxbit/config/banner_component.rb +60 -0
- data/lib/fluxbit/config/bottom_navigation_component.rb +74 -0
- data/lib/fluxbit/config/breadcrumb_component.rb +24 -0
- data/lib/fluxbit/config/button_component.rb +6 -4
- data/lib/fluxbit/config/card_component.rb +23 -12
- data/lib/fluxbit/config/carousel_component.rb +33 -0
- data/lib/fluxbit/config/drawer_component.rb +48 -0
- data/lib/fluxbit/config/dropdown_component.rb +29 -0
- data/lib/fluxbit/config/form/check_box_component.rb +19 -0
- data/lib/fluxbit/config/form/dropzone_component.rb +20 -0
- data/lib/fluxbit/config/form/{helper_text_component.rb → help_text_component.rb} +2 -2
- data/lib/fluxbit/config/form/label_component.rb +31 -0
- data/lib/fluxbit/config/form/password_component.rb +19 -0
- data/lib/fluxbit/config/form/radio_group_button_component.rb +24 -0
- data/lib/fluxbit/config/form/range_component.rb +15 -0
- data/lib/fluxbit/config/form/text_field_component.rb +76 -0
- data/lib/fluxbit/config/form/toggle_component.rb +79 -0
- data/lib/fluxbit/config/link_component.rb +24 -0
- data/lib/fluxbit/config/modal_component.rb +1 -1
- data/lib/fluxbit/config/pagination_component.rb +31 -0
- data/lib/fluxbit/config/popover_component.rb +1 -1
- data/lib/fluxbit/config/progress_component.rb +63 -0
- data/lib/fluxbit/config/skeleton_component.rb +82 -0
- data/lib/fluxbit/config/speed_dial_component.rb +50 -0
- data/lib/fluxbit/config/spinner_component.rb +30 -0
- data/lib/fluxbit/config/spinner_percent_component.rb +61 -0
- data/lib/fluxbit/config/stepper_component.rb +299 -0
- data/lib/fluxbit/config/tab_component.rb +6 -0
- data/lib/fluxbit/config/table_component.rb +75 -0
- data/lib/fluxbit/config/theme_button_component.rb +19 -0
- data/lib/fluxbit/config/timeline_component.rb +77 -0
- data/lib/fluxbit/view_components/engine.rb +11 -3
- data/lib/fluxbit/view_components/version.rb +1 -1
- data/lib/fluxbit/view_components.rb +27 -1
- data/lib/generators/fluxbit/devise_views_generator.rb +116 -0
- data/lib/generators/fluxbit/pagy_generator.rb +39 -0
- data/lib/generators/fluxbit/scaffold_generator.rb +165 -0
- data/lib/generators/fluxbit/templates/_alert.html.erb.tt +1 -0
- data/lib/generators/fluxbit/templates/_flash.html.erb.tt +15 -0
- data/lib/generators/fluxbit/templates/_form.html.erb.tt +38 -0
- data/lib/generators/fluxbit/templates/_metadata.html.erb.tt +44 -0
- data/lib/generators/fluxbit/templates/controller.rb.tt +406 -0
- data/lib/generators/fluxbit/templates/create.turbo_stream.erb.tt +7 -0
- data/lib/generators/fluxbit/templates/destroy.turbo_stream.erb.tt +3 -0
- data/lib/generators/fluxbit/templates/destroy_all.turbo_stream.erb.tt +9 -0
- data/lib/generators/fluxbit/templates/devise_views/confirmations/new.html.erb +11 -0
- data/lib/generators/fluxbit/templates/devise_views/layouts/devise.html.erb +64 -0
- data/lib/generators/fluxbit/templates/devise_views/mailer/confirmation_instructions.html.erb +5 -0
- data/lib/generators/fluxbit/templates/devise_views/mailer/email_changed.html.erb +7 -0
- data/lib/generators/fluxbit/templates/devise_views/mailer/password_changed.html.erb +3 -0
- data/lib/generators/fluxbit/templates/devise_views/mailer/reset_password_instructions.html.erb +8 -0
- data/lib/generators/fluxbit/templates/devise_views/mailer/unlock_instructions.html.erb +7 -0
- data/lib/generators/fluxbit/templates/devise_views/passwords/edit.html.erb +29 -0
- data/lib/generators/fluxbit/templates/devise_views/passwords/new.html.erb +11 -0
- data/lib/generators/fluxbit/templates/devise_views/registrations/edit.html.erb +43 -0
- data/lib/generators/fluxbit/templates/devise_views/registrations/new.html.erb +34 -0
- data/lib/generators/fluxbit/templates/devise_views/sessions/new.html.erb +15 -0
- data/lib/generators/fluxbit/templates/devise_views/shared/_error_messages.html.erb +14 -0
- data/lib/generators/fluxbit/templates/devise_views/shared/_links.html.erb +25 -0
- data/lib/generators/fluxbit/templates/devise_views/unlocks/new.html.erb +11 -0
- data/lib/generators/fluxbit/templates/edit.html.erb.tt +47 -0
- data/lib/generators/fluxbit/templates/fluxbit_pagy.css +27 -0
- data/lib/generators/fluxbit/templates/i18n.en.yml.tt +121 -0
- data/lib/generators/fluxbit/templates/i18n.pt-BR.yml.tt +121 -0
- data/lib/generators/fluxbit/templates/index.html.erb.tt +254 -0
- data/lib/generators/fluxbit/templates/index.json.jbuilder.tt +33 -0
- data/lib/generators/fluxbit/templates/new.html.erb.tt +47 -0
- data/lib/generators/fluxbit/templates/partial.html.erb.tt +61 -0
- data/lib/generators/fluxbit/templates/policy.rb.tt +36 -0
- data/lib/generators/fluxbit/templates/send_alert_via_drawer.erb.tt +10 -0
- data/lib/generators/fluxbit/templates/show.html.erb.tt +44 -0
- data/lib/generators/fluxbit/templates/show.json.jbuilder.tt +6 -0
- data/lib/generators/fluxbit/templates/update.turbo_stream.erb.tt +10 -0
- data/lib/generators/fluxbit/templates/update_all.turbo_stream.erb.tt +20 -0
- data/lib/install/install.rb +61 -3
- metadata +127 -35
- data/LICENSE.txt +0 -20
- data/app/components/fluxbit/form/checkbox_input_component.rb +0 -61
- data/app/components/fluxbit/form/datepicker_component.rb +0 -7
- data/app/components/fluxbit/form/radio_input_component.rb +0 -21
- data/app/components/fluxbit/form/range_input_component.rb +0 -51
- data/app/components/fluxbit/form/select_free_input_component.rb +0 -77
- data/app/components/fluxbit/form/select_input_component.rb +0 -21
- data/app/components/fluxbit/form/spacer_input_component.rb +0 -12
- data/app/components/fluxbit/form/text_input_component.rb +0 -225
- data/app/components/fluxbit/form/textarea_input_component.rb +0 -57
- data/app/components/fluxbit/form/toggle_input_component.rb +0 -166
- data/app/components/fluxbit/form/upload_image_input_component.html.erb +0 -48
- data/app/components/fluxbit/form/upload_image_input_component.rb +0 -61
- data/app/components/fluxbit/form/upload_input_component.html.erb +0 -12
- data/app/components/fluxbit/form/upload_input_component.rb +0 -47
- data/app/helpers/fluxbit/classes_helper.rb +0 -9
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
module Fluxbit
|
|
2
|
+
class FormBuilder < ActionView::Helpers::FormBuilder
|
|
3
|
+
include ActionView::Helpers::OutputSafetyHelper
|
|
4
|
+
|
|
5
|
+
attr_reader :template
|
|
6
|
+
|
|
7
|
+
delegate :render, :pluralize, to: :template
|
|
8
|
+
|
|
9
|
+
def errors_summary(within: :container)
|
|
10
|
+
return if object.blank?
|
|
11
|
+
return unless object.errors.any?
|
|
12
|
+
|
|
13
|
+
title = I18n.t(
|
|
14
|
+
"polaris.form_builder.errors_summary",
|
|
15
|
+
count: object.errors.count,
|
|
16
|
+
model: object.class.model_name.human.downcase
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
render Fluxbit::BannerComponent.new(
|
|
20
|
+
title: title,
|
|
21
|
+
status: :critical,
|
|
22
|
+
within: within,
|
|
23
|
+
data: { errors_summary: true }
|
|
24
|
+
) do |banner|
|
|
25
|
+
parts = []
|
|
26
|
+
|
|
27
|
+
parts << render(Fluxbit::ListComponent.new) do |list|
|
|
28
|
+
object.errors.full_messages.each do |error|
|
|
29
|
+
list.with_item { template.sanitize(error.to_s, tags: [], attributes: []) }
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
parts << template.capture { yield(banner) } if block_given?
|
|
34
|
+
|
|
35
|
+
template.safe_join(parts)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def error_for(method)
|
|
40
|
+
return if object.blank?
|
|
41
|
+
return unless object.errors.key?(method)
|
|
42
|
+
|
|
43
|
+
raw object.errors.full_messages_for(method)&.first
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def fluxbit_inline_error_for(method, **options, &block)
|
|
47
|
+
error_message = error_for(method)
|
|
48
|
+
return unless error_message
|
|
49
|
+
|
|
50
|
+
render(Fluxbit::InlineErrorComponent.new(**options, &block)) do
|
|
51
|
+
error_message
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
Fluxbit::Form::TextFieldComponent::TYPE_OPTIONS.each do |type|
|
|
56
|
+
define_method(type.in?([ :text_area, :textarea ]) ? "fx_#{type}" : "fx_#{type}_field") do |method, **options, &block|
|
|
57
|
+
options[:error] ||= error_for(method)
|
|
58
|
+
options[:error] = !!options[:error] if options[:error_hidden] && options[:error]
|
|
59
|
+
render Fluxbit::Form::TextFieldComponent.new(form: self, type: type, attribute: method, **options), &block
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
Fluxbit::Form::CheckBoxComponent::TYPE_OPTIONS.each do |type|
|
|
64
|
+
define_method("fx_#{type}") do |method, **options, &block|
|
|
65
|
+
options[:error] ||= error_for(method)
|
|
66
|
+
options[:error] = !!options[:error] if options[:error_hidden] && options[:error]
|
|
67
|
+
render Fluxbit::Form::CheckBoxComponent.new(form: self, type: type, attribute: method, **options), &block
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
[ :range, :toggle, :upload_image, :dropzone, :password ].each do |component|
|
|
72
|
+
define_method("fx_#{component}") do |method, **options, &block|
|
|
73
|
+
options[:error] ||= error_for(method)
|
|
74
|
+
options[:error] = !!options[:error] if options[:error_hidden] && options[:error]
|
|
75
|
+
klass = "Fluxbit::Form::#{component.to_s.camelize}Component".constantize
|
|
76
|
+
render klass.new(form: self, attribute: method, **options), &block
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def fx_radio_group_button(method, **options, &block)
|
|
81
|
+
options[:name] ||= "#{@object_name}[#{method}]"
|
|
82
|
+
render Fluxbit::Form::RadioGroupButtonComponent.new(**options), &block
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Mimics Rails' form.select signature:
|
|
86
|
+
# select(method, choices = nil, options = {}, html_options = {}, &block)
|
|
87
|
+
#
|
|
88
|
+
# @param method [Symbol] The attribute name
|
|
89
|
+
# @param choices [Array, Hash, String, nil] Options for the select (raw data or pre-formatted HTML)
|
|
90
|
+
# @param options [Hash] Options like prompt, include_blank, selected, disabled
|
|
91
|
+
# @param html_options [Hash] HTML attributes for the select tag
|
|
92
|
+
# @param block [Proc] Optional block for custom options
|
|
93
|
+
#
|
|
94
|
+
# @example Basic usage
|
|
95
|
+
# form.fx_select :role, ["Admin", "User", "Guest"]
|
|
96
|
+
#
|
|
97
|
+
# @example With options
|
|
98
|
+
# form.fx_select :country, countries, { prompt: "Select a country" }, { class: "custom-class" }
|
|
99
|
+
#
|
|
100
|
+
# @example With pre-formatted options
|
|
101
|
+
# form.fx_select :status, options_for_select(statuses, selected: "active")
|
|
102
|
+
def fx_select(method, choices = nil, options = {}, html_options = {}, &block)
|
|
103
|
+
# Handle Rails-style signature
|
|
104
|
+
all_options = html_options.merge(options)
|
|
105
|
+
|
|
106
|
+
# Set the choices/options
|
|
107
|
+
all_options[:options] = choices if choices.present?
|
|
108
|
+
|
|
109
|
+
# Add error handling
|
|
110
|
+
all_options[:error] ||= error_for(method)
|
|
111
|
+
all_options[:error] = !!all_options[:error] if all_options[:error_hidden] && all_options[:error]
|
|
112
|
+
|
|
113
|
+
# Set selected value from object if not explicitly provided
|
|
114
|
+
value = object&.public_send(method)
|
|
115
|
+
all_options[:selected] ||= value if value.present?
|
|
116
|
+
|
|
117
|
+
render Fluxbit::Form::SelectComponent.new(form: self, attribute: method, **all_options, &block)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def fx_submit(content = nil, **options, &block)
|
|
121
|
+
options[:form] = self
|
|
122
|
+
options[:content] = content if content.present?
|
|
123
|
+
options[:color] ||= :primary
|
|
124
|
+
options[:size] ||= 2
|
|
125
|
+
options[:disabled] = true if object&.persisted? && !object.valid?
|
|
126
|
+
|
|
127
|
+
if block_given?
|
|
128
|
+
render Fluxbit::ButtonComponent.new(**options) do |*args|
|
|
129
|
+
yield(*args)
|
|
130
|
+
end
|
|
131
|
+
else
|
|
132
|
+
render Fluxbit::ButtonComponent.new(**options)
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Fluxbit
|
|
4
|
+
module ViewHelper
|
|
5
|
+
def fx_body_class
|
|
6
|
+
"h-full bg-slate-100 dark:bg-slate-900 dark:text-white"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def fx_sort_field(field, url, label = nil)
|
|
10
|
+
order = (request.query_parameters[:order] || "").rpartition("_")
|
|
11
|
+
|
|
12
|
+
order_direction = "asc"
|
|
13
|
+
if order.first == field.to_s
|
|
14
|
+
order_direction = order.last == "asc" ? "desc" : "asc"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
link_to public_send(url, request.query_parameters.merge(order: "#{field}_#{order_direction}")), class: "order-#{order_direction} flex" do
|
|
18
|
+
label_text = label || field.to_s.titlecase
|
|
19
|
+
icon = if order.first == field.to_s
|
|
20
|
+
order_direction == "asc" ? fx_sort_up : fx_sort_down
|
|
21
|
+
else
|
|
22
|
+
fx_sort_up_down
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
safe_join([ h(label_text), icon ], " ")
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def fx_sort_up_down
|
|
30
|
+
content_tag :svg, class: "size-4", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor" do
|
|
31
|
+
concat(
|
|
32
|
+
content_tag(
|
|
33
|
+
:path,
|
|
34
|
+
"",
|
|
35
|
+
fill_rule: "evenodd",
|
|
36
|
+
d: "M11.47 4.72a.75.75 0 0 1 1.06 0l3.75 3.75a.75.75 0 0 1-1.06 1.06L12 6.31 8.78 9.53a.75.75 0 0 1-1.06-1.06l3.75-3.75Zm-3.75 9.75a.75.75 0 0 1 1.06 0L12 17.69l3.22-3.22a.75.75 0 1 1 1.06 1.06l-3.75 3.75a.75.75 0 0 1-1.06 0l-3.75-3.75a.75.75 0 0 1 0-1.06Z",
|
|
37
|
+
clip_rule: "evenodd"
|
|
38
|
+
)
|
|
39
|
+
)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def fx_sort_up
|
|
44
|
+
content_tag :svg, class: "size-4", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor" do
|
|
45
|
+
concat(
|
|
46
|
+
content_tag(
|
|
47
|
+
:path,
|
|
48
|
+
"",
|
|
49
|
+
fill_rule: "evenodd",
|
|
50
|
+
d: "M11.47 4.72a.75.75 0 0 1 1.06 0l3.75 3.75a.75.75 0 0 1-1.06 1.06L12 6.31 8.78 9.53a.75.75 0 0 1-1.06-1.06l3.75-3.75Z",
|
|
51
|
+
clip_rule: "evenodd"
|
|
52
|
+
)
|
|
53
|
+
)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def fx_sort_down
|
|
58
|
+
content_tag :svg, class: "size-4", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor" do
|
|
59
|
+
concat(
|
|
60
|
+
content_tag(
|
|
61
|
+
:path,
|
|
62
|
+
"",
|
|
63
|
+
fill_rule: "evenodd",
|
|
64
|
+
d: "M11.47 19.28a.75.75 0 0 1 1.06 0l3.75-3.75a.75.75 0 0 1-1.06-1.06L12 17.69l-3.22-3.22a.75.75 0 1 1-1.06 1.06l3.75 3.75Z",
|
|
65
|
+
clip_rule: "evenodd"
|
|
66
|
+
)
|
|
67
|
+
)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
data/config/locales/en.yml
CHANGED
|
@@ -1,6 +1,39 @@
|
|
|
1
1
|
en:
|
|
2
2
|
fluxbit:
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
alert:
|
|
4
|
+
aria_close: Close
|
|
5
|
+
dismiss: Dismiss
|
|
6
|
+
banner:
|
|
7
|
+
aria_close: Close
|
|
8
|
+
dismiss: Dismiss
|
|
9
|
+
drawer:
|
|
10
|
+
dismiss: Dismiss
|
|
11
|
+
modal:
|
|
12
|
+
aria_close: Close
|
|
13
|
+
dismiss: Dismiss
|
|
14
|
+
pagination:
|
|
15
|
+
aria_label:
|
|
16
|
+
nav:
|
|
17
|
+
one: Page
|
|
18
|
+
other: Pages
|
|
19
|
+
prev: Previous
|
|
20
|
+
next: Next
|
|
21
|
+
first: First
|
|
22
|
+
last: Last
|
|
23
|
+
first: First
|
|
24
|
+
last: Last
|
|
25
|
+
prev: Previous
|
|
26
|
+
next: Next
|
|
27
|
+
skeleton:
|
|
28
|
+
loading: Loading...
|
|
29
|
+
speed_dial:
|
|
30
|
+
open_actions_menu: Open actions menu
|
|
31
|
+
form:
|
|
32
|
+
password:
|
|
33
|
+
checks:
|
|
34
|
+
length: At least %{count} characters
|
|
35
|
+
uppercase: Contains uppercase letter
|
|
36
|
+
lowercase: Contains lowercase letter
|
|
37
|
+
numbers: Contains number
|
|
38
|
+
special: Contains special character
|
|
39
|
+
strength: Password strength
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
pt-BR:
|
|
2
|
+
fluxbit:
|
|
3
|
+
alert:
|
|
4
|
+
aria_close: Close
|
|
5
|
+
dismiss: Dismiss
|
|
6
|
+
drawer:
|
|
7
|
+
dismiss: Dismiss
|
|
8
|
+
modal:
|
|
9
|
+
aria_close: Close
|
|
10
|
+
dismiss: Dismiss
|
|
11
|
+
pagination:
|
|
12
|
+
aria_label:
|
|
13
|
+
nav:
|
|
14
|
+
one: Página
|
|
15
|
+
other: Páginas
|
|
16
|
+
prev: Anterior
|
|
17
|
+
next: Próximo
|
|
18
|
+
first: Primeiro
|
|
19
|
+
last: Último
|
|
20
|
+
first: Primeiro
|
|
21
|
+
last: Último
|
|
22
|
+
prev: Anterior
|
|
23
|
+
next: Próximo
|
|
24
|
+
skeleton:
|
|
25
|
+
loading: Carregando...
|
|
26
|
+
speed_dial:
|
|
27
|
+
open_actions_menu: Abrir menu de ações
|
|
28
|
+
form:
|
|
29
|
+
password:
|
|
30
|
+
checks:
|
|
31
|
+
length: Pelo menos %{count} caracteres
|
|
32
|
+
uppercase: Contém letra maiúscula
|
|
33
|
+
lowercase: Contém letra minúscula
|
|
34
|
+
numbers: Contém número
|
|
35
|
+
special: Contém caractere especial
|
|
36
|
+
strength: Força da senha
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Fluxbit::Config::AccordionComponent
|
|
4
|
+
mattr_accessor :flush, default: false
|
|
5
|
+
mattr_accessor :color, default: :default
|
|
6
|
+
mattr_accessor :collapse_all, default: false
|
|
7
|
+
|
|
8
|
+
# rubocop: disable Layout/LineLength, Metrics/BlockLength
|
|
9
|
+
mattr_accessor :styles do
|
|
10
|
+
{
|
|
11
|
+
base: "space-y-2",
|
|
12
|
+
item: {
|
|
13
|
+
base: "",
|
|
14
|
+
header: {
|
|
15
|
+
base: "flex items-center justify-between w-full p-5 font-medium rtl:text-right border border-gray-200 focus:ring-4 focus:ring-gray-200 dark:focus:ring-gray-800 dark:border-gray-700 hover:bg-gray-100 dark:hover:bg-gray-800 gap-3",
|
|
16
|
+
first: "rounded-t-xl",
|
|
17
|
+
last: "rounded-b-xl",
|
|
18
|
+
middle: "border-b-0"
|
|
19
|
+
},
|
|
20
|
+
content: {
|
|
21
|
+
base: "p-5 border border-gray-200 dark:border-gray-700",
|
|
22
|
+
first: "",
|
|
23
|
+
last: "rounded-b-xl border-t-0",
|
|
24
|
+
middle: "border-t-0 border-b-0"
|
|
25
|
+
},
|
|
26
|
+
icon: {
|
|
27
|
+
base: "w-3 h-3 rotate-180 shrink-0",
|
|
28
|
+
open: "rotate-180",
|
|
29
|
+
closed: ""
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
colors: {
|
|
33
|
+
default: {
|
|
34
|
+
header: "bg-white dark:bg-gray-900 text-gray-500 dark:text-gray-400",
|
|
35
|
+
content: "bg-white dark:bg-gray-900 text-gray-500 dark:text-gray-400"
|
|
36
|
+
},
|
|
37
|
+
light: {
|
|
38
|
+
header: "bg-gray-50 dark:bg-gray-800 text-gray-900 dark:text-white",
|
|
39
|
+
content: "bg-gray-50 dark:bg-gray-800 text-gray-900 dark:text-white"
|
|
40
|
+
},
|
|
41
|
+
primary: {
|
|
42
|
+
header: "bg-blue-50 dark:bg-blue-900 text-blue-900 dark:text-blue-100 border-blue-200 dark:border-blue-800",
|
|
43
|
+
content: "bg-blue-50 dark:bg-blue-900 text-blue-900 dark:text-blue-100 border-blue-200 dark:border-blue-800"
|
|
44
|
+
},
|
|
45
|
+
secondary: {
|
|
46
|
+
header: "bg-gray-100 dark:bg-gray-800 text-gray-800 dark:text-gray-200 border-gray-300 dark:border-gray-700",
|
|
47
|
+
content: "bg-gray-100 dark:bg-gray-800 text-gray-800 dark:text-gray-200 border-gray-300 dark:border-gray-700"
|
|
48
|
+
},
|
|
49
|
+
success: {
|
|
50
|
+
header: "bg-green-50 dark:bg-green-900 text-green-900 dark:text-green-100 border-green-200 dark:border-green-800",
|
|
51
|
+
content: "bg-green-50 dark:bg-green-900 text-green-900 dark:text-green-100 border-green-200 dark:border-green-800"
|
|
52
|
+
},
|
|
53
|
+
danger: {
|
|
54
|
+
header: "bg-red-50 dark:bg-red-900 text-red-900 dark:text-red-100 border-red-200 dark:border-red-800",
|
|
55
|
+
content: "bg-red-50 dark:bg-red-900 text-red-900 dark:text-red-100 border-red-200 dark:border-red-800"
|
|
56
|
+
},
|
|
57
|
+
warning: {
|
|
58
|
+
header: "bg-yellow-50 dark:bg-yellow-900 text-yellow-900 dark:text-yellow-100 border-yellow-200 dark:border-yellow-800",
|
|
59
|
+
content: "bg-yellow-50 dark:bg-yellow-900 text-yellow-900 dark:text-yellow-100 border-yellow-200 dark:border-yellow-800"
|
|
60
|
+
},
|
|
61
|
+
info: {
|
|
62
|
+
header: "bg-cyan-50 dark:bg-cyan-900 text-cyan-900 dark:text-cyan-100 border-cyan-200 dark:border-cyan-800",
|
|
63
|
+
content: "bg-cyan-50 dark:bg-cyan-900 text-cyan-900 dark:text-cyan-100 border-cyan-200 dark:border-cyan-800"
|
|
64
|
+
},
|
|
65
|
+
dark: {
|
|
66
|
+
header: "bg-gray-800 dark:bg-gray-700 text-gray-100 dark:text-gray-200 border-gray-700 dark:border-gray-600",
|
|
67
|
+
content: "bg-gray-800 dark:bg-gray-700 text-gray-100 dark:text-gray-200 border-gray-700 dark:border-gray-600"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
end
|
|
72
|
+
# rubocop: enable Layout/LineLength, Metrics/BlockLength
|
|
73
|
+
end
|
|
@@ -32,7 +32,7 @@ module Fluxbit::Config::AvatarComponent
|
|
|
32
32
|
},
|
|
33
33
|
color: {
|
|
34
34
|
dark: "ring-gray-800 dark:ring-gray-800",
|
|
35
|
-
|
|
35
|
+
danger: "ring-red-500 dark:ring-red-700",
|
|
36
36
|
gray: "ring-gray-500 dark:ring-gray-400",
|
|
37
37
|
info: "ring-cyan-400 dark:ring-cyan-800",
|
|
38
38
|
light: "ring-gray-300 dark:ring-gray-500",
|
|
@@ -42,20 +42,20 @@ module Fluxbit::Config::AvatarComponent
|
|
|
42
42
|
pink: "ring-pink-500 dark:ring-pink-500"
|
|
43
43
|
},
|
|
44
44
|
size: {
|
|
45
|
-
xs: "
|
|
46
|
-
sm: "
|
|
47
|
-
md: "
|
|
48
|
-
lg: "
|
|
49
|
-
xl: "
|
|
45
|
+
xs: "size-6",
|
|
46
|
+
sm: "size-8",
|
|
47
|
+
md: "size-10",
|
|
48
|
+
lg: "size-20",
|
|
49
|
+
xl: "size-36"
|
|
50
50
|
},
|
|
51
51
|
placeholder_icon: {
|
|
52
52
|
base: "relative overflow-hidden bg-gray-200 dark:bg-gray-600",
|
|
53
53
|
size: {
|
|
54
|
-
xs: "
|
|
55
|
-
sm: "
|
|
56
|
-
md: "
|
|
57
|
-
lg: "
|
|
58
|
-
xl: "
|
|
54
|
+
xs: "size-8",
|
|
55
|
+
sm: "size-10",
|
|
56
|
+
md: "size-12",
|
|
57
|
+
lg: "size-22",
|
|
58
|
+
xl: "size-38"
|
|
59
59
|
}
|
|
60
60
|
},
|
|
61
61
|
stacked: "ring-2 ring-gray-300 dark:ring-gray-500",
|
|
@@ -12,12 +12,15 @@ module Fluxbit::Config::BadgeComponent
|
|
|
12
12
|
# rubocop: disable Layout/LineLength, Metrics/BlockLength
|
|
13
13
|
mattr_accessor :styles do
|
|
14
14
|
{
|
|
15
|
-
base: "inline-flex items-center gap-1 font-medium me-2
|
|
16
|
-
pill:
|
|
15
|
+
base: "inline-flex items-center gap-1 font-medium me-2",
|
|
16
|
+
pill: {
|
|
17
|
+
off: "rounded-sm",
|
|
18
|
+
on: "rounded-full"
|
|
19
|
+
},
|
|
17
20
|
colors: {
|
|
18
21
|
info: "bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-300",
|
|
19
22
|
dark: "bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-300",
|
|
20
|
-
|
|
23
|
+
danger: "bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-300",
|
|
21
24
|
success: "bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-300",
|
|
22
25
|
warning: "bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-300",
|
|
23
26
|
indigo: "bg-indigo-100 text-indigo-800 dark:bg-indigo-900 dark:text-indigo-300",
|
|
@@ -28,7 +31,7 @@ module Fluxbit::Config::BadgeComponent
|
|
|
28
31
|
teal: "bg-teal-100 text-teal-800 dark:bg-teal-900 dark:text-teal-400",
|
|
29
32
|
solid_info: "text-white bg-blue-500 border-1 border-white dark:border-gray-900",
|
|
30
33
|
solid_dark: "text-white bg-gray-500 border-1 border-white dark:border-gray-900",
|
|
31
|
-
|
|
34
|
+
solid_danger: "text-white bg-red-500 border-1 border-white dark:border-gray-900",
|
|
32
35
|
solid_success: "text-white bg-green-500 border-1 border-white dark:border-gray-900",
|
|
33
36
|
solid_warning: "text-white bg-yellow-500 border-1 border-white dark:border-gray-900",
|
|
34
37
|
solid_indigo: "text-white bg-indigo-500 border-1 border-white dark:border-gray-900",
|
|
@@ -40,7 +43,7 @@ module Fluxbit::Config::BadgeComponent
|
|
|
40
43
|
|
|
41
44
|
info_bordered: "bg-blue-100 text-blue-800 dark:bg-gray-700 dark:text-blue-400 border border-blue-400",
|
|
42
45
|
dark_bordered: "bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-400 border border-gray-500",
|
|
43
|
-
|
|
46
|
+
danger_bordered: "bg-red-100 text-red-800 dark:bg-gray-700 dark:text-red-400 border border-red-400",
|
|
44
47
|
success_bordered: "bg-green-100 text-green-800 dark:bg-gray-700 dark:text-green-400 border border-green-400",
|
|
45
48
|
warning_bordered: "bg-yellow-100 text-yellow-800 dark:bg-gray-700 dark:text-yellow-300 border border-yellow-300",
|
|
46
49
|
indigo_bordered: "bg-indigo-100 text-indigo-800 dark:bg-gray-700 dark:text-indigo-400 border border-indigo-400",
|
|
@@ -55,12 +58,12 @@ module Fluxbit::Config::BadgeComponent
|
|
|
55
58
|
],
|
|
56
59
|
perfect_rounded: [
|
|
57
60
|
"h-fit px-2.5 py-0.5",
|
|
58
|
-
"justify-center
|
|
59
|
-
"justify-center
|
|
60
|
-
"justify-center
|
|
61
|
-
"justify-center
|
|
62
|
-
"justify-center
|
|
63
|
-
|
|
61
|
+
"justify-center size-4",
|
|
62
|
+
"justify-center size-6",
|
|
63
|
+
"justify-center size-8",
|
|
64
|
+
"justify-center size-10",
|
|
65
|
+
"justify-center size-12"
|
|
66
|
+
],
|
|
64
67
|
notification: {
|
|
65
68
|
default: "absolute",
|
|
66
69
|
positions: {
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Fluxbit::Config::BannerComponent
|
|
4
|
+
mattr_accessor :position, default: :top
|
|
5
|
+
mattr_accessor :color, default: :info
|
|
6
|
+
mattr_accessor :icon, default: :default
|
|
7
|
+
mattr_accessor :dismissible, default: true
|
|
8
|
+
mattr_accessor :full_width, default: true
|
|
9
|
+
|
|
10
|
+
# rubocop: disable Layout/LineLength, Metrics/BlockLength
|
|
11
|
+
mattr_accessor :styles do
|
|
12
|
+
{
|
|
13
|
+
base: "border border-b",
|
|
14
|
+
positions: {
|
|
15
|
+
top: "relative",
|
|
16
|
+
bottom: "relative",
|
|
17
|
+
sticky_top: "fixed top-0 start-0 z-50 w-full",
|
|
18
|
+
sticky_bottom: "fixed bottom-0 start-0 z-50 w-full"
|
|
19
|
+
},
|
|
20
|
+
colors: {
|
|
21
|
+
info: "bg-blue-50 text-blue-800 border-blue-200 dark:bg-gray-800 dark:text-blue-400 dark:border-blue-600",
|
|
22
|
+
success: "bg-green-50 text-green-800 border-green-200 dark:bg-gray-800 dark:text-green-400 dark:border-green-600",
|
|
23
|
+
warning: "bg-yellow-50 text-yellow-800 border-yellow-200 dark:bg-gray-800 dark:text-yellow-300 dark:border-yellow-600",
|
|
24
|
+
danger: "bg-red-50 text-red-800 border-red-200 dark:bg-gray-800 dark:text-red-400 dark:border-red-600",
|
|
25
|
+
dark: "bg-gray-50 text-gray-800 border-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:border-gray-600",
|
|
26
|
+
light: "bg-white text-gray-800 border-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:border-gray-600",
|
|
27
|
+
primary: "bg-primary-50 text-primary-800 border-primary-200 dark:bg-gray-800 dark:text-primary-400 dark:border-primary-600",
|
|
28
|
+
secondary: "bg-gray-50 text-gray-800 border-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:border-gray-600"
|
|
29
|
+
},
|
|
30
|
+
default_icons: {
|
|
31
|
+
info: "information-circle",
|
|
32
|
+
success: "check-circle",
|
|
33
|
+
warning: "exclamation-triangle",
|
|
34
|
+
danger: "exclamation-circle",
|
|
35
|
+
dark: "information-circle",
|
|
36
|
+
light: "information-circle",
|
|
37
|
+
primary: "information-circle",
|
|
38
|
+
secondary: "information-circle"
|
|
39
|
+
},
|
|
40
|
+
content_wrapper: {
|
|
41
|
+
full_width: "flex items-center justify-between w-full p-4",
|
|
42
|
+
constrained: "flex items-center justify-between max-w-screen-xl mx-auto p-4"
|
|
43
|
+
},
|
|
44
|
+
left_content: "flex items-center",
|
|
45
|
+
right_content: "flex items-center",
|
|
46
|
+
text: {
|
|
47
|
+
with_icon_or_logo: "ml-3 text-sm font-normal",
|
|
48
|
+
without_icon_or_logo: "text-sm font-normal"
|
|
49
|
+
},
|
|
50
|
+
dismiss_button: {
|
|
51
|
+
base: "flex-shrink-0 inline-flex justify-center w-7 h-7 items-center text-gray-400 hover:bg-gray-200 hover:text-gray-900 rounded-lg text-sm p-1.5 dark:hover:bg-gray-600 dark:hover:text-white",
|
|
52
|
+
with_cta: "ml-3"
|
|
53
|
+
},
|
|
54
|
+
screen_reader: "sr-only",
|
|
55
|
+
icon_default: "size-5 text-current flex-shrink-0",
|
|
56
|
+
close_icon: "w-3 h-3"
|
|
57
|
+
}
|
|
58
|
+
end
|
|
59
|
+
# rubocop: enable Layout/LineLength, Metrics/BlockLength
|
|
60
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Fluxbit::Config::BottomNavigationComponent
|
|
4
|
+
mattr_accessor :variant, default: :default
|
|
5
|
+
mattr_accessor :border, default: true
|
|
6
|
+
|
|
7
|
+
# rubocop:disable Layout/LineLength
|
|
8
|
+
mattr_accessor :styles do
|
|
9
|
+
{
|
|
10
|
+
variants: {
|
|
11
|
+
default: {
|
|
12
|
+
base: "fixed bottom-0 left-0 z-50 w-full h-16 bg-white dark:bg-gray-700",
|
|
13
|
+
base_with_button_group: "fixed bottom-0 left-0 z-50 w-full h-auto bg-white dark:bg-gray-700",
|
|
14
|
+
border: "border-t border-gray-200 dark:border-gray-600"
|
|
15
|
+
},
|
|
16
|
+
app_bar: {
|
|
17
|
+
base: "fixed z-50 w-full h-16 max-w-lg -translate-x-1/2 bg-white border border-gray-200 rounded-full bottom-4 left-1/2 dark:bg-gray-700 dark:border-gray-600",
|
|
18
|
+
base_with_button_group: "fixed z-50 w-full h-auto max-w-lg -translate-x-1/2 bg-white border border-gray-200 rounded-full bottom-4 left-1/2 dark:bg-gray-700 dark:border-gray-600",
|
|
19
|
+
border: ""
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
container: {
|
|
23
|
+
base: "grid h-full max-w-lg mx-auto font-medium",
|
|
24
|
+
base_with_button_group: "grid h-16 max-w-lg mx-auto font-medium",
|
|
25
|
+
columns: [
|
|
26
|
+
"grid-cols-2", # 2 columns (index 0)
|
|
27
|
+
"grid-cols-3", # 3 columns (index 1)
|
|
28
|
+
"grid-cols-4", # 4 columns (index 2)
|
|
29
|
+
"grid-cols-5", # 5 columns (index 3)
|
|
30
|
+
"grid-cols-6" # 6 columns (index 4)
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
item: {
|
|
34
|
+
base: "inline-flex flex-col items-center justify-center px-5 hover:bg-gray-50 dark:hover:bg-gray-800 group",
|
|
35
|
+
active: "text-blue-600 dark:text-blue-500",
|
|
36
|
+
inactive: "text-gray-500 dark:text-gray-400",
|
|
37
|
+
icon_wrapper: "w-5 h-5 mb-2",
|
|
38
|
+
icon: "w-5 h-5",
|
|
39
|
+
text: "text-sm group-hover:text-blue-600 dark:group-hover:text-blue-500",
|
|
40
|
+
sr_only: "sr-only"
|
|
41
|
+
},
|
|
42
|
+
cta_wrapper: "flex items-center justify-center",
|
|
43
|
+
cta: {
|
|
44
|
+
button: "inline-flex items-center justify-center w-10 h-10 font-medium bg-blue-600 rounded-full hover:bg-blue-700 group focus:ring-4 focus:ring-blue-300 focus:outline-none dark:focus:ring-blue-800",
|
|
45
|
+
icon: "w-4 h-4 text-white dark:text-white"
|
|
46
|
+
},
|
|
47
|
+
tooltip: {
|
|
48
|
+
base: "absolute z-10 invisible inline-block px-3 py-2 text-sm font-medium text-white transition-opacity duration-300 bg-gray-900 rounded-lg shadow-sm opacity-0 tooltip dark:bg-gray-700",
|
|
49
|
+
arrow: "tooltip-arrow"
|
|
50
|
+
},
|
|
51
|
+
pagination: {
|
|
52
|
+
container: "inline-flex items-center justify-center col-span-2",
|
|
53
|
+
button: "inline-flex items-center justify-center h-full px-5 hover:bg-gray-50 dark:hover:bg-gray-800 disabled:opacity-50 disabled:cursor-not-allowed",
|
|
54
|
+
icon: "w-3 h-3 text-gray-500 dark:text-gray-400",
|
|
55
|
+
info: "flex items-center text-sm text-gray-500 dark:text-gray-400",
|
|
56
|
+
sr_only: "sr-only"
|
|
57
|
+
},
|
|
58
|
+
button_group: {
|
|
59
|
+
container: "grid max-w-xs p-1 mx-auto my-2 bg-gray-100 rounded-lg dark:bg-gray-600",
|
|
60
|
+
grid: "grid gap-1",
|
|
61
|
+
button: "px-5 py-1.5 text-xs font-medium hover:bg-white dark:hover:bg-gray-700 rounded-lg",
|
|
62
|
+
button_active: "text-gray-900 bg-white dark:text-white dark:bg-gray-700",
|
|
63
|
+
button_inactive: "text-gray-500 dark:text-gray-400",
|
|
64
|
+
columns: [
|
|
65
|
+
"grid-cols-2", # 2 columns (index 0)
|
|
66
|
+
"grid-cols-3", # 3 columns (index 1)
|
|
67
|
+
"grid-cols-4", # 4 columns (index 2)
|
|
68
|
+
"grid-cols-5" # 5 columns (index 3)
|
|
69
|
+
]
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
end
|
|
73
|
+
# rubocop:enable Layout/LineLength
|
|
74
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Fluxbit::Config::BreadcrumbComponent
|
|
4
|
+
# rubocop: disable Layout/LineLength, Metrics/BlockLength
|
|
5
|
+
mattr_accessor :styles do
|
|
6
|
+
{
|
|
7
|
+
root: {
|
|
8
|
+
base: "",
|
|
9
|
+
list: "inline-flex items-center"
|
|
10
|
+
},
|
|
11
|
+
item: {
|
|
12
|
+
base: "group flex items-center",
|
|
13
|
+
chevron: "mx-1 h-4 w-4 text-gray-400 group-first:hidden md:mx-2",
|
|
14
|
+
icon: "mr-2 h-4 w-4",
|
|
15
|
+
click_cursor: "cursor-pointer",
|
|
16
|
+
href: {
|
|
17
|
+
on: "flex items-center text-sm font-medium text-gray-700 hover:text-gray-900 dark:text-gray-400 dark:hover:text-white",
|
|
18
|
+
off: "flex items-center text-sm font-medium text-gray-500 dark:text-gray-400"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
end
|
|
23
|
+
# rubocop: enable Layout/LineLength, Metrics/BlockLength
|
|
24
|
+
end
|
|
@@ -5,18 +5,19 @@ module Fluxbit::Config::ButtonComponent
|
|
|
5
5
|
mattr_accessor :pill, default: false
|
|
6
6
|
mattr_accessor :size, default: 1
|
|
7
7
|
mattr_accessor :as, default: :button
|
|
8
|
+
mattr_accessor :selected, default: false
|
|
8
9
|
|
|
9
10
|
# TODO: Gradient and Gradient Duotone need their outline version.
|
|
10
11
|
# rubocop: disable Layout/LineLength, Metrics/BlockLength
|
|
11
12
|
mattr_accessor :styles do
|
|
12
13
|
{
|
|
13
|
-
base: "group flex items-center justify-center
|
|
14
|
+
base: "group flex items-center justify-center text-center font-medium relative focus:z-10 focus:outline-hidden",
|
|
14
15
|
full_sized: "w-full",
|
|
15
16
|
colors: {
|
|
16
17
|
transparent: "text-slate-500 hover:text-slate-900 hover:bg-slate-100 dark:text-slate-400 dark:hover:bg-slate-700 dark:hover:text-white",
|
|
17
18
|
default: "text-white bg-blue-700 border border-transparent enabled:hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800",
|
|
18
19
|
success: "text-white bg-green-700 border border-transparent enabled:hover:bg-green-800 focus:ring-4 focus:ring-green-300 dark:bg-green-600 dark:enabled:hover:bg-green-700 dark:focus:ring-green-800",
|
|
19
|
-
|
|
20
|
+
danger: "text-white bg-red-700 border border-transparent enabled:hover:bg-red-800 focus:ring-4 focus:ring-red-300 dark:bg-red-600 dark:enabled:hover:bg-red-700 dark:focus:ring-red-900",
|
|
20
21
|
info: "text-white bg-cyan-700 border border-transparent enabled:hover:bg-cyan-800 focus:ring-4 focus:ring-cyan-300 dark:bg-cyan-600 dark:enabled:hover:bg-cyan-700 dark:focus:ring-cyan-800",
|
|
21
22
|
warning: "text-white bg-yellow-400 border border-transparent enabled:hover:bg-yellow-500 focus:ring-4 focus:ring-yellow-300 dark:focus:ring-yellow-900",
|
|
22
23
|
dark: "text-white bg-gray-800 border border-transparent enabled:hover:bg-gray-900 focus:ring-4 focus:ring-gray-300 dark:bg-gray-800 dark:enabled:hover:bg-gray-700 dark:focus:ring-gray-800 dark:border-gray-700",
|
|
@@ -25,7 +26,7 @@ module Fluxbit::Config::ButtonComponent
|
|
|
25
26
|
|
|
26
27
|
default_outline: "text-blue-700 hover:text-white border border-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-hidden focus:ring-blue-300 dark:border-blue-500 dark:text-blue-500 dark:hover:text-white dark:hover:bg-blue-500 dark:focus:ring-blue-800",
|
|
27
28
|
success_outline: "text-green-700 hover:text-white border border-green-700 hover:bg-green-800 focus:ring-4 focus:outline-hidden focus:ring-green-300 dark:border-green-500 dark:text-green-500 dark:hover:text-white dark:hover:bg-green-600 dark:focus:ring-green-800",
|
|
28
|
-
|
|
29
|
+
danger_outline: "text-red-700 hover:text-white border border-red-700 hover:bg-red-800 focus:ring-4 focus:outline-hidden focus:ring-red-300 dark:border-red-500 dark:text-red-500 dark:hover:text-white dark:hover:bg-red-600 dark:focus:ring-red-900",
|
|
29
30
|
info_outline: "text-cyan-400 hover:text-white border border-cyan-400 hover:bg-cyan-500 focus:ring-4 focus:outline-hidden focus:ring-cyan-300 dark:border-cyan-300 dark:text-cyan-300 dark:hover:text-white dark:hover:bg-cyan-400 dark:focus:ring-cyan-900",
|
|
30
31
|
warning_outline: "text-yellow-400 hover:text-white border border-yellow-400 hover:bg-yellow-500 focus:ring-4 focus:outline-hidden focus:ring-yellow-300 dark:border-yellow-300 dark:text-yellow-300 dark:hover:text-white dark:hover:bg-yellow-400 dark:focus:ring-yellow-900",
|
|
31
32
|
dark_outline: "text-gray-900 hover:text-white border border-gray-800 hover:bg-gray-900 focus:ring-4 focus:outline-hidden focus:ring-gray-300 dark:border-gray-600 dark:text-gray-400 dark:hover:text-white dark:hover:bg-gray-600 dark:focus:ring-gray-800",
|
|
@@ -33,7 +34,7 @@ module Fluxbit::Config::ButtonComponent
|
|
|
33
34
|
purple_outline: "text-purple-700 hover:text-white border border-purple-700 hover:bg-purple-800 focus:ring-4 focus:outline-hidden focus:ring-purple-300 dark:border-purple-400 dark:text-purple-400 dark:hover:text-white dark:hover:bg-purple-500 dark:focus:ring-purple-900",
|
|
34
35
|
|
|
35
36
|
info_gradient: "text-white bg-gradient-to-r from-cyan-500 via-cyan-600 to-cyan-700 enabled:hover:bg-gradient-to-br focus:ring-4 focus:ring-cyan-300 dark:focus:ring-cyan-800 ",
|
|
36
|
-
|
|
37
|
+
danger_gradient: "text-white bg-gradient-to-r from-red-400 via-red-500 to-red-600 enabled:hover:bg-gradient-to-br focus:ring-4 focus:ring-red-300 dark:focus:ring-red-800",
|
|
37
38
|
success_gradient: "text-white bg-gradient-to-r from-green-400 via-green-500 to-green-600 enabled:hover:bg-gradient-to-br focus:ring-4 focus:ring-green-300 dark:focus:ring-green-800",
|
|
38
39
|
cyan_gradient: "text-white bg-gradient-to-r from-cyan-400 via-cyan-500 to-cyan-600 enabled:hover:bg-gradient-to-br focus:ring-4 focus:ring-cyan-300 dark:focus:ring-cyan-800",
|
|
39
40
|
lime_gradient: "text-gray-900 bg-gradient-to-r from-lime-200 via-lime-400 to-lime-500 enabled:hover:bg-gradient-to-br focus:ring-4 focus:ring-lime-300 dark:focus:ring-lime-800",
|
|
@@ -50,6 +51,7 @@ module Fluxbit::Config::ButtonComponent
|
|
|
50
51
|
teal_to_lime_gradient: "text-gray-900 bg-gradient-to-r from-teal-200 to-lime-200 enabled:hover:bg-gradient-to-l enabled:hover:from-teal-200 enabled:hover:to-lime-200 enabled:hover:text-gray-900 focus:ring-4 focus:ring-lime-200 dark:focus:ring-teal-700"
|
|
51
52
|
},
|
|
52
53
|
disabled: "cursor-not-allowed opacity-50",
|
|
54
|
+
selected: "brightness-90 dark:brightness-75",
|
|
53
55
|
inner: {
|
|
54
56
|
base: "flex items-stretch items-center transition-all duration-200",
|
|
55
57
|
position: {
|