ultimate_turbo_modal 1.1.2 → 1.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: af46e6d6c899d0fcf8054272b157d5e0f286e183e9c0b15c4e3b883df629d4f4
4
- data.tar.gz: 91a99b9b60ea2892b2c030027d073218b4d751dd155a0bb84420bc6e60db628e
3
+ metadata.gz: a456aa7e0fdb49a0b9ae53817f965df422145433f6d981811cbb0172126422dd
4
+ data.tar.gz: 4fdb91772d698e7d1987024acb165f1ef8380446d600c5146b834025cb84c497
5
5
  SHA512:
6
- metadata.gz: ccff10a4c4fee7a554c58632d9850507be533877333b0b8caadf2966fbc5244719f828fdb4507674668129c6bfebee1e7cb3e7a7fae5fc1b8238eae8fb5ea637
7
- data.tar.gz: d636a2425ce101e4339cec01573e6a29aea861f36328bf4e6a8cd3513ccfe9a5979b4fa424fa69320a809ff94f80f4e28d3f39bbc7f6f6d6426217191fe9ea4c
6
+ metadata.gz: 63ae9236655b7d2d300507413808a5771ca205dc12d08eecc48a3f256ddf24525f8b2b401a432a4df035d6fbd929c738e0a74c5bd1036a1f16b62b786ce756bb
7
+ data.tar.gz: d5fc098465cdba81f1981e49cce9721e049db78d02a448e734ea60f0c41b6119311a15e1ac922c7d0667d274431cb86bacaf9d3310c2ee51979f695cee3135ac
data/.rubocop.yml CHANGED
@@ -1,3 +1,6 @@
1
+ AllCops:
2
+ TargetRubyVersion: 3.2
3
+
1
4
  require:
2
5
  - standard
3
6
  inherit_gem:
data/CHANGELOG.md CHANGED
@@ -1,4 +1,13 @@
1
- ## [1.1.2] - 2023-11-01
1
+ ## [1.2.0] - 2023-11-05
2
+
3
+ - Dark mode support
4
+ - Added header divider (configurable)
5
+ - Added footer section with divider (configurable)
6
+ - Tailwind flavor now uses data attributes to style elements
7
+ - Updated look and feel
8
+ - Simplified code a bit
9
+
10
+ ## [1.1.3] - 2023-11-01
2
11
 
3
12
  - Added configuration block
4
13
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ultimate_turbo_modal (1.1.2)
4
+ ultimate_turbo_modal (1.2.0)
5
5
  phlex-rails (>= 1.0, < 2.0)
6
6
  rails (>= 7)
7
7
  stimulus-rails
data/README.md CHANGED
@@ -67,6 +67,9 @@ UltimateTurboModal.configure do |config|
67
67
  config.padding = true
68
68
  config.advance = true
69
69
  config.close_button = true
70
+ config.header = true
71
+ config.header_divider = true
72
+ config.footer_divider = true
70
73
  end
71
74
  ```
72
75
 
@@ -153,6 +156,23 @@ When opening the modal, the URL in the URL bar will change to the URL of the vie
153
156
 
154
157
  If a URL is specified as a String, the browser history will advance, and the URL shown in the URL bad will be replaced by the URL specified.
155
158
 
159
+ ### `title`, default: `nil`
160
+
161
+ Title to display in the modal header.
162
+
163
+ ### `header`, default: `true`
164
+
165
+ Whether to display a modal header.
166
+
167
+ ### `header_divider`, default: `true`
168
+
169
+ Whether to display a divider below the header.
170
+
171
+ ### `footer_divider`, default: `true`
172
+
173
+ Whether to display a divider above the footer. The divider will not appear if no footer was specified.
174
+
175
+
156
176
 
157
177
  ### Example usage with options
158
178
 
@@ -192,6 +212,11 @@ addEventListener("turbo:before-frame-render", (event) => {
192
212
  })
193
213
  ```
194
214
 
