stimulus_plumbers 0.2.9 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +31 -0
  3. data/README.md +5 -4
  4. data/app/assets/javascripts/stimulus-plumbers/stimulus-plumbers-controllers.es.js +246 -269
  5. data/app/assets/javascripts/stimulus-plumbers/stimulus-plumbers-controllers.umd.js +1 -1
  6. data/lib/stimulus_plumbers/components/avatar.rb +4 -3
  7. data/lib/stimulus_plumbers/components/calendar/month/turbo/days_of_month.rb +58 -39
  8. data/lib/stimulus_plumbers/components/calendar/month/turbo/days_of_week.rb +13 -10
  9. data/lib/stimulus_plumbers/components/calendar.rb +36 -13
  10. data/lib/stimulus_plumbers/components/combobox/trigger.rb +6 -6
  11. data/lib/stimulus_plumbers/components/date_picker/navigation.rb +14 -22
  12. data/lib/stimulus_plumbers/components/icon.rb +14 -20
  13. data/lib/stimulus_plumbers/components/popover.rb +11 -6
  14. data/lib/stimulus_plumbers/configuration.rb +3 -18
  15. data/lib/stimulus_plumbers/engine.rb +2 -2
  16. data/lib/stimulus_plumbers/form/builder.rb +1 -1
  17. data/lib/stimulus_plumbers/form/fields/combobox.rb +7 -4
  18. data/lib/stimulus_plumbers/form/fields/renderer.rb +5 -2
  19. data/lib/stimulus_plumbers/plumber/base.rb +1 -1
  20. data/lib/stimulus_plumbers/plumber/dispatcher/callable_inspector.rb +19 -0
  21. data/lib/stimulus_plumbers/plumber/dispatcher/instance_exec.rb +35 -0
  22. data/lib/stimulus_plumbers/plumber/dispatcher/klass_proxy.rb +34 -0
  23. data/lib/stimulus_plumbers/plumber/dispatcher/method_call.rb +36 -0
  24. data/lib/stimulus_plumbers/plumber/dispatcher.rb +4 -87
  25. data/lib/stimulus_plumbers/plumber/html_options.rb +6 -5
  26. data/lib/stimulus_plumbers/plumber/renderer.rb +2 -2
  27. data/lib/stimulus_plumbers/themes/base.rb +25 -5
  28. data/lib/stimulus_plumbers/themes/configuration.rb +38 -0
  29. data/lib/stimulus_plumbers/themes/schema/form/ranges.rb +14 -0
  30. data/lib/stimulus_plumbers/themes/schema/icon.rb +32 -0
  31. data/lib/stimulus_plumbers/themes/schema/ranges.rb +1 -1
  32. data/lib/stimulus_plumbers/themes/schema.rb +10 -4
  33. data/lib/stimulus_plumbers/version.rb +1 -1
  34. metadata +9 -11
  35. data/lib/stimulus_plumbers/themes/tailwind/action_list.rb +0 -33
  36. data/lib/stimulus_plumbers/themes/tailwind/avatar.rb +0 -52
  37. data/lib/stimulus_plumbers/themes/tailwind/button.rb +0 -89
  38. data/lib/stimulus_plumbers/themes/tailwind/calendar.rb +0 -80
  39. data/lib/stimulus_plumbers/themes/tailwind/card.rb +0 -24
  40. data/lib/stimulus_plumbers/themes/tailwind/combobox.rb +0 -75
  41. data/lib/stimulus_plumbers/themes/tailwind/form.rb +0 -108
  42. data/lib/stimulus_plumbers/themes/tailwind/layout.rb +0 -25
  43. data/lib/stimulus_plumbers/themes/tailwind_theme.rb +0 -31
@@ -1,19 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "themes/base"
4
- require_relative "themes/tailwind_theme"
4
+ require_relative "themes/configuration"
5
5
 
6
6
  module StimulusPlumbers
7
7
  class Configuration
8
- DEFAULT_LOG_FORMATTER = ->(message) { "[StimulusPlumbers] #{message}" }
9
- THEME_KLASS_FORMATTER = ->(type) { "StimulusPlumbers::Themes::#{type.to_s.classify}Theme" }
8
+ DEFAULT_LOG_FORMATTER = ->(message) { "[StimulusPlumbers] #{message}" }
10
9
 
11
10
  def theme
