coveragebook_components 0.17.4 → 0.17.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 640690640d1cb09848352d16bf5eab6b24525775a46bff8773c316eadc349333
4
- data.tar.gz: 64520da2e244704072216713b5d08376b468015145850bdf393f6636b73a4dd1
3
+ metadata.gz: c269c84dcfebd4fc4eb0e9542d17d84e6a6de8295ec20cf7f17d059de7321b77
4
+ data.tar.gz: 6e9956db055856d5e4a90edb7357543617ceeb4963fdcd8cf6bf897c64c573f3
5
5
  SHA512:
6
- metadata.gz: dd6d5464840a829d94a91093897bebc91c0af1c73d64729088a4563fe89b8f00e401c245067e8c95f50d878fb8ac6af7e394fbbe2022f28113f196fa5573a6f2
7
- data.tar.gz: edda3f86449b0cf48c5c2811a4ee9b61b3c5b706727fe8e8259abebf34135e235489d6288cea5cd533ad8401ba3069c7044422a604dd29e82e4dfeb51aabfeeb
6
+ metadata.gz: e4489238d098216b49e077bd9b6573fc9ebdef9ff6ec0cc0b15d53d28aa91e0ff3a1ae6739a98fca8e646099386201fffc4b450da5279589f5994deac053ff50
7
+ data.tar.gz: 2a0fbad3e33279253d388c0f82077fbf8bada21323039c3be6ffda78342216f1d89d5db9a3b187677eba4db224fc2c1fb70bdc52ddc08795be67d3a7f0481d5e
@@ -1,5 +1,5 @@
1
1
  /*
2
- ! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com
2
+ ! tailwindcss v3.4.3 | MIT License | https://tailwindcss.com
3
3
  *//*
4
4
  1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
5
5
  2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
@@ -179,6 +179,7 @@ textarea {
179
179
  font-size: 100%; /* 1 */
180
180
  font-weight: inherit; /* 1 */
181
181
  line-height: inherit; /* 1 */
182
+ letter-spacing: inherit; /* 1 */
182
183
  color: inherit; /* 1 */
183
184
  margin: 0; /* 2 */
184
185
  padding: 0; /* 3 */
