itube-specs 0.0.854 → 0.0.856

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.
@@ -0,0 +1,78 @@
1
+ @use 'sass:map';
2
+ @use 'vars' as *;
3
+
4
+ // Бандлы вариантов кнопки: каждый вариант даёт полный набор цветов, чтобы
5
+ // место могло переключиться на любой из них целиком, а не по одному цвету.
6
+ $button-variants: (
7
+ primary: (
8
+ 'bg': $button-primary-bg,
9
+ 'bg--hover': $button-primary-bg--hover,
10
+ 'bg--active': $button-primary-bg,
11
+ 'text': $button-primary-text,
12
+ 'text--active': $button-primary-text,
13
+ 'border': $button-primary-border,
14
+ 'border--hover': $button-primary-border,
15
+ 'border--active': $button-primary-border,
16
+ 'icon': $button-primary-text,
17
+ ),
18
+ secondary: (
19
+ 'bg': $button-secondary-bg,
20
+ 'bg--hover': $button-secondary-bg--hover,
21
+ 'bg--active': $button-secondary-bg--active,
22
+ 'text': $button-secondary-text,
23
+ 'text--active': $button-secondary-text--active,
24
+ 'border': $button-secondary-border,
25
+ 'border--hover': $button-secondary-border,
26
+ 'border--active': $button-secondary-border--active,
27
+ 'icon': $button-secondary-icon,
28
+ ),
29
+ muted: (
30
+ 'bg': $button-muted-bg,
31
+ 'bg--hover': $button-muted-bg--hover,
32
+ 'bg--active': $button-muted-bg,
33
+ 'text': $button-muted-text,
34
+ 'text--active': $button-muted-text,
35
+ 'border': $button-muted-border,
36
+ 'border--hover': $button-muted-border--hover,
37
+ 'border--active': $button-muted-border,
38
+ 'icon': $button-muted-text,
39
+ ),
40
+ warning: (
41
+ 'bg': $button-warning-bg,
42
+ 'bg--hover': $button-warning-bg--hover,
43
+ 'bg--active': $button-warning-bg,
44
+ 'text': $button-warning-text,
45
+ 'text--active': $button-warning-text,
46
+ 'border': $button-warning-border,
47
+ 'border--hover': $button-warning-border,
48
+ 'border--active': $button-warning-border,
49
+ 'icon': $button-warning-text,
50
+ ),
51
+ );
52
+
53
+ // Вид кнопки в конкретном месте выбирает ТЕМА, а не компонент: место говорит
54
+ // «спроси у темы по этому ключу», тема отвечает именем варианта.
55
+ //
56
+ // // в компоненте
57
+ // .auth-login__cancel { @include button-variant(auth-login-cancel); }
58
+ //
59
+ // // в теме
60
+ // $button-variant-overrides: (auth-login-cancel: muted);
61
+ //
62
+ // Ключа в карте темы нет — не печатается ничего, работает вариант из пропа
63
+ // theme= на вызове. Так тема, которой тут нечего менять, не пишет ни строки.
64
+ @mixin button-variant($key) {
65
+ $name: map.get($button-variant-overrides, $key);
66
+
67
+ @if $name {
68
+ $variant: map.get($button-variants, $name);
69
+
70
+ @if not $variant {
71
+ @error 'button-variant(): неизвестный вариант `#{$name}` для ключа `#{$key}`. Допустимые: #{map.keys($button-variants)}';
72
+ }
73
+
74
+ @each $prop, $value in $variant {
75
+ --button-#{$prop}: #{$value};
76
+ }
77
+ }
78
+ }
@@ -1,6 +1,7 @@
1
1
  @forward 'font-sizes';
2
2
  @forward 'accessibility';
3
3
  @forward 'breakpoints';
4
+ @forward 'button';
4
5
  @forward 'page';
5
6
  @forward 'surface';
6
7
  @forward 'video-card';
@@ -19,7 +19,7 @@
19
19
  // Новый компонент не добавляет ролей — дописывает свои переменные в готовые.
20
20
  // Новая роль нужна только когда тема должна развести то, что сейчас склеено.
