bs5 0.0.6 → 0.0.11

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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/app/components/bs5/alert_component.rb +2 -0
  3. data/app/components/bs5/badge_component.rb +2 -0
  4. data/app/components/bs5/breadcrumb_component.html.erb +9 -0
  5. data/app/components/bs5/breadcrumb_component.rb +12 -0
  6. data/app/components/bs5/button_tag_component.rb +100 -0
  7. data/app/components/bs5/button_to_component.rb +106 -0
  8. data/app/helpers/bs5/components_helper.rb +10 -13
  9. data/app/validators/style_validator.rb +2 -4
  10. data/app/views/bs5/examples/_alert.html.erb +1 -0
  11. data/app/views/bs5/examples/_breadcrumb.html.erb +2 -0
  12. data/app/views/bs5/examples/_buttons.html.erb +11 -0
  13. data/app/views/bs5/examples/_close_button.html.erb +4 -0
  14. data/app/views/bs5/examples/alert/additional_content/_example.html.erb +2 -0
  15. data/app/views/bs5/examples/alert/additional_content/snippet.html.erb +6 -0
  16. data/app/views/bs5/examples/alert/dismissable/_example.html.erb +1 -1
  17. data/app/views/bs5/examples/alert/style/snippet.html.erb +28 -0
  18. data/app/views/bs5/examples/badge/default/_example.html.erb +1 -1
  19. data/app/views/bs5/examples/badge/default/snippet.html.erb +6 -1
  20. data/app/views/bs5/examples/badge/pill/_example.html.erb +1 -1
  21. data/app/views/bs5/examples/badge/pill/snippet.html.erb +8 -1
  22. data/app/views/bs5/examples/badge/style/_example.html.erb +1 -1
  23. data/app/views/bs5/examples/badge/style/snippet.html.erb +8 -1
  24. data/app/views/bs5/examples/breadcrumb/default/_example.html.erb +2 -0
  25. data/app/views/bs5/examples/breadcrumb/default/snippet.html.erb +14 -0
  26. data/app/views/bs5/examples/buttons/button_tag/block_buttons/_example.html.erb +5 -0
  27. data/app/views/bs5/examples/buttons/button_tag/block_buttons/block_buttons.html.erb +4 -0
  28. data/app/views/bs5/examples/buttons/button_tag/block_buttons/responsive_block_buttons_1.html.erb +4 -0
  29. data/app/views/bs5/examples/buttons/button_tag/block_buttons/responsive_block_buttons_2.html.erb +4 -0
  30. data/app/views/bs5/examples/buttons/button_tag/block_buttons/responsive_block_buttons_3.html.erb +4 -0
  31. data/app/views/bs5/examples/buttons/button_tag/default/_example.html.erb +2 -0
  32. data/app/views/bs5/examples/buttons/button_tag/default/snippet.html.erb +15 -0
  33. data/app/views/bs5/examples/buttons/button_tag/outline/_example.html.erb +2 -0
  34. data/app/views/bs5/examples/buttons/button_tag/outline/snippet.html.erb +19 -0
  35. data/app/views/bs5/examples/buttons/button_tag/size/_example.html.erb +3 -0
  36. data/app/views/bs5/examples/buttons/button_tag/size/large.html.erb +3 -0
  37. data/app/views/bs5/examples/buttons/button_tag/size/small.html.erb +3 -0
  38. data/app/views/bs5/examples/buttons/button_tag/style/_example.html.erb +2 -0
  39. data/app/views/bs5/examples/buttons/button_tag/style/snippet.html.erb +19 -0
  40. data/app/views/bs5/examples/buttons/button_tag/toggle_states/_example.html.erb +2 -0
  41. data/app/views/bs5/examples/buttons/button_tag/toggle_states/snippet.html.erb +3 -0
  42. data/app/views/bs5/examples/buttons/button_to/default/_example.html.erb +2 -0
  43. data/app/views/bs5/examples/buttons/button_to/default/snippet.html.erb +11 -0
  44. data/app/views/bs5/examples/close_button/default/_example.html.erb +2 -0
  45. data/app/views/bs5/examples/close_button/default/snippet.html.erb +1 -0
  46. data/app/views/bs5/examples/close_button/disabled/_example.html.erb +2 -0
  47. data/app/views/bs5/examples/close_button/disabled/snippet.html.erb +1 -0
  48. data/app/views/bs5/examples/close_button/white/_example.html.erb +2 -0
  49. data/app/views/bs5/examples/close_button/white/snippet.html.erb +1 -0
  50. data/app/views/bs5/examples/index.html.erb +23 -4
  51. data/config/definitions.rb +31 -0
  52. data/config/locales/en.yml +12 -0
  53. data/lib/bs5/version.rb +1 -1
  54. metadata +38 -4
  55. data/app/jobs/bs5/application_job.rb +0 -6
  56. data/app/mailers/bs5/application_mailer.rb +0 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3ee72cbd5fc34edcfe4923bd3d94bc29fe00ff19de68e05ba6655ce4c62c6311