215
+ &nbsp;
216
+ &nbsp;
217
+ ## Thanks
218
+
219
+ Thanks to [@joeldrapper](https://github.com/KonnorRogers) and [@konnorrogers](https://github.com/KonnorRogers) for all the help!
195
220
 
196
221
  &nbsp;
197
222
  &nbsp;
@@ -2,18 +2,27 @@ class UltimateTurboModal::Base < Phlex::HTML
2
2
  # @param padding [Boolean] Whether to add padding around the modal content
3
3
  # @param close_button [Boolean] Whether to show a close button.
4
4
  # @param advance [Boolean] Whether to update the browser history when opening and closing the modal
5
- # @param advance_url [String] Override the URL to use when advancing the history
5
+ # @param header_divider [Boolean] Whether to show a divider between the header and the main content
6
+ # @param footer_divider [Boolean] Whether to show a divider between the main content and the footer
7
+ # @param title [String] The title of the modal
6
8
  # @param request [ActionDispatch::Request] The current Rails request object
7
9
  def initialize(
8
10
  padding: UltimateTurboModal.configuration.padding,
9
11
  close_button: UltimateTurboModal.configuration.close_button,
10
12
  advance: UltimateTurboModal.configuration.advance,
11
- request: nil
13
+ header: UltimateTurboModal.configuration.header,
14
+ header_divider: UltimateTurboModal.configuration.header_divider,
15
+ footer_divider: UltimateTurboModal.configuration.footer_divider,
16
+ title: nil, request: nil
12
17
  )
13
18
  @padding = padding
14
19
  @close_button = close_button
15
20
  @advance = !!advance
16
21
  @advance_url = advance if advance.present? && advance.is_a?(String)
22
+ @title = title
23
+ @header = header
24
+ @header_divider = header_divider
25
+ @footer_divider = footer_divider
17
26
  @request = request
18
27
 
19
28
  unless self.class.include?(Turbo::FramesHelper)
@@ -25,55 +34,53 @@ class UltimateTurboModal::Base < Phlex::HTML
25
34
  end
26
35
  end
27
36
 
28
- def template(&)
37
+ def template(&block)
29
38
  if turbo_frame?
30
- turbo_frame_tag("modal") { modal(&) }
39
+ turbo_frame_tag("modal") do
40
+ modal(&block)
41
+ end
31
42
  elsif turbo_stream?
32
43
  Turbo::StreamsHelper.turbo_stream_action_tag("update", target: "modal") do
33
- template { modal(&) }
44
+ modal(&block)
34
45
  end
35
46
  else
36
- modal(&)
47
+ render block
37
48
  end
38
49
  end
39
50
 
51
+ def footer(&block)
52
+ @footer = block
53
+ end
54
+
40
55
  private
41
56
 
42
- attr_accessor :request
57
+ attr_accessor :request, :title
43
58
 
44
- def padding?
45
- !!@padding
46
- end
59
+ def padding? = !!@padding
47
60
 
48
- def advance?
49
- !!@advance
50
- end
61
+ def close_button? = !!@close_button
51
62
 
52
- def close_button?
53
- !!@close_button
54
- end
63
+ def title? = !!@title
55
64
 
56
- def turbo_stream?
57
- !!request&.format&.turbo_stream?
58
- end
65
+ def header? = !!@header
59
66
 
60
- def turbo_frame?
61
- !!request&.headers&.key?("Turbo-Frame")
62
- end
67
+ def footer? = @footer.present?
63
68
 
64
- def turbo?
65
- turbo_stream? || turbo_frame?
66
- end
69
+ def header_divider? = !!@header_divider && title?
67
70
 
68
- def advance_url
69
- return nil unless advance?
70
- @advance_url || request.original_url
71
- end
71
+ def footer_divider? = !!@footer_divider && footer?
72
72
 
73
- def include_if_defined(mod_str)
74
- if defined?(mod.constantize) && !self.class.included_modules.include?(mod.constantize)
75
- self.class.include mod.constantize
76
- end
73
+ def turbo_stream? = !!request&.format&.turbo_stream?
74
+
75
+ def turbo_frame? = !!request&.headers&.key?("Turbo-Frame")
76
+
77
+ def turbo? = turbo_stream? || turbo_frame?
78
+
79
+ def advance? = !!@advance && !!@advance_url
80
+
81
+ def advance_url
82
+ return nil unless !!@advance
83
+ @advance_url || request&.original_url
77
84
  end
78
85
 
79
86
  def respond_to_missing?(method, include_private = false)
@@ -12,27 +12,30 @@ module UltimateTurboModal
12
12
  :advance, :advance=, :padding, :padding=, to: :configuration
13
13
 
14
14
  class Configuration
15
- attr_reader :flavor, :close_button, :advance, :padding
15
+ attr_reader :flavor, :close_button, :advance, :padding, :header, :header_divider, :footer_divider
16
16
 
17
17
  def initialize
18
18
  @flavor = :tailwind
19
19
  @close_button = true
20
20
  @advance = true
21
21
  @padding = true
22
+ @header = true
23
+ @header_divider = true
24
+ @footer_divider = true
22
25
  end
23
26
 
24
27
  def flavor=(flavor)
25
- raise ArgumentError.new("Flavor must be a symbol.") unless flavor.is_a?(Symbol) || flavor.is_a?(String)
28
+ raise ArgumentError.new("Value must be a symbol.") unless flavor.is_a?(Symbol) || flavor.is_a?(String)
26
29
  @flavor = flavor.to_sym
27
30
  end
28
31
 
29
32
  def close_button=(close_button)
30
- raise ArgumentError.new("Close button must be a boolean.") unless [true, false].include?(close_button)
33
+ raise ArgumentError.new("Value must be a boolean.") unless [true, false].include?(close_button)
31
34
  @close_button = close_button
32
35
  end
33
36
 
34
37
  def advance=(advance)
35
- raise ArgumentError.new("Advance must be a boolean.") unless [true, false].include?(advance)
38
+ raise ArgumentError.new("Value must be a boolean.") unless [true, false].include?(advance)
36
39
  @advance = advance
37
40
  end
38
41
 
@@ -40,9 +43,24 @@ module UltimateTurboModal
40
43
  if [true, false].include?(padding) || padding.is_a?(String)
41
44
  @padding = padding
42
45
  else
43
- raise ArgumentError.new("Padding must be a boolean or a String.")
46
+ raise ArgumentError.new("Value must be a boolean or a String.")
44
47
  end
45
48
  end
49
+
50
+ def header=(header)
51
+ raise ArgumentError.new("Value must be a boolean.") unless [true, false].include?(header)
52
+ @header = header
53
+ end
54
+
55
+ def header_divider=(header_divider)
56
+ raise ArgumentError.new("Value must be a boolean.") unless [true, false].include?(header_divider)
57
+ @header_divider = header_divider
58
+ end
59
+
60
+ def footer_divider=(footer_divider)
61
+ raise ArgumentError.new("Value must be a boolean.") unless [true, false].include?(footer_divider)
62
+ @footer_divider = footer_divider
63
+ end
46
64
  end
47
65
  end
48
66
 
@@ -1,27 +1,33 @@
1
1
  module UltimateTurboModal::Flavors
2
2
  class Tailwind < UltimateTurboModal::Base
3
+
3
4
  private
4
5
 
5
6
  def modal(&)
7
+ outer_divs do
8
+ div_content do
9
+ div_header
10
+ div_main(&)
11
+ div_footer if footer?
12
+ end
13
+ end
14
+ end
15
+
16
+ def outer_divs(&)
6
17
  div_dialog do
7
18
  div_overlay
8
19
  div_outer do
9
- div_inner do
10
- div_border do
11
- button_close if close_button?
12
- yield
13
- end
14
- end
20
+ div_inner(&)
15
21
  end
16
22
  end
17
23
  end
18
24
 
19
25
  def div_dialog(&)
20
26
  div(id: "modal-container",
21
- class: "relative z-10",
27
+ class: "relative group",
22
28
  role: "dialog",
23
29
  aria: {
24
- labeled_by: "modal-title",
30
+ labeled_by: "modal-title-h",
25
31
  modal: true
26
32
  },
27
33
  data: {
@@ -29,71 +35,91 @@ module UltimateTurboModal::Flavors
29
35
  modal_target: "container",
30
36
  modal_advance_url_value: advance_url,
31
37
  action: "turbo:submit-end->modal#submitEnd keyup@window->modal#closeWithKeyboard click@window->modal#outsideModalClicked click->modal#outsideModalClicked",
32
- transition_enter: "ease-out duration-300",
38
+ transition_enter: "ease-out duration-100",
33
39
  transition_enter_start: "opacity-0",
34
40
  transition_enter_end: "opacity-100",
35
- transition_leave: "ease-in duration-200",
41
+ transition_leave: "ease-in duration-50",
36
42
  transition_leave_start: "opacity-100",
37
- transition_leave_end: "opacity-0"
43
+ transition_leave_end: "opacity-0",
44
+ padding: padding?.to_s,
45
+ title: title?.to_s,
46
+ header: header?.to_s,
47
+ close_button: close_button?.to_s,
48
+ header_divider: header_divider?.to_s,
49
+ footer_divider: footer_divider?.to_s
38
50
  }, &)
39
51
  end
40
52
 
41
- def div_overlay(&)
53
+ def div_overlay
42
54
  div(id: "modal-overlay",
43
- class: "fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity",
44
- data: {
45
- modal_target: "overlay",
46
- action: "click->modal#outsideModalClicked"
47
- })
55
+ class: "fixed inset-0 bg-gray-900 bg-opacity-50 transition-opacity dark:bg-opacity-80 z-40")
48
56
  end
