stimulus_plumbers 0.3.1 → 0.3.3

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 (62) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +27 -0
  3. data/README.md +3 -1
  4. data/app/assets/javascripts/stimulus-plumbers/stimulus-plumbers-controllers.es.js +78 -52
  5. data/app/assets/javascripts/stimulus-plumbers/stimulus-plumbers-controllers.umd.js +1 -1
  6. data/app/assets/stylesheets/stimulus_plumbers/tokens.css +13 -6
  7. data/lib/stimulus_plumbers/components/action_list/item.rb +13 -10
  8. data/lib/stimulus_plumbers/components/action_list/section.rb +7 -1
  9. data/lib/stimulus_plumbers/components/action_list.rb +14 -8
  10. data/lib/stimulus_plumbers/components/avatar.rb +11 -5
  11. data/lib/stimulus_plumbers/components/button/group.rb +7 -1
  12. data/lib/stimulus_plumbers/components/button.rb +48 -10
  13. data/lib/stimulus_plumbers/components/calendar/month/turbo/days_of_month.rb +9 -5
  14. data/lib/stimulus_plumbers/components/calendar/month/turbo/days_of_week.rb +7 -3
  15. data/lib/stimulus_plumbers/components/calendar/month/turbo.rb +7 -3
  16. data/lib/stimulus_plumbers/components/calendar.rb +4 -1
  17. data/lib/stimulus_plumbers/components/card/section.rb +7 -1
  18. data/lib/stimulus_plumbers/components/card.rb +11 -5
  19. data/lib/stimulus_plumbers/components/combobox/date.rb +7 -3
  20. data/lib/stimulus_plumbers/components/combobox/dropdown.rb +7 -1
  21. data/lib/stimulus_plumbers/components/combobox/options/option.rb +7 -1
  22. data/lib/stimulus_plumbers/components/combobox/options/option_group.rb +7 -1
  23. data/lib/stimulus_plumbers/components/combobox/options.rb +9 -5
  24. data/lib/stimulus_plumbers/components/combobox/popover.rb +30 -7
  25. data/lib/stimulus_plumbers/components/combobox/time/drum.rb +7 -1
  26. data/lib/stimulus_plumbers/components/combobox/time.rb +7 -3
  27. data/lib/stimulus_plumbers/components/combobox/trigger.rb +50 -7
  28. data/lib/stimulus_plumbers/components/combobox/{autocomplete.rb → typeahead.rb} +7 -5
  29. data/lib/stimulus_plumbers/components/combobox.rb +10 -6
  30. data/lib/stimulus_plumbers/components/date_picker/navigation.rb +1 -1
  31. data/lib/stimulus_plumbers/components/date_picker/navigator.rb +7 -15
  32. data/lib/stimulus_plumbers/components/divider.rb +23 -3
  33. data/lib/stimulus_plumbers/components/icon.rb +6 -16
  34. data/lib/stimulus_plumbers/components/input_group.rb +29 -0
  35. data/lib/stimulus_plumbers/components/popover.rb +7 -3
  36. data/lib/stimulus_plumbers/form/builder.rb +1 -1
  37. data/lib/stimulus_plumbers/form/fields/inputs/datetime.rb +24 -12
  38. data/lib/stimulus_plumbers/form/fields/inputs/password.rb +3 -3
  39. data/lib/stimulus_plumbers/form/fields/inputs/search.rb +10 -10
  40. data/lib/stimulus_plumbers/form/fields/inputs/select/grouped.rb +21 -17
  41. data/lib/stimulus_plumbers/form/fields/inputs/select/timezone.rb +7 -5
  42. data/lib/stimulus_plumbers/form/fields/inputs/select/weekday.rb +7 -9
  43. data/lib/stimulus_plumbers/form/fields/inputs/select.rb +40 -28
  44. data/lib/stimulus_plumbers/helpers/action_list_helper.rb +6 -6
  45. data/lib/stimulus_plumbers/helpers/avatar_helper.rb +2 -2
  46. data/lib/stimulus_plumbers/helpers/button_helper.rb +4 -8
  47. data/lib/stimulus_plumbers/helpers/calendar_helper.rb +13 -10
  48. data/lib/stimulus_plumbers/helpers/calendar_turbo_helper.rb +2 -16
  49. data/lib/stimulus_plumbers/helpers/card_helper.rb +4 -4
  50. data/lib/stimulus_plumbers/helpers/combobox_helper.rb +36 -23
  51. data/lib/stimulus_plumbers/helpers/divider_helper.rb +2 -2
  52. data/lib/stimulus_plumbers/helpers/popover_helper.rb +2 -2
  53. data/lib/stimulus_plumbers/themes/base.rb +15 -16
  54. data/lib/stimulus_plumbers/themes/icons/external.rb +60 -0
  55. data/lib/stimulus_plumbers/themes/icons/registry.rb +36 -0
  56. data/lib/stimulus_plumbers/themes/schema/icon.rb +57 -15
  57. data/lib/stimulus_plumbers/themes/schema/ranges.rb +2 -2
  58. data/lib/stimulus_plumbers/themes/schema.rb +59 -55
  59. data/lib/stimulus_plumbers/version.rb +1 -1
  60. data/lib/stimulus_plumbers.rb +2 -2
  61. metadata +5 -3
  62. data/lib/stimulus_plumbers/form/fields/input_group.rb +0 -25
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rexml/document"
4
+ require "stimulus_plumbers/themes/schema/icon"
5
+
6
+ module StimulusPlumbers
7
+ module Themes
8
+ module Icons
9
+ module External
10
+ SVG_RENAME = Schema::Icon::SVG_ATTR_NAMES.invert.freeze
11
+ ELEMENT_RENAME = Schema::Icon::ELEMENT_ATTR_NAMES.invert.freeze
12
+
13
+ def include?(key)
14
+ File.exist?(svg_path(key))
15
+ end
16
+
17
+ def fetch(key)
18
+ file = svg_path(key)
19
+ parse_svg(key, File.read(file)) if File.exist?(file)
20
+ end
21
+
22
+ private
23
+
24
+ def svg_defaults(_key)
25
+ {}
26
+ end
27
+
28
+ def parse_svg(key, content)
29
+ doc = REXML::Document.new(content)
30
+ root = doc.root
31
+
32
+ result = svg_defaults(key)
33
+ root.attributes.each_attribute do |attr|
34
+ result[SVG_RENAME.fetch(attr.name, attr.name.to_sym)] = attr.value
35
+ end
36
+
37
+ elements = parse_elements(root)
38
+ return if elements.empty?
39
+
40
+ result[:elements] = elements
41
+ result
42
+ end
43
+
44
+ def parse_elements(node)
45
+ node.elements.flat_map do |el|
46
+ el.name == "g" ? parse_elements(el) : [parse_element(el)].compact
47
+ end
48
+ end
49
+
50
+ def parse_element(node)
51
+ attrs = { tag: node.name.to_sym }
52
+ node.attributes.each_attribute do |attr|
53
+ attrs[ELEMENT_RENAME.fetch(attr.name, attr.name.tr("-", "_").to_sym)] = attr.value
54
+ end
55
+ attrs if attrs.size > 1
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "delegate"
4
+
5
+ module StimulusPlumbers
6
+ module Themes
7
+ module Icons
8
+ class Registry < SimpleDelegator
9
+ attr_reader :aliases
10
+
11
+ def initialize(sources:, aliases: {})
12
+ @sources = sources
13
+ @aliases = aliases
14
+ super(
15
+ Hash.new do |h, key|
16
+ resolved = aliases.fetch(key, key)
17
+ value = nil
18
+ sources.each { |s| break if (value = s.fetch(resolved)) }
19
+ h[key] = value if value
20
+ value
21
+ end
22
+ )
23
+ end
24
+
25
+ def key?(name)
26
+ __getobj__.key?(name) ||
27
+ aliases.key?(name) ||
28
+ @sources.any? { |s| s.include?(aliases.fetch(name, name)) }
29
+ end
30
+ alias_method :include?, :key?
31
+ alias_method :has_key?, :key?
32
+ alias_method :member?, :key?
33
+ end
34
+ end
35
+ end
36
+ end
@@ -4,27 +4,69 @@ module StimulusPlumbers
4
4
  module Themes
