plugin-ui-for-kzt 0.0.8 → 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.
Files changed (90) hide show
  1. package/README.md +21 -9
  2. package/example/App.vue +355 -0
  3. package/example/index.html +12 -0
  4. package/example/main.ts +8 -0
  5. package/example/shims-vue.d.ts +5 -0
  6. package/package.json +17 -7
  7. package/src/assets/icons/arrow-down.svg +3 -0
  8. package/src/assets/icons/calendar.svg +12 -0
  9. package/src/assets/icons/checkbox-circle.svg +3 -0
  10. package/src/assets/icons/checkbox.svg +3 -0
  11. package/src/assets/icons/email-sms.svg +4 -0
  12. package/src/assets/icons/help.svg +3 -0
  13. package/src/assets/icons/kg.svg +16 -0
  14. package/src/assets/icons/kz.svg +42 -0
  15. package/src/assets/icons/loader.svg +13 -0
  16. package/src/assets/icons/ru.svg +12 -0
  17. package/src/assets/icons/uz.svg +26 -0
  18. package/src/components/BaseBreadCrumbs/BaseBreadCrumbs.vue +142 -0
  19. package/src/components/BaseBreadCrumbs/README.md +49 -0
  20. package/src/components/BaseButton/BaseButton.vue +489 -0
  21. package/src/components/BaseButton/README.md +53 -0
  22. package/src/components/BaseCalendar/BaseCalendar.vue +231 -0
  23. package/src/components/BaseCalendar/README.md +126 -0
  24. package/src/components/BaseCheckbox/BaseCheckbox.vue +252 -0
  25. package/src/components/BaseCheckbox/README.md +110 -0
  26. package/src/components/BaseDropdown/BaseDropdown.vue +160 -0
  27. package/src/components/BaseDropdown/README.md +91 -0
  28. package/src/components/BaseIcon/BaseIcon.vue +47 -0
  29. package/src/components/BaseIcon/README.md +35 -0
  30. package/src/components/BaseInput/BaseInput.vue +300 -0
  31. package/src/components/BaseInput/README.md +85 -0
  32. package/src/components/BaseInputCalendar/BaseInputCalendar.vue +242 -0
  33. package/src/components/BaseInputCalendar/README.md +84 -0
  34. package/src/components/BaseInputCurrency/BaseInputCurrency.vue +198 -0
  35. package/src/components/BaseInputCurrency/README.md +57 -0
  36. package/src/components/BaseInputEmail/BaseInputEmail.vue +89 -0
  37. package/src/components/BaseInputEmail/README.md +71 -0
  38. package/src/components/BaseInputPhone/BaseInputPhone.vue +175 -0
  39. package/src/components/BaseLoader/BaseLoader.vue +45 -0
  40. package/src/components/BaseLoader/README.md +29 -0
  41. package/src/components/BaseOpenedListItem/BaseOpenedListItem.vue +216 -0
  42. package/src/components/BaseOpenedListItem/README.md +67 -0
  43. package/src/components/BaseRadio/BaseRadio.vue +283 -0
  44. package/src/components/BaseRadio/README.md +74 -0
  45. package/src/components/BaseSegmentedButtons/BaseSegmentedButtons.vue +89 -0
  46. package/src/components/BaseSegmentedButtons/README.md +75 -0
  47. package/src/components/BaseSelect/BaseSelect.vue +370 -0
  48. package/src/components/BaseSelect/README.md +95 -0
  49. package/src/components/BaseSiteInput/BaseSiteInput.vue +153 -0
  50. package/src/components/BaseTextarea/BaseTextarea.vue +212 -0
  51. package/src/components/BaseTextarea/README.md +75 -0
  52. package/src/components/BaseToggle/BaseToggle.vue +271 -0
  53. package/src/components/BaseToggle/README.md +76 -0
  54. package/src/components/BaseTooltip/BaseTooltip.vue +318 -0
  55. package/src/components/BaseTooltip/README.md +74 -0
  56. package/src/components/Modal/Modal.vue +21 -23
  57. package/src/components/Spinner/Spinner.vue +2 -1
  58. package/src/composables/kit/color.ts +14 -0
  59. package/src/composables/kit/interactive.ts +53 -0
  60. package/src/composables/kit/size.ts +15 -0
  61. package/src/composables/kit/state.ts +28 -0
  62. package/src/composables/kit/style.ts +18 -0
  63. package/src/composables/kit/utils.ts +7 -0
  64. package/src/icons/index.ts +9 -0
  65. package/src/index.ts +93 -2
  66. package/src/plugins/modalPlugin.ts +22 -9
  67. package/src/shims-context.d.ts +19 -0
  68. package/src/styles/index.scss +2 -1
  69. package/src/styles/root.scss +167 -0
  70. package/src/styles/variables.scss +160 -0
  71. package/src/types/breadcrumbs.d.ts +13 -0
  72. package/src/types/button.d.ts +13 -0
  73. package/src/types/calendar.d.ts +16 -0
  74. package/src/types/checkbox-radio.d.ts +15 -0
  75. package/src/types/dropdown.d.ts +20 -0
  76. package/src/types/icon.d.ts +8 -0
  77. package/src/types/input.d.ts +56 -0
  78. package/src/types/toggle.d.ts +12 -0
  79. package/src/types/tooltip.d.ts +8 -0
  80. package/src/types/utils.d.ts +37 -0
  81. package/src/vue-virtual-scroller.d.ts +9 -0
  82. package/tsconfig.json +6 -3
  83. package/webpack.config.js +90 -35
  84. package/dist/index.js +0 -4922
  85. package/dist/types/components/Toaster/timer.d.ts +0 -12
  86. package/dist/types/index.d.ts +0 -11
  87. package/dist/types/plugins/modalPlugin.d.ts +0 -16
  88. package/dist/types/plugins/toasterPlugin.d.ts +0 -26
  89. package/dist/types/store/modal.d.ts +0 -11
  90. package/dist/types/types/index.d.ts +0 -4