@@ -199,9 +200,9 @@ select {
199
200
  */
200
201
 
201
202
  button,
202
- [type='button'],
203
- [type='reset'],
204
- [type='submit'] {
203
+ input:where([type='button']),
204
+ input:where([type='reset']),
205
+ input:where([type='submit']) {
205
206
  -webkit-appearance: button; /* 1 */
206
207
  background-color: transparent; /* 2 */
207
208
  background-image: none; /* 2 */
@@ -669,7 +670,11 @@ select{
669
670
  --tw-backdrop-invert: ;
670
671
  --tw-backdrop-opacity: ;
671
672
  --tw-backdrop-saturate: ;
672
- --tw-backdrop-sepia:
673
+ --tw-backdrop-sepia: ;
674
+ --tw-contain-size: ;
675
+ --tw-contain-layout: ;
676
+ --tw-contain-paint: ;
677
+ --tw-contain-style:
673
678
  }
674
679
 
675
680
  ::backdrop{
@@ -719,7 +724,11 @@ select{
719
724
  --tw-backdrop-invert: ;
720
725
  --tw-backdrop-opacity: ;
721
726
  --tw-backdrop-saturate: ;
722
- --tw-backdrop-sepia:
727
+ --tw-backdrop-sepia: ;
728
+ --tw-contain-size: ;
729
+ --tw-contain-layout: ;
730
+ --tw-contain-paint: ;
731
+ --tw-contain-style:
723
732
  }
724
733
 
725
734
  .coco-button-wrapper{
@@ -3870,7 +3879,7 @@ select{
3870
3879
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))
3871
3880
  }
3872
3881
 
3873
- @container (min-width: 576px){
3882
+ @container (min-width: 550px){
3874
3883
  [data-coco][data-component="alert"] .alert-container{
3875
3884
  align-items: center;
3876
3885
  padding-top: 0.625rem;
@@ -3964,7 +3973,6 @@ select{
3964
3973
  }
3965
3974
 
3966
3975
  [data-coco][data-component="alert"][data-single-line="true"]:not(.force-multi-line)[data-dismissable="true"] .alert-container{
3967
- padding-left: 3rem;
3968
3976
  padding-right: 3rem
3969
3977
  }
3970
3978
 
@@ -6043,7 +6051,6 @@ select{
6043
6051
  }
6044
6052
 
6045
6053
  .alert-single-line[data-dismissable="true"] .alert-container{
6046
- padding-left: 3rem;
6047
6054
  padding-right: 3rem
6048
6055
  }
6049
6056
 
@@ -7381,8 +7381,8 @@ var require_module_cjs = __commonJS({
7381
7381
  });
7382
7382
  });
7383
7383
  }
7384
- function destroyTree(root) {
7385
- walk(root, (el) => {
7384
+ function destroyTree(root, walker = walk) {
7385
+ walker(root, (el) => {
7386
7386
  cleanupAttributes(el);
7387
7387
  cleanupElement(el);
7388
7388
  });
@@ -7579,7 +7579,7 @@ var require_module_cjs = __commonJS({
7579
7579
  if (name == Symbol.unscopables)
7580
7580
  return false;
7581
7581
  return objects.some(
7582
- (obj) => Object.prototype.hasOwnProperty.call(obj, name)
7582
+ (obj) => Object.prototype.hasOwnProperty.call(obj, name) || Reflect.has(obj, name)
7583
7583
  );
7584
7584
  },
7585
7585
  get({ objects }, name, thisProxy) {
@@ -7587,7 +7587,7 @@ var require_module_cjs = __commonJS({
7587
7587
  return collapseProxies;
7588
7588
  return Reflect.get(
7589
7589
  objects.find(
7590
- (obj) => Object.prototype.hasOwnProperty.call(obj, name)
7590
+ (obj) => Reflect.has(obj, name)
7591
7591
  ) || {},
7592
7592
  name,
7593
7593
  thisProxy
@@ -7616,6 +7616,8 @@ var require_module_cjs = __commonJS({
7616
7616
  Object.entries(Object.getOwnPropertyDescriptors(obj)).forEach(([key, { value, enumerable }]) => {
7617
7617
  if (enumerable === false || value === void 0)
7618
7618
  return;
7619
+ if (typeof value === "object" && value !== null && value.__v_skip)
7620
+ return;
7619
7621
  let path = basePath === "" ? key : `${basePath}.${key}`;
7620
7622
  if (typeof value === "object" && value !== null && value._x_interceptor) {
7621
7623
  obj[key] = value.initialize(data2, path, key);
@@ -8537,7 +8539,6 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
8537
8539
  "checked",
8538
8540
  "required",
8539
8541
  "readonly",
8540
- "hidden",
8541
8542
  "open",
8542
8543
  "selected",
8543
8544
  "autofocus",
@@ -8745,7 +8746,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
8745
8746
  get raw() {
8746
8747
  return raw;
8747
8748
  },
8748
- version: "3.13.5",
8749
+ version: "3.13.8",
8749
8750
  flushAndStopDeferringMutations,
8750
8751
  dontAutoEvaluateFunctions,
8751
8752
  disableEffectScheduling,
@@ -8828,12 +8829,10 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
8828
8829
  });
8829
8830
  function getArrayOfRefObject(el) {
8830
8831
  let refObjects = [];
8831
- let currentEl = el;
8832
- while (currentEl) {
8833
- if (currentEl._x_refs)
8834
- refObjects.push(currentEl._x_refs);
8835
- currentEl = currentEl.parentNode;
8836
- }
8832
+ findClosest(el, (i2) => {
8833
+ if (i2._x_refs)
8834
+ refObjects.push(i2._x_refs);
8835
+ });
8837
8836
  return refObjects;
8838
8837
  }
8839
8838
  var globalIdMemo = {};
@@ -9183,7 +9182,9 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
9183
9182
  });
9184
9183
  if (modifiers.includes("fill")) {
9185
9184
  if ([void 0, null, ""].includes(getValue()) || el.type === "checkbox" && Array.isArray(getValue())) {
9186
- el.dispatchEvent(new Event(event, {}));
9185
+ setValue(
9186
+ getInputValue(el, modifiers, { target: el }, getValue())
9187
+ );
9187
9188
  }
9188
9189
  }
9189
9190
  if (!el._x_removeModelListeners)
@@ -9252,12 +9253,25 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
9252
9253
  return option.value || option.text;
9253
9254
  });
9254
9255
  } else {
9256
+ let newValue;
9257
+ if (el.type === "radio") {
9258
+ if (event.target.checked) {
9259
+ newValue = event.target.value;
9260
+ } else {
9261
+ newValue = currentValue;
9262
+ }
9263
+ } else {
9264
+ newValue = event.target.value;
9265
+ }
9255
9266
  if (modifiers.includes("number")) {
9256
- return safeParseNumber(event.target.value);
9267
+ return safeParseNumber(newValue);
9257
9268
  } else if (modifiers.includes("boolean")) {
9258
- return safeParseBoolean(event.target.value);
9269
+ return safeParseBoolean(newValue);
9270
+ } else if (modifiers.includes("trim")) {
9271
+ return newValue.trim();
9272
+ } else {
9273
+ return newValue;
9259
9274
  }
9260
- return modifiers.includes("trim") ? event.target.value.trim() : event.target.value;
9261
9275
  }
9262
9276
  });
9263
9277
  }
@@ -9306,7 +9320,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
9306
9320
  });
9307
9321
  });
9308
9322
  mapAttributes(startingWith(":", into(prefix("bind:"))));
9309
- var handler2 = (el, { value, modifiers, expression, original }, { effect: effect3 }) => {
9323
+ var handler2 = (el, { value, modifiers, expression, original }, { effect: effect3, cleanup }) => {
9310
9324
  if (!value) {
9311
9325
  let bindingProviders = {};
9312
9326
  injectBindingProviders(bindingProviders);
@@ -9328,6 +9342,10 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
9328
9342
  }
9329
9343
  mutateDom(() => bind(el, value, result, modifiers));
9330
9344
  }));
9345
+ cleanup(() => {
9346
+ el._x_undoAddedClasses && el._x_undoAddedClasses();
9347
+ el._x_undoAddedStyles && el._x_undoAddedStyles();
9348
+ });
9331
9349
  };
9332
9350
  handler2.inline = (el, { value, modifiers, expression }) => {
9333
9351
  if (!value)
@@ -9457,13 +9475,21 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
9457
9475
  if (isObject2(items)) {
9458
9476
  items = Object.entries(items).map(([key, value]) => {
9459
9477
  let scope2 = getIterationScopeVariables(iteratorNames, value, key, items);
9460
- evaluateKey((value2) => keys.push(value2), { scope: { index: key, ...scope2 } });
9478
+ evaluateKey((value2) => {
9479
+ if (keys.includes(value2))
9480
+ warn("Duplicate key on x-for", el);
9481
+ keys.push(value2);
9482
+ }, { scope: { index: key, ...scope2 } });
9461
9483
  scopes.push(scope2);
9462
9484
  });
9463
9485
  } else {
9464
9486
  for (let i2 = 0; i2 < items.length; i2++) {
9465
9487
  let scope2 = getIterationScopeVariables(iteratorNames, items[i2], i2, items);
9466
- evaluateKey((value) => keys.push(value), { scope: { index: i2, ...scope2 } });
9488
+ evaluateKey((value) => {
9489
+ if (keys.includes(value))
9490
+ warn("Duplicate key on x-for", el);
9491
+ keys.push(value);
9492
+ }, { scope: { index: i2, ...scope2 } });
9467
9493
  scopes.push(scope2);
9468
9494
  }
9469
9495
  }
@@ -9511,7 +9537,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
9511
9537
  let marker = document.createElement("div");
9512
9538
  mutateDom(() => {
9513
9539
  if (!elForSpot)
9514
- warn(`x-for ":key" is undefined or invalid`, templateEl);
9540
+ warn(`x-for ":key" is undefined or invalid`, templateEl, keyForSpot, lookup);
9515
9541
  elForSpot.after(marker);
9516
9542
  elInSpot.after(elForSpot);
9517
9543
  elForSpot._x_currentIfEl && elForSpot.after(elForSpot._x_currentIfEl);
@@ -9538,7 +9564,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
9538
9564
  };
9539
9565
  mutateDom(() => {
9540
9566
  lastEl.after(clone2);
9541
- initTree(clone2);
9567
+ skipDuringClone(() => initTree(clone2))();
9542
9568
  });
9543
9569
  if (typeof key === "object") {
9544
9570
  warn("x-for key cannot be an object, it must be a string or an integer", templateEl);
@@ -9618,7 +9644,7 @@ ${expression ? 'Expression: "' + expression + '"\n\n' : ""}`, el);
9618
9644
  addScopeToNode(clone2, {}, el);
9619
9645
  mutateDom(() => {
9620
9646
  el.after(clone2);
9621
- initTree(clone2);
9647
+ skipDuringClone(() => initTree(clone2))();
9622
9648
  });
9623
9649
  el._x_currentIfEl = clone2;
9624
9650
  el._x_undoIf = () => {
@@ -15415,7 +15441,7 @@ var alpine_default = import_alpinejs.default;
15415
15441
  // ../../../package.json
15416
15442
  var package_default = {
15417
15443
  name: "coveragebook-components",
15418
- version: "0.17.4",
15444
+ version: "0.17.6",
15419
15445
  repository: "git@github.com:coveragebook/coco.git",
15420
15446
  license: "NO LICENSE",
15421
15447
  author: "Mark Perkins <mark@coveragebook.com>",
@@ -15464,7 +15490,7 @@ var package_default = {
15464
15490
  "@tailwindcss/container-queries": "^0.1.0",
15465
15491
  "@tailwindcss/forms": "^0.5.6",
15466
15492
  "alias-hq": "^6.2.2",
15467
- alpinejs: "^3.13.5",
15493
+ alpinejs: "^3.13.8",
15468
15494
  autoprefixer: "^10.4.16",
15469
15495
  "container-query-polyfill": "^1.0.2",
15470
15496
  del: "^7.1.0",
@@ -15472,7 +15498,7 @@ var package_default = {
15472
15498
  "esbuild-plugin-copy": "^2.0.2",
15473
15499
  "fast-glob": "^3.3.1",
15474
15500
  "fast-sort": "^3.2.1",
15475
- husky: "^8.0.3",
15501
+ husky: "^9.0.11",
15476
15502
  "js-cookie": "^3.0.5",
15477
15503
  "lint-staged": "^15.2.2",
15478
15504
  "lodash.camelcase": "^4.3.0",
@@ -15483,10 +15509,10 @@ var package_default = {
15483
15509
  postcss: "^8.4.31",
15484
15510
  "postcss-cli": "^11.0.0",
15485
15511
  "postcss-value-parser": "^4.2.0",
15486
- prettier: "^3.1.1",
15512
+ prettier: "^3.2.5",
15487
15513
  "release-it": "^17.0.1",
15488
15514
  svgo: "^3.0.2",
15489
- tailwindcss: "^3.4.0",
15515
+ tailwindcss: "^3.4.3",
15490
15516
  "tippy.js": "^6.3.7"
15491
15517
  },
15492
15518
  "release-it": {
@@ -16368,9 +16394,7 @@ var tooltip_default2 = CocoComponent("tooltip", () => {
16368
16394
  init() {
16369
16395
  tippy_default(this.$el, {
16370
16396
  theme: "coco-tooltip",
16371
- appendTo: () => {
16372
- return this.$el.firstElementChild;
16373
- }
16397
+ appendTo: () => document.body
16374
16398
  });
16375
16399
  }
16376
16400
  };
@@ -11,6 +11,10 @@
11
11
  "dropdown:trigger": (true if dropdown?),
12
12
  "dropdown:anchor": (true if dropdown?),
13
13
  "@click": ("#{"checkConfirmation($event);" if confirm?} #{on_click}" if confirm? || on_click.present?)
14
+ },
15
+ data: {
16
+ turbo: turbo_data_attr_value,
17
+ turbo_frame: turbo_frame
14
18
  }
15
19
  ) do %>
16
20
  <span class="button-inner">
@@ -72,15 +72,17 @@ module Coco
72
72
  @states[name.to_sym] = kwargs.except!(:name)
73
73
  end
74
74
 
75
- attr_reader :on_click, :resize
75
+ attr_reader :on_click, :resize, :turbo_frame
76
76
 
77
- def initialize(click: nil, resize: nil, states: nil, loading: false, active: false, static: nil, **kwargs)
77
+ def initialize(click: nil, resize: nil, states: nil, loading: false, active: false, static: nil, turbo: nil, turbo_frame: nil, **kwargs)
78
78
  @on_click = click
79
79
  @resize = resize.to_h
80
80
  @states = states.to_h
81
81
  @loading = loading
82
82
  @static = static
83
83
  @active = active
84
+ @turbo = turbo
85
+ @turbo_frame = turbo_frame
84
86
  end
85
87
 
86
88
  def with_dropdown(...)
@@ -186,6 +188,14 @@ module Coco
186
188
  {tooltips: state_tooltips} if state_tooltips.present?
187
189
  end
188
190
 
191
+ def turbo_data_attr_value
192
+ if @turbo == false
193
+ "false"
194
+ elsif @turbo == true
195
+ "true"
196
+ end
197
+ end
198
+
189
199
  private
190
200
 
191
201
  def default_states
@@ -19,14 +19,15 @@ module Coco
19
19
  end
20
20
  end
21
21
 
22
- attr_reader :method, :turbo
22
+ attr_reader :method
23
23
 
24
- def initialize(form: nil, params: nil, method: :post, action: nil, href: nil, turbo: false, **kwargs)
24
+ def initialize(form: nil, params: nil, method: :post, action: nil, href: nil, turbo: false, turbo_frame: nil, **kwargs)
25
25
  @form_args = form.to_h
26
26
  @action = action || href
27
27
  @method = method
28
28
  @params = params.to_h
29
29
  @turbo = turbo
30
+ @turbo_frame = turbo_frame
30
31
  end
31
32
 
32
33
  def params
@@ -38,11 +39,20 @@ module Coco
38
39
  url: action,
39
40
  method: method,
40
41
  data: {
41
- turbo: ("false" if !turbo)
42
+ turbo: turbo_data_attr_value,
43
+ turbo_frame: @turbo_frame
42
44
  }
43
45
  }.deep_merge(@form_args)
44
46
  end
45
47
 
48
+ def turbo_data_attr_value
49
+ if @turbo == false
50
+ "false"
51
+ elsif @turbo == true
52
+ "true"
53
+ end
54
+ end
55
+
46
56
  def action
47
57
  @action.is_a?(String) ? @action : helpers.url_for(@action)
48
58
  end
@@ -103,7 +103,7 @@
103
103
 
104
104
  /* Layout */
105
105
 
106
- @apply alert-stacked @[576px]:alert-multi-line;
106
+ @apply alert-stacked @[550px]:alert-multi-line;
107
107
 
108
108
  &[data-single-line="true"]:not(.force-multi-line) {
109
109
  @apply @[1000px]:alert-single-line;
@@ -311,7 +311,7 @@
311
311
  }
312
312
 
313
313
  .alert-container {
314
- @apply px-12;
314
+ @apply pr-12;
315
315
  }
316
316
 
317
317
  .alert-dismiss {
@@ -4,7 +4,7 @@
4
4
  show: "!dismissed",
5
5
  cloak: (true if cloak?)
6
6
  }, class: {
7
- "with-title": title?,
7
+ "with-title": title? && title.present?,
8
8
  "with-action": action? || secondary_action?,
9
9
  "vivid": vivid?
10
10
  }) do %>
@@ -15,13 +15,15 @@
15
15
 
16
16
  <div class="alert-body">
17
17
  <div class="alert-content" data-role="content">
18
- <% if title? %>
18
+ <% if title? && title.present? %>
19
19
  <h4 class="alert-title"><%= title %></h4>
20
20
  <% end %>
21
21
 
22
- <p class="alert-message"<% if single_line? %> x-dimensions="checkSingleLineWrap(dimensions)"<% end %>>
23
- <%= message? ? message : content %>
24
- </p>
22
+ <% if message? || content %>
23
+ <p class="alert-message"<% if single_line? %> x-dimensions="checkSingleLineWrap(dimensions)"<% end %>>
24
+ <%= message? ? message : content %>
25
+ </p>
26
+ <% end %>
25
27
 
26
28
  <% if link? %>
27
29
  <div class="alert-link" data-role="link">
@@ -35,7 +35,7 @@ module Coco
35
35
  unless tag_attr?(:id)
36
36
  set_tag_attr(:id, "alert-#{rand(1000)}")
37
37
  end
38
- with_title { @title } unless title?
38
+ with_title { @title } unless title? || title.nil?
39
39
  end
40
40
 
41
41
  def initialize(title: nil, **kwargs)
@@ -3,10 +3,10 @@ module Coco
3
3
  include Concerns::AcceptsOptions
4
4
  include Concerns::WrapsComponent
5
5
 
6
- accepts_option :dismissable, from: [true, false], default: true
6
+ accepts_option :dismissable, from: [true, false], default: false
7
7
 
8
8
  wraps_component :alert do |args|
9
- Coco::Alert.new(**args, dismissable: get_option_value(:dismissable))
9
+ Coco::Alert.new(**args, cloak: false, dismissable: get_option_value(:dismissable))
10
10
  end
11
11
 
12
12
  %i[title action secondary_action link].each do |slot_name|
@@ -16,7 +16,7 @@ module Coco
16
16
  end
17
17
 
18
18
  before_render do
19
- with_title { @title } unless title?
19
+ with_title { @title } unless title? || @title.nil?
20
20
  end
21
21
 
22
22
  def initialize(title: nil, **kwargs)
@@ -6,9 +6,7 @@ export default CocoComponent("tooltip", () => {
6
6
  init() {
7
7
  tippy(this.$el, {
8
8
  theme: "coco-tooltip",
9
- appendTo: () => {
10
- return this.$el.firstElementChild;
11
- },
9
+ appendTo: () => document.body,
12
10
  });
13
11
  },
14
12
  };
data/lib/coco.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Coco
2
- VERSION = "0.17.4"
2
+ VERSION = "0.17.6"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coveragebook_components
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.4
4
+ version: 0.17.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Perkins
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-10 00:00:00.000000000 Z
11
+ date: 2024-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -28,16 +28,22 @@ dependencies:
28
28
  name: view_component
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '3.9'
34
+ - - "<"
32
35
  - !ruby/object:Gem::Version
33
- version: 3.9.0
36
+ version: '3.13'
34
37
  type: :runtime
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
38
- - - "~>"
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '3.9'
44
+ - - "<"
39
45
  - !ruby/object:Gem::Version
40
- version: 3.9.0
46
+ version: '3.13'
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: turbo-rails
43
49
  requirement: !ruby/object:Gem::Requirement