@eturnity/eturnity_reusable_components 7.30.3-EPDM-10647.0 → 7.30.3-EPDM-10576.2

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 (82) hide show
  1. package/.eslintrc.js +184 -0
  2. package/.prettierrc +8 -6
  3. package/package.json +9 -21
  4. package/src/App.vue +79 -78
  5. package/src/assets/theme.js +3 -3
  6. package/src/components/addNewButton/AddNewButton.stories.js +2 -2
  7. package/src/components/addNewButton/index.vue +48 -51
  8. package/src/components/banner/actionBanner/index.vue +54 -55
  9. package/src/components/banner/banner/banner.stories.js +5 -5
  10. package/src/components/banner/banner/index.vue +159 -159
  11. package/src/components/banner/infoBanner/index.vue +41 -53
  12. package/src/components/buttons/buttonIcon/index.vue +125 -122
  13. package/src/components/buttons/closeButton/CloseButton.stories.js +3 -3
  14. package/src/components/buttons/closeButton/index.vue +49 -49
  15. package/src/components/buttons/mainButton/index.vue +108 -108
  16. package/src/components/card/index.vue +70 -70
  17. package/src/components/collapsableInfoText/index.vue +96 -94
  18. package/src/components/deleteIcon/DeleteIcon.stories.js +4 -4
  19. package/src/components/deleteIcon/index.vue +54 -54
  20. package/src/components/draggableInputHandle/index.vue +37 -37
  21. package/src/components/dropdown/Dropdown.stories.js +9 -10
  22. package/src/components/dropdown/index.vue +106 -106
  23. package/src/components/errorMessage/index.vue +52 -52
  24. package/src/components/filter/filterSettings.vue +486 -452
  25. package/src/components/filter/index.vue +135 -135
  26. package/src/components/filter/parentDropdown.vue +73 -73
  27. package/src/components/icon/Icons.stories.js +7 -7
  28. package/src/components/icon/iconCollection.vue +53 -53
  29. package/src/components/icon/index.vue +122 -122
  30. package/src/components/iconWrapper/index.vue +156 -156
  31. package/src/components/infoCard/index.vue +30 -32
  32. package/src/components/infoText/index.vue +142 -137
  33. package/src/components/inputs/checkbox/Checkbox.stories.js +8 -8
  34. package/src/components/inputs/checkbox/index.vue +190 -180
  35. package/src/components/inputs/inputNumber/InputNumber.stories.js +41 -41
  36. package/src/components/inputs/inputNumber/index.vue +696 -701
  37. package/src/components/inputs/inputNumberQuestion/index.vue +185 -182
  38. package/src/components/inputs/inputText/InputText.stories.js +22 -22
  39. package/src/components/inputs/inputText/index.vue +337 -336
  40. package/src/components/inputs/radioButton/RadioButton.stories.js +16 -16
  41. package/src/components/inputs/radioButton/index.vue +222 -219
  42. package/src/components/inputs/searchInput/SearchInput.stories.js +8 -8
  43. package/src/components/inputs/searchInput/index.vue +127 -126
  44. package/src/components/inputs/select/index.vue +792 -792
  45. package/src/components/inputs/select/option/index.vue +124 -124
  46. package/src/components/inputs/select/select.stories.js +31 -32
  47. package/src/components/inputs/slider/index.vue +99 -99
  48. package/src/components/inputs/switchField/index.vue +220 -222
  49. package/src/components/inputs/textAreaInput/TextAreaInput.stories.js +57 -57
  50. package/src/components/inputs/textAreaInput/index.vue +171 -173
  51. package/src/components/inputs/toggle/Toggle.stories.js +14 -14
  52. package/src/components/inputs/toggle/index.vue +214 -217
  53. package/src/components/label/index.vue +82 -82
  54. package/src/components/markerItem/index.vue +68 -66
  55. package/src/components/modals/actionModal/index.vue +54 -54
  56. package/src/components/modals/infoModal/index.vue +39 -36
  57. package/src/components/modals/modal/index.vue +134 -134
  58. package/src/components/modals/modal/modal.stories.js +5 -5
  59. package/src/components/navigationTabs/index.vue +96 -94
  60. package/src/components/pageSubtitle/index.vue +55 -49
  61. package/src/components/pageTitle/index.vue +56 -56
  62. package/src/components/pagination/index.vue +92 -89
  63. package/src/components/progressBar/index.vue +107 -107
  64. package/src/components/projectMarker/index.vue +246 -244
  65. package/src/components/rangeSlider/Slider.vue +491 -465
  66. package/src/components/rangeSlider/index.vue +410 -410
  67. package/src/components/rangeSlider/utils/dom.js +5 -5
  68. package/src/components/selectedOptions/index.vue +119 -119
  69. package/src/components/sideMenu/index.vue +199 -199
  70. package/src/components/spinner/index.vue +57 -57
  71. package/src/components/tableDropdown/index.vue +520 -520
  72. package/src/components/tables/mainTable/index.vue +417 -400
  73. package/src/components/tables/viewTable/index.vue +171 -171
  74. package/src/components/threeDots/index.vue +340 -334
  75. package/src/components/videoThumbnail/index.vue +86 -86
  76. package/src/components/videoThumbnail/videoThumbnail.stories.js +14 -16
  77. package/src/helpers/numberConverter.js +2 -2
  78. package/src/helpers/translateLang.js +9 -9
  79. package/src/mixins/inputValidations.js +5 -5
  80. package/public/favicon.ico +0 -0
  81. package/public/index.html +0 -17
  82. package/src/utils/index.js +0 -12
@@ -1,85 +1,84 @@
1
1
  <template>
2
- <container :inputWidth="inputWidth" :alignItems="alignItems">
3
- <label-slot-wrapper
2
+ <Container :align-items="alignItems" :input-width="inputWidth">
3
+ <LabelSlotWrapper
4
4
  v-if="hasLabelSlot"
5
- :isInteractive="isInteractive"
6
- :alignItems="alignItems"
7
- :noBorder="noBorder"
8
- :isError="isError"
9
- :borderColor="borderColor"
5
+ :align-items="alignItems"
6
+ :border-color="borderColor"
7
+ :is-error="isError"
8
+ :is-interactive="isInteractive"
9
+ :no-border="noBorder"
10
10
  @mousedown="initInteraction"
11
11
  >
12
12
  <slot name="label"></slot>
13
- </label-slot-wrapper>
13
+ </LabelSlotWrapper>
14
14
 
15
- <label-wrapper v-if="labelText">
16
- <label-text :labelFontColor="labelFontColor" :data-id="labelDataId">
15
+ <LabelWrapper v-if="labelText">
16
+ <LabelText :data-id="labelDataId" :label-font-color="labelFontColor">
17
17
  {{ labelText }}
18
- </label-text>
18
+ </LabelText>
19
19
 
20
- <info-text
20
+ <InfoText
21
21
  v-if="labelInfoText"