21
21
  $surface-roles: (
22
- text: (--video-mini-card-title,),
22
+ text: (--video-mini-card-title, --radio-text, --checkbox-text),
23
23
  text-muted: (--video-mini-card-channel, --video-mini-card-duration),
24
24
  control-bg: (--input-bg, --select-bg),
25
25
  control-compact-bg: (--input-s-bg,),
@@ -26,6 +26,7 @@
26
26
  <UiBtn
27
27
  :disabled="!isFiltered"
28
28
  theme="secondary"
29
+ class="filter-main__reset"
29
30
  wide
30
31
  size="l"
31
32
  @click="reset"
@@ -306,4 +307,8 @@ function reset() {
306
307
  grid-template-columns: repeat(2, 1fr);
307
308
  column-gap: 8px;
308
309
  }
310
+
311
+ .filter-main__reset {
312
+ @include button-variant(filter-reset)
313
+ }
309
314
  </style>
@@ -36,6 +36,7 @@
36
36
  wide
37
37
  :disabled="!isPendingFiltered"
38
38
  size="l"
39
+ class="filter-model__reset"
39
40
  theme="secondary"
40
41
  @click="onResetClick"
41
42
  >{{ t('reset_all') }}
@@ -241,4 +242,8 @@ function onApplyClick() {
241
242
  .filter-model__units {
242
243
  margin-left: 8px;
243
244
  }
245
+
246
+ .filter-model__reset {
247
+ @include button-variant(filter-reset);
248
+ }
244
249
  </style>
@@ -33,6 +33,7 @@
33
33
  <UiBtn
34
34
  v-if="featureFlags.FeatureFollowEnabled"
35
35
  theme="muted"
36
+ class="info-main__header-button"
36
37
  size="s"
37
38
  @click="onFollowClick"
38
39
  >
@@ -45,6 +46,7 @@
45
46
  <UiBtn
46
47
  theme="muted"
47
48
  size="s"
49
+ class="info-main__header-button"
48
50
  @click="isShareOpen = true"
49
51
  >
50
52
  <UiIcon
@@ -458,4 +460,8 @@ const socialItems = computed<ILinkItem[]>(() => {
458
460
  margin-left: 6px;
459
461
  vertical-align: middle;
460
462
  }
463
+
464
+ .info-main__header-button {
465
+ @include button-variant(info-button);
466
+ }
461
467
  </style>
@@ -182,6 +182,7 @@ onMounted(() => {
182
182
 
183
183
  .player-interface__button {
184
184
  @include font-sm;
185
+ @include button-variant(interface-button);
185
186
 
186
187
  display: flex;
187
188
  flex-wrap: nowrap;
@@ -10,6 +10,7 @@
10
10
  v-if="featureFlags.FeatureFollowEnabled"
11
11
  theme="muted"
12
12
  size="s"
13
+ class="player-playlist__middle-button"
13
14
  @click="onFollowClick"
14
15
  >
15
16
  <UiIcon
@@ -21,6 +22,7 @@
21
22
  <UiBtn
22
23
  theme="muted"
23
24
  size="s"
25
+ class="player-playlist__middle-button"
24
26
  @click="isShareOpen = true"
25
27
  >
26
28
  <UiIcon
@@ -468,4 +470,8 @@ function onFollowClick() {
468
470
  .player-playlist__like {
469
471
  margin-left: auto;
470
472
  }
473
+
474
+ .player-playlist__middle-button {
475
+ @include button-variant(playlist-button)
476
+ }
471
477
  </style>
@@ -64,13 +64,13 @@ const slotText = computed(() => {
64
64
  padding-inline: 12px;
65
65
  width: max-content;
66
66
  font-weight: 500;
67
- color: $button-primary-text;
67
+ color: var(--button-text, #{$button-primary-text});
68
68
  border-radius: $radius-lg;
69
69
  text-decoration: none;
70
70
  user-select: none;
71
71
  white-space: nowrap;
72
72
  text-transform: capitalize;
73
- border: 1px solid $button-primary-border;
73
+ border: 1px solid var(--button-border, #{$button-primary-border});
74
74
 
75
75
  @include from-br(sm) {
76
76
  padding-inline: 16px;
@@ -101,35 +101,35 @@ const slotText = computed(() => {
101
101
  }
102
102
 
103
103
  .ui-btn.--primary {
104
- background-color: $button-primary-bg;
104
+ background-color: var(--button-bg, #{$button-primary-bg});
105
105
 
106
106
  @include hover(background-color) {
107
107
  &:not([disabled], .--disabled) {
108
- background-color: $button-primary-bg--hover;
108
+ background-color: var(--button-bg--hover, #{$button-primary-bg--hover});
109
109
  }
110
110
  }
111
111
  }
112
112
 
113
113
  .ui-btn.--secondary {
114
- background-color: $button-secondary-bg;
115
- color: $button-secondary-text;
116
- border-color: $button-secondary-border;
114
+ background-color: var(--button-bg, #{$button-secondary-bg});
115
+ color: var(--button-text, #{$button-secondary-text});
116
+ border-color: var(--button-border, #{$button-secondary-border});
117
117
 
118
118
  @include hover(background-color) {
119
119
  &:not(.--active, [disabled], .--disabled) {
120
- background-color: $button-secondary-bg--hover;
120
+ background-color: var(--button-bg--hover, #{$button-secondary-bg--hover});
121
121
  }
122
122
  }
123
123
  }
124
124
 
125
125
  .ui-btn.--secondary > .ui-icon:first-child {
126
- color: $button-secondary-icon;
126
+ color: var(--button-icon, #{$button-secondary-icon});
127
127
  }
128
128
 
129
129
  .ui-btn.--active.--secondary {
130
- background-color: $button-secondary-bg--active;
131
- color: $button-secondary-text--active;
132
- border-color: $button-secondary-border--active;
130
+ background-color: var(--button-bg--active, #{$button-secondary-bg--active});
131
+ color: var(--button-text--active, #{$button-secondary-text--active});
132
+ border-color: var(--button-border--active, #{$button-secondary-border--active});
133
133
  }
134
134
 
135
135
  .ui-btn.--icon {
@@ -146,22 +146,23 @@ const slotText = computed(() => {
146
146
  }
147
147
 
148
148
  .ui-btn.--muted {
149
- background-color: $button-muted-bg;
150
- color: $button-muted-text;
151
- border-color: transparent;
149
+ background-color: var(--button-bg, #{$button-muted-bg});
150
+ color: var(--button-text, #{$button-muted-text});
151
+ border-color: var(--button-border, #{$button-muted-border});
152
152
 
153
- @include hover(background-color) {
154
- background-color: $button-muted-bg--hover;
153
+ @include hover(background-color, border) {
154
+ background-color: var(--button-bg--hover, #{$button-muted-bg--hover});
155
+ border-color: var(--button-border--hover, #{$button-muted-border--hover});
155
156
  }
156
157
  }
157
158
 
158
159
  .ui-btn.--warning {
159
- background-color: $button-warning-bg;
160
- border: 1px solid $button-warning-border;
161
- color: $button-warning-text;
160
+ background-color: var(--button-bg, #{$button-warning-bg});
161
+ border: 1px solid var(--button-border, #{$button-warning-border});
162
+ color: var(--button-text, #{$button-warning-text});
162
163
 
163
164
  @include hover(background-color) {
164
- background-color: $button-warning-bg--hover;
165
+ background-color: var(--button-bg--hover, #{$button-warning-bg--hover});
165
166
  }
166
167
  }
167
168
  </style>
@@ -105,7 +105,7 @@ function onChange(event: Event) {
105
105
  .ui-checkbox__label {
106
106
  @include font-sm;
107
107
 
108
- color: $checkbox-label;
108
+ color: var(--checkbox-text, #{$checkbox-label});
109
109
  grid-column: 2;
110
110
  grid-row: 1;
111
111
  user-select: none;
@@ -106,7 +106,7 @@ const isChecked = computed(() => properties.modelValue === properties.value);
106
106
  grid-column: 2;
107
107
  grid-row: 1;
108
108
  user-select: none;
109
- color: $radio-label;
109
+ color: var(--radio-text, #{$radio-label});
110
110
 
111
111
  @include from-br(sm) {
112
112
  @include font-sm;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "itube-specs",
3
3
  "type": "module",
4
- "version": "0.0.854",
4
+ "version": "0.0.856",
5
5
  "main": "./nuxt.config.ts",
6
6
  "types": "./types/index.d.ts",
7
7
  "scripts": {
@@ -247,6 +247,8 @@ watchEffect(() => {
247
247
  }
248
248
 
249
249
  .profile__edit {
250
+ @include button-variant(profile-edit);
251
+
250
252
  margin-top: 12px;
251
253
  }
252
254
  </style>