49
57
 
50
58
  def div_outer(&)
51
59
  div(id: "modal-outer",
52
- class: "fixed inset-0 z-10 overflow-y-auto sm:max-w-[80%] md:max-w-3xl sm:mx-auto m-4",
53
- data: {
54
- modal_target: "modal"
55
- }, &)
60
+ class: "fixed inset-0 z-50 overflow-y-auto sm:max-w-[80%] md:max-w-3xl sm:mx-auto m-4", &)
56
61
  end
57
62
 
58
63
  def div_inner(&)
59
64
  div(id: "modal-inner",
60
- class: "flex min-h-full items-center justify-center p-1 sm:p-4",
61
- data: {
62
- modal_target: "innerModal"
63
- }, &)
65
+ class: "flex min-h-full items-center justify-center p-1 sm:p-4", &)
66
+ end
67
+
68
+ def div_content(&)
69
+ div(id: "modal-content",
70
+ class: "relative transform overflow-hidden rounded-lg bg-white text-left shadow transition-all
71
+ sm:my-8 sm:max-w-3xl dark:bg-gray-800 dark:text-white",
72
+ data: {modal_target: "content"}, &)
73
+ end
74
+
75
+ def div_main(&)
76
+ div(id: "modal-main", class: "group-data-[padding=true]:p-4 group-data-[padding=true]:pt-2", &)
64
77
  end