4
- data.tar.gz: 0dbd89dec2629ec881a73df2644166ec6533896646cde8cbc960fdd529c656c2
3
+ metadata.gz: 5d45e3e9d6c5303c22f72e3637abc45b8302a2834956d9213a3cbe3300320658
4
+ data.tar.gz: 0c9d8ed8656a427932ba2fae5a49bb6f8110bd0a86d7af8a0f95020ae0cafd6f
5
5
  SHA512:
6
- metadata.gz: 10ae1e04be4fbabe8dc937eae77ce0235337a504fa7c8728ee2f1f243e7a44b3ca19d5231efca55488921da9b7695e3471c72cc1ca15b7dc8edcd4ad1e830cf6
7
- data.tar.gz: 591bd085c636e1a0e575ef9c6fc1a62f399856305808012dcefc5264ebf3dd88067f81a66f2b006b26f8de199267844e90b368d902581bd40d5fec4c9c9d11c8
6
+ metadata.gz: 149b6ad2c77ad23fcef6c02d0a6e6b147dd32e0d1299807484233b207dc7280c90d3bf2fce397c02b64376478ace48bcc30aea57de654fa9ce0a6c4a715ccc7d
7
+ data.tar.gz: 59471a7a2b75588e27d203e982ae52f1b1e54498ca0e26c6776bf7b5ef34166cbd7f644a80302f6ec1034b747b34f5b144d03bca836c07f84ba5808f3dbfa999
@@ -2,6 +2,8 @@
2
2
 
3
3
  module Bs5
4
4
  class AlertComponent < ViewComponent::Base
5
+ STYLES = %i[primary secondary success danger warning info light dark].freeze
6
+
5
7
  attr_reader :style, :is_dismissable
6
8
 
7
9
  include ActiveModel::Validations
@@ -2,6 +2,8 @@
2
2
 
3
3
  module Bs5
4
4
  class BadgeComponent < ViewComponent::Base
5
+ STYLES = %i[primary secondary success danger warning info light dark].freeze
6
+
5
7
  attr_reader :text, :style
6
8
 
7
9
  include ActiveModel::Validations
