mediacube-ui 0.1.15 → 0.1.16

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 (25) hide show
  1. package/package.json +3 -2
  2. package/src/elements/McAvatar/McAvatar.vue +325 -0
  3. package/src/elements/McBadge/McBadge.vue +120 -0
  4. package/src/elements/McButton/McButton.vue +877 -0
  5. package/src/elements/McChip/McChip.vue +246 -0
  6. package/src/elements/McCropper/McCropper.vue +131 -0
  7. package/src/elements/McDate/McDate.vue +102 -0
  8. package/src/elements/McDatePicker/McDatePicker.vue +793 -0
  9. package/src/elements/McField/McFieldCheckbox/McFieldCheckbox.vue +334 -0
  10. package/src/elements/McField/McFieldRadio/McFieldRadioButton/McFieldRadioButton.vue +185 -0
  11. package/src/elements/McField/McFieldRadio/McFieldRadioGroup/McFieldRadioGroup.vue +194 -0
  12. package/src/elements/McField/McFieldSelect/McFieldSelect.vue +900 -0
  13. package/src/elements/McField/McFieldText/McFieldText.vue +856 -0
  14. package/src/elements/McField/McFieldToggle/McFieldToggle.vue +262 -0
  15. package/src/elements/McInfinityLoadingIndicator/McInfinityLoadingIndicator.vue +97 -0
  16. package/src/elements/McNotification/McNotification.vue +203 -0
  17. package/src/elements/McProgress/McProgress.vue +229 -0
  18. package/src/elements/McRangeSlider/McRangeSlider.vue +196 -0
  19. package/src/elements/McSeparator/McSeparator.vue +158 -0
  20. package/src/elements/McSlideUpDown/McSlideUpDown.vue +157 -0
  21. package/src/elements/McSvgIcon/McSvgIcon.vue +176 -0
  22. package/src/elements/McTabs/McTab/McTab.vue +192 -0
  23. package/src/elements/McTabs/McTabs/McTabs.vue +493 -0
  24. package/src/elements/McTitle/McTitle.vue +462 -0
  25. package/src/elements/McTooltip/McTooltip.vue +288 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mediacube-ui",
3
- "version": "0.1.15",
3
+ "version": "0.1.16",
4
4
  "description": "Design system for MediaCube services",
5
5
  "author": "MediaCube",
6
6
  "private": false,
@@ -14,7 +14,8 @@
14
14
  "dist/*",
15
15
  "src/styles/*",
16
16
  "src/assets/*",
17
- "src/tokens/*"
17
+ "src/tokens/*",
18
+ "src/elements/**/*.vue"
18
19
  ],
