matestack-ui-core 0.7.6 → 1.0.0.rc.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +8 -0
  3. data/README.md +27 -215
  4. data/app/concepts/matestack/ui/core/abbr/abbr.haml +2 -2
  5. data/app/concepts/matestack/ui/core/abbr/abbr.rb +3 -2
  6. data/app/concepts/matestack/ui/core/action/action.rb +23 -19
  7. data/app/concepts/matestack/ui/core/address/address.haml +2 -2
  8. data/app/concepts/matestack/ui/core/address/address.rb +1 -1
  9. data/app/concepts/matestack/ui/core/app/app.haml +2 -3
  10. data/app/concepts/matestack/ui/core/app/app.js +4 -1
  11. data/app/concepts/matestack/ui/core/app/app.rb +32 -56
  12. data/app/concepts/matestack/ui/core/app/store.js +23 -1
  13. data/app/concepts/matestack/ui/core/area/area.rb +12 -10
  14. data/app/concepts/matestack/ui/core/async/async.haml +6 -2
  15. data/app/concepts/matestack/ui/core/async/async.js +37 -3
  16. data/app/concepts/matestack/ui/core/async/async.rb +29 -4
  17. data/app/concepts/matestack/ui/core/async/children_wrapper.haml +2 -0
  18. data/app/concepts/matestack/ui/core/bdo/bdo.rb +1 -1
  19. data/app/concepts/matestack/ui/core/collection/content/content.rb +2 -2
  20. data/app/concepts/matestack/ui/core/collection/content/page/link/link.rb +4 -2
  21. data/app/concepts/matestack/ui/core/collection/filter/filter.rb +4 -5
  22. data/app/concepts/matestack/ui/core/collection/filter/select/select.haml +10 -0
  23. data/app/concepts/matestack/ui/core/collection/filter/select/select.rb +29 -0
  24. data/app/concepts/matestack/ui/core/collection/helper.rb +14 -6
  25. data/app/concepts/matestack/ui/core/collection/order/order.js +1 -1
  26. data/app/concepts/matestack/ui/core/collection/order/order.rb +4 -5
  27. data/app/concepts/matestack/ui/core/collection/order/toggle/indicator/indicator.rb +6 -5
  28. data/app/concepts/matestack/ui/core/component/base.rb +424 -0
  29. data/app/concepts/matestack/ui/core/component/children.haml +2 -2
  30. data/app/concepts/matestack/ui/core/component/component.js +1 -55
  31. data/app/concepts/matestack/ui/core/component/dynamic.haml +1 -1
  32. data/app/concepts/matestack/ui/core/component/dynamic.rb +24 -247
  33. data/app/concepts/matestack/ui/core/component/rerender.rb +8 -0
  34. data/app/concepts/matestack/ui/core/component/static.rb +3 -12
  35. data/app/concepts/matestack/ui/core/form/checkbox/checkbox.rb +79 -0
  36. data/app/concepts/matestack/ui/core/form/form.js +25 -20
  37. data/app/concepts/matestack/ui/core/form/form.rb +7 -2
  38. data/app/concepts/matestack/ui/core/form/has_errors.rb +54 -0
  39. data/app/concepts/matestack/ui/core/form/has_input_html_attributes.rb +13 -0
  40. data/app/concepts/matestack/ui/core/form/input/input.rb +32 -52
  41. data/app/concepts/matestack/ui/core/form/radio/radio.rb +71 -0
  42. data/app/concepts/matestack/ui/core/form/select/select.haml +9 -80
  43. data/app/concepts/matestack/ui/core/form/select/select.rb +61 -56
  44. data/app/concepts/matestack/ui/core/form/submit/submit.rb +4 -1
  45. data/app/concepts/matestack/ui/core/form/textarea/textarea.rb +28 -0
  46. data/app/concepts/matestack/ui/core/form/utils.rb +47 -0
  47. data/app/concepts/matestack/ui/core/heading/heading.rb +2 -0
  48. data/app/concepts/matestack/ui/core/input/input.haml +1 -2
  49. data/app/concepts/matestack/ui/core/input/input.rb +4 -0
  50. data/app/concepts/matestack/ui/core/isolated/children_wrapper.haml +2 -0
  51. data/app/concepts/matestack/ui/core/isolated/isolated.haml +10 -0
  52. data/app/concepts/matestack/ui/core/isolated/isolated.js +108 -0
  53. data/app/concepts/matestack/ui/core/isolated/isolated.rb +59 -0
  54. data/app/concepts/matestack/ui/core/js/core.js +5 -4
  55. data/app/concepts/matestack/ui/core/link/link.rb +7 -7
  56. data/app/concepts/matestack/ui/core/map/map.rb +1 -1
  57. data/app/concepts/matestack/ui/core/onclick/onclick.rb +1 -0
  58. data/app/concepts/matestack/ui/core/page/{content.js → content/content.js} +8 -2
  59. data/app/concepts/matestack/ui/core/page/content/content.rb +29 -0
  60. data/app/concepts/matestack/ui/core/page/page.haml +3 -9
  61. data/app/concepts/matestack/ui/core/page/page.rb +15 -179
  62. data/app/concepts/matestack/ui/core/progress/progress.rb +1 -1
  63. data/app/concepts/matestack/ui/core/slot/slot.rb +2 -2
  64. data/app/concepts/matestack/ui/core/textarea/textarea.haml +2 -0
  65. data/app/concepts/matestack/ui/core/textarea/textarea.rb +10 -0
  66. data/app/concepts/matestack/ui/core/toggle/toggle.haml +2 -0
  67. data/app/concepts/matestack/ui/core/toggle/toggle.js +71 -0
  68. data/app/concepts/matestack/ui/core/toggle/toggle.rb +14 -0
  69. data/app/concepts/matestack/ui/core/transition/transition.js +1 -0
  70. data/app/concepts/matestack/ui/core/transition/transition.rb +1 -0
  71. data/app/concepts/matestack/ui/core/unescaped/unescaped.rb +1 -1
  72. data/app/concepts/matestack/ui/core/video/video.rb +1 -1
  73. data/app/concepts/matestack/ui/core/view/view.haml +1 -0
  74. data/app/concepts/matestack/ui/core/view/view.rb +30 -0
  75. data/app/concepts/matestack/ui/core/youtube/youtube.rb +1 -1
  76. data/app/helpers/matestack/ui/core/application_helper.rb +89 -20
  77. data/app/lib/matestack/ui/component.rb +1 -0
  78. data/app/lib/matestack/ui/core/has_view_context.rb +4 -4
  79. data/app/lib/matestack/ui/core/html_attributes.rb +43 -0
  80. data/app/lib/matestack/ui/core/properties.rb +88 -0
  81. data/app/lib/matestack/ui/core/rendering/default_renderer_class_determiner.rb +33 -0
  82. data/app/lib/matestack/ui/core/rendering/main_renderer.rb +199 -0
  83. data/app/lib/matestack/ui/isolated_component.rb +1 -0
  84. data/app/lib/matestack/ui/vue_js_component.rb +1 -0
  85. data/lib/matestack/ui/core.rb +4 -2
  86. data/lib/matestack/ui/core/cell.rb +0 -2
  87. data/lib/matestack/ui/core/component/registry.rb +47 -0
  88. data/lib/matestack/ui/core/components.rb +267 -0
  89. data/lib/matestack/ui/core/dsl.rb +6 -0
  90. data/lib/matestack/ui/core/engine.rb +16 -0
  91. data/lib/matestack/ui/core/version.rb +1 -1
  92. data/vendor/assets/javascripts/dist/matestack-ui-core.js +329 -122
  93. data/vendor/assets/javascripts/dist/matestack-ui-core.js.map +1 -1
  94. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js +1 -1
  95. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.gz +0 -0
  96. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map +1 -1
  97. data/vendor/assets/javascripts/dist/matestack-ui-core.min.js.map.gz +0 -0
  98. metadata +47 -64
  99. data/MIT-LICENSE +0 -20
  100. data/app/concepts/matestack/ui/core/absolute/absolute.haml +0 -3
  101. data/app/concepts/matestack/ui/core/absolute/absolute.rb +0 -17
  102. data/app/concepts/matestack/ui/core/component/response.haml +0 -2
  103. data/app/concepts/matestack/ui/core/component/response_dynamic.haml +0 -7
  104. data/app/concepts/matestack/ui/core/component/response_dynamic_without_rerender.haml +0 -3
  105. data/app/concepts/matestack/ui/core/component/static.haml +0 -1
  106. data/app/concepts/matestack/ui/core/form/inline/inline.haml +0 -6
  107. data/app/concepts/matestack/ui/core/form/inline/inline.rb +0 -9
  108. data/app/concepts/matestack/ui/core/form/input/input.haml +0 -46
  109. data/app/concepts/matestack/ui/core/html/html.haml +0 -3
  110. data/app/concepts/matestack/ui/core/html/html.js +0 -10
  111. data/app/concepts/matestack/ui/core/html/html.rb +0 -17
  112. data/app/concepts/matestack/ui/core/isolate/isolate.haml +0 -2
  113. data/app/concepts/matestack/ui/core/isolate/isolate.rb +0 -11
  114. data/app/concepts/matestack/ui/core/page/content.haml +0 -7
  115. data/app/concepts/matestack/ui/core/page/content.rb +0 -5
  116. data/app/concepts/matestack/ui/core/pg/pg.haml +0 -5
  117. data/app/concepts/matestack/ui/core/pg/pg.rb +0 -5
  118. data/app/lib/matestack/ui/core/app_node.rb +0 -53
  119. data/app/lib/matestack/ui/core/component_node.rb +0 -87
  120. data/app/lib/matestack/ui/core/page_node.rb +0 -100
  121. data/app/lib/matestack/ui/core/render.rb +0 -89
  122. data/app/lib/matestack/ui/core/to_cell.rb +0 -129
