@omnisass/library 0.2.0 → 2026.1.0-alpha.1
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.
- package/.editorconfig +13 -0
- package/.omnisass/scripts/bump-version.sh +288 -0
- package/.sassdoc.yaml +21 -0
- package/.vscode/settings.json +17 -0
- package/_configs.scss +10 -45
- package/index.scss +5 -91
- package/modules/utilities/converters/_convert-em2px.scss +3 -49
- package/modules/utilities/converters/_convert-hex2rgb.scss +2 -44
- package/modules/utilities/converters/_convert-hex2rgba.scss +2 -57
- package/modules/utilities/converters/_convert-px2em.scss +3 -62
- package/modules/utilities/converters/_convert-px2rem.scss +3 -62
- package/modules/utilities/converters/_convert-rem2px.scss +3 -62
- package/modules/utilities/converters/_index.scss +10 -0
- package/modules/utilities/getters/_index.scss +23 -0
- package/modules/utilities/getters/color/_get-color-brightness.scss +2 -48
- package/modules/utilities/getters/color/_get-color-darkest.scss +13 -68
- package/modules/utilities/getters/list/_get-list-item-end.scss +2 -29
- package/modules/utilities/getters/list/_get-list-item-start.scss +2 -29
- package/modules/utilities/getters/list/_get-list-item.scss +6 -82
- package/modules/utilities/getters/number/_get-number-from-percent.scss +2 -40
- package/modules/utilities/getters/number/_get-number-height-by-ratio.scss +3 -35
- package/modules/utilities/getters/number/_get-number-max-safe.scss +112 -0
- package/modules/utilities/getters/number/_get-number-max.scss +10 -88
- package/modules/utilities/getters/number/_get-number-min-safe.scss +114 -0
- package/modules/utilities/getters/number/_get-number-min.scss +9 -84
- package/modules/utilities/getters/number/_get-number-percentage-of.scss +2 -58
- package/modules/utilities/getters/number/_get-number-unit.scss +5 -46
- package/modules/utilities/getters/number/_get-number-width-by-ratio.scss +3 -56
- package/modules/utilities/helpers/_index.scss +44 -0
- package/modules/utilities/helpers/color/_color-blend-steps.scss +5 -89
- package/modules/utilities/helpers/color/_color-blend.scss +11 -85
- package/modules/utilities/helpers/color/_color-hue-shift.scss +7 -61
- package/modules/utilities/helpers/color/_color-scale.scss +7 -74
- package/modules/utilities/helpers/color/_color-shade.scss +2 -60
- package/modules/utilities/helpers/color/_color-tint.scss +2 -60
- package/modules/utilities/helpers/color/_color-triad.scss +9 -53
- package/modules/utilities/helpers/list/_list-dedupe.scss +9 -50
- package/modules/utilities/helpers/list/_list-insert-at.scss +16 -86
- package/modules/utilities/helpers/list/_list-merge.scss +1 -1
- package/modules/utilities/helpers/list/_list-remove-at.scss +9 -71
- package/modules/utilities/helpers/list/_list-sum-numbers-safe.scss +17 -81
- package/modules/utilities/helpers/list/_list-sum-numbers.scss +9 -57
- package/modules/utilities/helpers/number/_number-ceil-to.scss +1 -1
- package/modules/utilities/helpers/number/_number-clamp-max.scss +1 -1
- package/modules/utilities/helpers/number/_number-clamp-min.scss +1 -1
- package/modules/utilities/helpers/number/_number-clamp.scss +1 -1
- package/modules/utilities/helpers/number/_number-denormalize.scss +1 -1
- package/modules/utilities/helpers/number/_number-fibonacci.scss +2 -2
- package/modules/utilities/helpers/number/_number-floor-to.scss +1 -1
- package/modules/utilities/helpers/number/_number-format-with-separator.scss +4 -4
- package/modules/utilities/helpers/number/_number-normalize.scss +1 -1
- package/modules/utilities/helpers/number/_number-random-between-int.scss +1 -1
- package/modules/utilities/helpers/number/_number-random-between.scss +1 -1
- package/modules/utilities/helpers/number/_number-range.scss +7 -7
- package/modules/utilities/helpers/number/_number-round-to-nearest.scss +1 -1
- package/modules/utilities/helpers/number/_number-round-to.scss +1 -1
- package/modules/utilities/helpers/number/_number-strip-unit.scss +2 -14
- package/modules/utilities/helpers/string/_string-capitalize.scss +1 -1
- package/modules/utilities/helpers/string/_string-replace.scss +1 -1
- package/modules/utilities/helpers/string/_string-trim-end.scss +2 -2
- package/modules/utilities/helpers/string/_string-trim-start.scss +2 -2
- package/modules/utilities/helpers/string/_string-trim.scss +1 -1
- package/modules/utilities/loggers/_index.scss +6 -0
- package/modules/utilities/validators/_index.scss +38 -0
- package/modules/utilities/validators/{misc/_is-time.scss → _is-time.scss} +2 -2
- package/modules/utilities/validators/color/_is-color-light.scss +1 -1
- package/modules/utilities/validators/color/_is-color-list.scss +1 -1
- package/modules/utilities/validators/list/_is-list-contained.scss +1 -1
- package/modules/utilities/validators/number/_is-int-even.scss +1 -1
- package/modules/utilities/validators/number/_is-int-odd.scss +1 -1
- package/modules/utilities/validators/number/_is-int.scss +1 -1
- package/modules/utilities/validators/number/_is-number-has-unit.scss +1 -1
- package/modules/utilities/validators/number/_is-number-negative.scss +1 -1
- package/modules/utilities/validators/number/_is-number-positive.scss +1 -1
- package/modules/utilities/validators/number/_is-number-unitless.scss +1 -1
- package/modules/utilities/validators/number/_is-number-zero.scss +1 -1
- package/modules/utilities/validators/string/_is-string-contained.scss +25 -25
- package/modules/utilities/validators/string/_is-string-empty.scss +1 -1
- package/modules/utilities/validators/string/_is-string-ending-with.scss +1 -1
- package/modules/utilities/validators/string/_is-string-starting-with.scss +1 -1
- package/modules/utilities/validators/type-of/_is-boolean.scss +1 -1
- package/modules/utilities/validators/type-of/_is-color.scss +1 -1
- package/modules/utilities/validators/type-of/_is-list.scss +1 -1
- package/modules/utilities/validators/type-of/_is-map.scss +1 -1
- package/modules/utilities/validators/type-of/_is-number.scss +1 -1
- package/modules/utilities/validators/type-of/_is-string.scss +1 -1
- package/modules/utilities/validators/type-of/_is-type.scss +1 -1
- package/package.json +5 -6
- package/package.scss +3 -3
- package/playground/index.scss +8 -0
- package/modules/utilities/converters/_convert-camel2kebab.scss +0 -186
- package/modules/utilities/converters/_convert-kebab2camel.scss +0 -232
- package/modules/utilities/converters/_convert-kebab2snake.scss +0 -118
- package/modules/utilities/converters/_convert-snake2kebab.scss +0 -173
- package/modules/utilities/helpers/misc/_url-encode.configs.scss +0 -64
- package/modules/utilities/helpers/misc/_url-encode.scss +0 -148
- package/modules/utilities/loggers/_log-invalid-type.scss +0 -151
- package/modules/utilities/loggers/_log-invalid-value.scss +0 -151
- package/test.md +0 -168
- package/test.scss +0 -405
- package/test.sh +0 -149
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
@use 'sass:color';
|
|
2
|
-
@use '../validators/type-of/is-color' as *;
|
|
3
|
-
@use '../validators/type-of/is-number' as *;
|
|
4
|
-
@use '../loggers/log-invalid-type' as *;
|
|
5
2
|
|
|
6
3
|
/// Преобразует цвет в строку формата RGBA с поддержкой
|
|
7
4
|
/// прозрачности.
|
|
@@ -15,7 +12,7 @@
|
|
|
15
12
|
/// ---
|
|
16
13
|
/// @name convert-hex2rgba
|
|
17
14
|
/// @group utilities-converters
|
|
18
|
-
/// @since
|
|
15
|
+
/// @since 0.0.1
|
|
19
16
|
/// @access public
|
|
20
17
|
/// @author Murad Rustamov (therteenten)
|
|
21
18
|
/// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft - therteenten
|
|
@@ -68,57 +65,5 @@
|
|
|
68
65
|
/// где `r`, `g`, `b` - числовые значения от 0 до 255,
|
|
69
66
|
/// `a` - значение прозрачности.
|
|
70
67
|
@function convert-hex2rgba($color, $alpha: 1) {
|
|
71
|
-
|
|
72
|
-
// Проверка типа первого параметра: ожидается
|
|
73
|
-
// цветовое значение.
|
|
74
|
-
// Функция is-color() проверяет, является ли $color
|
|
75
|
-
// валидным цветом CSS.
|
|
76
|
-
@if not is-color($color) {
|
|
77
|
-
|
|
78
|
-
// Если $color не является цветом, логируем ошибку через
|
|
79
|
-
// отладочное сообщение.
|
|
80
|
-
@return log-invalid-type(
|
|
81
|
-
'convert-hex2rgba',
|
|
82
|
-
$color,
|
|
83
|
-
'$color',
|
|
84
|
-
'color'
|
|
85
|
-
);
|
|
86
|
-
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// Проверка типа второго параметра: ожидается числовое значение
|
|
90
|
-
// для альфа-канала (прозрачности).
|
|
91
|
-
@else if not is-number($alpha) {
|
|
92
|
-
|
|
93
|
-
// Если $alpha не является числом, логируем ошибку через
|
|
94
|
-
// отладочное сообщение.
|
|
95
|
-
@return log-invalid-type(
|
|
96
|
-
'convert-hex2rgba',
|
|
97
|
-
$alpha,
|
|
98
|
-
'$alpha',
|
|
99
|
-
'number'
|
|
100
|
-
);
|
|
101
|
-
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// Оба параметра прошли валидацию - выполняем конвертацию.
|
|
105
|
-
@else {
|
|
106
|
-
|
|
107
|
-
// Формула преобразования: создаем строку формата rgba()
|
|
108
|
-
// из компонентов цвета и значения альфа-канала.
|
|
109
|
-
//
|
|
110
|
-
// Алгоритм преобразования:
|
|
111
|
-
// 1. Извлекаем красный канал: color.channel($color, "red", $space: rgb)
|
|
112
|
-
// Возвращает числовое значение от 0 до 255
|
|
113
|
-
// 2. Извлекаем зеленый канал: color.channel($color, "green", $space: rgb)
|
|
114
|
-
// 3. Извлекаем синий канал: color.channel($color, "blue", $space: rgb)
|
|
115
|
-
// 4. Используем переданное значение альфа-канала: $alpha
|
|
116
|
-
// 5. Формируем строку: rgba(красный, зеленый, синий, альфа)
|
|
117
|
-
//
|
|
118
|
-
// Ключевая особенность: функция возвращает строку, а не
|
|
119
|
-
// цветовой тип, из-за интерполяции #{} внутри строки.
|
|
120
|
-
@return 'rgba(#{color.channel($color, "red", $space: rgb)}, #{color.channel($color, "green", $space: rgb)}, #{color.channel($color, "blue", $space: rgb)}, #{$alpha})';
|
|
121
|
-
|
|
122
|
-
}
|
|
123
|
-
|
|
68
|
+
@return "rgba(#{color.channel($color, "red", $space: rgb)}, #{color.channel($color, "green", $space: rgb)}, #{color.channel($color, "blue", $space: rgb)}, #{$alpha})";
|
|
124
69
|
}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
@use 'sass:math';
|
|
2
|
-
@use '../helpers
|
|
3
|
-
@use '../loggers/log-invalid-type' as *;
|
|
4
|
-
@use '../validators/type-of/is-number' as *;
|
|
2
|
+
@use '../helpers' as helpers; // need number/number-strip-unit
|
|
5
3
|
|
|
6
4
|
/// Конвертирует значения из пикселей (`px`) в относительные
|
|
7
5
|
/// единицы (`em`).
|
|
@@ -31,7 +29,7 @@
|
|
|
31
29
|
/// ---
|
|
32
30
|
/// @name convert-px2em
|
|
33
31
|
/// @group utilities-converters
|
|
34
|
-
/// @since
|
|
32
|
+
/// @since 0.0.1
|
|
35
33
|
/// @access public
|
|
36
34
|
/// @author Murad Rustamov (therteenten)
|
|
37
35
|
/// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft - therteenten
|
|
@@ -175,62 +173,5 @@
|
|
|
175
173
|
/// Также может выбросить ошибку при передаче нечисловых
|
|
176
174
|
/// значений.
|
|
177
175
|
@function convert-px2em($px, $base: 16px) {
|
|
178
|
-
|
|
179
|
-
// Проверка типа первого параметра: ожидается числовое
|
|
180
|
-
// значение в пикселях.
|
|
181
|
-
@if not is-number($px) {
|
|
182
|
-
|
|
183
|
-
// Если $px не является числом, возвращаем ошибку через
|
|
184
|
-
// стандартную функцию логирования. Это предотвращает
|
|
185
|
-
// некорректные вычисления с нечисловыми данными.
|
|
186
|
-
@return log-invalid-type(
|
|
187
|
-
'convert-px2em',
|
|
188
|
-
$px,
|
|
189
|
-
'$px',
|
|
190
|
-
'number'
|
|
191
|
-
);
|
|
192
|
-
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
// Проверка типа второго параметра: ожидается числовое
|
|
196
|
-
// значение базового размера.
|
|
197
|
-
@else if not is-number($base) {
|
|
198
|
-
|
|
199
|
-
// Если $base не является числом, возвращаем ошибку.
|
|
200
|
-
// Проверка выполняется только если $px прошел валидацию.
|
|
201
|
-
@return log-invalid-type(
|
|
202
|
-
'convert-px2em',
|
|
203
|
-
$base,
|
|
204
|
-
'$base',
|
|
205
|
-
'number'
|
|
206
|
-
);
|
|
207
|
-
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
// Оба параметра прошли валидацию - выполняем конвертацию.
|
|
211
|
-
@else {
|
|
212
|
-
|
|
213
|
-
// Формула конвертации: em = px ÷ базовый_размер_шрифта.
|
|
214
|
-
//
|
|
215
|
-
// Алгоритм вычислений:
|
|
216
|
-
// 1. number-strip-unit($px) - удаляем единицу измерения
|
|
217
|
-
// 'px' из первого значения
|
|
218
|
-
// Пример: 24px → 24 (число без единиц)
|
|
219
|
-
// 2. number-strip-unit($base) - удаляем единицу измерения
|
|
220
|
-
// из базового размера
|
|
221
|
-
// Пример: 16px → 16 (число без единиц)
|
|
222
|
-
// 3. Делим безразмерные числа: (число px) ÷ (базовый размер)
|
|
223
|
-
// Используем math.div() для безопасного деления
|
|
224
|
-
// Пример: math.div(24, 16) = 1.5
|
|
225
|
-
// 4. Умножаем результат на 1em для добавления единицы
|
|
226
|
-
// измерения em
|
|
227
|
-
// Пример: 1.5 × 1em = 1.5em
|
|
228
|
-
//
|
|
229
|
-
// Ключевая особенность: результат в em зависит от размера
|
|
230
|
-
// шрифта родительского элемента. Если размер шрифта родителя
|
|
231
|
-
// изменяется, em значения адаптируются относительно него.
|
|
232
|
-
@return math.div(number-strip-unit($px), number-strip-unit($base)) * 1em;
|
|
233
|
-
|
|
234
|
-
}
|
|
235
|
-
|
|
176
|
+
@return math.div(helpers.number-strip-unit($px), helpers.number-strip-unit($base)) * 1em;
|
|
236
177
|
}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
@use 'sass:math';
|
|
2
|
-
@use '../helpers
|
|
3
|
-
@use '../loggers/log-invalid-type' as *;
|
|
4
|
-
@use '../validators/type-of/is-number' as *;
|
|
2
|
+
@use '../helpers' as helpers; // need number/number-strip-unit
|
|
5
3
|
|
|
6
4
|
/// Конвертирует значения из пикселей (`px`) в относительные
|
|
7
5
|
/// единицы (`rem`).
|
|
@@ -24,7 +22,7 @@
|
|
|
24
22
|
/// ---
|
|
25
23
|
/// @name convert-px2rem
|
|
26
24
|
/// @group utilities-converters
|
|
27
|
-
/// @since
|
|
25
|
+
/// @since 0.0.1
|
|
28
26
|
/// @access public
|
|
29
27
|
/// @author Murad Rustamov (therteenten)
|
|
30
28
|
/// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft - therteenten
|
|
@@ -119,62 +117,5 @@
|
|
|
119
117
|
/// Также может выбросить ошибку при передаче нечисловых
|
|
120
118
|
/// значений.
|
|
121
119
|
@function convert-px2rem($px, $base: 16px) {
|
|
122
|
-
|
|
123
|
-
// Проверка типа первого параметра: ожидается числовое
|
|
124
|
-
// значение в пикселях.
|
|
125
|
-
@if not is-number($px) {
|
|
126
|
-
|
|
127
|
-
// Если $px не является числом, возвращаем ошибку через
|
|
128
|
-
// стандартную функцию логирования. Это предотвращает
|
|
129
|
-
// некорректные вычисления с нечисловыми данными.
|
|
130
|
-
@return log-invalid-type(
|
|
131
|
-
'convert-px2rem',
|
|
132
|
-
$px,
|
|
133
|
-
'$px',
|
|
134
|
-
'number'
|
|
135
|
-
);
|
|
136
|
-
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
// Проверка типа второго параметра: ожидается числовое
|
|
140
|
-
// значение базового размера.
|
|
141
|
-
@else if not is-number($base) {
|
|
142
|
-
|
|
143
|
-
// Если $base не является числом, возвращаем ошибку.
|
|
144
|
-
// Проверка выполняется только если $px прошел валидацию.
|
|
145
|
-
@return log-invalid-type(
|
|
146
|
-
'convert-px2rem',
|
|
147
|
-
$base,
|
|
148
|
-
'$base',
|
|
149
|
-
'number'
|
|
150
|
-
);
|
|
151
|
-
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
// Оба параметра прошли валидацию - выполняем конвертацию.
|
|
155
|
-
@else {
|
|
156
|
-
|
|
157
|
-
// Формула конвертации: rem = px ÷ базовый_размер_шрифта.
|
|
158
|
-
//
|
|
159
|
-
// Алгоритм вычислений:
|
|
160
|
-
// 1. number-strip-unit($px) - удаляем единицу измерения
|
|
161
|
-
// 'px' из первого значения
|
|
162
|
-
// Пример: 24px → 24 (число без единиц)
|
|
163
|
-
// 2. number-strip-unit($base) - удаляем единицу измерения
|
|
164
|
-
// из базового размера
|
|
165
|
-
// Пример: 16px → 16 (число без единиц)
|
|
166
|
-
// 3. Делим безразмерные числа: (число px) ÷ (базовый размер)
|
|
167
|
-
// Используем math.div() для безопасного деления
|
|
168
|
-
// Пример: math.div(24, 16) = 1.5
|
|
169
|
-
// 4. Умножаем результат на 1rem для добавления единицы
|
|
170
|
-
// измерения rem
|
|
171
|
-
// Пример: 1.5 × 1rem = 1.5rem
|
|
172
|
-
//
|
|
173
|
-
// Ключевая особенность: результат в rem зависит от базового
|
|
174
|
-
// размера шрифта. Если пользователь изменит размер шрифта
|
|
175
|
-
// в браузере, rem значения адаптируются.
|
|
176
|
-
@return math.div(number-strip-unit($px), number-strip-unit($base)) * 1rem;
|
|
177
|
-
|
|
178
|
-
}
|
|
179
|
-
|
|
120
|
+
@return math.div(helpers.number-strip-unit($px), helpers.number-strip-unit($base)) * 1rem;
|
|
180
121
|
}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
@use '../helpers
|
|
2
|
-
@use '../loggers/log-invalid-type' as *;
|
|
3
|
-
@use '../validators/type-of/is-number' as *;
|
|
1
|
+
@use '../helpers' as helpers; // need number/number-strip-unit
|
|
4
2
|
|
|
5
3
|
/// Конвертирует значения из относительных единиц (`rem`) в
|
|
6
4
|
/// пиксели (`px`).
|
|
@@ -24,7 +22,7 @@
|
|
|
24
22
|
/// ---
|
|
25
23
|
/// @name convert-rem2px
|
|
26
24
|
/// @group utilities-converters
|
|
27
|
-
/// @since
|
|
25
|
+
/// @since 0.0.1
|
|
28
26
|
/// @access public
|
|
29
27
|
/// @author Murad Rustamov (therteenten)
|
|
30
28
|
/// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft - therteenten
|
|
@@ -146,62 +144,5 @@
|
|
|
146
144
|
/// нечисловых значений. Для корректной работы оба аргумента
|
|
147
145
|
/// должны быть числами.
|
|
148
146
|
@function convert-rem2px($rem, $base: 16px) {
|
|
149
|
-
|
|
150
|
-
// Проверка типа первого параметра: ожидается числовое
|
|
151
|
-
// значение в rem.
|
|
152
|
-
@if not is-number($rem) {
|
|
153
|
-
|
|
154
|
-
// Если $rem не является числом, возвращаем ошибку через
|
|
155
|
-
// стандартную функцию логирования. Это предотвращает
|
|
156
|
-
// некорректные вычисления с нечисловыми данными.
|
|
157
|
-
@return log-invalid-type(
|
|
158
|
-
'convert-rem2px',
|
|
159
|
-
$rem,
|
|
160
|
-
'$rem',
|
|
161
|
-
'number'
|
|
162
|
-
);
|
|
163
|
-
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
// Проверка типа второго параметра: ожидается числовое
|
|
167
|
-
// значение базового размера.
|
|
168
|
-
@else if not is-number($base) {
|
|
169
|
-
|
|
170
|
-
// Если $base не является числом, возвращаем ошибку.
|
|
171
|
-
// Проверка выполняется только если $rem прошел валидацию.
|
|
172
|
-
@return log-invalid-type(
|
|
173
|
-
'convert-rem2px',
|
|
174
|
-
$base,
|
|
175
|
-
'$base',
|
|
176
|
-
'number'
|
|
177
|
-
);
|
|
178
|
-
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
// Оба параметра прошли валидацию - выполняем конвертацию.
|
|
182
|
-
@else {
|
|
183
|
-
|
|
184
|
-
// Формула конвертации: px = rem × базовый_размер_шрифта.
|
|
185
|
-
//
|
|
186
|
-
// Алгоритм вычислений:
|
|
187
|
-
// 1. number-strip-unit($rem) - удаляем единицу измерения
|
|
188
|
-
// 'rem' из первого значения
|
|
189
|
-
// Пример: 1.5rem → 1.5 (число без единиц)
|
|
190
|
-
// 2. number-strip-unit($base) - удаляем единицу измерения
|
|
191
|
-
// из базового размера
|
|
192
|
-
// Пример: 16px → 16 (число без единиц)
|
|
193
|
-
// 3. Умножаем оба безразмерных числа: (число rem) × (базовый
|
|
194
|
-
// размер)
|
|
195
|
-
// Пример: 1.5 × 16 = 24
|
|
196
|
-
// 4. Умножаем результат на 1px для добавления единицы
|
|
197
|
-
// измерения пикселей
|
|
198
|
-
// Пример: 24 × 1px = 24px
|
|
199
|
-
//
|
|
200
|
-
// Важно: функция предполагает, что $base передается в
|
|
201
|
-
// пикселях. Если $base будет в других единицах, результат
|
|
202
|
-
// будет неожиданным.
|
|
203
|
-
@return number-strip-unit($rem) * number-strip-unit($base) * 1px;
|
|
204
|
-
|
|
205
|
-
}
|
|
206
|
-
|
|
147
|
+
@return helpers.number-strip-unit($rem) * helpers.number-strip-unit($base) * 1px;
|
|
207
148
|
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
////
|
|
2
|
+
/// @group utilities-getters
|
|
3
|
+
////
|
|
4
|
+
|
|
5
|
+
// Color
|
|
6
|
+
@forward 'color/get-color-brightness';
|
|
7
|
+
@forward 'color/get-color-darkest';
|
|
8
|
+
|
|
9
|
+
// List
|
|
10
|
+
@forward 'list/get-list-item';
|
|
11
|
+
@forward 'list/get-list-item-end';
|
|
12
|
+
@forward 'list/get-list-item-start';
|
|
13
|
+
|
|
14
|
+
// Number
|
|
15
|
+
@forward 'number/get-number-from-percent';
|
|
16
|
+
@forward 'number/get-number-height-by-ratio';
|
|
17
|
+
@forward 'number/get-number-width-by-ratio';
|
|
18
|
+
@forward 'number/get-number-max';
|
|
19
|
+
@forward 'number/get-number-max-safe';
|
|
20
|
+
@forward 'number/get-number-min';
|
|
21
|
+
@forward 'number/get-number-min-safe';
|
|
22
|
+
@forward 'number/get-number-percentage-of';
|
|
23
|
+
@forward 'number/get-number-unit';
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
@use 'sass:color';
|
|
2
|
-
@use '../../loggers/log-invalid-type' as *;
|
|
3
|
-
@use '../../validators/type-of/is-color' as *;
|
|
4
2
|
|
|
5
3
|
/// Рассчитывает яркость (светлоту) цвета.
|
|
6
4
|
///
|
|
@@ -17,7 +15,7 @@
|
|
|
17
15
|
/// ---
|
|
18
16
|
/// @name get-color-brightness
|
|
19
17
|
/// @group utilities-getters
|
|
20
|
-
/// @since
|
|
18
|
+
/// @since 0.0.1
|
|
21
19
|
/// @access public
|
|
22
20
|
/// @author Murad Rustamov (therteenten)
|
|
23
21
|
/// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft - therteenten
|
|
@@ -90,49 +88,5 @@
|
|
|
90
88
|
/// серые тона - промежуточные значения в зависимости от
|
|
91
89
|
/// их светлоты.
|
|
92
90
|
@function get-color-brightness($color) {
|
|
93
|
-
|
|
94
|
-
// Проверка типа входного параметра: ожидается
|
|
95
|
-
// цветовое значение.
|
|
96
|
-
//
|
|
97
|
-
// Функция is-color() проверяет, является ли $color
|
|
98
|
-
// валидным цветом CSS.
|
|
99
|
-
// Поддерживаемые форматы: hex, rgb, rgba, hsl,
|
|
100
|
-
// hsla, названия цветов.
|
|
101
|
-
@if not is-color($color) {
|
|
102
|
-
|
|
103
|
-
// Если $color не является цветом, логируем ошибку
|
|
104
|
-
// через отладочное сообщение:
|
|
105
|
-
@return log-invalid-type(
|
|
106
|
-
'get-color-brightness',
|
|
107
|
-
$color,
|
|
108
|
-
'$color',
|
|
109
|
-
'color'
|
|
110
|
-
);
|
|
111
|
-
|
|
112
|
-
} @else {
|
|
113
|
-
|
|
114
|
-
// Основная логика выполняется только если $color
|
|
115
|
-
// является валидным цветом.
|
|
116
|
-
//
|
|
117
|
-
// Используем функцию color.channel() для извлечения
|
|
118
|
-
// компонента яркости:
|
|
119
|
-
// - Первый параметр: $color - исходный цвет
|
|
120
|
-
// - Второй параметр: "lightness" - извлекаем компонент
|
|
121
|
-
// яркости
|
|
122
|
-
// - Третий параметр: $space: hsl - указываем цветовое
|
|
123
|
-
// пространство HSL
|
|
124
|
-
//
|
|
125
|
-
// HSL (Hue, Saturation, Lightness) - цветовая модель:
|
|
126
|
-
// - Hue (оттенок): угол на цветовом круге (0-360deg)
|
|
127
|
-
// - Saturation (насыщенность): процент (0%-100%)
|
|
128
|
-
// - Lightness (яркость): процент (0%-100%)
|
|
129
|
-
//
|
|
130
|
-
// Возвращаемое значение: процент от 0% до 100%, где:
|
|
131
|
-
// - 0% = абсолютно черный
|
|
132
|
-
// - 100% = абсолютно белый
|
|
133
|
-
// - 50% = чистый цвет (без добавления черного или белого)
|
|
134
|
-
@return color.channel($color, "lightness", $space: hsl);
|
|
135
|
-
|
|
136
|
-
}
|
|
137
|
-
|
|
91
|
+
@return color.channel($color, "lightness", $space: hsl);
|
|
138
92
|
}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
@use 'sass:color';
|
|
2
|
-
@use '../../loggers/log-invalid-type' as *;
|
|
3
|
-
@use '../../validators/type-of/is-list' as *;
|
|
4
2
|
|
|
5
3
|
/// Находит самый темный цвет в списке по значению lightness
|
|
6
4
|
/// в HSL-пространстве.
|
|
@@ -26,7 +24,7 @@
|
|
|
26
24
|
/// ---
|
|
27
25
|
/// @name get-color-darkest
|
|
28
26
|
/// @group utilities-getters
|
|
29
|
-
/// @since
|
|
27
|
+
/// @since 0.0.1
|
|
30
28
|
/// @access public
|
|
31
29
|
/// @author Murad Rustamov (therteenten)
|
|
32
30
|
/// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft - therteenten
|
|
@@ -93,7 +91,7 @@
|
|
|
93
91
|
///
|
|
94
92
|
/// // Важно: функция не валидирует типы элементов!
|
|
95
93
|
/// @debug get-color-darkest((#ff0000, 10px, #0000ff)); // Ошибка при вычислении lightness
|
|
96
|
-
/// @param {List} $
|
|
94
|
+
/// @param {List} $colorsList - Список цветов для анализа.
|
|
97
95
|
/// Ожидается, что все элементы списка являются валидными
|
|
98
96
|
/// цветами в любом формате (hex, rgb, hsl, названия и т.д.).
|
|
99
97
|
/// @return {Color | Null} - Самый темный цвет из списка по
|
|
@@ -104,75 +102,22 @@
|
|
|
104
102
|
/// @throws {Error} - Может выбросить ошибку, если в списке
|
|
105
103
|
/// встречаются элементы, не являющиеся цветами, при
|
|
106
104
|
/// попытке вызова `color.channel()`.
|
|
107
|
-
@function get-color-darkest($
|
|
105
|
+
@function get-color-darkest($colorsList) {
|
|
108
106
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
// - $-min-lightness: будет содержать минимальное значение
|
|
112
|
-
// яркости (наименьшая яркость = самый темный)
|
|
113
|
-
$-result: '';
|
|
114
|
-
$-min-lightness: null;
|
|
107
|
+
$-darkest: null;
|
|
108
|
+
$-min-lightness: null;
|
|
115
109
|
|
|
116
|
-
|
|
117
|
-
// (list) или arglist цветов.
|
|
118
|
-
// Функция предназначена для работы со списком цветовых
|
|
119
|
-
// значений.
|
|
120
|
-
@if not is-list($color-list) {
|
|
110
|
+
@each $-color in $colorsList {
|
|
121
111
|
|
|
122
|
-
|
|
123
|
-
// ошибку через стандартную функцию логирования. Это
|
|
124
|
-
// предотвращает дальнейшее выполнение с некорректными
|
|
125
|
-
// данными.
|
|
126
|
-
@return log-invalid-type(
|
|
127
|
-
'get-color-darkest',
|
|
128
|
-
$color-list,
|
|
129
|
-
'$color-list',
|
|
130
|
-
('list', 'arglist')
|
|
131
|
-
);
|
|
112
|
+
$-lightness: color.channel($-color, "lightness", $space: hsl);
|
|
132
113
|
|
|
133
|
-
|
|
114
|
+
@if $-min-lightness == null or $-lightness < $-min-lightness {
|
|
115
|
+
$-min-lightness: $-lightness;
|
|
116
|
+
$-darkest: $-color;
|
|
117
|
+
}
|
|
134
118
|
|
|
135
|
-
|
|
136
|
-
// прошел валидацию.
|
|
137
|
-
@else {
|
|
119
|
+
}
|
|
138
120
|
|
|
139
|
-
|
|
140
|
-
@each $-color in $color-list {
|
|
141
|
-
|
|
142
|
-
// Для каждого цвета вычисляем его яркость (lightness) в
|
|
143
|
-
// пространстве HSL.
|
|
144
|
-
// - color.channel() извлекает компонент яркости из цвета.
|
|
145
|
-
// - $space: hsl указывает использовать HSL цветовое
|
|
146
|
-
// пространство
|
|
147
|
-
// Результат: процентное значение от 0% до 100%.
|
|
148
|
-
// 0% = абсолютно черный, 100% = абсолютно белый.
|
|
149
|
-
$-lightness: color.channel($-color, "lightness", $space: hsl);
|
|
150
|
-
|
|
151
|
-
// Поиск цвета с минимальной яркостью (самого темного).
|
|
152
|
-
// Условие выполняется в двух случаях:
|
|
153
|
-
// 1. $-min-lightness == null: это первый обрабатываемый
|
|
154
|
-
// цвет в списке
|
|
155
|
-
// 2. $-lightness < $-min-lightness: текущий цвет темнее
|
|
156
|
-
// предыдущего найденного
|
|
157
|
-
@if $-min-lightness == null or $-lightness < $-min-lightness {
|
|
158
|
-
|
|
159
|
-
// Обновляем значения:
|
|
160
|
-
// - $-min-lightness: запоминаем новое минимальное значение
|
|
161
|
-
// яркости
|
|
162
|
-
// - $-result: сохраняем ссылку на самый темный цвет на
|
|
163
|
-
// данный момент
|
|
164
|
-
$-min-lightness: $-lightness;
|
|
165
|
-
$-result: $-color;
|
|
166
|
-
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
// Возвращаем самый темный цвет из списка.
|
|
172
|
-
// Если список был пустым, вернется начальное
|
|
173
|
-
// значение '' (пустая строка).
|
|
174
|
-
@return $-result;
|
|
175
|
-
|
|
176
|
-
}
|
|
121
|
+
@return $-darkest;
|
|
177
122
|
|
|
178
123
|
}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
@use 'sass:list';
|
|
2
|
-
@use '../../loggers/log-invalid-type' as *;
|
|
3
|
-
@use '../../validators/type-of/is-list' as *;
|
|
4
2
|
|
|
5
3
|
/// Возвращает последний элемент списка.
|
|
6
4
|
///
|
|
@@ -12,7 +10,7 @@
|
|
|
12
10
|
/// ---
|
|
13
11
|
/// @name get-list-item-end
|
|
14
12
|
/// @group utilities-getters
|
|
15
|
-
/// @since
|
|
13
|
+
/// @since 0.0.1
|
|
16
14
|
/// @access public
|
|
17
15
|
/// @author Sindre Sorhus
|
|
18
16
|
/// @author Murad Rustamov (therteenten)
|
|
@@ -85,30 +83,5 @@
|
|
|
85
83
|
/// @throws Не выбрасывает ошибок, возвращает
|
|
86
84
|
/// `null` для пустых списков
|
|
87
85
|
@function get-list-item-end($list) {
|
|
88
|
-
|
|
89
|
-
@if not is-list($list) {
|
|
90
|
-
|
|
91
|
-
// Валидация типа входного параметра.
|
|
92
|
-
// Функция ожидает получить список (list) или arglist.
|
|
93
|
-
@return log-invalid-type(
|
|
94
|
-
'get-list-item-end',
|
|
95
|
-
$list,
|
|
96
|
-
'$list',
|
|
97
|
-
('list', 'arglist')
|
|
98
|
-
);
|
|
99
|
-
|
|
100
|
-
} @else {
|
|
101
|
-
|
|
102
|
-
// Основная логика выполняется только если $list является
|
|
103
|
-
// корректным списком.
|
|
104
|
-
//
|
|
105
|
-
// Используем встроенную функцию Sass list.nth():
|
|
106
|
-
// - Извлекает элемент по указанному индексу (в данном
|
|
107
|
-
// случае -1 - последний)
|
|
108
|
-
// - Для пустого списка возвращает null
|
|
109
|
-
// - Сохраняет тип и значение элемента без изменений
|
|
110
|
-
@return list.nth($list, -1);
|
|
111
|
-
|
|
112
|
-
}
|
|
113
|
-
|
|
86
|
+
@return list.nth($list, -1);
|
|
114
87
|
}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
@use 'sass:list';
|
|
2
|
-
@use '../../loggers/log-invalid-type' as *;
|
|
3
|
-
@use '../../validators/type-of/is-list' as *;
|
|
4
2
|
|
|
5
3
|
/// Возвращает первый элемент списка.
|
|
6
4
|
///
|
|
@@ -13,7 +11,7 @@
|
|
|
13
11
|
/// ---
|
|
14
12
|
/// @name get-list-item-start
|
|
15
13
|
/// @group utilities-getters
|
|
16
|
-
/// @since
|
|
14
|
+
/// @since 0.0.1
|
|
17
15
|
/// @access public
|
|
18
16
|
/// @author Sindre Sorhus
|
|
19
17
|
/// @author Murad Rustamov (therteenten) [адаптация]
|
|
@@ -80,30 +78,5 @@
|
|
|
80
78
|
/// @throws Не выбрасывает ошибки, но возвращает
|
|
81
79
|
/// `null` для пустых списков.
|
|
82
80
|
@function get-list-item-start($list) {
|
|
83
|
-
|
|
84
|
-
@if not is-list($list) {
|
|
85
|
-
|
|
86
|
-
// Валидация типа входного параметра.
|
|
87
|
-
// Функция ожидает получить список (list) или arglist.
|
|
88
|
-
@return log-invalid-type(
|
|
89
|
-
'get-list-item-start',
|
|
90
|
-
$list,
|
|
91
|
-
'$list',
|
|
92
|
-
('list', 'arglist')
|
|
93
|
-
);
|
|
94
|
-
|
|
95
|
-
} @else {
|
|
96
|
-
|
|
97
|
-
// Основная логика выполняется только если $list является
|
|
98
|
-
// корректным списком.
|
|
99
|
-
//
|
|
100
|
-
// Используем встроенную функцию Sass list.nth():
|
|
101
|
-
// - Извлекает элемент по указанному индексу (в данном
|
|
102
|
-
// случае 1 - первый)
|
|
103
|
-
// - Для пустого списка возвращает null
|
|
104
|
-
// - Сохраняет тип и значение элемента без изменений
|
|
105
|
-
@return list.nth($list, 1);
|
|
106
|
-
|
|
107
|
-
}
|
|
108
|
-
|
|
81
|
+
@return list.nth($list, 1);
|
|
109
82
|
}
|