@webitel/ui-sdk 2.0.5-2 → 2.0.5-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/dist/ui-sdk.common.js +1116 -1095
- package/dist/ui-sdk.common.js.map +1 -1
- package/dist/ui-sdk.css +1 -1
- package/dist/ui-sdk.umd.js +1116 -1095
- 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 -214
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,255 +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
|
-
|
|
220
|
+
async updateInputPaddings() {
|
|
221
|
+
console.info(1);
|
|
222
|
+
this.setTimeout(() => {
|
|
221
223
|
// cant test this thing cause vue test utils doesnt render elements width :/
|
|
222
224
|
const afterWrapperWidth = this.$refs['after-wrapper'].offsetWidth;
|
|
223
225
|
const inputEl = this.$refs['wt-input'];
|
|
224
226
|
const defaultInputPadding = getComputedStyle(document.documentElement)
|
|
225
227
|
.getPropertyValue('--input-padding');
|
|
226
|
-
console.info('ipnut:', defaultInputPadding, afterWrapperWidth, defaultInputPadding*2+afterWrapperWidth);
|
|
228
|
+
console.info('ipnut:', defaultInputPadding, afterWrapperWidth, defaultInputPadding * 2 + afterWrapperWidth);
|
|
227
229
|
inputEl.style.paddingRight = `calc(${defaultInputPadding} * 2 + ${afterWrapperWidth}px)`;
|
|
228
|
-
},
|
|
229
|
-
},
|
|
230
|
-
mounted() {
|
|
231
|
-
this.updateInputPaddings();
|
|
230
|
+
}, 100);
|
|
232
231
|
},
|
|
232
|
+
},
|
|
233
|
+
mounted() {
|
|
234
|
+
this.updateInputPaddings();
|
|
235
|
+
},
|
|
233
236
|
};
|
|
234
237
|
</script>
|
|
235
238
|
|
|
236
239
|
<style lang="scss" scoped>
|
|
237
|
-
|
|
238
|
-
|
|
240
|
+
.wt-input {
|
|
241
|
+
cursor: text;
|
|
239
242
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
}
|
|
243
|
+
&--disabled {
|
|
244
|
+
pointer-events: none;
|
|
243
245
|
}
|
|
246
|
+
}
|
|
244
247
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
+
.wt-input__wrapper {
|
|
249
|
+
position: relative;
|
|
250
|
+
}
|
|
248
251
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
252
|
+
.wt-label {
|
|
253
|
+
.wt-input:hover &,
|
|
254
|
+
.wt-input:focus-within & {
|
|
255
|
+
color: var(--form-label--hover-color);
|
|
256
|
+
}
|
|
254
257
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
}
|
|
258
|
+
.wt-input--invalid:hover &,
|
|
259
|
+
.wt-input--invalid:focus-within & {
|
|
260
|
+
color: var(--label--invalid-color);
|
|
259
261
|
}
|
|
262
|
+
}
|
|
260
263
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
+
.wt-input__input {
|
|
265
|
+
@extend %typo-body-1;
|
|
266
|
+
@include wt-placeholder;
|
|
264
267
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
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);
|
|
274
277
|
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
278
|
+
&:focus {
|
|
279
|
+
@include wt-placeholder('focus');
|
|
280
|
+
border-color: var(--form-border--hover-color);
|
|
281
|
+
}
|
|
279
282
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
+
.wt-input--outline & {
|
|
284
|
+
border-color: var(--form-outline-border-color);
|
|
285
|
+
}
|
|
283
286
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
287
|
+
.wt-input--outline:hover &,
|
|
288
|
+
.wt-input--outline &:focus {
|
|
289
|
+
border-color: var(--form-outline-border--hover-color);
|
|
290
|
+
}
|
|
288
291
|
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
292
|
+
.wt-input--invalid &,
|
|
293
|
+
.wt-input--invalid:hover & {
|
|
294
|
+
border-color: var(--false-color);
|
|
295
|
+
outline: none; // prevent outline overlapping false color
|
|
296
|
+
}
|
|
294
297
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
}
|
|
298
|
+
.wt-input--disabled & {
|
|
299
|
+
@include wt-placeholder('disabled');
|
|
300
|
+
border-color: var(--form-border--disabled-color);
|
|
301
|
+
background: var(--form-border--disabled-color);
|
|
300
302
|
}
|
|
303
|
+
}
|
|
301
304
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
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);
|
|
311
314
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
315
|
+
.wt-input__password-button {
|
|
316
|
+
.wt-input--disabled & ::v-deep .wt-icon__icon {
|
|
317
|
+
fill: var(--icon-color-disabled);
|
|
318
|
+
}
|
|
316
319
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
}
|
|
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);
|
|
321
323
|
}
|
|
322
324
|
}
|
|
325
|
+
}
|
|
323
326
|
</style>
|