glib-web 3.5.4 → 3.6.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.
package/app.vue CHANGED
@@ -256,6 +256,11 @@ body,
256
256
  opacity: 1;
257
257
  }
258
258
 
259
+ .glib-input-disabled {
260
+ opacity: 0.38;
261
+ pointer-events: none;
262
+ }
263
+
259
264
  /******/
260
265
  </style>
261
266
 
@@ -275,5 +280,6 @@ body,
275
280
  overflow-y: overlay;
276
281
  }
277
282
 
283
+
278
284
  /******/
279
285
  </style>
@@ -4,7 +4,7 @@
4
4
  <!-- Use `img` instead of `v-img` otherwise the rounded border will not work. -->
5
5
  <!-- <img :style="$styles()" :src="spec.url || spec.base64Data" @click="$onClick()" /> -->
6
6
 
7
- <v-img :style="$styles()" :src="spec.url || spec.base64Data" @click="$onClick()"></v-img>
7
+ <v-img :style="$styles()" :class="$classes()" :src="spec.url || spec.base64Data" @click="$onClick()"></v-img>
8
8
  </v-avatar>
9
9
  </common-badge>
10
10
  </template>
@@ -1,7 +1,5 @@
1
1
  <template>
2
- <div>
3
- <area-chart :style="genericStyles()" :class="$classes()" :data="series" :colors="color">></area-chart>
4
- </div>
2
+ <area-chart :style="genericStyles()" :class="$classes()" :data="series" :colors="color">></area-chart>
5
3
  </template>
6
4
 
7
5
  <script setup>
@@ -1,10 +1,10 @@
1
1
  <template>
2
2
  <Suspense>
3
- <fields-text v-if="name == 'fields-text'" :spec="spec" type="text" />
4
- <fields-text v-else-if="name == 'fields-number'" :spec="spec" type="number" />
5
- <fields-text v-else-if="name == 'fields-email'" :spec="spec" type="email" />
6
- <fields-text v-else-if="name == 'fields-url'" :spec="spec" type="url" />
7
- <fields-text v-else-if="name == 'fields-password'" :spec="spec" type="password" />
3
+ <fields-text ref="delegate" v-if="name == 'fields-text'" :spec="spec" type="text" />
4
+ <fields-text ref="delegate" v-else-if="name == 'fields-number'" :spec="spec" type="number" />
5
+ <fields-text ref="delegate" v-else-if="name == 'fields-email'" :spec="spec" type="email" />
6
+ <fields-text ref="delegate" v-else-if="name == 'fields-url'" :spec="spec" type="url" />
7
+ <fields-text ref="delegate" v-else-if="name == 'fields-password'" :spec="spec" type="password" />
8
8
  <!-- <fields-textarea v-else-if="spec.view == 'fields/textarea-v1'" :spec="spec" />
9
9
  <fields-richText v-else-if="spec.view == 'fields/richText-v1'" :spec="spec" /> -->
10
10
  <!-- <fields-file v-else-if="spec.view == 'fields/file-v1'" :spec="spec" />
@@ -16,14 +16,14 @@
16
16
  <!-- <fields-country v-else-if="spec.view == 'fields/country-v1'" :spec="spec" /> -->
17
17
 
18
18
  <!-- <fields-latLong v-else-if="spec.view == 'fields/latLong-v1'" :spec="spec" /> -->
19
- <fields-googlePlace v-else-if="spec.view == 'fields/googlePlace-v1'" :spec="spec" />
19
+ <fields-googlePlace ref="delegate" v-else-if="spec.view == 'fields/googlePlace-v1'" :spec="spec" />
20
20
 
21
21
  <!-- <panels-responsive v-else-if="spec.view == 'panels/scroll-v1'" :spec="spec" /> -->
22
22
 
23
23
  <!-- This component manages its own mouse events, so don't auto-initialize it. -->
24
- <button v-else-if="name == 'button'" :spec="spec" />
24
+ <button ref="delegate" v-else-if="name == 'button'" :spec="spec" />
25
25
 
26
- <component v-else-if="name" :is="name" :id="spec.id" ref="delegate" :spec="spec"
26
+ <component ref="delegate" v-else-if="name" :is="name" :id="spec.id" :spec="spec"
27
27
  @[menter]="handlePopover(spec.onMouseEnter)" @[mleave]="handlePopover(spec.onMouseLeave)" />