@@ -0,0 +1,9 @@
1
+ <% if items.any? %>
2
+ <nav aria-label="breadcrumb">
3
+ <ol class="breadcrumb">
4
+ <% items.each do |item| %>
5
+ <li class="breadcrumb-item <%= item == items.last ? 'active' : '' %>" <%= item == items.last ? 'aria-current=page' : '' %>><%= item.content %></li>
6
+ <% end %>
7
+ </ol>
8
+ </nav>
9
+ <% end %>
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bs5
4
+ class BreadcrumbComponent < ViewComponent::Base
5
+ include ViewComponent::Slotable
6
+
7
+ with_slot :item, collection: true, class_name: 'Item'
8
+
9
+ class Item < ViewComponent::Slot
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,100 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bs5
4
+ class ButtonTagComponent < ViewComponent::Base
5
+ STYLES = %i[primary secondary success danger warning info light dark link].freeze
6
+ DEFAULT_STYLE = :primary
7
+ SIZES = { small: :sm, large: :lg }.freeze
8
+ CLASS_PREFIX = 'btn'
9
+
10
+ attr_reader :content_or_options, :size
11
+
12
+ include ActiveModel::Validations
13
+ validates :style, style: true
14
+ validates :size, inclusion: { in: SIZES.keys, valid_sizes: SIZES.keys.to_sentence, allow_nil: true }
15
+
16
+ def initialize(content_or_options = nil, options = nil)
17
+ if content_or_options.is_a? Hash
18
+ self.options = content_or_options
19
+ else
20
+ @content_or_options = content_or_options
21
+ self.options = options
22
+ end
23
+
24
+ extract_custom_options
25
+ merge_default_options
26
+ end
27
+
28
+ def before_render
29
+ raise errors.full_messages.to_sentence if invalid?
30
+ end
31
+
32
+ def call
33
+ button_tag(content || content_or_options, options)
34
+ end
35
+
36
+ private
37
+
38
+ def options=(value)
39
+ @options = Hash(value).symbolize_keys!
40
+ end
41
+
42
+ def options
43
+ @options.empty? ? nil : @options
44
+ end
45
+
46
+ def extract_custom_options
47
+ extract_style
48
+ extract_outline
49
+ extract_size
50
+ end
51
+
52
+ def extract_style
53
+ @style = @options.delete(:style)
54
+ end
55
+
56
+ def extract_outline
57
+ @outline = @options.delete(:outline)
58
+ end
59
+
60
+ def extract_size
61
+ @size = @options.delete(:size)
62
+ end
63
+
64
+ def merge_default_options
65
+ @options.deep_merge!(default_options) do |_key, this_val, other_val|
66
+ [this_val, other_val].join(' ').strip
67
+ end
68
+ end
69
+
70
+ def default_options
71
+ { class: button_class }
72
+ end
73
+
74
+ def button_class
75
+ [CLASS_PREFIX, contextual_class, size_class].compact.join(' ')
76
+ end
77
+
78
+ def contextual_class
79
+ [CLASS_PREFIX, outline? ? 'outline' : nil, style].compact.join('-')
80
+ end
81
+
82
+ def size_class
83
+ return unless size?
84
+
85
+ [CLASS_PREFIX, SIZES[size]].join('-')
86
+ end
87
+
88
+ def style
89
+ (@style || DEFAULT_STYLE).to_sym
90
+ end
91
+
92
+ def outline?
93
+ !!@outline
94
+ end
95
+
96
+ def size?
97
+ !!size
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,106 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bs5
4
+ class ButtonToComponent < ViewComponent::Base
5
+ STYLES = %i[primary secondary success danger warning info light dark link].freeze
6
+ DEFAULT_STYLE = :primary
7
+ SIZES = { small: :sm, large: :lg }.freeze
8
+ CLASS_PREFIX = 'btn'
9
+
10
+ attr_reader :size
11
+
12
+ include ActiveModel::Validations
13
+ validates :style, style: true
14
+ validates :size, inclusion: { in: SIZES.keys, valid_sizes: SIZES.keys.to_sentence, allow_nil: true }
15
+
16
+ def initialize(name = nil, options = nil, html_options = nil)
17
+ @name = name
18
+ @options = options
19
+ @html_options = html_options
20
+
21
+ if @name.is_a? Hash
22
+ self.button_to_options = @name
23
+ elsif @options.is_a? Hash
24
+ self.button_to_options = @options
25
+ else
26
+ @html_options ||= {}
27
+ self.button_to_options = @html_options
28
+ end
29
+
30
+ extract_custom_options
31
+ merge_default_options
32
+ end
33
+
34
+ def before_render
35
+ raise errors.full_messages.to_sentence if invalid?
36
+ end
37
+
38
+ def call
39
+ if content
40
+ button_to(@name, @options, @html_options) { content }
41
+ else
42
+ button_to(@name, @options, @html_options)
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ def button_to_options=(hash)
49
+ @button_to_options = hash.symbolize_keys!
50
+ end
51
+
52
+ def extract_custom_options
53
+ extract_style
54
+ extract_outline
55
+ extract_size
56
+ end
57
+
58
+ def extract_style
59
+ @style = @button_to_options.delete(:style)
60
+ end
61
+
62
+ def extract_outline
63
+ @outline = @button_to_options.delete(:outline)
64
+ end
65
+
66
+ def extract_size
67
+ @size = @button_to_options.delete(:size)
68
+ end
69
+
70
+ def merge_default_options
71
+ @button_to_options.deep_merge!(default_options) do |_key, this_val, other_val|
72
+ [this_val, other_val].join(' ').strip
73
+ end
74
+ end
75
+
76
+ def default_options
77
+ { class: button_class }
78
+ end
79
+
80
+ def button_class
81
+ [CLASS_PREFIX, contextual_class, size_class].compact.join(' ')
82
+ end
83
+
84
+ def contextual_class
85
+ [CLASS_PREFIX, outline? ? 'outline' : nil, style].compact.join('-')
86
+ end
87
+
88
+ def size_class
89
+ return unless size?
90
+
91
+ [CLASS_PREFIX, SIZES[size]].join('-')
92
+ end
93
+
94
+ def style
95
+ (@style || DEFAULT_STYLE).to_sym
96
+ end
97
+
98
+ def outline?
99
+ !!@outline
100
+ end
101
+
102
+ def size?
103
+ !!size
104
+ end
105
+ end
106
+ end
@@ -2,24 +2,21 @@
2
2
 
3
3
  module Bs5
4
4
  module ComponentsHelper
5
- def bs5_accordion(*args)
6
- render AccordionComponent.new(*args) do |accordion|
7
- yield accordion if block_given?
8
- end
9
- end
5
+ COMPONENTS = %w[accordion alert badge close_button breadcrumb button_tag button_to].freeze
10
6
 
11
- def bs5_alert(*args)
12
- render AlertComponent.new(*args) do
13
- yield if block_given?
7
+ COMPONENTS.each do |name|
8
+ define_method("bs5_#{name}") do |*args, &block|
9
+ clazz = "Bs5::#{name.classify}Component".constantize
10
+ render_component(clazz, *args, &block)
14
11
  end
15
12
  end
16
13
 
17
- def bs5_badge(*args)
18
- render BadgeComponent.new(*args)
19
- end
14
+ private
20
15
 
21
- def bs5_close_button(*args)
22
- render CloseButtonComponent.new(*args)
16
+ def render_component(component_clazz, *args)
17
+ render component_clazz.new(*args) do |c|
18
+ yield c if block_given?
19
+ end
23
20
  end
