@weni/unnnic-system 3.12.8 → 3.13.0
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/CHANGELOG.md +12 -0
- package/dist/{es-62c1e8d3.mjs → es-41fceca9.mjs} +1 -1
- package/dist/{index-ef197fd5.mjs → index-cca96b43.mjs} +81802 -81503
- package/dist/index.d.ts +660 -20
- package/dist/{pt-br-198b147b.mjs → pt-br-a3088529.mjs} +1 -1
- package/dist/style.css +1 -1
- package/dist/unnnic.mjs +142 -140
- package/dist/unnnic.umd.js +35 -35
- package/package.json +1 -1
- package/src/components/Input/BaseInput.vue +25 -5
- package/src/components/Input/Input.scss +2 -1
- package/src/components/Input/Input.vue +24 -1
- package/src/components/Input/TextInput.vue +64 -25
- package/src/components/Input/__test__/TextInput.spec.js +1 -1
- package/src/components/Input/__test__/__snapshots__/Input.spec.js.snap +5 -1
- package/src/components/Input/__test__/__snapshots__/TextInput.spec.js.snap +7 -1
- package/src/components/Select/__tests__/Select.spec.js +422 -0
- package/src/components/Select/__tests__/SelectItem.spec.js +330 -0
- package/src/components/Select/__tests__/__snapshots__/Popover.spec.js.snap +8 -0
- package/src/components/Select/__tests__/__snapshots__/Select.spec.js.snap +71 -0
- package/src/components/Select/__tests__/__snapshots__/SelectItem.spec.js.snap +15 -0
- package/src/components/Select/__tests__/__snapshots__/SelectOption.spec.js.snap +25 -0
- package/src/components/Select/__tests__/__snapshots__/SelectPopover.spec.js.snap +8 -0
- package/src/components/Select/index.vue +308 -0
- package/src/components/index.ts +4 -4
- package/src/components/ui/popover/PopoverOption.vue +4 -0
- package/src/locales/en.json +3 -1
- package/src/locales/es.json +3 -1
- package/src/locales/pt_br.json +3 -1
- package/src/stories/Input.mdx +3 -0
- package/src/stories/Select.stories.js +161 -0
package/package.json
CHANGED
|
@@ -4,16 +4,18 @@
|
|
|
4
4
|
v-mask="mask"
|
|
5
5
|
v-bind="attributes"
|
|
6
6
|
:value="fullySanitize(modelValue)"
|
|
7
|
-
:class="classes"
|
|
7
|
+
:class="[classes, { focus, 'use-focus-prop': useFocusProp }]"
|
|
8
8
|
:type="nativeType"
|
|
9
|
+
:readonly="readonly"
|
|
9
10
|
/>
|
|
10
11
|
<input
|
|
11
12
|
v-else
|
|
12
13
|
v-bind="attributes"
|
|
13
14
|
:value="fullySanitize(modelValue)"
|
|
14
|
-
:class="classes"
|
|
15
|
+
:class="[classes, { focus, 'use-focus-prop': useFocusProp }]"
|
|
15
16
|
:type="nativeType"
|
|
16
17
|
:maxlength="maxlength"
|
|
18
|
+
:readonly="readonly"
|
|
17
19
|
/>
|
|
18
20
|
</template>
|
|
19
21
|
|
|
@@ -49,15 +51,25 @@ export default {
|
|
|
49
51
|
},
|
|
50
52
|
hasIconLeft: Boolean,
|
|
51
53
|
hasIconRight: Boolean,
|
|
54
|
+
hasClearIcon: Boolean,
|
|
52
55
|
maxlength: {
|
|
53
56
|
type: Number,
|
|
54
57
|
default: null,
|
|
55
58
|
},
|
|
59
|
+
readonly: {
|
|
60
|
+
type: Boolean,
|
|
61
|
+
default: false,
|
|
62
|
+
},
|
|
63
|
+
useFocusProp: {
|
|
64
|
+
type: Boolean,
|
|
65
|
+
default: false,
|
|
66
|
+
},
|
|
67
|
+
focus: {
|
|
68
|
+
type: Boolean,
|
|
69
|
+
default: false,
|
|
70
|
+
},
|
|
56
71
|
},
|
|
57
72
|
emits: ['update:modelValue'],
|
|
58
|
-
data() {
|
|
59
|
-
return {};
|
|
60
|
-
},
|
|
61
73
|
computed: {
|
|
62
74
|
attributes() {
|
|
63
75
|
return {
|
|
@@ -77,6 +89,7 @@ export default {
|
|
|
77
89
|
{
|
|
78
90
|
'input--has-icon-left': this.hasIconLeft,
|
|
79
91
|
'input--has-icon-right': this.hasIconRight,
|
|
92
|
+
'input--has-clear-icon': this.hasClearIcon,
|
|
80
93
|
},
|
|
81
94
|
];
|
|
82
95
|
},
|
|
@@ -117,6 +130,13 @@ export default {
|
|
|
117
130
|
|
|
118
131
|
&.input--has-icon-right {
|
|
119
132
|
padding-right: $unnnic-space-10;
|
|
133
|
+
&.input--has-clear-icon {
|
|
134
|
+
padding-right: $unnnic-space-10 + $unnnic-space-6;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
&.input--has-clear-icon {
|
|
139
|
+
padding-right: $unnnic-space-10;
|
|
120
140
|
}
|
|
121
141
|
|
|
122
142
|
&.error {
|
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
v-bind="$attrs"
|
|
14
14
|
v-model="val"
|
|
15
15
|
class="unnnic-form-input"
|
|
16
|
+
:useFocusProp="useFocusProp"
|
|
17
|
+
:focus="focus"
|
|
16
18
|
:placeholder="placeholder"
|
|
17
19
|
:iconLeft="iconLeft"
|
|
18
20
|
:iconRight="iconRight"
|
|
@@ -25,6 +27,9 @@
|
|
|
25
27
|
:nativeType="nativeType"
|
|
26
28
|
:maxlength="maxlength"
|
|
27
29
|
:disabled="disabled"
|
|
30
|
+
:readonly="readonly"
|
|
31
|
+
:showClear="showClear"
|
|
32
|
+
@clear="$emit('clear')"
|
|
28
33
|
/>
|
|
29
34
|
|
|
30
35
|
<template
|
|
@@ -127,8 +132,26 @@ export default {
|
|
|
127
132
|
type: Boolean,
|
|
128
133
|
default: false,
|
|
129
134
|
},
|
|
135
|
+
readonly: {
|
|
136
|
+
type: Boolean,
|
|
137
|
+
default: false,
|
|
138
|
+
},
|
|
139
|
+
useFocusProp: {
|
|
140
|
+
type: Boolean,
|
|
141
|
+
default: false,
|
|
142
|
+
},
|
|
143
|
+
focus: {
|
|
144
|
+
type: Boolean,
|
|
145
|
+
default: false,
|
|
146
|
+
},
|
|
147
|
+
showClear: {
|
|
148
|
+
type: Boolean,
|
|
149
|
+
default: false,
|
|
150
|
+
},
|
|
130
151
|
},
|
|
131
|
-
|
|
152
|
+
|
|
153
|
+
emits: ['update:modelValue', 'clear'],
|
|
154
|
+
|
|
132
155
|
data() {
|
|
133
156
|
return {
|
|
134
157
|
val: this.modelValue,
|
|
@@ -12,9 +12,11 @@
|
|
|
12
12
|
class="input-itself"
|
|
13
13
|
:hasIconLeft="!!iconLeft"
|
|
14
14
|
:hasIconRight="!!iconRight || allowTogglePassword"
|
|
15
|
+
:hasClearIcon="showClear"
|
|
15
16
|
:maxlength="maxlength"
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
:readonly="readonly"
|
|
18
|
+
:useFocusProp="useFocusProp"
|
|
19
|
+
:focus="focus"
|
|
18
20
|
/>
|
|
19
21
|
|
|
20
22
|
<UnnnicIcon
|
|
@@ -27,18 +29,28 @@
|
|
|
27
29
|
@click="onIconLeftClick"
|
|
28
30
|
/>
|
|
29
31
|
|
|
30
|
-
<
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
32
|
+
<section class="icon-right-container">
|
|
33
|
+
<UnnnicIcon
|
|
34
|
+
v-if="showClear"
|
|
35
|
+
class="icon-clear"
|
|
36
|
+
:scheme="iconScheme"
|
|
37
|
+
icon="close"
|
|
38
|
+
size="ant"
|
|
39
|
+
clickable
|
|
40
|
+
@click.stop="onClearClick"
|
|
41
|
+
/>
|
|
42
|
+
|
|
43
|
+
<UnnnicIcon
|
|
44
|
+
v-if="iconRightSvg"
|
|
45
|
+
:scheme="iconScheme"
|
|
46
|
+
:icon="iconRightSvg"
|
|
47
|
+
size="ant"
|
|
48
|
+
:clickable="iconRightClickable || allowTogglePassword"
|
|
49
|
+
class="icon-right"
|
|
50
|
+
:class="{ clickable: iconRightClickable || allowTogglePassword }"
|
|
51
|
+
@click="onIconRightClick"
|
|
52
|
+
/>
|
|
53
|
+
</section>
|
|
42
54
|
</div>
|
|
43
55
|
</template>
|
|
44
56
|
|
|
@@ -103,8 +115,24 @@ export default {
|
|
|
103
115
|
type: Boolean,
|
|
104
116
|
default: false,
|
|
105
117
|
},
|
|
118
|
+
readonly: {
|
|
119
|
+
type: Boolean,
|
|
120
|
+
default: false,
|
|
121
|
+
},
|
|
122
|
+
useFocusProp: {
|
|
123
|
+
type: Boolean,
|
|
124
|
+
default: false,
|
|
125
|
+
},
|
|
126
|
+
focus: {
|
|
127
|
+
type: Boolean,
|
|
128
|
+
default: false,
|
|
129
|
+
},
|
|
130
|
+
showClear: {
|
|
131
|
+
type: Boolean,
|
|
132
|
+
default: false,
|
|
133
|
+
},
|
|
106
134
|
},
|
|
107
|
-
emits: ['icon-left-click', 'icon-right-click'],
|
|
135
|
+
emits: ['icon-left-click', 'icon-right-click', 'clear'],
|
|
108
136
|
data() {
|
|
109
137
|
return {
|
|
110
138
|
isFocused: false,
|
|
@@ -128,7 +156,6 @@ export default {
|
|
|
128
156
|
if (this.isDisabled) {
|
|
129
157
|
return 'fg-muted';
|
|
130
158
|
}
|
|
131
|
-
|
|
132
159
|
return 'fg-base';
|
|
133
160
|
},
|
|
134
161
|
|
|
@@ -138,7 +165,7 @@ export default {
|
|
|
138
165
|
},
|
|
139
166
|
|
|
140
167
|
methods: {
|
|
141
|
-
|
|
168
|
+
focusInput() {
|
|
142
169
|
this.$refs['base-input'].$el.focus();
|
|
143
170
|
},
|
|
144
171
|
|
|
@@ -154,6 +181,10 @@ export default {
|
|
|
154
181
|
if (this.iconLeftClickable) this.$emit('icon-left-click');
|
|
155
182
|
},
|
|
156
183
|
|
|
184
|
+
onClearClick() {
|
|
185
|
+
this.$emit('clear');
|
|
186
|
+
},
|
|
187
|
+
|
|
157
188
|
onIconRightClick() {
|
|
158
189
|
if (this.attributes.disabled) return;
|
|
159
190
|
if (this.allowTogglePassword) this.showPassword = !this.showPassword;
|
|
@@ -171,25 +202,33 @@ export default {
|
|
|
171
202
|
}
|
|
172
203
|
|
|
173
204
|
.icon {
|
|
174
|
-
&-left,
|
|
175
|
-
&-right {
|
|
176
|
-
&:not(.clickable) {
|
|
177
|
-
pointer-events: none;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
|
|
181
205
|
&-left {
|
|
182
206
|
position: absolute;
|
|
183
207
|
top: 50%;
|
|
184
208
|
transform: translateY(-50%);
|
|
185
209
|
left: $unnnic-space-4;
|
|
210
|
+
|
|
211
|
+
&:not(.clickable) {
|
|
212
|
+
pointer-events: none;
|
|
213
|
+
}
|
|
186
214
|
}
|
|
187
215
|
|
|
188
|
-
&-right {
|
|
216
|
+
&-right-container {
|
|
189
217
|
position: absolute;
|
|
190
218
|
top: 50%;
|
|
191
219
|
transform: translateY(-50%);
|
|
192
220
|
right: $unnnic-space-4;
|
|
221
|
+
|
|
222
|
+
display: flex;
|
|
223
|
+
align-items: center;
|
|
224
|
+
gap: $unnnic-space-2;
|
|
225
|
+
|
|
226
|
+
.icon-clear {
|
|
227
|
+
cursor: pointer;
|
|
228
|
+
}
|
|
229
|
+
.icon-right:not(.clickable) {
|
|
230
|
+
pointer-events: none;
|
|
231
|
+
}
|
|
193
232
|
}
|
|
194
233
|
}
|
|
195
234
|
</style>
|
|
@@ -129,7 +129,7 @@ describe('TextInput.vue', () => {
|
|
|
129
129
|
|
|
130
130
|
test('focus method calls focus on base input element', () => {
|
|
131
131
|
const focusSpy = vi.spyOn(wrapper.vm.$refs['base-input'].$el, 'focus');
|
|
132
|
-
wrapper.vm.
|
|
132
|
+
wrapper.vm.focusInput();
|
|
133
133
|
|
|
134
134
|
expect(focusSpy).toHaveBeenCalled();
|
|
135
135
|
focusSpy.mockRestore();
|
|
@@ -6,7 +6,11 @@ exports[`Input.vue > matches the snapshot 1`] = `
|
|
|
6
6
|
<p data-v-7f222291="" class="unnnic-label__label">Sample Label</p>
|
|
7
7
|
<!--v-if-->
|
|
8
8
|
</section>
|
|
9
|
-
<div data-v-a0d36167="" data-v-d890ad85="" class="text-input size--md unnnic-form-input" hascloudycolor="false" mask="####-####"><input data-v-86533b41="" data-v-a0d36167="" class="unnnic-form-input input-itself input size-md normal input--has-icon-left input--has-icon-right unnnic-form-input input-itself" hascloudycolor="false" placeholder="Enter text" iconleft="search" iconright="clear" iconleftclickable="true" iconrightclickable="true" type="text" value=""><span data-v-26446d8e="" data-v-a0d36167="" class="unnnic-icon material-symbols-rounded unnnic-icon-scheme--fg-base unnnic-icon-size--ant unnnic-icon__size--ant unnnic--clickable icon-left clickable" data-testid="material-icon" translate="no">search</span
|
|
9
|
+
<div data-v-a0d36167="" data-v-d890ad85="" class="text-input size--md unnnic-form-input" hascloudycolor="false" mask="####-####"><input data-v-86533b41="" data-v-a0d36167="" class="unnnic-form-input input-itself input size-md normal input--has-icon-left input--has-icon-right unnnic-form-input input-itself" hascloudycolor="false" placeholder="Enter text" iconleft="search" iconright="clear" iconleftclickable="true" iconrightclickable="true" showclear="false" type="text" value=""><span data-v-26446d8e="" data-v-a0d36167="" class="unnnic-icon material-symbols-rounded unnnic-icon-scheme--fg-base unnnic-icon-size--ant unnnic-icon__size--ant unnnic--clickable icon-left clickable" data-testid="material-icon" translate="no">search</span>
|
|
10
|
+
<section data-v-a0d36167="" class="icon-right-container">
|
|
11
|
+
<!--v-if--><span data-v-26446d8e="" data-v-a0d36167="" class="unnnic-icon material-symbols-rounded unnnic-icon-scheme--fg-base unnnic-icon-size--ant unnnic-icon__size--ant unnnic--clickable icon-right clickable" data-testid="material-icon" translate="no">clear</span>
|
|
12
|
+
</section>
|
|
13
|
+
</div>
|
|
10
14
|
<section data-v-9f8d6c86="" class="unnnic-form-element__hints-container">
|
|
11
15
|
<section data-v-9f8d6c86="" class="unnnic-form-element__message-container">
|
|
12
16
|
<p data-v-9f8d6c86="" class="unnnic-form-element__message">Error message</p>
|
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
2
|
|
|
3
|
-
exports[`TextInput.vue > matches the snapshot 1`] = `
|
|
3
|
+
exports[`TextInput.vue > matches the snapshot 1`] = `
|
|
4
|
+
"<div data-v-a0d36167="" class="text-input size--md"><input data-v-86533b41="" data-v-a0d36167="" placeholder="Enter text" iconleft="search" iconright="clear" iconleftclickable="true" iconrightclickable="true" allowtogglepassword="false" showclear="false" class="input-itself input size-md normal input--has-icon-left input--has-icon-right input-itself" type="text" value=""><span data-v-26446d8e="" data-v-a0d36167="" class="unnnic-icon material-symbols-rounded unnnic-icon-scheme--fg-base unnnic-icon-size--ant unnnic-icon__size--ant unnnic--clickable icon-left clickable" data-testid="material-icon" translate="no">search</span>
|
|
5
|
+
<section data-v-a0d36167="" class="icon-right-container">
|
|
6
|
+
<!--v-if--><span data-v-26446d8e="" data-v-a0d36167="" class="unnnic-icon material-symbols-rounded unnnic-icon-scheme--fg-base unnnic-icon-size--ant unnnic-icon__size--ant unnnic--clickable icon-right clickable" data-testid="material-icon" translate="no">clear</span>
|
|
7
|
+
</section>
|
|
8
|
+
</div>"
|
|
9
|
+
`;
|