bullet_train-fields 1.6.38 → 1.7.0

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: c4dea5db0bc3fa4b39d5b29514f9f70cb0a6df4d655e3af534bec192eb43fc02
4
- data.tar.gz: 990332926d585f2ceebba3e0cebd4573be94133ee1643a02112fe789937aec4c
3
+ metadata.gz: 15e17d1f6ce3e83a96ffb6010b7f8f42f2bcb87870cd48ed182cc4947d3b6470
4
+ data.tar.gz: 03a1f3b08a2d14a6395d81c12ab83ea48f9987c81db7abb185d7e535a034cc05
5
5
  SHA512:
6
- metadata.gz: a2d2f5da74d9bac6dbcd1bfb0dd277ddae6711979e5f85edacf5111dc8f0765513c9ec5ddaa2c06febfffbcebd1d6d4d3bed261f0210b4112af8014bd98bd450
7
- data.tar.gz: 136c3c9501e285d56718782cb6258592acccb96ce647900f13122ad109aee5c1cfe6266570efa24b19c82914bee295052630a29839e9c03b2608cfa049c48617
6
+ metadata.gz: fed2c6efd2436abf9231a3c0ed31facc653a5dd95373aac3bdd0502bb1b970ce1522c07e6ee2f5cf7b4c42898104d093346d8db6516cdfca209a8e760410bfd8
7
+ data.tar.gz: 3ba2447f87e6e4a82e7a983f9facabe764453c20b186cce1b26f160ced3ea572811e19f5517c1beee7b7677a083785bd3cef0c6d246a6880f38f7760c19fa46b
@@ -11,7 +11,7 @@ module Fields::SuperSelectSupport
11
11
  end
12
12
 
13
13
  def create_model_if_new(id)