24
21
  end
25
22
  end
@@ -1,11 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class StyleValidator < ActiveModel::EachValidator
4
- STYLES = %i[primary secondary success danger warning info light dark].freeze
5
-
6
4
  def validate_each(record, attribute, value)
7
- return if value.in?(STYLES)
5
+ return if value.in?(valid_styles = record.class::STYLES)
8
6
 
9
- record.errors.add(attribute, :inclusion, valid_styles: STYLES.to_sentence)
7
+ record.errors.add(attribute, :inclusion, valid_styles: valid_styles.to_sentence)
10
8
  end
11
9
  end
@@ -1,4 +1,5 @@
1
1
  <h2>Alert</h2>
2
2
  <%= render 'bs5/examples/alert/default/example' %>
3
3
  <%= render 'bs5/examples/alert/style/example' %>
4
+ <%= render 'bs5/examples/alert/additional_content/example' %>
4
5
  <%= render 'bs5/examples/alert/dismissable/example' %>
@@ -0,0 +1,2 @@
1
+ <h2>Breadcrumb</h2>
2
+ <%= render 'bs5/examples/breadcrumb/default/example' %>
@@ -0,0 +1,11 @@
1
+ <h2>Buttons</h2>
2
+ <h3>Decorating Rails' <code>button_tag</code></h3>
3
+ <%= render 'bs5/examples/buttons/button_tag/default/example' %>
4
+ <%= render 'bs5/examples/buttons/button_tag/style/example' %>
5
+ <%= render 'bs5/examples/buttons/button_tag/outline/example' %>
6
+ <%= render 'bs5/examples/buttons/button_tag/size/example' %>
7
+ <%= render 'bs5/examples/buttons/button_tag/block_buttons/example' %>
8
+ <%= render 'bs5/examples/buttons/button_tag/toggle_states/example' %>
9
+
10
+ <h3>Decorating Rails' <code>button_to</code></h3>
11
+ <%= render 'bs5/examples/buttons/button_to/default/example' %>
@@ -0,0 +1,4 @@
1
+ <h2>Close button</h2>
2
+ <%= render 'bs5/examples/close_button/default/example' %>
3
+ <%= render 'bs5/examples/close_button/disabled/example' %>
4
+ <%= render 'bs5/examples/close_button/white/example' %>
@@ -0,0 +1,2 @@
1
+ <h3>Additional content</h3>
2
+ <%= bs5_example(snippet: 'alert/additional_content/snippet') %>
@@ -0,0 +1,6 @@
1
+ <%= bs5_alert(style: :success) do %>
2
+ <h4 class="alert-heading">Well done!</h4>
3
+ <p>Aww yeah, you successfully read this important alert message. This example text is going to run a bit longer so that you can see how spacing within an alert works with this kind of content.</p>
4
+ <hr>
5
+ <p class="mb-0">Whenever you need to, be sure to use margin utilities to keep things nice and tidy.</p>
6
+ <%- end %>
@@ -1,2 +1,2 @@
1
- <h3>Dismissable</h3>
1
+ <h3>Dismissing</h3>
2
2
  <%= bs5_example(snippet: 'alert/dismissable/snippet') %>
@@ -1,3 +1,31 @@
1
+ <%= bs5_alert(style: :primary) do %>
2
+ A simple primary alert—check it out!
3
+ <%- end %>
4
+
5
+ <%= bs5_alert(style: :secondary) do %>
6
+ A simple secondary alert—check it out!
7
+ <%- end %>
8
+
9
+ <%= bs5_alert(style: :success) do %>
10
+ A simple success alert—check it out!
11
+ <%- end %>
12
+
1
13
  <%= bs5_alert(style: :danger) do %>
2
14
  A simple danger alert—check it out!
15
+ <%- end %>
16
+
17
+ <%= bs5_alert(style: :warning) do %>
18
+ A simple warning alert—check it out!
19
+ <%- end %>
20
+
21
+ <%= bs5_alert(style: :info) do %>
22
+ A simple info alert—check it out!
23
+ <%- end %>
24
+
25
+ <%= bs5_alert(style: :light) do %>
26
+ A simple light alert—check it out!
27
+ <%- end %>
28
+
29
+ <%= bs5_alert(style: :dark) do %>
30
+ A simple dark alert—check it out!
3
31
  <%- end %>
@@ -1,2 +1,2 @@
1
- <h3>Default</h3>
1
+ <h3>Example</h3>
2
2
  <%= bs5_example(snippet: 'badge/default/snippet') %>