28
28
  <div v-else>Unsupported view: {{ spec.view }}</div>
29
29
  </Suspense>
@@ -2,11 +2,9 @@
2
2
  <div :style="$styles()" :class="classes()">
3
3
  <!-- See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date for why we need to use `pattern` -->
4
4
  <v-text-field v-model="fieldModel" :name="fieldName" :label="spec.label" :hint="spec.hint" :type="type"
5
- :readonly="spec.readOnly || false" :disabled="spec.readOnly" :min="$sanitizeValue(spec.min)"
6
- :max="$sanitizeValue(spec.max)" :pattern="pattern" :rules="$validation()" :style="$styles()"
7
- :density="$classes().includes('compact') ? 'compact' : 'default'"
8
- clearable @change="onChange" :variant="variant" validate-on="blur"
9
- persistent-placeholder />
5
+ :readonly="spec.readOnly" :min="$sanitizeValue(spec.min)" :max="$sanitizeValue(spec.max)" :pattern="pattern"
6
+ :rules="$validation()" :style="$styles()" :density="$classes().includes('compact') ? 'compact' : 'default'"
7
+ clearable @change="onChange" :variant="variant" validate-on="blur" persistent-placeholder />
10
8
  </div>
11
9
  </template>
12
10
 
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <div :style="$styles()" :class="classes()">
3
3
  <v-autocomplete v-model="fieldModel" :label="spec.label" :items="options || []" :chips="spec.multiple"
4
- :multiple="spec.multiple" :disabled="spec.readOnly" :clearable="!spec.readOnly" :hint="spec.hint"
4
+ :multiple="spec.multiple" :readonly="spec.readOnly" :clearable="!spec.readOnly" :hint="spec.hint"
5
5
  :placeholder="spec.placeholder" :rules="rules" persistent-hint :append-icon="append.icon" validate-on="blur"
6
6
  item-title='text' :variant="variant" :closable-chips="spec.multiple" :density="density" persistent-placeholder
7
7
  @update:modelValue="onChange">
@@ -1,12 +1,10 @@
1
1
  <!-- TODO: Remove (deprecated) -->
2
2
  <template>
3
3
  <div :style="genericStyles()">
4
- <v-combobox v-model="fieldModel" :label="spec.label" :items="options || []" :chips="spec.multiple"
5
- :deletable-chips="spec.multiple" :multiple="spec.multiple" :readonly="spec.readOnly" :disabled="spec.readOnly"
6
- :hint="spec.hint" :placeholder="spec.placeholder" :outlined="$classes().includes('outlined') || null"
7
- :append-icon="append.icon" validate-on="blur" :variant="variant" persistent-placeholder />
8
-
9
- <input v-for="(item, index) in values" :key="index" type="hidden" :name="fieldName" :value="item" />
4
+ <v-combobox v-model="fieldModel" :name="fieldName" :label="spec.label" :items="options || []" :chips="spec.multiple"
5
+ :deletable-chips="spec.multiple" :multiple="spec.multiple" :readonly="spec.readOnly" :hint="spec.hint"
6
+ :placeholder="spec.placeholder" :outlined="$classes().includes('outlined') || null" :append-icon="append.icon"
7
+ validate-on="blur" :variant="variant" persistent-placeholder />
10
8
  </div>
11
9
  </template>
12
10
 
@@ -3,7 +3,7 @@
3
3
  <!-- This hidden field should always be there to make sure the submitted param is not empty,
4
4
  which could cause "Not accessible" error on the server. -->
5
5
  <input v-model="uncheckValue" type="hidden" :name="fieldName" />
6
- <v-checkbox v-model="fieldModel" :name="fieldName" :disabled="spec.readOnly"
6
+ <v-checkbox v-model="fieldModel" :name="fieldName" :readonly="spec.readOnly"
7
7
  :label="fieldModel ? spec.onLabel || spec.label : spec.label" :true-icon="spec.onIcon" :false-icon="spec.offIcon"
8
8
  :value="spec.checkValue" hide-details @change="changed" color="primary"></v-checkbox>
9
9
  </div>
@@ -20,7 +20,7 @@
20
20
  />-->