65
78
 
66
- def div_border(&)
67
- klass = "relative transform overflow-hidden rounded-lg bg-white text-left shadow-xl transition-all sm:my-8 sm:max-w-3xl"
68
- klass = "#{klass} p-2 sm:p-4 md:p-6" if @padding == true
69
- klass = "#{klass} #{@padding}" if @padding.is_a?(String)
70
- div(id: "modal-border", class: klass, &)
79
+ def div_header(&)
80
+ div(id: "modal-header", class: "flex justify-between items-center w-full py-4 rounded-t dark:border-gray-600 group-data-[header-divider=true]:border-b group-data-[header=false]:absolute") do
81
+ div_title
82
+ button_close
83
+ end
71
84
  end
72
85
 
73
- def button_close(&)
74
- div(class: "absolute top-3 right-3") do
75
- button(type: "button",
76
- aria: {label: "close"},
77
- class: "ml-auto inline-flex items-center rounded bg-transparent p-1 text-sm text-gray-400 bg-white bg-opacity-20 hover:bg-gray-100 hover:bg-opacity-70 hover:text-gray-900",
78
- data: {
79
- action: "modal#hideModal"
80
- }) { icon_close }
86
+ def div_title
87
+ div(id: "modal-title", class: "pl-4") do
88
+ h3(id: "modal-title-h", class: "group-data-[title=false]:hidden text-lg font-semibold text-gray-900 dark:text-white") { @title }
81
89
  end
