@eturnity/eturnity_reusable_components 7.18.0--EPDM-9013.1 → 7.18.0-EPDM-10335.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 (52) hide show
  1. package/.storybook/preview.js +1 -1
  2. package/package.json +19 -23
  3. package/src/App.vue +2 -2
  4. package/src/components/addNewButton/index.vue +5 -3
  5. package/src/components/buttons/buttonIcon/index.vue +1 -1
  6. package/src/components/buttons/closeButton/index.vue +1 -1
  7. package/src/components/buttons/mainButton/index.vue +6 -1
  8. package/src/components/deleteIcon/DeleteIcon.stories.js +7 -7
  9. package/src/components/deleteIcon/index.vue +25 -21
  10. package/src/components/draggableInputHandle/index.vue +24 -25
  11. package/src/components/dropdown/index.vue +129 -110
  12. package/src/components/errorMessage/index.vue +10 -5
  13. package/src/components/filter/filterSettings.vue +58 -97
  14. package/src/components/filter/index.vue +3 -3
  15. package/src/components/filter/parentDropdown.vue +2 -2
  16. package/src/components/icon/iconCache.js +23 -0
  17. package/src/components/icon/iconCollection.vue +2 -2
  18. package/src/components/icon/index.vue +67 -75
  19. package/src/components/iconWrapper/index.vue +1 -4
  20. package/src/components/infoCard/index.vue +2 -3
  21. package/src/components/infoText/index.vue +1 -1
  22. package/src/components/inputs/checkbox/index.vue +21 -6
  23. package/src/components/inputs/inputNumber/index.vue +8 -11
  24. package/src/components/inputs/inputNumberQuestion/index.vue +1 -1
  25. package/src/components/inputs/inputText/index.vue +3 -3
  26. package/src/components/inputs/radioButton/index.vue +1 -1
  27. package/src/components/inputs/searchInput/index.vue +28 -11
  28. package/src/components/inputs/select/index.vue +199 -55
  29. package/src/components/inputs/select/option/index.vue +36 -11
  30. package/src/components/inputs/slider/index.vue +16 -16
  31. package/src/components/inputs/switchField/index.vue +2 -2
  32. package/src/components/inputs/textAreaInput/index.vue +1 -1
  33. package/src/components/inputs/toggle/index.vue +2 -2
  34. package/src/components/label/index.vue +27 -31
  35. package/src/components/modals/modal/index.vue +2 -6
  36. package/src/components/navigationTabs/index.vue +27 -20
  37. package/src/components/pageSubtitle/index.vue +1 -1
  38. package/src/components/pageTitle/index.vue +4 -4
  39. package/src/components/pagination/index.vue +1 -1
  40. package/src/components/progressBar/index.vue +1 -1
  41. package/src/components/projectMarker/index.vue +16 -9
  42. package/src/components/sideMenu/index.vue +1 -1
  43. package/src/components/spinner/index.vue +7 -11
  44. package/src/components/tableDropdown/index.vue +30 -37
  45. package/src/components/tables/mainTable/exampleNested.vue +1 -1
  46. package/src/components/tables/mainTable/index.vue +10 -9
  47. package/src/components/tables/viewTable/index.vue +2 -2
  48. package/src/components/threeDots/index.vue +1 -1
  49. package/src/components/videoThumbnail/index.vue +95 -100
  50. package/src/main.js +4 -11
  51. package/src/assets/svgIcons/bexio.svg +0 -4
  52. package/src/assets/svgIcons/data_transfer.svg +0 -3
@@ -3,7 +3,7 @@
3
3
  <upper-container v-if="filterViews && filterViews.length">
4
4
  <view-container :maxWidth="activeView.length">
5
5
  <select-component
6
- @click.native.stop
6
+ @click.stop
7
7
  selectWidth="100%"
8
8
  selectHeight="36px"
9
9
  fontSize="13px"
@@ -19,10 +19,10 @@
19
19
  <Option
20
20
  v-for="(item, idx) in filterViews"
21
21
  :key="idx + '_view'"
22
- @click.native="$emit('on-view-select', item)"
22
+ @click="$emit('on-view-select', item)"
23
23
  :value="item.name"
24
24
  >{{ item.name }}