@@ -1,2 +1,2 @@
1
- - @children_cells.each do |key, cell|
2
- = cell.call(:show)
1
+ - @children.each do |child|
2
+ = child.show
@@ -1,59 +1,5 @@
1
- import Vue from 'vue/dist/vue.esm'
2
- import axios from 'axios'
3
- import VRuntimeTemplate from "v-runtime-template"
4
- import matestackEventHub from '../js/event-hub'
5
-
6
1
  const componentMixin = {
7
- props: ['componentConfig', 'params'],
8
- data: function(){
9
- return {
10
- asyncTemplate: null
11
- }
12
- },
13
- methods: {
14
- onRerender: function(event){
15
- if (this.$el.id === event+"__wrapper"){
16
- this.rerender()
17
- }
18
- },
19
- onMatestackUiCoreChannel: function(event){
20
- if (this.componentConfig["rerender_on"] == event.message){
21
- this.rerender()
22
- }
23
- },
24
- rerender: function(){
25
- var self = this;
26
- self.params["component_key"] = self.componentConfig["component_key"]
27
- axios({
28
- method: "get",
29
- url: location.pathname + location.search,
30
- headers: {
31
- 'X-CSRF-Token': document.getElementsByName("csrf-token")[0].getAttribute('content')
32
- },
33
- params: {"component_key": self.componentConfig["component_key"]}
34
- })
35
- .then(function(response){
36
- self.asyncTemplate = response["data"];
37
- })
38
- },
39
- rerenderWith: function(newParams){
40
- Object.assign(this.params, newParams);
41
- this.rerender()
42
- }
43
- },
44
- created: function () {
45
- const self = this
46
- matestackEventHub.$on('rerender', self.onRerender)
47
- matestackEventHub.$on('MatestackUiCoreChannel', self.onMatestackUiCoreChannel)
48
- },
49
- beforeDestroy: function() {
50
- const self = this
51
- matestackEventHub.$off('rerender', self.onRerender);
52
- matestackEventHub.$off('MatestackUiCoreChannel', self.onMatestackUiCoreChannel)
53
- },
54
- components: {
55
- VRuntimeTemplate: VRuntimeTemplate
56
- }
2
+ props: ['componentConfig', 'params']
57
3
  }