@@ -0,0 +1,231 @@
1
+ <template>
2
+ <div class="base-calendar" :class="classList">
3
+ <vue-date-picker
4
+ v-model="computedModelValue"
5
+ :range="range"
6
+ locale="ru"
7
+ auto-apply
8
+ :text-input="textInputOptions"
9
+ :hide-navigation="['time']"
10
+ :min-date="minDate || undefined"
11
+ :enable-time-picker="false"
12
+ :format="format"
13
+ month-name-format="long"
14
+ :day-names="dayNames"
15
+ :action-row="{ showPreview: false, showSelect: false, showCancel: false }"
16
+ :day-class="getDayClass"
17
+ >
18
+ <template #dp-input="{ value, isMenuOpen }">
19
+ <slot
20
+ :value="value"
21
+ :is-menu-open="isMenuOpen"
22
+ />
23
+ </template>
24
+ </vue-date-picker>
25
+ </div>
26
+ </template>
27
+
28
+ <script setup lang="ts">
29
+ import { computed } from 'vue';
30
+ import VueDatePicker from '@vuepic/vue-datepicker';
31
+ import '@vuepic/vue-datepicker/dist/main.css';
32
+ import type { DateRange, TCoreCalendarProps } from '../../types/calendar';
33
+ import { useKitSize } from '../../composables/kit/size'
34
+
35
+ const props = withDefaults(defineProps<TCoreCalendarProps>(), {
36
+ range: false,
37
+ minDate: null,
38
+ size: 'medium',
39
+ });
40
+
41
+ const emit: (event: 'update:modelValue', value: DateRange) => void = defineEmits();
42
+
43
+ const computedModelValue = computed<DateRange>({
44
+ get: () => props.modelValue ?? null,
45
+ set: (value: DateRange) => {
46
+ emit('update:modelValue', value);
47
+ console.log(value);
48
+ },
49
+ });
50
+
51
+ const textInputOptions: { format: string } = {
52
+ format: 'dd.MM.yyyy',
53
+ };
54
+
55
+ const dayNames: string[] = ['П', 'В', 'С', 'Ч', 'П', 'С', 'В'];
56
+
57
+ const { sizeClassList } = useKitSize(props);
58
+
59
+ const classList = computed(() => [
60
+ sizeClassList.value,
61
+ {
62
+ '--is-readonly': props.readonly,
63
+ },
64
+ ]);
65
+
66
+ function format(date: Date | string | (Date | string)[] | null): string {
67
+ if (!date) return '';
68
+
69
+ const formatSingleDate = (d: Date | string): string => {
70
+ if (typeof d === 'string') {
71
+ d = new Date(d);
72
+ }
73
+ if (!(d instanceof Date) || isNaN(d.getTime())) {
74
+ return '';
75
+ }
76
+
77
+ const localDate = new Date(d.getTime() - d.getTimezoneOffset() * 60 * 1000);
78
+ const day = localDate.getDate().toString().padStart(2, '0');
79
+ const month = (localDate.getMonth() + 1).toString().padStart(2, '0');
80
+ const year = localDate.getFullYear();
81
+ return `${day}.${month}.${year}`;
82
+ };
83
+
84
+ if (Array.isArray(date)) {
85
+ return date.map(formatSingleDate).join(' - ');
86
+ }
87
+
88
+ return formatSingleDate(date);
89
+ }
90
+
91
+
92
+ function getDayClass(date: Date): string {
93
+ const day = date.getDay();
94
+ if (day === 0 || day === 6) {
95
+ return 'weekend';
96
+ }
97
+ return '';
98
+ }
99
+ </script>
100
+
101
+ <style lang="scss" scoped>
102
+ @import '../../styles/variables';
103
+ @import '../../styles/root';
104
+
105
+ /* stylelint-disable selector-class-pattern */
106
+
107
+ .base-calendar {
108
+ --dp-border-radius: 16px;
109
+ --dp-cell-border-radius: 24px;
110
+
111
+ &.--small-size {
112
+ --dp-cell-padding: 7px;
113
+
114
+ :deep(.dp--menu-wrapper) {
115
+ width: 282px;
116
+ }
117
+
118
+ :deep(.dp__calendar_header) {
119
+ font: var(--typography-text-l-semibold);
120
+ }
121
+
122
+ :deep(.dp__month_year_select) {
123
+ font: var(--typography-text-l-semibold);
124
+ }
125
+
126
+ :deep(.dp__calendar_header_item) {
127
+ width: 38px;
128
+ height: 38px;
129
+ font: var(--typography-text-m-semibold);
130
+ }
131
+
132
+ :deep(.dp__calendar_item) {
133
+ font: var(--typography-text-m-regular);
134
+ }
135
+ }
136
+
137
+ &.--medium-size {
138
+ --dp-cell-padding: 10px;
139
+
140
+ :deep(.dp--menu-wrapper) {
141
+ width: 352px;
142
+ }
143
+
144
+ :deep(.dp__month_year_select) {
145
+ font: var(--typography-text-xl-semibold);
146
+ }
147
+
148
+ :deep(.dp__calendar_header) {
149
+ font: var(--typography-text-l-semibold);
150
+ }
151
+
152
+ :deep(.dp__calendar_item) {
153
+ font: var(--typography-text-l-regular);
154
+ }
155
+
156
+ :deep(.dp__calendar_header_item) {
157
+ width: 48px;
158
+ height: 48px;
159
+ font: var(--typography-text-l-semibold);
160
+ }
161
+ }
162
+
163
+ :deep(.dp__calendar_header_separator) {
164
+ background: var(--primary-black-200);
165
+ }
166
+
167
+ :deep(.dp--clear-btn) {
168
+ display: none;
169
+ }
170
+
171
+ :deep(.dp__input) {
172
+ border-radius: var(--corner-radius-m);
173
+ }
174
+
175
+ :deep(.dp__month_year_select) {
176
+ color: var(--primary-text-primary);
177
+ }
178
+
179
+ :deep(.dp__calendar_header,.dp__calendar_item) {
180
+ color: var(--primary-text-primary);
181
+ }
182
+
183
+ :deep(.dp__inner_nav) {
184
+ color: var(--primary-black-600);
185
+ }
186
+
187
+ :deep(.dp__calendar_item) {
188
+ color: var(--primary-text-primary);
189
+
190
+ .dp__cell_disabled{
191
+ color: var(--primary-black-400);
192
+ }
193
+
194
+ .weekend {
195
+ color: var(--error-red);
196
+ }
197
+
198
+ .dp__cell_disabled.weekend {
199
+ color: var(--error-red-light-02);
200
+ }
201
+
202
+ .weekend.dp__active_date {
203
+ color: var(--primary-text-primary);
204
+ }
205
+ }
206
+
207
+ :deep(.dp__today) {
208
+ background: var(--primary-black-200);
209
+ border: none;
210
+ }
211
+
212
+ :deep(.dp__active_date) {
213
+ background: var(--primary-blue);
214
+ border: none;
215
+ }
216
+
217
+ :deep(.dp__range_between) {
218
+ background: var(--primary-blue-200);
219
+ border: none;
220
+ }
221
+
222
+ :deep(.dp__calendar_header_item) {
223
+ color: var(--primary-text-tertiary);
224
+
225
+ &:nth-child(6),
226
+ &:nth-child(7) {
227
+ color: var(--error-red);
228
+ }
229
+ }
230
+ }
231
+ </style>
@@ -0,0 +1,126 @@
1
+ ### BaseCalendar
2
+
3
+ Компонент для выбора даты с возможностью работы с диапазоном дат. Он использует `vue-datepicker` для отображения календаря и позволяет выбирать как одну дату, так и диапазон дат. Это идеальный компонент для ввода даты или диапазона дат с поддержкой различных форматов и адаптивных стилей.
4
+
5
+ ---
6
+
7
+ #### Props
8
+
9
+ - `modelValue?: DateRange`
10
+ Начальное значение для календаря. Может быть датой, диапазоном дат или строкой в формате `dd.MM.yyyy`. Также поддерживает `null`.
11
+
12
+ - `range?: boolean | RangeConfig | undefined`
13
+ Если установлено в `true`, компонент будет работать в режиме выбора диапазона дат. Вы можете настроить дополнительные параметры для диапазона через `RangeConfig`.
14
+
15
+ - `minDate?: Date | null`
16
+ Минимальная допустимая дата для выбора. Устанавливается в виде объекта `Date`.
17
+
18
+ - `readonly?: boolean`
19
+ Если установлено в `true`, компонент будет только для чтения, и пользователь не сможет изменять дату.
20
+
21
+ - `size?: 'small' | 'medium'`
22
+ Определяет размер компонента. Это влияет на размер элементов календаря и поля ввода.
23
+
24
+ ---
25
+
26
+ #### Важные особенности
27
+
28
+ - **Диапазон дат:**
29
+ Если `range` установлено в `true`, компонент позволяет выбрать диапазон дат, а не только одну дату.
30
+
31
+ - **Формат даты:**
32
+ Компонент использует формат `dd.MM.yyyy` для отображения даты в текстовом поле. Это может быть изменено через настройку `textInputOptions.format`.
33
+
34
+ - **Локализация:**
35
+ Календарь использует русскую локализацию для отображения дней недели и месяцев.
36
+
37
+ - **Адаптивные стили:**
38
+ Компонент имеет адаптивные стили для разных размеров (`small` и `medium`), которые настраиваются через CSS-переменные. Это влияет на отступы, шрифт и размеры элементов календаря.
39
+
40
+ ---
41
+
42
+ #### Пример использования
43
+
44
+ ```vue
45
+ <BaseCalendar v-model="selectedDate" :range="true" :minDate="minDate" size="medium">
46
+ <template #dp-input="{ value, onInput, onEnter, onTab, onClear, onBlur, onKeypress, onPaste, isMenuOpen }">
47
+ <input
48
+ v-bind="{
49
+ value,
50
+ onInput,
51
+ onEnter,
52
+ onTab,
53
+ onClear,
54
+ onBlur,
55
+ onKeypress,
56
+ onPaste,
57
+ isMenuOpen
58
+ }"
59
+ class="date-input"
60
+ />
61
+ </template>
62
+ </BaseCalendar>
63
+ ```
64
+
65
+ ---
66
+
67
+ #### Логика
68
+
69
+ - **Двусторонняя привязка:**
70
+ Состояние компонента управляется через `modelValue`. При изменении даты или диапазона дат компонент эмитирует событие `update:modelValue`.
71
+
72
+ - **Форматирование:**
73
+ Даты форматируются с помощью функции `format`, которая преобразует объект `Date` в строку в формате `dd.MM.yyyy`. Для диапазона дат строка будет содержать два значения, разделённые дефисом.
74
+
75
+ - **Получение класса дня:**
76
+ Функция `getDayClass` используется для стилизации выходных дней (суббот и воскресений). Для них применяется класс `weekend`.
77
+
78
+ ---
79
+
80
+ #### Стилизация
81
+
82
+ Компонент использует SCSS для кастомизации внешнего вида календаря. В частности, заданы стили для различных состояний элементов, таких как активные дни, сегодня, выбранный диапазон и выходные.
83
+
84
+ ```scss
85
+ :deep(.dp__calendar_item) {
86
+ .dp__cell_disabled {
87
+ color: var(--primary-black-400);
88
+ }
89
+
90
+ .weekend {
91
+ color: var(--error-red);
92
+ }
93
+
94
+ .dp__cell_disabled.weekend {
95
+ color: var(--error-red-light-02);
96
+ }
97
+ }
98
+ ```
99
+
100
+ Этот код задаёт стиль для выходных, делая их красными и отличимыми от обычных дней.
101
+
102
+ ---
103
+
104
+ #### Локализация и конфигурация
105
+
106
+ - **Дни недели:**
107
+ Дни недели отображаются как однобуквенные аббревиатуры: `'П', 'В', 'С', 'Ч', 'П', 'С', 'В'` для понедельника по воскресенье.
108
+
109
+ - **Навигация и кнопки:**
110
+ Календарь скрывает кнопки навигации, связанные с выбором времени, и позволяет использовать только выбор даты.
111
+
112
+ ---
113
+
114
+ #### Расширение и кастомизация
115
+
116
+ Вы можете кастомизировать внешний вид и функциональность компонента, например:
117
+
118
+ - Изменить формат даты, передав его через `textInputOptions.format`.
119
+ - Настроить диапазон дат с помощью `range` или `RangeConfig`.
120
+ - Изменить стили календаря для разных размеров и состояний (например, для `readonly`).
121
+
122
+ ---
123
+
124
+ ### Заключение
125
+
126
+ Этот компонент подходит для создания удобного и гибкого календаря с возможностью выбора как одной даты, так и диапазона дат. Он может быть использован в различных формах и интерфейсах, требующих ввода дат, с полным контролем над форматированием и локализацией.
@@ -0,0 +1,252 @@
1
+ <template>
2
+ <div
3
+ class="base-checkbox"
4
+ :class="classList"
5
+ >
6
+ <div class="base-checkbox__wrapper" @click="handleToggle">
7
+
8
+ <div class="base-checkbox__input-wrapper">
9
+ <input
10
+ v-model="model"
11
+ v-bind="inputAttrs"
12
+ type="checkbox"
13
+ class="base-checkbox__input"
14
+ />
15
+ </div>
16
+
17
+ <div class="base-checkbox__icon-wrapper">
18
+ <base-icon
19
+ class="base-checkbox__icon"
20
+ name="checkbox"
21
+ :size="size"
22
+ />
23
+ </div>
24
+
25
+ <div class="base-checkbox__label-wrapper">
26
+ <span v-if="label" class="base-checkbox__label">{{ label }}</span>
27
+
28
+ <span v-if="subLabel" class="base-checkbox__sublabel">{{ subLabel }}</span>
29
+ </div>
30
+ </div>
31
+ </div>
32
+ </template>
33
+
34
+ <script setup lang="ts">
35
+ import type { IBaseRadioProps } from '../../types/checkbox-radio';
36
+ import { useKitSize } from '../../composables/kit/size'
37
+ import { useKitState } from '../../composables/kit/state'
38
+ import { useAttrs, computed } from 'vue';
39
+ import BaseIcon from '../BaseIcon/BaseIcon.vue';
40
+
41
+ const props = withDefaults(defineProps<IBaseRadioProps>(), {
42
+ size: 'medium',
43
+ });
44
+
45
+ const emit = defineEmits<{
46
+ (e: 'update:modelValue', value: boolean): void;
47
+ }>();
48
+
49
+ const { sizeClassList } = useKitSize(props);
50
+ const { stateClassList, stateAttrs } = useKitState(props);
51
+
52
+ const model = computed({
53
+ get: () => props.modelValue,
54
+ set: (val) => emit('update:modelValue', val),
55
+ });
56
+
57
+ const attrs = useAttrs();
58
+
59
+ const inputAttrs = computed(() => {
60
+ return {
61
+ ...attrs,
62
+ ...stateAttrs.value,
63
+ id: props.id,
64
+ };
65
+ });
66
+
67
+ function handleToggle() {
68
+ model.value = !model.value;
69
+ }
70
+
71
+ const classList = computed(() => [
72
+ sizeClassList.value,
73
+ stateClassList.value,
74
+ {
75
+ '--is-active': model.value,
76
+ '--is-readonly': props.readonly,
77
+ },
78
+ ]);
79
+ </script>
80
+
81
+ <style scoped lang="scss">
82
+ @import '../../styles/variables';
83
+ @import '../../styles/root';
84
+
85
+ .base-checkbox {
86
+ $item: &;
87
+
88
+ --icon-size: 18px;
89
+
90
+ &__wrapper {
91
+ display: flex;
92
+ column-gap: 10px;
93
+ width: 100%;
94
+ height: 100%;
95
+ cursor: pointer;
96
+ }
97
+
98
+ &.--is-readonly {
99
+ pointer-events: none;
100
+ }
101
+
102
+ &.--medium-size {
103
+ #{$item} {
104
+ &__wrapper {
105
+ column-gap: var(--spacing-m);
106
+ }
107
+
108
+ &__label {
109
+ font: var(--typography-text-m-medium);
110
+ }
111
+
112
+ &__sublabel {
113
+ font: var(--typography-text-s-regular);
114
+ }
115
+
116
+ &__icon-wrapper {
117
+ width: 32px;
118
+ height: 32px;
119
+ }
120
+ }
121
+ }
122
+
123
+ &.--small-size {
124
+ #{$item} {
125
+ &__wrapper {
126
+ column-gap: var(--spacing-s);
127
+ }
128
+
129
+ &__label {
130
+ font: var(--typography-text-s-medium);
131
+ }
132
+
133
+ &__sublabel {
134
+ font: var(--typography-text-xs-regular);
135
+ }
136
+
137
+ &__icon-wrapper {
138
+ width: 24px;
139
+ height: 24px;
140
+ }
141
+ }
142
+ }
143
+
144
+ &__icon-wrapper {
145
+ position: relative;
146
+ display: flex;
147
+ flex-shrink: 0;
148
+ color: var(--primary-blue);
149
+ background: var(--primary-black-white);
150
+ border: 1px solid var(--primary-black-400);
151
+ border-radius: var(--corner-radius-xxs);
152
+ transition:
153
+ border-color 0.3s ease,
154
+ background-color 0.3s ease;
155
+ }
156
+
157
+ &__icon {
158
+ position: absolute;
159
+ top: 50%;
160
+ left: 50%;
161
+ opacity: 0;
162
+ transition: opacity 0.2s ease, transform 0.2s ease;
163
+ transform: translate(-50%, -50%) scale(0);
164
+ }
165
+
166
+ &__input-wrapper {
167
+ position: relative;
168
+ cursor: pointer;
169
+ transition: all 0.25s ease-out;
170
+
171
+ @include focused {
172
+ outline: 4px solid var(--effects-primary-focus);
173
+ }
174
+ }
175
+
176
+ &__input {
177
+ position: absolute;
178
+ inset: 0;
179
+ width: 100%;
180
+ height: 100%;
181
+ cursor: pointer;
182
+ opacity: 0 !important;
183
+ }
184
+
185
+ &__label-wrapper {
186
+ display: flex;
187
+ flex-direction: column;
188
+ justify-content: center;
189
+ cursor: pointer;
190
+ }
191
+
192
+ &__label {
193
+ color: var(--primary-text-primary);
194
+ user-select: none;
195
+ }
196
+
197
+ &__sublabel {
198
+ color: var(--primary-text-tertiary);
199
+ user-select: none;
200
+ }
201
+
202
+ @include hover {
203
+ #{$item} {
204
+ &__icon-wrapper {
205
+ background: var(--primary-blue-100);
206
+ border-color: var(--primary-blue-deep);
207
+ }
208
+ }
209
+ }
210
+
211
+ &.--is-active {
212
+ #{$item} {
213
+ &__icon-wrapper {
214
+ background: var(--primary-blue-50);
215
+ border-color: var(--primary-blue);
216
+ }
217
+
218
+ &__icon {
219
+ opacity: 1;
220
+ transform: translate(-50%, -50%) scale(1);
221
+ animation: checkmark-appear 0.3s ease-out forwards;
222
+ }
223
+ }
224
+ }
225
+
226
+ @include is-disabled-state {
227
+ #{$item} {
228
+ &__icon-wrapper {
229
+ background: var(--primary-black-50);
230
+ border: 1px solid var(--primary-black-300);
231
+ }
232
+ }
233
+ }
234
+ }
235
+
236
+ @keyframes checkmark-appear {
237
+ 0% {
238
+ opacity: 0;
239
+ transform: translate(-50%, -50%) scale(0);
240
+ }
241
+
242
+ 50% {
243
+ opacity: 1;
244
+ transform: translate(-50%, -50%) scale(1.2);
245
+ }
246
+
247
+ 100% {
248
+ opacity: 1;
249
+ transform: translate(-50%, -50%) scale(1);
250
+ }
251
+ }
252
+ </style>