14
- ActiveSupport::Deprecation.warn(
14
+ ActiveSupport::Deprecation.new.warn(
15
15
  "#create_model_if_new is deprecated. " \
16
16
  "Use #ensure_backing_models_on instead. See examples at https://bullettrain.co/docs/field-partials/super-select#accepting-new-entries"
17
17
  )
@@ -24,7 +24,7 @@ module Fields::SuperSelectSupport
24
24
  end
25
25
 
26
26
  def create_models_if_new(ids)
27
- ActiveSupport::Deprecation.warn(
27
+ ActiveSupport::Deprecation.new.warn(
28
28
  "#create_models_if_new is deprecated. " \
29
29
  "Use #ensure_backing_models_on instead. See examples at https://bullettrain.co/docs/field-partials/super-select#accepting-new-entries"
30
30
  )
@@ -33,13 +33,13 @@ module Account::FormsHelper
33
33
 
34
34
  def labels_for(form, method)
35
35
  keys = [:placeholder, :label, :help, :options_help]
36
- path = [model_key(form), (current_fields_namespace || :fields), method].compact
36
+ path = [model_key(form), current_fields_namespace || :fields, method].compact
37
37
  Struct.new(*keys).new(*keys.map { |key| t((path + [key]).join("."), default: "").presence })
38
38
  end
39
39
 
40
40
  def options_for(form, method)
41
41
  # e.g. "scaffolding/completely_concrete/tangible_things.fields.text_area_value.options"
42
- path = [model_key(form), (current_fields_namespace || :fields), method, :options]
42
+ path = [model_key(form), current_fields_namespace || :fields, method, :options]
43
43
  options = t(path.compact.join("."))
44
44
  return options unless options.is_a?(Hash)
45
45
  options.stringify_keys
@@ -21,27 +21,22 @@ export default class extends Controller {
21
21
 
22
22
  connect() {
23
23
  this.initPluginInstance()
24
- this.colorOptions = $(this.colorOptionsTarget)
25
- .find('button')
26
- .map(function (_, button) {
27
- return $(button).attr('data-color').toLowerCase()
28
- })
29
- .get()
30
24
  }
31
25
 
32
26
  disconnect() {
33
27
  this.teardownPluginInstance()
34
28
  }
35
29
 
30
+
31
+
36
32
  pickColor(event) {
37
33
  event.preventDefault()
38
34
 
39
- const targetEl = event.target
40
- const color = targetEl.dataset.color
35
+ const color = event.target.dataset.color
41
36
 
42
- $(this.colorInputTarget).val(color)
43
- $(this.colorPickerValueTarget).val(color)
44
- $(this.userSelectedColorTarget).data('color', color)
37
+ this.colorInputTarget.value = color
38
+ this.colorPickerValueTarget.value = color
39
+ this.userSelectedColorTarget.dataset.color = color
45
40
 
46
41
  this.pickr.setColor(color)
47
42
  }
@@ -61,21 +56,20 @@ export default class extends Controller {
61
56
  }
62
57
 
63
58
  showUserSelectedColor(color) {
64
- $(this.colorInputTarget).val(color)
65
- $(this.colorPickerValueTarget).val(color)
66
-
67
- $(this.userSelectedColorTarget)
68
- .css('background-color', color)
69
- .css('--tw-ring-color', color)
70
- .attr('data-color', color)
71
- .show()
59
+ this.colorInputTarget.value = color
60
+ this.colorPickerValueTarget.value = color
61
+
62
+ this.userSelectedColorTarget.style.backgroundColor = color
63
+ this.userSelectedColorTarget.style.setProperty('--tw-ring-color', color)
64
+ this.userSelectedColorTarget.setAttribute('data-color', color)
65
+ this.userSelectedColorTarget.classList.remove('hidden')
72
66
  }
73
67
 
74
68
  unpickColor(event) {
75
69
  event.preventDefault()
76
- $(this.colorPickerValueTarget).val('')
77
- $(this.colorInputTarget).val('')
78
- $(this.userSelectedColorTarget).hide()
70
+ this.colorPickerValueTarget.value = ''
71
+ this.colorInputTarget.value = ''
72
+ this.userSelectedColorTarget.classList.add('hidden')
79
73
  this.dispatchChangeEvent()
80
74
  }
81
75
 
@@ -146,7 +140,12 @@ export default class extends Controller {
146
140
  this.pickr.destroy()
147
141
  }
148
142
 
143
+ get colorOptions () {
144
+ const colorButtons = this.colorOptionsTarget.querySelectorAll('button[data-color]')
145
+ return Array.from(colorButtons).map(button => button.getAttribute('data-color').toLowerCase());
146
+ }
147
+
149
148
  get selectedColor() {
150
- return $(this.colorInputTarget).val()
149
+ return this.colorInputTarget.value
151
150
  }
152
151
  }
@@ -2,8 +2,10 @@ import { Controller } from "@hotwired/stimulus"
2
2
  require("daterangepicker/daterangepicker.css");
3
3
 
4
4
  // requires jQuery, moment, might want to consider a vanilla JS alternative
5
+ import jquery from "jquery";
5
6
  import 'daterangepicker';
6
7
  import moment from 'moment-timezone'
8
+ import select2 from "select2";
7
9
 
8
10
  export default class extends Controller {
9
11
  static targets = [ "field", "displayField", "clearButton", "currentTimeZoneWrapper", "timeZoneButtons", "timeZoneSelectWrapper", "timeZoneField", "timeZoneSelect" ]
@@ -17,6 +19,19 @@ export default class extends Controller {
17
19
  pickerLocale: { type: Object, default: {} }
18
20
  }
19
21
 
22
+ initialize() {
23
+ if (window.jQuery === undefined) {
24
+ window.jQuery = jquery // required for select2 used for time zone select, but we also use global jQuery throughout below
25
+ }
26
+ if (!this.isSelect2LoadedOnWindowJquery) {
27
+ select2()
28
+ }
29
+ }
30
+
31
+ get isSelect2LoadedOnWindowJquery() {
32
+ return window?.jQuery?.fn?.select2 !== undefined
33
+ }
34
+
20
35
  connect() {
21
36
  this.initPluginInstance()
22
37
  }
@@ -29,13 +44,13 @@ export default class extends Controller {
29
44
  // don't submit the form, unless it originated from the cancel/clear button
30
45
  event.preventDefault()
31
46
 
32
- $(this.fieldTarget).val('')
33
- $(this.displayFieldTarget).val('')
47
+ this.fieldTarget.value = ''
48
+ this.displayFieldTarget.value = ''
34
49
  }
35
50
 
36
51
  currentTimeZone(){
37
52
  return (
38
- ( this.hasTimeZoneSelectWrapperTarget && $(this.timeZoneSelectWrapperTarget).is(":visible") && this.timeZoneSelectTarget.value ) ||
53
+ ( this.hasTimeZoneSelectWrapperTarget && jQuery(this.timeZoneSelectWrapperTarget).is(":visible") && this.timeZoneSelectTarget.value ) ||
39
54
  ( this.hasTimeZoneFieldTarget && this.timeZoneFieldTarget.value ) ||
40
55
  this.currentTimeZoneValue
41
56
  )
@@ -51,8 +66,8 @@ export default class extends Controller {
51
66
  )
52
67
  const displayVal = momentVal.format(format)
53
68
  const dataVal = this.includeTimeValue ? momentVal.toISOString(true) : momentVal.format('YYYY-MM-DD')
54
- $(this.displayFieldTarget).val(displayVal)
55
- $(this.fieldTarget).val(dataVal)
69
+ this.displayFieldTarget.value = displayVal
70
+ this.fieldTarget.value = dataVal
56
71
  // bubble up a change event when the input is updated for other listeners
57
72
  if(picker){
58
73
  this.displayFieldTarget.dispatchEvent(new CustomEvent('change', { detail: { picker: picker }}))
@@ -63,8 +78,8 @@ export default class extends Controller {
63
78
  // don't follow the anchor
64
79
  event.preventDefault()
65
80
 
66
- $(this.currentTimeZoneWrapperTarget).toggleClass('hidden')
67
- $(this.timeZoneButtonsTarget).toggleClass('hidden')
81
+ this.currentTimeZoneWrapperTarget.classList.toggle('hidden')
82
+ this.timeZoneButtonsTarget.classList.toggle('hidden')
68
83
  }
69
84
 
70
85
  // triggered on other click from the timezone buttons
@@ -72,23 +87,23 @@ export default class extends Controller {
72
87
  // don't follow the anchor
73
88
  event.preventDefault()
74
89
 
75
- $(this.timeZoneButtonsTarget).toggleClass('hidden')
90
+ this.timeZoneButtonsTarget.classList.toggle('hidden')
76
91
  if (this.hasTimeZoneSelectWrapperTarget) {
77
- $(this.timeZoneSelectWrapperTarget).toggleClass('hidden')
92
+ this.timeZoneSelectWrapperTarget.classList.toggle('hidden')
78
93
  }
79
94
  if(!["", null].includes(this.fieldTarget.value)){
80
- $(this.displayFieldTarget).trigger("apply.daterangepicker");
95
+ jQuery(this.displayFieldTarget).trigger("apply.daterangepicker");
81
96
  }
82
97
  }
83
98
 
84
99
  resetTimeZoneUI(e) {
85
100
  e && e.preventDefault()
86
101
 
87
- $(this.currentTimeZoneWrapperTarget).removeClass('hidden')
88
- $(this.timeZoneButtonsTarget).addClass('hidden')
102
+ this.currentTimeZoneWrapperTarget.classList.remove('hidden')
103
+ this.timeZoneButtonsTarget.classList.add('hidden')
89
104
 
90
105
  if (this.hasTimeZoneSelectWrapperTarget) {
91
- $(this.timeZoneSelectWrapperTarget).addClass('hidden')
106
+ this.timeZoneSelectWrapperTarget.classList.add('hidden')
92
107
  }
93
108
  }
94
109
 
@@ -97,20 +112,26 @@ export default class extends Controller {
97
112
  // don't follow the anchor
98
113
  event.preventDefault()
99
114
  const currentTimeZoneEl = this.currentTimeZoneWrapperTarget.querySelector('a')
100
- $(this.timeZoneFieldTarget).val(event.target.dataset.value)
101
- $(currentTimeZoneEl).text(event.target.dataset.label)
102
- $('.time-zone-button').removeClass('button').addClass('button-alternative')
103
- $(event.target).removeClass('button-alternative').addClass('button')
115
+ if (this.hasTimeZoneFieldTarget) {
116
+ this.timeZoneFieldTarget.value = event.target.dataset.value
117
+ }
118
+ currentTimeZoneEl.textContent = event.target.dataset.label
119
+ this.element.querySelectorAll('.time-zone-button').forEach(el => {
120
+ el.classList.remove('button');
121
+ el.classList.add('button-alternative');
122
+ });
123
+ event.target.classList.remove('button-alternative')
124
+ event.target.classList.add('button')
104
125
  this.resetTimeZoneUI()
105
126
  if(!["", null].includes(this.fieldTarget.value)){
106
- $(this.displayFieldTarget).trigger("apply.daterangepicker");
127
+ jQuery(this.displayFieldTarget).trigger("apply.daterangepicker");
107
128
  }
108
129
  }
109
130
 
110
131
  // triggered on selecting a new timezone from the timezone picker
111
132
  selectTimeZoneChange(event) {
112
133
  if(!["", null].includes(this.fieldTarget.value)){
113
- $(this.displayFieldTarget).trigger("apply.daterangepicker");
134
+ jQuery(this.displayFieldTarget).trigger("apply.daterangepicker");
114
135
  }
115
136
  }
116
137
 
@@ -119,7 +140,7 @@ export default class extends Controller {
119
140
  event.preventDefault()
120
141
  this.resetTimeZoneUI()
121
142
  if(!["", null].includes(this.fieldTarget.value)){
122
- $(this.displayFieldTarget).trigger("apply.daterangepicker")
143
+ jQuery(this.displayFieldTarget).trigger("apply.daterangepicker")
123
144
  }
124
145
  }
125
146
 
@@ -130,10 +151,10 @@ export default class extends Controller {
130
151
  if(momentParsed.isValid()){
131
152
  const momentVal = moment.tz(momentParsed.format("YYYY-MM-DDTHH:mm"), newTimeZone)
132
153
  const dataVal = this.includeTimeValue ? momentVal.toISOString(true) : momentVal.format('YYYY-MM-DD')
133
- $(this.fieldTarget).val(dataVal)
154
+ this.fieldTarget.value = dataVal
134
155
  } else {
135
156
  // nullify field value when the display format is wrong
136
- $(this.fieldTarget).val("")
157
+ this.fieldTarget.value = ''
137
158
  }
138
159
  }
139
160
 
@@ -142,7 +163,7 @@ export default class extends Controller {
142
163
  const isAmPm = this.isAmPmValue
143
164
  localeValues['format'] = this.includeTimeValue ? this.timeFormatValue : this.dateFormatValue
144
165
 
145
- $(this.displayFieldTarget).daterangepicker({
166
+ jQuery(this.displayFieldTarget).daterangepicker({
146
167
  singleDatePicker: true,
147
168
  timePicker: this.includeTimeValue,
148
169
  timePickerIncrement: 5,
@@ -151,41 +172,59 @@ export default class extends Controller {
151
172
  timePicker24Hour: !isAmPm,
152
173
  })
153
174
 
154
- $(this.displayFieldTarget).on('apply.daterangepicker', this.applyDateToField.bind(this))
155
- $(this.displayFieldTarget).on('cancel.daterangepicker', this.clearDate.bind(this))
156
- $(this.displayFieldTarget).on('input', this,this.displayFieldChange.bind(this));
175
+ jQuery(this.displayFieldTarget).on('apply.daterangepicker', this.applyDateToField.bind(this))
176
+ jQuery(this.displayFieldTarget).on('cancel.daterangepicker', this.clearDate.bind(this))
177
+ jQuery(this.displayFieldTarget).on('input', this,this.displayFieldChange.bind(this));
157
178
 
158
179
  this.pluginMainEl = this.displayFieldTarget
159
- this.plugin = $(this.pluginMainEl).data('daterangepicker') // weird
180
+ this.plugin = jQuery(this.pluginMainEl).data('daterangepicker') // weird
160
181
 
161
182
  // Init time zone select
162
183
  if (this.includeTimeValue && this.hasTimeZoneSelectWrapperTarget) {
163
184
  this.timeZoneSelect = this.timeZoneSelectWrapperTarget.querySelector('select.select2')
164
185
 
165
- $(this.timeZoneSelect).select2({
186
+ jQuery(this.timeZoneSelect).select2({
166
187
  width: 'style'
167
188
  })
168
189
 
169
190
  const self = this
170
191
 
171
- $(this.timeZoneSelect).on('change.select2', function(event) {
192
+ jQuery(this.timeZoneSelect).on('change.select2', function(event) {
172
193
  const currentTimeZoneEl = self.currentTimeZoneWrapperTarget.querySelector('a')
173
194
  const {value} = event.target
174
- $(self.timeZoneFieldTarget).val(value)
175
- $(currentTimeZoneEl).text(value)
176
195
 
177
- const selectedOptionTimeZoneButton = $('.selected-option-time-zone-button')
196
+ const selectedTimeZoneOption = event.target.options[event.target.options.selectedIndex]
178
197
 
179
- if (self.defaultTimeZonesValue.includes(value)) {
180
- $('.time-zone-button').removeClass('button').addClass('button-alternative')
181
- selectedOptionTimeZoneButton.addClass('hidden').attr('hidden', true)
182
- $(`a[data-value="${value}"`).removeClass('button-alternative').addClass('button')
198
+ if (self.hasTimeZoneFieldTarget) {
199
+ self.timeZoneFieldTarget.value = value
200
+ }
201
+ currentTimeZoneEl.textContent = selectedTimeZoneOption.textContent
202
+
203
+ const selectedOptionTimeZoneButton = self.element.querySelector('.selected-option-time-zone-button')
204
+
205
+ if (self.defaultTimeZonesValue.includes(selectedTimeZoneOption.textContent)) {
206
+ self.element.querySelectorAll('.time-zone-button').forEach(el => {
207
+ el.classList.remove('button');
208
+ el.classList.add('button-alternative');
209
+ })
210
+ selectedOptionTimeZoneButton.classList.add('hidden')
211
+ selectedOptionTimeZoneButton.hidden = true
212
+ self.element.querySelectorAll(`a[data-value="${value}"`).forEach(el => {
213
+ el.classList.remove('button-alternative')
214
+ el.classList.add('button')
215
+ })
183
216
  } else {
184
217
  // deselect any selected button
185
- $('.time-zone-button').removeClass('button').addClass('button-alternative')
186
- selectedOptionTimeZoneButton.text(value)
187
- selectedOptionTimeZoneButton.attr('data-value', value).removeAttr('hidden')
188
- selectedOptionTimeZoneButton.removeClass(['hidden', 'button-alternative']).addClass('button')
218
+ self.element.querySelectorAll('.time-zone-button').forEach(el => {
219
+ el.classList.remove('button');
220
+ el.classList.add('button-alternative');
221
+ })
222
+ selectedOptionTimeZoneButton.textContent = selectedTimeZoneOption.textContent
223
+ selectedOptionTimeZoneButton.setAttribute('data-value', value)
224
+ selectedOptionTimeZoneButton.hidden = false
225
+ selectedOptionTimeZoneButton.classList.remove('hidden')
226
+ selectedOptionTimeZoneButton.classList.remove('button-alternative')
227
+ selectedOptionTimeZoneButton.classList.add('button')
189
228
  }
190
229
 
191
230
  self.resetTimeZoneUI()
@@ -195,13 +234,13 @@ export default class extends Controller {
195
234
 
196
235
  teardownPluginInstance() {
197
236
  if (this.plugin === undefined) { return }
198
- $(this.pluginMainEl).off('apply.daterangepicker')
199
- $(this.pluginMainEl).off('cancel.daterangepicker')
237
+ jQuery(this.pluginMainEl).off('apply.daterangepicker')
238
+ jQuery(this.pluginMainEl).off('cancel.daterangepicker')
200
239
  // revert to original markup, remove any event listeners
201
240
  this.plugin.remove()
202
241
 
203
- if (this.includeTimeValue) {
204
- $(this.timeZoneSelect).select2('destroy');
242
+ if (this.includeTimeValue && this.hasTimeZoneSelectWrapperTarget) {
243
+ jQuery(this.timeZoneSelectTarget).select2('destroy');
205
244
  }
206
245
  }
207
246
  }
@@ -1,6 +1,7 @@
1
1
  import { Controller } from "@hotwired/stimulus"
2
2
  require("select2/dist/css/select2.min.css");
3
3
  import select2 from "select2";
4
+ import jquery from "jquery";
4
5
 
5
6
  const select2SelectedPreviewSelector = ".select2-selection--single"
6
7
  const select2SearchInputFieldSelector = ".select2-search__field"
@@ -20,13 +21,16 @@ export default class extends Controller {
20
21
 
21
22
  initialize() {
22
23
  this.dispatchNativeEvent = this.dispatchNativeEvent.bind(this)
24
+ if (window.jQuery === undefined) {
25
+ window.jQuery = jquery
26
+ }
23
27
  if (!this.isSelect2LoadedOnWindowJquery) {
24
28
  select2()
25
29
  }
26
30
  }
27
31
 
28
32
  get isSelect2LoadedOnWindowJquery() {
29
- return window?.$?.fn?.select2 !== undefined
33
+ return window?.jQuery?.fn?.select2 !== undefined
30
34
  }
31
35
 
32
36
  get optionsOverride() {
@@ -41,16 +45,18 @@ export default class extends Controller {
41
45
  }
42
46
 
43
47
  disconnect() {
44
- this.teardownPluginInstance()
48
+ if (this.isSelect2LoadedOnWindowJquery) {
49
+ this.teardownPluginInstance()
50
+ }
45
51
  }
46
52
 
47
53
  cleanupBeforeInit() {
48
- $(this.element).find('.select2-container--default').remove()
54
+ this.element.querySelectorAll('.select2-container--default').forEach(el => el.remove());
49
55
  }
50
56
 
51
57
  initPluginInstance() {
52
58
  let options = {
53
- dropdownParent: $(this.element)
59
+ dropdownParent: jQuery(this.element)
54
60
  };
55
61
 
56
62
  if (!this.enableSearchValue) {
@@ -84,7 +90,7 @@ export default class extends Controller {
84
90
 
85
91
  this.cleanupBeforeInit() // in case improperly torn down
86
92
  this.pluginMainEl = this.selectTarget // required because this.selectTarget is unavailable on disconnect()
87
- $(this.pluginMainEl).select2(options);
93
+ jQuery(this.pluginMainEl).select2(options);
88
94
 
89
95
  this.initReissuePluginEventsAsNativeEvents()
90
96
  }
@@ -96,11 +102,11 @@ export default class extends Controller {
96
102
  this.teardownPluginEventsAsNativeEvents()
97
103
 
98
104
  // revert to original markup, remove any event listeners
99
- $(this.pluginMainEl).select2('destroy');
105
+ jQuery(this.pluginMainEl).select2('destroy');
100
106
  }
101
107
 
102
108
  open() {
103
- $(this.pluginMainEl).select2('open')
109
+ jQuery(this.pluginMainEl).select2('open')
104
110
  }
105
111
 
106
112
  focusOnTextField(event) {
@@ -127,13 +133,13 @@ export default class extends Controller {
127
133
 
128
134
  initReissuePluginEventsAsNativeEvents() {
129
135
  this.constructor.jQueryEventsToReissue.forEach((eventName) => {
130
- $(this.pluginMainEl).on(eventName, this.dispatchNativeEvent)
136
+ jQuery(this.pluginMainEl).on(eventName, this.dispatchNativeEvent)
131
137
  })
132
138
  }
133
139
 
134
140
  teardownPluginEventsAsNativeEvents() {
135
141
  this.constructor.jQueryEventsToReissue.forEach((eventName) => {
136
- $(this.pluginMainEl).off(eventName)
142
+ jQuery(this.pluginMainEl).off(eventName)
137
143
  })
138
144
  }
139
145
 
@@ -144,12 +150,12 @@ export default class extends Controller {
144
150
 
145
151
  // https://stackoverflow.com/questions/29290389/select2-add-image-icon-to-option-dynamically
146
152
  formatState(opt) {
147
- var imageUrl = $(opt.element).attr('data-image');
153
+ var imageUrl = opt.element?.dataset.image
148
154
  var imageHtml = "";
149
155
  if (imageUrl) {
150
156
  imageHtml = '<img src="' + imageUrl + '" /> ';
151
157
  }
152
- return $('<span>' + imageHtml + sanitizeHTML(opt.text) + '</span>');
158
+ return jQuery('<span>' + imageHtml + sanitizeHTML(opt.text) + '</span>');
153
159
  }
154
160
  }
155
161
 
@@ -158,4 +164,4 @@ function sanitizeHTML(str) {
158
164
  return str.replace(/[^\w. ]/gi, function (c) {
159
165
  return '&#' + c.charCodeAt(0) + ';';
160
166
  });
161
- };
167
+ };
@@ -1,5 +1,5 @@
1
1
  module BulletTrain
2
2
  module Fields
3
- VERSION = "1.6.38"
3
+ VERSION = "1.7.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bullet_train-fields
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.38
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Culver
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-03-20 00:00:00.000000000 Z
11
+ date: 2024-03-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: standard