itube-specs 0.0.855 → 0.0.857

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.
@@ -61,6 +61,11 @@ $button-variants: (
61
61
  //
62
62
  // Ключа в карте темы нет — не печатается ничего, работает вариант из пропа
63
63
  // theme= на вызове. Так тема, которой тут нечего менять, не пишет ни строки.
64
+ //
65
+ // Класс на элементе при этом остаётся тем, что задан пропом: кнопка может
66
+ // висеть с `--muted`, а выглядеть как primary. Поэтому первой строкой
67
+ // печатается `--button-variant` — маркер для DevTools, который объясняет
68
+ // расхождение. Никем не читается, существует только как документация.
64
69
  @mixin button-variant($key) {
65
70
  $name: map.get($button-variant-overrides, $key);
66
71
 
@@ -71,6 +76,8 @@ $button-variants: (
71
76
  @error 'button-variant(): неизвестный вариант `#{$name}` для ключа `#{$key}`. Допустимые: #{map.keys($button-variants)}';
72
77
  }
73
78
 
79
+ --button-variant: #{$name};
80
+
74
81
  @each $prop, $value in $variant {
75
82
  --button-#{$prop}: #{$value};
76
83
  }
@@ -1,25 +1,38 @@
1
+ @use 'sass:list';
1
2
  @use 'sass:map';
2
- @use 'sass:meta';
3
+ @use 'vars' as *;
3
4
 
4
5
  // Контракт подложки ("островка"): блок объявляет цвета для того, что лежит
5
6
  // внутри, и всё подхватывает это каскадом.
6
7
  //
8
+ // // в компоненте
9
+ // .ui-popup { @include surface(overlay); }
10
+ //
11
+ // // в теме — только отличия
12
+ // $surfaces: (overlay: (control-bg: $color-slate-750, text: $color-white));
13
+ //
14
+ // Подложки нет в карте темы — не печатается ничего, компоненты остаются на
15
+ // своих базовых токенах. Так тема, которой тут нечего менять, не пишет ни строки.
16
+ //
7
17
  // Каждый цвет компонента читается своей переменной — var(--input-bg, <токен темы>).
8
18
  // Один уровень, никакой вложенности. Значит любой цвет можно переопределить
9
- // поштучно, не задевая остальные:
19
+ // поштучно, минуя роли:
10
20
  //
11
21
  // .promo-card {
12
22
  // --input-s-border: transparent;
13
23
  // }
14
24
  //
15
- // Роли ниже — сокращение для частого случая: одна роль расписывается сразу на
16
- // все переменные, которые ей соответствуют. Тема без островков передаёт null,
17
- // тогда роль не раскрывается и компоненты остаются на своих базовых токенах.
25
+ // Роли — сокращение для частого случая: одна роль расписывается сразу на все
26
+ // переменные, которые ей соответствуют.
18
27
  //
19
28
  // Новый компонент не добавляет ролей — дописывает свои переменные в готовые.
20
29
  // Новая роль нужна только когда тема должна развести то, что сейчас склеено.
30
+
31
+ // Тема вправе не описывать подложку, поэтому её отсутствие в карте — не ошибка.
32
+ // А вот опечатка в @include surface(...) иначе прошла бы молча, отсюда список.
33
+ $surface-names: (overlay,);
21
34
  $surface-roles: (
22
- text: (--video-mini-card-title,),
35
+ text: (--video-mini-card-title, --radio-text, --checkbox-text),
23
36
  text-muted: (--video-mini-card-channel, --video-mini-card-duration),
24
37
  control-bg: (--input-bg, --select-bg),
25
38
  control-compact-bg: (--input-s-bg,),
@@ -44,12 +57,18 @@ $surface-roles: (
44
57
  accent-border: (--select-border--active,)
45
58
  );
46
59
 
47
- @mixin surface($roles...) {
48
- @each $role, $value in meta.keywords($roles) {
60
+ @mixin surface($name) {
61
+ @if not list.index($surface-names, $name) {
62
+ @error 'surface(): неизвестная подложка `#{$name}`. Допустимые: #{$surface-names}';
63
+ }
64
+
65
+ $overrides: map.get($surfaces, $name);
66
+
67
+ @each $role, $value in if($overrides, $overrides, ()) {
49
68
  $props: map.get($surface-roles, $role);
50
69
 
51
70
  @if not $props {
52
- @error 'surface(): неизвестная роль `#{$role}`. Допустимые: #{map.keys($surface-roles)}';
71
+ @error 'surface(#{$name}): неизвестная роль `#{$role}`. Допустимые: #{map.keys($surface-roles)}';
53
72
  }
54
73
 
55
74
  @if $value {
@@ -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: var(--button-text, #{$button-primary-text});
67
+ color: var(--button-text, #{$button-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 var(--button-border, #{$button-primary-border});
73
+ border: 1px solid var(--button-border, #{$button-border});
74
74
 
75
75
  @include from-br(sm) {
76
76
  padding-inline: 16px;
@@ -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;
@@ -124,31 +124,7 @@ const { snackbarText, isSnackBarInPopup } = useSnackbar();
124
124
 
125
125
  <style lang="scss">
126
126
  .ui-popup {
127
- @include surface(
128
- $text: $surface-overlay-text,
129
- $text-muted: $surface-overlay-text-muted,
130
- $control-bg: $surface-overlay-control-bg,
131
- $control-compact-bg: $surface-overlay-control-compact-bg,
132
- $control-bg--disabled: $surface-overlay-control-bg--disabled,
133
- $control-text: $surface-overlay-control-text,
134
- $control-text--disabled: $surface-overlay-control-text--disabled,
135
- $control-placeholder: $surface-overlay-control-placeholder,
136
- $control-label: $surface-overlay-control-label,
137
- $control-compact-label: $surface-overlay-control-compact-label,
138
- $control-border: $surface-overlay-control-border,
139
- $control-compact-border: $surface-overlay-control-compact-border,
140
- $control-border--focus: $surface-overlay-control-border--focus,
141
- $control-compact-border--focus: $surface-overlay-control-compact-border--focus,
142
- $control-border--error: $surface-overlay-control-border--error,
143
- $control-icon: $surface-overlay-control-icon,
144
- $control-icon--hover: $surface-overlay-control-icon--hover,
145
- $option-bg: $surface-overlay-option-bg,
146
- $option-text: $surface-overlay-option-text,
147
- $accent: $surface-overlay-accent,
148
- $accent-text: $surface-overlay-accent-text,
149
- $accent-bg-subtle: $surface-overlay-accent-bg-subtle,
150
- $accent-border: $surface-overlay-accent-border
151
- );
127
+ @include surface(overlay);
152
128
  }
153
129
 
154
130
  .ui-popup[open] {
@@ -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.855",
4
+ "version": "0.0.857",
5
5
  "main": "./nuxt.config.ts",
6
6
  "types": "./types/index.d.ts",
7
7
  "scripts": {