@webitel/ui-sdk 2.0.5-3 → 2.0.5-4

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webitel/ui-sdk",
3
- "version": "2.0.5-3",
3
+ "version": "2.0.5-4",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "serve-lib": "vue-cli-service serve",
@@ -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
- class="wt-input__input"
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,257 @@
69
69
  import validationMixin from '../../../mixins/validationMixin/validationMixin';
70
70
 
71
71
  export default {
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
- },
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
- * Native number input restrictions
135
- */
136
- numberMin: {
137
- type: Number,
138
- default: 0,
139
- },
133
+ /**
134
+ * Native number input restrictions
135
+ */
136
+ numberMin: {
137
+ type: Number,
138
+ default: 0,
139
+ },
140
140
 
141
- /**
142
- * Native number input restrictions
143
- */
144
- numberMax: {
145
- type: Number,
146
- },
141
+ /**
142
+ * Native number input restrictions
143
+ */
144
+ numberMax: {
145
+ type: Number,
146
+ },
147
147
 
148
- outline: {
149
- type: Boolean,
150
- default: false,
151
- },
148
+ outline: {
149
+ type: Boolean,
150
+ default: false,
151
+ },
152
152
 
153
- labelProps: {
154
- type: Object,
155
- description: 'Object with props, passed down to wt-label as props',
156
- },
153
+ labelProps: {
154
+ type: Object,
155
+ description: 'Object with props, passed down to wt-label as props',
157
156
  },
157
+ },
158
158
 
159
- data: () => ({
160
- inputType: '',
161
- isPasswordVisible: false,
162
- }),
159
+ data: () => ({
160
+ inputType: '',
161
+ isPasswordVisible: false,
162
+ }),
163
163
 
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';
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
- this.inputType = inputType;
182
- },
180
+ }
181
+ this.inputType = inputType;
183
182
  },
184
183
  },
184
+ },
185
185
 