22
+ :align-arrow="labelInfoAlign"
22
23
  :text="labelInfoText"
23
- :alignArrow="labelInfoAlign"
24
24
  />
25
- </label-wrapper>
26
- <input-wrapper>
27
- <input-container
25
+ </LabelWrapper>
26
+ <InputWrapper>
27
+ <InputContainer
28
28
  v-bind="$attrs"
29
29
  ref="inputField1"
30
- :hasUnit="unitName && !!unitName.length"
30
+ :align-items="alignItems"
31
+ :background-color="backgroundColor"
32
+ :border-color="borderColor"
33
+ :data-id="inputDataId"
34
+ :disabled="disabled"
35
+ :font-color="fontColor"
36
+ :font-size="fontSize"
37
+ :has-label-slot="hasLabelSlot"
38
+ :has-slot="hasSlot"
39
+ :has-unit="unitName && !!unitName.length"
40
+ :input-height="inputHeight"
41
+ :is-disabled="disabled"
42
+ :is-error="isError"
43
+ :is-interactive="isInteractive"
44
+ :min-width="minWidth"
45
+ :no-border="noBorder"
31
46
  :placeholder="displayedPlaceholder"
32
- :isError="isError"
33
- :inputHeight="inputHeight"
34
- :minWidth="minWidth"
35
- :isInteractive="isInteractive"
47
+ :show-linear-unit-name="showLinearUnitName"
48
+ :slot-size="slotSize"
49
+ :text-align="textAlign"
36
50
  :value="formatWithCurrency(value)"
37
51
  @blur="onInputBlur($event)"
38
52
  @focus="focusInput()"
39
- @keyup.enter="onEnterPress"
40
53
  @input="onInput($event)"
41
- :disabled="disabled"
42
- :isDisabled="disabled"
43
- :alignItems="alignItems"
44
- :noBorder="noBorder"
45
- :borderColor="borderColor"
46
- :textAlign="textAlign"
47
- :fontSize="fontSize"
48
- :fontColor="fontColor"
49
- :backgroundColor="backgroundColor"
50
- :hasSlot="hasSlot"
51
- :hasLabelSlot="hasLabelSlot"
52
- :slotSize="slotSize"
53
- :showLinearUnitName="showLinearUnitName"
54
- :data-id="inputDataId"
54
+ @keyup.enter="onEnterPress"
55
55
  />
56
- <slot-container v-if="hasSlot" :slotSize="slotSize" :isError="isError">
56
+ <SlotContainer v-if="hasSlot" :is-error="isError" :slot-size="slotSize">
57
57
  <slot></slot>
58
- </slot-container>
58
+ </SlotContainer>
59
59
 
60
- <unit-container
60
+ <UnitContainer
61
61
  v-if="unitName && showLinearUnitName && !hasSlot"
62
- :hasLength="!!textInput.length"
63
- :isError="isError"
64
- >{{ unitName }}</unit-container
62
+ :has-length="!!textInput.length"
63
+ :is-error="isError"
64
+ >{{ unitName }}</UnitContainer
65
65
  >
66
- <icon-wrapper
66
+ <IconWrapper
67
67
  v-if="isError && !showLinearUnitName"
68
+ :margin-right="showSelect ? selectWidth : 0"
68
69
  size="16px"
69
- :marginRight="showSelect ? selectWidth : 0"
70
70
  >
71
- <icon name="warning" size="16px" cursor="default" />
72
- </icon-wrapper>
73
- <select-wrapper v-if="showSelect">
74
- <divider />
71
+ <Icon cursor="default" name="warning" size="16px" />
72
+ </IconWrapper>
73
+ <SelectWrapper v-if="showSelect">
74
+ <Divider />
75
75
  <Select
76
- :showBorder="false"
77
- :selectWidth="`${selectWidth}px`"
78
- :disabled="isSelectDisabled"
76
+ :select-width="`${selectWidth}px`"
77
+ :show-border="false"
79
78
  @input-change="$emit('select-change', $event)"
80
79
  >
81
80
  <template #selector>
82
- <select-text>{{ getSelectValue }}</select-text>
81
+ <SelectText>{{ getSelectValue }}</SelectText>
83
82
  </template>
84
83
  <template #dropdown>
85
84
  <Option
@@ -91,699 +90,695 @@
91
90
  </Option>
92
91
  </template>
93
92
  </Select>
94
- </select-wrapper>
95
- </input-wrapper>
96
- <error-message v-if="isError">{{ errorMessage }}</error-message>
97
- </container>
93
+ </SelectWrapper>
94
+ </InputWrapper>
95
+ <ErrorMessage v-if="isError">{{ errorMessage }}</ErrorMessage>
96
+ </Container>
98
97
  </template>
99
98
 
100
99
  <script>
101
- // import InputNumber from "@eturnity/eturnity_reusable_components/src/components/inputs/inputNumber"
102
- //This component should be used for questions with input fields only
103
- //How to use:
104
- // <input-number
105
- // placeholder="Enter distance"
106
- // :isError="false" //default is false
107
- // inputWidth="150px" //by default, this is 100%
108
- // minWidth="100px"
109
- // :numberPrecision="3"
110
- // minDecimals="2"
111
- // unitName="pc"
112
- // :value="inputValue" //required -- String
113
- // @input-change="onInputChange($event)" //required
114
- // @on-enter-click="onInputSubmit()"
115
- // :errorMessage="Enter a number between 1 and 10"
116
- // :disabled="false"
117
- // :noBorder="true"
118
- // textAlign="left" // "left, right, center"
119
- // :showLinearUnitName="true"
120
- // fontSize="13px"
121
- // labelText="Number of Modules"
122
- // labelInfoText="Here is some information for you..."
123
- // labelInfoAlign="left"
124
- // :minNumber="0"
125
- // fontColor="blue"
126
- // >
127
- //<template name=label><img>....</template>
128
- //</inputNumber>
129
- import styled from 'vue3-styled-components'
130
- import {
131
- stringToNumber,
132
- numberToString
133
- } from '../../../helpers/numberConverter'
134
- import InfoText from '../../infoText'
135
- import ErrorMessage from '../../errorMessage'
136
- import Select from '../select'
137
- import Option from '../select/option'
138
- import warningIcon from '../../../assets/icons/error_icon.png'
139
- import Icon from '../../icon'
100
+ // import InputNumber from "@eturnity/eturnity_reusable_components/src/components/inputs/inputNumber"
101
+ //This component should be used for questions with input fields only
102
+ //How to use:
103
+ // <input-number
104
+ // placeholder="Enter distance"
105
+ // :isError="false" //default is false
106
+ // inputWidth="150px" //by default, this is 100%
107
+ // minWidth="100px"
108
+ // :numberPrecision="3"
109
+ // minDecimals="2"
110
+ // unitName="pc"
111
+ // :value="inputValue" //required -- String
112
+ // @input-change="onInputChange($event)" //required
113
+ // @on-enter-click="onInputSubmit()"
114
+ // :errorMessage="Enter a number between 1 and 10"
115
+ // :disabled="false"
116
+ // :noBorder="true"
117
+ // textAlign="left" // "left, right, center"
118
+ // :showLinearUnitName="true"
119
+ // fontSize="13px"
120
+ // labelText="Number of Modules"
121
+ // labelInfoText="Here is some information for you..."
122
+ // labelInfoAlign="left"
123
+ // :minNumber="0"
124
+ // fontColor="blue"
125
+ // >
126
+ //<template name=label><img>....</template>
127
+ //</inputNumber>
128
+ import styled from 'vue3-styled-components'
129
+ import {
130
+ stringToNumber,
131
+ numberToString,
132
+ } from '../../../helpers/numberConverter'
133
+ import InfoText from '../../infoText'
134
+ import ErrorMessage from '../../errorMessage'
135
+ import Select from '../select'
136
+ import Option from '../select/option'
137
+ import warningIcon from '../../../assets/icons/error_icon.png'
138
+ import Icon from '../../icon'
140
139
 