82
90
  end
83
91
 
92
+ def div_footer
93
+ div(id: "modal-footer", class: "flex p-4 rounded-b dark:border-gray-600 group-data-[footer-divider=true]:border-t") do
94
+ render @footer
95
+ end
96
+ end
97
+
98
+ def button_close
99
+ div(id: "modal-close", class: "mr-4") do
100
+ close_button_tag do
101
+ icon_close
102
+ span(class: "sr-only") { "Close modal" }
103
+ end
104
+ end
105
+ end
106
+
107
+ def close_button_tag(&)
108
+ button(type: "button",
109
+ aria: {label: "close"},
110
+ class: "text-gray-400 bg-transparent hover:bg-gray-200 hover:text-gray-900 rounded-lg text-sm
111
+ p-1.5 ml-auto inline-flex items-center dark:hover:bg-gray-600 dark:hover:text-white",
112
+ data: {
113
+ action: "modal#hideModal"
114
+ }, &)
115
+ end
116
+
84
117
  def icon_close
85
- svg(
86
- xmlns: "http://www.w3.org/2000/svg",
87
- fill: "none",
88
- viewbox: "0 0 24 24",
89
- stroke_width: "1.5",
90
- stroke: "currentColor",
91
- class: "w-5 h-5"
92
- ) do |s|
118
+ svg(class: "w-5 h-5", fill: "currentColor", viewBox: "0 0 20 20") do |s|
93
119
  s.path(
94
- stroke_linecap: "round",
95
- stroke_linejoin: "round",
96
- d: "M6 18L18 6M6 6l12 12"
120
+ fill_rule: "evenodd",
121
+ d: "M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",
122
+ clip_rule: "evenodd"
97
123
  )
98
124
  end
99
125
  end
@@ -1,17 +1,23 @@
1
1
  module UltimateTurboModal::Flavors
2
2
  class Vanilla < UltimateTurboModal::Base
3
+
3
4
  private
4
5
 
5
6
  def modal(&)
7
+ outer_divs do
8
+ div_content do
9
+ div_header
10
+ div_main(&)
11
+ div_footer if footer?
12
+ end
13
+ end
14
+ end
15
+
16
+ def outer_divs(&)
6
17
  div_dialog do
7
18
  div_overlay
8
- div_outer_container do
9
- div_inner_container do
10
- div_border do
11
- button_close if close_button?
12
- yield
13
- end
14
- end
19
+ div_outer do
20
+ div_inner(&)
15
21
  end
16
22
  end
17
23
  end
@@ -21,7 +27,7 @@ module UltimateTurboModal::Flavors
21
27
  class: "modal-container",
22
28
  role: "dialog",
23
29
  aria: {
24
- labeled_by: "modal-title",
30
+ labeled_by: "modal-title-h",
25
31
  modal: true
26
32
  },
27
33
  data: {
@@ -29,69 +35,84 @@ module UltimateTurboModal::Flavors
29
35
  modal_target: "container",
30
36
  modal_advance_url_value: advance_url,
31
37
  action: "turbo:submit-end->modal#submitEnd keyup@window->modal#closeWithKeyboard click@window->modal#outsideModalClicked click->modal#outsideModalClicked",
32
- transition_enter: "ease-out duration-300",
38
+ transition_enter: "ease-out duration-100",
33
39
  transition_enter_start: "opacity-0",
34
40
  transition_enter_end: "opacity-100",
35
- transition_leave: "ease-in duration-200",
41
+ transition_leave: "ease-in duration-50",
36
42
  transition_leave_start: "opacity-100",
37
- transition_leave_end: "opacity-0"
43
+ transition_leave_end: "opacity-0",
44
+ padding: padding?.to_s,
45
+ title: title?.to_s,
46
+ header: header?.to_s,
47
+ close_button: close_button?.to_s,
48
+ header_divider: header_divider?.to_s,
49
+ footer_divider: footer_divider?.to_s
38
50
  }, &)
39
51
  end
40
52
 
