@webitel/ui-sdk 2.0.5-3 → 2.0.5-6
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/dist/ui-sdk.common.js +19 -21
- package/dist/ui-sdk.common.js.map +1 -1
- package/dist/ui-sdk.css +1 -1
- package/dist/ui-sdk.umd.js +19 -21
- package/dist/ui-sdk.umd.js.map +1 -1
- package/dist/ui-sdk.umd.min.js +2 -2
- package/dist/ui-sdk.umd.min.js.map +1 -1
- package/package.json +1 -1
- package/src/components/molecules/wt-input/wt-input.vue +217 -215
package/package.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div
|
|
3
|
-
class="wt-input"
|
|
4
3
|
:class="{
|
|
5
4
|
'wt-input--outline': outline,
|
|
6
5
|
'wt-input--disabled': disabled,
|
|
7
6
|
'wt-input--invalid': invalid,
|
|
8
7
|
}"
|
|
8
|
+
class="wt-input"
|
|
9
9
|
>
|
|
10
10
|
<wt-label
|
|
11
11
|
v-if="hasLabel"
|
|
12
|
-
:for="name"
|
|
13
|
-
:outline="outline"
|
|
14
12
|
:disabled="disabled"
|
|
13
|
+
:for="name"
|
|
15
14
|
:invalid="invalid"
|
|
15
|
+
:outline="outline"
|
|
16
16
|
v-bind="labelProps"
|
|
17
17
|
>
|
|
18
18
|
<!-- @slot Custom input label -->
|
|
@@ -21,22 +21,22 @@
|
|
|
21
21
|
<div class="wt-input__wrapper">
|
|
22
22
|
<input
|
|
23
23
|
:id="name"
|
|
24
|
-
|
|
24
|
+
ref="wt-input"
|
|
25
25
|
:class="{
|
|
26
26
|
'wt-input--is-password': isPassword,
|
|
27
27
|
}"
|
|
28
|
-
ref="wt-input"
|
|
29
|
-
:value="value"
|
|
30
|
-
:type="inputType"
|
|
31
|
-
:placeholder="placeholder || label"
|
|
32
28
|
:disabled="disabled"
|
|
33
|
-
:min="numberMin"
|
|
34
29
|
:max="numberMax"
|
|
30
|
+
:min="numberMin"
|
|
31
|
+
:placeholder="placeholder || label"
|
|
32
|
+
:type="inputType"
|
|
33
|
+
:value="value"
|
|
34
|
+
class="wt-input__input"
|
|
35
35
|
v-on="listeners"
|
|
36
36
|
>
|
|
37
37
|
<div
|
|
38
|
-
class="wt-input__after-wrapper"
|
|
39
38
|
ref="after-wrapper"
|
|
39
|
+
class="wt-input__after-wrapper"
|
|
40
40
|
>
|
|
41
41
|
<slot
|
|
42
42
|
name="after-input"
|
|
@@ -50,8 +50,8 @@
|
|
|
50
50
|
}"
|
|
51
51
|
>
|
|
52
52
|
<wt-icon-btn
|
|
53
|
-
class="wt-input__password-button"
|
|
54
53
|
:icon="showPasswordIcon"
|
|
54
|
+
class="wt-input__password-button"
|
|
55
55
|
@click.native="switchVisibilityPassword"
|
|
56
56
|
></wt-icon-btn>
|
|
57
57
|
</slot>
|
|
@@ -69,256 +69,258 @@
|
|
|
69
69
|
import validationMixin from '../../../mixins/validationMixin/validationMixin';
|
|
70
70
|
|
|
71
71
|
export default {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
72
|
+
name: 'wt-input',
|
|
73
|
+
mixins: [validationMixin],
|
|
74
|
+
props: {
|
|
75
|
+
/**
|
|
76
|
+
* Current input value (`v-model`)
|
|
77
|
+
*/
|
|
78
|
+
value: {
|
|
79
|
+
type: [String, Number],
|
|
80
|
+
default: '',
|
|
81
|
+
},
|
|
82
|
+
/**
|
|
83
|
+
* Form input label
|
|
84
|
+
*/
|
|
85
|
+
label: {
|
|
86
|
+
type: String,
|
|
87
|
+
default: '',
|
|
88
|
+
},
|
|
89
|
+
/**
|
|
90
|
+
* Form input placeholder
|
|
91
|
+
*/
|
|
92
|
+
placeholder: {
|
|
93
|
+
type: String,
|
|
94
|
+
},
|
|
95
|
+
/**
|
|
96
|
+
* Form input name
|
|
97
|
+
*/
|
|
98
|
+
name: {
|
|
99
|
+
type: String,
|
|
100
|
+
default: '',
|
|
101
|
+
},
|
|
102
|
+
/**
|
|
103
|
+
* Form input type
|
|
104
|
+
*/
|
|
105
|
+
type: {
|
|
106
|
+
type: String,
|
|
107
|
+
default: 'text',
|
|
108
|
+
},
|
|
109
|
+
/**
|
|
110
|
+
* Native input required attribute
|
|
111
|
+
*/
|
|
112
|
+
required: {
|
|
113
|
+
type: Boolean,
|
|
114
|
+
default: false,
|
|
115
|
+
description: 'Native input required attribute',
|
|
116
|
+
},
|
|
117
|
+
/**
|
|
118
|
+
* Native input disabled attribute
|
|
119
|
+
*/
|
|
120
|
+
disabled: {
|
|
121
|
+
type: Boolean,
|
|
122
|
+
default: false,
|
|
123
|
+
description: 'Native input disabled attribute',
|
|
124
|
+
},
|
|
125
|
+
/**
|
|
126
|
+
* Status of show password icon display
|
|
127
|
+
*/
|
|
128
|
+
hasShowPassword: {
|
|
129
|
+
type: Boolean,
|
|
130
|
+
default: false,
|
|
131
|
+
},
|
|
132
132
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
133
|
+
/**
|
|
134
|
+
* Native number input restrictions
|
|
135
|
+
*/
|
|
136
|
+
numberMin: {
|
|
137
|
+
type: Number,
|
|
138
|
+
default: 0,
|
|
139
|
+
},
|
|
140
140
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
141
|
+
/**
|
|
142
|
+
* Native number input restrictions
|
|
143
|
+
*/
|
|
144
|
+
numberMax: {
|
|
145
|
+
type: Number,
|
|
146
|
+
},
|
|
147
147
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
148
|
+
outline: {
|
|
149
|
+
type: Boolean,
|
|
150
|
+
default: false,
|
|
151
|
+
},
|
|
152
152
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
},
|
|
153
|
+
labelProps: {
|
|
154
|
+
type: Object,
|
|
155
|
+
description: 'Object with props, passed down to wt-label as props',
|
|
157
156
|
},
|
|
157
|
+
},
|
|
158
158
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
159
|
+
data: () => ({
|
|
160
|
+
inputType: '',
|
|
161
|
+
isPasswordVisible: false,
|
|
162
|
+
}),
|
|
163
163
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
}
|
|
164
|
+
watch: {
|
|
165
|
+
type: {
|
|
166
|
+
immediate: true,
|
|
167
|
+
handler(type) {
|
|
168
|
+
let inputType = type;
|
|
169
|
+
// Safari has bug for number input
|
|
170
|
+
if (typeof window !== 'undefined' || typeof document !== 'undefined') {
|
|
171
|
+
const ua = navigator.userAgent.toLocaleLowerCase();
|
|
172
|
+
if (
|
|
173
|
+
ua.indexOf('safari') !== -1
|
|
174
|
+
&& ua.indexOf('chrome') === -1
|
|
175
|
+
&& type === 'number'
|
|
176
|
+
) {
|
|
177
|
+
this.isNumberTypeSafari = true;
|
|
178
|
+
inputType = 'text';
|
|
180
179
|
}
|
|
181
|
-
|
|
182
|
-
|
|
180
|
+
}
|
|
181
|
+
this.inputType = inputType;
|
|
183
182
|
},
|
|
184
183
|
},
|
|
184
|
+
},
|
|
185
185
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
186
|
+
computed: {
|
|
187
|
+
hasLabel() {
|
|
188
|
+
return !!(this.label || this.$slots.label);
|
|
189
|
+
},
|
|
190
190
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
191
|
+
requiredLabel() {
|
|
192
|
+
return this.required ? `${this.label}*` : this.label;
|
|
193
|
+
},
|
|
194
194
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
195
|
+
isPassword() {
|
|
196
|
+
return this.type === 'password' && this.hasShowPassword;
|
|
197
|
+
},
|
|
198
198
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
199
|
+
showPasswordIcon() {
|
|
200
|
+
return this.isPasswordVisible ? 'eye--closed' : 'eye--opened';
|
|
201
|
+
},
|
|
202
202
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
203
|
+
listeners() {
|
|
204
|
+
return {
|
|
205
|
+
...this.$listeners,
|
|
206
|
+
input: this.inputHandler,
|
|
207
|
+
};
|
|
208
|
+
},
|
|
209
|
+
},
|
|
210
|
+
methods: {
|
|
211
|
+
inputHandler(event) {
|
|
212
|
+
this.$emit('input', event.target.value.trim());
|
|
209
213
|
},
|
|
210
|
-
methods: {
|
|
211
|
-
inputHandler(event) {
|
|
212
|
-
this.$emit('input', event.target.value.trim());
|
|
213
|
-
},
|
|
214
214
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
215
|
+
switchVisibilityPassword() {
|
|
216
|
+
this.isPasswordVisible = !this.isPasswordVisible;
|
|
217
|
+
this.inputType = this.isPasswordVisible ? 'text' : 'password';
|
|
218
|
+
},
|
|
219
219
|
|
|
220
|
-
|
|
221
|
-
|
|
220
|
+
async updateInputPaddings() {
|
|
221
|
+
console.info(1);
|
|
222
|
+
setTimeout(() => {
|
|
222
223
|
// cant test this thing cause vue test utils doesnt render elements width :/
|
|
223
224
|
const afterWrapperWidth = this.$refs['after-wrapper'].offsetWidth;
|
|
224
225
|
const inputEl = this.$refs['wt-input'];
|
|
225
226
|
const defaultInputPadding = getComputedStyle(document.documentElement)
|
|
226
227
|
.getPropertyValue('--input-padding');
|
|
227
|
-
console.info('ipnut:', defaultInputPadding, afterWrapperWidth, defaultInputPadding*2+afterWrapperWidth);
|
|
228
|
+
console.info('ipnut:', defaultInputPadding, afterWrapperWidth, defaultInputPadding * 2 + afterWrapperWidth);
|
|
228
229
|
inputEl.style.paddingRight = `calc(${defaultInputPadding} * 2 + ${afterWrapperWidth}px)`;
|
|
229
|
-
},
|
|
230
|
-
},
|
|
231
|
-
mounted() {
|
|
232
|
-
this.updateInputPaddings();
|
|
230
|
+
}, 100);
|
|
233
231
|
},
|
|
232
|
+
},
|
|
233
|
+
mounted() {
|
|
234
|
+
this.updateInputPaddings();
|
|
235
|
+
},
|
|
234
236
|
};
|
|
235
237
|
</script>
|
|
236
238
|
|
|
237
239
|
<style lang="scss" scoped>
|
|
238
|
-
|
|
239
|
-
|
|
240
|
+
.wt-input {
|
|
241
|
+
cursor: text;
|
|
240
242
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
}
|
|
243
|
+
&--disabled {
|
|
244
|
+
pointer-events: none;
|
|
244
245
|
}
|
|
246
|
+
}
|
|
245
247
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
248
|
+
.wt-input__wrapper {
|
|
249
|
+
position: relative;
|
|
250
|
+
}
|
|
249
251
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
252
|
+
.wt-label {
|
|
253
|
+
.wt-input:hover &,
|
|
254
|
+
.wt-input:focus-within & {
|
|
255
|
+
color: var(--form-label--hover-color);
|
|
256
|
+
}
|
|
255
257
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
}
|
|
258
|
+
.wt-input--invalid:hover &,
|
|
259
|
+
.wt-input--invalid:focus-within & {
|
|
260
|
+
color: var(--label--invalid-color);
|
|
260
261
|
}
|
|
262
|
+
}
|
|
261
263
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
264
|
+
.wt-input__input {
|
|
265
|
+
@extend %typo-body-1;
|
|
266
|
+
@include wt-placeholder;
|
|
265
267
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
268
|
+
display: block;
|
|
269
|
+
box-sizing: border-box;
|
|
270
|
+
width: 100%;
|
|
271
|
+
padding: var(--input-padding);
|
|
272
|
+
transition: var(--transition);
|
|
273
|
+
color: var(--form-input-color);
|
|
274
|
+
border: var(--input-border);
|
|
275
|
+
border-color: var(--form-border-color);
|
|
276
|
+
border-radius: var(--border-radius);
|
|
275
277
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
278
|
+
&:focus {
|
|
279
|
+
@include wt-placeholder('focus');
|
|
280
|
+
border-color: var(--form-border--hover-color);
|
|
281
|
+
}
|
|
280
282
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
283
|
+
.wt-input--outline & {
|
|
284
|
+
border-color: var(--form-outline-border-color);
|
|
285
|
+
}
|
|
284
286
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
287
|
+
.wt-input--outline:hover &,
|
|
288
|
+
.wt-input--outline &:focus {
|
|
289
|
+
border-color: var(--form-outline-border--hover-color);
|
|
290
|
+
}
|
|
289
291
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
292
|
+
.wt-input--invalid &,
|
|
293
|
+
.wt-input--invalid:hover & {
|
|
294
|
+
border-color: var(--false-color);
|
|
295
|
+
outline: none; // prevent outline overlapping false color
|
|
296
|
+
}
|
|
295
297
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
}
|
|
298
|
+
.wt-input--disabled & {
|
|
299
|
+
@include wt-placeholder('disabled');
|
|
300
|
+
border-color: var(--form-border--disabled-color);
|
|
301
|
+
background: var(--form-border--disabled-color);
|
|
301
302
|
}
|
|
303
|
+
}
|
|
302
304
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
305
|
+
.wt-input__after-wrapper {
|
|
306
|
+
position: absolute;
|
|
307
|
+
top: 50%;
|
|
308
|
+
right: var(--input-icon-margin);
|
|
309
|
+
display: flex;
|
|
310
|
+
align-items: center;
|
|
311
|
+
transform: translateY(-50%);
|
|
312
|
+
pointer-events: auto; // override --disabled p-events none
|
|
313
|
+
gap: var(--input-after-wrapper-gap);
|
|
312
314
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
315
|
+
.wt-input__password-button {
|
|
316
|
+
.wt-input--disabled & ::v-deep .wt-icon__icon {
|
|
317
|
+
fill: var(--icon-color-disabled);
|
|
318
|
+
}
|
|
317
319
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
}
|
|
320
|
+
.wt-input:hover & ::v-deep .wt-icon__icon,
|
|
321
|
+
.wt-input:focus-within & ::v-deep .wt-icon__icon {
|
|
322
|
+
fill: var(--icon-color--hover);
|
|
322
323
|
}
|
|
323
324
|
}
|
|
325
|
+
}
|
|
324
326
|
</style>
|