58
4
 
59
5
  export default componentMixin
@@ -1,5 +1,5 @@
1
1
  %component{dynamic_tag_attributes}
2
- %div
2
+ %div{class: "matestack-async-component-wrapper", "v-bind:class": "{ 'loading': loading === true }"}
3
3
  %div{"v-if": "asyncTemplate == null"}
4
4
  = render_content
5
5
  %div{"v-if": "asyncTemplate != null"}
@@ -1,269 +1,46 @@
1
1
  module Matestack::Ui::Core::Component
2
- class Dynamic < Trailblazer::Cell
3
- include Matestack::Ui::Core::Cell
4
- include Matestack::Ui::Core::ApplicationHelper
5
- include Matestack::Ui::Core::ToCell
6
- include Matestack::Ui::Core::HasViewContext
2
+ class Dynamic < Base
7
3
 
8
- view_paths << "#{Matestack::Ui::Core::Engine.root}/app/concepts"
9
- view_paths << "#{::Rails.root}/app/matestack"
10
-
11
- extend ViewName::Flat
12
-
13
- def self.prefixes
14
- _prefixes = super
15
- modified_prefixes = _prefixes.map do |prefix|
16
- prefix_parts = prefix.split("/")
17
-
18
- if prefix_parts.last.include?(self.name.split("::")[-1].downcase)
19
- prefix_parts[0..-2].join("/")
20
- else
21
- prefix
22
- end
23
-
24
- end
25
-
26
- return modified_prefixes + _prefixes
27
- end
28
-
29
- def self.views_dir
30
- return ""
31
- end
32
-
33
- def initialize(model=nil, options={})
4
+ def initialize(*_args)
34
5
  super