25
- <delete-icon @click.native.stop="$emit('on-view-delete', item)"
25
+ <delete-icon @click.stop="$emit('on-view-delete', item)"
26
26
  /></Option>
27
27
  </template>
28
28
  </select-component>
@@ -55,28 +55,28 @@
55
55
  ghost-class="ghost"
56
56
  :setData="modifyDragItem"
57
57
  v-model="item.dataOptions"
58
+ itemKey="choice"
58
59
  >
59
- <checkbox-wrapper
60
- v-for="(column, index) in item.dataOptions"
61
- :key="index + 'dataOption'"
62
- >
63
- <drag-container class="drag-container">
64
- <icon :name="'duplicate-1'" size="12px" />
65
- </drag-container>
66
- <checkbox
67
- :label="column.text"
68
- :isChecked="column.selected"
69
- @on-event-handler="
70
- onChange({
71
- dataType: item.type,
72
- value: $event,
73
- choice: column.choice
74
- })
75
- "
76
- size="small"
77
- :isDisabled="column.selected && isCheckboxDisabled"
78
- />
79
- </checkbox-wrapper>
60
+ <template #item="{ element: column }">
61
+ <checkbox-wrapper>
62
+ <drag-container class="drag-container">
63
+ <icon :name="'duplicate-1'" size="12px" />
64
+ </drag-container>
65
+ <checkbox
66
+ :label="column.text"
67
+ :isChecked="column.selected"
68
+ @on-event-handler="
69
+ onChange({
70
+ dataType: item.type,
71
+ value: $event,
72
+ choice: column.choice
73
+ })
74
+ "
75
+ size="small"
76
+ :isDisabled="column.selected && isCheckboxDisabled"
77
+ />
78
+ </checkbox-wrapper>
79
+ </template>
80
80
  </draggable>
81
81
  </checkbox-container>
82
82
  </row-container>
@@ -169,12 +169,20 @@
169
169
  >
170
170
  <row-label :data-id="filter.dataId">{{ filter.label }}</row-label>
171
171
  <grid-container>
172
- <date-picker-input
172
+ <VueDatePicker
173
+ text-input
173
174
  :placeholder="$gettext('Date from')"
174
- :lang="getDatePickerLanguage()"
175
- type="date"
176
- :value="filter.range.start"
177
- @change="
175
+ :locale="getDatePickerLanguage()"
176
+ :model-value="filter.range.start"
177
+ :enable-time-picker="false"
178
+ :clearable="true"
179
+ :auto-apply="true"
180
+ :disabled-dates="disableFutureDates"
181
+ format="yyyy-MM-dd"
182
+ model-type="format"
183
+ @focus="onDatepickerFocus(filter.range)"
184
+ @close="onDatepickerBlur()"
185
+ @update:model-value="
178
186
  onChange({
179
187
  dataType: item.type,
180
188
  value: $event,
@@ -182,18 +190,21 @@
182
190
  field: filter.field
183
191
  })
184
192
  "
185
- @focus="onDatepickerFocus(filter.range)"
186
- @close="onDatepickerBlur()"
187
- format="YYYY-MM-DD"
188
- valueType="format"
189
- :disabled-date="disableFutureDates"
190
193
  />
191
- <date-picker-input
194
+ <VueDatePicker
195
+ text-input
192
196
  :placeholder="$gettext('Date to')"
193
- :lang="getDatePickerLanguage()"
194
- type="date"
195
- :value="filter.range.end"
196
- @change="
197
+ :locale="getDatePickerLanguage()"
198
+ :model-value="filter.range.end"
199
+ :enable-time-picker="false"
200
+ :clearable="true"
201
+ :auto-apply="true"
202
+ :disabled-dates="disablePastDates"
203
+ format="yyyy-MM-dd"
204
+ model-type="format"
205
+ @focus="onDatepickerFocus(filter.range)"
206
+ @close="onDatepickerBlur()"
207
+ @update:model-value="
197
208
  onChange({
198
209
  dataType: item.type,
199
210
  value: $event,
@@ -201,11 +212,6 @@
201
212
  field: filter.field
202
213
  })
203
214
  "
204
- @focus="onDatepickerFocus(filter.range)"
205
- @close="onDatepickerBlur()"
206
- format="YYYY-MM-DD"
207
- valueType="format"
208
- :disabled-date="disablePastDates"
209
215
  />