@@ -1 +1,6 @@
1
- <%= bs5_badge(text: 'New') %>
1
+ <h1>Example heading <%= bs5_badge(text: 'New') %></h1>
2
+ <h2>Example heading <%= bs5_badge(text: 'New') %></h2>
3
+ <h3>Example heading <%= bs5_badge(text: 'New') %></h3>
4
+ <h4>Example heading <%= bs5_badge(text: 'New') %></h4>
5
+ <h5>Example heading <%= bs5_badge(text: 'New') %></h5>
6
+ <h6>Example heading <%= bs5_badge(text: 'New') %></h6>
@@ -1,2 +1,2 @@
1
- <h3>Pill</h3>
1
+ <h3>Pill badges</h3>
2
2
  <%= bs5_example(snippet: 'badge/pill/snippet') %>
@@ -1 +1,8 @@
1
- <%= bs5_badge(text: 'Danger', style: :danger, pill: true) %>
1
+ <%= bs5_badge(text: 'Primary', style: :primary, pill: true) %>
2
+ <%= bs5_badge(text: 'Secondary', style: :secondary, pill: true) %>
3
+ <%= bs5_badge(text: 'Sucess', style: :success, pill: true) %>
4
+ <%= bs5_badge(text: 'Danger', style: :danger, pill: true) %>
5
+ <%= bs5_badge(text: 'Warning', style: :warning, pill: true) %>
6
+ <%= bs5_badge(text: 'Info', style: :info, pill: true) %>
7
+ <%= bs5_badge(text: 'Light', style: :light, pill: true) %>
8
+ <%= bs5_badge(text: 'Dark', style: :dark, pill: true) %>
@@ -1,2 +1,2 @@
1
- <h3>Style</h3>
1
+ <h3>Background colors</h3>
2
2
  <%= bs5_example(snippet: 'badge/style/snippet') %>