141
- const inputProps = {
142
- isError: Boolean,
143
- hasUnit: Boolean,
144
- inputWidth: String,
145
- minWidth: String,
146
- isDisabled: Boolean,
147
- noBorder: Boolean,
148
- textAlign: String,
149
- fontSize: String,
150
- fontColor: String,
151
- backgroundColor: String,
152
- hasSlot: Boolean,
153
- hasLabelSlot: Boolean,
154
- slotSize: String,
155
- inputHeight: String,
156
- isInteractive: Boolean,
157
- alignItems: String,
158
- labelFontColor: String,
159
- borderColor: String,
160
- showLinearUnitName: Boolean
161
- }
140
+ const inputProps = {
141
+ isError: Boolean,
142
+ hasUnit: Boolean,
143
+ inputWidth: String,
144
+ minWidth: String,
145
+ isDisabled: Boolean,
146
+ noBorder: Boolean,
147
+ textAlign: String,
148
+ fontSize: String,
149
+ fontColor: String,
150
+ backgroundColor: String,
151
+ hasSlot: Boolean,
152
+ hasLabelSlot: Boolean,
153
+ slotSize: String,
154
+ inputHeight: String,
155
+ isInteractive: Boolean,
156
+ alignItems: String,
157
+ labelFontColor: String,
158
+ borderColor: String,
159
+ showLinearUnitName: Boolean,
160
+ }
162
161
 
163
- const Container = styled('div', inputProps)`
164
- width: ${(props) => (props.inputWidth ? props.inputWidth : '100%')};
165
- position: relative;
166
- display: grid;
167
- grid-template-columns: ${(props) =>
168
- props.alignItems === 'vertical' ? '1fr' : 'auto 1fr'};
169
- `
162
+ const Container = styled('div', inputProps)`
163
+ width: ${(props) => (props.inputWidth ? props.inputWidth : '100%')};
164
+ position: relative;
165
+ display: grid;
166
+ grid-template-columns: ${(props) =>
167
+ props.alignItems === 'vertical' ? '1fr' : 'auto 1fr'};
168
+ `
170
169
 
171
- const InputContainer = styled('input', inputProps)`
172
- border: ${(props) =>
173
- props.isError
174
- ? '1px solid ' + props.theme.colors.red
175
- : props.noBorder
176
- ? 'none'
177
- : props.borderColor
178
- ? props.theme.colors[props.borderColor]
179
- ? '1px solid ' + props.theme.colors[props.borderColor]
180
- : '1px solid ' + props.borderColor
181
- : '1px solid ' + props.theme.colors.grey4};
182
- height: ${(props) => props.inputHeight};
183
- max-height: ${(props) => props.inputHeight};
184
- padding: 0 10px;
185
- padding-right: ${({ slotSize, isError, showLinearUnitName }) =>
186
- slotSize
187
- ? isError && !showLinearUnitName
188
- ? 'calc(' + slotSize + ' + 24px)'
189
- : 'calc(' + slotSize + ' + 10px)'
190
- : isError && !showLinearUnitName
191
- ? '24px'
192
- : '5px'};
193
- border-radius: ${(props) =>
194
- props.isInteractive && props.alignItems != 'vertical'
195
- ? '0 4px 4px 0'
196
- : '4px'};
197
- text-align: ${(props) => props.textAlign};
198
- cursor: ${(props) => (props.isDisabled ? 'not-allowed' : 'auto')};
199
- font-size: ${(props) => (props.fontSize ? props.fontSize : '13px')};
200
- color: ${(props) =>
201
- props.isError
202
- ? props.theme.colors.grey6
203
- : props.isDisabled
204
- ? props.theme.colors.grey2
205
- : props.fontColor
206
- ? props.fontColor + ' !important'
207
- : props.theme.colors.black};
208
- background-color: ${(props) =>
209
- props.backgroundColor
210
- ? props.backgroundColor + ' !important'
211
- : props.theme.colors.white};
212
- width: ${(props) =>
213
- props.inputWidth && !props.hasLabelSlot ? props.inputWidth : '100%'};
214
- min-width: ${(props) => (props.minWidth ? props.minWidth : 'unset')};
215
- background-color: ${(props) =>
216
- props.isDisabled ? props.theme.colors.grey5 : '#fff'};
217
- box-sizing: border-box;
170
+ const InputContainer = styled('input', inputProps)`
171
+ border: ${(props) =>
172
+ props.isError
173
+ ? '1px solid ' + props.theme.colors.red
174
+ : props.noBorder
175
+ ? 'none'
176
+ : props.borderColor
177
+ ? props.theme.colors[props.borderColor]
178
+ ? '1px solid ' + props.theme.colors[props.borderColor]
179
+ : '1px solid ' + props.borderColor
180
+ : '1px solid ' + props.theme.colors.grey4};
181
+ height: ${(props) => props.inputHeight};
182
+ max-height: ${(props) => props.inputHeight};
183
+ padding: 0 10px;
184
+ padding-right: ${({ slotSize, isError, showLinearUnitName }) =>
185
+ slotSize
186
+ ? isError && !showLinearUnitName
187
+ ? 'calc(' + slotSize + ' + 24px)'
188
+ : 'calc(' + slotSize + ' + 10px)'
189
+ : isError && !showLinearUnitName
190
+ ? '24px'
191
+ : '5px'};
192
+ border-radius: ${(props) =>
193
+ props.isInteractive && props.alignItems != 'vertical'
194
+ ? '0 4px 4px 0'
195
+ : '4px'};
196
+ text-align: ${(props) => props.textAlign};
197
+ cursor: ${(props) => (props.isDisabled ? 'not-allowed' : 'auto')};
198
+ font-size: ${(props) => (props.fontSize ? props.fontSize : '13px')};
199
+ color: ${(props) =>
200
+ props.isError
201
+ ? props.theme.colors.grey6
202
+ : props.isDisabled
203
+ ? props.theme.colors.grey2
204
+ : props.fontColor
205
+ ? props.fontColor + ' !important'
206
+ : props.theme.colors.black};
207
+ background-color: ${(props) =>
208
+ props.backgroundColor
209
+ ? props.backgroundColor + ' !important'
210
+ : props.theme.colors.white};
211
+ width: ${(props) =>
212
+ props.inputWidth && !props.hasLabelSlot ? props.inputWidth : '100%'};
213
+ min-width: ${(props) => (props.minWidth ? props.minWidth : 'unset')};
214
+ background-color: ${(props) =>
215
+ props.isDisabled ? props.theme.colors.grey5 : '#fff'};
216
+ box-sizing: border-box;
218
217
 