210
216
  </grid-container>
211
217
  </section-container>
@@ -247,27 +253,26 @@
247
253
  v-if="buttonText.apply_view"
248
254
  type="primary"
249
255
  :text="buttonText.apply_view"
250
- @click.native="$emit('on-apply-current-view')"
256
+ @click="$emit('on-apply-current-view')"
251
257
  />
252
258
  <main-button
253
259
  type="secondary"
254
260
  v-if="buttonText.save_view"
255
261
  :text="buttonText.save_view"
256
- @click.native="$emit('on-save-new-view')"
262
+ @click="$emit('on-save-new-view')"
257
263
  />
258
264
  <main-button
259
265
  type="cancel"
260
266
  v-if="buttonText.cancel"
261
267
  :text="buttonText.cancel"
262
- @click.native="$emit('on-cancel-view')"
268
+ @click="$emit('on-cancel-view')"
263
269
  />
264
270
  </button-container>
265
271
  </container-wrapper>
266
272
  </template>
267
273
 
268
274
  <script>
269
- import styled from 'vue-styled-components'
270
- import DatePicker from 'vue2-datepicker'
275
+ import styled from 'vue3-styled-components'
271
276
  import SelectComponent from '../inputs/select'
272
277
  import Option from '../inputs/select/option'
273
278
  import InputNumber from '../inputs/inputNumber'
@@ -278,12 +283,7 @@ import Icon from '../icon'
278
283
  import DeleteIcon from '../deleteIcon'
279
284
  import { datePickerLang } from '../../helpers/translateLang'
280
285
  import theme from '@/assets/theme.js'
281
- import 'vue2-datepicker/index.css'
282
- import 'vue2-datepicker/locale/de'
283
- import 'vue2-datepicker/locale/en'
284
- import 'vue2-datepicker/locale/es'
285
- import 'vue2-datepicker/locale/fr'
286
- import 'vue2-datepicker/locale/it'
286
+ import VueDatePicker from '@vuepic/vue-datepicker'
287
287
 
288
288
  const ContainerWrapper = styled.div`
289
289
  position: absolute;
@@ -376,52 +376,13 @@ const DropdownCheckboxContainer = styled.div`
376
376
  gap: 6px;
377
377
  width: 100%;
378
378
  padding: 12px 10px;
379
+ background: ${(props) => props.theme.colors.grey5};
379
380
  `
380
381
 
381
382
  const RowWrapper = styled.div`
382
383
  margin-bottom: 12px;
383
384
  `
384
385
 
385
- const DatePickerInput = styled(DatePicker)`
386
- border: 1px solid ${(props) => props.theme.colors.grey4};
387
- border-radius: 4px;
388
- padding: 7px 12px 7px 7px;
389
- width: 100%;
390
- position: relative;
391
-
392
- &.mx-datepicker {
393
- width: 100% !important;
394
- max-width: 100%;
395
- height: 36px;
396
- align-self: flex-end;
397
- }
398
-
399
- .mx-input-wrapper {
400
- position: unset;
401
-
402
- input {
403
- border: none;
404
- height: auto;
405
- padding: 0;
406
- font-size: 13px;
407
- box-shadow: none;
408
- color: #393939;
409
- vertical-align: bottom;
410
- }
411
-
412
- .mx-input-append {
413
- top: 1px;
414
- }
415
- }
416
-
417
- .mx-input-append {
418
- left: 0;
419
- top: 5px;
420
- height: auto;
421
- cursor: pointer;
422
- }
423
- `
424
-
425
386
  const LabelAttrs = {
426
387
  marginTop: Boolean
427
388
  }
@@ -486,14 +447,14 @@ export default {
486
447
  Icon,
487
448
  DragContainer,
488
449
  InputNumber,
489
- DatePickerInput,
490
450
  RowLabel,
491
451
  SectionContainer,
492
452
  GridContainer,
493
453
  ViewContainer,
494
454
  DeleteIcon,
495
455
  UpperContainer,
496
- ResetButton
456
+ ResetButton,
457
+ VueDatePicker
497
458
  },
498
459
  props: {
499
460
  filterData: {
@@ -29,7 +29,7 @@
29
29
  </template>
30
30
 
31
31
  <script>
32
- import styled from 'vue-styled-components'
32
+ import styled from 'vue3-styled-components'
33
33
  import parentDropdown from './parentDropdown'
34
34
  import filterSettings from './filterSettings'
35
35
 
@@ -93,9 +93,9 @@ export default {
93
93
  }, 100)
94
94
  },
95
95
  clickOutside(event) {
96
- const target = event.target
97
96
  if (
98
- !this.$refs.dropdown.$el.contains(target) &&
97
+ this.$refs.dropdown &&
98
+ !this.$refs.dropdown.$el.contains(event.target) &&
99
99
  !this.preventOutsideClick
100
100
  ) {
101
101
  this.isDropdownOpen = false
@@ -9,7 +9,7 @@
9
9
  </title-text>
10
10
  <arrow-wrapper>
11
11
  <icon
12
- @click.native.stop="$emit('on-toggle')"
12
+ @click.stop="$emit('on-toggle')"
13
13
  :name="isOpen ? 'arrow_up' : 'arrow_down'"
14
14
  size="12px"
15
15
  />
@@ -19,7 +19,7 @@
19
19
  </template>
20
20
 
21
21
  <script>
22
- import styled from 'vue-styled-components'
22
+ import styled from 'vue3-styled-components'
23
23
  import Icon from '../icon'
24
24
 
25
25
  const PageWrapper = styled.div`
