mediacube-ui 0.1.15 → 0.1.17

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 (60) hide show
  1. package/package.json +5 -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
  26. package/src/patterns/McAccordion/McAccordion.vue +53 -0
  27. package/src/patterns/McCells/McCell/McCell.vue +100 -0
  28. package/src/patterns/McChat/McChat.vue +304 -0
  29. package/src/patterns/McChat/McChatComment/McChatComment.vue +240 -0
  30. package/src/patterns/McChat/McChatForm/McChatForm.vue +146 -0
  31. package/src/patterns/McCollapse/McCollapse.vue +280 -0
  32. package/src/patterns/McDrawer/McDrawer.vue +143 -0
  33. package/src/patterns/McDropdown/McDropdown.vue +210 -0
  34. package/src/patterns/McDropdown/McDropdownPanel/McDropdownPanel.vue +38 -0
  35. package/src/patterns/McFakeScroll/McFakeScroll.vue +276 -0
  36. package/src/patterns/McFilter/McFilter.vue +800 -0
  37. package/src/patterns/McFilter/McFilterChip/McFilterChip.vue +83 -0
  38. package/src/patterns/McFilter/McFilterTags/McFilterTags.vue +356 -0
  39. package/src/patterns/McFilter/McFilterTypeDate/McFilterTypeDate.vue +66 -0
  40. package/src/patterns/McFilter/McFilterTypeRange/McFilterTypeRange.vue +131 -0
  41. package/src/patterns/McFilter/McFilterTypeRelation/McFilterTypeRelation.vue +204 -0
  42. package/src/patterns/McFilter/McFilterTypeText/McFilterTypeText.vue +62 -0
  43. package/src/patterns/McGrid/McGridCol/McGridCol.vue +165 -0
  44. package/src/patterns/McGrid/McGridRow/McGridRow.vue +150 -0
  45. package/src/patterns/McModal/McModal.vue +530 -0
  46. package/src/patterns/McPreview/McPreview.vue +181 -0
  47. package/src/patterns/McSideBar/McSideBar/McSideBar.vue +395 -0
  48. package/src/patterns/McSideBar/McSideBarBottom/McSideBarBottom.vue +124 -0
  49. package/src/patterns/McSideBar/McSideBarButton/McSideBarButton.vue +277 -0
  50. package/src/patterns/McSideBar/McSideBarCenter/McSideBarCenter.vue +337 -0
  51. package/src/patterns/McSideBar/McSideBarTop/McSideBarTop.vue +236 -0
  52. package/src/patterns/McStack/McStack.vue +119 -0
  53. package/src/patterns/McTable/McTable/McTable.vue +826 -0
  54. package/src/patterns/McTable/McTableCol/McTableCol.vue +282 -0
  55. package/src/patterns/McTableCard/McTableCard.vue +134 -0
  56. package/src/patterns/McTableCard/McTableCardHeader/McTableCardHeader.vue +72 -0
  57. package/src/patterns/McTopBar/McTopBar.vue +152 -0
  58. package/src/templates/layouts/McContentFixed/McContentFixed.vue +59 -0
  59. package/src/templates/layouts/McMain/McMain.vue +114 -0
  60. package/src/templates/layouts/McRoot/McRoot.vue +44 -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.17",
4
4
  "description": "Design system for MediaCube services",
5
5
  "author": "MediaCube",
6
6
  "private": false,
@@ -14,7 +14,10 @@
14
14
  "dist/*",
15
15
  "src/styles/*",
16
16
  "src/assets/*",
17
- "src/tokens/*"
17
+ "src/tokens/*",
18
+ "src/elements/**/*.vue",
19
+ "src/patterns/**/*.vue",
20
+ "src/templates/**/*.vue"
18
21
  ],
19
22
  "scripts": {
20
23
  "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>