sass4 4.0.1 → 4.0.2
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.
- checksums.yaml +4 -4
- data/CSS_COLOR_LEVEL4_TESTS.md +217 -0
- data/REVISION +1 -0
- data/VERSION +1 -1
- data/VERSION_DATE +1 -0
- data/lib/sass/selector/sequence.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 79095b6077df8eb4d50e07a93777f9329698826c6e1808c967e81b2287750d33
|
|
4
|
+
data.tar.gz: 72dc31095bad03f738348e08827e23aa99a9bef422b3862d127e605ee3e45ddb
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 995ef5b88bc45a6950ee82e53f3be623c0541904b660251cfacc675393f6827e95452a3c2036a01435a24adcc2b47aa37c0f5b89ad78dc741fd401e771ab1589
|
|
7
|
+
data.tar.gz: f60e62faa1bb3e5bc9ceca43b31fcf16c8e767fca3b10e0d005da3550821301496aef0d16082a008fadaf8c946396bd71f2d9aad8576e18c7029ea368e6ea4e5
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
# Тесты CSS Color Level 4 для Ruby Sass
|
|
2
|
+
|
|
3
|
+
## Обзор
|
|
4
|
+
|
|
5
|
+
Полная поддержка синтаксиса CSS Color Level 4 согласно спецификации W3C: https://www.w3.org/TR/css-color-4/
|
|
6
|
+
|
|
7
|
+
**Файл тестов:** `test/sass/css_color_level4_test.rb`
|
|
8
|
+
**Всего тестов:** 40
|
|
9
|
+
**Статус:** ✅ Все проходят
|
|
10
|
+
|
|
11
|
+
## Покрываемая функциональность
|
|
12
|
+
|
|
13
|
+
### 1. Special Numbers (CSS функции)
|
|
14
|
+
Ruby Sass корректно обрабатывает CSS функции без попыток их вычисления:
|
|
15
|
+
- `var()` - CSS Custom Properties
|
|
16
|
+
- `calc()` - математические вычисления
|
|
17
|
+
- `env()` - environment variables
|
|
18
|
+
- `attr()` - атрибуты элементов
|
|
19
|
+
- `clamp()` - ограничение значений
|
|
20
|
+
- `min()` / `max()` - минимум/максимум
|
|
21
|
+
|
|
22
|
+
**Примеры:**
|
|
23
|
+
```scss
|
|
24
|
+
// var() в каналах
|
|
25
|
+
rgb(var(--r), var(--g), var(--b))
|
|
26
|
+
// ✅ rgb(var(--r), var(--g), var(--b))
|
|
27
|
+
|
|
28
|
+
// calc() в альфе
|
|
29
|
+
rgb(255 128 0 / calc(0.5 * 2))
|
|
30
|
+
// ✅ rgb(255 128 0 / calc(0.5 * 2))
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### 2. Space-separated синтаксис
|
|
34
|
+
Новый синтаксис без запятых для RGB/HSL:
|
|
35
|
+
```scss
|
|
36
|
+
rgb(255 128 0) // ✅ #ff8000
|
|
37
|
+
hsl(180 50% 50%) // ✅ #40bfbf
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### 3. Slash-separated альфа
|
|
41
|
+
Альфа-канал через `/` вместо запятой:
|
|
42
|
+
```scss
|
|
43
|
+
rgb(255 128 0 / 0.5) // ✅ rgba(255,128,0,0.5)
|
|
44
|
+
hsl(180 50% 50% / 0.8) // ✅ rgba(64,191,191,0.8)
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 4. Проценты в RGB каналах
|
|
48
|
+
RGB каналы могут быть указаны в процентах (0%-100%):
|
|
49
|
+
```scss
|
|
50
|
+
rgb(100% 0% 0%) // ✅ red (#ff0000)
|
|
51
|
+
rgb(50% 25% 75%) // ✅ #7f3fbf
|
|
52
|
+
rgb(100% 50% 0%) // ✅ #ff7f00
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Конвертация:**
|
|
56
|
+
- `0%` → `0`
|
|
57
|
+
- `100%` → `255`
|
|
58
|
+
- `50%` → `127.5` → округление до `127`
|
|
59
|
+
|
|
60
|
+
### 5. Проценты в альфа-канале
|
|
61
|
+
Альфа-канал поддерживает проценты (0%-100%):
|
|
62
|
+
```scss
|
|
63
|
+
// Новый синтаксис
|
|
64
|
+
rgb(100% 0% 0% / 50%) // ✅ rgba(255,0,0,0.5)
|
|
65
|
+
rgb(255 128 0 / 50%) // ✅ rgba(255,128,0,0.5)
|
|
66
|
+
|
|
67
|
+
// Legacy синтаксис
|
|
68
|
+
rgba(255, 128, 0, 80%) // ✅ rgba(255,128,0,0.8)
|
|
69
|
+
|
|
70
|
+
// HSL
|
|
71
|
+
hsl(180 50% 50% / 75%) // ✅ rgba(64,191,191,0.75)
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Конвертация:**
|
|
75
|
+
- `0%` → `0` (полностью прозрачный)
|
|
76
|
+
- `100%` → `1` (полностью непрозрачный)
|
|
77
|
+
- `50%` → `0.5`
|
|
78
|
+
|
|
79
|
+
### 6. Комбинации процентов и CSS функций
|
|
80
|
+
```scss
|
|
81
|
+
// Проценты в каналах + var() в альфе
|
|
82
|
+
rgb(100% 0% 0% / var(--alpha))
|
|
83
|
+
// ✅ rgb(100% 0% 0% / var(--alpha))
|
|
84
|
+
|
|
85
|
+
// Проценты в каналах + calc() в альфе
|
|
86
|
+
rgb(100% 50% 0% / calc(50% + 25%))
|
|
87
|
+
// ✅ rgb(100% 50% 0% / calc(50% + 25%))
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### 7. Обратная совместимость
|
|
91
|
+
Все старые форматы продолжают работать:
|
|
92
|
+
```scss
|
|
93
|
+
rgb(255, 128, 0) // ✅ #ff8000
|
|
94
|
+
rgba(255, 128, 0, 0.5) // ✅ rgba(255,128,0,0.5)
|
|
95
|
+
hsl(180, 50%, 50%) // ✅ #40bfbf
|
|
96
|
+
hsla(180, 50%, 50%, 0.8) // ✅ rgba(64,191,191,0.8)
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Структура тестов
|
|
100
|
+
|
|
101
|
+
### RGB тесты (13 тестов)
|
|
102
|
+
- `test_rgb_with_var` - var() в каналах
|
|
103
|
+
- `test_rgb_with_calc` - calc() в каналах
|
|
104
|
+
- `test_rgb_with_env` - env() в каналах
|
|
105
|
+
- `test_rgb_with_clamp` - clamp() в каналах
|
|
106
|
+
- `test_rgb_with_min_max` - min()/max() в каналах
|
|
107
|
+
- `test_rgb_new_syntax_with_var_alpha` - var() в альфе (новый синтаксис)
|
|
108
|
+
- `test_rgb_new_syntax_with_calc_alpha` - calc() в альфе (новый синтаксис)
|
|
109
|
+
- `test_rgb_new_syntax_mixed_special_numbers` - смешанные CSS функции
|
|
110
|
+
- `test_rgb_new_syntax_without_special_numbers` - новый синтаксис без CSS функций
|
|
111
|
+
- `test_rgb_new_syntax_with_alpha_without_special_numbers` - новый синтаксис с альфой
|
|
112
|
+
- `test_rgb_with_percentage_channels` - проценты в каналах
|
|
113
|
+
- `test_rgb_with_percentage_channels_and_alpha` - проценты в каналах и альфе
|
|
114
|
+
- `test_rgb_with_mixed_percentage_and_number` - числа в каналах, проценты в альфе
|
|
115
|
+
|
|
116
|
+
### RGBA тесты (6 тестов)
|
|
117
|
+
- `test_rgba_with_var_all_channels` - var() во всех каналах
|
|
118
|
+
- `test_rgba_with_calc_alpha` - calc() в альфе
|
|
119
|
+
- `test_rgba_with_color_and_var_alpha` - Sass переменная + var() альфа
|
|
120
|
+
- `test_rgba_new_syntax_with_special_alpha` - новый синтаксис с CSS функцией в альфе
|
|
121
|
+
- `test_rgba_with_percentage_alpha` - процент в альфе (legacy синтаксис)
|
|
122
|
+
- `test_rgba_legacy_syntax_percentage_alpha` - legacy синтаксис с процентной альфой
|
|
123
|
+
|
|
124
|
+
### HSL тесты (4 теста)
|
|
125
|
+
- `test_hsl_with_var` - var() в hue
|
|
126
|
+
- `test_hsl_with_calc` - calc() в hue
|
|
127
|
+
- `test_hsl_new_syntax_with_var` - новый синтаксис с var()
|
|
128
|
+
- `test_hsl_new_syntax_with_calc_alpha` - новый синтаксис с calc() в альфе
|
|
129
|
+
|
|
130
|
+
### HSLA тесты (3 теста)
|
|
131
|
+
- `test_hsla_with_var_alpha` - var() в альфе
|
|
132
|
+
- `test_hsla_with_env` - env() в hue
|
|
133
|
+
- `test_hsla_new_syntax_with_special_alpha` - новый синтаксис с CSS функцией в альфе
|
|
134
|
+
|
|
135
|
+
### Процентные тесты (11 тестов)
|
|
136
|
+
- `test_rgb_with_percentage_channels` - 100% каналы
|
|
137
|
+
- `test_rgb_with_percentage_channels_and_alpha` - проценты + процентная альфа
|
|
138
|
+
- `test_rgb_with_mixed_percentage_and_number` - смешанные числа и проценты
|
|
139
|
+
- `test_rgb_with_percentage_channels_various_values` - различные значения процентов
|
|
140
|
+
- `test_rgba_with_percentage_alpha` - процентная альфа в rgba()
|
|
141
|
+
- `test_rgb_new_syntax_percentage_with_zero_alpha` - 0% альфа
|
|
142
|
+
- `test_rgb_new_syntax_percentage_with_full_alpha` - 100% альфа
|
|
143
|
+
- `test_hsl_with_percentage_alpha` - процентная альфа в hsl()
|
|
144
|
+
- `test_rgb_percentage_with_var_in_alpha` - проценты + var() в альфе
|
|
145
|
+
- `test_rgb_percentage_with_calc_in_alpha` - проценты + calc() в альфе
|
|
146
|
+
- `test_rgba_legacy_syntax_percentage_alpha` - legacy синтаксис с процентной альфой
|
|
147
|
+
|
|
148
|
+
### Тесты обратной совместимости (4 теста)
|
|
149
|
+
- `test_normal_rgb_still_works` - обычный rgb()
|
|
150
|
+
- `test_normal_rgba_still_works` - обычный rgba()
|
|
151
|
+
- `test_normal_hsl_still_works` - обычный hsl()
|
|
152
|
+
- `test_normal_hsla_still_works` - обычный hsla()
|
|
153
|
+
|
|
154
|
+
### Смешанные тесты (2 теста)
|
|
155
|
+
- `test_multiple_special_functions_in_one_rule` - несколько CSS функций в одном правиле
|
|
156
|
+
- `test_sass_variables_with_special_numbers` - Sass переменные + CSS функции
|
|
157
|
+
|
|
158
|
+
## Запуск тестов
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
# Запуск всех тестов CSS Color Level 4
|
|
162
|
+
ruby test/sass/css_color_level4_test.rb
|
|
163
|
+
|
|
164
|
+
# Ожидаемый результат:
|
|
165
|
+
# Запуск тестов CSS Color Level 4...
|
|
166
|
+
# ======================================================================
|
|
167
|
+
# [40 тестов с ✅]
|
|
168
|
+
# ======================================================================
|
|
169
|
+
# Результаты: 40 прошли, 0 провалились из 40 тестов
|
|
170
|
+
# ======================================================================
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Особенности реализации
|
|
174
|
+
|
|
175
|
+
### Округление процентов
|
|
176
|
+
Ruby Sass использует стандартное округление для процентов:
|
|
177
|
+
- `50%` → `127.5` → `127` (округление вниз)
|
|
178
|
+
- `25%` → `63.75` → `63` (округление вниз)
|
|
179
|
+
- `75%` → `191.25` → `191` (округление вниз)
|
|
180
|
+
|
|
181
|
+
### Обработка CSS функций
|
|
182
|
+
CSS функции (`var()`, `calc()`, etc.) не вычисляются Sass и передаются в CSS как есть:
|
|
183
|
+
```scss
|
|
184
|
+
rgb(var(--r), var(--g), var(--b))
|
|
185
|
+
// Не вычисляется, передается как:
|
|
186
|
+
rgb(var(--r), var(--g), var(--b))
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Оптимизация вывода
|
|
190
|
+
Ruby Sass оптимизирует цвета где возможно:
|
|
191
|
+
```scss
|
|
192
|
+
rgb(255, 0, 0) → red
|
|
193
|
+
rgb(100% 0% 0%) → red
|
|
194
|
+
rgb(255 0 0) → #ff0000
|
|
195
|
+
rgb(255 0 0 / 100%) → #ff0000 // 100% alpha = полностью непрозрачный
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## Ссылки
|
|
199
|
+
|
|
200
|
+
- **Спецификация CSS Color Level 4:** https://www.w3.org/TR/css-color-4/
|
|
201
|
+
- **Файл тестов:** `test/sass/css_color_level4_test.rb`
|
|
202
|
+
- **Основная документация:** `AGENTS.md`
|
|
203
|
+
|
|
204
|
+
## История изменений
|
|
205
|
+
|
|
206
|
+
### Версия 4.0.1+ (текущая)
|
|
207
|
+
- ✅ Добавлена поддержка процентов в RGB каналах
|
|
208
|
+
- ✅ Добавлена поддержка процентов в альфа-канале
|
|
209
|
+
- ✅ 11 новых тестов для процентов
|
|
210
|
+
- ✅ Полное соответствие спецификации CSS Color Level 4 раздел 4.2
|
|
211
|
+
|
|
212
|
+
### Версия 4.0.0
|
|
213
|
+
- ✅ Добавлена поддержка CSS special numbers (var, calc, env, etc.)
|
|
214
|
+
- ✅ Добавлен новый space-separated синтаксис
|
|
215
|
+
- ✅ Добавлен slash-separated синтаксис для альфы
|
|
216
|
+
- ✅ 29 тестов для новых возможностей
|
|
217
|
+
|
data/REVISION
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1ec7a3cb1fa5f0eb945c75747244bc3fd25417a2
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
4.0.
|
|
1
|
+
4.0.2
|
data/VERSION_DATE
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
01 April 2026 12:46:06 UTC
|
|
@@ -67,7 +67,7 @@ module Sass
|
|
|
67
67
|
sseq_or_op.resolve_parent_refs(super_cseq).members
|
|
68
68
|
end).map do |path|
|
|
69
69
|
path_members = path.map do |seq_or_op|
|
|
70
|
-
next seq_or_op unless seq_or_op.is_a?(Sequence)
|
|
70
|
+
next Array(seq_or_op) unless seq_or_op.is_a?(Sequence)
|
|
71
71
|
seq_or_op.members
|
|
72
72
|
end
|
|
73
73
|
if path_members.length == 2 && path_members[1][0] == "\n"
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sass4
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 4.0.
|
|
4
|
+
version: 4.0.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Natalie Weizenbaum
|
|
@@ -11,7 +11,7 @@ authors:
|
|
|
11
11
|
autorequire:
|
|
12
12
|
bindir: bin
|
|
13
13
|
cert_chain: []
|
|
14
|
-
date:
|
|
14
|
+
date: 2026-04-01 00:00:00.000000000 Z
|
|
15
15
|
dependencies:
|
|
16
16
|
- !ruby/object:Gem::Dependency
|
|
17
17
|
name: sass-listen
|
|
@@ -103,9 +103,12 @@ files:
|
|
|
103
103
|
- AGENTS.md
|
|
104
104
|
- CODE_OF_CONDUCT.md
|
|
105
105
|
- CONTRIBUTING.md
|
|
106
|
+
- CSS_COLOR_LEVEL4_TESTS.md
|
|
106
107
|
- MIT-LICENSE
|
|
107
108
|
- README.md
|
|
109
|
+
- REVISION
|
|
108
110
|
- VERSION
|
|
111
|
+
- VERSION_DATE
|
|
109
112
|
- VERSION_NAME
|
|
110
113
|
- bin/sass
|
|
111
114
|
- bin/sass-convert
|