12
- @theme ||= build_theme(:tailwind)
13
- end
14
-
15
- def theme=(value)
16
- @theme = build_theme(value)
11
+ @theme ||= Themes::Configuration.new
17
12
  end
18
13
 
19
14
  def log_formatter
@@ -25,15 +20,5 @@ module StimulusPlumbers
25
20
 
26
21
  @log_formatter = callable
27
22
  end
28
-
29
- private
30
-
31
- def build_theme(type)
32
- return type if type.is_a?(Themes::Base)
33
-
34
- klass_name = THEME_KLASS_FORMATTER.call(type)
35
- klass_name.safe_constantize&.new or
36
- raise ArgumentError, "Unknown theme #{type.inspect}: #{klass_name} is not defined."
37
- end
38
23
  end
39
24
  end
@@ -8,8 +8,8 @@ module StimulusPlumbers
8
8
 
9
9
  config.autoload_paths << File.expand_path("../stimulus-plumbers", __dir__)
10
10
 
11
- initializer "stimulus_plumbers.assets" do |app|
12
- app.config.assets.paths << root.join("app/assets/javascripts")
11
+ initializer "stimulus_plumbers.assets", after: :set_default_precompile do |app|
12
+ app.config.assets.precompile += %w[stimulus_plumbers/tokens.css] if app.config.respond_to?(:assets)
13
13
  end
14
14
 
15
15
  initializer "stimulus_plumbers.helpers" do
@@ -67,7 +67,7 @@ module StimulusPlumbers
67
67
  end
68
68
 
69
69
  def theme
70
- StimulusPlumbers.config.theme
70
+ StimulusPlumbers.config.theme.current
71
71
  end
72
72
 
73
73
  # rubocop:disable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
@@ -19,21 +19,24 @@ module StimulusPlumbers
19
19
 
20
20
  rails_opts, field_opts = extract_options(html_options)
21
21
  field = build_field(attribute, field_opts)
22
- base_id = field_id(attribute)
23
22
  current_value = object&.public_send(attribute)
24
23
 
24
+ wrapper = build_combobox_wrapper(klass, attribute, field, current_value, options, rails_opts)
25
+ render_field(field, wrapper)
26
+ end
27
+
28
+ def build_combobox_wrapper(klass, attribute, field, current_value, options, rails_opts)
25
29
  popover = klass.new(@template).render(options: options, value: current_value, **rails_opts)
26
30
  opts = klass.default_opts.deep_merge(
27
31
  input: { name: field_name(attribute), value: current_value },
28
32
  popover: { content: popover }
29
33
  )