@@ -1 +1,8 @@
1
- <%= bs5_badge(text: 'Warning', style: :warning) %>
1
+ <%= bs5_badge(text: 'Primary', style: :primary) %>
2
+ <%= bs5_badge(text: 'Secondary', style: :secondary) %>
3
+ <%= bs5_badge(text: 'Success', style: :success) %>
4
+ <%= bs5_badge(text: 'Danger', style: :danger) %>
5
+ <%= bs5_badge(text: 'Warning', style: :warning) %>
6
+ <%= bs5_badge(text: 'Info', style: :info) %>
7
+ <%= bs5_badge(text: 'Light', style: :light) %>
8
+ <%= bs5_badge(text: 'Dark', style: :dark) %>
@@ -0,0 +1,2 @@
1
+ <h3>Example</h3>
2
+ <%= bs5_example(snippet: 'breadcrumb/default/snippet') %>
@@ -0,0 +1,14 @@
1
+ <%= bs5_breadcrumb do |breadcrumb| %>
2
+ <% breadcrumb.slot(:item) do %>Home<% end %>
3
+ <%- end %>
4
+
5
+ <%= bs5_breadcrumb do |breadcrumb| %>
6
+ <% breadcrumb.slot(:item) do %><a href="#">Home</a><% end %>
7
+ <% breadcrumb.slot(:item) do %>Library<% end %>
8
+ <%- end %>
9
+
10
+ <%= bs5_breadcrumb do |breadcrumb| %>
11
+ <% breadcrumb.slot(:item) do %><a href="#">Home</a><% end %>
12
+ <% breadcrumb.slot(:item) do %><a href="#">Library</a><% end %>
13
+ <% breadcrumb.slot(:item) do %>Data<% end %>
14
+ <%- end %>
@@ -0,0 +1,5 @@
1
+ <h3>Block buttons</h3>
2
+ <%= bs5_example(snippet: 'buttons/button_tag/block_buttons/block_buttons') %>
3
+ <%= bs5_example(snippet: 'buttons/button_tag/block_buttons/responsive_block_buttons_1') %>
4
+ <%= bs5_example(snippet: 'buttons/button_tag/block_buttons/responsive_block_buttons_2') %>
5
+ <%= bs5_example(snippet: 'buttons/button_tag/block_buttons/responsive_block_buttons_3') %>
@@ -0,0 +1,4 @@
1
+ <div class="d-grid gap-2">
2
+ <%= bs5_button_tag %>
3
+ <%= bs5_button_tag %>
4
+ </div>
@@ -0,0 +1,4 @@
1
+ <div class="d-grid gap-2 d-md-block">
2
+ <%= bs5_button_tag %>
3
+ <%= bs5_button_tag %>
4
+ </div>
@@ -0,0 +1,4 @@
1
+ <div class="d-grid gap-2 col-6 mx-auto">
2
+ <%= bs5_button_tag %>
3
+ <%= bs5_button_tag %>
4
+ </div>
@@ -0,0 +1,4 @@
1
+ <div class="d-grid gap-2 d-md-flex justify-content-md-end">
2
+ <%= bs5_button_tag('Button', class: 'mr-md-2') %>
3
+ <%= bs5_button_tag %>
4
+ </div>
@@ -0,0 +1,2 @@
1
+ <h3>Example</h3>
2
+ <%= bs5_example(snippet: 'buttons/button_tag/default/snippet') %>
@@ -0,0 +1,15 @@
1
+ <%= bs5_button_tag %>
2
+
3
+ <%= bs5_button_tag 'Reset', type: 'reset' %>
4
+
5
+ <%= bs5_button_tag 'Button', type: 'button' %>
6
+
7
+ <%= bs5_button_tag 'Reset', type: 'reset', disabled: true %>
8
+
9
+ <%= bs5_button_tag(type: 'button') do %>
10
+ <%= content_tag(:strong, 'Ask me!') %>
11
+ <% end %>
12
+
13
+ <%= bs5_button_tag 'Save', data: { confirm: 'Are you sure?' } %>
14
+
15
+ <%= bs5_button_tag 'Checkout', data: { disable_with: 'Please wait...' } %>
@@ -0,0 +1,2 @@
1
+ <h3>Outline</h3>
2
+ <%= bs5_example(snippet: 'buttons/button_tag/outline/snippet') %>
@@ -0,0 +1,19 @@
1
+ <%= bs5_button_tag 'Primary', style: :primary, outline: true %>
2
+
3
+ <%= bs5_button_tag 'Secondary', style: :secondary, outline: true %>
4
+
5
+ <%= bs5_button_tag 'Success', style: :success, outline: true %>
6
+
7
+ <%= bs5_button_tag 'Danger', style: :danger, outline: true %>
8
+
9
+ <%= bs5_button_tag(style: :warning, outline: true, type: 'button') do %>
10
+ <%= content_tag(:strong, 'Warning') %>
11
+ <% end %>
12
+
13
+ <%= bs5_button_tag 'Info', style: :info, outline: true %>
14
+
15
+ <%= bs5_button_tag 'Light', style: :light, outline: true %>
16
+
17
+ <%= bs5_button_tag 'Dark', style: :dark, outline: true %>
18
+
19
+ <%= bs5_button_tag 'Link', style: :link, outline: true %>
@@ -0,0 +1,3 @@
1
+ <h3>Sizes</h3>
2
+ <%= bs5_example(snippet: 'buttons/button_tag/size/large') %>
3
+ <%= bs5_example(snippet: 'buttons/button_tag/size/small') %>
@@ -0,0 +1,3 @@
1
+ <%= bs5_button_tag 'Large button', style: :primary, size: :large %>
2
+
3
+ <%= bs5_button_tag 'Large button', style: :secondary, size: :large %>
@@ -0,0 +1,3 @@
1
+ <%= bs5_button_tag 'Small button', style: :primary, size: :small %>
2
+
3
+ <%= bs5_button_tag 'Small button', style: :secondary, size: :small %>
@@ -0,0 +1,2 @@
1
+ <h3>Style</h3>
2
+ <%= bs5_example(snippet: 'buttons/button_tag/style/snippet') %>
@@ -0,0 +1,19 @@
1
+ <%= bs5_button_tag 'Primary', style: :primary %>
2
+
3
+ <%= bs5_button_tag 'Secondary', style: :secondary %>
4
+
5
+ <%= bs5_button_tag 'Success', style: :success %>
6
+
7
+ <%= bs5_button_tag 'Danger', style: :danger %>
8
+
9
+ <%= bs5_button_tag(style: :warning, type: 'button') do %>
10
+ <%= content_tag(:strong, 'Warning') %>
11
+ <% end %>
12
+
13
+ <%= bs5_button_tag 'Info', style: :info %>
14
+
15
+ <%= bs5_button_tag 'Light', style: :light %>
16
+
17
+ <%= bs5_button_tag 'Dark', style: :dark %>
18
+
19
+ <%= bs5_button_tag 'Link', style: :link %>
@@ -0,0 +1,2 @@
1
+ <h3>Toggle states</h3>
2
+ <%= bs5_example(snippet: 'buttons/button_tag/toggle_states/snippet') %>
@@ -0,0 +1,3 @@
1
+ <%= bs5_button_tag('Toggle button', data: { toggle: 'button' }, autocomplete: 'off') %>
2
+ <%= bs5_button_tag('Active toggle button', class: 'active', data: { toggle: 'button' }, autocomplete: 'off', aria: { pressed: true }) %>
3
+ <%= bs5_button_tag('Disabled toggle button', data: { toggle: 'button' }, autocomplete: 'off', disabled: true) %>
@@ -0,0 +1,2 @@
1
+ <h3>Example</h3>
2
+ <%= bs5_example(snippet: 'buttons/button_to/default/snippet') %>
@@ -0,0 +1,11 @@
1
+ <div class="d-grid gap-2 d-md-flex">
2
+ <%= bs5_button_to('New', 'http://www.example.com') %>
3
+
4
+ <%= bs5_button_to('http://www.example.com', style: :success) do %>
5
+ Make happy <strong>John Doe</strong>
6
+ <%- end %>
7
+
8
+ <%= bs5_button_to('New', 'http://www.example.com', style: :dark, outline: true, size: :large, form_class: 'new-thing') %>
9
+
10
+ <%= bs5_button_to('Destroy', 'http://www.example.com', style: :danger, method: "delete", remote: true, data: { confirm: 'Are you sure?', disable_with: 'loading...' }) %>
11
+ </div>
@@ -0,0 +1,2 @@
1
+ <h3>Default</h3>
2
+ <%= bs5_example(snippet: 'close_button/default/snippet') %>
@@ -0,0 +1 @@
1
+ <%= bs5_close_button %>
@@ -0,0 +1,2 @@
1
+ <h3>Disabled</h3>
2
+ <%= bs5_example(snippet: 'close_button/disabled/snippet') %>
@@ -0,0 +1 @@
1
+ <%= bs5_close_button(disabled: true) %>
@@ -0,0 +1,2 @@
1
+ <h3>White</h3>
2
+ <%= bs5_example(snippet: 'close_button/white/snippet') %>
@@ -0,0 +1 @@
1
+ <%= bs5_close_button(white: true) %>
@@ -1,4 +1,23 @@
1
- <h1>Bootstrap Examples</h1>
2
- <%= render 'accordion' %>
3
- <%= render 'alert' %>
4
- <%= render 'badge' %>
1
+ <div class="row">
2
+ <div class="col">
3
+ <div class="sticky-top">
4
+ <ul class="nav flex-column">
5
+ <li>Accordion</li>
6
+ <li>Alert</li>
7
+ <li>Badge</li>
8
+ <li>Close button</li>
9
+ <li>Breadcrumb</li>
10
+ <li>Buttons</li>
11
+ </ul>
12
+ </div>
13
+ </div>
14
+ <div class="col-10">
15
+ <h1>Bootstrap Examples</h1>
16
+ <%= render 'accordion' %>
17
+ <%= render 'alert' %>
18
+ <%= render 'badge' %>
19
+ <%= render 'close_button' %>
20
+ <%= render 'breadcrumb' %>
21
+ <%= render 'buttons' %>
22
+ </div>
23
+ </div>
@@ -0,0 +1,31 @@
1
+ # The following comments fill some of the gaps in Solargraph's understanding of
2
+ # Rails apps. Since they're all in YARD, they get mapped in Solargraph but
3
+ # ignored at runtime.
4
+ #
5
+ # You can put this file anywhere in the project, as long as it gets included in
6
+ # the workspace maps. It's recommended that you keep it in a standalone file
7
+ # instead of pasting it into an existing one.
8
+ #
9
+ # @!parse
10
+ # class ActionController::Base
11
+ # include ActionController::MimeResponds
12
+ # extend ActiveSupport::Callbacks::ClassMethods
13
+ # extend AbstractController::Callbacks::ClassMethods
14
+ # end
15
+ # class ActiveRecord::Base
16
+ # extend ActiveRecord::QueryMethods
17
+ # extend ActiveRecord::FinderMethods
18
+ # extend ActiveRecord::Associations::ClassMethods
19
+ # extend ActiveRecord::Inheritance::ClassMethods
20
+ # include ActiveRecord::Persistence
21
+ # end
22
+ # @!override ActiveRecord::FinderMethods#find
23
+ # @overload find(id)
24
+ # @param id [Integer]
25
+ # @return [self]
26
+ # @overload find(list)
27
+ # @param list [Array]
28
+ # @return [Array<self>]
29
+ # @overload find(*args)
30
+ # @return [Array<self>]
31
+ # @return [self, Array<self>]
@@ -6,3 +6,15 @@ en:
6
6
  attributes:
7
7
  style:
8
8
  inclusion: "is not included in the list: %{valid_styles}."
9
+ bs5/button_tag_component:
10
+ attributes:
11
+ style:
12
+ inclusion: "is not included in the list: %{valid_styles}."
13
+ size:
14
+ inclusion: "is not included in the list: %{valid_sizes}."
15
+ bs5/button_to_component:
16
+ attributes:
17
+ style:
18
+ inclusion: "is not included in the list: %{valid_styles}."
19
+ size:
20
+ inclusion: "is not included in the list: %{valid_sizes}."
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bs5
4
- VERSION = '0.0.6'
4
+ VERSION = '0.0.11'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bs5
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Patrick Baselier
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-21 00:00:00.000000000 Z
11
+ date: 2020-11-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -132,6 +132,10 @@ files:
132
132
  - app/components/bs5/alert_component.rb
133
133
  - app/components/bs5/badge_component.html.erb
134
134
  - app/components/bs5/badge_component.rb
135
+ - app/components/bs5/breadcrumb_component.html.erb
136
+ - app/components/bs5/breadcrumb_component.rb
137
+ - app/components/bs5/button_tag_component.rb
138
+ - app/components/bs5/button_to_component.rb
135
139
  - app/components/bs5/close_button_component.html.erb
136
140
  - app/components/bs5/close_button_component.rb