@@ -0,0 +1,23 @@
1
+ const iconCache = {}
2
+
3
+ export const fetchIcon = async (fileName) => {
4
+ if (iconCache[fileName]) {
5
+ return iconCache[fileName]
6
+ }
7
+
8
+ // We need to use "new URL" to load dynamic assets (https://vitejs.dev/guide/assets.html#new-url-url-import-meta-url)
9
+ const fetchUrl = new URL(
10
+ `../../assets/svgIcons/${fileName}.svg`,
11
+ import.meta.url
12
+ ).href
13
+
14
+ try {
15
+ const response = await fetch(fetchUrl)
16
+ const rawFile = await response.text()
17
+ iconCache[fileName] = rawFile
18
+
19
+ return rawFile
20
+ } catch (error) {
21
+ console.error(`Failed to load ${fileName}.svg`)
22
+ }
23
+ }
@@ -16,7 +16,7 @@
16
16
 
17
17
  <script>
18
18
  import icon from './index.vue'
19
- import styled from 'vue-styled-components'
19
+ import styled from 'vue3-styled-components'
20
20
 
21
21
  const Wrapper = styled.div`
22
22
  display: block;
@@ -36,7 +36,7 @@ const IconWrapper = styled.div`
36
36
  margin: 10px;
37
37
  `
38
38
  export default {
39
- name: 'collection',
39
+ name: 'collectionComponent',
40
40
  components: { icon, IconWrapper, Wrapper },
41
41
  props: {
42
42
  size: { required: false },
@@ -1,20 +1,13 @@
1
1
  <template>
2
- <Wrapper :isDisabled="disabled" :size="size" :cursor="cursor">
3
- <icon-image
4
- :disabled="disabled"
5
- :size="size"
6
- :color="color"
7
- :hoveredColor="hoveredColor"
8
- :backgroundColor="backgroundColor"
9
- v-html="
10
- require(`!html-loader!./../../assets/svgIcons/${name.toLowerCase()}.svg`)
11
- "
12
- ></icon-image>
13
- <striked-line v-if="isStriked" :color="color" :disabled="disabled" :hoveredColor="hoveredColor"></striked-line>
14
- </Wrapper>
2
+ <wrapper>
3
+ <icon-image>
4
+ <i v-html="icon.html" />
5
+ </icon-image>
6
+ <striked-line v-if="isStriked"></striked-line>
7
+ </wrapper>
15
8
  </template>
16
9
 
17
- <script>
10
+ <script setup>
18
11
  // import Icon from "@eturnity/eturnity_reusable_components/src/components/icon"
19
12
  // How to use:
20
13
  //<icon
@@ -26,40 +19,71 @@
26
19
  // isStriked = "true"
27
20
  // />
28
21
 
29
- import styled from 'vue-styled-components'
22
+ import { onMounted, reactive, watch } from 'vue'
23
+ import styled from 'vue3-styled-components'
24
+ import { fetchIcon } from './iconCache'
30
25
 
31
- const wrapperAttrs = { isDisabled: Boolean, size: String, cursor: String }
32
- const Wrapper = styled('div', wrapperAttrs)`
26
+ const props = defineProps({
27
+ disabled: {
28
+ required: false,
29
+ default: false
30
+ },
31
+ name: {
32
+ required: true
33
+ },
34
+ color: {
35
+ required: false
36
+ },
37
+ hoveredColor: {
38
+ required: false
39
+ },
40
+ size: {
41
+ required: false,
42
+ default: '30px'
43
+ },
44
+ cursor: {
45
+ required: false,
46
+ default: null
47
+ },
48
+ isStriked: {
49
+ required: false,
50
+ default: false
51
+ }
52
+ })
53
+
54
+ const Wrapper = styled('div')`
33
55
  display: flex;
34
56
  position: relative;
35
57
  align-content: center;
36
58
  justify-content: center;
37
- width: ${(props) => props.size};
38
- height: ${(props) => props.size};
39
- min-width: ${(props) => props.size};
40
- min-height: ${(props) => props.size};
41
- cursor: ${(props) => (props.isDisabled ? 'not-allowed' : props.cursor)};
59
+ width: ${props.size};
60
+ height: ${props.size};
61
+ min-width: ${props.size};
62
+ min-height: ${props.size};
63
+ cursor: ${props.disabled ? 'not-allowed' : props.cursor};
42
64
  line-height: 0;
43
65
  `
