stimulus_plumbers 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +75 -0
- data/app/assets/javascripts/stimulus-plumbers/.keep +0 -0
- data/app/assets/stylesheets/stimulus_plumbers/tokens.css +83 -0
- data/lib/stimulus_plumbers/components/action_list/renderer.rb +47 -0
- data/lib/stimulus_plumbers/components/avatar/renderer.rb +74 -0
- data/lib/stimulus_plumbers/components/button/renderer.rb +33 -0
- data/lib/stimulus_plumbers/components/calendar/month/turbo/days_of_month.rb +124 -0
- data/lib/stimulus_plumbers/components/calendar/month/turbo/days_of_week.rb +36 -0
- data/lib/stimulus_plumbers/components/calendar/month/turbo/renderer.rb +57 -0
- data/lib/stimulus_plumbers/components/calendar/renderer.rb +35 -0
- data/lib/stimulus_plumbers/components/card/renderer.rb +41 -0
- data/lib/stimulus_plumbers/components/date_picker/navigation.rb +49 -0
- data/lib/stimulus_plumbers/components/date_picker/navigator.rb +31 -0
- data/lib/stimulus_plumbers/components/date_picker/renderer.rb +82 -0
- data/lib/stimulus_plumbers/components/icon/renderer.rb +51 -0
- data/lib/stimulus_plumbers/components/plumber/base.rb +22 -0
- data/lib/stimulus_plumbers/components/plumber/dispatcher.rb +113 -0
- data/lib/stimulus_plumbers/components/plumber/html_options.rb +34 -0
- data/lib/stimulus_plumbers/components/plumber/renderer.rb +91 -0
- data/lib/stimulus_plumbers/components/popover/renderer.rb +46 -0
- data/lib/stimulus_plumbers/configuration.rb +39 -0
- data/lib/stimulus_plumbers/engine.rb +21 -0
- data/lib/stimulus_plumbers/form/builder.rb +67 -0
- data/lib/stimulus_plumbers/form/field_component.rb +80 -0
- data/lib/stimulus_plumbers/form/fields/choice.rb +25 -0
- data/lib/stimulus_plumbers/form/fields/file.rb +16 -0
- data/lib/stimulus_plumbers/form/fields/renderer.rb +57 -0
- data/lib/stimulus_plumbers/form/fields/select.rb +27 -0
- data/lib/stimulus_plumbers/form/fields/text.rb +25 -0
- data/lib/stimulus_plumbers/form/fields/text_area.rb +16 -0
- data/lib/stimulus_plumbers/helpers/action_list_helper.rb +25 -0
- data/lib/stimulus_plumbers/helpers/avatar_helper.rb +17 -0
- data/lib/stimulus_plumbers/helpers/button_helper.rb +25 -0
- data/lib/stimulus_plumbers/helpers/calendar_helper.rb +26 -0
- data/lib/stimulus_plumbers/helpers/calendar_turbo_helper.rb +31 -0
- data/lib/stimulus_plumbers/helpers/card_helper.rb +21 -0
- data/lib/stimulus_plumbers/helpers/date_picker_helper.rb +17 -0
- data/lib/stimulus_plumbers/helpers/plumber_helper.rb +15 -0
- data/lib/stimulus_plumbers/helpers/popover_helper.rb +17 -0
- data/lib/stimulus_plumbers/helpers.rb +25 -0
- data/lib/stimulus_plumbers/logger.rb +20 -0
- data/lib/stimulus_plumbers/themes/action_list.rb +14 -0
- data/lib/stimulus_plumbers/themes/avatar.rb +14 -0
- data/lib/stimulus_plumbers/themes/base.rb +73 -0
- data/lib/stimulus_plumbers/themes/button.rb +18 -0
- data/lib/stimulus_plumbers/themes/calendar.rb +15 -0
- data/lib/stimulus_plumbers/themes/card.rb +12 -0
- data/lib/stimulus_plumbers/themes/form.rb +30 -0
- data/lib/stimulus_plumbers/themes/layout.rb +12 -0
- data/lib/stimulus_plumbers/themes/schema/ranges.rb +15 -0
- data/lib/stimulus_plumbers/themes/tailwind/action_list.rb +33 -0
- data/lib/stimulus_plumbers/themes/tailwind/avatar.rb +52 -0
- data/lib/stimulus_plumbers/themes/tailwind/button.rb +89 -0
- data/lib/stimulus_plumbers/themes/tailwind/calendar.rb +34 -0
- data/lib/stimulus_plumbers/themes/tailwind/card.rb +24 -0
- data/lib/stimulus_plumbers/themes/tailwind/form.rb +104 -0
- data/lib/stimulus_plumbers/themes/tailwind/layout.rb +25 -0
- data/lib/stimulus_plumbers/themes/tailwind_theme.rb +29 -0
- data/lib/stimulus_plumbers/version.rb +5 -0
- data/lib/stimulus_plumbers.rb +48 -0
- metadata +129 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module StimulusPlumbers
|
|
4
|
+
module Themes
|
|
5
|
+
module Tailwind
|
|
6
|
+
module Avatar
|
|
7
|
+
COLORS = {
|
|
8
|
+
amber: "text-white bg-amber-600",
|
|
9
|
+
lime: "text-white bg-lime-600",
|
|
10
|
+
sky: "text-white bg-sky-600",
|
|
11
|
+
cyan: "text-white bg-cyan-600",
|
|
12
|
+
teal: "text-white bg-teal-600",
|
|
13
|
+
emerald: "text-white bg-emerald-600",
|
|
14
|
+
indigo: "text-white bg-indigo-600",
|
|
15
|
+
fuchsia: "text-white bg-fuchsia-600",
|
|
16
|
+
rose: "text-white bg-rose-600",
|
|
17
|
+
pink: "text-white bg-pink-600",
|
|
18
|
+
violet: "text-white bg-violet-600",
|
|
19
|
+
blue: "text-white bg-blue-600"
|
|
20
|
+
}.freeze
|
|
21
|
+
|
|
22
|
+
SIZES = {
|
|
23
|
+
sm: "size-[--sp-icon-size]",
|
|
24
|
+
md: "size-[--sp-avatar-size]",
|
|
25
|
+
lg: "size-12"
|
|
26
|
+
}.freeze
|
|
27
|
+
|
|
28
|
+
BASE = %w[rounded-[--sp-radius-full] overflow-hidden inline-flex items-center justify-center].freeze
|
|
29
|
+
|
|
30
|
+
def avatar_colors
|
|
31
|
+
COLORS
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def avatar_color_range
|
|
35
|
+
COLORS.values
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
|
|
40
|
+
def avatar_classes(size: :md, color: nil)
|
|
41
|
+
{
|
|
42
|
+
classes: klasses(
|
|
43
|
+
SIZES.fetch(size, SIZES[:md]),
|
|
44
|
+
COLORS.fetch(color, nil),
|
|
45
|
+
*BASE
|
|
46
|
+
)
|
|
47
|
+
}
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module StimulusPlumbers
|
|
4
|
+
module Themes
|
|
5
|
+
module Tailwind
|
|
6
|
+
module Button
|
|
7
|
+
VARIANTS = {
|
|
8
|
+
primary: %w[
|
|
9
|
+
bg-[--sp-color-primary]
|
|
10
|
+
text-[--sp-color-primary-fg]
|
|
11
|
+
hover:bg-[--sp-color-primary]/90
|
|
12
|
+
focus-visible:ring-[--sp-focus-ring-color]
|
|
13
|
+
].freeze,
|
|
14
|
+
secondary: %w[
|
|
15
|
+
bg-[--sp-color-muted]
|
|
16
|
+
text-[--sp-color-fg]
|
|
17
|
+
hover:bg-[--sp-color-border]
|
|
18
|
+
].freeze,
|
|
19
|
+
outline: %w[
|
|
20
|
+
border border-[--sp-color-border]
|
|
21
|
+
bg-transparent
|
|
22
|
+
text-[--sp-color-fg]
|
|
23
|
+
hover:bg-[--sp-color-muted]
|
|
24
|
+
].freeze,
|
|
25
|
+
destructive: %w[
|
|
26
|
+
bg-[--sp-color-destructive]
|
|
27
|
+
text-[--sp-color-destructive-fg]
|
|
28
|
+
hover:bg-[--sp-color-destructive]/90
|
|
29
|
+
].freeze,
|
|
30
|
+
ghost: %w[hover:bg-[--sp-color-muted] text-[--sp-color-fg]].freeze,
|
|
31
|
+
link: %w[text-[--sp-color-primary] underline-offset-4 hover:underline].freeze
|
|
32
|
+
}.freeze
|
|
33
|
+
|
|
34
|
+
SIZES = {
|
|
35
|
+
sm: %w[h-8 px-[--sp-space-3] text-[--sp-text-sm]].freeze,
|
|
36
|
+
md: %w[h-9 px-[--sp-space-4] text-[--sp-text-base]].freeze,
|
|
37
|
+
lg: %w[h-11 px-[--sp-space-6] text-[--sp-text-lg]].freeze
|
|
38
|
+
}.freeze
|
|
39
|
+
|
|
40
|
+
FLEX_ALIGN = {
|
|
41
|
+
row: {
|
|
42
|
+
left: "justify-start",
|
|
43
|
+
center: %w[justify-center items-center].freeze,
|
|
44
|
+
right: "justify-end",
|
|
45
|
+
top: "items-start",
|
|
46
|
+
bottom: "items-end"
|
|
47
|
+
}.freeze,
|
|
48
|
+
col: {
|
|
49
|
+
top: "justify-start",
|
|
50
|
+
center: %w[justify-center items-center].freeze,
|
|
51
|
+
bottom: "justify-end",
|
|
52
|
+
left: "items-start",
|
|
53
|
+
right: "items-end"
|
|
54
|
+
}.freeze
|
|
55
|
+
}.freeze
|
|
56
|
+
|
|
57
|
+
BASE = %w[
|
|
58
|
+
inline-flex items-center justify-center gap-2 font-medium
|
|
59
|
+
rounded-[--sp-radius-md] transition-colors
|
|
60
|
+
focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2
|
|
61
|
+
disabled:pointer-events-none disabled:opacity-50
|
|
62
|
+
].freeze
|
|
63
|
+
|
|
64
|
+
GROUP_BASE = %w[flex gap-[--sp-space-2]].freeze
|
|
65
|
+
|
|
66
|
+
private
|
|
67
|
+
|
|
68
|
+
def button_classes(variant: :primary, size: :md)
|
|
69
|
+
{
|
|
70
|
+
classes: klasses(
|
|
71
|
+
*BASE,
|
|
72
|
+
*VARIANTS.fetch(variant, []),
|
|
73
|
+
*SIZES.fetch(size, [])
|
|
74
|
+
)
|
|
75
|
+
}
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def button_group_classes(alignment: :left, direction: :row)
|
|
79
|
+
{
|
|
80
|
+
classes: klasses(
|
|
81
|
+
*GROUP_BASE,
|
|
82
|
+
*Array(FLEX_ALIGN.dig(direction, alignment))
|
|
83
|
+
)
|
|
84
|
+
}
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module StimulusPlumbers
|
|
4
|
+
module Themes
|
|
5
|
+
module Tailwind
|
|
6
|
+
module Calendar
|
|
7
|
+
BASE = %w[
|
|
8
|
+
size-[--sp-calendar-day-size] rounded-[--sp-radius-md]
|
|
9
|
+
flex items-center justify-center text-[--sp-text-sm]
|
|
10
|
+
hover:bg-[--sp-color-muted] cursor-pointer
|
|
11
|
+
].freeze
|
|
12
|
+
|
|
13
|
+
DAY_SELECTED = %w[
|
|
14
|
+
bg-[--sp-color-primary]
|
|
15
|
+
text-[--sp-color-primary-fg]
|
|
16
|
+
hover:bg-[--sp-color-primary]/90
|
|
17
|
+
].freeze
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def calendar_day_classes(today: false, selected: false, outside: false)
|
|
22
|
+
{
|
|
23
|
+
classes: klasses(
|
|
24
|
+
*BASE,
|
|
25
|
+
*(today ? ["font-bold"] : []),
|
|
26
|
+
*(selected ? DAY_SELECTED : []),
|
|
27
|
+
*(outside ? %w[text-[--sp-color-muted-fg] opacity-50] : [])
|
|
28
|
+
)
|
|
29
|
+
}
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module StimulusPlumbers
|
|
4
|
+
module Themes
|
|
5
|
+
module Tailwind
|
|
6
|
+
module Card
|
|
7
|
+
BASE = %w[
|
|
8
|
+
rounded-[--sp-radius-lg] border border-[--sp-color-border]
|
|
9
|
+
bg-[--sp-color-bg] shadow-[--sp-shadow-sm]
|
|
10
|
+
].freeze
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
|
|
14
|
+
def card_classes
|
|
15
|
+
{ classes: klasses(*BASE) }
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def card_section_classes
|
|
19
|
+
{ classes: klasses("p-[--sp-space-6]") }
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module StimulusPlumbers
|
|
4
|
+
module Themes
|
|
5
|
+
module Tailwind
|
|
6
|
+
module Form
|
|
7
|
+
INPUT_BASE = %w[
|
|
8
|
+
w-full rounded-md border px-3 py-2 text-sm text-gray-900
|
|
9
|
+
bg-white focus:outline-none focus:ring-2 focus:ring-offset-0
|
|
10
|
+
].freeze
|
|
11
|
+
INPUT_ERROR = %w[border-red-700 focus:ring-red-700].freeze
|
|
12
|
+
INPUT_DEFAULT = %w[border-gray-500 focus:ring-blue-700].freeze
|
|
13
|
+
|
|
14
|
+
GROUP_BASE = %w[flex gap-1 mb-3].freeze
|
|
15
|
+
GROUP_INLINE = %w[flex-row items-center].freeze
|
|
16
|
+
|
|
17
|
+
LABEL = %w[text-sm font-medium text-gray-900].freeze
|
|
18
|
+
REQUIRED_MARK = %w[text-red-700 ml-0.5].freeze
|
|
19
|
+
DETAILS = %w[text-xs text-gray-600].freeze
|
|
20
|
+
ERROR_TEXT = %w[text-xs text-red-700].freeze
|
|
21
|
+
CHECKBOX = %w[size-4 rounded border-gray-500 text-blue-700].freeze
|
|
22
|
+
RADIO = %w[size-4 border-gray-500 text-blue-700].freeze
|
|
23
|
+
|
|
24
|
+
ACTOR_BASE = %w[flex items-center overflow-hidden rounded-md border].freeze
|
|
25
|
+
ACTOR_BORDER = { error: "border-red-700", default: "border-gray-500" }.freeze
|
|
26
|
+
|
|
27
|
+
INPUT_REVEAL = %w[
|
|
28
|
+
flex-1 border-0 bg-transparent px-3 py-2 text-sm text-gray-900 focus:outline-none
|
|
29
|
+
].freeze
|
|
30
|
+
BUTTON_REVEAL = %w[
|
|
31
|
+
self-stretch border-0 bg-transparent px-3 cursor-pointer text-gray-600 hover:text-gray-900 text-sm
|
|
32
|
+
].freeze
|
|
33
|
+
SUBMIT_LINK = %w[cursor-pointer text-sm font-medium text-gray-900 hover:underline].freeze
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def form_group_classes(layout: :stacked, **_rest)
|
|
38
|
+
{ classes: klasses(*GROUP_BASE, layout == :inline ? GROUP_INLINE : "flex-col") }
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def form_label_classes(**)
|
|
42
|
+
{ classes: klasses(*LABEL) }
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def form_required_mark_classes
|
|
46
|
+
{ classes: klasses(*REQUIRED_MARK) }
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def form_details_classes
|
|
50
|
+
{ classes: klasses(*DETAILS) }
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def form_error_classes
|
|
54
|
+
{ classes: klasses(*ERROR_TEXT) }
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def form_input_classes(error: false)
|
|
58
|
+
{ classes: klasses(*INPUT_BASE, *(error ? INPUT_ERROR : INPUT_DEFAULT)) }
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def form_textarea_classes(error: false)
|
|
62
|
+
form_input_classes(error: error)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def form_file_classes(error: false)
|
|
66
|
+
form_input_classes(error: error)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def form_select_classes(error: false)
|
|
70
|
+
form_input_classes(error: error)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def form_checkbox_classes(**)
|
|
74
|
+
{ classes: klasses(*CHECKBOX) }
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def form_radio_classes(**)
|
|
78
|
+
{ classes: klasses(*RADIO) }
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def form_actor_classes(error: false)
|
|
82
|
+
{ classes: klasses(*ACTOR_BASE, ACTOR_BORDER[error ? :error : :default]) }
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def form_input_reveal_classes
|
|
86
|
+
{ classes: klasses(*INPUT_REVEAL) }
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def form_button_reveal_classes
|
|
90
|
+
{ classes: klasses(*BUTTON_REVEAL) }
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def form_submit_classes(variant: :default)
|
|
94
|
+
case variant
|
|
95
|
+
when :button
|
|
96
|
+
{ classes: klasses(*Button::BASE, *Button::VARIANTS[:primary], *Button::SIZES[:md]) }
|
|
97
|
+
else
|
|
98
|
+
{ classes: klasses(*SUBMIT_LINK) }
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module StimulusPlumbers
|
|
4
|
+
module Themes
|
|
5
|
+
module Tailwind
|
|
6
|
+
module Layout
|
|
7
|
+
DIVIDER = %w[border-t border-[--sp-color-border] my-[--sp-space-1]].freeze
|
|
8
|
+
POPOVER = %w[
|
|
9
|
+
rounded-[--sp-radius-lg] border border-[--sp-color-border]
|
|
10
|
+
bg-[--sp-color-bg] shadow-[--sp-shadow-md] z-[--sp-z-popover]
|
|
11
|
+
].freeze
|
|
12
|
+
|
|
13
|
+
private
|
|
14
|
+
|
|
15
|
+
def divider_classes
|
|
16
|
+
{ classes: klasses(*DIVIDER) }
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def popover_classes
|
|
20
|
+
{ classes: klasses(*POPOVER) }
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "tailwind/action_list"
|
|
4
|
+
require_relative "tailwind/avatar"
|
|
5
|
+
require_relative "tailwind/button"
|
|
6
|
+
require_relative "tailwind/calendar"
|
|
7
|
+
require_relative "tailwind/card"
|
|
8
|
+
require_relative "tailwind/form"
|
|
9
|
+
require_relative "tailwind/layout"
|
|
10
|
+
|
|
11
|
+
module StimulusPlumbers
|
|
12
|
+
module Themes
|
|
13
|
+
class TailwindTheme < Base
|
|
14
|
+
include Tailwind::ActionList
|
|
15
|
+
include Tailwind::Avatar
|
|
16
|
+
include Tailwind::Button
|
|
17
|
+
include Tailwind::Calendar
|
|
18
|
+
include Tailwind::Card
|
|
19
|
+
include Tailwind::Form
|
|
20
|
+
include Tailwind::Layout
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
def klasses(*classes)
|
|
25
|
+
classes.flatten.reject(&:blank?).join(" ")
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "stimulus_plumbers/version"
|
|
4
|
+
|
|
5
|
+
require "active_support"
|
|
6
|
+
require "active_support/core_ext/string"
|
|
7
|
+
|
|
8
|
+
require_relative "stimulus_plumbers/configuration"
|
|
9
|
+
require_relative "stimulus_plumbers/helpers"
|
|
10
|
+
require_relative "stimulus_plumbers/logger"
|
|
11
|
+
|
|
12
|
+
require_relative "stimulus_plumbers/components/plumber/html_options"
|
|
13
|
+
require_relative "stimulus_plumbers/components/plumber/dispatcher"
|
|
14
|
+
require_relative "stimulus_plumbers/components/plumber/renderer"
|
|
15
|
+
require_relative "stimulus_plumbers/components/plumber/base"
|
|
16
|
+
|
|
17
|
+
require_relative "stimulus_plumbers/components/icon/renderer"
|
|
18
|
+
require_relative "stimulus_plumbers/components/avatar/renderer"
|
|
19
|
+
require_relative "stimulus_plumbers/components/button/renderer"
|
|
20
|
+
require_relative "stimulus_plumbers/components/card/renderer"
|
|
21
|
+
require_relative "stimulus_plumbers/components/action_list/renderer"
|
|
22
|
+
require_relative "stimulus_plumbers/components/popover/renderer"
|
|
23
|
+
|
|
24
|
+
require_relative "stimulus_plumbers/components/calendar/renderer"
|
|
25
|
+
require_relative "stimulus_plumbers/components/calendar/month/turbo/days_of_week"
|
|
26
|
+
require_relative "stimulus_plumbers/components/calendar/month/turbo/days_of_month"
|
|
27
|
+
require_relative "stimulus_plumbers/components/calendar/month/turbo/renderer"
|
|
28
|
+
|
|
29
|
+
require_relative "stimulus_plumbers/components/date_picker/navigator"
|
|
30
|
+
require_relative "stimulus_plumbers/components/date_picker/navigation"
|
|
31
|
+
require_relative "stimulus_plumbers/components/date_picker/renderer"
|
|
32
|
+
|
|
33
|
+
require_relative "stimulus_plumbers/form/field_component"
|
|
34
|
+
require_relative "stimulus_plumbers/form/builder"
|
|
35
|
+
|
|
36
|
+
module StimulusPlumbers
|
|
37
|
+
class << self
|
|
38
|
+
def configure
|
|
39
|
+
yield config
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def config
|
|
43
|
+
@config ||= Configuration.new
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
require_relative "stimulus_plumbers/engine" if defined?(Rails::Engine)
|
metadata
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: stimulus_plumbers
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.2.2
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Ryan Chang
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2026-04-14 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: railties
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ">="
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '6.1'
|
|
20
|
+
- - "<"
|
|
21
|
+
- !ruby/object:Gem::Version
|
|
22
|
+
version: '8.2'
|
|
23
|
+
type: :runtime
|
|
24
|
+
prerelease: false
|
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
26
|
+
requirements:
|
|
27
|
+
- - ">="
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: '6.1'
|
|
30
|
+
- - "<"
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '8.2'
|
|
33
|
+
description: Semantically correct, accessible UI components for Rails using ActionView
|
|
34
|
+
helpers and Stimulus
|
|
35
|
+
email:
|
|
36
|
+
- ryancyq@gmail.com
|
|
37
|
+
executables: []
|
|
38
|
+
extensions: []
|
|
39
|
+
extra_rdoc_files: []
|
|
40
|
+
files:
|
|
41
|
+
- README.md
|
|
42
|
+
- app/assets/javascripts/stimulus-plumbers/.keep
|
|
43
|
+
- app/assets/stylesheets/stimulus_plumbers/tokens.css
|
|
44
|
+
- lib/stimulus_plumbers.rb
|
|
45
|
+
- lib/stimulus_plumbers/components/action_list/renderer.rb
|
|
46
|
+
- lib/stimulus_plumbers/components/avatar/renderer.rb
|
|
47
|
+
- lib/stimulus_plumbers/components/button/renderer.rb
|
|
48
|
+
- lib/stimulus_plumbers/components/calendar/month/turbo/days_of_month.rb
|
|
49
|
+
- lib/stimulus_plumbers/components/calendar/month/turbo/days_of_week.rb
|
|
50
|
+
- lib/stimulus_plumbers/components/calendar/month/turbo/renderer.rb
|
|
51
|
+
- lib/stimulus_plumbers/components/calendar/renderer.rb
|
|
52
|
+
- lib/stimulus_plumbers/components/card/renderer.rb
|
|
53
|
+
- lib/stimulus_plumbers/components/date_picker/navigation.rb
|
|
54
|
+
- lib/stimulus_plumbers/components/date_picker/navigator.rb
|
|
55
|
+
- lib/stimulus_plumbers/components/date_picker/renderer.rb
|
|
56
|
+
- lib/stimulus_plumbers/components/icon/renderer.rb
|
|
57
|
+
- lib/stimulus_plumbers/components/plumber/base.rb
|
|
58
|
+
- lib/stimulus_plumbers/components/plumber/dispatcher.rb
|
|
59
|
+
- lib/stimulus_plumbers/components/plumber/html_options.rb
|
|
60
|
+
- lib/stimulus_plumbers/components/plumber/renderer.rb
|
|
61
|
+
- lib/stimulus_plumbers/components/popover/renderer.rb
|
|
62
|
+
- lib/stimulus_plumbers/configuration.rb
|
|
63
|
+
- lib/stimulus_plumbers/engine.rb
|
|
64
|
+
- lib/stimulus_plumbers/form/builder.rb
|
|
65
|
+
- lib/stimulus_plumbers/form/field_component.rb
|
|
66
|
+
- lib/stimulus_plumbers/form/fields/choice.rb
|
|
67
|
+
- lib/stimulus_plumbers/form/fields/file.rb
|
|
68
|
+
- lib/stimulus_plumbers/form/fields/renderer.rb
|
|
69
|
+
- lib/stimulus_plumbers/form/fields/select.rb
|
|
70
|
+
- lib/stimulus_plumbers/form/fields/text.rb
|
|
71
|
+
- lib/stimulus_plumbers/form/fields/text_area.rb
|
|
72
|
+
- lib/stimulus_plumbers/helpers.rb
|
|
73
|
+
- lib/stimulus_plumbers/helpers/action_list_helper.rb
|
|
74
|
+
- lib/stimulus_plumbers/helpers/avatar_helper.rb
|
|
75
|
+
- lib/stimulus_plumbers/helpers/button_helper.rb
|
|
76
|
+
- lib/stimulus_plumbers/helpers/calendar_helper.rb
|
|
77
|
+
- lib/stimulus_plumbers/helpers/calendar_turbo_helper.rb
|
|
78
|
+
- lib/stimulus_plumbers/helpers/card_helper.rb
|
|
79
|
+
- lib/stimulus_plumbers/helpers/date_picker_helper.rb
|
|
80
|
+
- lib/stimulus_plumbers/helpers/plumber_helper.rb
|
|
81
|
+
- lib/stimulus_plumbers/helpers/popover_helper.rb
|
|
82
|
+
- lib/stimulus_plumbers/logger.rb
|
|
83
|
+
- lib/stimulus_plumbers/themes/action_list.rb
|
|
84
|
+
- lib/stimulus_plumbers/themes/avatar.rb
|
|
85
|
+
- lib/stimulus_plumbers/themes/base.rb
|
|
86
|
+
- lib/stimulus_plumbers/themes/button.rb
|
|
87
|
+
- lib/stimulus_plumbers/themes/calendar.rb
|
|
88
|
+
- lib/stimulus_plumbers/themes/card.rb
|
|
89
|
+
- lib/stimulus_plumbers/themes/form.rb
|
|
90
|
+
- lib/stimulus_plumbers/themes/layout.rb
|
|
91
|
+
- lib/stimulus_plumbers/themes/schema/ranges.rb
|
|
92
|
+
- lib/stimulus_plumbers/themes/tailwind/action_list.rb
|
|
93
|
+
- lib/stimulus_plumbers/themes/tailwind/avatar.rb
|
|
94
|
+
- lib/stimulus_plumbers/themes/tailwind/button.rb
|
|
95
|
+
- lib/stimulus_plumbers/themes/tailwind/calendar.rb
|
|
96
|
+
- lib/stimulus_plumbers/themes/tailwind/card.rb
|
|
97
|
+
- lib/stimulus_plumbers/themes/tailwind/form.rb
|
|
98
|
+
- lib/stimulus_plumbers/themes/tailwind/layout.rb
|
|
99
|
+
- lib/stimulus_plumbers/themes/tailwind_theme.rb
|
|
100
|
+
- lib/stimulus_plumbers/version.rb
|
|
101
|
+
homepage: https://github.com/ryancyq/stimulus-plumbers
|
|
102
|
+
licenses:
|
|
103
|
+
- MIT
|
|
104
|
+
metadata:
|
|
105
|
+
rubygems_mfa_required: 'true'
|
|
106
|
+
allowed_push_host: https://rubygems.org
|
|
107
|
+
changelog_uri: https://github.com/ryancyq/stimulus-plumbers/blob/main/CHANGELOG.md
|
|
108
|
+
homepage_uri: https://github.com/ryancyq/stimulus-plumbers
|
|
109
|
+
source_code_uri: https://github.com/ryancyq/stimulus-plumbers/tree/main/stimulus-plumbers-rails
|
|
110
|
+
post_install_message:
|
|
111
|
+
rdoc_options: []
|
|
112
|
+
require_paths:
|
|
113
|
+
- lib
|
|
114
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
115
|
+
requirements:
|
|
116
|
+
- - ">="
|
|
117
|
+
- !ruby/object:Gem::Version
|
|
118
|
+
version: '3.0'
|
|
119
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
120
|
+
requirements:
|
|
121
|
+
- - ">="
|
|
122
|
+
- !ruby/object:Gem::Version
|
|
123
|
+
version: 3.2.0
|
|
124
|
+
requirements: []
|
|
125
|
+
rubygems_version: 3.5.22
|
|
126
|
+
signing_key:
|
|
127
|
+
specification_version: 4
|
|
128
|
+
summary: Accessible ActionView components for Rails with Stimulus controllers
|
|
129
|
+
test_files: []
|