itube-specs 0.0.856 → 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,23 +1,36 @@
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
35
  text: (--video-mini-card-title, --radio-text, --checkbox-text),
23
36
  text-muted: (--video-mini-card-channel, --video-mini-card-duration),
@@ -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 {
@@ -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;
@@ -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] {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "itube-specs",
3
3
  "type": "module",
4
- "version": "0.0.856",
4
+ "version": "0.0.857",
5
5
  "main": "./nuxt.config.ts",
6
6
  "types": "./types/index.d.ts",
7
7
  "scripts": {