@carbon/vue 2.30.0-canary.1 → 2.30.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.
Files changed (29) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/dist/carbon-vue.common.js +221 -109
  3. package/dist/carbon-vue.common.js.map +1 -1
  4. package/dist/carbon-vue.umd.js +221 -109
  5. package/dist/carbon-vue.umd.js.map +1 -1
  6. package/dist/carbon-vue.umd.min.js +3 -3
  7. package/dist/carbon-vue.umd.min.js.map +1 -1
  8. package/package.json +2 -2
  9. package/src/components/cv-accordion/cv-accordion-item.vue +3 -1
  10. package/src/components/cv-checkbox/cv-checkbox.vue +2 -1
  11. package/src/components/cv-combo-box/cv-combo-box.vue +6 -2
  12. package/src/components/cv-dropdown/cv-dropdown.vue +2 -6
  13. package/src/components/cv-file-uploader/cv-file-uploader.vue +3 -1
  14. package/src/components/cv-multi-select/cv-multi-select.vue +6 -2
  15. package/src/components/cv-number-input/cv-number-input.vue +2 -1
  16. package/src/components/cv-overflow-menu/cv-overflow-menu.vue +2 -1
  17. package/src/components/cv-radio-button/cv-radio-button.vue +2 -1
  18. package/src/components/cv-search/cv-search.vue +2 -1
  19. package/src/components/cv-select/cv-select.vue +2 -1
  20. package/src/components/cv-slider/cv-slider.vue +2 -1
  21. package/src/components/cv-text-area/cv-text-area.vue +2 -6
  22. package/src/components/cv-text-input/cv-text-input.vue +2 -6
  23. package/src/components/cv-tile/_cv-tile-clickable.vue +3 -1
  24. package/src/components/cv-tile/_cv-tile-expandable.vue +3 -1
  25. package/src/components/cv-tile/_cv-tile-selectable.vue +3 -1
  26. package/src/components/cv-tile/cv-tile.vue +15 -1
  27. package/src/components/cv-time-picker/cv-time-picker.vue +3 -1
  28. package/src/components/cv-toggle/cv-toggle.vue +3 -1
  29. package/src/mixins/methods-mixin.js +18 -0
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@carbon/vue",
3
3
  "description": "A collection of components for the Carbon Design System built using Vue.js",
4
- "version": "2.30.0-canary.1",
4
+ "version": "2.30.0",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
7
7
  "type": "git",
@@ -73,5 +73,5 @@
73
73
  "eslint-plugin-prettier": "^3.1.1",
74
74
  "vue-template-compiler": "^2.6.10"
75
75
  },
76
- "gitHead": "22b01b43bff17f4c72f8030cc74ff4d232a6f3b6"
76
+ "gitHead": "a9d5f597ab1b9f4872ffba2fa250eab3fbf7b4f1"
77
77
  }
@@ -19,6 +19,7 @@
19
19
  @animationend="onAnimationEnd"
20
20
  >
21
21
  <button
22
+ ref="button"
22
23
  type="button"
23
24
  :class="`${carbonPrefix}--accordion__heading`"
24
25
  :aria-expanded="dataOpen ? 'true' : 'false'"
@@ -40,10 +41,11 @@
40
41
  import ChevronRight16 from '@carbon/icons-vue/es/chevron--right/16';
41
42
  import uidMixin from '../../mixins/uid-mixin';
42
43
  import carbonPrefixMixin from '../../mixins/carbon-prefix-mixin';
44
+ import methodsMixin from '../../mixins/methods-mixin';
43
45
 
