plugin-ui-for-kzt 0.0.53 → 0.0.55
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/components/BaseBadge/BaseBadge.vue.d.ts +1 -1
- package/dist/components/BaseButton/BaseButton.vue.d.ts +6 -2
- package/dist/components/BaseCalendar/BaseCalendar.vue.d.ts +2 -2
- package/dist/components/BaseCheckbox/BaseCheckbox.vue.d.ts +6 -2
- package/dist/components/BaseDropdown/BaseDropdown.vue.d.ts +6 -2
- package/dist/components/BaseField/BaseField.vue.d.ts +3 -3
- package/dist/components/BaseInput/BaseInput.vue.d.ts +2 -2
- package/dist/components/BaseInputCalendar/BaseInputCalendar.vue.d.ts +2 -2
- package/dist/components/BaseInputCurrency/BaseInputCurrency.vue.d.ts +3 -3
- package/dist/components/BaseInputEmail/BaseInputEmail.vue.d.ts +2 -2
- package/dist/components/BaseInputPhone/BaseInputPhone.vue.d.ts +2 -2
- package/dist/components/BaseInputWithSelector/BaseInputWithSelector.vue.d.ts +45 -0
- package/dist/components/BaseOpenedListItem/BaseOpenedListItem.vue.d.ts +6 -2
- package/dist/components/BaseRadio/BaseRadio.vue.d.ts +6 -2
- package/dist/components/BaseSegmentedButtons/BaseSegmentedButtons.vue.d.ts +6 -2
- package/dist/components/BaseSelect/BaseSelect.vue.d.ts +12 -4
- package/dist/components/BaseTextarea/BaseTextarea.vue.d.ts +2 -2
- package/dist/components/BaseToggle/BaseToggle.vue.d.ts +6 -2
- package/dist/index.d.ts +2 -1
- package/dist/index.js +1 -1
- package/dist/sprite.svg +1 -1
- package/dist/store/modal.d.ts +13 -13
- package/dist/utils/debounce.d.ts +1 -0
- package/example/App.vue +26 -1
- package/package.json +1 -1
- package/src/assets/icons/arrow-down-white.svg +3 -0
- package/src/components/BaseInputWithSelector/BaseInputWithSelector.vue +167 -0
- package/src/components/BaseInputWithSelector/README.md +61 -0
- package/src/components/BaseOpenedListItem/BaseOpenedListItem.vue +148 -148
- package/src/components/BaseSelect/BaseSelect.vue +11 -5
- package/src/index.ts +5 -2
- package/src/utils/debounce.ts +8 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# BaseInputWithSelector
|
|
2
|
+
|
|
3
|
+
Vue-компонент, объединяющий текстовое поле ввода и выпадающий список выбора типа. Используется для сценариев, где пользователь вводит значение и одновременно выбирает его категорию, тип или фильтр (например, поиск по ИИН, БИН, номеру документа и т.д.).
|
|
4
|
+
|
|
5
|
+
Компонент состоит из `<base-input>` слева и `<base-select>` справа, визуально объединённых в единый элемент.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Пропсы
|
|
10
|
+
|
|
11
|
+
| Проп | Тип | По умолчанию | Описание |
|
|
12
|
+
|---------------------|---------------------------------------------|--------------|----------|
|
|
13
|
+
| `id` | `string` | `undefined` | Уникальный идентификатор поля ввода. |
|
|
14
|
+
| `modelValue` | `string` | `''` | Значение поля ввода. Поддерживает двустороннюю привязку через `v-model`. |
|
|
15
|
+
| `selectedOptionId` | `string \| number` | `''` | ID выбранной опции в селекторе. Поддерживает двустороннюю привязку. |
|
|
16
|
+
| `options` | `{ id, label, value }[]` | `[]` | Список доступных опций для выбора в селекторе. |
|
|
17
|
+
| `placeholder` | `string` | `''` | Текст-заполнитель поля ввода. |
|
|
18
|
+
| `size` | `'small' \| 'medium' \| 'large'` | `'medium'` | Размер компонента. |
|
|
19
|
+
| `error` | `string` | `undefined` | Сообщение об ошибке. |
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Emits
|
|
24
|
+
|
|
25
|
+
Компонент генерирует следующие события:
|
|
26
|
+
|
|
27
|
+
| Событие | Payload | Описание |
|
|
28
|
+
|--------|---------|----------|
|
|
29
|
+
| `update:modelValue` | `string` | Вызывается при изменении текста в поле ввода. Используется для поддержки `v-model`. |
|
|
30
|
+
| `update:selectedOptionId` | `string \| number` | Вызывается при изменении выбранной опции. Используется для поддержки `v-model:selectedOptionId`. |
|
|
31
|
+
| `search` | `{ value: string; type: string \| number }` | Вызывается при изменении текста или выбранной опции (с debounce 500ms). Используется для выполнения поиска или фильтрации. |
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Использование
|
|
36
|
+
|
|
37
|
+
### Базовый пример
|
|
38
|
+
|
|
39
|
+
```vue
|
|
40
|
+
<template>
|
|
41
|
+
<base-input-with-selector
|
|
42
|
+
id="search"
|
|
43
|
+
v-model="searchValue"
|
|
44
|
+
v-model:selectedOptionId="selectedType"
|
|
45
|
+
:options="options"
|
|
46
|
+
/>
|
|
47
|
+
</template>
|
|
48
|
+
|
|
49
|
+
<script setup lang="ts">
|
|
50
|
+
import { ref } from 'vue'
|
|
51
|
+
|
|
52
|
+
const searchValue = ref('')
|
|
53
|
+
const selectedType = ref('iin')
|
|
54
|
+
|
|
55
|
+
const options = [
|
|
56
|
+
{ id: 'iin', label: 'ИИН', value: 'iin' },
|
|
57
|
+
{ id: 'bin', label: 'БИН', value: 'bin' },
|
|
58
|
+
{ id: 'doc', label: 'Документ', value: 'doc' },
|
|
59
|
+
]
|
|
60
|
+
</script>
|
|
61
|
+
|
|
@@ -1,38 +1,38 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
2
|
+
<component
|
|
3
|
+
:is="actualComponent"
|
|
4
|
+
v-bind="componentAttrs"
|
|
5
|
+
class="base-opened-list-item"
|
|
6
|
+
:class="classList"
|
|
7
|
+
>
|
|
8
|
+
<div class="base-opened-list-item__wrapper">
|
|
9
|
+
<div
|
|
10
|
+
v-if="$slots.icon || icon"
|
|
11
|
+
class="base-opened-list-item__icon"
|
|
12
|
+
>
|
|
13
|
+
<slot
|
|
14
|
+
name="icon"
|
|
15
|
+
:icon="icon"
|
|
16
|
+
>
|
|
17
|
+
</slot>
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
<span class="base-opened-list-item__text">
|
|
21
21
|
<slot />
|
|
22
22
|
</span>
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
24
|
+
<div
|
|
25
|
+
v-if="active"
|
|
26
|
+
class="base-opened-list-item__postfix-icon"
|
|
27
|
+
>
|
|
28
|
+
|
|
29
|
+
<base-icon
|
|
30
|
+
name="checkbox-circle"
|
|
31
|
+
:size="size"
|
|
32
|
+
/>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
</component>
|
|
36
36
|
</template>
|
|
37
37
|
|
|
38
38
|
<script setup lang="ts">
|
|
@@ -80,137 +80,137 @@ const actualComponent = computed(() => {
|
|
|
80
80
|
@import '../../styles/root';
|
|
81
81
|
|
|
82
82
|
.base-opened-list-item {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
83
|
+
$item: &;
|
|
84
|
+
|
|
85
|
+
display: block;
|
|
86
|
+
padding: 0;
|
|
87
|
+
user-select: none;
|
|
88
|
+
background-color: transparent;
|
|
89
|
+
border: none;
|
|
90
|
+
border-radius: 0;
|
|
91
|
+
outline: none;
|
|
92
|
+
width: 100%;
|
|
93
|
+
display: flex;
|
|
94
|
+
|
|
95
|
+
&__wrapper {
|
|
93
96
|
display: flex;
|
|
97
|
+
align-items: center;
|
|
98
|
+
width: 100%;
|
|
99
|
+
height: 100%;
|
|
100
|
+
text-align: left;
|
|
101
|
+
transition: all var(--transition);
|
|
94
102
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
align-items: center;
|
|
98
|
-
width: 100%;
|
|
99
|
-
height: 100%;
|
|
100
|
-
text-align: left;
|
|
101
|
-
transition: all var(--transition);
|
|
102
|
-
|
|
103
|
-
@include hover {
|
|
104
|
-
background: var(--primary-black-100);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
@include pressed {
|
|
108
|
-
background: var(--primary-blue-100);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
&__icon,
|
|
113
|
-
&__postfix-icon {
|
|
114
|
-
display: flex;
|
|
115
|
-
flex-shrink: 0;
|
|
116
|
-
align-items: center;
|
|
117
|
-
justify-content: center;
|
|
118
|
-
transition: inherit;
|
|
103
|
+
@include hover {
|
|
104
|
+
background: var(--primary-black-100);
|
|
119
105
|
}
|
|
120
106
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
font: var(--ui-typography-body-regular);
|
|
124
|
-
color: var(--primary-text-primary);
|
|
125
|
-
transition: inherit;
|
|
107
|
+
@include pressed {
|
|
108
|
+
background: var(--primary-blue-100);
|
|
126
109
|
}
|
|
110
|
+
}
|
|
127
111
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
112
|
+
&__icon,
|
|
113
|
+
&__postfix-icon {
|
|
114
|
+
display: flex;
|
|
115
|
+
flex-shrink: 0;
|
|
116
|
+
align-items: center;
|
|
117
|
+
justify-content: center;
|
|
118
|
+
transition: inherit;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
&__text {
|
|
122
|
+
flex: 1;
|
|
123
|
+
font: var(--ui-typography-body-regular);
|
|
124
|
+
color: var(--primary-text-primary);
|
|
125
|
+
transition: inherit;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
&.--is-active,
|
|
129
|
+
&.router-link-active,
|
|
130
|
+
&.router-link-exact-active {
|
|
131
|
+
#{$item} {
|
|
132
|
+
&__wrapper {
|
|
133
|
+
background: var(--primary-black-50);
|
|
134
|
+
}
|
|
136
135
|
}
|
|
136
|
+
}
|
|
137
137
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
138
|
+
&.--is-disabled {
|
|
139
|
+
#{$item} {
|
|
140
|
+
&__text {
|
|
141
|
+
color: var(--primary-text-quaternary);
|
|
142
|
+
}
|
|
143
143
|
|
|
144
|
-
|
|
145
|
-
}
|
|
144
|
+
@include is-disabled-state;
|
|
146
145
|
}
|
|
146
|
+
}
|
|
147
147
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
}
|
|
148
|
+
&.--is-active.--is-disabled {
|
|
149
|
+
#{$item} {
|
|
150
|
+
&__wrapper {
|
|
151
|
+
background: var(--primary-black-100);
|
|
152
|
+
}
|
|
154
153
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
&.--small-size {
|
|
157
|
+
#{$item} {
|
|
158
|
+
&__wrapper {
|
|
159
|
+
gap: var(--spacing-s);
|
|
160
|
+
min-height: 40px;
|
|
161
|
+
padding: var(--spacing-s) var(--spacing-2l);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
&__text {
|
|
165
|
+
font: var(--typography-text-m-regular);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
&__icon,
|
|
169
|
+
&__postfix-icon {
|
|
170
|
+
width: 20px;
|
|
171
|
+
height: 20px;
|
|
172
|
+
}
|
|
174
173
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
&.--medium-size {
|
|
177
|
+
#{$item} {
|
|
178
|
+
&__wrapper {
|
|
179
|
+
gap: var(--spacing-m);
|
|
180
|
+
min-height: 48px;
|
|
181
|
+
padding: var(--spacing-m) var(--spacing-2l);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
&__text {
|
|
185
|
+
font: var(--typography-text-m-regular);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
&__icon,
|
|
189
|
+
&__postfix-icon {
|
|
190
|
+
width: 24px;
|
|
191
|
+
height: 24px;
|
|
192
|
+
}
|
|
194
193
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
&.--large-size {
|
|
197
|
+
#{$item} {
|
|
198
|
+
&__wrapper {
|
|
199
|
+
gap: var(--spacing-l);
|
|
200
|
+
min-height: 60px;
|
|
201
|
+
padding: var(--spacing-2l) var(--spacing-l);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
&__text {
|
|
205
|
+
font: var(--typography-text-l-regular);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
&__icon,
|
|
209
|
+
&__postfix-icon {
|
|
210
|
+
width: 32px;
|
|
211
|
+
height: 32px;
|
|
212
|
+
}
|
|
214
213
|
}
|
|
214
|
+
}
|
|
215
215
|
}
|
|
216
216
|
</style>
|
|
@@ -48,10 +48,12 @@
|
|
|
48
48
|
class="base-select__arrow-wrapper"
|
|
49
49
|
>
|
|
50
50
|
<div class="base-select__arrow">
|
|
51
|
-
<
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
<slot name="arrow">
|
|
52
|
+
<base-icon
|
|
53
|
+
name="arrow-down"
|
|
54
|
+
:size="size"
|
|
55
|
+
/>
|
|
56
|
+
</slot>
|
|
55
57
|
</div>
|
|
56
58
|
</div>
|
|
57
59
|
</div>
|
|
@@ -299,6 +301,7 @@ defineSlots<{
|
|
|
299
301
|
header( props: { value: ICoreSelectProps['options'] } ): any;
|
|
300
302
|
headerIcon(): any;
|
|
301
303
|
empty(): any;
|
|
304
|
+
arrow(): any;
|
|
302
305
|
}>();
|
|
303
306
|
</script>
|
|
304
307
|
|
|
@@ -390,9 +393,12 @@ defineSlots<{
|
|
|
390
393
|
&__arrow {
|
|
391
394
|
position: absolute;
|
|
392
395
|
top: 50%;
|
|
396
|
+
display: flex;
|
|
397
|
+
align-items: center;
|
|
398
|
+
justify-content: center;
|
|
393
399
|
color: var(--ui-colors-input-icon-default);
|
|
394
400
|
transition: transform var(--transition);
|
|
395
|
-
transform:
|
|
401
|
+
transform: translateY(-50%);
|
|
396
402
|
}
|
|
397
403
|
|
|
398
404
|
&__input {
|
package/src/index.ts
CHANGED
|
@@ -39,6 +39,7 @@ import BasePageLoader from "./components/BasePageLoader/BasePageLoader.vue";
|
|
|
39
39
|
import BaseTabs from "./components/BaseTabs/BaseTabs.vue";
|
|
40
40
|
import BaseTable from "./components/BaseTable/BaseTable.vue";
|
|
41
41
|
import BaseDefaultPages from "./components/BaseDefaultPages/BaseDefaultPages.vue";
|
|
42
|
+
import BaseInputWithSelector from "./components/BaseInputWithSelector/BaseInputWithSelector.vue";
|
|
42
43
|
|
|
43
44
|
const components = {
|
|
44
45
|
BaseModal,
|
|
@@ -74,7 +75,8 @@ const components = {
|
|
|
74
75
|
BasePageLoader,
|
|
75
76
|
BaseTabs,
|
|
76
77
|
BaseTable,
|
|
77
|
-
BaseDefaultPages
|
|
78
|
+
BaseDefaultPages,
|
|
79
|
+
BaseInputWithSelector,
|
|
78
80
|
};
|
|
79
81
|
|
|
80
82
|
// Функция для загрузки sprite.svg
|
|
@@ -163,5 +165,6 @@ export {
|
|
|
163
165
|
BasePageLoader,
|
|
164
166
|
BaseTabs,
|
|
165
167
|
BaseTable,
|
|
166
|
-
BaseDefaultPages
|
|
168
|
+
BaseDefaultPages,
|
|
169
|
+
BaseInputWithSelector,
|
|
167
170
|
};
|