137
141
  - app/components/bs5/example_component.html.erb
@@ -141,17 +145,20 @@ files:
141
145
  - app/helpers/bs5/application_helper.rb
142
146
  - app/helpers/bs5/components_helper.rb
143
147
  - app/helpers/bs5/examples_helper.rb
144
- - app/jobs/bs5/application_job.rb
145
- - app/mailers/bs5/application_mailer.rb
146
148
  - app/models/bs5/application_record.rb
147
149
  - app/validators/style_validator.rb
148
150
  - app/views/bs5/examples/_accordion.html.erb
149
151
  - app/views/bs5/examples/_alert.html.erb
150
152
  - app/views/bs5/examples/_badge.html.erb
153
+ - app/views/bs5/examples/_breadcrumb.html.erb
154
+ - app/views/bs5/examples/_buttons.html.erb
155
+ - app/views/bs5/examples/_close_button.html.erb
151
156
  - app/views/bs5/examples/accordion/default/_example.html.erb
152
157
  - app/views/bs5/examples/accordion/default/snippet.html.erb
153
158
  - app/views/bs5/examples/accordion/flush/_example.html.erb
154
159
  - app/views/bs5/examples/accordion/flush/snippet.html.erb
160
+ - app/views/bs5/examples/alert/additional_content/_example.html.erb
161
+ - app/views/bs5/examples/alert/additional_content/snippet.html.erb
155
162
  - app/views/bs5/examples/alert/default/_example.html.erb
156
163
  - app/views/bs5/examples/alert/default/snippet.html.erb
157
164
  - app/views/bs5/examples/alert/dismissable/_example.html.erb
@@ -164,8 +171,35 @@ files:
164
171
  - app/views/bs5/examples/badge/pill/snippet.html.erb
165
172
  - app/views/bs5/examples/badge/style/_example.html.erb
166
173
  - app/views/bs5/examples/badge/style/snippet.html.erb
174
+ - app/views/bs5/examples/breadcrumb/default/_example.html.erb
175
+ - app/views/bs5/examples/breadcrumb/default/snippet.html.erb
176
+ - app/views/bs5/examples/buttons/button_tag/block_buttons/_example.html.erb
177
+ - app/views/bs5/examples/buttons/button_tag/block_buttons/block_buttons.html.erb
178
+ - app/views/bs5/examples/buttons/button_tag/block_buttons/responsive_block_buttons_1.html.erb
179
+ - app/views/bs5/examples/buttons/button_tag/block_buttons/responsive_block_buttons_2.html.erb
180
+ - app/views/bs5/examples/buttons/button_tag/block_buttons/responsive_block_buttons_3.html.erb
181
+ - app/views/bs5/examples/buttons/button_tag/default/_example.html.erb
182
+ - app/views/bs5/examples/buttons/button_tag/default/snippet.html.erb
183
+ - app/views/bs5/examples/buttons/button_tag/outline/_example.html.erb
184
+ - app/views/bs5/examples/buttons/button_tag/outline/snippet.html.erb
185
+ - app/views/bs5/examples/buttons/button_tag/size/_example.html.erb
186
+ - app/views/bs5/examples/buttons/button_tag/size/large.html.erb
187
+ - app/views/bs5/examples/buttons/button_tag/size/small.html.erb
188
+ - app/views/bs5/examples/buttons/button_tag/style/_example.html.erb
189
+ - app/views/bs5/examples/buttons/button_tag/style/snippet.html.erb
190
+ - app/views/bs5/examples/buttons/button_tag/toggle_states/_example.html.erb
191
+ - app/views/bs5/examples/buttons/button_tag/toggle_states/snippet.html.erb
192
+ - app/views/bs5/examples/buttons/button_to/default/_example.html.erb
193
+ - app/views/bs5/examples/buttons/button_to/default/snippet.html.erb
194
+ - app/views/bs5/examples/close_button/default/_example.html.erb
195
+ - app/views/bs5/examples/close_button/default/snippet.html.erb
196
+ - app/views/bs5/examples/close_button/disabled/_example.html.erb
197
+ - app/views/bs5/examples/close_button/disabled/snippet.html.erb
198
+ - app/views/bs5/examples/close_button/white/_example.html.erb
199
+ - app/views/bs5/examples/close_button/white/snippet.html.erb
167
200
  - app/views/bs5/examples/index.html.erb
168
201
  - app/views/layouts/bs5/application.html.erb
202
+ - config/definitions.rb
169
203
  - config/locales/en.yml
170
204
  - config/routes.rb
171
205
  - lib/bs5.rb
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Bs5
4
- class ApplicationJob < ActiveJob::Base
5
- end
6
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Bs5
4
- class ApplicationMailer < ActionMailer::Base
5
- default from: 'from@example.com'
6
- layout 'mailer'
7
- end
8
- end