44
46
  export default {
45
47
  name: 'CvAccordionItem',
46
- mixins: [uidMixin, carbonPrefixMixin],
48
+ mixins: [uidMixin, carbonPrefixMixin, methodsMixin({ button: ['blur', 'focus'] })],
47
49
  components: { ChevronRight16 },
48
50
  props: {
49
51
  open: { type: Boolean, default: false },
@@ -36,10 +36,11 @@
36
36
  import checkMixin from '../../mixins/check-mixin';
37
37
  import uidMixin from '../../mixins/uid-mixin';
38
38
  import carbonPrefixMixin from '../../mixins/carbon-prefix-mixin';
39
+ import methodsMixin from '../../mixins/methods-mixin';
39
40
 
40
41
  export default {
41
42
  name: 'CvCheckbox',
42
- mixins: [checkMixin, uidMixin, carbonPrefixMixin],
43
+ mixins: [checkMixin, uidMixin, carbonPrefixMixin, methodsMixin({ input: ['blur', 'focus'] })],
43
44
  inheritAttrs: false,
44
45
  props: {
45
46
  hideLabel: Boolean,
@@ -44,7 +44,10 @@
44
44
  >
45
45
  <input
46
46
  ref="input"
47
- :class="[`${carbonPrefix}--text-input`]"
47
+ :class="[
48
+ `${carbonPrefix}--text-input`,
49
+ { [`${carbonPrefix}--text-input--empty`]: !filter || filter.length === 0 },
50
+ ]"
48
51
  :aria-controls="uid"
49
52
  aria-autocomplete="list"
50
53
  role="combobox"
@@ -116,11 +119,12 @@ import ChevronDown16 from '@carbon/icons-vue/es/chevron--down/16';
116
119
  import Close16 from '@carbon/icons-vue/es/close/16';
117
120
  import uidMixin from '../../mixins/uid-mixin';
118
121
  import carbonPrefixMixin from '../../mixins/carbon-prefix-mixin';
122
+ import methodsMixin from '../../mixins/methods-mixin';
119
123
 
120
124
  export default {
121
125
  name: 'CvComboBox',
122
126
  inheritAttrs: false,
123
- mixins: [themeMixin, uidMixin, carbonPrefixMixin],
127
+ mixins: [themeMixin, uidMixin, carbonPrefixMixin, methodsMixin({ input: ['focus', 'blur'] })],
124
128
  components: { WarningFilled16, ChevronDown16, Close16 },
125
129
  props: {
126
130
  autoFilter: Boolean,
@@ -112,6 +112,7 @@
112
112
  <script>
113
113
  import themeMixin from '../../mixins/theme-mixin';
114
114
  import uidMixin from '../../mixins/uid-mixin';
115
+ import methodsMixin from '../../mixins/methods-mixin';
115
116
  import WarningFilled16 from '@carbon/icons-vue/es/warning--filled/16';
116
117
  import ChevronDown16 from '@carbon/icons-vue/es/chevron--down/16';
117
118
  import carbonPrefixMixin from '../../mixins/carbon-prefix-mixin';
@@ -119,7 +120,7 @@ import carbonPrefixMixin from '../../mixins/carbon-prefix-mixin';
119
120
  export default {
120
121
  name: 'CvDropdown',
121
122
  inheritAttrs: false,
122
- mixins: [themeMixin, uidMixin, carbonPrefixMixin],
123
+ mixins: [themeMixin, uidMixin, carbonPrefixMixin, methodsMixin({ button: ['blur', 'focus'] })],
123
124
  components: { WarningFilled16, ChevronDown16 },
124
125
  props: {
125
126
  disabled: Boolean,
@@ -324,11 +325,6 @@ export default {
324
325
  }
325
326
  }
326
327
  },
327
- focus() {
328
- this.$nextTick(() => {
329
- this.$refs.button.focus();
330
- });
331
- },
332
328
  },
333
329
  };
334
330
  </script>
@@ -14,6 +14,7 @@
14
14
  ]"
15
15
  role="button"
16
16
  tabindex="0"
17
+ ref="focusTarget"
17
18
  @keydown.enter.prevent="onShow()"
18
19
  @keydown.space.prevent
19
20
  @keyup.space.prevent="onShow()"
@@ -117,11 +118,12 @@ import Close16 from '@carbon/icons-vue/es/close/16';
117
118
  import CvWrapper from '../cv-wrapper/_cv-wrapper';
118
119
  import carbonPrefixMixin from '../../mixins/carbon-prefix-mixin';
119
120
  import { STATES, KINDS } from './consts.js';
121
+ import methodsMixin from '../../mixins/methods-mixin';
120
122
 
121
123
  export default {
122
124
  name: 'CvFileUploader',
123
125
  components: { CvFormItem, CheckmarkFilled16, WarningFilled16, Close16, CvWrapper },
124
- mixins: [uidMixin, carbonPrefixMixin],
126
+ mixins: [uidMixin, carbonPrefixMixin, methodsMixin({ focusTarget: ['blur', 'focus'] })],
125
127
  inheritAttrs: false,
126
128
  props: {
127
129
  clearOnReselect: Boolean,
@@ -79,7 +79,10 @@
79
79
  <template v-else>
80
80
  <input
81
81
  ref="input"
82
- :class="`${carbonPrefix}--text-input`"
82
+ :class="[
83
+ `${carbonPrefix}--text-input`,
84
+ { [`${carbonPrefix}--text-input--empty`]: !filter || filter.length === 0 },
85
+ ]"
83
86
  :aria-controls="uid"
84
87
  aria-autocomplete="list"
85
88
  role="combobox"
@@ -156,6 +159,7 @@ import uidMixin from '../../mixins/uid-mixin';
156
159
  import CvCheckbox from '../cv-checkbox/cv-checkbox';
157
160
  import CvTag from '../cv-tag/cv-tag';
158
161
  import carbonPrefixMixin from '../../mixins/carbon-prefix-mixin';
162
+ import methodsMixin from '../../mixins/methods-mixin';
159
163
 
160
164
  const TOP_AFTER_REOPEN = 0;
161
165
  const TOP = 1;
@@ -165,7 +169,7 @@ const selectionFeedbackOptions = ['top-after-reopen', 'top', 'fixed'];
165
169
  export default {
166
170
  name: 'CvMultiSelect',
167
171
  inheritAttrs: false,
168
- mixins: [themeMixin, uidMixin, carbonPrefixMixin],
172
+ mixins: [themeMixin, uidMixin, carbonPrefixMixin, methodsMixin({ button: ['blur', 'focus'] })],
169
173
  components: { WarningFilled16, ChevronDown16, CvCheckbox, CvTag, Close16 },
170
174
  props: {
171
175
  autoFilter: Boolean,
@@ -90,10 +90,11 @@ import CaretUpGlyph from '@carbon/icons-vue/es/caret--up/index';
90
90
  import WarningFilled16 from '@carbon/icons-vue/es/warning--filled/16';
91
91
  import CvWrapper from '../cv-wrapper/_cv-wrapper';
92
92
  import carbonPrefixMixin from '../../mixins/carbon-prefix-mixin';
93
+ import methodsMixin from '../../mixins/methods-mixin';
93
94
 
94
95
  export default {
95
96
  name: 'CvNumberInput',
96
- mixins: [uidMixin, themeMixin, carbonPrefixMixin],
97
+ mixins: [uidMixin, themeMixin, carbonPrefixMixin, methodsMixin({ input: ['blur', 'focus'] })],
97
98
  components: { CaretDownGlyph, CaretUpGlyph, WarningFilled16, CvWrapper },
98
99
  inheritAttrs: false,
99
100
  props: {
@@ -69,11 +69,12 @@
69
69
  import OverflowMenuVertical16 from '@carbon/icons-vue/es/overflow-menu--vertical/16';
70
70
  import uidMixin from '../../mixins/uid-mixin';
71
71
  import carbonPrefixMixin from '../../mixins/carbon-prefix-mixin';
72
+ import methodsMixin from '../../mixins/methods-mixin';
72
73
 
73
74
  export default {
74
75
  name: 'CvOverflowMenu',
75
76
  components: { OverflowMenuVertical16 },
76
- mixins: [uidMixin, carbonPrefixMixin],
77
+ mixins: [uidMixin, carbonPrefixMixin, methodsMixin({ trigger: ['blur', 'focus'] })],
77
78
  props: {
78
79
  label: String,
79
80
  flipMenu: Boolean,
@@ -27,11 +27,12 @@
27
27
  import uidMixin from '../../mixins/uid-mixin';
28
28
  import radioMixin from '../../mixins/radio-mixin';
29
29
  import carbonPrefixMixin from '../../mixins/carbon-prefix-mixin';
30
+ import methodsMixin from '../../mixins/methods-mixin';
30
31
 
31
32
  export default {
32
33
  name: 'CvRadioButton',
33
34
  inheritAttrs: false,
34
- mixins: [uidMixin, radioMixin, carbonPrefixMixin],
35
+ mixins: [uidMixin, radioMixin, carbonPrefixMixin, methodsMixin({ input: ['blur', 'focus'] })],
35
36
  props: {
36
37
  labelLeft: Boolean,
37
38
  },
@@ -62,10 +62,11 @@ import Search20 from '@carbon/icons-vue/es/search/20';
62
62
  import Close16 from '@carbon/icons-vue/es/close/16';
63
63
  import CvWrapper from '../cv-wrapper/_cv-wrapper';
64
64
  import carbonPrefixMixin from '../../mixins/carbon-prefix-mixin';
65
+ import methodsMixin from '../../mixins/methods-mixin';
65
66
 
66
67
  export default {
67
68
  name: 'CvSearch',
68
- mixins: [uidMixin, themeMixin, carbonPrefixMixin],
69
+ mixins: [uidMixin, themeMixin, carbonPrefixMixin, methodsMixin({ input: ['blur', 'focus'] })],
69
70
  components: { Close16, CvWrapper },
70
71
  inheritAttrs: false,
71
72
  props: {
@@ -62,12 +62,13 @@ import CvWrapper from '../cv-wrapper/_cv-wrapper';
62
62
  import ChevronDownGlyph from '@carbon/icons-vue/es/chevron--down';
63
63
  import WarningFilled16 from '@carbon/icons-vue/es/warning--filled/16';
64
64
  import carbonPrefixMixin from '../../mixins/carbon-prefix-mixin';
65
+ import methodsMixin from '../../mixins/methods-mixin';
65
66
 
66
67
  export default {
67
68
  name: 'CvSelect',
68
69
  inheritAttrs: false,
69
70
  components: { CvWrapper, ChevronDownGlyph, WarningFilled16 },
70
- mixins: [uidMixin, themeMixin, carbonPrefixMixin],
71
+ mixins: [uidMixin, themeMixin, carbonPrefixMixin, methodsMixin({ select: ['blur', 'focus'] })],
71
72
  props: {
72
73
  inline: Boolean,
73
74
  invalidMessage: { type: String, default: undefined },
@@ -59,10 +59,11 @@
59
59
  import uidMixin from '../../mixins/uid-mixin';
60
60
  import themeMixin from '../../mixins/theme-mixin';
61
61
  import carbonPrefixMixin from '../../mixins/carbon-prefix-mixin';
62
+ import methodsMixin from '../../mixins/methods-mixin';
62
63
 
63
64
  export default {
64
65
  name: 'CvSlider',
65
- mixins: [uidMixin, themeMixin, carbonPrefixMixin],
66
+ mixins: [uidMixin, themeMixin, carbonPrefixMixin, methodsMixin({ thumb: ['blur', 'focus'] })],
66
67
  props: {
67
68
  disabled: Boolean,
68
69
  label: String,
@@ -45,12 +45,13 @@
45
45
  <script>
46
46
  import uidMixin from '../../mixins/uid-mixin';
47
47
  import themeMixin from '../../mixins/theme-mixin';
48
+ import methodsMixin from '../../mixins/methods-mixin';
48
49
  import WarningFilled16 from '@carbon/icons-vue/es/warning--filled/16';
49
50
  import carbonPrefixMixin from '../../mixins/carbon-prefix-mixin';
50
51
 
51
52
  export default {
52
53
  name: 'CvTextArea',
53
- mixins: [uidMixin, themeMixin, carbonPrefixMixin],
54
+ mixins: [uidMixin, themeMixin, carbonPrefixMixin, methodsMixin({ textarea: ['blur', 'focus'] })],
54
55
  inheritAttrs: false,
55
56
  components: { WarningFilled16 },
56
57
  props: {
@@ -88,11 +89,6 @@ export default {
88
89
  this.isInvalid = !!(this.$slots['invalid-message'] || (this.invalidMessage && this.invalidMessage.length));
89
90
  this.isHelper = !!(this.$slots['helper-text'] || (this.helperText && this.helperText.length));
90
91
  },
91
- focus() {
92
- this.$nextTick(() => {
93
- this.$refs.textarea.focus();
94
- });
95
- },
96
92
  },
97
93
  };
98
94
  </script>
@@ -63,6 +63,7 @@
63
63
  <script>
64
64
  import uidMixin from '../../mixins/uid-mixin';
65
65
  import themeMixin from '../../mixins/theme-mixin';
66
+ import methodsMixin from '../../mixins/methods-mixin';
66
67
  import WarningFilled16 from '@carbon/icons-vue/es/warning--filled/16';
67
68
  import View16 from '@carbon/icons-vue/es/view/16';
68
69
  import ViewOff16 from '@carbon/icons-vue/es/view--off/16';
@@ -71,7 +72,7 @@ import carbonPrefixMixin from '../../mixins/carbon-prefix-mixin';
71
72
  export default {
72
73
  name: 'CvTextInput',
73
74
  components: { WarningFilled16, View16, ViewOff16 },
74
- mixins: [uidMixin, themeMixin, carbonPrefixMixin],
75
+ mixins: [uidMixin, themeMixin, carbonPrefixMixin, methodsMixin({ input: ['blur', 'focus'] })],
75
76
  inheritAttrs: false,
76
77
  props: {
77
78
  helperText: { type: String, default: undefined },
@@ -143,11 +144,6 @@ export default {
143
144
  this.$refs.input.value = currentValue;
144
145
  });
145
146
  },
146
- focus() {
147
- this.$nextTick(() => {
148
- this.$refs.input.focus();
149
- });
150
- },
151
147
  },
152
148
  };
153
149
  </script>
@@ -3,6 +3,7 @@
3
3
  :is="tagType"
4
4
  v-on="$listeners"
5
5
  v-bind="linkProps"
6
+ ref="target"
6
7
  data-tile="clickable"
7
8
  :class="`cv-tile-clickable ${carbonPrefix}--tile--clickable`"
8
9
  tabindex="0"
@@ -14,9 +15,10 @@
14
15
  <script>
15
16
  import LinkMixin from '../../mixins/link-mixin';
16
17
  import carbonPrefixMixin from '../../mixins/carbon-prefix-mixin';
18
+ import methodsMixin from '../../mixins/methods-mixin';
17
19
 
18
20
  export default {
19
21
  name: 'CvTileClickable',
20
- mixins: [LinkMixin, carbonPrefixMixin],
22
+ mixins: [LinkMixin, carbonPrefixMixin, methodsMixin({ target: ['blur', 'focus'] })],
21
23
  };
22
24
  </script>
@@ -5,6 +5,7 @@
5
5
  `cv-tile-expandable ${carbonPrefix}--tile--expandable`,
6
6
  { [`${carbonPrefix}--tile--is-expanded`]: internalExpanded },
7
7
  ]"
8
+ ref="target"
8
9
  tabindex="0"
9
10
  :style="styleObject"
10
11
  @click="toggle"
@@ -37,10 +38,11 @@
37
38
  <script>
38
39
  import ChevronDown16 from '@carbon/icons-vue/es/chevron--down/16';
39
40
  import carbonPrefixMixin from '../../mixins/carbon-prefix-mixin';
41
+ import methodsMixin from '../../mixins/methods-mixin';
40
42
 
41
43
  export default {
42
44
  name: 'CvTileExpandable',
43
- mixins: [carbonPrefixMixin],
45
+ mixins: [carbonPrefixMixin, methodsMixin({ target: ['blur', 'focus'] })],
44
46
  props: {
45
47
  expanded: Boolean,
46
48
  },
@@ -10,6 +10,7 @@
10
10
  data-tile="selectable"
11
11
  tabindex="0"
12
12
  :data-contained-checkbox-state="isChecked"
13
+ ref="target"
13
14
  >
14
15
  <input
15
16
  tabindex="-1"
@@ -37,10 +38,11 @@ import uidMixin from '../../mixins/uid-mixin';
37
38
  import checkMixin from '../../mixins/check-mixin';
38
39
  import CheckmarkFilled16 from '@carbon/icons-vue/es/checkmark--filled/16';
39
40
  import carbonPrefixMixin from '../../mixins/carbon-prefix-mixin';
41
+ import methodsMixin from '../../mixins/methods-mixin';
40
42
 
41
43
  export default {
42
44
  name: 'CvTileSelectable',
43
- mixins: [uidMixin, checkMixin, carbonPrefixMixin],
45
+ mixins: [uidMixin, checkMixin, carbonPrefixMixin, methodsMixin({ target: ['blur', 'focus'] })],
44
46
  components: { CheckmarkFilled16 },
45
47
  inheritAttrs: false,
46
48
  props: {
@@ -6,6 +6,7 @@
6
6
  :expanded="expanded"
7
7
  v-bind="$attrs"
8
8
  v-on="$listeners"
9
+ ref="tile"
9
10
  >
10
11
  <!-- can i now click on this -->
11
12
  <template>
@@ -24,6 +25,7 @@ import CvTileExpandable from './_cv-tile-expandable';
24
25
  import CvTileSelectable from './_cv-tile-selectable';
25
26
  import CvTileStandard from './_cv-tile-standard';
26
27
  import carbonPrefixMixin from '../../mixins/carbon-prefix-mixin';
28
+ import methodsMixin from '../../mixins/methods-mixin';
27
29
 
28
30
  export default {
29
31
  name: 'CvTile',
@@ -33,7 +35,7 @@ export default {
33
35
  prop: 'modelValue',
34
36
  event: 'modelEvent',
35
37
  },
36
- mixins: [themeMixin, carbonPrefixMixin],
38
+ mixins: [themeMixin, carbonPrefixMixin, methodsMixin({ tile: ['blur', 'focus'] })],
37
39
  components: {
38
40
  CvTileClickable,
39
41
  CvTileExpandable,
@@ -63,5 +65,17 @@ export default {
63
65
  }
64
66
  },
65
67
  },
68
+ // methods: {
69
+ // focus() {
70
+ // if (this.$children[0].focus) {
71
+ // this.$children[0].focus();
72
+ // }
73
+ // },
74
+ // blur() {
75
+ // if (this.$children[0].blur) {
76
+ // this.$children[0].blur();
77
+ // }
78
+ // },
79
+ // },
66
80
  };
67
81
  </script>
@@ -7,6 +7,7 @@
7
7
  <div :class="`${carbonPrefix}--time-picker__input`">
8
8
  <label :for="uid" :class="`${carbonPrefix}--label`">{{ label }}</label>
9
9
  <input
10
+ ref="input"
10
11
  :id="uid"
11
12
  type="text"
12
13
  :class="[
@@ -68,6 +69,7 @@ import themeMixin from '../../mixins/theme-mixin';
68
69
  import CvSelect from '../cv-select/cv-select';
69
70
  import CvSelectOption from '../cv-select/cv-select-option';
70
71
  import carbonPrefixMixin from '../../mixins/carbon-prefix-mixin';
72
+ import methodsMixin from '../../mixins/methods-mixin';
71
73
 
72
74
  export default {
73
75
  name: 'CvTimePicker',
@@ -75,7 +77,7 @@ export default {
75
77
  CvSelect,
76
78
  CvSelectOption,
77
79
  },
78
- mixins: [uidMixin, themeMixin, carbonPrefixMixin],
80
+ mixins: [uidMixin, themeMixin, carbonPrefixMixin, methodsMixin({ input: ['blur', 'focus'] })],
79
81
  inheritAttrs: false,
80
82
  props: {
81
83
  ampm: {
@@ -9,6 +9,7 @@
9
9
  :checked="isChecked === true"
10
10
  :aria-checked="`${isChecked}`"
11
11
  :value="value"
12
+ ref="input"
12
13
  />
13
14
  <label :class="`${carbonPrefix}--toggle-input__label`" :for="uid" :aria-label="hiddenLabel">
14
15
  {{ visibleLabel }}
@@ -31,10 +32,11 @@
31
32
  import uidMixin from '../../mixins/uid-mixin';
32
33
  import checkMixin from '../../mixins/check-mixin';
33
34
  import carbonPrefixMixin from '../../mixins/carbon-prefix-mixin';
35
+ import methodsMixin from '../../mixins/methods-mixin';
34
36
 
35
37
  export default {
36
38
  name: 'CvToggle',
37
- mixins: [uidMixin, checkMixin, carbonPrefixMixin],
39
+ mixins: [uidMixin, checkMixin, carbonPrefixMixin, methodsMixin({ input: ['blur', 'focus'] })],
38
40
  inheritAttrs: false,
39
41
  props: {
40
42
  small: Boolean,
@@ -0,0 +1,18 @@
1
+ const methodsMixin = methodDefs => {
2
+ const methods = {};
3
+ const keys = Object.keys(methodDefs);
4
+
5
+ for (let key of keys) {
6
+ for (let method of methodDefs[key]) {
7
+ methods[method] = function(...args) {
8
+ this.$refs[key][method](...args);
9
+ };
10
+ }
11
+ }
12
+
13
+ return {
14
+ methods: methods,
15
+ };
16
+ };
17
+
18
+ export default methodsMixin;