44
-
45
- const strikedAttrs = { isDisabled: Boolean, color: String, hoveredColor: String }
46
- const strikedLine = styled('div', strikedAttrs)`
66
+ const strikedAttrs = {
67
+ isDisabled: Boolean,
68
+ color: String,
69
+ hoveredColor: String
70
+ }
71
+ const StrikedLine = styled.div`
47
72
  display: flex;
48
73
  position: absolute;
49
- bottom:0;
50
- left:0;
74
+ bottom: 0;
75
+ left: 0;
51
76
  align-content: center;
52
77
  justify-content: center;
53
78
  width: 143%;
54
- height:8%;
55
- background-color: ${(props)=>props.theme.colors[props.color] || props.color};
79
+ height: 8%;
80
+ background-color: ${({ theme }) => theme.colors[props.color] || props.color};
56
81
  min-height: 0;
57
82
  line-height: 0;
58
83
  transform-origin: 0% 100%;
59
84
  transform: rotate(-45deg);
60
85
  `
61
- const IconImageProps = { color: String, hoveredColor: String, size: String, backgroundColor: String}
62
- const IconImage = styled('div', IconImageProps)`
86
+ const IconImage = styled.div`
63
87
  width: 100%;
64
88
  svg {
65
89
  width: 100%;
@@ -68,56 +92,24 @@ const IconImage = styled('div', IconImageProps)`
68
92
  padding: ${(props) => props.backgroundColor ? '3px' : '0'};
69
93
  }
70
94
  svg path {
71
- ${(props) =>
72
- props.color && `fill: ${props.theme.colors[props.color] || props.color};`}
95
+ ${({ theme }) =>
96
+ props.color && `fill: ${theme.colors[props.color] || props.color};`}
73
97
  }
74
98
  &:hover > svg path {
75
- ${(props) => props.hoveredColor && `fill: ${props.hoveredColor};`}
99
+ ${props.hoveredColor && `fill: ${props.hoveredColor};`}
76
100
  }
77
101
  &:hover + div {
78
- background-color: ${(props)=>props.hoveredColor};
102
+ background-color: ${props.hoveredColor};
79
103
  }