35
- @component_config = options.except(:context, :children, :url_params, :included_config)
36
- @url_params = options[:url_params].except(:action, :controller, :component_key)
37
- @component_key = options[:component_key]
38
- @children_cells = {}
39
- @controller_context = context[:controller_context]
40
- @argument = model
41
- @static = false
42
- @nodes = {}
43
- @cells = {}
44
- @included_config = options[:included_config]
45
- @cached_params = options[:cached_params]
46
- @rerender = false
47
- @options = options
48
- set_tag_attributes
49
- setup
50
- generate_component_name
51
- generate_children_cells
52
- validate_options
53
- end
54
-
55
- def validate_options
56
- if defined? self.class::REQUIRED_KEYS
57
- self.class::REQUIRED_KEYS.each do |key|
58
- raise "required key '#{key}' is missing" if options[key].nil?
59
- end
60
- end
61
- custom_options_validation
62
6
  end
63
7
 
64
- def custom_options_validation
65
- true
8
+ def show
9
+ render :dynamic_without_rerender
66
10
  end
67
11
 
68
- def setup
69
- true
70
- end
71
-
72
- def show(&block)
73
- if respond_to? :prepare
74
- prepare
75
- end
76
- if respond_to? :response
77
- response &block
78
- if @static
79
- render :response
80
- else
81
- if @rerender
82
- render :response_dynamic
83
- else
84
- render :response_dynamic_without_rerender
85
- end
86
- end
87
- else
88
- if @static
89
- render(view: :static, &block)
90
- else
91
- if @rerender
92
- render(view: :dynamic, &block)
93
- else
94
- render(view: :dynamic_without_rerender, &block)
95
- end
96
- end
97
- end
98
- end
99
-
100
- def render_children
101
- render(view: :children)
102
- end
103
-
104
- def render_content(&block)
105
- if respond_to? :prepare
106
- prepare
107
- end
108
- if respond_to? :response
109
- response &block
110
- render :response
111
- else
112
- # render(view: self.class.name.split("::")[-1].downcase.to_sym) do
113
- render do
114
- render_children
115
- end
116
- end
117
- end
118
-
119
- def component_id
120
- options[:id] ||= nil
121
- end
12
+ private
122
13
 
123
- def js_action name, arguments
124
- argumentString = arguments.join('", "')
125
- argumentString = '"' + argumentString + '"'
126
- [name, '(', argumentString, ')'].join("")
14
+ def dynamic_tag_attributes
15
+ attrs = {
16
+ "is": get_vue_js_name,
17
+ "ref": component_id,
18
+ ":params": params.except(:controller, :action).to_json,
19
+ ":component-config": @component_config.to_json,
20
+ "inline-template": true,
21
+ }
22
+ attrs.merge!(options[:attributes]) unless options[:attributes].nil?
23
+ attrs
127
24
  end
128
25
 
129
- def navigate_to path
130
- js_action("navigateTo", [path])
26
+ def get_vue_js_name
27
+ self.class.vue_js_name
131
28
  end
132
29
 
133
- def components(&block)
134
- @nodes = Matestack::Ui::Core::ComponentNode.build(self, nil, &block)
30
+ class << self
135
31
 
136
- @nodes.each do |key, node|
137
- @cells[key] = to_cell("#{@component_key}__#{key}", node["component_name"], node["config"], node["argument"], node["components"], node["included_config"], node["cached_params"])
32
+ def inherited(subclass)
33
+ subclass.vue_js_component_name vue_js_name unless self == Matestack::Ui::Core::Component::Dynamic
138
34
  end