41
- def div_overlay(&)
42
- div(id: "modal-overlay",
43
- class: "modal-overlay",
44
- data: {
45
- modal_target: "overlay",
46
- action: "click->modal#outsideModalClicked"
47
- })
53
+ def div_overlay
54
+ div(id: "modal-overlay", class: "modal-overlay")
48
55
  end
49
56
 
50
- def div_outer_container(&)
51
- div(id: "modal-outer",
52
- class: "modal-outer",
53
- data: {
54
- modal_target: "modal"
55
- }, &)
57
+ def div_outer(&)
58
+ div(id: "modal-outer", class: "modal-outer", &)
56
59
  end
57
60
 
58
- def div_inner_container(&)
59
- div(id: "modal-inner",
60
- class: "modal-inner",
61
- data: {
62
- modal_target: "innerModal"
63
- }, &)
61
+ def div_inner(&)
62
+ div(id: "modal-inner", class: "modal-inner", &)
63
+ end
64
+
65
+ def div_content(&)
66
+ div(id: "modal-content", class: "modal-content", data: {modal_target: "content"}, &)
67
+ end
68
+
69
+ def div_main(&)
70
+ div(id: "modal-main", class: "modal-main", &)
64
71
  end
65
72
 
66
- def div_border(&)
67
- klass = "modal-border"
68
- klass = "#{klass} modal-padding" if @padding == true
69
- klass = "#{klass} #{@padding}" if @padding.is_a?(String)
70
- div(id: "modal-border", class: klass, &)
73
+ def div_header(&)
74
+ div(id: "modal-header", class: "modal-header") do
75
+ div_title
76
+ button_close
77
+ end
71
78
  end
72
79
 
73
- def button_close(&)
74
- div(class: "modal-close") do
75
- button(type: "button",
76
- aria: {label: "close"},
77
- data: {
78
- action: "modal#hideModal"
79
- }) { icon_close }
80
+ def div_title
81
+ div(id: "modal-title", class: "modal-title") do
82
+ h3(id: "modal-title-h", class: "modal-title-h") { @title }
80
83
  end
81
84
  end
82
85
 
86
+ def div_footer
87
+ div(id: "modal-footer", class: "modal-footer") do
88
+ render @footer
89
+ end
90
+ end
91
+
92
+ def button_close
93
+ div(id: "modal-close", class: "modal-close") do
94
+ close_button_tag do
95
+ icon_close
96
+ span(class: "sr-only") { "Close modal" }
97
+ end
98
+ end
99
+ end
100
+
101
+ def close_button_tag(&)
102
+ button(type: "button",
103
+ aria: {label: "close"},
104
+ class: "modal-close-button",
105
+ data: {
106
+ action: "modal#hideModal"
107
+ }, &)
108
+ end
109
+
83
110
  def icon_close
84
- svg(
85
- xmlns: "http://www.w3.org/2000/svg",
86
- fill: "none",
87
- viewbox: "0 0 24 24",
88
- stroke_width: "1.5",
89
- stroke: "currentColor",
90
- ) do |s|
111
+ svg(class: "modal-close-icon", fill: "currentColor", viewBox: "0 0 20 20") do |s|
91
112
  s.path(
92
- stroke_linecap: "round",
93
- stroke_linejoin: "round",
94
- d: "M6 18L18 6M6 6l12 12"
113
+ fill_rule: "evenodd",
114
+ d: "M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",
115
+ clip_rule: "evenodd"
95
116
  )
96
117
  end
97
118
  end
@@ -1,9 +1,7 @@
1
1
  module UltimateTurboModal::Helpers
2
2
  module ViewHelper
3
- def modal(**)
4
- render UltimateTurboModal.new(request:, **) do
5
- yield
6
- end
3
+ def modal(**, &)
4
+ render(UltimateTurboModal.new(request:, **), &)
7
5
  end
8
6
  end
9
7
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module UltimateTurboModal
4
- VERSION = "1.1.2"
4
+ VERSION = "1.2.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ultimate_turbo_modal
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carl Mercier
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-02 00:00:00.000000000 Z
11
+ date: 2023-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: phlex-rails