219
- &::placeholder {
220
- color: ${(props) => props.theme.colors.grey2};
221
- }
218
+ &::placeholder {
219
+ color: ${(props) => props.theme.colors.grey2};
220
+ }
222
221
 
223
- &:focus {
224
- outline: none;
225
- }
226
- `
222
+ &:focus {
223
+ outline: none;
224
+ }
225
+ `
227
226
 
228
- const InputWrapper = styled.span`
229
- position: relative;
230
- `
227
+ const InputWrapper = styled.span`
228
+ position: relative;
229
+ `
231
230
 
232
- const UnitContainer = styled('span', inputProps)`
233
- border-left: 1px solid
234
- ${(props) =>
231
+ const UnitContainer = styled('span', inputProps)`
232
+ border-left: 1px solid
233
+ ${(props) =>
234
+ props.isError
235
+ ? props.theme.colors.red
236
+ : props.hasLength
237
+ ? props.theme.colors.black
238
+ : props.theme.colors.mediumGray};
239
+ position: absolute;
240
+ right: 10px;
241
+ top: 10px;
242
+ padding-left: 10px;
243
+ text-align: right;
244
+ color: ${(props) =>
235
245
  props.isError
236
246
  ? props.theme.colors.red
237
247
  : props.hasLength
238
248
  ? props.theme.colors.black
239
249
  : props.theme.colors.mediumGray};
240
- position: absolute;
241
- right: 10px;
242
- top: 10px;
243
- padding-left: 10px;
244
- text-align: right;
245
- color: ${(props) =>
246
- props.isError
247
- ? props.theme.colors.red
248
- : props.hasLength
249
- ? props.theme.colors.black
250
- : props.theme.colors.mediumGray};
251
- `
250
+ `
252
251
 
253
- const SlotContainer = styled('span', inputProps)`
254
- text-align: right;
255
- border-left: 1px solid
256
- ${(props) =>
252
+ const SlotContainer = styled('span', inputProps)`
253
+ text-align: right;
254
+ border-left: 1px solid
255
+ ${(props) =>
256
+ props.isError
257
+ ? props.theme.colors.red
258
+ : props.hasLength
259
+ ? props.theme.colors.black
260
+ : props.theme.colors.mediumGray};
261
+ position: absolute;
262
+ width: ${(props) =>
263
+ props.slotSize ? 'calc(' + props.slotSize + ' - 10px)' : 'fit-content'};
264
+ right: 10px;
265
+ top: 10px;
266
+ padding-left: 10px;
267
+ color: ${(props) =>
257
268
  props.isError
258
269
  ? props.theme.colors.red
259
270
  : props.hasLength
260
271
  ? props.theme.colors.black
261
272
  : props.theme.colors.mediumGray};
262
- position: absolute;
263
- width: ${(props) =>
264
- props.slotSize ? 'calc(' + props.slotSize + ' - 10px)' : 'fit-content'};
265
- right: 10px;
266
- top: 10px;
267
- padding-left: 10px;
268
- color: ${(props) =>
269
- props.isError
270
- ? props.theme.colors.red
271
- : props.hasLength
272
- ? props.theme.colors.black
273
- : props.theme.colors.mediumGray};
274
- `
273
+ `
275
274
 
276
- const LabelWrapper = styled('div', inputProps)`
277
- display: flex;
278
- align-items: center;
279
- gap: 10px;
280
- margin-bottom: 8px;
281
- cursor: ${(props) => (props.isInteractive ? 'ew-resize' : 'auto')};
282
- `
283
- const LabelSlotWrapper = styled('div', inputProps)`
284
- display: flex;
285
- gap: 10px;
286
- align-items: center;
287
- cursor: ${(props) => (props.isInteractive ? 'ew-resize' : 'auto')};
288
- border: ${(props) =>
289
- props.alignItems == 'vertical'
290
- ? 'none'
291
- : props.isError
292
- ? '1px solid ' + props.theme.colors.red
293
- : props.noBorder
294
- ? 'none'
295
- : props.borderColor
296
- ? props.theme.colors[props.borderColor]
297
- ? '1px solid ' + props.theme.colors[props.borderColor]
298
- : '1px solid ' + props.borderColor
299
- : '1px solid ' + props.theme.colors.grey4};
300
- border-radius: 4px 0 0 4px;
301
- border-right: none;
302
- `
275
+ const LabelWrapper = styled('div', inputProps)`
276
+ display: flex;
277
+ align-items: center;
278
+ gap: 10px;
279
+ margin-bottom: 8px;
280
+ cursor: ${(props) => (props.isInteractive ? 'ew-resize' : 'auto')};
281
+ `
282
+ const LabelSlotWrapper = styled('div', inputProps)`
283
+ display: flex;
284
+ gap: 10px;
285
+ align-items: center;
286
+ cursor: ${(props) => (props.isInteractive ? 'ew-resize' : 'auto')};
287
+ border: ${(props) =>
288
+ props.alignItems == 'vertical'
289
+ ? 'none'
290
+ : props.isError
291
+ ? '1px solid ' + props.theme.colors.red
292
+ : props.noBorder
293
+ ? 'none'
294
+ : props.borderColor
295
+ ? props.theme.colors[props.borderColor]
296
+ ? '1px solid ' + props.theme.colors[props.borderColor]
297
+ : '1px solid ' + props.borderColor
298
+ : '1px solid ' + props.theme.colors.grey4};
299
+ border-radius: 4px 0 0 4px;
300
+ border-right: none;
301
+ `
303
302
 
304
- const LabelText = styled('div', inputProps)`
305
- font-size: 13px;
306
- color: ${(props) =>
307
- props.theme.colors[props.labelFontColor]
308
- ? props.theme.colors[props.labelFontColor]
309
- : props.labelFontColor};
310
- font-weight: 700;
311
- `
303
+ const LabelText = styled('div', inputProps)`
304
+ font-size: 13px;
305
+ color: ${(props) =>
306
+ props.theme.colors[props.labelFontColor]
307
+ ? props.theme.colors[props.labelFontColor]
308
+ : props.labelFontColor};
309
+ font-weight: 700;
310
+ `
312
311
 