80
104
  `
81
105
 
82
- export default {
83
- name: 'icon',
84
- components: {
85
- IconImage,
86
- Wrapper,
87
- strikedLine
88
- },
89
- props: {
90
- disabled: {
91
- required: false,
92
- default: false
93
- },
94
- name: {
95
- required: true
96
- },
97
- color: {
98
- required: false
99
- },
100
- backgroundColor: {
101
- required: false
102
- },
103
- hoveredColor: {
104
- required: false
105
- },
106
- size: {
107
- required: false,
108
- default: '30px'
109
- },
110
- cursor: {
111
- required: false,
112
- default: null
113
- },
114
- isStriked: {
115
- required: false,
116
- default: false
117
- }
118
- },
119
- data() {
120
- return {}
121
- }
106
+ const icon = reactive({ html: '' })
107
+
108
+ const loadSvg = async () => {
109
+ icon.html = await fetchIcon(props.name.toLowerCase())
122
110
  }
111
+
112
+ onMounted(() => loadSvg())
113
+
114
+ watch(() => props.name, loadSvg)
123
115
  </script>
@@ -42,7 +42,7 @@
42
42
  // size="60px" by default, this is 30px
43
43
  // />
44
44
 
45
- import styled from 'vue-styled-components'
45
+ import styled from 'vue3-styled-components'
46
46
  import icon from '../icon'
47
47
  const wrapperAttrs = {
48
48
  color: String,
@@ -148,9 +148,6 @@ export default {
148
148
  required: false,
149
149
  default: false
150
150
  }
151
- },
152
- data() {
153
- return {}
154
151
  }
155
152
  }
156
153
  </script>
@@ -8,7 +8,7 @@
8
8
  </template>
9
9
 
10
10
  <script>
11
- import styled from 'vue-styled-components'
11
+ import styled from 'vue3-styled-components'
12
12
  import Icon from '../icon'
13
13
 
14
14
  const InfoContainer = styled.div`
@@ -24,7 +24,6 @@ const TextContainer = styled.div`
24
24
  width: 100%;
25
25
  `
26
26
 
27
-
28
27
  export default {
29
28
  name: 'InfoCard',
30
29
  components: {
@@ -33,4 +32,4 @@ export default {
33
32
  TextContainer
34
33
  }
35
34
  }
36
- </script>
35
+ </script>
@@ -30,7 +30,7 @@
30
30
  // alignArrow="right" // which side the arrow should be on
31
31
  // />
32
32
  import theme from '../../assets/theme.js'
33
- import styled from 'vue-styled-components'
33
+ import styled from 'vue3-styled-components'
34
34
  import icon from '../icon'
35
35
 
36
36
  const textAttrs = {
@@ -3,7 +3,7 @@
3
3
  <container
4
4
  :checkColor="checkColor"
5
5
  :size="size"
6
- :hasLabel="!!label.length"
6
+ :hasLabel="hasLabel"
7
7
  :backgroundColor="backgroundColor"
8
8
  :isChecked="isChecked"
9
9
  :isDisabled="isDisabled"
@@ -14,10 +14,10 @@
14
14
  :data-id="dataId"
15
15
  @change="onChangeHandler(!isChecked)"
16
16
  />
17
- <div>
17
+ <check-wrapper :hasLabel="hasLabel">
18
18
  <span class="checkmark"></span>
19
- </div>
20
- <label-text v-if="!!label.length">{{ label }}</label-text>
19
+ </check-wrapper>
20
+ <label-text v-if="hasLabel">{{ label }}</label-text>
21
21
  </container>
22
22
  </component-wrapper>
23
23
  </template>
@@ -34,12 +34,21 @@
34
34
  // backgroundColor="red"
35
35
  // :isDisabled="true"
36
36
  // />
37
- import styled from 'vue-styled-components'
37
+ import styled from 'vue3-styled-components'
38
38
 
39
39
  const ComponentWrapper = styled.div`
40
40
  min-height: 18px;
41
41
  `
42
42
 
43
+ const CheckWrapper = styled('div', { hasLabel: Boolean })`
44
+ ${(props) =>
45
+ props.hasLabel &&
46
+ `
47
+ display: flex;
48
+ align-items: center;
49
+ `}
50
+ `
51
+
43
52
  const containerAttrs = {
44
53
  checkColor: String,
45
54
  size: String,
@@ -145,7 +154,8 @@ export default {
145
154
  ComponentWrapper,
146
155
  Container,
147
156
  InputCheckbox,
148
- LabelText
157
+ LabelText,
158
+ CheckWrapper
149
159
  },
150
160
  props: {
151
161
  label: {
@@ -175,6 +185,11 @@ export default {
175
185
  default: ''
176
186
  }
177
187
  },
188
+ computed: {
189
+ hasLabel() {
190
+ return !!this.label.length
191
+ }
192
+ },
178
193
  methods: {
179
194
  onChangeHandler(value) {
180
195
  if (this.isDisabled) {