plugin-ui-for-kzt 0.0.9 → 0.0.10
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/example/App.vue +355 -0
- package/example/index.html +12 -0
- package/example/main.ts +8 -0
- package/example/shims-vue.d.ts +5 -0
- package/package.json +17 -7
- package/src/assets/icons/arrow-down.svg +3 -0
- package/src/assets/icons/calendar.svg +12 -0
- package/src/assets/icons/checkbox-circle.svg +3 -0
- package/src/assets/icons/checkbox.svg +3 -0
- package/src/assets/icons/email-sms.svg +4 -0
- package/src/assets/icons/help.svg +3 -0
- package/src/assets/icons/kg.svg +16 -0
- package/src/assets/icons/kz.svg +42 -0
- package/src/assets/icons/loader.svg +13 -0
- package/src/assets/icons/ru.svg +12 -0
- package/src/assets/icons/uz.svg +26 -0
- package/src/components/BaseBreadCrumbs/BaseBreadCrumbs.vue +142 -0
- package/src/components/BaseBreadCrumbs/README.md +49 -0
- package/src/components/BaseButton/BaseButton.vue +489 -0
- package/src/components/BaseButton/README.md +53 -0
- package/src/components/BaseCalendar/BaseCalendar.vue +231 -0
- package/src/components/BaseCalendar/README.md +126 -0
- package/src/components/BaseCheckbox/BaseCheckbox.vue +252 -0
- package/src/components/BaseCheckbox/README.md +110 -0
- package/src/components/BaseDropdown/BaseDropdown.vue +160 -0
- package/src/components/BaseDropdown/README.md +91 -0
- package/src/components/BaseIcon/BaseIcon.vue +47 -0
- package/src/components/BaseIcon/README.md +35 -0
- package/src/components/BaseInput/BaseInput.vue +300 -0
- package/src/components/BaseInput/README.md +85 -0
- package/src/components/BaseInputCalendar/BaseInputCalendar.vue +242 -0
- package/src/components/BaseInputCalendar/README.md +84 -0
- package/src/components/BaseInputCurrency/BaseInputCurrency.vue +198 -0
- package/src/components/BaseInputCurrency/README.md +57 -0
- package/src/components/BaseInputEmail/BaseInputEmail.vue +89 -0
- package/src/components/BaseInputEmail/README.md +71 -0
- package/src/components/BaseInputPhone/BaseInputPhone.vue +175 -0
- package/src/components/BaseLoader/BaseLoader.vue +45 -0
- package/src/components/BaseLoader/README.md +29 -0
- package/src/components/BaseOpenedListItem/BaseOpenedListItem.vue +216 -0
- package/src/components/BaseOpenedListItem/README.md +67 -0
- package/src/components/BaseRadio/BaseRadio.vue +283 -0
- package/src/components/BaseRadio/README.md +74 -0
- package/src/components/BaseSegmentedButtons/BaseSegmentedButtons.vue +89 -0
- package/src/components/BaseSegmentedButtons/README.md +75 -0
- package/src/components/BaseSelect/BaseSelect.vue +370 -0
- package/src/components/BaseSelect/README.md +95 -0
- package/src/components/BaseSiteInput/BaseSiteInput.vue +153 -0
- package/src/components/BaseTextarea/BaseTextarea.vue +212 -0
- package/src/components/BaseTextarea/README.md +75 -0
- package/src/components/BaseToggle/BaseToggle.vue +271 -0
- package/src/components/BaseToggle/README.md +76 -0
- package/src/components/BaseTooltip/BaseTooltip.vue +318 -0
- package/src/components/BaseTooltip/README.md +74 -0
- package/src/components/Modal/Modal.vue +3 -1
- package/src/components/Spinner/Spinner.vue +2 -1
- package/src/composables/kit/color.ts +14 -0
- package/src/composables/kit/interactive.ts +53 -0
- package/src/composables/kit/size.ts +15 -0
- package/src/composables/kit/state.ts +28 -0
- package/src/composables/kit/style.ts +18 -0
- package/src/composables/kit/utils.ts +7 -0
- package/src/icons/index.ts +9 -0
- package/src/index.ts +93 -2
- package/src/shims-context.d.ts +19 -0
- package/src/styles/index.scss +2 -1
- package/src/styles/root.scss +167 -0
- package/src/styles/variables.scss +160 -0
- package/src/types/breadcrumbs.d.ts +13 -0
- package/src/types/button.d.ts +13 -0
- package/src/types/calendar.d.ts +16 -0
- package/src/types/checkbox-radio.d.ts +15 -0
- package/src/types/dropdown.d.ts +20 -0
- package/src/types/icon.d.ts +8 -0
- package/src/types/input.d.ts +56 -0
- package/src/types/toggle.d.ts +12 -0
- package/src/types/tooltip.d.ts +8 -0
- package/src/types/utils.d.ts +37 -0
- package/src/vue-virtual-scroller.d.ts +9 -0
- package/tsconfig.json +3 -1
- package/webpack.config.js +90 -35
- package/dist/components/DataTable/DataTable.vue.d.ts +0 -3
- package/dist/components/Modal/Modal.vue.d.ts +0 -3
- package/dist/components/Spinner/Spinner.vue.d.ts +0 -3
- package/dist/components/Toaster/Toaster.vue.d.ts +0 -3
- package/dist/components/Toaster/timer.d.ts +0 -12
- package/dist/components/Tooltip/Tooltip.vue.d.ts +0 -3
- package/dist/index.d.ts +0 -11
- package/dist/index.js +0 -4929
- package/dist/plugins/modalPlugin.d.ts +0 -17
- package/dist/plugins/toasterPlugin.d.ts +0 -26
- package/dist/store/modal.d.ts +0 -11
- package/dist/types/index.d.ts +0 -5
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
### BaseCheckbox
|
|
2
|
+
|
|
3
|
+
Компонент для создания флажка (чекбокса) с поддержкой состояния "выбран" и "не выбран". Он может быть использован для выбора одного или нескольких значений в форме или списке.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
#### Props
|
|
8
|
+
|
|
9
|
+
- `id: string`
|
|
10
|
+
Идентификатор элемента чекбокса. Используется для связывания с меткой.
|
|
11
|
+
|
|
12
|
+
- `modelValue: boolean`
|
|
13
|
+
Состояние чекбокса, которое управляется через двустороннюю привязку. Если `true`, чекбокс активен (выбран).
|
|
14
|
+
|
|
15
|
+
- `name?: string`
|
|
16
|
+
Имя чекбокса, полезно для группировки чекбоксов в форме.
|
|
17
|
+
|
|
18
|
+
- `label?: string`
|
|
19
|
+
Основной текст, который отображается рядом с чекбоксом.
|
|
20
|
+
|
|
21
|
+
- `subLabel?: string`
|
|
22
|
+
Дополнительный текст, который отображается под основным лейблом.
|
|
23
|
+
|
|
24
|
+
- `labelPosition?: 'left' | 'right'`
|
|
25
|
+
Определяет, с какой стороны будет отображаться текст метки: слева или справа от чекбокса.
|
|
26
|
+
|
|
27
|
+
- `readonly?: boolean`
|
|
28
|
+
Если `true`, чекбокс становится только для чтения и не реагирует на клики.
|
|
29
|
+
|
|
30
|
+
- `size: 'small' | 'medium'`
|
|
31
|
+
Размер чекбокса. Может быть `'small'` или `'medium'`.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
#### Важные особенности
|
|
36
|
+
|
|
37
|
+
- **Управление состоянием:**
|
|
38
|
+
Состояние чекбокса управляется с помощью двусторонней привязки через `modelValue`. Когда значение меняется, это событие передаётся через `update:modelValue`.
|
|
39
|
+
|
|
40
|
+
- **Анимация:**
|
|
41
|
+
При активировании чекбокса появляется анимация для иконки, которая представляет галочку. Эта анимация плавно появляется с увеличением масштаба и исчезает, когда чекбокс неактивен.
|
|
42
|
+
|
|
43
|
+
- **Адаптивность:**
|
|
44
|
+
Чекбокс поддерживает два размера: `small`, `medium` и `large`, каждый из которых имеет свою стилизацию для иконки и текста.
|
|
45
|
+
|
|
46
|
+
- **Состояния:**
|
|
47
|
+
Компонент поддерживает разные состояния, такие как `readonly` (чекбокс только для чтения), а также стандартные состояния активности (открытый/закрытый).
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
#### Пример использования
|
|
52
|
+
|
|
53
|
+
```vue
|
|
54
|
+
<BaseCheckbox v-model="isChecked" label="Accept terms and conditions" size="small">
|
|
55
|
+
<template #label>
|
|
56
|
+
<span>Agree to terms</span>
|
|
57
|
+
</template>
|
|
58
|
+
</BaseCheckbox>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
#### Логика
|
|
64
|
+
|
|
65
|
+
- **Переключение состояния:**
|
|
66
|
+
При клике на чекбокс вызывается функция `handleToggle`, которая инвертирует состояние чекбокса (`model.value`).
|
|
67
|
+
|
|
68
|
+
- **Передача атрибутов:**
|
|
69
|
+
Чекбокс принимает дополнительные атрибуты через `attrs`, которые могут быть переданы родительским компонентом (например, `id`, `disabled`).
|
|
70
|
+
|
|
71
|
+
- **Классы для стилей:**
|
|
72
|
+
Классы для разных состояний и размеров генерируются с использованием композиционных функций `useKitSize` и `useKitState`.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
#### Стилизация
|
|
77
|
+
|
|
78
|
+
- **Иконка чекбокса:**
|
|
79
|
+
Иконка чекбокса представляет собой стандартную галочку, которая появляется при активации. Её анимация включает плавное увеличение и появление.
|
|
80
|
+
|
|
81
|
+
- **Стили для состояния "disabled":**
|
|
82
|
+
Когда чекбокс находится в состоянии "disabled", его внешний вид изменяется, а взаимодействие с ним блокируется.
|
|
83
|
+
|
|
84
|
+
- **Мелкие и крупные размеры:**
|
|
85
|
+
Для разных размеров чекбокса изменяются размеры иконки, текстов и общая компоновка.
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
#### Стили для состояний
|
|
90
|
+
|
|
91
|
+
```scss
|
|
92
|
+
.base-checkbox.--is-active {
|
|
93
|
+
.base-checkbox__icon-wrapper {
|
|
94
|
+
background: var(--primary-blue-50);
|
|
95
|
+
border-color: var(--primary-blue);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.base-checkbox__icon {
|
|
99
|
+
opacity: 1;
|
|
100
|
+
transform: translate(-50%, -50%) scale(1);
|
|
101
|
+
animation: checkmark-appear 0.3s ease-out forwards;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Эти стили отвечают за активное состояние чекбокса. Иконка и обводка меняются, а также добавляется анимация появления галочки.
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
Этот компонент подходит для создания чекбоксов с гибкими возможностями для стилизации и управления состоянием в рамках различных интерфейсов.
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="dropdown" :class="[classList]">
|
|
3
|
+
<div
|
|
4
|
+
ref="wrapperRef"
|
|
5
|
+
class="dropdown__wrapper"
|
|
6
|
+
>
|
|
7
|
+
<div
|
|
8
|
+
ref="topRef"
|
|
9
|
+
tabindex="0"
|
|
10
|
+
class="dropdown__top"
|
|
11
|
+
@click.prevent.stop="() => onToggle()"
|
|
12
|
+
@keydown.enter="handleEnterKey"
|
|
13
|
+
>
|
|
14
|
+
<slot name="top" />
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<transition
|
|
18
|
+
:name="transitionName || 'default-transition'"
|
|
19
|
+
mode="out-in"
|
|
20
|
+
>
|
|
21
|
+
<div
|
|
22
|
+
v-if="isOpened"
|
|
23
|
+
:style="dropdownStyleList"
|
|
24
|
+
class="dropdown__dropdown"
|
|
25
|
+
@click="handleDropdownClick"
|
|
26
|
+
>
|
|
27
|
+
<slot name="dropdown" />
|
|
28
|
+
</div>
|
|
29
|
+
</transition>
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
</template>
|
|
33
|
+
|
|
34
|
+
<script setup lang="ts">
|
|
35
|
+
import { computed, ref, watch } from 'vue';
|
|
36
|
+
import { onClickOutside, useElementBounding } from '@vueuse/core';
|
|
37
|
+
import type { ICoreDropdownProps } from '../../types/dropdown';
|
|
38
|
+
import { useKitSize } from '../../composables/kit/size'
|
|
39
|
+
import { useKitState } from '../../composables/kit/state'
|
|
40
|
+
|
|
41
|
+
type TModelValue = boolean;
|
|
42
|
+
|
|
43
|
+
const props = withDefaults(defineProps<ICoreDropdownProps>(), {
|
|
44
|
+
size: 'medium',
|
|
45
|
+
color: 'primary',
|
|
46
|
+
});
|
|
47
|
+
const emit = defineEmits<{
|
|
48
|
+
'update:modelValue': [value: TModelValue]
|
|
49
|
+
}>();
|
|
50
|
+
|
|
51
|
+
const model = computed({
|
|
52
|
+
get: () => props.modelValue,
|
|
53
|
+
set: (val) => emit('update:modelValue', val),
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
const { sizeClassList } = useKitSize(props);
|
|
58
|
+
const { stateClassList } = useKitState(props);
|
|
59
|
+
|
|
60
|
+
const wrapperRef = ref<HTMLDivElement>();
|
|
61
|
+
const topRef = ref<HTMLDivElement>();
|
|
62
|
+
const { width: topWidth } = useElementBounding(topRef);
|
|
63
|
+
|
|
64
|
+
const isOpened = ref<TModelValue>(false);
|
|
65
|
+
|
|
66
|
+
const dropdownStyleList = computed(() => ({
|
|
67
|
+
...(props.parentWidth && {
|
|
68
|
+
width: `${topWidth.value}px`,
|
|
69
|
+
}),
|
|
70
|
+
}));
|
|
71
|
+
|
|
72
|
+
const transitionName = computed(() => props.transitionName || 'fade');
|
|
73
|
+
|
|
74
|
+
function onToggle(value?: TModelValue, immediate?: boolean) {
|
|
75
|
+
if ((props.preventControl || props.disabled) && !immediate) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const newValue = typeof value === 'undefined' ? !isOpened.value : value;
|
|
80
|
+
|
|
81
|
+
if (!props.preventControl || immediate) {
|
|
82
|
+
isOpened.value = newValue;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
emit('update:modelValue', newValue);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function handleEnterKey(event: KeyboardEvent) {
|
|
89
|
+
if (event.code === 'Enter') {
|
|
90
|
+
onToggle();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function handleDropdownClick() {
|
|
95
|
+
if (props.autoClose) {
|
|
96
|
+
onToggle(false);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
watch(
|
|
101
|
+
() => model.value,
|
|
102
|
+
(val) => {
|
|
103
|
+
onToggle(val, true);
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
immediate: true,
|
|
107
|
+
},
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
onClickOutside(wrapperRef, () => {
|
|
111
|
+
onToggle(false, true);
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
const classList = computed(() => [
|
|
115
|
+
sizeClassList.value,
|
|
116
|
+
stateClassList.value,
|
|
117
|
+
|
|
118
|
+
{
|
|
119
|
+
'--is-opened': isOpened.value,
|
|
120
|
+
},
|
|
121
|
+
]);
|
|
122
|
+
</script>
|
|
123
|
+
|
|
124
|
+
<style scoped lang="scss">
|
|
125
|
+
@import '../../styles/variables';
|
|
126
|
+
@import '../../styles/root';
|
|
127
|
+
|
|
128
|
+
.dropdown {
|
|
129
|
+
&__wrapper {
|
|
130
|
+
position: relative;
|
|
131
|
+
width: 100%;
|
|
132
|
+
height: 100%;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
&__top {
|
|
136
|
+
cursor: pointer;
|
|
137
|
+
outline: none;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
&__dropdown {
|
|
141
|
+
position: absolute;
|
|
142
|
+
z-index: 3;
|
|
143
|
+
margin-top: var(--spacing-s);
|
|
144
|
+
overflow-x: hidden;
|
|
145
|
+
overflow-y: auto;
|
|
146
|
+
width: 280px;
|
|
147
|
+
height: auto;
|
|
148
|
+
max-height: 320px;
|
|
149
|
+
background: var(--bg-light);
|
|
150
|
+
padding: var(--spacing-xs) 0;
|
|
151
|
+
border: 1px solid var(--primary-black-100);
|
|
152
|
+
border-radius: var(--corner-radius-m);
|
|
153
|
+
box-shadow: 0px 4px 6px -2px var(--effects-dropdown-shadows-100);
|
|
154
|
+
|
|
155
|
+
@include scrollbar;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
@include is-disabled-state;
|
|
159
|
+
}
|
|
160
|
+
</style>
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
### BaseDropdown
|
|
2
|
+
|
|
3
|
+
Компонент для создания выпадающего списка, который можно контролировать с помощью пропсов и событий. Он поддерживает открытие и закрытие списка, а также различные стили и размеры.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
#### Props
|
|
8
|
+
|
|
9
|
+
- `size: string`
|
|
10
|
+
Размер компонента. Может быть `'small'`, `'medium'` или `'large'`. По умолчанию используется `'medium'`.
|
|
11
|
+
|
|
12
|
+
- `modelValue: boolean`
|
|
13
|
+
Состояние открытия/закрытия выпадающего списка. Это двусторонняя привязка. Управляется внешним компонентом.
|
|
14
|
+
|
|
15
|
+
- `parentWidth: boolean`
|
|
16
|
+
Устанавливает ширину выпадающего списка, равную ширине элемента, на который наведен фокус.
|
|
17
|
+
|
|
18
|
+
- `transitionName: string`
|
|
19
|
+
Название анимации для перехода. По умолчанию используется `'fade'`.
|
|
20
|
+
|
|
21
|
+
- `autoClose: boolean`
|
|
22
|
+
Определяет, должен ли список закрываться автоматически при клике внутри него. По умолчанию это включено.
|
|
23
|
+
|
|
24
|
+
- `disabled: boolean`
|
|
25
|
+
Определяет, может ли компонент быть активным. Если `true`, компоненты не будут взаимодействовать.
|
|
26
|
+
|
|
27
|
+
- `preventControl: boolean`
|
|
28
|
+
Устанавливает, можно ли вручную контролировать состояние открытия/закрытия компонента. Если установлено в `true`, то компоненты будут использовать только внутреннее состояние.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
#### Важные особенности
|
|
33
|
+
|
|
34
|
+
- **Управление состоянием:**
|
|
35
|
+
Состояние открытия/закрытия контролируется через `modelValue`, что позволяет родительскому компоненту управлять этим состоянием. Однако также можно использовать внутреннее состояние через `isOpened`.
|
|
36
|
+
|
|
37
|
+
- **Анимации:**
|
|
38
|
+
Компонент поддерживает анимации перехода через свойство `transitionName`. По умолчанию используется плавное исчезновение.
|
|
39
|
+
|
|
40
|
+
- **Закрытие при клике вне:**
|
|
41
|
+
Если компонент открыт, он автоматически закроется при клике вне его области (с помощью `onClickOutside`).
|
|
42
|
+
|
|
43
|
+
- **Поддержка размеров:**
|
|
44
|
+
Размер компонента управляется через проп `size` с использованием CSS-классов для различных размеров.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
#### Пример использования
|
|
49
|
+
|
|
50
|
+
```vue
|
|
51
|
+
<BaseDropdown v-model="isOpen" size="small">
|
|
52
|
+
<template #top>
|
|
53
|
+
<button>Click to toggle dropdown</button>
|
|
54
|
+
</template>
|
|
55
|
+
|
|
56
|
+
<template #dropdown>
|
|
57
|
+
<ul>
|
|
58
|
+
<li>Option 1</li>
|
|
59
|
+
<li>Option 2</li>
|
|
60
|
+
<li>Option 3</li>
|
|
61
|
+
</ul>
|
|
62
|
+
</template>
|
|
63
|
+
</BaseDropdown>
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
#### Логика
|
|
69
|
+
|
|
70
|
+
- **Открытие/закрытие:**
|
|
71
|
+
Функция `onToggle` контролирует открытие/закрытие выпадающего списка. Она может быть вызвана при клике на элемент или по нажатию клавиши Enter.
|
|
72
|
+
|
|
73
|
+
- **Автозакрытие:**
|
|
74
|
+
При клике на выпадающий список или на элемент внутри него (если `autoClose` истинно) список будет закрываться.
|
|
75
|
+
|
|
76
|
+
- **Обработчик клавиши Enter:**
|
|
77
|
+
При нажатии клавиши `Enter` срабатывает функция `onToggle`, открывая или закрывая выпадающий список.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
#### Стилизация
|
|
82
|
+
|
|
83
|
+
- **Позиционирование:**
|
|
84
|
+
Выпадающий список позиционируется относительно родительского элемента с использованием абсолютного позиционирования.
|
|
85
|
+
|
|
86
|
+
- **Активные/неактивные состояния:**
|
|
87
|
+
Включены стили для отображения состояния компонента, когда он в состоянии "disabled" или когда выпадающий список открыт.
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
Компонент идеально подходит для реализации выпадающих меню, селекторов или других интерфейсов, где необходимо управлять открытием и закрытием элементов через UI-элементы.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<svg class="base-icon" :class="sizeClassList" aria-hidden="true">
|
|
3
|
+
<use :xlink:href="`#${name}`" />
|
|
4
|
+
</svg>
|
|
5
|
+
</template>
|
|
6
|
+
|
|
7
|
+
<script setup lang="ts">
|
|
8
|
+
import type { TIconProps } from "../../types/icon";
|
|
9
|
+
import { useKitSize } from '../../composables/kit/size'
|
|
10
|
+
|
|
11
|
+
const props = withDefaults(defineProps<TIconProps>(), {
|
|
12
|
+
size: 'medium',
|
|
13
|
+
});
|
|
14
|
+
const { sizeClassList } = useKitSize(props);
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<style lang="scss" scoped>
|
|
18
|
+
@import '../../styles/variables';
|
|
19
|
+
@import '../../styles/root';
|
|
20
|
+
|
|
21
|
+
.base-icon {
|
|
22
|
+
display: block;
|
|
23
|
+
width: 100%;
|
|
24
|
+
height: 100%;
|
|
25
|
+
fill: currentColor;
|
|
26
|
+
|
|
27
|
+
&.--extra-small-size {
|
|
28
|
+
width: 20px;
|
|
29
|
+
height: 20px;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
&.--small-size {
|
|
33
|
+
width: 20px;
|
|
34
|
+
height: 20px;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
&.--medium-size {
|
|
38
|
+
width: 24px;
|
|
39
|
+
height: 24px;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
&.--large-size {
|
|
43
|
+
width: 32px;
|
|
44
|
+
height: 32px;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
</style>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
### BaseIcon
|
|
2
|
+
|
|
3
|
+
Компонент для отображения иконок в формате SVG. Используется для отображения иконок через ссылку на SVG-спрайт.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
#### Props
|
|
8
|
+
|
|
9
|
+
- `name: string`
|
|
10
|
+
Имя иконки, которое будет использовано для отображения соответствующего символа из спрайта. Это обязательный параметр.
|
|
11
|
+
|
|
12
|
+
- `size: 'small' | 'medium' | 'large' | 'custom'`
|
|
13
|
+
Размер компонента. Определяет размеры иконок и поля ввода. По умолчанию — `medium`.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
#### Важные особенности
|
|
18
|
+
|
|
19
|
+
- **Динамическое изменение размера:**
|
|
20
|
+
Размер иконки можно контролировать через проп `size`, что позволяет использовать компонент с разными размерами без необходимости изменения стилей.
|
|
21
|
+
|
|
22
|
+
- **SVG-спрайт:**
|
|
23
|
+
Иконка загружается из спрайта, используя атрибут `xlink:href`, ссылаясь на иконку по её имени. Это предполагает использование SVG спрайтов, где каждая иконка хранится внутри одного файла.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
#### Пример использования
|
|
28
|
+
|
|
29
|
+
```vue
|
|
30
|
+
<BaseIcon name="calendar" size="small" />
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
Компонент подходит для отображения иконок с гибкими параметрами, что полезно в контексте интерфейсов, где необходимо обеспечить гибкость в отображении иконок (например, в кнопках или формах).
|