186
- computed: {
187
- hasLabel() {
188
- return !!(this.label || this.$slots.label);
189
- },
186
+ computed: {
187
+ hasLabel() {
188
+ return !!(this.label || this.$slots.label);
189
+ },
190
190
 
191
- requiredLabel() {
192
- return this.required ? `${this.label}*` : this.label;
193
- },
191
+ requiredLabel() {
192
+ return this.required ? `${this.label}*` : this.label;
193
+ },
194
194
 
195
- isPassword() {
196
- return this.type === 'password' && this.hasShowPassword;
197
- },
195
+ isPassword() {
196
+ return this.type === 'password' && this.hasShowPassword;
197
+ },
198
198
 
199
- showPasswordIcon() {
200
- return this.isPasswordVisible ? 'eye--closed' : 'eye--opened';
201
- },
199
+ showPasswordIcon() {
200
+ return this.isPasswordVisible ? 'eye--closed' : 'eye--opened';
201
+ },
202
202
 
203
- listeners() {
204
- return {
205
- ...this.$listeners,
206
- input: this.inputHandler,
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
- switchVisibilityPassword() {
216
- this.isPasswordVisible = !this.isPasswordVisible;
217
- this.inputType = this.isPasswordVisible ? 'text' : 'password';
218
- },
215
+ switchVisibilityPassword() {
216
+ this.isPasswordVisible = !this.isPasswordVisible;
217
+ this.inputType = this.isPasswordVisible ? 'text' : 'password';
218
+ },
219
219
 
220
- async updateInputPaddings() {
221
- await this.$nextTick();
220
+ async updateInputPaddings() {
221
+ this.setTimeout(() => {
222
222
  // cant test this thing cause vue test utils doesnt render elements width :/
223
223
  const afterWrapperWidth = this.$refs['after-wrapper'].offsetWidth;
224
224
  const inputEl = this.$refs['wt-input'];
225
225
  const defaultInputPadding = getComputedStyle(document.documentElement)
226
226
  .getPropertyValue('--input-padding');
227
- console.info('ipnut:', defaultInputPadding, afterWrapperWidth, defaultInputPadding*2+afterWrapperWidth);
227
+ console.info('ipnut:', defaultInputPadding, afterWrapperWidth, defaultInputPadding * 2 + afterWrapperWidth);
228
228
  inputEl.style.paddingRight = `calc(${defaultInputPadding} * 2 + ${afterWrapperWidth}px)`;
229
- },
230
- },
231
- mounted() {
232
- this.updateInputPaddings();
229
+ }, 100);
233
230
  },
231
+ },
232
+ mounted() {
233
+ this.updateInputPaddings();
234
+ },
234
235
  };
235
236
  </script>
236
237
 
237
238
  <style lang="scss" scoped>
238
- .wt-input {
239
- cursor: text;
239
+ .wt-input {
240
+ cursor: text;
240
241
 
241
- &--disabled {
242
- pointer-events: none;
243
- }
242
+ &--disabled {
243
+ pointer-events: none;
244
244
  }
245
+ }
245
246
 
246
- .wt-input__wrapper {
247
- position: relative;
248
- }
247
+ .wt-input__wrapper {
248
+ position: relative;
249
+ }
249
250
 
250
- .wt-label {
251
- .wt-input:hover &,
252
- .wt-input:focus-within & {
253
- color: var(--form-label--hover-color);
254
- }
251
+ .wt-label {
252
+ .wt-input:hover &,
253
+ .wt-input:focus-within & {
254
+ color: var(--form-label--hover-color);
255
+ }
255
256
 
256
- .wt-input--invalid:hover &,
257
- .wt-input--invalid:focus-within & {
258
- color: var(--label--invalid-color);
259
- }
257
+ .wt-input--invalid:hover &,
258
+ .wt-input--invalid:focus-within & {
259
+ color: var(--label--invalid-color);
260
260
  }
261
+ }
261
262
 
262
- .wt-input__input {
263
- @extend %typo-body-1;
264
- @include wt-placeholder;
263
+ .wt-input__input {
264
+ @extend %typo-body-1;
265
+ @include wt-placeholder;
265
266
 
266
- display: block;
267
- width: 100%;
268
- box-sizing: border-box;
269
- padding: var(--input-padding);
270
- color: var(--form-input-color);
271
- border: var(--input-border);
272
- border-color: var(--form-border-color);
273
- border-radius: var(--border-radius);
274
- transition: var(--transition);
267
+ display: block;
268
+ box-sizing: border-box;
269
+ width: 100%;
270
+ padding: var(--input-padding);
271
+ transition: var(--transition);
272
+ color: var(--form-input-color);
273
+ border: var(--input-border);
274
+ border-color: var(--form-border-color);
275
+ border-radius: var(--border-radius);
275
276
 
276
- &:focus {
277
- @include wt-placeholder('focus');
278
- border-color: var(--form-border--hover-color);
279
- }
277
+ &:focus {
278
+ @include wt-placeholder('focus');
279
+ border-color: var(--form-border--hover-color);
280
+ }
280
281
 
281
- .wt-input--outline & {
282
- border-color: var(--form-outline-border-color);
283
- }
282
+ .wt-input--outline & {
283
+ border-color: var(--form-outline-border-color);
284
+ }
284
285
 
285
- .wt-input--outline:hover &,
286
- .wt-input--outline &:focus {
287
- border-color: var(--form-outline-border--hover-color);
288
- }
286
+ .wt-input--outline:hover &,
287
+ .wt-input--outline &:focus {
288
+ border-color: var(--form-outline-border--hover-color);
289
+ }
289
290
 
290
- .wt-input--invalid &,
291
- .wt-input--invalid:hover & {
292
- border-color: var(--false-color);
293
- outline: none; // prevent outline overlapping false color
294
- }
291
+ .wt-input--invalid &,
292
+ .wt-input--invalid:hover & {
293
+ border-color: var(--false-color);
294
+ outline: none; // prevent outline overlapping false color
295
+ }
295
296
 
296
- .wt-input--disabled & {
297
- @include wt-placeholder('disabled');
298
- background: var(--form-border--disabled-color);
299
- border-color: var(--form-border--disabled-color);
300
- }
297
+ .wt-input--disabled & {
298
+ @include wt-placeholder('disabled');
299
+ border-color: var(--form-border--disabled-color);
300
+ background: var(--form-border--disabled-color);
301
301
  }
302
+ }
302
303
 
303
- .wt-input__after-wrapper {
304
- display: flex;
305
- gap: var(--input-after-wrapper-gap);
306
- align-items: center;
307
- position: absolute;
308
- top: 50%;
309
- right: var(--input-icon-margin);
310
- transform: translateY(-50%);
311
- pointer-events: auto; // override --disabled p-events none
304
+ .wt-input__after-wrapper {
305
+ position: absolute;
306
+ top: 50%;
307
+ right: var(--input-icon-margin);
308
+ display: flex;
309
+ align-items: center;
310
+ transform: translateY(-50%);
311
+ pointer-events: auto; // override --disabled p-events none
312
+ gap: var(--input-after-wrapper-gap);
312
313
 
313
- .wt-input__password-button {
314
- .wt-input--disabled & ::v-deep .wt-icon__icon {
315
- fill: var(--icon-color-disabled);
316
- }
314
+ .wt-input__password-button {
315
+ .wt-input--disabled & ::v-deep .wt-icon__icon {
316
+ fill: var(--icon-color-disabled);
317
+ }
317
318
 
318
- .wt-input:hover & ::v-deep .wt-icon__icon,
319
- .wt-input:focus-within & ::v-deep .wt-icon__icon {
320
- fill: var(--icon-color--hover);
321
- }
319
+ .wt-input:hover & ::v-deep .wt-icon__icon,
320
+ .wt-input:focus-within & ::v-deep .wt-icon__icon {
321
+ fill: var(--icon-color--hover);
322
322
  }
323
323
  }
324
+ }
324
325
  </style>