mediacube-ui 0.1.347 → 0.1.349

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 (107) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/mediacube-ui.common.js +384 -0
  3. package/package.json +11 -4
  4. package/src/elements/McAvatar/McAvatar.vue +276 -0
  5. package/src/elements/McBadge/McBadge.vue +153 -0
  6. package/src/elements/McButton/McButton.vue +850 -0
  7. package/src/elements/McChip/McChip.vue +305 -0
  8. package/src/elements/McCropper/McCropper.vue +135 -0
  9. package/src/elements/McDate/McDate.vue +107 -0
  10. package/src/elements/McDatePicker/McDatePicker.vue +910 -0
  11. package/src/elements/McField/McFieldCheckbox/McFieldCheckbox.vue +339 -0
  12. package/src/elements/McField/McFieldRadio/McFieldRadioButton/McFieldRadioButton.vue +207 -0
  13. package/src/elements/McField/McFieldRadio/McFieldRadioGroup/McFieldRadioGroup.vue +198 -0
  14. package/src/elements/McField/McFieldSelect/McFieldSelect.vue +1088 -0
  15. package/src/elements/McField/McFieldText/McFieldText.vue +977 -0
  16. package/src/elements/McField/McFieldToggle/McFieldToggle.vue +273 -0
  17. package/src/elements/McInfinityLoadingIndicator/McInfinityLoadingIndicator.vue +97 -0
  18. package/src/elements/McNotification/McNotification.vue +215 -0
  19. package/src/elements/McProgress/McProgress.vue +223 -0
  20. package/src/elements/McRangeSlider/McRangeSlider.vue +199 -0
  21. package/src/elements/McSeparator/McSeparator.vue +143 -0
  22. package/src/elements/McSlideUpDown/McSlideUpDown.vue +157 -0
  23. package/src/elements/McSvgIcon/McSvgIcon.vue +128 -0
  24. package/src/elements/McTabs/McTab/McTab.vue +189 -0
  25. package/src/elements/McTabs/McTabs/McTabs.vue +538 -0
  26. package/src/elements/McTitle/McTitle.vue +370 -0
  27. package/src/elements/McTooltip/McTooltip.vue +339 -0
  28. package/src/helpers/consts.js +3 -0
  29. package/src/helpers/delayedAction.js +26 -0
  30. package/src/helpers/storybookFunctions.js +19 -0
  31. package/src/helpers/storybookVariables.js +24 -0
  32. package/src/mixins/equalFieldHeight.js +59 -0
  33. package/src/mixins/fieldErrors.js +28 -0
  34. package/src/patterns/McAccordion/McAccordion.vue +53 -0
  35. package/src/patterns/McCells/McCell/McCell.vue +102 -0
  36. package/src/patterns/McChat/McChat.vue +306 -0
  37. package/src/patterns/McChat/McChatComment/McChatComment.vue +268 -0
  38. package/src/patterns/McChat/McChatForm/McChatForm.vue +150 -0
  39. package/src/patterns/McCollapse/McCollapse.vue +282 -0
  40. package/src/patterns/McDrawer/McDrawer.vue +150 -0
  41. package/src/patterns/McDropdown/McDropdown.vue +249 -0
  42. package/src/patterns/McDropdown/McDropdownPanel/McDropdownPanel.vue +44 -0
  43. package/src/patterns/McFakeScroll/McFakeScroll.vue +279 -0
  44. package/src/patterns/McFilter/McFilter.vue +847 -0
  45. package/src/patterns/McFilter/McFilterChip/McFilterChip.vue +85 -0
  46. package/src/patterns/McFilter/McFilterTags/McFilterTags.vue +376 -0
  47. package/src/patterns/McFilter/McFilterTypeDate/McFilterTypeDate.vue +70 -0
  48. package/src/patterns/McFilter/McFilterTypeRange/McFilterTypeRange.vue +133 -0
  49. package/src/patterns/McFilter/McFilterTypeRelation/McFilterTypeRelation.vue +224 -0
  50. package/src/patterns/McFilter/McFilterTypeSimple/McFilterTypeSimple.vue +164 -0
  51. package/src/patterns/McFilter/McFilterTypeText/McFilterTypeText.vue +62 -0
  52. package/src/patterns/McGrid/McGridCol/McGridCol.vue +166 -0
  53. package/src/patterns/McGrid/McGridRow/McGridRow.vue +158 -0
  54. package/src/patterns/McModal/McModal.vue +686 -0
  55. package/src/patterns/McOverlay/McOverlay.vue +79 -0
  56. package/src/patterns/McPreview/McPreview.vue +119 -0
  57. package/src/patterns/McSideBar/McSideBar/McSideBar.vue +389 -0
  58. package/src/patterns/McSideBar/McSideBarBottom/McSideBarBottom.vue +126 -0
  59. package/src/patterns/McSideBar/McSideBarButton/McSideBarButton.vue +257 -0
  60. package/src/patterns/McSideBar/McSideBarCenter/McSideBarCenter.vue +369 -0
  61. package/src/patterns/McSideBar/McSideBarTop/McSideBarTop.vue +243 -0
  62. package/src/patterns/McStack/McStack.vue +163 -0
  63. package/src/patterns/McTable/McTable/McTable.vue +860 -0
  64. package/src/patterns/McTable/McTableCol/McTableCol.vue +299 -0
  65. package/src/patterns/McTableCard/McTableCard.vue +138 -0
  66. package/src/patterns/McTableCard/McTableCardHeader/McTableCardHeader.vue +76 -0
  67. package/src/patterns/McTopBar/McTopBar.vue +155 -0
  68. package/src/patterns/McWrapScroll/McWrapScroll.vue +293 -0
  69. package/src/styles/_functions.scss +189 -0
  70. package/src/styles/_mixins.scss +619 -0
  71. package/src/styles/_spacing.scss +33 -0
  72. package/src/styles/_variables.scss +23 -0
  73. package/src/styles/global.scss +311 -0
  74. package/src/styles/main.scss +4 -0
  75. package/src/styles/table.scss +12 -0
  76. package/src/styles/toast.scss +59 -0
  77. package/src/templates/layouts/McContentFixed/McContentFixed.vue +60 -0
  78. package/src/templates/layouts/McMain/McMain.vue +115 -0
  79. package/src/templates/layouts/McRoot/McRoot.vue +45 -0
  80. package/src/tokens/animations.scss +9 -0
  81. package/src/tokens/border-radius.scss +26 -0
  82. package/src/tokens/box-shadows.scss +28 -0
  83. package/src/tokens/colors.scss +82 -0
  84. package/src/tokens/durations.scss +7 -0
  85. package/src/tokens/easings.scss +6 -0
  86. package/src/tokens/font-families.scss +8 -0
  87. package/src/tokens/font-sizes.scss +23 -0
  88. package/src/tokens/font-weights.scss +9 -0
  89. package/src/tokens/gradients.scss +19 -0
  90. package/src/tokens/letter-spacings.scss +6 -0
  91. package/src/tokens/line-heights.scss +22 -0
  92. package/src/tokens/media-queries.scss +32 -0
  93. package/src/tokens/opacities.scss +8 -0
  94. package/src/tokens/sizes.scss +47 -0
  95. package/src/tokens/spacings.scss +38 -0
  96. package/src/tokens/z-indexes.scss +14 -0
  97. package/src/utils/dayjs.js +19 -0
  98. package/src/utils/filters.js +11 -0
  99. package/src/utils/getTokens.js +41 -0
  100. package/src/utils/load-icons.js +3 -0
  101. package/src/utils/treeSearch.js +30 -0
  102. package/src/utils/webFontLoader.js +12 -0
  103. package/dist/0.mediacube-ui.umd.js +0 -50
  104. package/dist/assets/img/icons.3b7d59b2f49c67a2a3a4566b8ab233fd.svg +0 -1
  105. package/dist/assets/img/no_table_data.236cd56f46cfb71fc363b008d4ca70d5.png +0 -0
  106. package/dist/assets/img/no_user.e0030d6e54e2400e1181fd22b83cf8ae.png +0 -0
  107. package/dist/mediacube-ui.umd.js +0 -1