30
- wrapper = Components::Combobox.new(@template).render(
31
- base_id: base_id,
34
+ Components::Combobox.new(@template).render(
35
+ base_id: field_id(attribute),
32
36
  options: opts,
33
37
  **field_theme(:form_combobox, error: field.error?),
34
38
  **field.html_opts
35
39
  )
36
- render_field(field, wrapper)
37
40
  end
38
41
  end
39
42
  end
@@ -42,10 +42,13 @@ module StimulusPlumbers
42
42
  return "".html_safe if field.errors.none?
43
43
 
44
44
  field.errors.map.with_index(1) do |message, i|
45
- id = field.errors.one? ? field.error_id : "#{field.error_id}_#{i}"
46
- Error.new(template).render(message: message, id: id)
45
+ Error.new(template).render(message: message, id: error_id_for(i))
47
46
  end.join.html_safe
48
47
  end
48
+
49
+ def error_id_for(index)
50
+ field.errors.one? ? field.error_id : "#{field.error_id}_#{index}"
51
+ end
49
52
  end
50
53
  end
51
54
  end
@@ -13,7 +13,7 @@ module StimulusPlumbers
13
13
  end
14
14
 
15
15
  def theme
16
- StimulusPlumbers.config.theme
16
+ StimulusPlumbers.config.theme.current
17
17
  end
18
18
  end
19
19
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module StimulusPlumbers
4
+ module Plumber
5
+ module Dispatcher
6
+ module CallableInspector
7
+ private
8
+
9
+ def args_for(callable)
10
+ callable.arity.negative? ? args : args.take(callable.arity)
11
+ end
12
+
13
+ def accepts_kwargs?(callable)
14
+ callable.parameters.any? { |type, _| %i[key keyreq keyrest].include?(type) }
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module StimulusPlumbers
4
+ module Plumber
5
+ module Dispatcher
6
+ class InstanceExec
7
+ include CallableInspector
8
+
9
+ attr_reader :block, :args, :kwargs
10
+
11
+ def initialize(block, *args, **kwargs)
12
+ @block = block
13
+ @args = args
14
+ @kwargs = kwargs
15
+ validate!
16
+ end
17
+
18
+ def call(target)
19
+ dispatched = args_for(block)
20
+ if accepts_kwargs?(block)
21
+ target.instance_exec(*dispatched, **kwargs, &block)
22
+ else
23
+ target.instance_exec(*dispatched, &block)
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ def validate!
30
+ raise ArgumentError, "invalid block: #{block.inspect}" unless block.is_a?(Proc)
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module StimulusPlumbers
4
+ module Plumber
5
+ module Dispatcher
6
+ class KlassProxy
7
+ attr_reader :klass, :method_name, :args, :kwargs, :init_args, :init_kwargs
8
+
9
+ def initialize(klass, method_name, *args, init_args: [], init_kwargs: {}, **kwargs)
10
+ @klass = klass
11
+ @method_name = method_name
12
+ @args = args
13
+ @kwargs = kwargs
14
+ @init_args = init_args
15
+ @init_kwargs = init_kwargs
16
+ validate!
17
+ end
18
+
19
+ def call(_target)
20
+ klass.new(*init_args, **init_kwargs).public_send(method_name, *args, **kwargs)
21
+ end
22
+
23
+ private
24
+
25
+ def validate!
26
+ raise ArgumentError, "invalid class: #{klass.inspect}" unless klass.is_a?(Module)
27
+ return if method_name.is_a?(String) || method_name.is_a?(Symbol)
28
+
29
+ raise ArgumentError, "invalid method name: #{method_name.inspect}"
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module StimulusPlumbers
4
+ module Plumber
5
+ module Dispatcher
6
+ class MethodCall
7
+ include CallableInspector
8
+
9
+ attr_reader :method_name, :args, :kwargs
10
+
11
+ def initialize(method_name, *args, **kwargs)
12
+ @method_name = method_name
13
+ @args = args
14
+ @kwargs = kwargs
15
+ validate!
16
+ end
17
+
18
+ def call(target)
19
+ raise NotImplementedError, "#{method_name.inspect} not implemented" unless target.respond_to?(method_name, true)
20
+
21
+ method_call = target.method(method_name)
22
+ dispatched = args_for(method_call)
23
+ accepts_kwargs?(method_call) ? method_call.call(*dispatched, **kwargs) : method_call.call(*dispatched)
24
+ end
25
+
26
+ private
27
+
28
+ def validate!
29
+ return if method_name.is_a?(String) || method_name.is_a?(Symbol)
30
+
31
+ raise ArgumentError, "invalid method name: #{method_name.inspect}"
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -1,96 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # :markup: markdown
3
+ require_relative "dispatcher/callable_inspector"
4
+ require_relative "dispatcher/method_call"
5
+ require_relative "dispatcher/instance_exec"
6
+ require_relative "dispatcher/klass_proxy"
4
7
 
5
8
  module StimulusPlumbers
6
9
  module Plumber
7
10
  module Dispatcher
8
- class MethodCall
9
- attr_reader :method_name, :args, :kwargs
10
-
11
- def initialize(method_name, *args, **kwargs)
12
- @method_name = method_name
13
- @args = args
14
- @kwargs = kwargs
15
- validate!
16
- end
17
-
18
- def call(target)
19
- raise NotImplementedError, "#{method_name.inspect} not implemented" unless target.respond_to?(method_name, true)
20
-
21
- method_call = target.method(method_name)
22
- accepts_args = method_call.arity.negative? ? args : args.take(method_call.arity)
23
- accepts_kwargs = method_call.parameters.any? { |type, _| %i[key keyreq keyrest].include?(type) }
24
- accepts_kwargs ? method_call.call(*accepts_args, **kwargs) : method_call.call(*accepts_args)
25
- end
26
-
27
- private
28
-
29
- def validate!
30
- return if method_name.is_a?(String) || method_name.is_a?(Symbol)
31
-
32
- raise ArgumentError, "invalid method name: #{method_name.inspect}"
33
- end
34
- end
35
-
36
- class InstanceExec
37
- attr_reader :block, :args, :kwargs
38
-
39
- def initialize(block, *args, **kwargs)
40
- @block = block
41
- @args = args
42
- @kwargs = kwargs
43
- validate!
44
- end
45
-
46
- def call(target)
47
- accepts_args = block.arity.negative? ? args : args.take(block.arity)
48
- accepts_kwargs = block.parameters.any? { |type, _| %i[key keyreq keyrest].include?(type) }
49
- if accepts_kwargs
50
- target.instance_exec(
51
- *accepts_args,
52
- **kwargs,
53
- &block
54
- )
55
- else
56
- target.instance_exec(*accepts_args, &block)
57
- end
58
- end
59
-
60
- private
61
-
62
- def validate!
63
- raise ArgumentError, "invalid block: #{block.inspect}" unless block.is_a?(Proc)
64
- end
65
- end
66
-
67
- class KlassProxy
68
- attr_reader :klass, :method_name, :args, :kwargs, :init_args, :init_kwargs
69
-
70
- def initialize(klass, method_name, *args, init_args: [], init_kwargs: {}, **kwargs)
71
- @klass = klass
72
- @method_name = method_name
73
- @args = args
74
- @kwargs = kwargs
75
- @init_args = init_args
76
- @init_kwargs = init_kwargs
77
- validate!
78
- end
79
-
80
- def call(_target)
81
- klass.new(*init_args, **init_kwargs).public_send(method_name, *args, **kwargs)
82
- end
83
-
84
- private
85
-
86
- def validate!
87
- raise ArgumentError, "invalid class: #{klass.inspect}" unless klass.is_a?(Module)
88
- return if method_name.is_a?(String) || method_name.is_a?(Symbol)
89
-
90
- raise ArgumentError, "invalid method name: #{method_name.inspect}"
91
- end
92
- end
93
-
94
11
  def self.build(callable, *args, method_name: nil, init_args: [], init_kwargs: {}, **kwargs)
95
12
  case callable
96
13
  when Symbol
@@ -8,17 +8,18 @@ module StimulusPlumbers
8
8
  extend ActiveSupport::Concern
9
9
 
10
10
  def merge_html_options(*hashes)
11
- classes = hashes.flat_map { |h| [h[:class], h[:classes]] }
12
- data_hashes = hashes.map { |h| h[:data] || {} }
11
+ class_value = merge_string_option(*extract_classes(*hashes)).presence
12
+ merged_data = merge_data_options(*hashes.map { |h| h[:data] || {} })
13
13
  rest = hashes.map { |h| h.except(:class, :classes, :data) }.reduce({}, :deep_merge)
14
14
 
15
- class_value = merge_string_option(*classes).presence
16
- merged_data = merge_data_options(*data_hashes)
17
-
18
15
  result = class_value ? rest.merge(class: class_value) : rest
19
16
  merged_data.present? ? result.merge(data: merged_data) : result
20
17
  end
21
18
 
19
+ def extract_classes(*hashes)
20
+ hashes.flat_map { |h| [h[:class], h[:classes]] }
21
+ end
22
+
22
23
  STIMULUS_SPACEJOIN_KEYS = %i[controller action].freeze
23
24
 
24
25
  def merge_data_options(*hashes, spacejoin: STIMULUS_SPACEJOIN_KEYS)
@@ -12,7 +12,7 @@ module StimulusPlumbers
12
12
  end
13
13
 
14
14
  module ClassMethods
15
- # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
15
+ # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
16
16
  def renders(method_name, with: nil, &block)
17
17
  raise ArgumentError, "method_name must be Symbol" unless method_name.is_a?(Symbol)
18
18
  raise ArgumentError, "provide either with: or a block" if !with.nil? && block_given?
@@ -26,7 +26,7 @@ module StimulusPlumbers
26
26
  self.renderers = renderers.merge(method_name => with)
27
27
  ActiveSupport.version >= "7.2" ? generate_renderer_method(method_name) : eval_renderer_method(method_name)
28
28
  end
29
- # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
29
+ # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
30
30
 
31
31
  private
32
32
 
@@ -20,6 +20,22 @@ module StimulusPlumbers
20
20
  @name ||= self.class.name.demodulize.delete_suffix("Theme")
21
21
  end
22
22
 
23
+ def avatar_colors
24
+ {}
25
+ end
26
+
27
+ def avatar_color_range
28
+ []
29
+ end
30
+
31
+ def icons
32
+ {}
33
+ end
34
+
35
+ def icon_range
36
+ icons.keys
37
+ end
38
+
23
39
  def attribute_names(component)
24
40
  SCHEMA.fetch(component, {}).keys
25
41
  end
@@ -49,11 +65,7 @@ module StimulusPlumbers
49
65
  def coerce_arg(component, key, value, schema)
50
66
  return value unless schema
51
67
 
52
- range = if schema[:range].is_a?(Symbol)
53
- respond_to?(schema[:range], true) ? send(schema[:range]) : []
54
- else
55
- schema[:range]
56
- end
68
+ range = range_for(schema)
57
69
  return value if range.empty? || range.include?(value)
58
70
 
59
71
  StimulusPlumbers::Logger.warn(
@@ -62,6 +74,14 @@ module StimulusPlumbers
62
74
  )
63
75
  schema[:default]
64
76
  end
77
+
78
+ def range_for(schema)
79
+ if schema[:range].is_a?(Symbol)
80
+ respond_to?(schema[:range], true) ? send(schema[:range]) : []
81
+ else
82
+ schema[:range]
83
+ end
84
+ end
65
85
  end
66
86
  end
67
87
  end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module StimulusPlumbers
4
+ module Themes
5
+ class Configuration
6
+ def register(name, klass)
7
+ raise ArgumentError, "#{klass} must be a subclass of Themes::Base" unless klass <= Base
8
+
9
+ registry[name.to_sym] = klass
10
+ self
11
+ end
12
+
13
+ def use(name_or_instance)
14
+ @current = resolve(name_or_instance)
15
+ self
16
+ end
17
+
18
+ def current
19
+ @current ||= Base.new
20
+ end
21
+
22
+ def registry
23
+ @registry ||= {}
24
+ end
25
+
26
+ private
27
+
28
+ def resolve(value)
29
+ return value if value.is_a?(Base)
30
+
31
+ klass = registry[value.to_sym]
32
+ raise ArgumentError, "Unknown theme #{value.inspect}. Registered: #{registry.keys.inspect}" unless klass
33
+
34
+ klass.new
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module StimulusPlumbers
4
+ module Themes
5
+ module Schema
6
+ module Form
7
+ module Ranges
8
+ LAYOUT = %i[stacked inline].freeze
9
+ SUBMIT_VARIANT = %i[default button].freeze
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module StimulusPlumbers
4
+ module Themes
5
+ module Schema
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
16
+ }.freeze
17
+
18
+ ATTRS = ([:d] + DEFAULTS.keys).freeze
19
+
20
+ def self.resolve(icon_data)
21
+ return unless icon_data.is_a?(Hash)
22
+
23
+ merged = DEFAULTS.merge(icon_data.slice(*ATTRS)).transform_values(&:to_s)
24
+ return merged if merged[:d].present?
25
+
26
+ StimulusPlumbers::Logger.warn("Icon missing required :d attribute")
27
+ nil
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -8,7 +8,7 @@ module StimulusPlumbers
8
8
  SIZE = %i[sm md lg].freeze