21
21
 
22
22
  <v-autocomplete v-model="country" :label="spec.label" :name="spec.name" :items="countryOptions"
23
- :readonly="spec.readOnly" :disabled="spec.readOnly" :clearable="!spec.readOnly" :hint="spec.hint" persistent-hint
23
+ :readonly="spec.readOnly" :clearable="!spec.readOnly" :hint="spec.hint" persistent-hint
24
24
  :outlined="$classes().includes('outlined') || null" />
25
25
 
26
26
  <v-autocomplete v-if="regionField && regionOptions" :label="regionField.label" :name="regionField.name"
@@ -1,20 +1,20 @@
1
1
  <template>
2
- <div ref="fileUploadContainer" :style="$styles()">
3
- <label class="v-label v-label--active">{{ spec.label }}</label>
2
+ <div ref="fileUploadContainer" :style="$styles()" :class="$classes()">
3
+ <label v-if="spec.label" class="v-label v-label--active">{{ spec.label }}</label>
4
4
  <div class="preview-container">
5
- <v-avatar v-if="placeholder.type == 'avatar'" :style="genericStyles(placeholder)" class="mr-4">
5
+ <v-avatar v-if="placeholder.type == 'avatar'" :style="genericStyles(placeholder)">
6
6
  <img :src="fileImage || placeholder.url" />
7
7
  </v-avatar>
8
- <img v-else-if="placeholder.type == 'image'" class="square-image mr-4" :style="genericStyles(placeholder)"
8
+ <img v-else-if="placeholder.type == 'image'" class="square-image" :style="genericStyles(placeholder)"
9
9
  :src="fileImage || placeholder.url" />
10
10
 
11
11
  <v-text-field v-else-if="placeholder.type == 'input'" :value="fileTitle" variant="outlined"
12
12
  placholder="Upload your file" disabled />
13
13
 
14
- <span v-else class="mr-4">{{ fileTitle }}</span>
14
+ <span v-else>{{ fileTitle }}</span>
15
15
 
16
16
  <span v-if="spec.uploadText">
17
- <v-btn :class="$classes()" @click="triggerUpload">
17
+ <v-btn @click="triggerUpload">
18
18
  <v-icon> {{ spec.uploadIcon || "upload" }} </v-icon>
19
19
  {{ spec.uploadText }}
20
20
  </v-btn>
@@ -23,20 +23,24 @@
23
23
  <v-icon>close</v-icon>
24
24
  </v-btn>
25
25
  </span>
26
- <span v-else class="action-container">
27
- <v-btn variant="flat" icon @click="triggerUpload">
28
- <v-icon>edit</v-icon>
26
+ <div v-else class="action-container">
27
+ <v-btn @click="triggerUpload" class="upload-btn">
28
+ {{ fileImage ? 'Change' : 'Upload' }}
29
29
  </v-btn>
30
30
 
31
- <v-btn variant="flat" v-if="fileImage" icon @click="removeImage">
32
- <v-icon>close</v-icon>
31
+ <v-btn variant="flat" v-if="fileImage" @click="removeImage" class="remove-btn">
32
+ Delete
33
33
  </v-btn>
34
- </span>
34
+
35
+
36
+ <glib-component v-if="spec.infoSpec" :spec="spec.infoSpec"></glib-component>
37
+
38
+ </div>
35
39
  </div>
36
40
  <input ref="directUploadFile" style="display: none" type="file" @change="uploadFiles" />
37
41
 
38
42
  <!-- <input type="file" :name="spec.name" ref='directUploadFile' @change='uploadFiles' v-show='!uploaded'/> -->
39
- <v-progress-linear v-if="showProgress" v-model="progress.value" />
43
+ <v-progress-linear class="mt-1" v-if="showProgress" v-model="progress.value" />
40
44
  <!-- <div v-show='uploaded'>
41
45
  <v-layout align-center justify-space-between row>
42
46
  <v-chip @click='removeImage' class='mr-2' color='red' text-color="white">X</v-chip>
@@ -164,9 +168,13 @@ export default {
164
168
  .preview-container {
165
169
  display: flex;
166
170
  align-items: center;
171
+ gap: 16px;
172
+ flex-wrap: wrap;
167
173
 
168
174
  .action-container {
169
- padding-left: 10px;
175
+ display: flex;
176
+ gap: 8px;
177
+ align-items: center;
170
178
  }
171
179
 
172
180
  .square-image {
@@ -6,9 +6,9 @@
6
6
  <div ref="map" class="map"></div>
7
7
 
8
8
  <div style="padding-top: 8px">
9
- <fields-text ref="latField" v-if="spec.latitudeField" :spec="spec.latitudeField" type="text"></fields-text>
10
- <fields-text ref="lngField" v-if="spec.longitudeField" :spec="spec.longitudeField" type="text"></fields-text>
11
- <fields-text ref="zoomField" v-if="spec.zoomField" :spec="spec.zoomField" type="number"></fields-text>
9
+ <glib-component ref="latField" v-if="spec.latitudeField" :spec="spec.latitudeField" />
10
+ <glib-component ref="lngField" v-if="spec.longitudeField" :spec="spec.longitudeField" />
11
+ <glib-component ref="zoomField" v-if="spec.zoomField" :spec="spec.zoomField" />
12
12
  </div>
13
13
 
14
14
  </div>
@@ -34,21 +34,29 @@ export default {
34
34
  const marker = new google.maps.Marker({ draggable: true });
35
35
 
36
36
  mapPromise().then((map) => {
37
- const zoomInput = zoomField.value.$el.querySelector('input');
38
- if (zoomInput) {
39
- zoomInput.addEventListener('input', () => {
40
- const zoom = parseInt(zoomInput.value);
41
-
42
- if (!Number.isNaN(zoom)) {
43
- map.setZoom(zoom);
44
- }
45
- });
37
+ const zoomRef = zoomField.value
38
+ if (zoomRef) {
39
+ const zoomInput = zoomRef.$el.querySelector('input');
40
+ if (zoomInput) {
41
+ zoomInput.addEventListener('input', () => {
42
+ const zoom = parseInt(zoomInput.value);
43
+
44
+ if (!Number.isNaN(zoom)) {
45
+ map.setZoom(zoom);
46
+ }
47
+ });
48
+ }
46
49
  }
47
50
 
48
51
  marker.addListener('position_changed', () => {
49
52
  const position = marker.getPosition();
50
- latField.value.fieldModel = position.lat();
51
- lngField.value.fieldModel = position.lng();
53
+
54
+ if (latField.value && lngField.value) {
55
+ const latComponent = latField.value.$refs.delegate
56
+ const lngComponent = lngField.value.$refs.delegate
57
+ latComponent.fieldModel = position.lat();
58
+ lngComponent.fieldModel = position.lng();
59
+ }
52
60
  });
53
61
  });
54
62
 
@@ -1,11 +1,9 @@
1
1
  <template>
2
2
  <div :style="$styles()" :class="classes()">
3
3
  <div class="country-code">
4
- <v-select v-model="countryCode" :items="sortedCountries" :disabled="spec.readOnly"
5
- :outlined="$classes().includes('outlined') || null"
6
- :rounded="$classes().includes('rounded')"
7
- :density="$classes().includes('compact') ? 'compact' : 'default'"
8
- item-text="name" item-value="iso2" return-object
4
+ <v-select v-model="countryCode" :items="sortedCountries" :readonly="spec.readOnly"
5
+ :outlined="$classes().includes('outlined') || null" :rounded="$classes().includes('rounded')"
6
+ :density="$classes().includes('compact') ? 'compact' : 'default'" item-text="name" item-value="iso2" return-object
9
7
  @change="onChangeCountryCode">
10
8
  <!-- <template v-slot:selection> -->
11
9
  <div :class="activeCountry.iso2.toLowerCase()" class="country_flag" />
@@ -17,13 +15,12 @@
17
15
  </v-select>
18
16
  </div>
19
17
  <v-text-field :id="inputId" ref="input" v-model="phone" class="tel" :label="spec.label" :name="fieldName"
20
- :hint="spec.hint" :placeholder="spec.placeholder" :maxlength="spec.maxLength || 25" :disabled="spec.readOnly"
18
+ :hint="spec.hint" :placeholder="spec.placeholder" :maxlength="spec.maxLength || 25" :readonly="spec.readOnly"
21
19
  type="tel" :rules="hiddenDisplay() ? [] : rules" :prefix="spec.leftText" :suffix="spec.rightText"
22
20
  :outlined="$classes().includes('outlined') || null"
23
- :density="$classes().includes('compact') ? 'compact' : 'default'"
24
- :rounded="$classes().includes('rounded')" :autofocus="spec.autoFocus || false" validate-on="blur">
21
+ :density="$classes().includes('compact') ? 'compact' : 'default'" :rounded="$classes().includes('rounded')"
22
+ :autofocus="spec.autoFocus || false" validate-on="blur">
25
23
  </v-text-field>
26
- <input v-if="spec.readOnly" type="hidden" :name="fieldName" v-model="phone" />
27
24
  </div>
28
25
  </template>
29
26
 
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <div :class="$classes()" :style="$styles()">
3
- <v-radio :label="spec.label" :value="spec.value.presence() || vuetifyEmptyString" :disabled="spec.readOnly"
3
+ <v-radio :label="spec.label" :value="spec.value.presence() || vuetifyEmptyString" :readonly="spec.readOnly"
4
4
  :on-icon="spec.onIcon" :off-icon="spec.offIcon" @click="$onClick()" color="primary" />
5
5
  <div v-if="spec.childViews" class="radio-childviews">
6
6
  <div v-for="(item, i) in spec.childViews" :key="i">
@@ -3,7 +3,7 @@
3
3
  the error can only be removed by submitting the form. But this is better than the alternative, which is radioGroup showing
4
4
  validation error on page load.
5
5
  -->
6
- <v-radio-group v-model="fieldModel" :name="fieldName" :disabled="spec.readOnly" :rules="$validation()" :row="spec.row"
6
+ <v-radio-group v-model="fieldModel" :name="fieldName" :readonly="spec.readOnly" :rules="$validation()" :row="spec.row"
7
7
  validate-on="blur" @change="onChange" :class="$classes()" :style="$styles()">
8
8
  <div v-for="(childView, index) in spec.childViews" :key="index" style="width: 100%;">
9
9
  <glib-component :spec="childSpec(childView)" @click="updateValue(childView)" />
@@ -1,9 +1,7 @@
1
1
  <template>
2
2
  <div :style="genericStyles()" :class="$classes()">
3
3
  <v-text-field v-model="accountNumber" label="Account Number" placeholder="000123456"
4
- :outlined="$classes().includes('outlined') || null"
5
- :rounded="$classes().includes('rounded')"
6
- :density="$classes().includes('compact') ? 'compact' : 'default'"
4
+ :variant="variant"
7
5
  :rules="accountNumberRules" :error-messages="errorMessages"
8
6
  @keyup="$onTyping({ duration: 200 })" />
9
7
 
@@ -20,7 +18,10 @@
20
18
  <input ref="token" type="hidden" :name="spec.name" />
21
19
  </div>
22
20
  </template>
21
+
23
22
  <script>
23
+ import { determineColor, determineDensity, determineVariant } from "../../utils/constant";
24
+
24
25
  export default {
25
26
  props: {
26
27
  spec: { type: Object, required: true }
@@ -31,9 +32,14 @@ export default {
31
32
  accountNumber: null,
32
33
  inputs: {},
33
34
  accountNumberRules: [value => !!value || "Account number required"],
34
- errorMessages: null
35
+ errorMessages: []
35
36
  };
36
37
  },
38
+ computed: {
39
+ variant() {
40
+ return determineVariant(this.spec.styleClasses, 'outlined')
41
+ }
42
+ },
37
43
  created() {
38
44
  this.country = this.spec.country.toLowerCase();
39
45
  this.stripe = Stripe(this.spec.publicKey);
@@ -79,7 +85,7 @@ export default {
79
85
  methods: {
80
86
  action_createToken() {
81
87
  const token = this.$refs.token;
82
- this.errorMessages = null;
88
+ this.errorMessages = [];
83
89
  this.routingNumber = this.inputs[this.country].makeRoutingNumber();
84
90
  if (this.accountNumber) {
85
91
  this.$dispatchEvent("forms/setBusy", { value: true });
@@ -1,12 +1,11 @@
1
1
  <template>
2
2
  <div :style="$styles()" :class="$classes()">
3
3
  <v-text-field ref="field" v-model="fieldModel" :label="spec.label" :name="fieldName" :placeholder="spec.placeholder"
4
- :density="density" :hint="spec.hint" :maxlength="spec.maxLength || 255" :disabled="spec.readOnly"
4
+ :density="density" :hint="spec.hint" :maxlength="spec.maxLength || 255" :readonly="spec.readOnly"
5
5
  :type="config.type" :rules="rules" :prepend-inner-icon="leftIconName" :append-inner-icon="config.appendIcon"
6
6
  :prefix="spec.leftText" :suffix="spec.rightText" :min="spec.min" :max="spec.max"
7
7
  :autofocus="spec.autoFocus || false" validate-on="blur" @click:appendInner="onRightIconClick" @input="onChange"
8
8
  :variant="variant" persistent-placeholder />
9
- <input v-if="spec.readOnly" type="hidden" :name="fieldName" />
10
9
  </div>
11
10
  </template>
12
11
 
@@ -1,11 +1,10 @@
1
1
  <template>
2
2
  <div :style="styles()" :class="classes()">
3
3
  <v-textarea v-model="fieldModel" :label="spec.label" :name="fieldName" :hint="spec.hint"
4
- :placeholder="spec.placeholder" :maxlength="spec.maxLength || 255" :disabled="spec.readOnly" :height="height"
4
+ :placeholder="spec.placeholder" :maxlength="spec.maxLength || 255" :readonly="spec.readOnly" :height="height"
5
5
  :rules="$validation()" counter :outlined="$classes().includes('outlined')"
6
6
  :no-resize="$classes().includes('no-resize')" validate-on="blur" :variant="variant" :density="density"
7
7
  @update:modelValue="onChange()" persistent-placeholder></v-textarea>
8
- <input v-if="spec.readOnly" type="hidden" :name="fieldName" :value="fieldModel" />
9
8
  </div>
10
9
  </template>
11
10
 
@@ -215,6 +215,10 @@ export default {
215
215
  classes.push("glib-clickable")
216
216
  );
217
217
 
218
+ if (properties.readOnly) {
219
+ classes.push("glib-input-disabled")
220
+ }
221
+
218
222
  // This could appear not as before after migration to vuetify 3
219
223
  Utils.type.ifArray(properties.styleClasses, val => {
220
224
  if (val.includes("card")) {
package/nav/appbar.vue CHANGED
@@ -77,7 +77,9 @@ export default {
77
77
  },
78
78
  mobileMenu() {
79
79
  return {
80
- icon: { material: { name: "mdi-dots-vertical" } },
80
+ // icon: { material: { name: "mdi-dots-vertical" } },
81
+ icon: { material: { name: "more_vert" } },
82
+ styleClasses: ["text"],
81
83
  childButtons: this.rightButtons
82
84
  };
83
85
  }
@@ -92,7 +94,7 @@ export default {
92
94
  item.text ? ["text"] : ["icon"]
93
95
  );
94
96
  return Object.assign({}, item, {
95
- view: "button-v1",
97
+ view: "button",
96
98
  styleClasses: styleClasses
97
99
  });
98
100
  },
@@ -106,7 +108,7 @@ export default {
106
108
  },
107
109
  avatarSpec(spec) {
108
110
  return {
109
- view: "avatar-v1",
111
+ view: "avatar",
110
112
  url: spec["imageUrl"],
111
113
  onClick: spec["onCLick"]
112
114
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "glib-web",
3
- "version": "3.5.4",
3
+ "version": "3.6.0",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -16,7 +16,7 @@ export default {
16
16
  editMenu() {
17
17
  if (this.editButtons.length > 0) {
18
18
  return {
19
- view: "button-v1",
19
+ view: "button",
20
20
  styleClasses: ["text", "small"],
21
21
  icon: { material: { name: "more_vert" } },
22
22
  childButtons: this.editButtons
@@ -26,14 +26,6 @@ export default {
26
26
  }
27
27
  }
28
28
  },
29
- // methods: {
30
- // buttonSpec(item) {
31
- // return Object.assign({}, item, {
32
- // view: "button-v1",
33
- // styleClasses: ["text"]
34
- // });
35
- // }
36
- // }
37
29
  };
38
30
  </script>
39
31