139
- end
140
-
141
- def partial(&block)
142
- return Matestack::Ui::Core::ComponentNode.build(self, nil, &block)
143
- end
144
35
 
145
- def slot(&block)
146
- return Matestack::Ui::Core::ComponentNode.build(self, nil, &block)
147
- end
148
-
149
- def get_children
150
- return options[:children]
151
- end
152
-
153
- def to_css_class(symbol)
154
- symbol.to_s.gsub("_", "-")
155
- end
156
-
157
- def modifiers
158
- result = []
159
- return unless defined? self.class::OPTIONS
160
- self.class::OPTIONS.select{ |modifer_key, modifier_options|
161
- modifier_options[:css_modifier] == true
162
- }.each do |modifer_key, modifier_options|
163
- if !options[modifer_key] == false || modifier_options[:default] == true
164
- result << "#{to_css_class(self.class::CSSClASS)}--#{to_css_class(modifer_key)}"
165
- end
36
+ def vue_js_component_name(name)
37
+ @vue_js_name = name.to_s
166
38
  end
167
- result.join(" ")
168
- end
169
39
 
170
- def render_child_component component_key, current_search_keys_array
171
- if respond_to? :prepare
172
- prepare
173
- end
174
-
175
- response
176
-
177
- if current_search_keys_array.count > 1
178
- if @nodes.dig(*current_search_keys_array) == nil
179
- rest = []
180
- while @nodes.dig(*current_search_keys_array) == nil
181
- rest << current_search_keys_array.pop
182
- end
183
- node = @nodes.dig(*current_search_keys_array)
184
- cell = to_cell(component_key, node["component_name"], node["config"], node["argument"], node["components"], node["included_config"], node["cached_params"])
185
- begin
186
- return cell.render_child_component component_key, rest.reverse[1..-1]
187
- rescue
188
- return cell.render_content
189
- end
190
- else
191
- node = @nodes.dig(*current_search_keys_array)
192
- cell = to_cell(component_key, node["component_name"], node["config"], node["argument"], node["components"], node["included_config"], node["cached_params"])
193
- return cell.render_content
194
- end
195
- else
196
- node = @nodes[current_search_keys_array[0]]
197
- cell = to_cell(component_key, node["component_name"], node["config"], node["argument"], node["components"], node["included_config"], node["cached_params"])
198
- return cell.render_content
40
+ def vue_js_name
41
+ @vue_js_name ||= self.name.split(/(?=[A-Z])/).join("-").downcase.gsub("::", "")
199
42
  end
200
43
  end
201
44
 
202
- private
203
-
204
- def generate_children_cells
205
- unless options[:children].nil?
206
- #needs refactoring --> in some cases, :component_key, :children, :origin_url, :url_params, :included_config get passed into options[:children] which causes errors
207
- #quickfix: except them from iteration
208
- options[:children].except(:component_key, :children, :origin_url, :url_params, :included_config).each do |key, node|
209
- @children_cells[key] = to_cell("#{@component_key}__#{key}", node["component_name"], node["config"], node["argument"], node["components"], node["included_config"], node["cached_params"])
210
- end
211
- end
212
- end
213
-
214
- def generate_component_name
215
- name_parts = self.class.name.split("::")
216
- module_name = name_parts[0]
217
- if module_name == "Components"
218
- name_parts[0] = "Custom"
219
- end
220
- if name_parts.count > 1
221
- if name_parts.include?("Cell")
222
- name = name_parts[0] + name_parts[1]
223
- if name_parts[0] == name_parts[2]
224
- name = name_parts[0] + name_parts[1]
225
- @component_class = name.underscore.gsub("_", "-")
226
- else
227
- name = name_parts[0] + name_parts[2] + name_parts[1]
228
- @component_class = name.underscore.gsub("_", "-")
229
- end
230
- else
231
- if name_parts[-2] == name_parts[-1]
232
- @component_class = name_parts[0..-2].join("-").downcase
233
- else
234
- @component_class = name_parts.join("-").downcase
235
- end
236
- end
237
- else
238
- name = name_parts[0]
239
- @component_class = name.underscore.gsub("_", "-")
240
- end
241
- @component_name = @component_class
242
- end
243
-
244
- def set_tag_attributes
245
- default_attributes = {
246
- "id": component_id,
247
- "class": options[:class]
248
- }
249
- unless options[:attributes].nil?
250
- default_attributes.merge!(options[:attributes])
251
- end
252
-
253
- @tag_attributes = default_attributes
254
- end
255
-
256
- def dynamic_tag_attributes
257
- attrs = {
258
- "is": @component_class,
259
- "ref": component_id,
260
- ":params": @url_params.to_json,
261
- ":component-config": @component_config.to_json,
262
- "inline-template": true,
263
- }
264
- attrs.merge!(options[:attributes]) unless options[:attributes].nil?
265
- return attrs
266
- end
267
-
268
45
  end