313
- const IconAttrs = { size: String, marginRight: Number }
314
- const IconWrapper = styled('div', IconAttrs)`
315
- position: absolute;
316
- top: 0;
317
- bottom: 0;
318
- margin: auto;
319
- right: ${(props) => props.marginRight + 10}px;
320
- height: ${(props) => (props.size ? props.size : 'auto')};
321
- `
312
+ const IconAttrs = { size: String, marginRight: Number }
313
+ const IconWrapper = styled('div', IconAttrs)`
314
+ position: absolute;
315
+ top: 0;
316
+ bottom: 0;
317
+ margin: auto;
318
+ right: ${(props) => props.marginRight + 10}px;
319
+ height: ${(props) => (props.size ? props.size : 'auto')};
320
+ `
322
321
 
323
- const SelectText = styled.div`
324
- font-size: 13px;
325
- `
322
+ const SelectText = styled.div`
323
+ font-size: 13px;
324
+ `
326
325
 
327
- const SelectWrapper = styled.div`
328
- position: absolute;
329
- top: 2px;
330
- right: 2px;
331
- display: flex;
332
- height: 100%;
333
- `
326
+ const SelectWrapper = styled.div`
327
+ position: absolute;
328
+ top: 2px;
329
+ right: 2px;
330
+ display: flex;
331
+ height: 100%;
332
+ `
334
333
 
335
- const Divider = styled.div`
336
- margin-top: 6px;
337
- height: calc(100% - 16px);
338
- width: 1px;
339
- background-color: ${({ theme }) => theme.colors.grey4};
340
- `
334
+ const Divider = styled.div`
335
+ margin-top: 6px;
336
+ height: calc(100% - 16px);
337
+ width: 1px;
338
+ background-color: ${({ theme }) => theme.colors.grey4};
339
+ `
341
340
 