9
9
  FLEX_ALIGN = %i[left center right top bottom].freeze
10
10
  FLEX_DIRECTION = %i[row col].freeze
11
- FORM_LAYOUT = %i[stacked inline].freeze
11
+ BUTTON_VARIANT = %i[primary secondary outline destructive ghost link].freeze
12
12
  end
13
13
  end
14
14
  end
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "schema/ranges"
4
+ require_relative "schema/form/ranges"
5
+ require_relative "schema/icon"
4
6
 
5
7
  module StimulusPlumbers
6
8
  module Themes
@@ -21,7 +23,7 @@ module StimulusPlumbers
21
23
 
22
24
  BUTTON = {
23
25
  button: {
24
- variant: { default: :primary, range: %i[primary secondary outline destructive ghost link].freeze },
26
+ variant: { default: :primary, range: Ranges::BUTTON_VARIANT },
25
27
  size: { default: :md, range: Ranges::SIZE }
26
28
  }.freeze,
27
29
  button_group: {
@@ -33,6 +35,7 @@ module StimulusPlumbers
33
35
  CALENDAR = {
34
36
  calendar: {}.freeze,
35
37
  calendar_days_of_week: {}.freeze,
38
+ calendar_week: {}.freeze,
36
39
  calendar_days_of_month: {}.freeze,
37
40
  calendar_day: {
38
41
  today: { default: false, range: Ranges::BOOL },
@@ -41,7 +44,9 @@ module StimulusPlumbers
41
44
  }.freeze,
42
45
  calendar_navigation: {}.freeze,
43
46
  calendar_navigation_navigator: {}.freeze,
44
- calendar_navigation_navigator_icon: {}.freeze
47
+ calendar_navigation_navigator_icon: {
48
+ name: { default: "arrow-left", range: :icon_range }
49
+ }.freeze
45
50
  }.freeze
46
51
 
47
52
  CARD = {
@@ -50,6 +55,7 @@ module StimulusPlumbers
50
55
  }.freeze
51
56
 
52
57
  COMBOBOX = {
58
+ combobox_trigger: {}.freeze,
53
59
  combobox_option: {
54
60
  selected: { default: false, range: Ranges::BOOL },
55
61
  disabled: { default: false, range: Ranges::BOOL }
@@ -63,7 +69,7 @@ module StimulusPlumbers
63
69
 
64
70
  FORM = {
65
71
  form_group: {
66
- layout: { default: :stacked, range: Ranges::FORM_LAYOUT },
72
+ layout: { default: :stacked, range: Form::Ranges::LAYOUT },
67
73
  error: { default: false, range: Ranges::BOOL }
68
74
  }.freeze,
69
75
  form_label: {
@@ -84,7 +90,7 @@ module StimulusPlumbers
84
90
  form_input_reveal: {}.freeze,
85
91
  form_button_reveal: {}.freeze,
86
92
  form_submit: {
87
- variant: { default: :default, range: %i[default button].freeze }
93
+ variant: { default: :default, range: Form::Ranges::SUBMIT_VARIANT }
88
94
  }.freeze
89
95
  }.freeze
90
96
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module StimulusPlumbers
4
- VERSION = "0.2.9"
4
+ VERSION = "0.3.0"
5
5
  end
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.2.9
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Chang
@@ -10,7 +10,7 @@ cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
- name: railties
13
+ name: actionview
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
16
  - - ">="
@@ -103,20 +103,18 @@ files:
103
103
  - lib/stimulus_plumbers/logger.rb
104
104
  - lib/stimulus_plumbers/plumber/base.rb
105
105
  - lib/stimulus_plumbers/plumber/dispatcher.rb
106
+ - lib/stimulus_plumbers/plumber/dispatcher/callable_inspector.rb
107
+ - lib/stimulus_plumbers/plumber/dispatcher/instance_exec.rb
108
+ - lib/stimulus_plumbers/plumber/dispatcher/klass_proxy.rb
109
+ - lib/stimulus_plumbers/plumber/dispatcher/method_call.rb
106
110
  - lib/stimulus_plumbers/plumber/html_options.rb
107
111
  - lib/stimulus_plumbers/plumber/renderer.rb
108
112
  - lib/stimulus_plumbers/themes/base.rb
113
+ - lib/stimulus_plumbers/themes/configuration.rb
109
114
  - lib/stimulus_plumbers/themes/schema.rb
115
+ - lib/stimulus_plumbers/themes/schema/form/ranges.rb
116
+ - lib/stimulus_plumbers/themes/schema/icon.rb
110
117
  - lib/stimulus_plumbers/themes/schema/ranges.rb
111
- - lib/stimulus_plumbers/themes/tailwind/action_list.rb
112
- - lib/stimulus_plumbers/themes/tailwind/avatar.rb
113
- - lib/stimulus_plumbers/themes/tailwind/button.rb
114
- - lib/stimulus_plumbers/themes/tailwind/calendar.rb
115
- - lib/stimulus_plumbers/themes/tailwind/card.rb
116
- - lib/stimulus_plumbers/themes/tailwind/combobox.rb
117
- - lib/stimulus_plumbers/themes/tailwind/form.rb
118
- - lib/stimulus_plumbers/themes/tailwind/layout.rb
119
- - lib/stimulus_plumbers/themes/tailwind_theme.rb
120
118
  - lib/stimulus_plumbers/version.rb
121
119
  homepage: https://github.com/ryancyq/stimulus-plumbers
122
120
  licenses: