mediacube-ui 0.1.347 → 0.1.348

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 (105) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/package.json +9 -2
  3. package/src/elements/McAvatar/McAvatar.vue +276 -0
  4. package/src/elements/McBadge/McBadge.vue +153 -0
  5. package/src/elements/McButton/McButton.vue +850 -0
  6. package/src/elements/McChip/McChip.vue +305 -0
  7. package/src/elements/McCropper/McCropper.vue +135 -0
  8. package/src/elements/McDate/McDate.vue +107 -0
  9. package/src/elements/McDatePicker/McDatePicker.vue +910 -0
  10. package/src/elements/McField/McFieldCheckbox/McFieldCheckbox.vue +339 -0
  11. package/src/elements/McField/McFieldRadio/McFieldRadioButton/McFieldRadioButton.vue +207 -0
  12. package/src/elements/McField/McFieldRadio/McFieldRadioGroup/McFieldRadioGroup.vue +198 -0
  13. package/src/elements/McField/McFieldSelect/McFieldSelect.vue +1088 -0
  14. package/src/elements/McField/McFieldText/McFieldText.vue +977 -0
  15. package/src/elements/McField/McFieldToggle/McFieldToggle.vue +273 -0
  16. package/src/elements/McInfinityLoadingIndicator/McInfinityLoadingIndicator.vue +97 -0
  17. package/src/elements/McNotification/McNotification.vue +215 -0
  18. package/src/elements/McProgress/McProgress.vue +223 -0
  19. package/src/elements/McRangeSlider/McRangeSlider.vue +199 -0
  20. package/src/elements/McSeparator/McSeparator.vue +143 -0
  21. package/src/elements/McSlideUpDown/McSlideUpDown.vue +157 -0
  22. package/src/elements/McSvgIcon/McSvgIcon.vue +128 -0
  23. package/src/elements/McTabs/McTab/McTab.vue +189 -0
  24. package/src/elements/McTabs/McTabs/McTabs.vue +538 -0
  25. package/src/elements/McTitle/McTitle.vue +370 -0
  26. package/src/elements/McTooltip/McTooltip.vue +339 -0
  27. package/src/helpers/consts.js +3 -0
  28. package/src/helpers/delayedAction.js +26 -0
  29. package/src/helpers/storybookFunctions.js +19 -0
  30. package/src/helpers/storybookVariables.js +24 -0
  31. package/src/mixins/equalFieldHeight.js +59 -0
  32. package/src/mixins/fieldErrors.js +28 -0
  33. package/src/patterns/McAccordion/McAccordion.vue +53 -0
  34. package/src/patterns/McCells/McCell/McCell.vue +102 -0
  35. package/src/patterns/McChat/McChat.vue +306 -0
  36. package/src/patterns/McChat/McChatComment/McChatComment.vue +268 -0
  37. package/src/patterns/McChat/McChatForm/McChatForm.vue +150 -0
  38. package/src/patterns/McCollapse/McCollapse.vue +282 -0
  39. package/src/patterns/McDrawer/McDrawer.vue +150 -0
  40. package/src/patterns/McDropdown/McDropdown.vue +249 -0
  41. package/src/patterns/McDropdown/McDropdownPanel/McDropdownPanel.vue +44 -0
  42. package/src/patterns/McFakeScroll/McFakeScroll.vue +279 -0
  43. package/src/patterns/McFilter/McFilter.vue +847 -0
  44. package/src/patterns/McFilter/McFilterChip/McFilterChip.vue +85 -0
  45. package/src/patterns/McFilter/McFilterTags/McFilterTags.vue +376 -0
  46. package/src/patterns/McFilter/McFilterTypeDate/McFilterTypeDate.vue +70 -0
  47. package/src/patterns/McFilter/McFilterTypeRange/McFilterTypeRange.vue +133 -0
  48. package/src/patterns/McFilter/McFilterTypeRelation/McFilterTypeRelation.vue +224 -0
  49. package/src/patterns/McFilter/McFilterTypeSimple/McFilterTypeSimple.vue +164 -0
  50. package/src/patterns/McFilter/McFilterTypeText/McFilterTypeText.vue +62 -0
  51. package/src/patterns/McGrid/McGridCol/McGridCol.vue +166 -0
  52. package/src/patterns/McGrid/McGridRow/McGridRow.vue +158 -0
  53. package/src/patterns/McModal/McModal.vue +686 -0
  54. package/src/patterns/McOverlay/McOverlay.vue +79 -0
  55. package/src/patterns/McPreview/McPreview.vue +119 -0
  56. package/src/patterns/McSideBar/McSideBar/McSideBar.vue +389 -0
  57. package/src/patterns/McSideBar/McSideBarBottom/McSideBarBottom.vue +126 -0
  58. package/src/patterns/McSideBar/McSideBarButton/McSideBarButton.vue +257 -0
  59. package/src/patterns/McSideBar/McSideBarCenter/McSideBarCenter.vue +369 -0
  60. package/src/patterns/McSideBar/McSideBarTop/McSideBarTop.vue +243 -0
  61. package/src/patterns/McStack/McStack.vue +163 -0
  62. package/src/patterns/McTable/McTable/McTable.vue +860 -0
  63. package/src/patterns/McTable/McTableCol/McTableCol.vue +299 -0
  64. package/src/patterns/McTableCard/McTableCard.vue +138 -0
  65. package/src/patterns/McTableCard/McTableCardHeader/McTableCardHeader.vue +76 -0
  66. package/src/patterns/McTopBar/McTopBar.vue +155 -0
  67. package/src/patterns/McWrapScroll/McWrapScroll.vue +293 -0
  68. package/src/styles/_functions.scss +189 -0
  69. package/src/styles/_mixins.scss +619 -0
  70. package/src/styles/_spacing.scss +33 -0
  71. package/src/styles/_variables.scss +23 -0
  72. package/src/styles/global.scss +311 -0
  73. package/src/styles/main.scss +4 -0
  74. package/src/styles/table.scss +12 -0
  75. package/src/styles/toast.scss +59 -0
  76. package/src/templates/layouts/McContentFixed/McContentFixed.vue +60 -0
  77. package/src/templates/layouts/McMain/McMain.vue +115 -0
  78. package/src/templates/layouts/McRoot/McRoot.vue +45 -0
  79. package/src/tokens/animations.scss +9 -0
  80. package/src/tokens/border-radius.scss +26 -0
  81. package/src/tokens/box-shadows.scss +28 -0
  82. package/src/tokens/colors.scss +82 -0
  83. package/src/tokens/durations.scss +7 -0
  84. package/src/tokens/easings.scss +6 -0
  85. package/src/tokens/font-families.scss +8 -0
  86. package/src/tokens/font-sizes.scss +23 -0
  87. package/src/tokens/font-weights.scss +9 -0
  88. package/src/tokens/gradients.scss +19 -0
  89. package/src/tokens/letter-spacings.scss +6 -0
  90. package/src/tokens/line-heights.scss +22 -0
  91. package/src/tokens/media-queries.scss +32 -0
  92. package/src/tokens/opacities.scss +8 -0
  93. package/src/tokens/sizes.scss +47 -0
  94. package/src/tokens/spacings.scss +38 -0
  95. package/src/tokens/z-indexes.scss +14 -0
  96. package/src/utils/dayjs.js +19 -0
  97. package/src/utils/filters.js +11 -0
  98. package/src/utils/getTokens.js +41 -0
  99. package/src/utils/load-icons.js +3 -0
  100. package/src/utils/treeSearch.js +30 -0
  101. package/src/utils/webFontLoader.js +12 -0
  102. package/dist/0.mediacube-ui.umd.js +0 -50
  103. package/dist/assets/img/icons.3b7d59b2f49c67a2a3a4566b8ab233fd.svg +0 -1
  104. package/dist/assets/img/no_table_data.236cd56f46cfb71fc363b008d4ca70d5.png +0 -0
  105. package/dist/assets/img/no_user.e0030d6e54e2400e1181fd22b83cf8ae.png +0 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [0.1.348](https://github.com/MediaCubeCo/mcui/compare/v0.1.347...v0.1.348) (2024-12-18)
6
+
5
7
  ### [0.1.347](https://github.com/MediaCubeCo/mcui/compare/v0.1.346...v0.1.347) (2024-12-18)
6
8
 
7
9
  ### [0.1.346](https://github.com/MediaCubeCo/mcui/compare/v0.1.345...v0.1.346) (2024-12-11)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mediacube-ui",
3
- "version": "0.1.347",
3
+ "version": "0.1.348",
4
4
  "description": "Design system for Mediacube services",
5
5
  "author": "Mediacube",
6
6
  "private": false,
@@ -8,11 +8,18 @@
8
8
  "license": "MIT",
9
9
  "main": "dist/mediacube-ui.umd.js",
10
10
  "files": [
11
- "dist",
12
11
  "src/assets/fonts",
13
12
  "src/assets/img",
14
13
  "src/assets/tokens",
15
14
  "src/assets/icons.svg",
15
+ "src/helpers",
16
+ "src/styles",
17
+ "src/tokens",
18
+ "src/utils",
19
+ "src/mixins",
20
+ "src/elements/**/*.vue",
21
+ "src/patterns/**/*.vue",
22
+ "src/templates/**/*.vue",
16
23
  "src/main.js"
17
24
  ],
18
25
  "scripts": {
@@ -0,0 +1,276 @@
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--has-dot': !!props.dotColor,
93
+ ...(data.class || {}),
94
+ }
95
+
96
+ if (data.staticClass) {
97
+ const staticClasses = data.staticClass.split(' ')
98
+ const targetClasses = hasStatus ? wrapperClasses : avatarClasses
99
+ staticClasses.forEach(c => c && (targetClasses[c] = true))
100
+ }
101
+
102
+ let style = {}
103
+ if (hasStatus) {
104
+ if (props.borderColor) style['--mc-avatar-border-color'] = `var(--color-${props.borderColor})`
105
+ if (props.dotColor) style['--mc-avatar-dot-color'] = `var(--color-${props.dotColor})`
106
+ }
107
+ if (props.size) {
108
+ style['--mc-avatar-avatar-size'] = `var(--size-${props.size})`
109
+ if (+props.size < 500) {
110
+ style['--mc-avatar-avatar-radius'] = `var(--radius-50)`
111
+ }
112
+ switch (+props.size) {
113
+ case 500:
114
+ case 600: {
115
+ style['--mc-avatar-dot-size'] = `var(--size-150)`
116
+ break
117
+ }
118
+ case 700:
119
+ case 800:
120
+ case 900:
121
+ case 1000: {
122
+ style['--mc-avatar-dot-size'] = `var(--size-200)`
123
+ style['--mc-avatar-dot-border-width'] = '2px'
124
+ break
125
+ }
126
+ }
127
+ }
128
+ if (data.staticStyle) {
129
+ style = data.staticStyle
130
+ }
131
+
132
+ const lazyOptions = {
133
+ name: 'lazy',
134
+ value: {
135
+ src: props.src,
136
+ error: defaultImage,
137
+ attempt: 1,
138
+ },
139
+ }
140
+ const directives = props.lazy ? [lazyOptions] : []
141
+
142
+ const createAvatar = () => {
143
+ return h(
144
+ 'figure',
145
+ {
146
+ class: avatarClasses,
147
+ style: {
148
+ ...(!hasStatus ? style : {}),
149
+ },
150
+ },
151
+ [
152
+ h('img', {
153
+ class: 'mc-avatar__img',
154
+ attrs: {
155
+ alt: props.alt,
156
+ ...(!props.lazy ? { src: props.src || defaultImage } : {}),
157
+ draggable: props.draggable,
158
+ },
159
+ directives,
160
+ key: props.src,
161
+ on: {
162
+ error(e) {
163
+ if (!e.target) return
164
+ e.target.src = defaultImage
165
+ },
166
+ },
167
+ }),
168
+ ],
169
+ )
170
+ }
171
+
172
+ const createWrapper = () => {
173
+ return h(
174
+ 'section',
175
+ {
176
+ class: wrapperClasses,
177
+ style: {
178
+ ...style,
179
+ },
180
+ },
181
+ [createAvatar()],
182
+ )
183
+ }
184
+ return hasStatus ? createWrapper() : createAvatar()
185
+ },
186
+ }
187
+ </script>
188
+ <style lang="scss">
189
+ @import '../../styles/mixins';
190
+ @import '../../tokens/durations';
191
+ @import '../../tokens/colors';
192
+ @import '../../tokens/spacings';
193
+ $color-borders: $token-colors;
194
+ $dot-colors: $token-colors;
195
+
196
+ .mc-avatar-status {
197
+ $status-name: &;
198
+ --mc-avatar-dot-border-width: 1px;
199
+ --mc-avatar-dot-size: #{$space-100};
200
+ --mc-avatar-border-color: initial;
201
+ display: inline-flex;
202
+ border: 2px solid var(--mc-avatar-border-color);
203
+ padding: 1px;
204
+ position: relative;
205
+ border-radius: $radius-circle;
206
+
207
+ .mc-avatar {
208
+ border-radius: $radius-circle;
209
+ }
210
+
211
+ &::after {
212
+ width: var(--mc-avatar-dot-size);
213
+ height: var(--mc-avatar-dot-size);
214
+ @include pseudo($display: none);
215
+ left: 0;
216
+ bottom: 0;
217
+ border: var(--mc-avatar-dot-border-width) solid $color-white;
218
+ background-color: var(--mc-avatar-dot-color);
219
+ z-index: 2;
220
+ border-radius: 50%;
221
+ }
222
+ &--has-dot {
223
+ &:after {
224
+ display: block;
225
+ }
226
+ }
227
+
228
+ transition: box-shadow $duration-s;
229
+
230
+ &:hover,
231
+ &:focus {
232
+ .mc-avatar {
233
+ box-shadow: none;
234
+ }
235
+ }
236
+
237
+ &--shadow {
238
+ &:hover,
239
+ &:focus {
240
+ background-color: $color-hover-gray;
241
+ box-shadow: 0 0 0 $space-50 $color-hover-gray;
242
+ }
243
+ }
244
+ }
245
+
246
+ .mc-avatar {
247
+ $avatar-name: &;
248
+ --mc-avatar-avatar-radius: #{$space-100};
249
+ @include reset();
250
+ position: relative;
251
+ display: inline-block;
252
+ width: var(--mc-avatar-avatar-size);
253
+ height: var(--mc-avatar-avatar-size);
254
+ min-width: var(--mc-avatar-avatar-size);
255
+ border-radius: var(--mc-avatar-avatar-radius);
256
+ overflow: hidden;
257
+ background-color: $color-hover-gray;
258
+ transition: box-shadow $duration-s;
259
+
260
+ &__img {
261
+ width: 100%;
262
+ height: 100%;
263
+ object-fit: cover;
264
+ }
265
+ &--rounded {
266
+ border-radius: $radius-circle;
267
+ }
268
+
269
+ &--shadow {
270
+ &:hover,
271
+ &:focus {
272
+ box-shadow: 0 0 0 $space-100 $color-hover-gray;
273
+ }
274
+ }
275
+ }
276
+ </style>
@@ -0,0 +1,153 @@
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, listeners }) {
27
+ const variation = `${props.variation}${props.modern ? '-modern' : ''}`
28
+ const classes = {
29
+ 'mc-badge': true,
30
+ 'mc-badge--vertical-line': props.verticalLine,
31
+ 'mc-badge--modern': props.modern,
32
+ ...(data.class || {}),
33
+ }
34
+
35
+ if (data.staticClass) {
36
+ const staticClasses = data.staticClass.split(' ')
37
+ staticClasses.forEach(c => c && (classes[c] = true))
38
+ }
39
+
40
+ let style = {}
41
+ const texts = variation.split('-')
42
+ const currentStyle = texts[texts.length - 1]
43
+ const color = props.variation ? variation.replace(`-${currentStyle}`, '') : variation
44
+ const setProperty = ({ property = '--mc-badge-color', value, newColor = color } = {}) =>
45
+ (style[property] = value || `var(--color-${newColor})`)
46
+ switch (currentStyle) {
47
+ case 'outline': {
48
+ setProperty()
49
+ setProperty({ property: '--mc-badge-border-color' })
50
+ setProperty({ property: '--mc-badge-background-color', newColor: 'white' })
51
+ setProperty({ property: '--mc-badge-background-opacity', value: '0.4' })
52
+ break
53
+ }
54
+ case 'invert':
55
+ case 'modern': {
56
+ setProperty()
57
+ setProperty({ property: '--mc-badge-background-color' })
58
+ setProperty({ property: '--mc-badge-background-opacity', value: '0.1' })
59
+ break
60
+ }
61
+ default: {
62
+ const lightColors = ['hover-gray', 'white', 'lighter-blue', 'lighter-purple', 'toxic', 'transparent']
63
+ lightColors.includes(variation) && setProperty({ newColor: 'black' })
64
+ setProperty({ property: '--mc-badge-background-color', newColor: variation })
65
+ break
66
+ }
67
+ }
68
+ if (data.staticStyle) {
69
+ style = data.staticStyle
70
+ }
71
+
72
+ return h(
73
+ 'section',
74
+ {
75
+ class: classes,
76
+ style,
77
+ on: listeners,
78
+ },
79
+ [
80
+ h(
81
+ 'div',
82
+ {
83
+ class: 'mc-badge__text',
84
+ },
85
+ slots()['default'],
86
+ ),
87
+ h('div', {
88
+ class: 'mc-badge__background',
89
+ }),
90
+ ],
91
+ )
92
+ },
93
+ }
94
+ </script>
95
+
96
+ <style lang="scss">
97
+ @import '../../styles/mixins';
98
+ @import '../../tokens/font-families';
99
+ @import '../../tokens/letter-spacings';
100
+ @import '../../tokens/colors';
101
+ @import '../../tokens/font-sizes';
102
+ @import '../../tokens/line-heights';
103
+ @import '../../tokens/font-weights';
104
+ @import '../../tokens/spacings';
105
+ .mc-badge {
106
+ $block-name: &;
107
+ --mc-badge-color: #{$color-white};
108
+ --mc-badge-background-color: inherit;
109
+ --mc-badge-background-opacity: initial;
110
+ --mc-badge-border-color: #{$color-transparent};
111
+ @include ellipsis(100%, inline-flex);
112
+ align-items: center;
113
+ color: var(--mc-badge-color);
114
+ position: relative;
115
+ font-family: $font-family-main;
116
+ font-size: $font-size-100;
117
+ line-height: $line-height-150;
118
+ height: $line-height-200;
119
+ font-weight: $font-weight-medium;
120
+ text-transform: uppercase;
121
+ letter-spacing: $letter-spacing-m;
122
+ vertical-align: middle;
123
+ padding: 2px $space-100;
124
+ border-radius: $radius-50;
125
+ &:before {
126
+ content: '';
127
+ position: absolute;
128
+ left: 0;
129
+ top: 0;
130
+ @include size(100%);
131
+ background-color: var(--mc-badge-background-color);
132
+ opacity: var(--mc-badge-background-opacity);
133
+ border: 1px solid var(--mc-badge-border-color);
134
+ border-radius: inherit;
135
+ }
136
+ &__text {
137
+ z-index: 1;
138
+ }
139
+ &--modern {
140
+ border-radius: $radius-50;
141
+ }
142
+ &--vertical-line {
143
+ padding: 0;
144
+ border-radius: 0;
145
+ width: 5px;
146
+ #{$block-name} {
147
+ &__text {
148
+ display: none;
149
+ }
150
+ }
151
+ }
152
+ }
153
+ </style>