its_ui_vite 0.0.1
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/README.md +105 -0
- package/package.json +34 -0
- package/src/assets/js/helpers.js +29 -0
- package/src/assets/scss/main.scss +40 -0
- package/src/components/CAlert.vue +230 -0
- package/src/components/CButton.vue +149 -0
- package/src/components/CCheckbox.vue +241 -0
- package/src/components/CIcons/index.vue +86 -0
- package/src/components/CInput.vue +160 -0
- package/src/components/CPopup.vue +40 -0
- package/src/components/CScroll.vue +105 -0
- package/src/components/CSelect.vue +263 -0
- package/src/components/CTabs.vue +93 -0
- package/src/components/CTooltip.vue +212 -0
- package/src/index.js +8 -0
- package/src/libIndex.js +21 -0
- package/src/pages/index.vue +769 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<label :class="['c-checkbox__wrap', variant, size, {disabled}]">
|
|
3
|
+
<input
|
|
4
|
+
class="c-checkbox__inp"
|
|
5
|
+
:type="variant === 'radio' ? 'radio' : 'checkbox'"
|
|
6
|
+
:name="name"
|
|
7
|
+
:value="value"
|
|
8
|
+
:checked="checked"
|
|
9
|
+
:disabled="disabled"
|
|
10
|
+
@change="$emit('update:checked', $event.target.checked)"
|
|
11
|
+
/>
|
|
12
|
+
|
|
13
|
+
<div class="c-checkbox__checkmark"></div>
|
|
14
|
+
<div class="c-checkbox__text">
|
|
15
|
+
<slot>{{ text }}</slot>
|
|
16
|
+
</div>
|
|
17
|
+
</label>
|
|
18
|
+
</template>
|
|
19
|
+
|
|
20
|
+
<script>
|
|
21
|
+
import { getPropValidator } from '../assets/js/helpers.js'
|
|
22
|
+
|
|
23
|
+
export default {
|
|
24
|
+
name: 'CCheckbox',
|
|
25
|
+
emits: ['update:checked'],
|
|
26
|
+
|
|
27
|
+
props: {
|
|
28
|
+
|
|
29
|
+
variant: {
|
|
30
|
+
type: String,
|
|
31
|
+
|
|
32
|
+
default: 'checkbox',
|
|
33
|
+
validator: getPropValidator('CCheckbox', 'variant', ['checkbox', 'radio', 'toggle'])
|
|
34
|
+
},
|
|
35
|
+
|
|
36
|
+
size: {
|
|
37
|
+
type: String,
|
|
38
|
+
|
|
39
|
+
default: 'lg',
|
|
40
|
+
// по сути sm используется только в CSelect
|
|
41
|
+
validator: getPropValidator('CCheckbox', 'size', ['lg', 'sm'])
|
|
42
|
+
},
|
|
43
|
+
|
|
44
|
+
checked: {
|
|
45
|
+
type: Boolean,
|
|
46
|
+
|
|
47
|
+
default: false,
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
disabled: {
|
|
51
|
+
type: Boolean,
|
|
52
|
+
|
|
53
|
+
default: false,
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
text: {
|
|
57
|
+
type: String,
|
|
58
|
+
|
|
59
|
+
default: '',
|
|
60
|
+
},
|
|
61
|
+
|
|
62
|
+
name: {
|
|
63
|
+
type: String,
|
|
64
|
+
|
|
65
|
+
default: 'c_checkbox',
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
value: {
|
|
69
|
+
type: String,
|
|
70
|
+
|
|
71
|
+
default: '',
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
}
|
|
75
|
+
</script>
|
|
76
|
+
|
|
77
|
+
<style lang="scss">
|
|
78
|
+
// этого элемента нет
|
|
79
|
+
.c-checkbox {
|
|
80
|
+
|
|
81
|
+
// родительский элемент
|
|
82
|
+
&__wrap {
|
|
83
|
+
// для toggle
|
|
84
|
+
--border-width: 1px;
|
|
85
|
+
--toggle-indentation: 1px;
|
|
86
|
+
--toggle-padding: calc(var(--border-width) + var(--toggle-indentation) * 2);
|
|
87
|
+
|
|
88
|
+
position: relative;
|
|
89
|
+
|
|
90
|
+
display: flex;
|
|
91
|
+
align-items: center;
|
|
92
|
+
|
|
93
|
+
gap: 12px;
|
|
94
|
+
|
|
95
|
+
cursor: pointer;
|
|
96
|
+
|
|
97
|
+
&.disabled {
|
|
98
|
+
cursor: default;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// prop.size
|
|
102
|
+
&.lg {
|
|
103
|
+
--size: 28px;
|
|
104
|
+
--toggle-size: 24px;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
&.sm {
|
|
108
|
+
--size: 20px;
|
|
109
|
+
}
|
|
110
|
+
// ./prop.size
|
|
111
|
+
|
|
112
|
+
// prop.variant
|
|
113
|
+
&.checkbox {
|
|
114
|
+
.c-checkbox__checkmark::after {
|
|
115
|
+
background: var(--green-light) url("data:image/svg+xml,%3Csvg width='15' height='13' viewBox='0 0 15 13' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1.5 7.5L5 11L13 2' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A") center no-repeat;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
&.radio {
|
|
120
|
+
.c-checkbox__checkmark {
|
|
121
|
+
border-radius: 50%;
|
|
122
|
+
|
|
123
|
+
&::after{
|
|
124
|
+
background: var(--green-light) url("data:image/svg+xml,%3Csvg width='10' height='10' viewBox='0 0 10 10' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='10' height='10' rx='5' fill='white'/%3E%3C/svg%3E%0A") center no-repeat;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
&.toggle {
|
|
130
|
+
.c-checkbox__inp {
|
|
131
|
+
&:checked {
|
|
132
|
+
&~ .c-checkbox__checkmark {
|
|
133
|
+
|
|
134
|
+
&::after {
|
|
135
|
+
left: calc(var(--toggle-size) + var(--border-width) + var(--toggle-indentation)); // тоже самое что и left: 26px;
|
|
136
|
+
|
|
137
|
+
background: var(--green-light);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.c-checkbox__checkmark {
|
|
144
|
+
width: calc((var(--size) * 2) - (var(--border-width) + var(--toggle-indentation)) * 2);
|
|
145
|
+
|
|
146
|
+
border-radius: var(--size);
|
|
147
|
+
|
|
148
|
+
background: var(--black-dark);
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
&::after {
|
|
152
|
+
position: absolute;
|
|
153
|
+
left: 2px;
|
|
154
|
+
top: 2px;
|
|
155
|
+
|
|
156
|
+
width: var(--toggle-size);
|
|
157
|
+
height: var(--toggle-size);
|
|
158
|
+
|
|
159
|
+
border-radius: 50%;
|
|
160
|
+
|
|
161
|
+
background: var(--green-bg);
|
|
162
|
+
|
|
163
|
+
opacity: 1;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// ./prop.variant
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
&__inp {
|
|
171
|
+
display: none;
|
|
172
|
+
|
|
173
|
+
&:checked {
|
|
174
|
+
&~ .c-checkbox__checkmark {
|
|
175
|
+
border-color: var(--green-light);
|
|
176
|
+
|
|
177
|
+
&::after {
|
|
178
|
+
opacity: 1;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
&~ .c-checkbox__text {
|
|
183
|
+
color: var(--white);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
&:disabled {
|
|
188
|
+
&~ .c-checkbox__checkmark {
|
|
189
|
+
border-color: transparent;
|
|
190
|
+
|
|
191
|
+
&::after {
|
|
192
|
+
background: var(--black-dark);
|
|
193
|
+
|
|
194
|
+
opacity: 1;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
&~ .c-checkbox__text {
|
|
199
|
+
color: var(--black-dark);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
&__checkmark {
|
|
205
|
+
box-sizing: border-box;
|
|
206
|
+
display: flex;
|
|
207
|
+
|
|
208
|
+
width: var(--size);
|
|
209
|
+
height: var(--size);
|
|
210
|
+
|
|
211
|
+
flex-shrink: 0;
|
|
212
|
+
|
|
213
|
+
border: var(--border-width) solid var(--green-medium);
|
|
214
|
+
border-radius: 4px;
|
|
215
|
+
|
|
216
|
+
overflow: hidden;
|
|
217
|
+
transition: var(--transition);
|
|
218
|
+
|
|
219
|
+
&::after {
|
|
220
|
+
content: '';
|
|
221
|
+
display: flex;
|
|
222
|
+
|
|
223
|
+
width: 100%;
|
|
224
|
+
height: 100%;
|
|
225
|
+
|
|
226
|
+
background: var(--green-bg);
|
|
227
|
+
|
|
228
|
+
opacity: 0;
|
|
229
|
+
|
|
230
|
+
transition: var(--transition);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
&__text {
|
|
235
|
+
font-size: 16px;
|
|
236
|
+
|
|
237
|
+
color: var(--green-medium);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
</style>
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="svg">
|
|
3
|
+
<svg v-if="iconId === 'error'" :width="w" :height="h" viewBox="0 0 24 24" stroke="#EA1246" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
4
|
+
<path d="M10.29 3.85996L1.82002 18C1.64539 18.3024 1.55299 18.6453 1.55201 18.9945C1.55103 19.3437 1.64151 19.6871 1.81445 19.9905C1.98738 20.2939 2.23675 20.5467 2.53773 20.7238C2.83871 20.9009 3.18082 20.9961 3.53002 21H20.47C20.8192 20.9961 21.1613 20.9009 21.4623 20.7238C21.7633 20.5467 22.0127 20.2939 22.1856 19.9905C22.3585 19.6871 22.449 19.3437 22.448 18.9945C22.4471 18.6453 22.3547 18.3024 22.18 18L13.71 3.85996C13.5318 3.56607 13.2807 3.32308 12.9812 3.15444C12.6817 2.98581 12.3438 2.89722 12 2.89722C11.6563 2.89722 11.3184 2.98581 11.0188 3.15444C10.7193 3.32308 10.4683 3.56607 10.29 3.85996V3.85996Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
5
|
+
<path d="M12 9V13" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
6
|
+
<path d="M12 16V16.5" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
7
|
+
</svg>
|
|
8
|
+
|
|
9
|
+
<svg v-if="iconId === 'success'" :width="w" :height="h" viewBox="0 0 24 24" stroke="#0FC176" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
10
|
+
<path d="M22 11.0801V12.0001C21.9988 14.1565 21.3005 16.2548 20.0093 17.9819C18.7182 19.7091 16.9033 20.9726 14.8354 21.584C12.7674 22.1954 10.5573 22.122 8.53447 21.3747C6.51168 20.6274 4.78465 19.2462 3.61096 17.4372C2.43727 15.6281 1.87979 13.4882 2.02168 11.3364C2.16356 9.18467 2.99721 7.13643 4.39828 5.49718C5.79935 3.85793 7.69279 2.71549 9.79619 2.24025C11.8996 1.76502 14.1003 1.98245 16.07 2.86011" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
11
|
+
<path d="M22 4L12 14.01L9 11.01" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
12
|
+
</svg>
|
|
13
|
+
|
|
14
|
+
<svg v-if="iconId === 'bell'" :width="w" :height="h" viewBox="0 0 24 24" stroke="#E2670D" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
15
|
+
<path d="M18 8C18 6.4087 17.3679 4.88258 16.2426 3.75736C15.1174 2.63214 13.5913 2 12 2C10.4087 2 8.88258 2.63214 7.75736 3.75736C6.63214 4.88258 6 6.4087 6 8C6 15 3 17 3 17H21C21 17 18 15 18 8Z" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
16
|
+
<path d="M13.73 21C13.5542 21.3031 13.3019 21.5547 12.9982 21.7295C12.6946 21.9044 12.3504 21.9965 12 21.9965C11.6496 21.9965 11.3054 21.9044 11.0018 21.7295C10.6982 21.5547 10.4458 21.3031 10.27 21" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
17
|
+
</svg>
|
|
18
|
+
|
|
19
|
+
<svg v-if="iconId === 'close'" :width="w" :height="h" viewBox="0 0 24 24" stroke="white" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
20
|
+
<path d="M18 6L6 18" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
21
|
+
<path d="M6 6L18 18" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
22
|
+
</svg>
|
|
23
|
+
|
|
24
|
+
<svg v-if="iconId === 'lens'" :width="w" :height="h" viewBox="0 0 24 24" stroke="#26776F" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
25
|
+
<circle cx="11" cy="11" r="8" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
26
|
+
<path d="M16.5 16.958L21.5 21.958" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
27
|
+
</svg>
|
|
28
|
+
|
|
29
|
+
<svg v-if="iconId === 'arrow'" :width="w" :height="h" viewBox="0 0 18 23" stroke="#26776F" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
30
|
+
<path d="M15 15L9 9L3 15" stroke-linecap="round" stroke-linejoin="round"/>
|
|
31
|
+
</svg>
|
|
32
|
+
|
|
33
|
+
<svg v-if="iconId === 'question'" :width="w" :height="h" viewBox="0 0 24 24" stroke="#26776F" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
34
|
+
<path d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
35
|
+
<path d="M9.09009 9.00008C9.32519 8.33175 9.78924 7.76819 10.4 7.40921C11.0108 7.05024 11.729 6.91902 12.4273 7.03879C13.1255 7.15857 13.7589 7.52161 14.2152 8.06361C14.6714 8.60561 14.9211 9.2916 14.9201 10.0001C14.9201 12.0001 11.9201 13.0001 11.9201 13.0001" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
36
|
+
<path d="M12 16V16.5" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
37
|
+
</svg>
|
|
38
|
+
|
|
39
|
+
</div>
|
|
40
|
+
</template>
|
|
41
|
+
|
|
42
|
+
<script>
|
|
43
|
+
export default {
|
|
44
|
+
props: {
|
|
45
|
+
iconId: {
|
|
46
|
+
type: String,
|
|
47
|
+
|
|
48
|
+
required: true,
|
|
49
|
+
},
|
|
50
|
+
|
|
51
|
+
size: {
|
|
52
|
+
type: Number,
|
|
53
|
+
|
|
54
|
+
default: 24
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
width: {
|
|
58
|
+
type: Number,
|
|
59
|
+
},
|
|
60
|
+
|
|
61
|
+
height: {
|
|
62
|
+
type: Number,
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
|
|
66
|
+
computed: {
|
|
67
|
+
w() {
|
|
68
|
+
return this.width || this.size
|
|
69
|
+
},
|
|
70
|
+
|
|
71
|
+
h() {
|
|
72
|
+
return this.height || this.size
|
|
73
|
+
},
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
</script>
|
|
77
|
+
|
|
78
|
+
<style lang="scss">
|
|
79
|
+
.svg,
|
|
80
|
+
svg {
|
|
81
|
+
display: flex;
|
|
82
|
+
flex-shrink: 0;
|
|
83
|
+
|
|
84
|
+
transition: var(--transition);
|
|
85
|
+
}
|
|
86
|
+
</style>
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div :class="['c-input__wrap', status]" :style="`--c-input-width: ${width}`">
|
|
3
|
+
<input
|
|
4
|
+
class="c-input"
|
|
5
|
+
:type="type"
|
|
6
|
+
:name="name"
|
|
7
|
+
:placeholder="placeholder"
|
|
8
|
+
:value="modelValue"
|
|
9
|
+
@input="$emit('update:modelValue', $event.target.value)"
|
|
10
|
+
/>
|
|
11
|
+
|
|
12
|
+
<div class="c-input__icon c-input__success-icon">
|
|
13
|
+
<slot name="successIcon">
|
|
14
|
+
<CIcon iconId="success" />
|
|
15
|
+
</slot>
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
<div class="c-input__icon c-input__error-icon">
|
|
19
|
+
<slot name="errorIcon">
|
|
20
|
+
<CIcon iconId="error" />
|
|
21
|
+
</slot>
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<div class="c-input__icon c-input__custom-icon">
|
|
25
|
+
<slot name="customIcon"></slot>
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
</template>
|
|
29
|
+
|
|
30
|
+
<script>
|
|
31
|
+
import CIcon from './CIcons/index.vue'
|
|
32
|
+
|
|
33
|
+
import { getPropValidator } from '../assets/js/helpers';
|
|
34
|
+
|
|
35
|
+
export default {
|
|
36
|
+
emits: ['update:modelValue'],
|
|
37
|
+
components: {
|
|
38
|
+
CIcon
|
|
39
|
+
},
|
|
40
|
+
props: {
|
|
41
|
+
|
|
42
|
+
status: {
|
|
43
|
+
type: String,
|
|
44
|
+
|
|
45
|
+
default: 'static',
|
|
46
|
+
validator: getPropValidator('CInput', 'status', ['static', 'focus'/* it rofls */, 'error', 'success'])
|
|
47
|
+
},
|
|
48
|
+
|
|
49
|
+
width: {
|
|
50
|
+
type: String,
|
|
51
|
+
|
|
52
|
+
default: '350px'
|
|
53
|
+
},
|
|
54
|
+
|
|
55
|
+
type: {
|
|
56
|
+
type: String,
|
|
57
|
+
|
|
58
|
+
default: 'text',
|
|
59
|
+
},
|
|
60
|
+
|
|
61
|
+
name: {
|
|
62
|
+
type: String,
|
|
63
|
+
|
|
64
|
+
default: 'c_inp',
|
|
65
|
+
},
|
|
66
|
+
|
|
67
|
+
placeholder: {
|
|
68
|
+
type: String,
|
|
69
|
+
|
|
70
|
+
default: '',
|
|
71
|
+
},
|
|
72
|
+
|
|
73
|
+
modelValue: {
|
|
74
|
+
type: String,
|
|
75
|
+
|
|
76
|
+
default: '',
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
}
|
|
80
|
+
</script>
|
|
81
|
+
|
|
82
|
+
<style lang="scss">
|
|
83
|
+
|
|
84
|
+
.c-input {
|
|
85
|
+
box-sizing: border-box;
|
|
86
|
+
|
|
87
|
+
width: var(--c-input-width);
|
|
88
|
+
padding: 15px 25px;
|
|
89
|
+
font-size: 21px;
|
|
90
|
+
|
|
91
|
+
outline: none;
|
|
92
|
+
border: 1px solid var(--green-medium);
|
|
93
|
+
border-radius: 50px;
|
|
94
|
+
|
|
95
|
+
background: var(--black-dark);
|
|
96
|
+
color: var(--white);
|
|
97
|
+
|
|
98
|
+
transition: var(--transition);
|
|
99
|
+
|
|
100
|
+
&::placeholder {
|
|
101
|
+
color: inherit;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
&:focus {
|
|
105
|
+
border: 1px solid var(--green-light);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
&__wrap {
|
|
109
|
+
position: relative;
|
|
110
|
+
|
|
111
|
+
// prop.status
|
|
112
|
+
&.focus .c-input {
|
|
113
|
+
border: 1px solid var(--green-light);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
&.error {
|
|
117
|
+
.c-input{
|
|
118
|
+
padding-right: 50px;
|
|
119
|
+
|
|
120
|
+
border-color: var(--red);
|
|
121
|
+
|
|
122
|
+
color: var(--red);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.c-input__error-icon {
|
|
126
|
+
opacity: 1;
|
|
127
|
+
pointer-events: all;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
&.success {
|
|
132
|
+
.c-input{
|
|
133
|
+
padding-right: 50px;
|
|
134
|
+
|
|
135
|
+
border-color: var(--green-light);
|
|
136
|
+
|
|
137
|
+
color: var(--green-light);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.c-input__success-icon {
|
|
141
|
+
opacity: 1;
|
|
142
|
+
pointer-events: all;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// ./prop.status
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
&__icon {
|
|
149
|
+
position: absolute;
|
|
150
|
+
top: 50%;
|
|
151
|
+
right: 15px;
|
|
152
|
+
transform: translate(0, -50%);
|
|
153
|
+
|
|
154
|
+
display: flex;
|
|
155
|
+
|
|
156
|
+
opacity: 0;
|
|
157
|
+
pointer-events: none;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
</style>
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="c-popup">
|
|
3
|
+
<div class="c-popup__title">
|
|
4
|
+
<slot name="title">Label</slot>
|
|
5
|
+
</div>
|
|
6
|
+
|
|
7
|
+
<div class="c-popup__content">
|
|
8
|
+
<slot name="content">Content goes here</slot>
|
|
9
|
+
</div>
|
|
10
|
+
</div>
|
|
11
|
+
</template>
|
|
12
|
+
|
|
13
|
+
<script setup lang="ts">
|
|
14
|
+
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<style lang="scss">
|
|
18
|
+
.c-popup {
|
|
19
|
+
padding: 15px 20px 30px;
|
|
20
|
+
|
|
21
|
+
border-radius: 6px;
|
|
22
|
+
|
|
23
|
+
color: var(--white);
|
|
24
|
+
background: var(--green-bg);
|
|
25
|
+
box-shadow: var(--shadow);
|
|
26
|
+
|
|
27
|
+
&__title {
|
|
28
|
+
height: 35px;
|
|
29
|
+
width: 100%;
|
|
30
|
+
|
|
31
|
+
border-bottom: 1px solid var(--green-medium);
|
|
32
|
+
|
|
33
|
+
font-size: 16px;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
&__content {
|
|
37
|
+
margin-top: 10px;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
</style>
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<PerfectScrollbar
|
|
3
|
+
:options="{
|
|
4
|
+
scrollYMarginOffset
|
|
5
|
+
}"
|
|
6
|
+
class="c-scroll"
|
|
7
|
+
>
|
|
8
|
+
<div class="c-scroll__content">
|
|
9
|
+
<slot><div class=""></div></slot>
|
|
10
|
+
</div>
|
|
11
|
+
</PerfectScrollbar>
|
|
12
|
+
</template>
|
|
13
|
+
|
|
14
|
+
<script>
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @description ссылка на npm vue2-scrollbar: https://www.npmjs.com/package/vue2-scrollbar
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import { PerfectScrollbar } from 'vue3-perfect-scrollbar'
|
|
21
|
+
import 'vue3-perfect-scrollbar/style.css'
|
|
22
|
+
|
|
23
|
+
export default {
|
|
24
|
+
data() {
|
|
25
|
+
return {
|
|
26
|
+
scrollYMarginOffset: 0,
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
|
|
30
|
+
props: {
|
|
31
|
+
scrollY: {
|
|
32
|
+
type: Number,
|
|
33
|
+
|
|
34
|
+
default: 1
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
|
|
38
|
+
methods: {
|
|
39
|
+
handleMaxScroll(direction) {
|
|
40
|
+
console.log(direction);
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
|
|
44
|
+
watch: {
|
|
45
|
+
/**
|
|
46
|
+
* @description bug fix "рофлов" (когда меняется размер контента вылезают "рофлы")
|
|
47
|
+
*/
|
|
48
|
+
$props: {
|
|
49
|
+
deep: true,
|
|
50
|
+
immediate: true,
|
|
51
|
+
|
|
52
|
+
handler(newWal) {
|
|
53
|
+
// if (this.$refs.Scrollbar) this.$refs.Scrollbar.scrollToY(0)
|
|
54
|
+
this.scrollYMarginOffset = 0
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
|
|
59
|
+
components: {
|
|
60
|
+
PerfectScrollbar,
|
|
61
|
+
},
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
</script>
|
|
65
|
+
|
|
66
|
+
<style lang="scss">
|
|
67
|
+
.c-scroll {
|
|
68
|
+
--scrollbar-width: 12px;
|
|
69
|
+
|
|
70
|
+
&__content {
|
|
71
|
+
background: var(--green-bg);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.vue-scrollbar-transition {
|
|
75
|
+
transition: var(--transition);
|
|
76
|
+
-moz-transition: var(--transition);
|
|
77
|
+
-webkit-transition: var(--transition);
|
|
78
|
+
-o-transition: var(--transition);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.ps__rail-y,
|
|
82
|
+
.ps__rail-x {
|
|
83
|
+
width: var(--scrollbar-width);
|
|
84
|
+
display: block;
|
|
85
|
+
|
|
86
|
+
opacity: 1 !important;
|
|
87
|
+
|
|
88
|
+
background-color: transparent !important;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.ps__thumb-y,
|
|
92
|
+
.ps__thumb-x {
|
|
93
|
+
width: var(--scrollbar-width) !important;
|
|
94
|
+
|
|
95
|
+
box-sizing: border-box;
|
|
96
|
+
border: 4px solid transparent;
|
|
97
|
+
border-radius: var(--scrollbar-width);
|
|
98
|
+
|
|
99
|
+
background-color: var(--scroll) !important;
|
|
100
|
+
background-clip: content-box;
|
|
101
|
+
|
|
102
|
+
cursor: pointer;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
</style>
|