19
20
  "scripts": {
20
21
  "start": "yarn scss-export && start-storybook -p 6006 -s public",
@@ -0,0 +1,325 @@
1
+ <script>
2
+ import defaultImage from '../../assets/img/no_user.png'
3
+ export default {
4
+ name: 'McAvatar',
5
+ functional: true,
6
+ props: {
7
+ /**
8
+ * Путь до изображения
9
+ *
10
+ */
11
+ src: {
12
+ type: String,
13
+ default: defaultImage,
14
+ },
15
+ /**
16
+ * Отложенная подгрузка
17
+ *
18
+ */
19
+ lazy: {
20
+ type: Boolean,
21
+ default: false,
22
+ },
23
+ /**
24
+ * Атрибут alt
25
+ */
26
+ alt: {
27
+ type: String,
28
+ default: '',
29
+ },
30
+ /**
31
+ * Размеры
32
+ */
33
+ size: {
34
+ type: String,
35
+ default: '300',
36
+ },
37
+ /**
38
+ * Круглый
39
+ *
40
+ */
41
+ rounded: {
42
+ type: Boolean,
43
+ default: false,
44
+ },
45
+ /**
46
+ * Цвет рамки
47
+ *
48
+ */
49
+ borderColor: {
50
+ type: String,
51
+ default: '',
52
+ },
53
+ /**
54
+ * Цвет точки
55
+ *
56
+ */
57
+ dotColor: {
58
+ type: String,
59
+ default: '',
60
+ },
61
+ /**
62
+ * Цвет точки
63
+ *
64
+ */
65
+ shadow: {
66
+ type: Boolean,
67
+ default: false,
68
+ },
69
+ /**
70
+ * Перетаскивание изображения
71
+ *
72
+ */
73
+ draggable: {
74
+ type: Boolean,
75
+ default: true,
76
+ },
77
+ },
78
+ render(h, { props, data }) {
79
+ const hasStatus = props.borderColor || props.dotColor
80
+
81
+ const avatarClasses = {
82
+ 'mc-avatar': true,
83
+ 'mc-avatar--rounded': props.rounded,
84
+ 'mc-avatar--shadow': props.shadow && !hasStatus,
85
+ [`mc-avatar--size-${props.size}`]: props.size,
86
+ ...(!hasStatus && data.class ? data.class : {}),
87
+ }
88
+ const wrapperClasses = {
89
+ 'mc-avatar-status': true,
90
+ 'mc-avatar-status--shadow': props.shadow,
91
+ [`mc-avatar-status--size-${props.size}`]: props.size,
92
+ [`mc-avatar-status--border-color-${props.borderColor}`]: props.borderColor,
93
+ [`mc-avatar-status--dot-color-${props.dotColor}`]: props.dotColor,
94
+ ...(data.class || {}),
95
+ }
96
+
97
+ if (data.staticClass) {
98
+ const staticClasses = data.staticClass.split(' ')
99
+ const targetClasses = hasStatus ? wrapperClasses : avatarClasses
100
+ staticClasses.forEach(c => c && (targetClasses[c] = true))
101
+ }
102
+
103
+ let style = {}
104
+ if (data.staticStyle) {
105
+ style = data.staticStyle
106
+ }
107
+
108
+ const lazyOptions = {
109
+ name: 'lazy',
110
+ value: {
111
+ src: props.src,
112
+ error: defaultImage,
113
+ attempt: 1,
114
+ },
115
+ }
116
+ const directives = props.lazy ? [lazyOptions] : []
117
+
118
+ const createAvatar = () => {
119
+ return h(
120
+ 'figure',
121
+ {
122
+ class: avatarClasses,
123
+ style: {
124
+ ...(!hasStatus ? style : {}),
125
+ },
126
+ },
127
+ [
128
+ h('img', {
129
+ class: 'mc-avatar__img',
130
+ attrs: {
131
+ alt: props.alt,
132
+ ...(!props.lazy ? { src: props.src || defaultImage } : {}),
133
+ draggable: props.draggable,
134
+ },
135
+ directives,
136
+ key: props.src,
137
+ on: {
138
+ error(e) {
139
+ if (!e.target) return
140
+ e.target.src = defaultImage
141
+ },
142
+ },
143
+ }),
144
+ ],
145
+ )
146
+ }
147
+
148
+ const createWrapper = () => {
149
+ return h(
150
+ 'section',
151
+ {
152
+ class: wrapperClasses,
153
+ style: {
154
+ ...style,
155
+ },
156
+ },
157
+ [createAvatar()],
158
+ )
159
+ }
160
+ return hasStatus ? createWrapper() : createAvatar()
161
+ },
162
+ }
163
+ </script>
164
+ <style lang="scss">
165
+ $color-borders: $token-colors;
166
+ $dot-colors: $token-colors;
167
+
168
+ .mc-avatar-status {
169
+ $status-name: &;
170
+
171
+ display: inline-flex;
172
+ border: 2px solid transparent;
173
+ padding: 1px;
174
+ position: relative;
175
+ border-radius: $radius-circle;
176
+
177
+ .mc-avatar {
178
+ border-radius: $radius-circle;
179
+ }
180
+
181
+ &::after {
182
+ @include size($size-100);
183
+ @include pseudo();
184
+ border: none;
185
+ position: absolute;
186
+ z-index: 2;
187
+ border-radius: 50%;
188
+ }
189
+
190
+ @each $color, $value in $color-borders {
191
+ &--border-color-#{$color} {
192
+ border-color: $value;
193
+ transition: box-shadow $duration-s;
194
+
195
+ &:hover,
196
+ &:focus {
197
+ .mc-avatar {
198
+ box-shadow: none;
199
+ }
200
+ }
201
+ }
202
+ }
203
+
204
+ &--shadow {
205
+ &:hover,
206
+ &:focus {
207
+ background-color: $color-hover-gray;
208
+ box-shadow: 0 0 0 $space-50 $color-hover-gray;
209
+ }
210
+ }
211
+
212
+ @each $color, $value in $dot-colors {
213
+ &--dot-color-#{$color} {
214
+ &::after {
215
+ border: 1px solid $color-white;
216
+ background-color: $value;
217
+ @if $color == 'transparent' {
218
+ display: none;
219
+ }
220
+ }
221
+ }
222
+ }
223
+
224
+ @each $size, $value in $token-avatar-sizes {
225
+ &--size-#{$size} {
226
+ @if $size == 300 {
227
+ &::after {
228
+ bottom: -1px;
229
+ left: -2px;
230
+ }
231
+ }
232
+ @if $size == 400 {
233
+ &::after {
234
+ bottom: 0;
235
+ left: -1px;
236
+ }
237
+ }
238
+ @if $size == 500 {
239
+ &::after {
240
+ @include size($size-150);
241
+ bottom: -1px;
242
+ left: -2px;
243
+ }
244
+ }
245
+ @if $size == 600 {
246
+ &::after {
247
+ @include size($size-150);
248
+ bottom: -1px;
249
+ left: 0;
250
+ }
251
+ }
252
+ @if $size == 700 {
253
+ &::after {
254
+ @include size($size-200);
255
+ border-width: 2px;
256
+ bottom: -1px;
257
+ left: -1px;
258
+ }
259
+ }
260
+ @if $size == 800 {
261
+ &::after {
262
+ @include size($size-200);
263
+ border-width: 2px;
264
+ bottom: 0;
265
+ left: -1px;
266
+ }
267
+ }
268
+ @if $size == 900 {
269
+ &::after {
270
+ @include size($size-200);
271
+ border-width: 2px;
272
+ bottom: 1px;
273
+ left: 0;
274
+ }
275
+ }
276
+ @if $size == 1000 {
277
+ &::after {
278
+ @include size($size-200);
279
+ border-width: 2px;
280
+ bottom: 1px;
281
+ left: 2px;
282
+ }
283
+ }
284
+ }
285
+ }
286
+ }
287
+
288
+ .mc-avatar {
289
+ $avatar-name: &;
290
+
291
+ @include reset();
292
+ position: relative;
293
+ display: inline-block;
294
+ border-radius: $radius-100;
295
+ overflow: hidden;
296
+ background-color: $color-hover-gray;
297
+ transition: box-shadow $duration-s;
298
+
299
+ &__img {
300
+ width: 100%;
301
+ height: 100%;
302
+ object-fit: cover;
303
+ }
304
+
305
+ @each $size, $value in $token-avatar-sizes {
306
+ &--size-#{$size} {
307
+ @include size($value);
308
+ min-width: $value;
309
+ @if $size < 500 {
310
+ border-radius: $radius-50;
311
+ }
312
+ }
313
+ }
314
+ &--rounded {
315
+ border-radius: $radius-circle;
316
+ }
317
+
318
+ &--shadow {
319
+ &:hover,
320
+ &:focus {
321
+ box-shadow: 0 0 0 $space-100 $color-hover-gray;
322
+ }
323
+ }
324
+ }
325
+ </style>
@@ -0,0 +1,120 @@
1
+ <script>
2
+ export default {
3
+ name: 'McBadge',
4
+ functional: true,
5
+ props: {
6
+ /**
7
+ * Дизайн:
8
+ * `purple, purple-outline т.д.`
9
+ */
10
+ variation: {
11
+ type: String,
12
+ default: 'transparent',
13
+ },
14
+ /**
15
+ * Вертикальная черта (в таблице, к примеру)
16
+ */
17
+ verticalLine: {
18
+ type: Boolean,
19
+ default: false,
20
+ },
21
+ modern: {
22
+ type: Boolean,
23
+ default: false,
24
+ },
25
+ },
26
+ render(h, { props, slots, data }) {
27
+ const classes = {
28
+ 'mc-badge': true,
29
+ 'mc-badge--vertical-line': props.verticalLine,
30
+ [`mc-badge--variation-${props.variation}${props.modern ? '-modern' : ''}`]: props.variation,
31
+ ...(data.class || {}),
32
+ }
33
+
34
+ if (data.staticClass) {
35
+ const staticClasses = data.staticClass.split(' ')
36
+ staticClasses.forEach(c => c && (classes[c] = true))
37
+ }
38
+
39
+ let style = {}
40
+ if (data.staticStyle) {
41
+ style = data.staticStyle
42
+ }
43
+
44
+ return h(
45
+ 'section',
46
+ {
47
+ class: classes,
48
+ style,
49
+ },
50
+ [
51
+ h(
52
+ 'div',
53
+ {
54
+ class: 'mc-badge__text',
55
+ },
56
+ slots()['default'],
57
+ ),
58
+ ],
59
+ )
60
+ },
61
+ }
62
+ </script>
63
+
64
+ <style lang="scss">
65
+ $light-scale: 'hover-gray', 'white', 'lighter-blue', 'lighter-purple', 'toxic', 'transparent';
66
+ .mc-badge {
67
+ $block-name: &;
68
+
69
+ @include ellipsis(100%, inline-flex);
70
+ align-items: center;
71
+ color: $color-white;
72
+ font-family: $font-family-main;
73
+ font-size: $font-size-100;
74
+ line-height: $line-height-150;
75
+ height: $line-height-200;
76
+ font-weight: $font-weight-medium;
77
+ text-transform: uppercase;
78
+ letter-spacing: $letter-spacing-m;
79
+ vertical-align: middle;
80
+ border-radius: $radius-50;
81
+ padding: 2px $space-100;
82
+ border: 1px solid transparent;
83
+
84
+ @each $color, $value in $token-colors {
85
+ &--variation-#{$color} {
86
+ background-color: $value;
87
+
88
+ @each $col-l in $light-scale {
89
+ @if $color == $col-l {
90
+ color: $color-black;
91
+ }
92
+ }
93
+ &-invert {
94
+ background-color: fade-out($value, 0.9);
95
+ color: $value;
96
+ }
97
+ &-outline {
98
+ background-color: $color-white;
99
+ color: $value;
100
+ border-color: fade-out($value, 0.6);
101
+ }
102
+ &-modern {
103
+ background-color: rgba($value, 0.1);
104
+ color: $value;
105
+ border-radius: $radius-150;
106
+ }
107
+ }
108
+ }
109
+ &--vertical-line {
110
+ padding: 0;
111
+ border-radius: 0;
112
+ width: 5px;
113
+ #{$block-name} {
114
+ &__text {
115
+ display: none;
116
+ }
117
+ }
118
+ }
119
+ }
120
+ </style>