342
- export default {
343
- name: 'input-number',
344
- components: {
345
- Container,
346
- InputContainer,
347
- InputWrapper,
348
- UnitContainer,
349
- ErrorMessage,
350
- LabelWrapper,
351
- LabelSlotWrapper,
352
- LabelText,
353
- InfoText,
354
- Icon,
355
- SlotContainer,
356
- IconWrapper,
357
- Select,
358
- Option,
359
- SelectWrapper,
360
- SelectText,
361
- Divider
362
- },
363
- inheritAttrs: false,
364
- data() {
365
- return {
366
- textInput: '',
367
- isFocused: false,
368
- warningIcon: warningIcon
369
- }
370
- },
371
- props: {
372
- placeholder: {
373
- required: false,
374
- default: ''
375
- },
376
- isError: {
377
- required: false,
378
- default: false
379
- },
380
- inputWidth: {
381
- required: false,
382
- default: null
383
- },
384
- minWidth: {
385
- required: false,
386
- default: null
387
- },
388
- inputHeight: {
389
- required: false,
390
- default: '40px'
391
- },
392
- value: {
393
- required: true,
394
- default: null
395
- },
396
- clearInput: {
397
- required: false,
398
- default: false
399
- },
400
- alignItems: {
401
- required: false,
402
- default: 'vertical'
403
- },
404
- errorMessage: {
405
- required: false,
406
- default: 'Please insert a correct number'
407
- },
408
- numberPrecision: {
409
- required: false,
410
- default: 0
411
- },
412
- minDecimals: {
413
- required: false,
414
- default: 0
415
- },
416
- unitName: {
417
- required: false,
418
- default: ''
419
- },
420
- showLinearUnitName: {
421
- required: false,
422
- default: false
423
- },
424
- disabled: {
425
- required: false,
426
- default: false
427
- },
428
- noBorder: {
429
- required: false,
430
- default: false
431
- },
432
- borderColor: {
433
- required: false
434
- },
435
- textAlign: {
436
- required: false,
437
- default: 'left'
438
- },
439
- fontSize: {
440
- required: false,
441
- default: '13px'
442
- },
443
- isInteractive: {
444
- required: false,
445
- default: false
446
- },
447
- interactionStep: {
448
- required: false,
449
- default: 1
450
- },
451
- labelText: {
452
- required: false,
453
- default: null
454
- },
455
- labelInfoText: {
456
- required: false,
457
- default: null
458
- },
459
- labelInfoAlign: {
460
- required: false,
461
- default: 'left'
462
- },
463
- defaultNumber: {
464
- required: false,
465
- default: null
466
- },
467
- minNumber: {
468
- required: false,
469
- default: null
470
- },
471
- fontColor: {
472
- required: false,
473
- default: null
474
- },
475
- backgroundColor: {
476
- required: false,
477
- default: null
478
- },
479
- numberToStringEnabled: {
480
- required: false,
481
- default: true
482
- },
483
- allowNegative: {
484
- required: false,
485
- default: true
486
- },
487
- slotSize: {
488
- required: false
489
- },
490
- labelFontColor: {
491
- required: false,
492
- default: 'eturnityGrey'
493
- },
494
- focus: {
495
- required: false,
496
- default: false
497
- },
498
- labelDataId: {
499
- required: false,
500
- default: ''
501
- },
502
- inputDataId: {
503
- required: false,
504
- default: ''
505
- },
506
- showSelect: {
507
- type: Boolean,
508
- default: false
509
- },
510
- selectWidth: {
511
- type: Number,
512
- default: 70
513
- },
514
- selectOptions: {
515
- type: Array,
516
- default: () => []
517
- },
518
- selectValue: {
519
- type: [String, Number],
520
- default: null
521
- },
522
- isSelectDisabled: {
523
- type: Boolean,
524
- default: false
525
- }
526
- },
527
- computed: {
528
- displayedPlaceholder() {
529
- if (this.placeholder) return this.placeholder
530
- if (this.defaultNumber)
531
- return `${this.defaultNumber} ${this.unitName ? this.unitName : ''}`
532
- return `${this.minNumber || 0} ${this.unitName ? this.unitName : ''}`
533
- },
534
- hasSlot() {
535
- return !!this.$slots.default
536
- },
537
- hasLabelSlot() {
538
- return !!this.$slots.label
539
- },
540
- getSelectValue() {
541
- const item = this.selectOptions.find(
542
- ({ value }) => value === this.selectValue
543
- )
544
-
545
- return item ? item.label : '-'
546
- }
547
- },
548
- methods: {
549
- onEnterPress() {
550
- this.$emit('on-enter-click')
551
- this.$refs.inputField1.$el.blur()
552
- },
553
- onChangeHandler(event) {
554
- if (isNaN(event) || event === '') {
555
- event = this.defaultNumber
556
- ? this.defaultNumber
557
- : this.minNumber || this.minNumber === 0
558
- ? this.minNumber
559
- : event
341
+ export default {
342
+ name: 'InputNumber',
343
+ components: {
344
+ Container,
345
+ InputContainer,
346
+ InputWrapper,
347
+ UnitContainer,
348
+ ErrorMessage,
349
+ LabelWrapper,
350
+ LabelSlotWrapper,
351
+ LabelText,
352
+ InfoText,
353
+ Icon,
354
+ SlotContainer,
355
+ IconWrapper,
356
+ Select,
357
+ Option,
358
+ SelectWrapper,
359
+ SelectText,
360
+ Divider,
361
+ },
362
+ inheritAttrs: false,
363
+ props: {
364
+ placeholder: {
365
+ required: false,
366
+ default: '',
367
+ },
368
+ isError: {
369
+ required: false,
370
+ default: false,
371
+ },
372
+ inputWidth: {
373
+ required: false,
374
+ default: null,
375
+ },
376
+ minWidth: {
377
+ required: false,
378
+ default: null,
379
+ },
380
+ inputHeight: {
381
+ required: false,
382
+ default: '40px',
383
+ },
384
+ value: {
385
+ required: true,
386
+ default: null,
387
+ },
388
+ clearInput: {
389
+ required: false,
390
+ default: false,
391
+ },
392
+ alignItems: {
393
+ required: false,
394
+ default: 'vertical',
395
+ },
396
+ errorMessage: {
397
+ required: false,
398
+ default: 'Please insert a correct number',
399
+ },
400
+ numberPrecision: {
401
+ required: false,
402
+ default: 0,
403
+ },
404
+ minDecimals: {
405
+ required: false,
406
+ default: 0,
407
+ },
408
+ unitName: {
409
+ required: false,
410
+ default: '',
411
+ },
412
+ showLinearUnitName: {
413
+ required: false,
414
+ default: false,
415
+ },
416
+ disabled: {
417
+ required: false,
418
+ default: false,
419
+ },
420
+ noBorder: {
421
+ required: false,
422
+ default: false,
423
+ },
424
+ borderColor: {
425
+ required: false,
426
+ },
427
+ textAlign: {
428
+ required: false,
429
+ default: 'left',
430
+ },
431
+ fontSize: {
432
+ required: false,
433
+ default: '13px',
434
+ },
435
+ isInteractive: {
436
+ required: false,
437
+ default: false,
438
+ },
439
+ interactionStep: {
440
+ required: false,
441
+ default: 1,
442
+ },
443
+ labelText: {
444
+ required: false,
445
+ default: null,
446
+ },
447
+ labelInfoText: {
448
+ required: false,
449
+ default: null,
450
+ },
451
+ labelInfoAlign: {
452
+ required: false,
453
+ default: 'left',
454
+ },
455
+ defaultNumber: {
456
+ required: false,
457
+ default: null,
458
+ },
459
+ minNumber: {
460
+ required: false,
461
+ default: null,
462
+ },
463
+ fontColor: {
464
+ required: false,
465
+ default: null,
466
+ },
467
+ backgroundColor: {
468
+ required: false,
469
+ default: null,
470
+ },
471
+ numberToStringEnabled: {
472
+ required: false,
473
+ default: true,
474
+ },
475
+ allowNegative: {
476
+ required: false,
477
+ default: true,
478
+ },
479
+ slotSize: {
480
+ required: false,
481
+ },
482
+ labelFontColor: {
483
+ required: false,
484
+ default: 'eturnityGrey',
485
+ },
486
+ focus: {
487
+ required: false,
488
+ default: false,
489
+ },
490
+ labelDataId: {
491
+ required: false,
492
+ default: '',
493
+ },
494
+ inputDataId: {
495
+ required: false,
496
+ default: '',
497
+ },
498
+ showSelect: {
499
+ type: Boolean,
500
+ default: false,
501
+ },
502
+ selectWidth: {
503
+ type: Number,
504
+ default: 70,
505
+ },
506
+ selectOptions: {
507
+ type: Array,
508
+ default: () => [],
509
+ },
510
+ selectValue: {
511
+ type: [String, Number],
512
+ default: null,
513
+ },
514
+ },
515
+ data() {
516
+ return {
517
+ textInput: '',
518
+ isFocused: false,
519
+ warningIcon: warningIcon,
560
520
  }
561
- if (!this.allowNegative) {
562
- event = Math.abs(event)
563
- }
564
- event = parseFloat(event)
565
- // Need to return an integer rather than a string
566
- this.$emit('input-change', event)
567
521
  },
568
- onEvaluateCode(event) {
569
- // function to perform math on the code
570
- // filter the string in case of any malicious content
571
- const val = event.target.value
572
- let filtered = val.replace('(auto)', '').replace(/[^-()\d/*+.,]/g, '')
573
- filtered = filtered.split(/([-+*/()])/)
574
- let formatted = filtered.map((item) => {
575
- if (
576
- item === '+' ||
577
- item === '-' ||
578
- item === '*' ||
579
- item === '/' ||
580
- item === '(' ||
581
- item === ')' ||
582
- item === ''
583
- ) {
584
- return item
585
- } else {
586
- let num = stringToNumber({
587
- value: item,
588
- numberPrecision: false,
589
- minDecimals: this.minDecimals
590
- })
591
- return num
592
- }
593
- })
594
- let evaluated
595
- formatted = this.removeStringItemsAfterLastNumber(formatted)
596
- evaluated = eval(formatted.join(' '))
597
- if (typeof evaluated === 'string') {
598
- evaluated = stringToNumber({
599
- value: evaluated,
600
- numberPrecision: this.numberPrecision,
601
- minDecimals: this.minDecimals
602
- })
603
- } else if (typeof evaluated === 'number') {
604
- evaluated = evaluated.toFixed(this.numberPrecision)
605
- }
606
- return evaluated
522
+ computed: {
523
+ displayedPlaceholder() {
524
+ if (this.placeholder) return this.placeholder
525
+ if (this.defaultNumber)
526
+ return `${this.defaultNumber} ${this.unitName ? this.unitName : ''}`
527
+ return `${this.minNumber || 0} ${this.unitName ? this.unitName : ''}`
528
+ },
529
+ hasSlot() {
530
+ return !!this.$slots.default
531
+ },
532
+ hasLabelSlot() {
533
+ return !!this.$slots.label
534
+ },
535
+ getSelectValue() {
536
+ const item = this.selectOptions.find(
537
+ ({ value }) => value === this.selectValue
538
+ )
539
+
540
+ return item ? item.label : '-'
541
+ },
607
542
  },
608
- removeStringItemsAfterLastNumber(array) {
609
- // fixed in EPDM-6487, in order to prevent 'Unexpected end of input'
610
- let lastNumberIndex = -1
611
- // Find the index of the last number in the array
612
- for (let i = array.length - 1; i >= 0; i--) {
613
- if (typeof array[i] === 'number') {
614
- lastNumberIndex = i
615
- break
543
+ watch: {
544
+ focus(value) {
545
+ if (value) {
546
+ this.focusInput()
616
547
  }
617
- }
618
- // if there are no numbers, return an empty array
619
- if (lastNumberIndex === -1) {
620
- return []
621
- }
622
- // Remove non-numeric items after the last number
623
- if (lastNumberIndex !== -1) {
624
- const newArray = array.slice(0, lastNumberIndex + 1)
625
- return newArray
626
- }
627
- return array
628
- },
629
- onInput(event) {
630
- if (!this.isFocused) {
631
- return
632
- }
633
- if (event.target.value === '') {
634
- this.$emit('on-input', '')
635
- }
636
- let evaluatedVal
637
- try {
638
- evaluatedVal = this.onEvaluateCode(event)
639
- } finally {
640
- if (evaluatedVal && this.value != evaluatedVal) {
641
- this.$emit('on-input', evaluatedVal)
548
+ },
549
+ clearInput: function (value) {
550
+ if (value) {
551
+ // If the value is typed, then we should clear the textInput on Continue
552
+ this.textInput = ''
642
553
  }
643
- }
554
+ },
644
555
  },
645
- onInputBlur(e) {
646
- this.isFocused = false
647
- let value = e.target.value
648
- let evaluatedInput = this.onEvaluateCode(e)
649
- this.onChangeHandler(evaluatedInput ? evaluatedInput : value)
650
- if ((evaluatedInput && value.length) || this.minNumber !== null) {
556
+ created() {
557
+ if (this.value) {
651
558
  this.textInput = numberToString({
652
- value:
653
- evaluatedInput && value.length
654
- ? evaluatedInput
655
- : this.defaultNumber
656
- ? this.defaultNumber
657
- : this.minNumber,
559
+ value: this.value,
658
560
  numberPrecision: this.numberPrecision,
659
- minDecimals: this.minDecimals
561
+ minDecimals: this.minDecimals,
562
+ })
563
+ } else if (this.defaultNumber !== null) {
564
+ this.textInput = numberToString({
565
+ value: this.defaultNumber,
566
+ numberPrecision: this.numberPrecision,
567
+ minDecimals: this.minDecimals,
568
+ })
569
+ } else if (this.minNumber !== null) {
570
+ this.textInput = numberToString({
571
+ value: this.minNumber,
572
+ numberPrecision: this.numberPrecision,
573
+ minDecimals: this.minDecimals,
660
574
  })
661
575
  }
662
- let adjustedMinValue =
663
- evaluatedInput && evaluatedInput.length
664
- ? evaluatedInput
665
- : this.defaultNumber
666
- ? this.defaultNumber
667
- : this.minNumber || this.minNumber === 0
668
- ? this.minNumber
669
- : ''
670
- this.$emit('input-blur', adjustedMinValue)
671
576
  },
672
- focusInput() {
673
- if (this.disabled) {
674
- return
577
+ mounted() {
578
+ if (this.focus) {
579
+ this.focusInput()
675
580
  }
676
- this.isFocused = true
677
- this.$nextTick(() => {
678
- this.$refs.inputField1.$el.select()
679
- })
680
- this.$emit('input-focus')
681
581
  },
682
- blurInput() {
683
- if (this.disabled) {
684
- return
685
- }
686
- this.isFocused = false
687
- this.$nextTick(() => {
582
+ methods: {
583
+ onEnterPress() {
584
+ this.$emit('on-enter-click')
688
585
  this.$refs.inputField1.$el.blur()
689
- })
690
- },
691
- formatWithCurrency(value) {
692
- let adjustedMinValue =
693
- value || value === 0
694
- ? value
695
- : this.defaultNumber
696
- ? this.defaultNumber
697
- : this.minNumber || this.minNumber === 0
698
- ? this.minNumber
699
- : ''
700
- if ((adjustedMinValue || adjustedMinValue === 0) && !this.isFocused) {
701
- let input = this.numberToStringEnabled
702
- ? numberToString({
703
- value: adjustedMinValue,
704
- numberPrecision: this.numberPrecision,
705
- minDecimals: this.minDecimals
706
- })
707
- : adjustedMinValue
708
- let unit = this.showLinearUnitName ? '' : this.unitName
709
- //return input + ' ' + unit
710
- return input + ' ' + unit
711
- } else if (!adjustedMinValue && adjustedMinValue !== 0) {
712
- return ''
713
- } else {
714
- return this.numberToStringEnabled
715
- ? numberToString({
716
- value: adjustedMinValue,
717
- numberPrecision: this.numberPrecision,
718
- minDecimals: this.minDecimals
586
+ },
587
+ onChangeHandler(event) {
588
+ if (isNaN(event) || event === '') {
589
+ event = this.defaultNumber
590
+ ? this.defaultNumber
591
+ : this.minNumber || this.minNumber === 0
592
+ ? this.minNumber
593
+ : event
594
+ }
595
+ if (!this.allowNegative) {
596
+ event = Math.abs(event)
597
+ }
598
+ event = parseFloat(event)
599
+ // Need to return an integer rather than a string
600
+ this.$emit('input-change', event)
601
+ },
602
+ onEvaluateCode(event) {
603
+ // function to perform math on the code
604
+ // filter the string in case of any malicious content
605
+ const val = event.target.value
606
+ let filtered = val.replace('(auto)', '').replace(/[^-()\d/*+.,]/g, '')
607
+ filtered = filtered.split(/([-+*/()])/)
608
+ let formatted = filtered.map((item) => {
609
+ if (
610
+ item === '+' ||
611
+ item === '-' ||
612
+ item === '*' ||
613
+ item === '/' ||
614
+ item === '(' ||
615
+ item === ')' ||
616
+ item === ''
617
+ ) {
618
+ return item
619
+ } else {
620
+ let num = stringToNumber({
621
+ value: item,
622
+ numberPrecision: false,
623
+ minDecimals: this.minDecimals,
719
624
  })
720
- : adjustedMinValue
721
- }
722
- },
723
- initInteraction(e) {
724
- this.focusInput()
725
- e.preventDefault()
726
- window.addEventListener('mousemove', this.interact, false)
727
- window.addEventListener('mouseup', this.stopInteract, false)
728
- },
729
- interact(e) {
730
- e.preventDefault()
731
- let value = parseFloat(this.value || 0)
732
- value += parseFloat(this.interactionStep) * parseInt(e.movementX)
733
- this.$emit('on-input-drag', value)
734
-
735
- this.textInput = numberToString({
736
- value: value && value.length ? value : this.minNumber,
737
- numberPrecision: this.numberPrecision,
738
- minDecimals: this.minDecimals
739
- })
740
- //this.value=value
741
- },
742
- stopInteract(e) {
743
- e.preventDefault()
744
- window.removeEventListener('mousemove', this.interact, false)
745
- window.removeEventListener('mouseup', this.stopInteract, false)
746
- this.blurInput()
747
- }
748
- },
749
- created() {
750
- if (this.value) {
751
- this.textInput = numberToString({
752
- value: this.value,
753
- numberPrecision: this.numberPrecision,
754
- minDecimals: this.minDecimals
755
- })
756
- } else if (this.defaultNumber !== null) {
757
- this.textInput = numberToString({
758
- value: this.defaultNumber,
759
- numberPrecision: this.numberPrecision,
760
- minDecimals: this.minDecimals
761
- })
762
- } else if (this.minNumber !== null) {
763
- this.textInput = numberToString({
764
- value: this.minNumber,
765
- numberPrecision: this.numberPrecision,
766
- minDecimals: this.minDecimals
767
- })
768
- }
769
- },
770
- mounted() {
771
- if (this.focus) {
772
- this.focusInput()
773
- }
774
- },
775
- watch: {
776
- focus(value) {
777
- if (value) {
625
+ return num
626
+ }
627
+ })
628
+ let evaluated
629
+ formatted = this.removeStringItemsAfterLastNumber(formatted)
630
+ evaluated = eval(formatted.join(' '))
631
+ if (typeof evaluated === 'string') {
632
+ evaluated = stringToNumber({
633
+ value: evaluated,
634
+ numberPrecision: this.numberPrecision,
635
+ minDecimals: this.minDecimals,
636
+ })
637
+ } else if (typeof evaluated === 'number') {
638
+ evaluated = evaluated.toFixed(this.numberPrecision)
639
+ }
640
+ return evaluated
641
+ },
642
+ removeStringItemsAfterLastNumber(array) {
643
+ // fixed in EPDM-6487, in order to prevent 'Unexpected end of input'
644
+ let lastNumberIndex = -1
645
+ // Find the index of the last number in the array
646
+ for (let i = array.length - 1; i >= 0; i--) {
647
+ if (typeof array[i] === 'number') {
648
+ lastNumberIndex = i
649
+ break
650
+ }
651
+ }
652
+ // if there are no numbers, return an empty array
653
+ if (lastNumberIndex === -1) {
654
+ return []
655
+ }
656
+ // Remove non-numeric items after the last number
657
+ if (lastNumberIndex !== -1) {
658
+ const newArray = array.slice(0, lastNumberIndex + 1)
659
+ return newArray
660
+ }
661
+ return array
662
+ },
663
+ onInput(event) {
664
+ if (!this.isFocused) {
665
+ return
666
+ }
667
+ if (event.target.value === '') {
668
+ this.$emit('on-input', '')
669
+ }
670
+ let evaluatedVal
671
+ try {
672
+ evaluatedVal = this.onEvaluateCode(event)
673
+ } finally {
674
+ if (evaluatedVal && this.value != evaluatedVal) {
675
+ this.$emit('on-input', evaluatedVal)
676
+ }
677
+ }
678
+ },
679
+ onInputBlur(e) {
680
+ this.isFocused = false
681
+ let value = e.target.value
682
+ let evaluatedInput = this.onEvaluateCode(e)
683
+ this.onChangeHandler(evaluatedInput ? evaluatedInput : value)
684
+ if ((evaluatedInput && value.length) || this.minNumber !== null) {
685
+ this.textInput = numberToString({
686
+ value:
687
+ evaluatedInput && value.length
688
+ ? evaluatedInput
689
+ : this.defaultNumber
690
+ ? this.defaultNumber
691
+ : this.minNumber,
692
+ numberPrecision: this.numberPrecision,
693
+ minDecimals: this.minDecimals,
694
+ })
695
+ }
696
+ let adjustedMinValue =
697
+ evaluatedInput && evaluatedInput.length
698
+ ? evaluatedInput
699
+ : this.defaultNumber
700
+ ? this.defaultNumber
701
+ : this.minNumber || this.minNumber === 0
702
+ ? this.minNumber
703
+ : ''
704
+ this.$emit('input-blur', adjustedMinValue)
705
+ },
706
+ focusInput() {
707
+ if (this.disabled) {
708
+ return
709
+ }
710
+ this.isFocused = true
711
+ this.$nextTick(() => {
712
+ this.$refs.inputField1.$el.select()
713
+ })
714
+ this.$emit('input-focus')
715
+ },
716
+ blurInput() {
717
+ if (this.disabled) {
718
+ return
719
+ }
720
+ this.isFocused = false
721
+ this.$nextTick(() => {
722
+ this.$refs.inputField1.$el.blur()
723
+ })
724
+ },
725
+ formatWithCurrency(value) {
726
+ let adjustedMinValue =
727
+ value || value === 0
728
+ ? value
729
+ : this.defaultNumber
730
+ ? this.defaultNumber
731
+ : this.minNumber || this.minNumber === 0
732
+ ? this.minNumber
733
+ : ''
734
+ if ((adjustedMinValue || adjustedMinValue === 0) && !this.isFocused) {
735
+ let input = this.numberToStringEnabled
736
+ ? numberToString({
737
+ value: adjustedMinValue,
738
+ numberPrecision: this.numberPrecision,
739
+ minDecimals: this.minDecimals,
740
+ })
741
+ : adjustedMinValue
742
+ let unit = this.showLinearUnitName ? '' : this.unitName
743
+ //return input + ' ' + unit
744
+ return input + ' ' + unit
745
+ } else if (!adjustedMinValue && adjustedMinValue !== 0) {
746
+ return ''
747
+ } else {
748
+ return this.numberToStringEnabled
749
+ ? numberToString({
750
+ value: adjustedMinValue,
751
+ numberPrecision: this.numberPrecision,
752
+ minDecimals: this.minDecimals,
753
+ })
754
+ : adjustedMinValue
755
+ }
756
+ },
757
+ initInteraction(e) {
778
758
  this.focusInput()
779
- }
759
+ e.preventDefault()
760
+ window.addEventListener('mousemove', this.interact, false)
761
+ window.addEventListener('mouseup', this.stopInteract, false)
762
+ },
763
+ interact(e) {
764
+ e.preventDefault()
765
+ let value = parseFloat(this.value || 0)
766
+ value += parseFloat(this.interactionStep) * parseInt(e.movementX)
767
+ this.$emit('on-input-drag', value)
768
+
769
+ this.textInput = numberToString({
770
+ value: value && value.length ? value : this.minNumber,
771
+ numberPrecision: this.numberPrecision,
772
+ minDecimals: this.minDecimals,
773
+ })
774
+ //this.value=value
775
+ },
776
+ stopInteract(e) {
777
+ e.preventDefault()
778
+ window.removeEventListener('mousemove', this.interact, false)
779
+ window.removeEventListener('mouseup', this.stopInteract, false)
780
+ this.blurInput()
781
+ },
780
782
  },
781
- clearInput: function (value) {
782
- if (value) {
783
- // If the value is typed, then we should clear the textInput on Continue
784
- this.textInput = ''
785
- }
786
- }
787
783
  }
788
- }
789
784
  </script>