5
5
  module Schema
6
6
  module Icon
7
- DEFAULTS = {
8
- fill: "none",
9
- view_box: "0 0 24 24",
10
- width: "24",
11
- height: "24",
12
- stroke: "currentColor",
13
- stroke_width: 1.5,
14
- stroke_linecap: :round,
15
- stroke_linejoin: :round
7
+ extend self
8
+
9
+ SVG_ATTR_DEFAULTS = {
10
+ xmlns: "http://www.w3.org/2000/svg",
11
+ fill: "none",
12
+ view_box: "0 0 24 24",
13
+ width: "24",
14
+ height: "24",
15
+ stroke: "currentColor",
16
+ stroke_width: 1.5
17
+ }.freeze
18
+
19
+ SVG_ATTR_NAMES = {
20
+ view_box: "viewBox",
21
+ stroke_width: "stroke-width"
16
22
  }.freeze
17
23
 
18
- ATTRS = ([:d] + DEFAULTS.keys).freeze
24
+ ELEMENT_ATTRS = {
25
+ path: %i[d fill fill_rule clip_rule stroke_linecap stroke_linejoin opacity].freeze,
26
+ circle: %i[cx cy r].freeze,
27
+ ellipse: %i[cx cy rx ry].freeze,
28
+ rect: %i[x y width height rx ry].freeze,
29
+ line: %i[x1 y1 x2 y2].freeze,
30
+ polyline: %i[points].freeze,
31
+ polygon: %i[points].freeze
32
+ }.freeze
33
+
34
+ ELEMENT_ATTR_NAMES = {
35
+ fill_rule: "fill-rule",
36
+ clip_rule: "clip-rule",
37
+ stroke_width: "stroke-width",
38
+ stroke_linecap: "stroke-linecap",
39
+ stroke_linejoin: "stroke-linejoin"
40
+ }.freeze
19
41
 
20
- def self.resolve(icon_data)
42
+ def resolve(icon_data)
21
43
  return unless icon_data.is_a?(Hash)
22
44
 
23
- merged = DEFAULTS.merge(icon_data.slice(*ATTRS)).transform_values(&:to_s)
24
- return merged if merged[:d].present?
45
+ elements = Array(icon_data[:elements]).filter_map do |element|
46
+ next unless element.is_a?(Hash) && ELEMENT_ATTRS.key?(element[:tag])
47
+
48
+ { tag: element[:tag] }.merge(resolve_element_attrs(element))
49
+ end
50
+ return if elements.empty?
51
+
52
+ resolve_svg_attrs(icon_data).tap do |attrs|
53
+ attrs[:elements] = elements
54
+ end
55
+ end
56
+
57
+ private
58
+
59
+ def resolve_svg_attrs(svg_data)
60
+ SVG_ATTR_DEFAULTS
61
+ .merge(svg_data.slice(*SVG_ATTR_DEFAULTS.keys))
62
+ .transform_keys { |key| SVG_ATTR_NAMES.fetch(key, key.to_s) }
63
+ .transform_values(&:to_s)
64
+ end
25
65
 
26
- StimulusPlumbers::Logger.warn("Icon missing required :d attribute")
27
- nil
66
+ def resolve_element_attrs(element_data)
67
+ element_data.slice(*ELEMENT_ATTRS[element_data[:tag]])
68
+ .transform_keys { |key| ELEMENT_ATTR_NAMES.fetch(key, key.to_s) }
69
+ .transform_values(&:to_s)
28
70
  end
29
71
  end
30
72
  end
@@ -5,10 +5,10 @@ module StimulusPlumbers
5
5
  module Schema
6
6
  module Ranges
7
7
  BOOL = [true, false].freeze
8
- SIZE = %i[sm md lg].freeze
8
+ SIZE = %i[xs sm md lg xl].freeze
9
9
  FLEX_ALIGN = %i[left center right top bottom].freeze
10
10
  FLEX_DIRECTION = %i[row col].freeze
11
- BUTTON_VARIANT = %i[primary secondary outline destructive ghost link].freeze
11
+ BUTTON_VARIANT = %i[primary secondary outline destructive ghost link fab dashed].freeze
12
12
  end
13
13
  end
14
14
  end
@@ -9,44 +9,42 @@ module StimulusPlumbers
9
9
  module Schema
10
10
  ACTION_LIST = {
11
11
  action_list_item: {
12
- active: { default: false, range: Ranges::BOOL }
12
+ active: { default: false, validate: Ranges::BOOL }
13
13
  }.freeze,
14
14
  action_list: {}.freeze
15
15
  }.freeze
16
16
 
17
17
  AVATAR = {
18
18
  avatar: {
19
- size: { default: :md, range: Ranges::SIZE },
20
- color: { default: nil, range: :avatar_color_range }
19
+ size: { default: :md, validate: Ranges::SIZE },
20
+ color: { default: nil, validate: :avatar_color_range }
21
21
  }.freeze
22
22
  }.freeze
23
23
 
24
24
  BUTTON = {
25
25
  button: {
26
- variant: { default: :primary, range: Ranges::BUTTON_VARIANT },
27
- size: { default: :md, range: Ranges::SIZE }
26
+ variant: { default: :primary, validate: Ranges::BUTTON_VARIANT },
27
+ size: { default: :md, validate: Ranges::SIZE }
28
28
  }.freeze,
29
29
  button_group: {
30
- alignment: { default: :left, range: Ranges::FLEX_ALIGN },
31
- direction: { default: :row, range: Ranges::FLEX_DIRECTION }
32
- }.freeze
30
+ alignment: { default: :left, validate: Ranges::FLEX_ALIGN },
31
+ direction: { default: :row, validate: Ranges::FLEX_DIRECTION }
32
+ }.freeze,
33
+ button_icon: {}.freeze
33
34
  }.freeze
