@eturnity/eturnity_reusable_components 1.2.26-EPDM-2942.1 → 1.2.26-EPDM-3412.5
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/babel.config.js +1 -1
- package/package.json +1 -1
- package/src/App.vue +56 -96
- package/src/assets/icons/error_icon copy.png +0 -0
- package/src/assets/theme.js +3 -1
- package/src/components/deleteIcon/index.vue +2 -8
- package/src/components/errorMessage/index.vue +62 -0
- package/src/components/infoText/index.vue +84 -54
- package/src/components/inputs/inputNumber/index.vue +130 -25
- package/src/components/inputs/inputText/index.vue +49 -38
- package/src/components/inputs/radioButton/index.vue +1 -1
- package/src/components/inputs/searchInput/index.vue +16 -15
- package/src/components/inputs/textAreaInput/index.vue +8 -8
- package/src/components/inputs/toggle/index.vue +2 -2
- package/src/components/pageSubtitle/index.vue +1 -1
- package/src/helpers/numberConverter.js +4 -0
package/babel.config.js
CHANGED
package/package.json
CHANGED
package/src/App.vue
CHANGED
|
@@ -2,80 +2,61 @@
|
|
|
2
2
|
<ThemeProvider :theme="getTheme()" :style="{ height: '100%' }">
|
|
3
3
|
<page-container>
|
|
4
4
|
<br />
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
<project-marker
|
|
37
|
-
:activeLanguage="'en-us'"
|
|
38
|
-
:markerData="item"
|
|
39
|
-
:isLimitedPartner="false"
|
|
40
|
-
:isGroupSupport="false"
|
|
41
|
-
:isEditable="true"
|
|
42
|
-
:gettext="gettext"
|
|
43
|
-
:date="'23.07.2022'"
|
|
44
|
-
@editHandler="consoleLog('edit index ' + index)"
|
|
45
|
-
@deleteHandler="consoleLog('delete id ' + item.id)"
|
|
46
|
-
/>
|
|
47
|
-
</div>
|
|
48
|
-
</row-container>
|
|
49
|
-
<br />
|
|
50
|
-
<iconCollection />
|
|
5
|
+
<input-number
|
|
6
|
+
:value="inputValue"
|
|
7
|
+
@input-change="inputValue = $event"
|
|
8
|
+
inputWidth="250px"
|
|
9
|
+
slotSize="50%"
|
|
10
|
+
><InputAnnexContainer>
|
|
11
|
+
<span>123m2</span>
|
|
12
|
+
<info-text
|
|
13
|
+
size="10px"
|
|
14
|
+
alignArrow="right"
|
|
15
|
+
text="infoText ceci est le text"
|
|
16
|
+
></info-text>
|
|
17
|
+
</InputAnnexContainer>
|
|
18
|
+
</input-number>
|
|
19
|
+
<input-number
|
|
20
|
+
:value="inputValue"
|
|
21
|
+
@input-change="inputValue = $event"
|
|
22
|
+
inputWidth="250px"
|
|
23
|
+
slotSize="50%"
|
|
24
|
+
:isError="true"
|
|
25
|
+
><InputAnnexContainer>
|
|
26
|
+
<span>123m2</span>
|
|
27
|
+
<info-text
|
|
28
|
+
:style="{ 'justify-self': 'end' }"
|
|
29
|
+
size="12px"
|
|
30
|
+
alignArrow="center"
|
|
31
|
+
text="infoText ceci est le text"
|
|
32
|
+
>This is the tooltip text</info-text
|
|
33
|
+
>
|
|
34
|
+
</InputAnnexContainer>
|
|
35
|
+
</input-number>
|
|
51
36
|
<br />
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
:isChecked="inputValue"
|
|
55
|
-
label="My Label Text"
|
|
56
|
-
infoTextMessage="This is my test message"
|
|
57
|
-
infoTextAlign="right"
|
|
58
|
-
labelAlign="right"
|
|
59
|
-
:disabled="false"
|
|
60
|
-
/>
|
|
61
|
-
<br /> -->
|
|
62
|
-
<iconCollection />
|
|
37
|
+
|
|
38
|
+
<p>InputText</p>
|
|
63
39
|
<input-text
|
|
64
|
-
placeholder="
|
|
40
|
+
placeholder="Company name"
|
|
65
41
|
:value="inputValue"
|
|
66
|
-
|
|
67
|
-
|
|
42
|
+
:isError="true"
|
|
43
|
+
errorMessage="This is my error message"
|
|
44
|
+
infoTextAlign="right"
|
|
45
|
+
infoTextMessage="My info message"
|
|
46
|
+
label="Question 5"
|
|
47
|
+
alignItems="vertical"
|
|
48
|
+
inputWidth="250px"
|
|
49
|
+
minWidth="100px"
|
|
68
50
|
/>
|
|
69
51
|
<br />
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
/>
|
|
78
|
-
<!-- <external-button text="Click me!" minWidth="500px" /> -->
|
|
52
|
+
<input-number
|
|
53
|
+
:value="num"
|
|
54
|
+
@input-change="num = $event"
|
|
55
|
+
unitName="t"
|
|
56
|
+
id="biebie"
|
|
57
|
+
test="koko"
|
|
58
|
+
@keydown="keydownHandler"
|
|
59
|
+
/>
|
|
79
60
|
</page-container>
|
|
80
61
|
</ThemeProvider>
|
|
81
62
|
</template>
|
|
@@ -84,17 +65,8 @@
|
|
|
84
65
|
import { ThemeProvider } from 'vue-styled-components'
|
|
85
66
|
import theme from './assets/theme'
|
|
86
67
|
import styled from 'vue-styled-components'
|
|
87
|
-
|
|
88
|
-
// import ThreeDots from '@/components/threeDots'
|
|
89
|
-
// import Toggle from '@/components/inputs/toggle'
|
|
68
|
+
import InputNumber from '@/components/inputs/inputNumber'
|
|
90
69
|
import InputText from '@/components/inputs/inputText'
|
|
91
|
-
// import Checkbox from '@/components/inputs/checkbox'
|
|
92
|
-
// import PageSubtitle from '@/components/pageSubtitle'
|
|
93
|
-
// import Spinner from '@/components/spinner'
|
|
94
|
-
// import ExternalButton from '@/components/buttons/externalButton'
|
|
95
|
-
// import ProjectMarker from '@/components/projectMarker'
|
|
96
|
-
import iconCollection from '@/components/icon/iconCollection'
|
|
97
|
-
// import Modal from '@/components/modals/modal'
|
|
98
70
|
// import TableDropdown from "@/components/tableDropdown"
|
|
99
71
|
|
|
100
72
|
const PageContainer = styled.div`
|
|
@@ -112,21 +84,12 @@ export default {
|
|
|
112
84
|
components: {
|
|
113
85
|
ThemeProvider,
|
|
114
86
|
PageContainer,
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
// Toggle,
|
|
118
|
-
InputText,
|
|
119
|
-
// PageSubtitle,
|
|
120
|
-
// Spinner,
|
|
121
|
-
// Checkbox,
|
|
122
|
-
// ExternalButton,
|
|
123
|
-
// Modal,
|
|
124
|
-
// ProjectMarker,
|
|
125
|
-
iconCollection
|
|
126
|
-
// RowContainer
|
|
87
|
+
InputNumber,
|
|
88
|
+
InputText
|
|
127
89
|
},
|
|
128
90
|
data() {
|
|
129
91
|
return {
|
|
92
|
+
num: 42,
|
|
130
93
|
inputValue: null,
|
|
131
94
|
checkedOption: 'button_1',
|
|
132
95
|
question: {
|
|
@@ -252,11 +215,8 @@ export default {
|
|
|
252
215
|
}
|
|
253
216
|
},
|
|
254
217
|
methods: {
|
|
255
|
-
|
|
256
|
-
console.log(
|
|
257
|
-
},
|
|
258
|
-
gettext(string) {
|
|
259
|
-
return string.toUpperCase()
|
|
218
|
+
keydownHandler(e) {
|
|
219
|
+
console.log('test', e)
|
|
260
220
|
},
|
|
261
221
|
getTheme() {
|
|
262
222
|
return theme
|
|
Binary file
|
package/src/assets/theme.js
CHANGED
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
>
|
|
7
7
|
<icon-image
|
|
8
8
|
v-if="isHovered && !isDisabled"
|
|
9
|
-
:hoverBg="hoverBg"
|
|
10
9
|
:src="require('../../assets/icons/delete_icon.svg')"
|
|
11
10
|
/>
|
|
12
11
|
<icon-image
|
|
@@ -28,10 +27,9 @@ const Wrapper = styled("div", wrapperAttrs)`
|
|
|
28
27
|
cursor: ${(props) => (props.isDisabled ? "not-allowed" : "pointer")};
|
|
29
28
|
`
|
|
30
29
|
|
|
31
|
-
const
|
|
32
|
-
const IconImage = styled('img', IconImageAttrs)`
|
|
30
|
+
const IconImage = styled.img`
|
|
33
31
|
&:hover {
|
|
34
|
-
background-color: ${(props) => props.
|
|
32
|
+
background-color: ${(props) => props.theme.colors.grey5};
|
|
35
33
|
border-radius: 4px;
|
|
36
34
|
}
|
|
37
35
|
`
|
|
@@ -47,10 +45,6 @@ export default {
|
|
|
47
45
|
required: false,
|
|
48
46
|
default: false,
|
|
49
47
|
},
|
|
50
|
-
hoverBg: {
|
|
51
|
-
required: false,
|
|
52
|
-
default: '',
|
|
53
|
-
}
|
|
54
48
|
},
|
|
55
49
|
data() {
|
|
56
50
|
return {
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<component-wrapper>
|
|
3
|
+
<text-overlay>
|
|
4
|
+
<slot></slot>
|
|
5
|
+
</text-overlay>
|
|
6
|
+
</component-wrapper>
|
|
7
|
+
</template>
|
|
8
|
+
|
|
9
|
+
<script>
|
|
10
|
+
// import ErrorMessage from "@eturnity/eturnity_reusable_components/src/components/errorMessage"
|
|
11
|
+
//To use:
|
|
12
|
+
// <error-message
|
|
13
|
+
// alignText="right" // default is left
|
|
14
|
+
// />
|
|
15
|
+
|
|
16
|
+
import styled from 'vue-styled-components'
|
|
17
|
+
|
|
18
|
+
const TextOverlay = styled.div`
|
|
19
|
+
position: absolute;
|
|
20
|
+
top: calc(100% + 13px);
|
|
21
|
+
background: ${(props) => props.theme.colors.red};
|
|
22
|
+
padding: 10px;
|
|
23
|
+
width: max-content;
|
|
24
|
+
max-width: 100%;
|
|
25
|
+
min-width: min-content;
|
|
26
|
+
font-size: 11px;
|
|
27
|
+
font-weight: 400;
|
|
28
|
+
border-radius: 4px;
|
|
29
|
+
font-family: 'Lato-Bold', Arial;
|
|
30
|
+
z-index: 999;
|
|
31
|
+
color: ${(props) => props.theme.colors.white};
|
|
32
|
+
|
|
33
|
+
:before {
|
|
34
|
+
content: '';
|
|
35
|
+
background-color: ${(props) => props.theme.colors.red};
|
|
36
|
+
position: absolute;
|
|
37
|
+
top: 2px;
|
|
38
|
+
left: 40px;
|
|
39
|
+
height: 11px;
|
|
40
|
+
width: 11px;
|
|
41
|
+
transform-origin: center center;
|
|
42
|
+
transform: translate(-2em, -0.5em) rotate(45deg);
|
|
43
|
+
}
|
|
44
|
+
`
|
|
45
|
+
|
|
46
|
+
const ComponentWrapper = styled.div`
|
|
47
|
+
display: block;
|
|
48
|
+
`
|
|
49
|
+
|
|
50
|
+
export default {
|
|
51
|
+
name: 'info-text',
|
|
52
|
+
components: {
|
|
53
|
+
TextOverlay,
|
|
54
|
+
ComponentWrapper
|
|
55
|
+
},
|
|
56
|
+
props: {},
|
|
57
|
+
methods: {},
|
|
58
|
+
data() {
|
|
59
|
+
return {}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
</script>
|
|
@@ -1,35 +1,26 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<component-wrapper>
|
|
3
|
-
<icon-wrapper>
|
|
3
|
+
<icon-wrapper :size="size">
|
|
4
4
|
<icon-img
|
|
5
5
|
:isActive="showInfo"
|
|
6
6
|
:size="size"
|
|
7
7
|
:borderColor="borderColor"
|
|
8
8
|
@click.prevent="toggleShowInfo()"
|
|
9
|
-
@mouseenter="toggleShowInfo()"
|
|
10
|
-
@mouseleave="toggleShowInfo()"
|
|
9
|
+
@mouseenter="openTrigger == 'onHover' ? toggleShowInfo() : ''"
|
|
10
|
+
@mouseleave="openTrigger == 'onHover' ? toggleShowInfo() : ''"
|
|
11
11
|
>
|
|
12
|
-
<
|
|
13
|
-
class="img-icon"
|
|
14
|
-
:width="size"
|
|
15
|
-
:height="size"
|
|
16
|
-
viewBox="0 0 24 24"
|
|
17
|
-
fill="none"
|
|
18
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
19
|
-
>
|
|
20
|
-
<path
|
|
21
|
-
class="img-icon"
|
|
22
|
-
d="M20.4853 3.51469C18.2188 1.24823 15.2053 0 12 0C8.79469 0 5.78123 1.24823 3.51469 3.51469C1.24823 5.78123 0 8.79469 0 12C0 15.2053 1.24823 18.2188 3.51469 20.4853C5.78123 22.7518 8.79469 24 12 24C15.2053 24 18.2188 22.7518 20.4853 20.4853C22.7518 18.2188 24 15.2053 24 12C24 8.79469 22.7518 5.78123 20.4853 3.51469ZM12 3.28125C13.4216 3.28125 14.5781 4.4378 14.5781 5.85938C14.5781 7.28095 13.4216 8.4375 12 8.4375C10.5784 8.4375 9.42188 7.28095 9.42188 5.85938C9.42188 4.4378 10.5784 3.28125 12 3.28125ZM15.2812 19.6875H8.71875V18.2812H10.125V11.9167H8.71875V10.5104H13.875V18.2812H15.2812V19.6875Z"
|
|
23
|
-
fill="#D5D5D5"
|
|
24
|
-
/>
|
|
25
|
-
</svg>
|
|
12
|
+
<icon :size="size" name="info" :color="iconColor" />
|
|
26
13
|
</icon-img>
|
|
27
14
|
<text-overlay
|
|
28
15
|
v-if="showInfo"
|
|
29
16
|
:borderColor="borderColor"
|
|
30
17
|
:alignText="alignText"
|
|
31
|
-
|
|
32
|
-
|
|
18
|
+
:width="width"
|
|
19
|
+
:halfComputedTextInfoWidth="halfComputedTextInfoWidth"
|
|
20
|
+
:alignArrow="alignArrow"
|
|
21
|
+
:iconSize="size"
|
|
22
|
+
><slot />
|
|
23
|
+
<span v-html="text"></span>
|
|
33
24
|
</text-overlay>
|
|
34
25
|
</icon-wrapper>
|
|
35
26
|
</component-wrapper>
|
|
@@ -44,22 +35,31 @@
|
|
|
44
35
|
// size="20"
|
|
45
36
|
// alignText="right" // default is left
|
|
46
37
|
// />
|
|
38
|
+
import theme from '../../assets/theme.js'
|
|
39
|
+
import styled from 'vue-styled-components'
|
|
40
|
+
import icon from '../icon'
|
|
47
41
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
42
|
+
const textAttrs = {
|
|
43
|
+
iconSize: String,
|
|
44
|
+
borderColor: String,
|
|
45
|
+
alignArrow: String,
|
|
46
|
+
alignText: String,
|
|
47
|
+
width: String,
|
|
48
|
+
halfComputedTextInfoWidth: Number
|
|
49
|
+
}
|
|
50
|
+
const TextOverlay = styled('div', textAttrs)`
|
|
56
51
|
position: absolute;
|
|
57
|
-
top:
|
|
58
|
-
|
|
59
|
-
|
|
52
|
+
top: ${(props) => 'calc(' + props.iconSize + ' + 15px)'};
|
|
53
|
+
${(props) =>
|
|
54
|
+
props.alignArrow === 'left'
|
|
55
|
+
? 'left: calc(' + props.iconSize + ' /2 - 18px)'
|
|
56
|
+
: props.alignArrow === 'center'
|
|
57
|
+
? 'left: calc((-' + props.width + ' + ' + props.iconSize + ') /2 + 2px)'
|
|
58
|
+
: 'right: calc(' + props.iconSize + ' /2 - 17px)'};
|
|
59
|
+
text-align: ${(props) => props.alignText};
|
|
60
60
|
background: ${(props) => props.theme.colors.black};
|
|
61
61
|
padding: 10px;
|
|
62
|
-
width:
|
|
62
|
+
width: ${(props) => props.width};
|
|
63
63
|
max-width: 400px;
|
|
64
64
|
font-size: 13px;
|
|
65
65
|
font-weight: 400;
|
|
@@ -68,32 +68,37 @@ const TextOverlay = styled("div", textAttrs)`
|
|
|
68
68
|
color: ${(props) => props.theme.colors.white};
|
|
69
69
|
|
|
70
70
|
:before {
|
|
71
|
-
content:
|
|
71
|
+
content: '';
|
|
72
72
|
background-color: ${(props) => props.theme.colors.black};
|
|
73
73
|
position: absolute;
|
|
74
74
|
top: 2px;
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
${(props) =>
|
|
76
|
+
props.alignArrow === 'left'
|
|
77
|
+
? 'left:40px;'
|
|
78
|
+
: props.alignArrow == 'center'
|
|
79
|
+
? 'left: calc(50% + 19px);'
|
|
80
|
+
: 'right:-13px;'};
|
|
77
81
|
height: 8px;
|
|
78
82
|
width: 8px;
|
|
79
83
|
transform-origin: center center;
|
|
80
84
|
transform: translate(-2em, -0.5em) rotate(45deg);
|
|
81
85
|
}
|
|
86
|
+
|
|
87
|
+
span a {
|
|
88
|
+
color: #2cc0eb;
|
|
89
|
+
}
|
|
82
90
|
`
|
|
83
91
|
|
|
84
92
|
const iconAttrs = { isActive: Boolean, size: String, borderColor: String }
|
|
85
|
-
const IconImg = styled("div", iconAttrs)`
|
|
86
|
-
cursor: pointer;
|
|
87
|
-
height: ${(props) => props.size + "px"};
|
|
88
93
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
94
|
+
const IconWrapper = styled('div', iconAttrs)`
|
|
95
|
+
position: relative;
|
|
96
|
+
top: 1px;
|
|
97
|
+
height: ${(props) => props.size};
|
|
98
|
+
`
|
|
99
|
+
const IconImg = styled('div', iconAttrs)`
|
|
100
|
+
cursor: pointer;
|
|
101
|
+
height: ${(props) => props.size};
|
|
97
102
|
`
|
|
98
103
|
|
|
99
104
|
const ComponentWrapper = styled.div`
|
|
@@ -101,38 +106,51 @@ const ComponentWrapper = styled.div`
|
|
|
101
106
|
`
|
|
102
107
|
|
|
103
108
|
export default {
|
|
104
|
-
name:
|
|
109
|
+
name: 'info-text',
|
|
105
110
|
components: {
|
|
106
111
|
IconWrapper,
|
|
107
112
|
TextOverlay,
|
|
108
113
|
ComponentWrapper,
|
|
109
114
|
IconImg,
|
|
115
|
+
icon
|
|
110
116
|
},
|
|
111
117
|
props: {
|
|
112
118
|
text: {
|
|
113
|
-
required:
|
|
119
|
+
required: false
|
|
114
120
|
},
|
|
115
121
|
borderColor: {
|
|
116
122
|
required: false,
|
|
117
|
-
default: null
|
|
123
|
+
default: null
|
|
118
124
|
},
|
|
119
125
|
size: {
|
|
120
126
|
required: false,
|
|
121
|
-
default:
|
|
127
|
+
default: '14px'
|
|
122
128
|
},
|
|
123
129
|
alignText: {
|
|
124
130
|
required: false,
|
|
125
|
-
default:
|
|
131
|
+
default: 'left' // "left" or "right"
|
|
132
|
+
},
|
|
133
|
+
alignArrow: {
|
|
134
|
+
required: false,
|
|
135
|
+
default: 'center'
|
|
126
136
|
},
|
|
137
|
+
openTrigger: {
|
|
138
|
+
required: false,
|
|
139
|
+
default: 'onClick'
|
|
140
|
+
},
|
|
141
|
+
width: {
|
|
142
|
+
required: false,
|
|
143
|
+
default: '165px'
|
|
144
|
+
}
|
|
127
145
|
},
|
|
128
146
|
methods: {
|
|
129
147
|
toggleShowInfo() {
|
|
130
148
|
this.showInfo = !this.showInfo
|
|
131
149
|
|
|
132
150
|
if (this.showInfo) {
|
|
133
|
-
document.addEventListener(
|
|
151
|
+
document.addEventListener('click', this.clickOutside)
|
|
134
152
|
} else {
|
|
135
|
-
document.removeEventListener(
|
|
153
|
+
document.removeEventListener('click', this.clickOutside)
|
|
136
154
|
}
|
|
137
155
|
},
|
|
138
156
|
clickOutside(event) {
|
|
@@ -140,12 +158,24 @@ export default {
|
|
|
140
158
|
return
|
|
141
159
|
}
|
|
142
160
|
this.toggleShowInfo()
|
|
143
|
-
}
|
|
161
|
+
}
|
|
144
162
|
},
|
|
145
163
|
data() {
|
|
146
164
|
return {
|
|
147
|
-
showInfo: false
|
|
165
|
+
showInfo: false
|
|
148
166
|
}
|
|
149
167
|
},
|
|
168
|
+
computed: {
|
|
169
|
+
iconColor() {
|
|
170
|
+
return this.isActive
|
|
171
|
+
? this.borderColor
|
|
172
|
+
? this.borderColor
|
|
173
|
+
: theme.colors.secondary
|
|
174
|
+
: theme.colors.mediumGray
|
|
175
|
+
},
|
|
176
|
+
halfComputedTextInfoWidth() {
|
|
177
|
+
return parseInt(this.width) / 2
|
|
178
|
+
}
|
|
179
|
+
}
|
|
150
180
|
}
|
|
151
181
|
</script>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<container>
|
|
2
|
+
<container :inputWidth="inputWidth">
|
|
3
3
|
<label-wrapper v-if="labelText">
|
|
4
4
|
<label-text>
|
|
5
5
|
{{ labelText }}
|
|
@@ -8,17 +8,19 @@
|
|
|
8
8
|
v-if="labelInfoText"
|
|
9
9
|
:text="labelInfoText"
|
|
10
10
|
borderColor="#ccc"
|
|
11
|
-
size="
|
|
11
|
+
size="14px"
|
|
12
12
|
:alignText="labelInfoAlign"
|
|
13
13
|
/>
|
|
14
14
|
</label-wrapper>
|
|
15
15
|
<input-wrapper>
|
|
16
16
|
<input-container
|
|
17
|
+
v-bind="$attrs"
|
|
17
18
|
ref="inputField1"
|
|
18
19
|
:hasUnit="unitName && !!unitName.length"
|
|
19
|
-
:placeholder="
|
|
20
|
+
:placeholder="displayedPlaceholder"
|
|
20
21
|
:isError="isError"
|
|
21
22
|
:inputWidth="inputWidth"
|
|
23
|
+
:inputHeight="inputHeight"
|
|
22
24
|
:minWidth="minWidth"
|
|
23
25
|
:value="formatWithCurrency(value)"
|
|
24
26
|
@blur="onInputBlur($event)"
|
|
@@ -30,13 +32,25 @@
|
|
|
30
32
|
:textAlign="textAlign"
|
|
31
33
|
:fontSize="fontSize"
|
|
32
34
|
:fontColor="fontColor"
|
|
35
|
+
v-on="$listeners"
|
|
36
|
+
:hasSlot="hasSlot"
|
|
37
|
+
:slotSize="slotSize"
|
|
33
38
|
/>
|
|
39
|
+
<slot-container v-if="hasSlot" :slotSize="slotSize" :isError="isError">
|
|
40
|
+
<slot></slot>
|
|
41
|
+
</slot-container>
|
|
42
|
+
|
|
34
43
|
<unit-container
|
|
35
|
-
v-if="unitName && showLinearUnitName"
|
|
44
|
+
v-if="unitName && showLinearUnitName && !hasSlot"
|
|
36
45
|
:hasLength="!!textInput.length"
|
|
37
46
|
:isError="isError"
|
|
38
47
|
>{{ unitName }}</unit-container
|
|
39
48
|
>
|
|
49
|
+
<icon
|
|
50
|
+
v-if="(isError || inputIcon) && !showLinearUnitName"
|
|
51
|
+
:class="inputIconImageClass"
|
|
52
|
+
:src="isError ? warningIcon : inputIconImage"
|
|
53
|
+
/>
|
|
40
54
|
</input-wrapper>
|
|
41
55
|
<error-message v-if="isError">{{ errorMessage }}</error-message>
|
|
42
56
|
</container>
|
|
@@ -74,11 +88,8 @@ import {
|
|
|
74
88
|
numberToString
|
|
75
89
|
} from '../../../helpers/numberConverter'
|
|
76
90
|
import InfoText from '../../infoText'
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
width: 100%;
|
|
80
|
-
position: relative;
|
|
81
|
-
`
|
|
91
|
+
import ErrorMessage from '../../errorMessage'
|
|
92
|
+
import warningIcon from '../../../assets/icons/error_icon.png'
|
|
82
93
|
|
|
83
94
|
const inputProps = {
|
|
84
95
|
isError: Boolean,
|
|
@@ -89,8 +100,17 @@ const inputProps = {
|
|
|
89
100
|
noBorder: Boolean,
|
|
90
101
|
textAlign: String,
|
|
91
102
|
fontSize: String,
|
|
92
|
-
fontColor: String
|
|
103
|
+
fontColor: String,
|
|
104
|
+
hasSlot: Boolean,
|
|
105
|
+
slotSize: String,
|
|
106
|
+
inputHeight: String
|
|
93
107
|
}
|
|
108
|
+
|
|
109
|
+
const Container = styled('div', inputProps)`
|
|
110
|
+
width: ${(props) => (props.inputWidth ? props.inputWidth : '100%')};
|
|
111
|
+
position: relative;
|
|
112
|
+
`
|
|
113
|
+
|
|
94
114
|
const InputContainer = styled('input', inputProps)`
|
|
95
115
|
border: ${(props) =>
|
|
96
116
|
props.isError
|
|
@@ -98,15 +118,24 @@ const InputContainer = styled('input', inputProps)`
|
|
|
98
118
|
: props.noBorder
|
|
99
119
|
? 'none'
|
|
100
120
|
: '1px solid ' + props.theme.colors.mediumGray};
|
|
101
|
-
padding:
|
|
102
|
-
|
|
121
|
+
padding-top: 11px;
|
|
122
|
+
padding-bottom: 11px;
|
|
123
|
+
padding-left: 10px;
|
|
124
|
+
padding-right: ${(props) =>
|
|
125
|
+
props.slotSize
|
|
126
|
+
? 'calc(' + props.slotSize + ' + 10px)'
|
|
127
|
+
: props.hasUnit
|
|
128
|
+
? '40px'
|
|
129
|
+
: '5px'};
|
|
103
130
|
border-radius: 4px;
|
|
104
131
|
text-align: ${(props) => props.textAlign};
|
|
105
132
|
cursor: ${(props) => (props.isDisabled ? 'not-allowed' : 'auto')};
|
|
106
133
|
font-size: ${(props) => (props.fontSize ? props.fontSize : '13px')};
|
|
107
134
|
color: ${(props) =>
|
|
108
135
|
props.isError
|
|
109
|
-
? props.theme.colors.
|
|
136
|
+
? props.theme.colors.grey6
|
|
137
|
+
: props.isDisabled
|
|
138
|
+
? props.theme.colors.grey2
|
|
110
139
|
: props.fontColor
|
|
111
140
|
? props.fontColor + ' !important'
|
|
112
141
|
: props.theme.colors.black};
|
|
@@ -115,7 +144,7 @@ const InputContainer = styled('input', inputProps)`
|
|
|
115
144
|
background-color: ${(props) =>
|
|
116
145
|
props.isDisabled ? props.theme.colors.grey5 : '#fff'};
|
|
117
146
|
box-sizing: border-box;
|
|
118
|
-
|
|
147
|
+
max-height: ${(props) => props.inputHeight};
|
|
119
148
|
&::placeholder {
|
|
120
149
|
color: ${(props) =>
|
|
121
150
|
props.isError ? props.theme.colors.red : props.theme.colors.darkGray};
|
|
@@ -125,6 +154,15 @@ const InputContainer = styled('input', inputProps)`
|
|
|
125
154
|
outline: none;
|
|
126
155
|
}
|
|
127
156
|
`
|
|
157
|
+
const IconProps = {
|
|
158
|
+
inputIconHeight: String
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const Icon = styled('img', IconProps)`
|
|
162
|
+
position: absolute;
|
|
163
|
+
right: 10px;
|
|
164
|
+
top: 2px;
|
|
165
|
+
`
|
|
128
166
|
|
|
129
167
|
const InputWrapper = styled.span`
|
|
130
168
|
position: relative;
|
|
@@ -142,6 +180,7 @@ const UnitContainer = styled('span', inputProps)`
|
|
|
142
180
|
right: 10px;
|
|
143
181
|
top: 0;
|
|
144
182
|
padding-left: 10px;
|
|
183
|
+
text-align: right;
|
|
145
184
|
color: ${(props) =>
|
|
146
185
|
props.isError
|
|
147
186
|
? props.theme.colors.red
|
|
@@ -150,11 +189,27 @@ const UnitContainer = styled('span', inputProps)`
|
|
|
150
189
|
: props.theme.colors.mediumGray};
|
|
151
190
|
`
|
|
152
191
|
|
|
153
|
-
const
|
|
154
|
-
|
|
155
|
-
|
|
192
|
+
const SlotContainer = styled('span', inputProps)`
|
|
193
|
+
text-align: right;
|
|
194
|
+
border-left: 1px solid
|
|
195
|
+
${(props) =>
|
|
196
|
+
props.isError
|
|
197
|
+
? props.theme.colors.red
|
|
198
|
+
: props.hasLength
|
|
199
|
+
? props.theme.colors.black
|
|
200
|
+
: props.theme.colors.mediumGray};
|
|
156
201
|
position: absolute;
|
|
157
|
-
|
|
202
|
+
width: ${(props) =>
|
|
203
|
+
props.slotSize ? 'calc(' + props.slotSize + ' - 10px)' : 'fit-content'};
|
|
204
|
+
right: 10px;
|
|
205
|
+
top: 0;
|
|
206
|
+
padding-left: 10px;
|
|
207
|
+
color: ${(props) =>
|
|
208
|
+
props.isError
|
|
209
|
+
? props.theme.colors.red
|
|
210
|
+
: props.hasLength
|
|
211
|
+
? props.theme.colors.black
|
|
212
|
+
: props.theme.colors.mediumGray};
|
|
158
213
|
`
|
|
159
214
|
|
|
160
215
|
const LabelWrapper = styled.div`
|
|
@@ -164,8 +219,9 @@ const LabelWrapper = styled.div`
|
|
|
164
219
|
`
|
|
165
220
|
|
|
166
221
|
const LabelText = styled.div`
|
|
167
|
-
font-weight: bold;
|
|
168
222
|
font-size: 13px;
|
|
223
|
+
color: ${(props) => props.theme.colors.eturnityGrey};
|
|
224
|
+
font-weight: 700;
|
|
169
225
|
`
|
|
170
226
|
|
|
171
227
|
export default {
|
|
@@ -178,12 +234,16 @@ export default {
|
|
|
178
234
|
ErrorMessage,
|
|
179
235
|
LabelWrapper,
|
|
180
236
|
LabelText,
|
|
181
|
-
InfoText
|
|
237
|
+
InfoText,
|
|
238
|
+
Icon,
|
|
239
|
+
SlotContainer
|
|
182
240
|
},
|
|
241
|
+
inheritAttrs: false,
|
|
183
242
|
data() {
|
|
184
243
|
return {
|
|
185
244
|
textInput: '',
|
|
186
|
-
isFocused: false
|
|
245
|
+
isFocused: false,
|
|
246
|
+
warningIcon: warningIcon
|
|
187
247
|
}
|
|
188
248
|
},
|
|
189
249
|
props: {
|
|
@@ -203,6 +263,10 @@ export default {
|
|
|
203
263
|
required: false,
|
|
204
264
|
default: null
|
|
205
265
|
},
|
|
266
|
+
inputHeight: {
|
|
267
|
+
required: false,
|
|
268
|
+
default: null
|
|
269
|
+
},
|
|
206
270
|
value: {
|
|
207
271
|
required: true,
|
|
208
272
|
default: null
|
|
@@ -253,7 +317,7 @@ export default {
|
|
|
253
317
|
},
|
|
254
318
|
labelInfoAlign: {
|
|
255
319
|
required: false,
|
|
256
|
-
default: '
|
|
320
|
+
default: 'left'
|
|
257
321
|
},
|
|
258
322
|
minNumber: {
|
|
259
323
|
required: false,
|
|
@@ -266,13 +330,50 @@ export default {
|
|
|
266
330
|
numberToStringEnabled: {
|
|
267
331
|
required: false,
|
|
268
332
|
default: true
|
|
333
|
+
},
|
|
334
|
+
inputIcon: {
|
|
335
|
+
require: false,
|
|
336
|
+
type: Boolean,
|
|
337
|
+
default: false
|
|
338
|
+
},
|
|
339
|
+
inputIconImage: {
|
|
340
|
+
require: false,
|
|
341
|
+
type: String,
|
|
342
|
+
default: ''
|
|
343
|
+
},
|
|
344
|
+
allowNegative: {
|
|
345
|
+
required: false,
|
|
346
|
+
default: true
|
|
347
|
+
},
|
|
348
|
+
inputIconImageClass: {
|
|
349
|
+
require: false,
|
|
350
|
+
type: Array,
|
|
351
|
+
default: () => []
|
|
352
|
+
},
|
|
353
|
+
slotSize: {
|
|
354
|
+
required: false
|
|
355
|
+
}
|
|
356
|
+
},
|
|
357
|
+
computed: {
|
|
358
|
+
displayedPlaceholder() {
|
|
359
|
+
if (this.placeholder) return this.placeholder
|
|
360
|
+
return `${this.minNumber || 0} ${this.unitName ? this.unitName : ''}`
|
|
361
|
+
},
|
|
362
|
+
hasSlot() {
|
|
363
|
+
return !!this.$slots.default
|
|
364
|
+
},
|
|
365
|
+
computedSlotSize() {
|
|
366
|
+
return this.slotSize || this.$slots['default'][0].elm.clientWidth
|
|
269
367
|
}
|
|
270
368
|
},
|
|
271
369
|
methods: {
|
|
272
370
|
onChangeHandler(event) {
|
|
273
|
-
if (isNaN(event)) {
|
|
371
|
+
if (isNaN(event) || event == '') {
|
|
274
372
|
event = this.minNumber || this.minNumber === 0 ? this.minNumber : event
|
|
275
373
|
}
|
|
374
|
+
if (!this.allowNegative) {
|
|
375
|
+
event = Math.abs(event)
|
|
376
|
+
}
|
|
276
377
|
this.$emit('input-change', event)
|
|
277
378
|
},
|
|
278
379
|
onEvaluateCode(val) {
|
|
@@ -305,6 +406,8 @@ export default {
|
|
|
305
406
|
value: evaluated,
|
|
306
407
|
numberPrecision: this.numberPrecision
|
|
307
408
|
})
|
|
409
|
+
} else if (typeof evaluated === 'number') {
|
|
410
|
+
evaluated = evaluated.toFixed(this.numberPrecision)
|
|
308
411
|
}
|
|
309
412
|
return evaluated
|
|
310
413
|
},
|
|
@@ -321,8 +424,8 @@ export default {
|
|
|
321
424
|
})
|
|
322
425
|
}
|
|
323
426
|
let adjustedMinValue =
|
|
324
|
-
|
|
325
|
-
?
|
|
427
|
+
evaluatedInput && evaluatedInput.length
|
|
428
|
+
? evaluatedInput
|
|
326
429
|
: this.minNumber || this.minNumber === 0
|
|
327
430
|
? this.minNumber
|
|
328
431
|
: ''
|
|
@@ -336,6 +439,7 @@ export default {
|
|
|
336
439
|
this.$nextTick(() => {
|
|
337
440
|
this.$refs.inputField1.$el.select()
|
|
338
441
|
})
|
|
442
|
+
this.$emit('input-focus')
|
|
339
443
|
},
|
|
340
444
|
formatWithCurrency(value) {
|
|
341
445
|
let adjustedMinValue =
|
|
@@ -352,6 +456,7 @@ export default {
|
|
|
352
456
|
})
|
|
353
457
|
: adjustedMinValue
|
|
354
458
|
let unit = this.showLinearUnitName ? '' : this.unitName
|
|
459
|
+
//return input + ' ' + unit
|
|
355
460
|
return input + ' ' + unit
|
|
356
461
|
} else if (!adjustedMinValue && adjustedMinValue !== 0) {
|
|
357
462
|
return ''
|
|
@@ -10,38 +10,42 @@
|
|
|
10
10
|
v-if="infoTextMessage"
|
|
11
11
|
:text="infoTextMessage"
|
|
12
12
|
borderColor="#ccc"
|
|
13
|
-
:size="fontSize ? fontSize : '
|
|
13
|
+
:size="fontSize ? fontSize : '16px'"
|
|
14
14
|
:alignText="infoTextAlign"
|
|
15
15
|
/>
|
|
16
16
|
</label-wrapper>
|
|
17
|
-
<
|
|
18
|
-
<
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
<icon
|
|
41
|
-
|
|
42
|
-
|
|
17
|
+
<input-error-wrapper>
|
|
18
|
+
<icon-container>
|
|
19
|
+
<input-container
|
|
20
|
+
:placeholder="placeholder"
|
|
21
|
+
:isError="isError"
|
|
22
|
+
:inputWidth="inputWidth"
|
|
23
|
+
:minWidth="minWidth"
|
|
24
|
+
:value="value"
|
|
25
|
+
@input="onChangeHandler"
|
|
26
|
+
:noBorder="noBorder"
|
|
27
|
+
:disabled="disabled"
|
|
28
|
+
:isDisabled="disabled"
|
|
29
|
+
:fontSize="fontSize"
|
|
30
|
+
:inputType="inputType"
|
|
31
|
+
:type="inputTypeData"
|
|
32
|
+
/>
|
|
33
|
+
<icon-wrapper
|
|
34
|
+
v-if="inputType === 'password' && !isError"
|
|
35
|
+
@click="toggleShowPassword()"
|
|
36
|
+
size="20px"
|
|
37
|
+
>
|
|
38
|
+
<icon name="current_variant" size="20px" />
|
|
39
|
+
</icon-wrapper>
|
|
40
|
+
<icon-wrapper v-if="isError" size="16px">
|
|
41
|
+
<icon name="warning" size="16px" cursor="default" />
|
|
42
|
+
</icon-wrapper>
|
|
43
|
+
</icon-container>
|
|
44
|
+
<error-message v-if="isError && errorMessage">{{
|
|
45
|
+
errorMessage
|
|
46
|
+
}}</error-message>
|
|
47
|
+
</input-error-wrapper>
|
|
43
48
|
</input-wrapper>
|
|
44
|
-
<error-message v-if="isError">{{ errorMessage }}</error-message>
|
|
45
49
|
</container>
|
|
46
50
|
</template>
|
|
47
51
|
|
|
@@ -49,6 +53,7 @@
|
|
|
49
53
|
import styled from 'vue-styled-components'
|
|
50
54
|
import InfoText from '../../infoText'
|
|
51
55
|
import Icon from '../../icon'
|
|
56
|
+
import ErrorMessage from '../../errorMessage'
|
|
52
57
|
|
|
53
58
|
const Container = styled.div`
|
|
54
59
|
width: 100%;
|
|
@@ -57,8 +62,9 @@ const Container = styled.div`
|
|
|
57
62
|
|
|
58
63
|
const labelAttrs = { fontSize: String }
|
|
59
64
|
const InputLabel = styled('div', labelAttrs)`
|
|
60
|
-
|
|
65
|
+
color: ${(props) => props.theme.colors.eturnityGrey};
|
|
61
66
|
font-size: ${(props) => (props.fontSize ? props.fontSize : '13px')};
|
|
67
|
+
font-weight: 700;
|
|
62
68
|
`
|
|
63
69
|
|
|
64
70
|
const LabelWrapper = styled.div`
|
|
@@ -69,6 +75,13 @@ const LabelWrapper = styled.div`
|
|
|
69
75
|
justify-content: start;
|
|
70
76
|
`
|
|
71
77
|
|
|
78
|
+
const InputErrorWrapper = styled.div`
|
|
79
|
+
display: inline-grid;
|
|
80
|
+
grid-template-row: auto auto;
|
|
81
|
+
grid-gap: 0px;
|
|
82
|
+
align-items: center;
|
|
83
|
+
`
|
|
84
|
+
|
|
72
85
|
const inputProps = {
|
|
73
86
|
isError: Boolean,
|
|
74
87
|
inputWidth: String,
|
|
@@ -97,7 +110,11 @@ const InputContainer = styled('input', inputProps)`
|
|
|
97
110
|
position: relative;
|
|
98
111
|
font-size: ${(props) => (props.fontSize ? props.fontSize : '16px')};
|
|
99
112
|
color: ${(props) =>
|
|
100
|
-
props.isError
|
|
113
|
+
props.isError
|
|
114
|
+
? props.theme.colors.grey6
|
|
115
|
+
: props.isDisabled
|
|
116
|
+
? props.theme.colors.grey2
|
|
117
|
+
: props.theme.colors.black};
|
|
101
118
|
width: ${(props) => (props.inputWidth ? props.inputWidth : '100%')};
|
|
102
119
|
min-width: ${(props) => (props.minWidth ? props.minWidth : 'unset')};
|
|
103
120
|
box-sizing: border-box; // to allow width of 100% with padding
|
|
@@ -126,13 +143,6 @@ const InputWrapper = styled('div', inputAttrs)`
|
|
|
126
143
|
props.alignItems === 'vertical' || !props.hasLabel ? '1fr' : 'auto 1fr'};
|
|
127
144
|
`
|
|
128
145
|
|
|
129
|
-
const ErrorMessage = styled.div`
|
|
130
|
-
font-size: 14px;
|
|
131
|
-
color: ${(props) => props.theme.colors.red};
|
|
132
|
-
position: absolute;
|
|
133
|
-
top: calc(100% + 1px);
|
|
134
|
-
`
|
|
135
|
-
|
|
136
146
|
const IconAttrs = { size: String }
|
|
137
147
|
const IconWrapper = styled('div', IconAttrs)`
|
|
138
148
|
position: absolute;
|
|
@@ -175,7 +185,8 @@ export default {
|
|
|
175
185
|
LabelWrapper,
|
|
176
186
|
Icon,
|
|
177
187
|
IconWrapper,
|
|
178
|
-
IconContainer
|
|
188
|
+
IconContainer,
|
|
189
|
+
InputErrorWrapper
|
|
179
190
|
},
|
|
180
191
|
data() {
|
|
181
192
|
return {
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
/>
|
|
13
13
|
<span class="checkmark"></span>
|
|
14
14
|
<label-text :isDisabled="item.disabled">{{ item.label }}</label-text>
|
|
15
|
-
<info-text v-if="item.infoText" :text="item.infoText" size="
|
|
15
|
+
<info-text v-if="item.infoText" :text="item.infoText" size="16px" />
|
|
16
16
|
</label-container>
|
|
17
17
|
<image-container v-if="item.img">
|
|
18
18
|
<radio-image :src="item.img" />
|
|
@@ -25,8 +25,9 @@
|
|
|
25
25
|
// :value="companyName"
|
|
26
26
|
// :disabled="true"
|
|
27
27
|
// inputWidth="250px"
|
|
28
|
+
// @on-change="function($event)"
|
|
28
29
|
// />
|
|
29
|
-
import styled from
|
|
30
|
+
import styled from 'vue-styled-components'
|
|
30
31
|
|
|
31
32
|
const Container = styled.div`
|
|
32
33
|
width: 100%;
|
|
@@ -34,15 +35,15 @@ const Container = styled.div`
|
|
|
34
35
|
`
|
|
35
36
|
|
|
36
37
|
const inputAttrs = { isDisabled: Boolean, inputWidth: String }
|
|
37
|
-
const InputContainer = styled(
|
|
38
|
+
const InputContainer = styled('input', inputAttrs)`
|
|
38
39
|
border: 1px solid ${(props) => props.theme.colors.mediumGray};
|
|
39
40
|
padding: 11px 30px 11px 10px;
|
|
40
41
|
border-radius: 4px;
|
|
41
|
-
font-size:
|
|
42
|
+
font-size: 13px;
|
|
42
43
|
color: ${(props) => props.theme.colors.black};
|
|
43
|
-
width: ${(props) => (props.inputWidth ? props.inputWidth :
|
|
44
|
+
width: ${(props) => (props.inputWidth ? props.inputWidth : '100%')};
|
|
44
45
|
box-sizing: border-box;
|
|
45
|
-
cursor: ${(props) => (props.isDisabled ?
|
|
46
|
+
cursor: ${(props) => (props.isDisabled ? 'not-allowed' : 'auto')};
|
|
46
47
|
background: ${(props) => props.theme.colors.white} !important;
|
|
47
48
|
&::placeholder {
|
|
48
49
|
color: ${(props) => props.theme.colors.darkGray};
|
|
@@ -65,33 +66,33 @@ const InputWrapper = styled.span`
|
|
|
65
66
|
`
|
|
66
67
|
|
|
67
68
|
export default {
|
|
68
|
-
name:
|
|
69
|
+
name: 'search-input',
|
|
69
70
|
components: {
|
|
70
71
|
InputContainer,
|
|
71
72
|
InputWrapper,
|
|
72
|
-
Container
|
|
73
|
+
Container
|
|
73
74
|
},
|
|
74
75
|
props: {
|
|
75
76
|
value: {
|
|
76
|
-
required: true
|
|
77
|
+
required: true
|
|
77
78
|
},
|
|
78
79
|
disabled: {
|
|
79
80
|
required: false,
|
|
80
|
-
default: false
|
|
81
|
+
default: false
|
|
81
82
|
},
|
|
82
83
|
placeholder: {
|
|
83
84
|
required: false,
|
|
84
|
-
default:
|
|
85
|
+
default: ''
|
|
85
86
|
},
|
|
86
87
|
inputWidth: {
|
|
87
88
|
required: false,
|
|
88
|
-
default: null
|
|
89
|
-
}
|
|
89
|
+
default: null
|
|
90
|
+
}
|
|
90
91
|
},
|
|
91
92
|
methods: {
|
|
92
93
|
onChangeHandler(event) {
|
|
93
|
-
this.$emit(
|
|
94
|
-
}
|
|
95
|
-
}
|
|
94
|
+
this.$emit('on-change', event)
|
|
95
|
+
}
|
|
96
|
+
}
|
|
96
97
|
}
|
|
97
98
|
</script>
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
v-if="infoTextMessage"
|
|
11
11
|
:text="infoTextMessage"
|
|
12
12
|
borderColor="#ccc"
|
|
13
|
-
size="
|
|
13
|
+
size="16px"
|
|
14
14
|
:alignText="infoTextAlign"
|
|
15
15
|
/>
|
|
16
16
|
</label-wrapper>
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
:disabled="isDisabled"
|
|
24
24
|
:fontSize="fontSize"
|
|
25
25
|
@input="onChangeHandler"
|
|
26
|
+
:resize="resize"
|
|
26
27
|
/>
|
|
27
28
|
</input-wrapper>
|
|
28
29
|
<error-message v-if="isError && errorText">{{ errorText }}</error-message>
|
|
@@ -44,9 +45,11 @@
|
|
|
44
45
|
// label="Question 5"
|
|
45
46
|
// alignItems="horizontal" // horizontal, vertical
|
|
46
47
|
// :isDisabled="true"
|
|
48
|
+
// . fontSize="13px"
|
|
47
49
|
// />
|
|
48
50
|
import styled from 'vue-styled-components'
|
|
49
51
|
import InfoText from '../../infoText'
|
|
52
|
+
import ErrorMessage from '../../errorMessage'
|
|
50
53
|
|
|
51
54
|
const containerProps = { inputWidth: String }
|
|
52
55
|
const Container = styled('div', containerProps)`
|
|
@@ -107,13 +110,6 @@ const InputWrapper = styled('div', inputAttrs)`
|
|
|
107
110
|
: 'auto 1fr'};
|
|
108
111
|
`
|
|
109
112
|
|
|
110
|
-
const ErrorMessage = styled.div`
|
|
111
|
-
font-size: 14px;
|
|
112
|
-
color: ${(props) => props.theme.colors.red};
|
|
113
|
-
position: absolute;
|
|
114
|
-
top: calc(100% + 1px);
|
|
115
|
-
`
|
|
116
|
-
|
|
117
113
|
const labelAttrs = { fontSize: String }
|
|
118
114
|
const InputLabel = styled('div', labelAttrs)`
|
|
119
115
|
font-weight: bold;
|
|
@@ -175,6 +171,10 @@ export default {
|
|
|
175
171
|
inputWidth: {
|
|
176
172
|
required: false,
|
|
177
173
|
default: null
|
|
174
|
+
},
|
|
175
|
+
resize: {
|
|
176
|
+
required: false,
|
|
177
|
+
default: 'none'
|
|
178
178
|
}
|
|
179
179
|
},
|
|
180
180
|
methods: {
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
v-if="infoTextMessage"
|
|
11
11
|
:text="infoTextMessage"
|
|
12
12
|
borderColor="#ccc"
|
|
13
|
-
size="
|
|
13
|
+
size="14px"
|
|
14
14
|
:alignText="infoTextAlign"
|
|
15
15
|
/>
|
|
16
16
|
</label-container>
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
v-if="infoTextMessage"
|
|
47
47
|
:text="infoTextMessage"
|
|
48
48
|
borderColor="#ccc"
|
|
49
|
-
size="
|
|
49
|
+
size="14px"
|
|
50
50
|
:alignText="infoTextAlign"
|
|
51
51
|
/>
|
|
52
52
|
</label-container>
|
|
@@ -4,6 +4,9 @@ export const stringToNumber = ({
|
|
|
4
4
|
allowNegative
|
|
5
5
|
}) => {
|
|
6
6
|
// This is for saving. It converts our input string to a readable number
|
|
7
|
+
if (value === undefined) {
|
|
8
|
+
value = ''
|
|
9
|
+
}
|
|
7
10
|
let newVal = value.toString()
|
|
8
11
|
const selectedLang = localStorage.getItem('lang')
|
|
9
12
|
// The first replace will replace not allowed characters with a blank
|
|
@@ -91,6 +94,7 @@ export const numberToString = ({ value, numberPrecision }) => {
|
|
|
91
94
|
? 'fr-fr'
|
|
92
95
|
: localStorage.getItem('lang')
|
|
93
96
|
: 'en-US'
|
|
97
|
+
value=parseFloat(value)
|
|
94
98
|
return value.toLocaleString(selectedLang, {
|
|
95
99
|
minimumFractionDigits: numberPrecision,
|
|
96
100
|
maximumFractionDigits: numberPrecision
|