@@ -0,0 +1,339 @@
1
+ <template>
2
+ <div :dir="dir" :class="classes" :style="styles">
3
+ <div v-if="title || $slots.header" class="mc-field-text__header">
4
+ <!-- @slot Слот заголовка -->
5
+ <slot name="header">
6
+ <mc-title :ellipsis="false" weight="medium">{{ title }}</mc-title>
7
+ </slot>
8
+ </div>
9
+ <div class="mc-field-checkbox__input-wrap">
10
+ <label class="mc-field-checkbox__name">
11
+ <mc-svg-icon
12
+ class="mc-field-checkbox__icon"
13
+ :name="isChecked ? 'checkbox--checked' : 'checkbox'"
14
+ :color="isChecked ? 'purple' : 'gray'"
15
+ :size="checkboxSize"
16
+ />
17
+ <input v-bind="inputProps" @change="handleChange" />
18
+ <span v-if="mainText || $slots.default" class="mc-field-checkbox__name-text">
19
+ <!-- @slot Слот для пользовательской подписи чекбокса -->
20
+ <slot>
21
+ <mc-title tag-name="div" :ellipsis="false">
22
+ {{ mainText }}
23
+ </mc-title>
24
+ </slot>
25
+ </span>
26
+ </label>
27
+ <div class="mc-field-checkbox__footer">
28
+ <mc-title
29
+ v-if="errorText"
30
+ tag-name="div"
31
+ color="red"
32
+ variation="overline"
33
+ max-width="100%"
34
+ :ellipsis="false"
35
+ >
36
+ {{ errorText }}
37
+ </mc-title>
38
+ <br v-if="errorText" />
39
+ <!-- @slot Слот доп. текста под чекбоксом -->
40
+ <slot name="footer">
41
+ <mc-title
42
+ v-if="helpText"
43
+ tag-name="div"
44
+ variation="overline"
45
+ color="gray"
46
+ max-width="100%"
47
+ :ellipsis="false"
48
+ >
49
+ {{ helpText }}
50
+ </mc-title>
51
+ </slot>
52
+ </div>
53
+ </div>
54
+ </div>
55
+ </template>
56
+
57
+ <script>
58
+ import McTitle from '../../McTitle/McTitle'
59
+ import McSvgIcon from '../../McSvgIcon/McSvgIcon'
60
+ import fieldErrors from '../../../mixins/fieldErrors'
61
+ import { LANGUAGES } from '../../../helpers/consts'
62
+ export default {
63
+ name: 'McFieldCheckbox',
64
+ components: { McTitle, McSvgIcon },
65
+ mixins: [fieldErrors],
66
+ props: {
67
+ /**
68
+ * Значение
69
+ *
70
+ */
71
+ // eslint-disable-next-line vue/require-prop-types
72
+ value: {
73
+ default: null,
74
+ },
75
+
76
+ /**
77
+ * Name
78
+ *
79
+ */
80
+ name: {
81
+ type: String,
82
+ default: null,
83
+ },
84
+
85
+ /**
86
+ * Выбранное значение
87
+ *
88
+ */
89
+ // eslint-disable-next-line vue/require-prop-types
90
+ checkedValue: {
91
+ default: true,
92
+ },
93
+
94
+ /**
95
+ * Невыбранное значение
96
+ *
97
+ */
98
+ // eslint-disable-next-line vue/require-prop-types
99
+ uncheckedValue: {
100
+ default: false,
101
+ },
102
+
103
+ /**
104
+ * Ошибки
105
+ *
106
+ */
107
+ errors: {
108
+ type: Array,
109
+ default: null,
110
+ },
111
+
112
+ /**
113
+ * Вспомогательный текст под инпутом:
114
+ *
115
+ */
116
+ helpText: {
117
+ type: String,
118
+ default: null,
119
+ },
120
+
121
+ /**
122
+ * Подпись чекбокса:
123
+ *
124
+ */
125
+ mainText: {
126
+ type: String,
127
+ default: null,
128
+ },
129
+
130
+ /**
131
+ * Заголовок поля:
132
+ *
133
+ */
134
+ title: {
135
+ type: String,
136
+ default: null,
137
+ },
138
+
139
+ /**
140
+ * Отключенное состояние
141
+ *
142
+ */
143
+ disabled: {
144
+ type: Boolean,
145
+ default: false,
146
+ },
147
+ multiple: {
148
+ type: Boolean,
149
+ default: false,
150
+ },
151
+ checkboxSize: {
152
+ type: String,
153
+ default: '250',
154
+ },
155
+
156
+ /**
157
+ * Атрибут tabindex для главного элемента
158
+ *
159
+ */
160
+ tabindex: {
161
+ type: [String, Number],
162
+ },
163
+ locale: {
164
+ type: String,
165
+ default: null,
166
+ },
167
+ },
168
+ computed: {
169
+ rtl() {
170
+ return LANGUAGES.rtl.includes(this.locale)
171
+ },
172
+ dir() {
173
+ return this.rtl ? 'rtl' : null
174
+ },
175
+ classes() {
176
+ return {
177
+ 'mc-field-checkbox': true,
178
+ 'mc-field-checkbox--error': this.errors,
179
+ 'mc-field-checkbox--disabled': this.disabled,
180
+ 'mc-field-checkbox--empty': !this.mainText && !this.$slots.default,
181
+ 'mc-field-checkbox--rtl': this.rtl,
182
+ }
183
+ },
184
+ styles() {
185
+ return {
186
+ '--mc-field-checkbox-size': this.checkboxSize && `var(--size-${this.checkboxSize})`,
187
+ }
188
+ },
189
+ inputProps() {
190
+ return {
191
+ disabled: this.disabled,
192
+ name: this.name,
193
+ checked: this.isChecked,
194
+ tabindex: this.tabindex,
195
+ type: 'checkbox',
196
+ class: 'mc-field-checkbox__input',
197
+ }
198
+ },
199
+ isChecked() {
200
+ return this.multiple && this.value
201
+ ? this.value.includes(this.checkedValue)
202
+ : this.value === this.checkedValue
203
+ },
204
+ },
205
+ methods: {
206
+ handleChange(e) {
207
+ this.toggleErrorVisible()
208
+ /**
209
+ * Событие инпута
210
+ * @property {boolean}
211
+ */
212
+ this.$emit(
213
+ 'input',
214
+ this.multiple && this.value
215
+ ? this.value.includes(this.checkedValue)
216
+ ? this.value.filter(v => v !== this.checkedValue)
217
+ : [...this.value, this.checkedValue]
218
+ : e.target.checked
219
+ ? this.checkedValue
220
+ : this.uncheckedValue,
221
+ )
222
+ },
223
+ },
224
+ }
225
+ </script>
226
+
227
+ <style lang="scss">
228
+ @import '../../../styles/mixins';
229
+ @import '../../../tokens/spacings';
230
+ @import '../../../tokens/line-heights';
231
+ @import '../../../tokens/font-sizes';
232
+ @import '../../../tokens/colors';
233
+ .mc-field-checkbox {
234
+ $block-name: &;
235
+ position: relative;
236
+ display: block;
237
+ min-width: var(--mc-field-checkbox-size);
238
+ min-height: var(--mc-field-checkbox-size);
239
+ #{$block-name}__icon {
240
+ width: var(--mc-field-checkbox-size);
241
+ height: var(--mc-field-checkbox-size);
242
+ }
243
+
244
+ &__header {
245
+ @include reset-text-indents();
246
+ display: block;
247
+ margin-bottom: $space-100;
248
+
249
+ &:empty {
250
+ display: none;
251
+ }
252
+ }
253
+
254
+ &__name {
255
+ @include reset();
256
+ position: relative;
257
+ line-height: $line-height-200;
258
+ font-size: $font-size-200;
259
+ display: flex;
260
+ align-items: center;
261
+ cursor: pointer;
262
+ user-select: none;
263
+ }
264
+
265
+ &__icon {
266
+ z-index: 1;
267
+ &:hover {
268
+ color: $color-purple;
269
+ }
270
+ }
271
+
272
+ &__name-text {
273
+ display: inline-block;
274
+ margin-inline-start: $space-100;
275
+ &:before {
276
+ @include pseudo(none);
277
+ @include size(var(--mc-field-checkbox-size));
278
+ @include position(absolute, 0 null null 0);
279
+ background-size: 100%;
280
+ }
281
+
282
+ .mc-button {
283
+ display: inline;
284
+ white-space: normal;
285
+ vertical-align: top;
286
+ margin-inline-start: 1px;
287
+
288
+ &__text {
289
+ white-space: normal;
290
+ display: inline;
291
+ }
292
+ }
293
+ }
294
+
295
+ &__input {
296
+ display: none;
297
+ }
298
+
299
+ &__footer {
300
+ padding-inline-start: $space-250;
301
+ margin-top: $space-50;
302
+ &:empty {
303
+ display: none;
304
+ }
305
+ }
306
+
307
+ &--disabled {
308
+ #{$block-name} {
309
+ &__icon {
310
+ color: $color-outline-gray;
311
+ &:hover {
312
+ color: $color-outline-gray;
313
+ }
314
+ }
315
+ &__name-text {
316
+ &:before {
317
+ display: block;
318
+ border-radius: 2px;
319
+ background-color: $color-hover-gray;
320
+ }
321
+ }
322
+ }
323
+ }
324
+
325
+ &--empty {
326
+ #{$block-name} {
327
+ &__footer,
328
+ &__name {
329
+ padding: 0;
330
+ margin: 0;
331
+ }
332
+ }
333
+ }
334
+
335
+ &--rtl {
336
+ direction: rtl;
337
+ }
338
+ }
339
+ </style>
@@ -0,0 +1,207 @@
1
+ <template>
2
+ <label class="mc-field-radio-button" :class="classes">
3
+ <input v-bind="inputProps" @change="handleChange" />
4
+ <span class="mc-field-radio-button__icon_wrapper">
5
+ <mc-svg-icon
6
+ :name="checkedDefault ? activeIcon : 'circle'"
7
+ :color="iconColor"
8
+ :size="iconSize"
9
+ class="mc-field-radio-button__icon"
10
+ />
11
+ </span>
12
+ <span v-if="label || $slots.default" class="mc-field-radio-button__text">
13
+ <!-- @slot Слот для пользовательской подписи радио -->
14
+ <slot>
15
+ <mc-title tag-name="div" :ellipsis="false">
16
+ {{ label }}
17
+ </mc-title>
18
+ </slot>
19
+ </span>
20
+ </label>
21
+ </template>
22
+
23
+ <script>
24
+ import McTitle from '../../../McTitle/McTitle'
25
+ import McSvgIcon from '../../../McSvgIcon/McSvgIcon.vue'
26
+ export default {
27
+ name: 'McFieldRadioButton',
28
+ components: {
29
+ McTitle,
30
+ McSvgIcon,
31
+ },
32
+ props: {
33
+ /**
34
+ * Значение
35
+ */
36
+ // eslint-disable-next-line vue/require-prop-types
37
+ value: {
38
+ default: null,
39
+ },
40
+
41
+ /**
42
+ * Name
43
+ */
44
+ name: {
45
+ type: String,
46
+ required: true,
47
+ },
48
+
49
+ /**
50
+ * Предварительно активированный
51
+ */
52
+ checkedDefault: {
53
+ type: Boolean,
54
+ default: false,
55
+ },
56
+
57
+ /**
58
+ * Подпись радио:
59
+ *
60
+ */
61
+ label: {
62
+ type: String,
63
+ default: null,
64
+ },
65
+
66
+ /**
67
+ * Отключенное состояние
68
+ *
69
+ */
70
+ disabled: {
71
+ type: Boolean,
72
+ default: false,
73
+ },
74
+
75
+ /**
76
+ * Атрибут tabindex для главного элемента
77
+ *
78
+ */
79
+ tabindex: {
80
+ type: [String, Number],
81
+ },
82
+ /**
83
+ * Вариант активного состояния - circle || checkmark
84
+ * circle - внутри круг
85
+ * checkmark - внутри галочка
86
+ * */
87
+ activeVariation: {
88
+ type: String,
89
+ default: 'circle',
90
+ },
91
+ /**
92
+ * цвет
93
+ */
94
+ color: {
95
+ type: String,
96
+ default: 'purple',
97
+ },
98
+ iconSize: {
99
+ type: String,
100
+ default: '250',
101
+ },
102
+ },
103
+ computed: {
104
+ classes() {
105
+ return {
106
+ 'mc-field-radio-button--disabled': this.disabled,
107
+ 'mc-field-radio-button--empty': !this.label && !this.$slots.default,
108
+ }
109
+ },
110
+ activeIcon() {
111
+ switch (this.activeVariation) {
112
+ case 'checkmark': {
113
+ return 'check_circle_solid'
114
+ }
115
+ default: {
116
+ return 'radio--checked'
117
+ }
118
+ }
119
+ },
120
+ iconColor() {
121
+ switch (true) {
122
+ case this.disabled:
123
+ return 'outline-gray'
124
+ case this.checkedDefault:
125
+ return this.color
126
+ default:
127
+ return 'gray'
128
+ }
129
+ },
130
+ inputProps() {
131
+ return {
132
+ disabled: this.disabled,
133
+ value: this.value,
134
+ name: this.name,
135
+ checked: this.checkedDefault,
136
+ tabindex: this.tabindex,
137
+ class: 'mc-field-radio-button__input',
138
+ type: 'radio',
139
+ }
140
+ },
141
+ },
142
+ methods: {
143
+ handleChange(event) {
144
+ /**
145
+ * Событие инпута
146
+ * @property {boolean}
147
+ */
148
+ this.$emit('input', event)
149
+ },
150
+ },
151
+ }
152
+ </script>
153
+
154
+ <style lang="scss">
155
+ @import '../../../../styles/mixins';
156
+ @import '../../../../tokens/sizes';
157
+ @import '../../../../tokens/spacings';
158
+ @import '../../../../tokens/font-sizes';
159
+ @import '../../../../tokens/line-heights';
160
+ @import '../../../../tokens/colors';
161
+ .mc-field-radio-button {
162
+ $block-name: &;
163
+ display: inline-block;
164
+ min-width: $size-250;
165
+ min-height: $size-250;
166
+ @include reset();
167
+ position: relative;
168
+ padding-inline-start: $space-300;
169
+ line-height: $line-height-200;
170
+ font-size: $font-size-200;
171
+ cursor: pointer;
172
+
173
+ &__icon {
174
+ &_wrapper {
175
+ z-index: 1;
176
+ @include position(absolute, 0 null null 0);
177
+ }
178
+ }
179
+
180
+ &__text {
181
+ display: inline-block;
182
+ margin: 2px 0;
183
+ }
184
+
185
+ &__input {
186
+ display: none;
187
+ }
188
+
189
+ &--disabled {
190
+ cursor: auto;
191
+
192
+ #{$block-name}__input {
193
+ & ~ #{$block-name}__icon_wrapper {
194
+ .mc-svg-icon {
195
+ border-radius: $radius-circle;
196
+ background-color: $color-hover-gray;
197
+ }
198
+ }
199
+ }
200
+ }
201
+
202
+ &--empty {
203
+ padding: 0;
204
+ margin: 0;
205
+ }
206
+ }
207
+ </style>