34
35
 
35
36
  CALENDAR = {
36
- calendar: {}.freeze,
37
- calendar_days_of_week: {}.freeze,
38
- calendar_week: {}.freeze,
39
- calendar_days_of_month: {}.freeze,
40
- calendar_day: {
41
- today: { default: false, range: Ranges::BOOL },
42
- selected: { default: false, range: Ranges::BOOL },
43
- outside: { default: false, range: Ranges::BOOL }
37
+ calendar: {}.freeze,
38
+ calendar_days_of_week: {}.freeze,
39
+ calendar_week: {}.freeze,
40
+ calendar_days_of_month: {}.freeze,
41
+ calendar_day: {
42
+ today: { default: false, validate: Ranges::BOOL },
43
+ selected: { default: false, validate: Ranges::BOOL },
44
+ outside: { default: false, validate: Ranges::BOOL }
44
45
  }.freeze,
45
- calendar_navigation: {}.freeze,
46
- calendar_navigation_navigator: {}.freeze,
47
- calendar_navigation_navigator_icon: {
48
- name: { default: "arrow-left", range: :icon_range }
49
- }.freeze
46
+ calendar_navigation: {}.freeze,
47
+ calendar_navigation_navigator: {}.freeze
50
48
  }.freeze
51
49
 
52
50
  CARD = {
@@ -55,44 +53,44 @@ module StimulusPlumbers
55
53
  }.freeze
56
54
 
57
55
  COMBOBOX = {
58
- combobox_trigger: {}.freeze,
59
- combobox_option: {
60
- selected: { default: false, range: Ranges::BOOL },
61
- disabled: { default: false, range: Ranges::BOOL }
56
+ combobox_trigger: {}.freeze,
57
+ combobox_trigger_group: {}.freeze,
58
+ combobox_option: {
59
+ selected: { default: false, validate: Ranges::BOOL },
60
+ disabled: { default: false, validate: Ranges::BOOL }
62
61
  }.freeze,
63
- combobox_option_group: {}.freeze,
64
- combobox_listbox: {}.freeze,
65
- combobox_autocomplete_loading: {}.freeze,
66
- combobox_autocomplete_empty: {}.freeze,
67
- combobox_time: {}.freeze
62
+ combobox_option_group: {}.freeze,
63
+ combobox_listbox: {}.freeze,
64
+ combobox_typeahead_loading: {}.freeze,
65
+ combobox_typeahead_empty: {}.freeze,
66
+ combobox_time: {}.freeze
68
67
  }.freeze
69
68
 
70
69
  FORM = {
71
- form_group: {
72
- layout: { default: :stacked, range: Form::Ranges::LAYOUT },
73
- error: { default: false, range: Ranges::BOOL }
70
+ form_group: {
71
+ layout: { default: :stacked, validate: Form::Ranges::LAYOUT },
72
+ error: { default: false, validate: Ranges::BOOL }
74
73
  }.freeze,
75
- form_label: {
76
- required: { default: false, range: Ranges::BOOL },
77
- hidden: { default: false, range: Ranges::BOOL }
74
+ form_label: {
75
+ required: { default: false, validate: Ranges::BOOL },
76
+ hidden: { default: false, validate: Ranges::BOOL }
78
77
  }.freeze,
79
- form_required_mark: {}.freeze,
80
- form_details: {}.freeze,
81
- form_error: {}.freeze,
82
- form_input: { error: { default: false, range: Ranges::BOOL } }.freeze,
83
- form_textarea: { error: { default: false, range: Ranges::BOOL } }.freeze,
84
- form_file: { error: { default: false, range: Ranges::BOOL } }.freeze,
85
- form_select: { error: { default: false, range: Ranges::BOOL } }.freeze,
86
- form_checkbox: { error: { default: false, range: Ranges::BOOL } }.freeze,
87
- form_radio: { error: { default: false, range: Ranges::BOOL } }.freeze,
88
- form_input_group: { error: { default: false, range: Ranges::BOOL } }.freeze,
89
- form_combobox: { error: { default: false, range: Ranges::BOOL } }.freeze,
90
- form_input_reveal: { error: { default: false, range: Ranges::BOOL } }.freeze,
91
- form_input_search: {}.freeze,
92
- form_button_reveal: {}.freeze,
93
- form_button_clear: {}.freeze,
94
- form_submit: {
95
- variant: { default: :default, range: Form::Ranges::SUBMIT_VARIANT }
78
+ form_required_mark: {}.freeze,
79
+ form_details: {}.freeze,
80
+ form_error: {}.freeze,
81
+ form_input: { error: { default: false, validate: Ranges::BOOL } }.freeze,
82
+ form_textarea: { error: { default: false, validate: Ranges::BOOL } }.freeze,
83
+ form_file: { error: { default: false, validate: Ranges::BOOL } }.freeze,
84
+ form_select: { error: { default: false, validate: Ranges::BOOL } }.freeze,
85
+ form_checkbox: { error: { default: false, validate: Ranges::BOOL } }.freeze,
86
+ form_radio: { error: { default: false, validate: Ranges::BOOL } }.freeze,
87
+ form_combobox: { error: { default: false, validate: Ranges::BOOL } }.freeze,
88
+ form_input_reveal: { error: { default: false, validate: Ranges::BOOL } }.freeze,
89
+ form_input_clearable: {}.freeze,
90
+ form_button_reveal: {}.freeze,
91
+ form_button_clear: {}.freeze,
92
+ form_submit: {
93
+ variant: { default: :default, validate: Form::Ranges::SUBMIT_VARIANT }
96
94
  }.freeze
97
95
  }.freeze
98
96
 
@@ -100,9 +98,15 @@ module StimulusPlumbers
100
98
  icon: {}.freeze
101
99
  }.freeze
102
100
 
101
+ INPUT_GROUP = {
102
+ input_group: { error: { default: false, validate: Ranges::BOOL } }.freeze
103
+ }.freeze
104
+
103
105
  LAYOUT = {
104
- divider: {}.freeze,
105
- popover: {}.freeze
106
+ divider: {}.freeze,
107
+ divider_separator: {}.freeze,
108
+ divider_label: {}.freeze,
109
+ popover: {}.freeze
106
110
  }.freeze
107
111
  end
108
112
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module StimulusPlumbers
4
- VERSION = "0.3.1"
4
+ VERSION = "0.3.3"
5
5
  end
@@ -27,6 +27,7 @@ require_relative "stimulus_plumbers/components/action_list"
27
27
  require_relative "stimulus_plumbers/components/action_list/section"
28
28
  require_relative "stimulus_plumbers/components/action_list/item"
29
29
  require_relative "stimulus_plumbers/components/divider"
30
+ require_relative "stimulus_plumbers/components/input_group"
30
31
  require_relative "stimulus_plumbers/components/popover"
31
32
  require_relative "stimulus_plumbers/components/popover/builder"
32
33
 
@@ -49,7 +50,7 @@ require_relative "stimulus_plumbers/components/combobox/options/option"
49
50
  require_relative "stimulus_plumbers/components/combobox/options/option_group"
50
51
  require_relative "stimulus_plumbers/components/combobox/date"
51
52
  require_relative "stimulus_plumbers/components/combobox/dropdown"
52
- require_relative "stimulus_plumbers/components/combobox/autocomplete"
53
+ require_relative "stimulus_plumbers/components/combobox/typeahead"
53
54
  require_relative "stimulus_plumbers/components/combobox/time"
54
55
  require_relative "stimulus_plumbers/components/combobox/time/drum"
55
56
 
@@ -58,7 +59,6 @@ require_relative "stimulus_plumbers/form/field"
58
59
  require_relative "stimulus_plumbers/form/fields/error"
59
60
  require_relative "stimulus_plumbers/form/fields/group"
60
61
  require_relative "stimulus_plumbers/form/fields/hint"
61
- require_relative "stimulus_plumbers/form/fields/input_group"
62
62
  require_relative "stimulus_plumbers/form/fields/label"
63
63
  require_relative "stimulus_plumbers/form/builder"
64
64
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stimulus_plumbers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Chang
@@ -57,7 +57,6 @@ files:
57
57
  - lib/stimulus_plumbers/components/card.rb
58
58
  - lib/stimulus_plumbers/components/card/section.rb
59
59
  - lib/stimulus_plumbers/components/combobox.rb
60
- - lib/stimulus_plumbers/components/combobox/autocomplete.rb
61
60
  - lib/stimulus_plumbers/components/combobox/date.rb
62
61
  - lib/stimulus_plumbers/components/combobox/dropdown.rb
63
62
  - lib/stimulus_plumbers/components/combobox/options.rb
@@ -67,10 +66,12 @@ files:
67
66
  - lib/stimulus_plumbers/components/combobox/time.rb
68
67
  - lib/stimulus_plumbers/components/combobox/time/drum.rb
69
68
  - lib/stimulus_plumbers/components/combobox/trigger.rb
69
+ - lib/stimulus_plumbers/components/combobox/typeahead.rb
70
70
  - lib/stimulus_plumbers/components/date_picker/navigation.rb
71
71
  - lib/stimulus_plumbers/components/date_picker/navigator.rb
72
72
  - lib/stimulus_plumbers/components/divider.rb
73
73
  - lib/stimulus_plumbers/components/icon.rb
74
+ - lib/stimulus_plumbers/components/input_group.rb
74
75
  - lib/stimulus_plumbers/components/popover.rb
75
76
  - lib/stimulus_plumbers/components/popover/builder.rb
76
77
  - lib/stimulus_plumbers/configuration.rb
@@ -81,7 +82,6 @@ files:
81
82
  - lib/stimulus_plumbers/form/fields/fieldset.rb
82
83
  - lib/stimulus_plumbers/form/fields/group.rb
83
84
  - lib/stimulus_plumbers/form/fields/hint.rb
84
- - lib/stimulus_plumbers/form/fields/input_group.rb
85
85
  - lib/stimulus_plumbers/form/fields/inputs/choice.rb
86
86
  - lib/stimulus_plumbers/form/fields/inputs/datetime.rb
87
87
  - lib/stimulus_plumbers/form/fields/inputs/file.rb
@@ -117,6 +117,8 @@ files:
117
117
  - lib/stimulus_plumbers/plumber/renderer.rb
118
118
  - lib/stimulus_plumbers/themes/base.rb
119
119
  - lib/stimulus_plumbers/themes/configuration.rb
120
+ - lib/stimulus_plumbers/themes/icons/external.rb
121
+ - lib/stimulus_plumbers/themes/icons/registry.rb
120
122
  - lib/stimulus_plumbers/themes/schema.rb
121
123
  - lib/stimulus_plumbers/themes/schema/form/ranges.rb
122
124
  - lib/stimulus_plumbers/themes/schema/icon.rb
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module StimulusPlumbers
4
- module Form
5
- module Fields
6
- class InputGroup < Plumber::Base
7
- def render(leading: nil, trailing: nil, error: false, **wrapper_opts, &block)
8
- html_options = merge_html_options(
9
- theme.resolve(:form_input_group, error: error),
10
- wrapper_opts
11
- )
12
- template.content_tag(:div, **html_options) do
13
- template.safe_join(
14
- [
15
- leading.respond_to?(:call) ? leading.call : leading,
16
- template.capture(&block),
17
- trailing.respond_to?(:call) ? trailing.call : trailing
18
- ]
19
- )
20
- end
21
- end
22
- end
23
- end
24
- end
25
- end