269
46
  end
@@ -0,0 +1,8 @@
1
+ module Matestack::Ui::Core::Component
2
+ # NAME PENDING
3
+ class Rerender < Dynamic
4
+ def show
5
+ render :dynamic
6
+ end
7
+ end
8
+ end
@@ -1,16 +1,7 @@
1
1
  module Matestack::Ui::Core::Component
2
- class Static < Matestack::Ui::Core::Component::Dynamic
3
-
4
- def initialize(model=nil, options={})
5
- super
6
- if options[:dynamic]
7
- @static = false
8
- @rerender = true
9
- @component_class = "anonym-dynamic-component"
10
- else
11
- @static = true
12
- end
2
+ class Static < Base
3
+ def show
4
+ render_content
13
5
  end
14
-
15
6
  end
16
7
  end
@@ -0,0 +1,79 @@
1
+ require_relative '../utils'
2
+ require_relative '../has_input_html_attributes'
3
+ require_relative '../has_errors'
4
+ module Matestack::Ui::Core::Form::Checkbox
5
+ class Checkbox < Matestack::Ui::Core::Component::Static
6
+ include Matestack::Ui::Core::Form::Utils
7
+ include Matestack::Ui::Core::Form::HasInputHtmlAttributes
8
+ include Matestack::Ui::Core::Form::HasErrors
9
+
10
+ requires :key
11
+ optional :value, :false_value, :multiple, :init, for: { as: :input_for }, label: { as: :input_label }, options: { as: :checkbox_options }
12
+
13
+ def response
14
+ # multiple values
15
+ if checkbox_options
16
+ checkbox_options.to_a.each do |item|
17
+ input html_attributes.merge(
18
+ attributes: vue_attributes,
19
+ type: :checkbox,
20
+ id: "#{id_for_item(item_value(item))}",
21
+ name: item_name(item),
22
+ value: item_value(item)
23
+ )
24
+ label text: item_name(item), for: id_for_item(item_value(item))
25
+ end
26
+ # checked/unchecked checkbox
27
+ else
28
+ form_input type: :hidden, key: key, value: (false_value || 0), errors: false
29
+ form_input type: :checkbox, key: key, value: checked_value, id: id_for_item(value), errors: false
30
+ label text: input_label, for: id_for_item(value)
31
+ end
32
+ render_errors
33
+ end
34
+
35
+ def vue_attributes
36
+ (options[:attributes] || {}).merge({
37
+ "@change": change_event,
38
+ ref: "select.multiple.#{attr_key}",
39
+ 'init-value': init_value,
40
+ 'v-bind:class': "{ '#{input_error_class}': #{error_key} }",
41
+ 'value-type': value_type,
42
+ "#{v_model_type}": input_key,
43
+ })
44
+ end
45
+
46
+ def value_type
47
+ item_value(checkbox_options.first).is_a?(Integer) ? Integer : nil
48
+ end
49
+
50
+ def item_value(item)
51
+ item.is_a?(Array) ? item.last : item
52
+ end
53
+
54
+ def item_name(item)
55
+ item.is_a?(Array) ? item.first : item
56
+ end
57
+
58
+ def checked_value
59
+ value || 1
60
+ end
61
+
62
+ def v_model_type
63
+ if checkbox_options && checkbox_options.first.is_a?(Integer)
64
+ 'v-model.number'
65
+ else
66
+ 'v-model'
67
+ end
68
+ end
69
+
70
+ def change_event
71
+ "inputChanged('#{attr_key}')"
72
+ end
73
+
74
+ def id_for_item(value)
75
+ "#{html_attributes[:id]}_#{value}"
76
+ end
77
+
78
+ end
79
+ end