stimulus_plumbers 0.2.8 → 0.2.9

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 (86) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -0
  3. data/README.md +3 -0
  4. data/app/assets/javascripts/stimulus-plumbers/stimulus-plumbers-controllers.es.js +339 -302
  5. data/app/assets/javascripts/stimulus-plumbers/stimulus-plumbers-controllers.umd.js +1 -1
  6. data/lib/stimulus_plumbers/components/action_list/item.rb +27 -0
  7. data/lib/stimulus_plumbers/components/action_list/section.rb +21 -0
  8. data/lib/stimulus_plumbers/components/action_list.rb +23 -0
  9. data/lib/stimulus_plumbers/components/avatar.rb +72 -0
  10. data/lib/stimulus_plumbers/components/button/group.rb +17 -0
  11. data/lib/stimulus_plumbers/components/button.rb +27 -0
  12. data/lib/stimulus_plumbers/components/calendar/month/turbo/days_of_month.rb +2 -2
  13. data/lib/stimulus_plumbers/components/calendar/month/turbo/days_of_week.rb +2 -2
  14. data/lib/stimulus_plumbers/components/calendar/month/turbo.rb +55 -0
  15. data/lib/stimulus_plumbers/components/calendar.rb +33 -0
  16. data/lib/stimulus_plumbers/components/card/section.rb +25 -0
  17. data/lib/stimulus_plumbers/components/card.rb +27 -0
  18. data/lib/stimulus_plumbers/components/combobox/autocomplete.rb +30 -34
  19. data/lib/stimulus_plumbers/components/combobox/date.rb +16 -18
  20. data/lib/stimulus_plumbers/components/combobox/dropdown.rb +13 -16
  21. data/lib/stimulus_plumbers/components/combobox/options/option.rb +34 -0
  22. data/lib/stimulus_plumbers/components/combobox/options/option_group.rb +29 -0
  23. data/lib/stimulus_plumbers/components/combobox/options.rb +59 -0
  24. data/lib/stimulus_plumbers/components/combobox/popover.rb +20 -0
  25. data/lib/stimulus_plumbers/components/combobox/time/drum.rb +37 -0
  26. data/lib/stimulus_plumbers/components/combobox/time.rb +32 -15
  27. data/lib/stimulus_plumbers/components/combobox/trigger.rb +38 -0
  28. data/lib/stimulus_plumbers/components/combobox.rb +59 -0
  29. data/lib/stimulus_plumbers/components/date_picker/navigator.rb +1 -1
  30. data/lib/stimulus_plumbers/components/icon.rb +49 -0
  31. data/lib/stimulus_plumbers/components/popover/builder.rb +25 -0
  32. data/lib/stimulus_plumbers/components/popover.rb +26 -0
  33. data/lib/stimulus_plumbers/form/builder.rb +7 -5
  34. data/lib/stimulus_plumbers/form/{field_component.rb → field.rb} +1 -1
  35. data/lib/stimulus_plumbers/form/fields/combobox.rb +1 -1
  36. data/lib/stimulus_plumbers/form/fields/error.rb +14 -0
  37. data/lib/stimulus_plumbers/form/fields/group.rb +14 -0
  38. data/lib/stimulus_plumbers/form/fields/hint.rb +14 -0
  39. data/lib/stimulus_plumbers/form/fields/label.rb +21 -0
  40. data/lib/stimulus_plumbers/form/fields/renderer.rb +16 -20
  41. data/lib/stimulus_plumbers/form/fields/search.rb +23 -9
  42. data/lib/stimulus_plumbers/form/fields/submit.rb +23 -0
  43. data/lib/stimulus_plumbers/helpers/action_list_helper.rb +2 -2
  44. data/lib/stimulus_plumbers/helpers/avatar_helper.rb +2 -2
  45. data/lib/stimulus_plumbers/helpers/button_helper.rb +2 -2
  46. data/lib/stimulus_plumbers/helpers/calendar_helper.rb +1 -1
  47. data/lib/stimulus_plumbers/helpers/calendar_turbo_helper.rb +1 -1
  48. data/lib/stimulus_plumbers/helpers/card_helper.rb +2 -2
  49. data/lib/stimulus_plumbers/helpers/combobox_helper.rb +5 -5
  50. data/lib/stimulus_plumbers/helpers/popover_helper.rb +2 -2
  51. data/lib/stimulus_plumbers/plumber/base.rb +20 -0
  52. data/lib/stimulus_plumbers/plumber/dispatcher.rb +111 -0
  53. data/lib/stimulus_plumbers/plumber/html_options.rb +51 -0
  54. data/lib/stimulus_plumbers/plumber/renderer.rb +89 -0
  55. data/lib/stimulus_plumbers/themes/base.rb +9 -15
  56. data/lib/stimulus_plumbers/themes/schema/ranges.rb +5 -5
  57. data/lib/stimulus_plumbers/themes/schema.rb +97 -0
  58. data/lib/stimulus_plumbers/themes/tailwind/calendar.rb +48 -2
  59. data/lib/stimulus_plumbers/themes/tailwind/combobox.rb +75 -0
  60. data/lib/stimulus_plumbers/themes/tailwind_theme.rb +2 -0
  61. data/lib/stimulus_plumbers/version.rb +1 -1
  62. data/lib/stimulus_plumbers.rb +29 -19
  63. metadata +33 -25
  64. data/lib/stimulus_plumbers/components/action_list/renderer.rb +0 -47
  65. data/lib/stimulus_plumbers/components/avatar/renderer.rb +0 -74
  66. data/lib/stimulus_plumbers/components/button/renderer.rb +0 -33
  67. data/lib/stimulus_plumbers/components/calendar/month/turbo/renderer.rb +0 -57
  68. data/lib/stimulus_plumbers/components/calendar/renderer.rb +0 -35
  69. data/lib/stimulus_plumbers/components/card/renderer.rb +0 -41
  70. data/lib/stimulus_plumbers/components/combobox/option.rb +0 -27
  71. data/lib/stimulus_plumbers/components/combobox/option_group.rb +0 -52
  72. data/lib/stimulus_plumbers/components/combobox/renderer.rb +0 -78
  73. data/lib/stimulus_plumbers/components/icon/renderer.rb +0 -51
  74. data/lib/stimulus_plumbers/components/plumber/base.rb +0 -22
  75. data/lib/stimulus_plumbers/components/plumber/dispatcher.rb +0 -113
  76. data/lib/stimulus_plumbers/components/plumber/html_options.rb +0 -53
  77. data/lib/stimulus_plumbers/components/plumber/renderer.rb +0 -91
  78. data/lib/stimulus_plumbers/components/popover/renderer.rb +0 -46
  79. data/lib/stimulus_plumbers/components/time_picker/renderer.rb +0 -38
  80. data/lib/stimulus_plumbers/themes/base/action_list.rb +0 -14
  81. data/lib/stimulus_plumbers/themes/base/avatar.rb +0 -14
  82. data/lib/stimulus_plumbers/themes/base/button.rb +0 -18
  83. data/lib/stimulus_plumbers/themes/base/calendar.rb +0 -15
  84. data/lib/stimulus_plumbers/themes/base/card.rb +0 -12
  85. data/lib/stimulus_plumbers/themes/base/form.rb +0 -34
  86. data/lib/stimulus_plumbers/themes/base/layout.rb +0 -12
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/concern"
4
+
5
+ module StimulusPlumbers
6
+ module Plumber
7
+ module Renderer
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ class_attribute :renderers, instance_writer: false, default: {}
12
+ end
13
+
14
+ module ClassMethods
15
+ # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
16
+ def renders(method_name, with: nil, &block)
17
+ raise ArgumentError, "method_name must be Symbol" unless method_name.is_a?(Symbol)
18
+ raise ArgumentError, "provide either with: or a block" if !with.nil? && block_given?
19
+
20
+ with = block if block_given?
21
+
22
+ with_proc_or_symbol = with.is_a?(Proc) || with.is_a?(Symbol)
23
+ with_klazz = with.is_a?(Module) || with.is_a?(String)
24
+ raise ArgumentError, "with: must be a Symbol/Proc/Class" unless with_proc_or_symbol || with_klazz
25
+
26
+ self.renderers = renderers.merge(method_name => with)
27
+ ActiveSupport.version >= "7.2" ? generate_renderer_method(method_name) : eval_renderer_method(method_name)
28
+ end
29
+ # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
30
+
31
+ private
32
+
33
+ def generated_renderer_methods
34
+ @generated_renderer_methods ||= Module.new.tap { |mod| prepend mod }
35
+ end
36
+
37
+ def eval_renderer_method(method_name)
38
+ generated_renderer_methods.module_eval(<<-RUBY, __FILE__, __LINE__ + 1)
39
+ # def method_name(*args, **kwargs)
40
+ # renderer = renderers.fetch(:method_name, {})
41
+ #
42
+ # unless renderer.present?
43
+ # raise ArgumentError, "#method_name not found in renderer" unless defined?(super)
44
+ # super
45
+ # end
46
+ #
47
+ # dispatcher = StimulusPlumbers::Plumber::Dispatcher.build(
48
+ # renderer, *args, method_name: :#{method_name}, init_args: [template], **kwargs
49
+ # )
50
+ # raise ArgumentError, "invalid renderer, got: \#{renderer.inspect}" unless dispatcher
51
+ #
52
+ # dispatcher.call(self)
53
+ # end
54
+ #{renderer_method_template(method_name)}
55
+ RUBY
56
+ end
57
+
58
+ def generate_renderer_method(method_name)
59
+ require "active_support/code_generator"
60
+ ActiveSupport::CodeGenerator.batch(generated_renderer_methods, __FILE__, __LINE__) do |owner|
61
+ owner.define_cached_method(method_name, namespace: :plumber_renderers) do |batch|
62
+ batch << renderer_method_template(method_name)
63
+ end
64
+ end
65
+ end
66
+
67
+ def renderer_method_template(method_name)
68
+ <<-RUBY
69
+ def #{method_name}(*args, **kwargs)
70
+ renderer = renderers.fetch(:#{method_name}, {})
71
+
72
+ unless renderer.present?
73
+ raise ArgumentError, "##{method_name} not found in renderer" unless defined?(super)
74
+ super
75
+ end
76
+
77
+ dispatcher = StimulusPlumbers::Plumber::Dispatcher.build(
78
+ renderer, *args, method_name: :#{method_name}, init_args: [template], **kwargs
79
+ )
80
+ raise ArgumentError, "invalid renderer, got: \#{renderer.inspect}" unless dispatcher
81
+
82
+ dispatcher.call(self)
83
+ end
84
+ RUBY
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
@@ -1,25 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "schema/ranges"
4
- require_relative "base/action_list"
5
- require_relative "base/avatar"
6
- require_relative "base/button"
7
- require_relative "base/calendar"
8
- require_relative "base/card"
9
- require_relative "base/form"
10
- require_relative "base/layout"
3
+ require_relative "schema"
11
4
 
12
5
  module StimulusPlumbers
13
6
  module Themes
14
7
  class Base
15
8
  SCHEMA = {
16
- **ActionList::SCHEMA,
17
- **Avatar::SCHEMA,
18
- **Button::SCHEMA,
19
- **Calendar::SCHEMA,
20
- **Card::SCHEMA,
21
- **Form::SCHEMA,
22
- **Layout::SCHEMA
9
+ **Schema::ACTION_LIST,
10
+ **Schema::AVATAR,
11
+ **Schema::BUTTON,
12
+ **Schema::CALENDAR,
13
+ **Schema::CARD,
14
+ **Schema::COMBOBOX,
15
+ **Schema::FORM,
16
+ **Schema::LAYOUT
23
17
  }.freeze
24
18
 
25
19
  def name
@@ -4,11 +4,11 @@ module StimulusPlumbers
4
4
  module Themes
5
5
  module Schema
6
6
  module Ranges
7
- BOOL_RANGE = [true, false].freeze
8
- SIZE_RANGE = %i[sm md lg].freeze
9
- ALIGN_RANGE = %i[left center right top bottom].freeze
10
- DIR_RANGE = %i[row col].freeze
11
- LAYOUT_RANGE = %i[stacked inline].freeze
7
+ BOOL = [true, false].freeze
8
+ SIZE = %i[sm md lg].freeze
9
+ FLEX_ALIGN = %i[left center right top bottom].freeze
10
+ FLEX_DIRECTION = %i[row col].freeze
11
+ FORM_LAYOUT = %i[stacked inline].freeze
12
12
  end
13
13
  end
14
14
  end
@@ -0,0 +1,97 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "schema/ranges"
4
+
5
+ module StimulusPlumbers
6
+ module Themes
7
+ module Schema
8
+ ACTION_LIST = {
9
+ action_list_item: {
10
+ active: { default: false, range: Ranges::BOOL }
11
+ }.freeze,
12
+ action_list: {}.freeze
13
+ }.freeze
14
+
15
+ AVATAR = {
16
+ avatar: {
17
+ size: { default: :md, range: Ranges::SIZE },
18
+ color: { default: nil, range: :avatar_color_range }
19
+ }.freeze
20
+ }.freeze
21
+
22
+ BUTTON = {
23
+ button: {
24
+ variant: { default: :primary, range: %i[primary secondary outline destructive ghost link].freeze },
25
+ size: { default: :md, range: Ranges::SIZE }
26
+ }.freeze,
27
+ button_group: {
28
+ alignment: { default: :left, range: Ranges::FLEX_ALIGN },
29
+ direction: { default: :row, range: Ranges::FLEX_DIRECTION }
30
+ }.freeze
31
+ }.freeze
32
+
33
+ CALENDAR = {
34
+ calendar: {}.freeze,
35
+ calendar_days_of_week: {}.freeze,
36
+ calendar_days_of_month: {}.freeze,
37
+ calendar_day: {
38
+ today: { default: false, range: Ranges::BOOL },
39
+ selected: { default: false, range: Ranges::BOOL },
40
+ outside: { default: false, range: Ranges::BOOL }
41
+ }.freeze,
42
+ calendar_navigation: {}.freeze,
43
+ calendar_navigation_navigator: {}.freeze,
44
+ calendar_navigation_navigator_icon: {}.freeze
45
+ }.freeze
46
+
47
+ CARD = {
48
+ card: {}.freeze,
49
+ card_section: {}.freeze
50
+ }.freeze
51
+
52
+ COMBOBOX = {
53
+ combobox_option: {
54
+ selected: { default: false, range: Ranges::BOOL },
55
+ disabled: { default: false, range: Ranges::BOOL }
56
+ }.freeze,
57
+ combobox_option_group: {}.freeze,
58
+ combobox_listbox: {}.freeze,
59
+ combobox_autocomplete_loading: {}.freeze,
60
+ combobox_autocomplete_empty: {}.freeze,
61
+ combobox_time: {}.freeze
62
+ }.freeze
63
+
64
+ FORM = {
65
+ form_group: {
66
+ layout: { default: :stacked, range: Ranges::FORM_LAYOUT },
67
+ error: { default: false, range: Ranges::BOOL }
68
+ }.freeze,
69
+ form_label: {
70
+ required: { default: false, range: Ranges::BOOL },
71
+ hidden: { default: false, range: Ranges::BOOL }
72
+ }.freeze,
73
+ form_required_mark: {}.freeze,
74
+ form_details: {}.freeze,
75
+ form_error: {}.freeze,
76
+ form_input: { error: { default: false, range: Ranges::BOOL } }.freeze,
77
+ form_textarea: { error: { default: false, range: Ranges::BOOL } }.freeze,
78
+ form_file: { error: { default: false, range: Ranges::BOOL } }.freeze,
79
+ form_select: { error: { default: false, range: Ranges::BOOL } }.freeze,
80
+ form_checkbox: { error: { default: false, range: Ranges::BOOL } }.freeze,
81
+ form_radio: { error: { default: false, range: Ranges::BOOL } }.freeze,
82
+ form_input_group: { error: { default: false, range: Ranges::BOOL } }.freeze,
83
+ form_combobox: { error: { default: false, range: Ranges::BOOL } }.freeze,
84
+ form_input_reveal: {}.freeze,
85
+ form_button_reveal: {}.freeze,
86
+ form_submit: {
87
+ variant: { default: :default, range: %i[default button].freeze }
88
+ }.freeze
89
+ }.freeze
90
+
91
+ LAYOUT = {
92
+ divider: {}.freeze,
93
+ popover: {}.freeze
94
+ }.freeze
95
+ end
96
+ end
97
+ end
@@ -4,7 +4,16 @@ module StimulusPlumbers
4
4
  module Themes
5
5
  module Tailwind
6
6
  module Calendar
7
- BASE = %w[
7
+ GRID = %w[w-full].freeze
8
+
9
+ DAYS_OF_WEEK = %w[
10
+ grid grid-cols-7 text-center text-[--sp-text-xs]
11
+ font-medium text-[--sp-color-muted-fg] mb-1
12
+ ].freeze
13
+
14
+ DAYS_OF_MONTH = %w[grid grid-cols-7].freeze
15
+
16
+ DAY = %w[
8
17
  size-[--sp-calendar-day-size] rounded-[--sp-radius-md]
9
18
  flex items-center justify-center text-[--sp-text-sm]
10
19
  hover:bg-[--sp-color-muted] cursor-pointer
@@ -16,18 +25,55 @@ module StimulusPlumbers
16
25
  hover:bg-[--sp-color-primary]/90
17
26
  ].freeze
18
27
 
28
+ NAV = %w[flex items-center justify-between gap-1 mb-2].freeze
29
+
30
+ NAV_BTN = %w[
31
+ inline-flex items-center justify-center
32
+ size-[--sp-calendar-day-size] rounded-[--sp-radius-md]
33
+ text-[--sp-color-fg] hover:bg-[--sp-color-muted]
34
+ focus-visible:outline-none focus-visible:ring-2
35
+ focus-visible:ring-[--sp-focus-ring-color]
36
+ disabled:pointer-events-none disabled:opacity-50
37
+ ].freeze
38
+
39
+ NAV_ICON = %w[size-4 stroke-current].freeze
40
+
19
41
  private
20
42
 
43
+ def calendar_classes
44
+ { classes: klasses(*GRID) }
45
+ end
46
+
47
+ def calendar_days_of_week_classes
48
+ { classes: klasses(*DAYS_OF_WEEK) }
49
+ end
50
+
51
+ def calendar_days_of_month_classes
52
+ { classes: klasses(*DAYS_OF_MONTH) }
53
+ end
54
+
21
55
  def calendar_day_classes(today: false, selected: false, outside: false)
22
56
  {
23
57
  classes: klasses(
24
- *BASE,
58
+ *DAY,
25
59
  *(today ? ["font-bold"] : []),
26
60
  *(selected ? DAY_SELECTED : []),
27
61
  *(outside ? %w[text-[--sp-color-muted-fg] opacity-50] : [])
28
62
  )
29
63
  }
30
64
  end
65
+
66
+ def calendar_navigation_classes
67
+ { classes: klasses(*NAV) }
68
+ end
69
+
70
+ def calendar_navigation_navigator_classes
71
+ { classes: klasses(*NAV_BTN) }
72
+ end
73
+
74
+ def calendar_navigation_navigator_icon_classes
75
+ { classes: klasses(*NAV_ICON) }
76
+ end
31
77
  end
32
78
  end
33
79
  end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ module StimulusPlumbers
4
+ module Themes
5
+ module Tailwind
6
+ module Combobox
7
+ LISTBOX = %w[
8
+ py-[--sp-space-1] overflow-y-auto max-h-60
9
+ ].freeze
10
+
11
+ OPTION_BASE = %w[
12
+ flex items-center gap-[--sp-space-2] w-full
13
+ px-[--sp-space-2] py-[--sp-space-1]
14
+ rounded-[--sp-radius-sm] text-[--sp-text-sm]
15
+ cursor-pointer select-none outline-none
16
+ hover:bg-[--sp-color-muted] focus:bg-[--sp-color-muted]
17
+ ].freeze
18
+
19
+ OPTION_SELECTED = %w[
20
+ bg-[--sp-color-primary]/10 text-[--sp-color-primary]
21
+ ].freeze
22
+
23
+ OPTION_DISABLED = %w[
24
+ opacity-50 cursor-not-allowed pointer-events-none
25
+ ].freeze
26
+
27
+ OPTION_GROUP = %w[py-[--sp-space-1]].freeze
28
+
29
+ AUTOCOMPLETE_LOADING = %w[
30
+ flex items-center justify-center
31
+ py-[--sp-space-2] text-[--sp-text-sm] text-[--sp-color-muted-fg]
32
+ ].freeze
33
+
34
+ AUTOCOMPLETE_EMPTY = %w[
35
+ flex items-center justify-center
36
+ py-[--sp-space-2] text-[--sp-text-sm] text-[--sp-color-muted-fg]
37
+ ].freeze
38
+
39
+ TIME = %w[flex gap-[--sp-space-2] overflow-hidden].freeze
40
+
41
+ private
42
+
43
+ def combobox_listbox_classes
44
+ { classes: klasses(*LISTBOX) }
45
+ end
46
+
47
+ def combobox_option_classes(selected: false, disabled: false)
48
+ {
49
+ classes: klasses(
50
+ *OPTION_BASE,
51
+ *(selected ? OPTION_SELECTED : []),
52
+ *(disabled ? OPTION_DISABLED : [])
53
+ )
54
+ }
55
+ end
56
+
57
+ def combobox_option_group_classes
58
+ { classes: klasses(*OPTION_GROUP) }
59
+ end
60
+
61
+ def combobox_autocomplete_loading_classes
62
+ { classes: klasses(*AUTOCOMPLETE_LOADING) }
63
+ end
64
+
65
+ def combobox_autocomplete_empty_classes
66
+ { classes: klasses(*AUTOCOMPLETE_EMPTY) }
67
+ end
68
+
69
+ def combobox_time_classes
70
+ { classes: klasses(*TIME) }
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "tailwind/action_list"
4
+ require_relative "tailwind/combobox"
4
5
  require_relative "tailwind/avatar"
5
6
  require_relative "tailwind/button"
6
7
  require_relative "tailwind/calendar"
@@ -12,6 +13,7 @@ module StimulusPlumbers
12
13
  module Themes
13
14
  class TailwindTheme < Base
14
15
  include Tailwind::ActionList
16
+ include Tailwind::Combobox
15
17
  include Tailwind::Avatar
16
18
  include Tailwind::Button
17
19
  include Tailwind::Calendar
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module StimulusPlumbers
4
- VERSION = "0.2.8"
4
+ VERSION = "0.2.9"
5
5
  end
@@ -11,43 +11,53 @@ require_relative "stimulus_plumbers/helpers"
11
11
  require_relative "stimulus_plumbers/logger"
12
12
 
13
13
  # -- Plumber base --
14
- require_relative "stimulus_plumbers/components/plumber/html_options"
15
- require_relative "stimulus_plumbers/components/plumber/dispatcher"
16
- require_relative "stimulus_plumbers/components/plumber/renderer"
17
- require_relative "stimulus_plumbers/components/plumber/base"
14
+ require_relative "stimulus_plumbers/plumber/html_options"
15
+ require_relative "stimulus_plumbers/plumber/dispatcher"
16
+ require_relative "stimulus_plumbers/plumber/renderer"
17
+ require_relative "stimulus_plumbers/plumber/base"
18
18
 
19
19
  # -- UI components --
20
- require_relative "stimulus_plumbers/components/icon/renderer"
21
- require_relative "stimulus_plumbers/components/avatar/renderer"
22
- require_relative "stimulus_plumbers/components/button/renderer"
23
- require_relative "stimulus_plumbers/components/card/renderer"
24
- require_relative "stimulus_plumbers/components/action_list/renderer"
25
- require_relative "stimulus_plumbers/components/popover/renderer"
20
+ require_relative "stimulus_plumbers/components/icon"
21
+ require_relative "stimulus_plumbers/components/avatar"
22
+ require_relative "stimulus_plumbers/components/button"
23
+ require_relative "stimulus_plumbers/components/button/group"
24
+ require_relative "stimulus_plumbers/components/card"
25
+ require_relative "stimulus_plumbers/components/card/section"
26
+ require_relative "stimulus_plumbers/components/action_list"
27
+ require_relative "stimulus_plumbers/components/action_list/section"
28
+ require_relative "stimulus_plumbers/components/action_list/item"
29
+ require_relative "stimulus_plumbers/components/popover"
30
+ require_relative "stimulus_plumbers/components/popover/builder"
26
31
 
27
32
  # -- Calendar --
28
- require_relative "stimulus_plumbers/components/calendar/renderer"
33
+ require_relative "stimulus_plumbers/components/calendar"
34
+ require_relative "stimulus_plumbers/components/calendar/month/turbo"
29
35
  require_relative "stimulus_plumbers/components/calendar/month/turbo/days_of_week"
30
36
  require_relative "stimulus_plumbers/components/calendar/month/turbo/days_of_month"
31
- require_relative "stimulus_plumbers/components/calendar/month/turbo/renderer"
32
37
 
33
38
  # -- Date picker --
34
39
  require_relative "stimulus_plumbers/components/date_picker/navigator"
35
40
  require_relative "stimulus_plumbers/components/date_picker/navigation"
36
41
 
37
- # -- Time picker --
38
- require_relative "stimulus_plumbers/components/time_picker/renderer"
39
-
40
42
  # -- Combobox --
41
- require_relative "stimulus_plumbers/components/combobox/renderer"
42
- require_relative "stimulus_plumbers/components/combobox/option"
43
- require_relative "stimulus_plumbers/components/combobox/option_group"
43
+ require_relative "stimulus_plumbers/components/combobox"
44
+ require_relative "stimulus_plumbers/components/combobox/trigger"
45
+ require_relative "stimulus_plumbers/components/combobox/popover"
46
+ require_relative "stimulus_plumbers/components/combobox/options"
47
+ require_relative "stimulus_plumbers/components/combobox/options/option"
48
+ require_relative "stimulus_plumbers/components/combobox/options/option_group"
44
49
  require_relative "stimulus_plumbers/components/combobox/date"
45
50
  require_relative "stimulus_plumbers/components/combobox/dropdown"
46
51
  require_relative "stimulus_plumbers/components/combobox/autocomplete"
47
52
  require_relative "stimulus_plumbers/components/combobox/time"
53
+ require_relative "stimulus_plumbers/components/combobox/time/drum"
48
54
 
49
55
  # -- Form --
50
- require_relative "stimulus_plumbers/form/field_component"
56
+ require_relative "stimulus_plumbers/form/field"
57
+ require_relative "stimulus_plumbers/form/fields/group"
58
+ require_relative "stimulus_plumbers/form/fields/label"
59
+ require_relative "stimulus_plumbers/form/fields/hint"
60
+ require_relative "stimulus_plumbers/form/fields/error"
51
61
  require_relative "stimulus_plumbers/form/builder"
52
62
 
53
63
  module StimulusPlumbers
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.8
4
+ version: 0.2.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Chang
@@ -44,41 +44,50 @@ files:
44
44
  - app/assets/javascripts/stimulus-plumbers/stimulus-plumbers-controllers.umd.js
45
45
  - app/assets/stylesheets/stimulus_plumbers/tokens.css
46
46
  - lib/stimulus_plumbers.rb
47
- - lib/stimulus_plumbers/components/action_list/renderer.rb
48
- - lib/stimulus_plumbers/components/avatar/renderer.rb
49
- - lib/stimulus_plumbers/components/button/renderer.rb
47
+ - lib/stimulus_plumbers/components/action_list.rb
48
+ - lib/stimulus_plumbers/components/action_list/item.rb
49
+ - lib/stimulus_plumbers/components/action_list/section.rb
50
+ - lib/stimulus_plumbers/components/avatar.rb
51
+ - lib/stimulus_plumbers/components/button.rb
52
+ - lib/stimulus_plumbers/components/button/group.rb
53
+ - lib/stimulus_plumbers/components/calendar.rb
54
+ - lib/stimulus_plumbers/components/calendar/month/turbo.rb
50
55
  - lib/stimulus_plumbers/components/calendar/month/turbo/days_of_month.rb
51
56
  - lib/stimulus_plumbers/components/calendar/month/turbo/days_of_week.rb
52
- - lib/stimulus_plumbers/components/calendar/month/turbo/renderer.rb
53
- - lib/stimulus_plumbers/components/calendar/renderer.rb
54
- - lib/stimulus_plumbers/components/card/renderer.rb
57
+ - lib/stimulus_plumbers/components/card.rb
58
+ - lib/stimulus_plumbers/components/card/section.rb
59
+ - lib/stimulus_plumbers/components/combobox.rb
55
60
  - lib/stimulus_plumbers/components/combobox/autocomplete.rb
56
61
  - lib/stimulus_plumbers/components/combobox/date.rb
57
62
  - lib/stimulus_plumbers/components/combobox/dropdown.rb
58
- - lib/stimulus_plumbers/components/combobox/option.rb
59
- - lib/stimulus_plumbers/components/combobox/option_group.rb
60
- - lib/stimulus_plumbers/components/combobox/renderer.rb
63
+ - lib/stimulus_plumbers/components/combobox/options.rb
64
+ - lib/stimulus_plumbers/components/combobox/options/option.rb
65
+ - lib/stimulus_plumbers/components/combobox/options/option_group.rb
66
+ - lib/stimulus_plumbers/components/combobox/popover.rb
61
67
  - lib/stimulus_plumbers/components/combobox/time.rb
68
+ - lib/stimulus_plumbers/components/combobox/time/drum.rb
69
+ - lib/stimulus_plumbers/components/combobox/trigger.rb
62
70
  - lib/stimulus_plumbers/components/date_picker/navigation.rb
63
71
  - lib/stimulus_plumbers/components/date_picker/navigator.rb
64
- - lib/stimulus_plumbers/components/icon/renderer.rb
65
- - lib/stimulus_plumbers/components/plumber/base.rb
66
- - lib/stimulus_plumbers/components/plumber/dispatcher.rb
67
- - lib/stimulus_plumbers/components/plumber/html_options.rb
68
- - lib/stimulus_plumbers/components/plumber/renderer.rb
69
- - lib/stimulus_plumbers/components/popover/renderer.rb
70
- - lib/stimulus_plumbers/components/time_picker/renderer.rb
72
+ - lib/stimulus_plumbers/components/icon.rb
73
+ - lib/stimulus_plumbers/components/popover.rb
74
+ - lib/stimulus_plumbers/components/popover/builder.rb
71
75
  - lib/stimulus_plumbers/configuration.rb
72
76
  - lib/stimulus_plumbers/engine.rb
73
77
  - lib/stimulus_plumbers/form/builder.rb
74
- - lib/stimulus_plumbers/form/field_component.rb
78
+ - lib/stimulus_plumbers/form/field.rb
75
79
  - lib/stimulus_plumbers/form/fields/choice.rb
76
80
  - lib/stimulus_plumbers/form/fields/combobox.rb
81
+ - lib/stimulus_plumbers/form/fields/error.rb
77
82
  - lib/stimulus_plumbers/form/fields/file.rb
83
+ - lib/stimulus_plumbers/form/fields/group.rb
84
+ - lib/stimulus_plumbers/form/fields/hint.rb
85
+ - lib/stimulus_plumbers/form/fields/label.rb
78
86
  - lib/stimulus_plumbers/form/fields/password.rb
79
87
  - lib/stimulus_plumbers/form/fields/renderer.rb
80
88
  - lib/stimulus_plumbers/form/fields/search.rb
81
89
  - lib/stimulus_plumbers/form/fields/select.rb
90
+ - lib/stimulus_plumbers/form/fields/submit.rb
82
91
  - lib/stimulus_plumbers/form/fields/text.rb
83
92
  - lib/stimulus_plumbers/form/fields/text_area.rb
84
93
  - lib/stimulus_plumbers/helpers.rb
@@ -92,20 +101,19 @@ files:
92
101
  - lib/stimulus_plumbers/helpers/plumber_helper.rb
93
102
  - lib/stimulus_plumbers/helpers/popover_helper.rb
94
103
  - lib/stimulus_plumbers/logger.rb
104
+ - lib/stimulus_plumbers/plumber/base.rb
105
+ - lib/stimulus_plumbers/plumber/dispatcher.rb
106
+ - lib/stimulus_plumbers/plumber/html_options.rb
107
+ - lib/stimulus_plumbers/plumber/renderer.rb
95
108
  - lib/stimulus_plumbers/themes/base.rb
96
- - lib/stimulus_plumbers/themes/base/action_list.rb
97
- - lib/stimulus_plumbers/themes/base/avatar.rb
98
- - lib/stimulus_plumbers/themes/base/button.rb
99
- - lib/stimulus_plumbers/themes/base/calendar.rb
100
- - lib/stimulus_plumbers/themes/base/card.rb
101
- - lib/stimulus_plumbers/themes/base/form.rb
102
- - lib/stimulus_plumbers/themes/base/layout.rb
109
+ - lib/stimulus_plumbers/themes/schema.rb
103
110
  - lib/stimulus_plumbers/themes/schema/ranges.rb
104
111
  - lib/stimulus_plumbers/themes/tailwind/action_list.rb
105
112
  - lib/stimulus_plumbers/themes/tailwind/avatar.rb
106
113
  - lib/stimulus_plumbers/themes/tailwind/button.rb
107
114
  - lib/stimulus_plumbers/themes/tailwind/calendar.rb
108
115
  - lib/stimulus_plumbers/themes/tailwind/card.rb
116
+ - lib/stimulus_plumbers/themes/tailwind/combobox.rb
109
117
  - lib/stimulus_plumbers/themes/tailwind/form.rb
110
118
  - lib/stimulus_plumbers/themes/tailwind/layout.rb
111
119
  - lib/stimulus_plumbers/themes/tailwind_theme.rb
@@ -1,47 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module StimulusPlumbers
4
- module Components
5
- module ActionList
6
- class Renderer < Plumber::Base
7
- def list(**kwargs, &block)
8
- html_options = merge_html_options(
9
- { classes: theme.resolve(:action_list).fetch(:classes, "") },
10
- kwargs
11
- )
12
- template.content_tag(:div, template.capture(&block), **html_options)
13
- end
14
-
15
- def section(title: nil, **kwargs, &block)
16
- html_options = merge_html_options(kwargs)
17
- template.content_tag(:div, **html_options) do
18
- template.safe_join(
19
- [
20
- (template.content_tag(:p, title) if title.present?),
21
- template.content_tag(:ul, template.capture(&block))
22
- ].compact
23
- )
24
- end
25
- end
26
-
27
- def item(content = nil, url: nil, external: false, active: false, **kwargs, &block)
28
- content = template.capture(&block) if block_given?
29
- html_options = merge_html_options(
30
- { classes: theme.resolve(:action_list_item, active: active).fetch(:classes, "") },
31
- kwargs
32
- )
33
-
34
- inner = if url
35
- html_options[:target] = "_blank" if external
36
- template.content_tag(:a, content, href: url, **html_options)
37
- else
38
- html_options[:type] ||= "button"
39
- template.content_tag(:button, content, **html_options)
40
- end
41
-
42
- template.content_tag(:li, inner)
43
- end
44
- end
45
- end
46
- end
47
- end