@omnisass/library 0.2.0 → 0.3.0
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/CHANGELOG.md +101 -3
- package/README.md +94 -0
- package/modules/utilities/converters/_convert-camel2kebab.scss +5 -4
- package/modules/utilities/converters/_convert-em2px.scss +5 -3
- package/modules/utilities/converters/_convert-hex2rgb.scss +4 -0
- package/modules/utilities/converters/_convert-hex2rgba.scss +5 -0
- package/modules/utilities/converters/_convert-kebab2camel.scss +5 -4
- package/modules/utilities/converters/_convert-kebab2snake.scss +4 -4
- package/modules/utilities/converters/_convert-px2em.scss +5 -4
- package/modules/utilities/converters/_convert-px2rem.scss +5 -4
- package/modules/utilities/converters/_convert-rem2px.scss +5 -3
- package/modules/utilities/converters/_convert-snake2kebab.scss +4 -4
- package/modules/utilities/getters/color/_get-color-brightness.scss +4 -0
- package/modules/utilities/getters/color/_get-color-darkest.scss +5 -1
- package/modules/utilities/getters/list/_get-list-item-end.scss +4 -2
- package/modules/utilities/getters/list/_get-list-item-start.scss +4 -2
- package/modules/utilities/getters/list/_get-list-item.scss +6 -4
- package/modules/utilities/getters/number/_get-number-from-percent.scss +6 -2
- package/modules/utilities/getters/number/_get-number-height-by-ratio.scss +5 -0
- package/modules/utilities/getters/number/_get-number-max.scss +4 -0
- package/modules/utilities/getters/number/_get-number-min.scss +4 -0
- package/modules/utilities/getters/number/_get-number-percentage-of.scss +6 -1
- package/modules/utilities/getters/number/_get-number-unit.scss +4 -2
- package/modules/utilities/getters/number/_get-number-width-by-ratio.scss +5 -0
- package/modules/utilities/helpers/color/_color-blend-steps.scss +6 -0
- package/modules/utilities/helpers/color/_color-blend.scss +6 -0
- package/modules/utilities/helpers/color/_color-hue-shift.scss +5 -0
- package/modules/utilities/helpers/color/_color-scale.scss +5 -0
- package/modules/utilities/helpers/color/_color-shade.scss +5 -0
- package/modules/utilities/helpers/color/_color-tint.scss +5 -0
- package/modules/utilities/helpers/color/_color-triad.scss +4 -1
- package/modules/utilities/helpers/list/_list-dedupe.scss +4 -0
- package/modules/utilities/helpers/list/_list-insert-at.scss +5 -0
- package/modules/utilities/helpers/list/_list-merge.scss +54 -8
- package/modules/utilities/helpers/list/_list-remove-at.scss +5 -0
- package/modules/utilities/helpers/list/_list-sum-numbers-safe.scss +3 -0
- package/modules/utilities/helpers/list/_list-sum-numbers.scss +3 -0
- package/modules/utilities/helpers/misc/_url-encode.scss +5 -6
- package/modules/utilities/helpers/number/_number-ceil-to.scss +56 -4
- package/modules/utilities/helpers/number/_number-clamp-max.scss +65 -10
- package/modules/utilities/helpers/number/_number-clamp-min.scss +65 -10
- package/modules/utilities/helpers/number/_number-clamp.scss +88 -12
- package/modules/utilities/helpers/number/_number-denormalize.scss +87 -9
- package/modules/utilities/helpers/number/_number-fibonacci.scss +62 -9
- package/modules/utilities/helpers/number/_number-floor-to.scss +57 -3
- package/modules/utilities/helpers/number/_number-format-with-separator.scss +99 -16
- package/modules/utilities/helpers/number/_number-normalize.scss +88 -10
- package/modules/utilities/helpers/number/_number-random-between-int.scss +74 -13
- package/modules/utilities/helpers/number/_number-random-between.scss +76 -15
- package/modules/utilities/helpers/number/_number-range.scss +105 -12
- package/modules/utilities/helpers/number/_number-round-to-nearest.scss +58 -1
- package/modules/utilities/helpers/number/_number-round-to.scss +65 -2
- package/modules/utilities/helpers/number/_number-strip-unit.scss +43 -9
- package/modules/utilities/helpers/string/_string-capitalize.scss +46 -5
- package/modules/utilities/helpers/string/_string-replace.scss +82 -4
- package/modules/utilities/helpers/string/_string-trim-end.scss +49 -6
- package/modules/utilities/helpers/string/_string-trim-start.scss +49 -6
- package/modules/utilities/helpers/string/_string-trim.scss +56 -11
- package/modules/utilities/loggers/_log-invalid-type.scss +1 -1
- package/modules/utilities/loggers/_log-invalid-value.scss +1 -1
- package/modules/utilities/validators/color/_is-color-light.scss +61 -4
- package/modules/utilities/validators/color/_is-color-list.scss +41 -9
- package/modules/utilities/validators/list/_is-list-contained.scss +42 -3
- package/modules/utilities/validators/misc/_is-time.scss +29 -0
- package/modules/utilities/validators/number/_is-int-even.scss +50 -8
- package/modules/utilities/validators/number/_is-int-odd.scss +51 -9
- package/modules/utilities/validators/number/_is-int.scss +71 -12
- package/modules/utilities/validators/number/_is-number-has-unit.scss +55 -13
- package/modules/utilities/validators/number/_is-number-negative.scss +53 -11
- package/modules/utilities/validators/number/_is-number-positive.scss +52 -10
- package/modules/utilities/validators/number/_is-number-unitless.scss +53 -12
- package/modules/utilities/validators/number/_is-number-zero.scss +54 -10
- package/modules/utilities/validators/string/_is-string-contained.scss +59 -4
- package/modules/utilities/validators/string/_is-string-empty.scss +48 -8
- package/modules/utilities/validators/string/_is-string-ending-with.scss +64 -5
- package/modules/utilities/validators/string/_is-string-starting-with.scss +60 -8
- package/package.json +1 -1
- package/package.scss +9 -8
- package/test.md +0 -168
- package/test.scss +0 -405
- package/test.sh +0 -149
|
@@ -105,11 +105,40 @@
|
|
|
105
105
|
/// @return {Boolean} - Возвращает `true`, если значение является
|
|
106
106
|
/// корректным временным значением, иначе возвращает `false`.
|
|
107
107
|
@function is-time($value) {
|
|
108
|
+
|
|
109
|
+
// Цикл, который выполняется от 1 до длины значения $value.
|
|
110
|
+
// Однако здесь есть логическая ошибка: $value передается как
|
|
111
|
+
// одиночное значение, но используется list.length($value),
|
|
112
|
+
// что предполагает, что $value является списком.
|
|
113
|
+
// Это может быть опечатка или концептуальная ошибка.
|
|
108
114
|
@for $i from 1 through list.length($value) {
|
|
115
|
+
|
|
116
|
+
// Логика проверки, является ли значение временной величиной:
|
|
117
|
+
// Условие состоит из двух частей, соединенных оператором or:
|
|
118
|
+
//
|
|
119
|
+
// Первая часть (до or):
|
|
120
|
+
// 1. meta.type-of($value) == 'number' - проверяет, является ли
|
|
121
|
+
// значение числом (включая числа с единицами измерения)
|
|
122
|
+
// 2. list.index('ms' 's' 'h', math.unit($value)) != null - проверяет,
|
|
123
|
+
// что единица измерения числа находится в списке допустимых
|
|
124
|
+
// временных единиц ('ms' - миллисекунды, 's' - секунды, 'h' - часы)
|
|
125
|
+
// list.index() возвращает позицию единицы в списке или null
|
|
126
|
+
//
|
|
127
|
+
// Вторая часть (после or):
|
|
128
|
+
// $value == 0 - проверяет, равно ли значение нулю
|
|
129
|
+
// Нулевое значение считается допустимой временной величиной,
|
|
130
|
+
// независимо от единиц измерения (0, 0s, 0ms и т.д.)
|
|
131
|
+
//
|
|
132
|
+
// Возвращаемое значение:
|
|
133
|
+
// - true: если значение является числом с допустимой временной единицей
|
|
134
|
+
// ИЛИ равно нулю
|
|
135
|
+
// - false: в противном случае
|
|
109
136
|
@if (meta.type-of($value) == 'number' and list.index('ms' 's' 'h', math.unit($value)) != null) or $value == 0 {
|
|
110
137
|
@return true;
|
|
111
138
|
} @else {
|
|
112
139
|
@return false;
|
|
113
140
|
}
|
|
141
|
+
|
|
114
142
|
}
|
|
143
|
+
|
|
115
144
|
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
@use './is-int' as *;
|
|
2
|
+
@use '../type-of/is-number' as *;
|
|
3
|
+
@use '../../loggers/log-invalid-type' as *;
|
|
2
4
|
|
|
3
5
|
/// Проверяет, является ли целое число четным.
|
|
4
6
|
///
|
|
@@ -50,11 +52,11 @@
|
|
|
50
52
|
/// @debug is-int-even(10.0); // true (10.0 считается целым в Sass)
|
|
51
53
|
/// @debug is-int-even(2.000001); // false
|
|
52
54
|
/// @example scss - Нечисловые значения
|
|
53
|
-
/// @debug is-int-even("2"); //
|
|
54
|
-
/// @debug is-int-even(#ff0000); //
|
|
55
|
-
/// @debug is-int-even(true); //
|
|
56
|
-
/// @debug is-int-even(null); //
|
|
57
|
-
/// @debug is-int-even((1, 2, 3)); //
|
|
55
|
+
/// @debug is-int-even("2"); // Error: "⛔ Параметр «$value» функции «is-int-even» получил неожиданный тип «string», хотя ожидается «number»"
|
|
56
|
+
/// @debug is-int-even(#ff0000); // Error: "⛔ Параметр «$value» функции «is-int-even» получил неожиданный тип «color», хотя ожидается «number»"
|
|
57
|
+
/// @debug is-int-even(true); // Error: "⛔ Параметр «$value» функции «is-int-even» получил неожиданный тип «bool», хотя ожидается «number»"
|
|
58
|
+
/// @debug is-int-even(null); // Error: "⛔ Параметр «$value» функции «is-int-even» получил неожиданный тип «null», хотя ожидается «number»"
|
|
59
|
+
/// @debug is-int-even((1, 2, 3)); // Error: "⛔ Параметр «$value» функции «is-int-even» получил неожиданный тип «list», хотя ожидается «number»"
|
|
58
60
|
/// @param {*} $value - Значение для проверки. Может быть
|
|
59
61
|
/// любого типа, но функция вернет `true` только для
|
|
60
62
|
/// целых чисел, которые делятся на 2 без остатка.
|
|
@@ -62,8 +64,48 @@
|
|
|
62
64
|
/// является целым числом и делится на 2 без остатка.
|
|
63
65
|
/// Во всех остальных случаях возвращает `false`,
|
|
64
66
|
/// включая нецелые числа и значения других типов.
|
|
65
|
-
/// @throws {Error} -
|
|
66
|
-
///
|
|
67
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметры передано
|
|
68
|
+
/// значение, не соответствующее типу `number`. Компиляция Sass
|
|
69
|
+
/// будет остановлена с ошибкой.
|
|
67
70
|
@function is-int-even($value) {
|
|
68
|
-
|
|
71
|
+
|
|
72
|
+
// Проверка типа входного параметра: ожидается числовое значение.
|
|
73
|
+
// Функция is-number() проверяет, является ли $value числом.
|
|
74
|
+
// Это может быть целое число, дробное число или число с единицами измерения.
|
|
75
|
+
@if not is-number($value) {
|
|
76
|
+
|
|
77
|
+
// Если $value не является числом, возвращаем ошибку через
|
|
78
|
+
// стандартную функцию логирования. Это предотвращает
|
|
79
|
+
// некорректные вычисления с нечисловыми данными.
|
|
80
|
+
@return log-invalid-type(
|
|
81
|
+
'is-int-even',
|
|
82
|
+
$value,
|
|
83
|
+
'$value',
|
|
84
|
+
'number'
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Основная логика выполняется только если $value является
|
|
90
|
+
// корректным числом.
|
|
91
|
+
@else {
|
|
92
|
+
|
|
93
|
+
// Логика определения четности целого числа:
|
|
94
|
+
// Условие состоит из двух частей, соединенных оператором and:
|
|
95
|
+
// 1. is-int($value) - проверяет, является ли число целым
|
|
96
|
+
// (предполагается, что функция is-int() существует и проверяет,
|
|
97
|
+
// что число целое и без дробной части)
|
|
98
|
+
// 2. $value % 2 == 0 - проверяет, делится ли число на 2 без остатка
|
|
99
|
+
// Оператор % возвращает остаток от деления
|
|
100
|
+
//
|
|
101
|
+
// Возвращаемое значение:
|
|
102
|
+
// - true: если число целое И четное
|
|
103
|
+
// - false: если число не целое ИЛИ нечетное
|
|
104
|
+
//
|
|
105
|
+
// Ключевая особенность: функция возвращает булево значение (true/false),
|
|
106
|
+
// которое можно использовать в условных конструкциях @if/@else.
|
|
107
|
+
@return is-int($value) and $value % 2 == 0;
|
|
108
|
+
|
|
109
|
+
}
|
|
110
|
+
|
|
69
111
|
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
@use './is-int' as *;
|
|
2
|
+
@use '../type-of/is-number' as *;
|
|
3
|
+
@use '../../loggers/log-invalid-type' as *;
|
|
2
4
|
|
|
3
5
|
/// Проверяет, является ли целое число нечетным.
|
|
4
6
|
///
|
|
@@ -51,20 +53,60 @@
|
|
|
51
53
|
/// @debug is-int-odd(5.0); // false (5.0 считается целым в Sass, поэтому true)
|
|
52
54
|
/// @debug is-int-odd(1.000001); // false
|
|
53
55
|
/// @example scss - Нечисловые значения
|
|
54
|
-
/// @debug is-int-odd("1"); //
|
|
55
|
-
/// @debug is-int-odd(#ff0000); //
|
|
56
|
-
/// @debug is-int-odd(false); //
|
|
57
|
-
/// @debug is-int-odd(null); //
|
|
58
|
-
/// @debug is-int-odd((1, 2, 3)); //
|
|
59
|
-
/// @param {
|
|
56
|
+
/// @debug is-int-odd("1"); // Error: "⛔ Параметр «$value» функции «is-int-odd» получил неожиданный тип «string», хотя ожидается «number»"
|
|
57
|
+
/// @debug is-int-odd(#ff0000); // Error: "⛔ Параметр «$value» функции «is-int-odd» получил неожиданный тип «color», хотя ожидается «number»"
|
|
58
|
+
/// @debug is-int-odd(false); // Error: "⛔ Параметр «$value» функции «is-int-odd» получил неожиданный тип «bool», хотя ожидается «number»"
|
|
59
|
+
/// @debug is-int-odd(null); // Error: "⛔ Параметр «$value» функции «is-int-odd» получил неожиданный тип «null», хотя ожидается «number»"
|
|
60
|
+
/// @debug is-int-odd((1, 2, 3)); // Error: "⛔ Параметр «$value» функции «is-int-odd» получил неожиданный тип «list», хотя ожидается «number»"
|
|
61
|
+
/// @param {Number} $value - Значение для проверки. Может быть
|
|
60
62
|
/// любого типа, но функция вернет `true` только для
|
|
61
63
|
/// целых чисел, которые не делятся на 2 без остатка.
|
|
62
64
|
/// @return {Boolean} - Возвращает `true`, если значение
|
|
63
65
|
/// является целым числом и не делится на 2 без остатка.
|
|
64
66
|
/// Во всех остальных случаях возвращает `false`,
|
|
65
67
|
/// включая нецелые числа и значения других типов.
|
|
66
|
-
/// @throws {Error} -
|
|
67
|
-
///
|
|
68
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметры передано
|
|
69
|
+
/// значение, не соответствующее типу `number`. Компиляция Sass
|
|
70
|
+
/// будет остановлена с ошибкой.
|
|
68
71
|
@function is-int-odd($value) {
|
|
69
|
-
|
|
72
|
+
|
|
73
|
+
// Проверка типа входного параметра: ожидается числовое значение.
|
|
74
|
+
// Функция is-number() проверяет, является ли $value числом.
|
|
75
|
+
// Это может быть целое число, дробное число или число с единицами измерения.
|
|
76
|
+
@if not is-number($value) {
|
|
77
|
+
|
|
78
|
+
// Если $value не является числом, возвращаем ошибку через
|
|
79
|
+
// стандартную функцию логирования. Это предотвращает
|
|
80
|
+
// некорректные вычисления с нечисловыми данными.
|
|
81
|
+
@return log-invalid-type(
|
|
82
|
+
'is-int-odd',
|
|
83
|
+
$value,
|
|
84
|
+
'$value',
|
|
85
|
+
'number'
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Основная логика выполняется только если $value является
|
|
91
|
+
// корректным числом.
|
|
92
|
+
@else {
|
|
93
|
+
|
|
94
|
+
// Логика определения нечетности целого числа:
|
|
95
|
+
// Условие состоит из двух частей, соединенных оператором and:
|
|
96
|
+
// 1. is-int($value) - проверяет, является ли число целым
|
|
97
|
+
// (предполагается, что функция is-int() существует и проверяет,
|
|
98
|
+
// что число целое и без дробной части)
|
|
99
|
+
// 2. $value % 2 != 0 - проверяет, делится ли число на 2 с остатком
|
|
100
|
+
// Оператор % возвращает остаток от деления
|
|
101
|
+
//
|
|
102
|
+
// Возвращаемое значение:
|
|
103
|
+
// - true: если число целое И нечетное
|
|
104
|
+
// - false: если число не целое ИЛИ четное
|
|
105
|
+
//
|
|
106
|
+
// Ключевая особенность: функция возвращает булево значение (true/false),
|
|
107
|
+
// которое можно использовать в условных конструкциях @if/@else.
|
|
108
|
+
@return is-int($value) and $value % 2 != 0;
|
|
109
|
+
|
|
110
|
+
}
|
|
111
|
+
|
|
70
112
|
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
@use 'sass:math';
|
|
2
2
|
@use 'sass:meta';
|
|
3
|
+
@use '../type-of/is-number' as *;
|
|
4
|
+
@use '../../loggers/log-invalid-type' as *;
|
|
3
5
|
|
|
4
6
|
/// Проверяет, является ли число целым (integer).
|
|
5
7
|
///
|
|
@@ -93,32 +95,89 @@
|
|
|
93
95
|
/// @debug is-int(-7); // true
|
|
94
96
|
/// @debug is-int(0); // true
|
|
95
97
|
/// @debug is-int(2.0); // true
|
|
96
|
-
///
|
|
97
98
|
/// @example scss - Проверка нечисловых значений
|
|
98
|
-
/// @debug is-int("text"); //
|
|
99
|
-
/// @debug is-int(true); //
|
|
100
|
-
/// @debug is-int(null); //
|
|
101
|
-
///
|
|
99
|
+
/// @debug is-int("text"); // Error: "⛔ Параметр «$value» функции «is-int» получил неожиданный тип «string», хотя ожидается «number»"
|
|
100
|
+
/// @debug is-int(true); // Error: "⛔ Параметр «$value» функции «is-int» получил неожиданный тип «bool», хотя ожидается «number»"
|
|
101
|
+
/// @debug is-int(null); // Error: "⛔ Параметр «$value» функции «is-int» получил неожиданный тип «null», хотя ожидается «number»"
|
|
102
102
|
/// @example scss - Использование в условиях
|
|
103
103
|
/// @if is-int($index) {
|
|
104
104
|
/// @debug "Индекс корректен: #{$index}";
|
|
105
105
|
/// } @else {
|
|
106
106
|
/// @warn "Ожидается целое число";
|
|
107
107
|
/// }
|
|
108
|
-
///
|
|
109
108
|
/// @example scss - Фильтрация значений
|
|
110
109
|
/// $values: 1, 2.5, "3", 4, 5.0;
|
|
111
110
|
/// $integers: ();
|
|
112
111
|
///
|
|
113
112
|
/// @each $value in $values {
|
|
114
|
-
/// @if is-int($value) {
|
|
115
|
-
/// $integers: append($integers, $value);
|
|
113
|
+
/// @if is-int($value, false) {
|
|
114
|
+
/// $integers: list.append($integers, $value);
|
|
116
115
|
/// }
|
|
117
116
|
/// }
|
|
118
|
-
/// //
|
|
119
|
-
/// @param {
|
|
117
|
+
/// // Error: "⛔ Параметр «$value» функции «is-int» получил неожиданный тип «string», хотя ожидается «number»"
|
|
118
|
+
/// @param {Number} $value - Проверяемое значение
|
|
119
|
+
/// @param {Boolean} $set-strict-mode-local [true] - Включение
|
|
120
|
+
/// строгой проверки типов.
|
|
120
121
|
/// @return {Boolean} - `true` если значение является
|
|
121
122
|
/// целым числом, `false` во всех остальных случаях.
|
|
122
|
-
@
|
|
123
|
-
|
|
123
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметры передано
|
|
124
|
+
/// значение, не соответствующее типу `number`. Компиляция Sass
|
|
125
|
+
/// будет остановлена с ошибкой.
|
|
126
|
+
@function is-int($value, $set-strict-mode-local: true) {
|
|
127
|
+
|
|
128
|
+
// Проверка строгого режима: если включен, выполняется
|
|
129
|
+
// валидация типа значения
|
|
130
|
+
@if $set-strict-mode-local {
|
|
131
|
+
|
|
132
|
+
// Валидация типа входного параметра
|
|
133
|
+
// Функция is-number() проверяет, является ли $value числом
|
|
134
|
+
// При включенном строгом режиме некорректные типы приводят к ошибке
|
|
135
|
+
@if not is-number($value) {
|
|
136
|
+
|
|
137
|
+
// Если $value не является числом, возвращаем ошибку через
|
|
138
|
+
// стандартную функцию логирования. Это предотвращает
|
|
139
|
+
// дальнейшие вычисления с нечисловыми данными и обеспечивает
|
|
140
|
+
// раннее обнаружение ошибок в строгом режиме.
|
|
141
|
+
@return log-invalid-type(
|
|
142
|
+
'is-int',
|
|
143
|
+
$value,
|
|
144
|
+
'$value',
|
|
145
|
+
'number'
|
|
146
|
+
);
|
|
147
|
+
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Основная логика проверки целочисленности выполняется всегда,
|
|
153
|
+
// независимо от режима строгой проверки типов.
|
|
154
|
+
@else {
|
|
155
|
+
|
|
156
|
+
// Алгоритм проверки целочисленности:
|
|
157
|
+
// Условие состоит из двух частей, соединенных оператором and:
|
|
158
|
+
//
|
|
159
|
+
// 1. meta.type-of($value) == number - проверка базового типа данных
|
|
160
|
+
// Функция meta.type-of() возвращает строковое представление типа.
|
|
161
|
+
// Эта проверка актуальна даже при отключенном строгом режиме,
|
|
162
|
+
// так как обеспечивает базовую корректность операции округления.
|
|
163
|
+
//
|
|
164
|
+
// 2. math.round($value) == $value - проверка целочисленности
|
|
165
|
+
// math.round() выполняет математическое округление до ближайшего целого.
|
|
166
|
+
// Для целых чисел округление не изменяет значение, поэтому сравнение
|
|
167
|
+
// дает true. Для дробных чисел округление изменяет значение, и
|
|
168
|
+
// сравнение дает false.
|
|
169
|
+
//
|
|
170
|
+
// Особенности работы:
|
|
171
|
+
// - Корректно работает с положительными и отрицательными числами
|
|
172
|
+
// - Корректно работает с числами, имеющими единицы измерения
|
|
173
|
+
// (px, rem, em, %, и т.д.)
|
|
174
|
+
// - Использует стандартное математическое округление (0.5 → 1)
|
|
175
|
+
//
|
|
176
|
+
// Возвращаемое значение:
|
|
177
|
+
// - true: значение является числом И не изменяется при округлении
|
|
178
|
+
// - false: значение не является числом ИЛИ изменяется при округлении
|
|
179
|
+
@return meta.type-of($value) == number and math.round($value) == $value;
|
|
180
|
+
|
|
181
|
+
}
|
|
182
|
+
|
|
124
183
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
@use 'sass:math';
|
|
2
|
-
@use '../type-of/is-number' as
|
|
2
|
+
@use '../type-of/is-number' as *;
|
|
3
|
+
@use '../../loggers/log-invalid-type' as *;
|
|
3
4
|
|
|
4
5
|
/// Проверяет, имеет ли число единицы измерения.
|
|
5
6
|
///
|
|
@@ -60,14 +61,14 @@
|
|
|
60
61
|
/// @debug is-number-has-unit(0rem); // true (ноль, но с единицами)
|
|
61
62
|
/// @debug is-number-has-unit(1e-10); // false (научная нотация без единиц)
|
|
62
63
|
/// @debug is-number-has-unit(1.0px); // true (число с плавающей точкой и единицами)
|
|
63
|
-
/// @example scss - Нечисловые значения (всегда
|
|
64
|
-
/// @debug is-number-has-unit("16px"); //
|
|
65
|
-
/// @debug is-number-has-unit(#ff0000); //
|
|
66
|
-
/// @debug is-number-has-unit(true); //
|
|
67
|
-
/// @debug is-number-has-unit(null); //
|
|
68
|
-
/// @debug is-number-has-unit(auto); //
|
|
69
|
-
/// @debug is-number-has-unit((16, px)); //
|
|
70
|
-
/// @param {
|
|
64
|
+
/// @example scss - Нечисловые значения (всегда Error)
|
|
65
|
+
/// @debug is-number-has-unit("16px"); // Error: "⛔ Параметр «$value» функции «is-number-has-unit» получил неожиданный тип «string», хотя ожидается «number»"
|
|
66
|
+
/// @debug is-number-has-unit(#ff0000); // Error: "⛔ Параметр «$value» функции «is-number-has-unit» получил неожиданный тип «color», хотя ожидается «number»"
|
|
67
|
+
/// @debug is-number-has-unit(true); // Error: "⛔ Параметр «$value» функции «is-number-has-unit» получил неожиданный тип «bool», хотя ожидается «number»"
|
|
68
|
+
/// @debug is-number-has-unit(null); // Error: "⛔ Параметр «$value» функции «is-number-has-unit» получил неожиданный тип «null», хотя ожидается «number»"
|
|
69
|
+
/// @debug is-number-has-unit(auto); // Error: "⛔ Параметр «$value» функции «is-number-has-unit» получил неожиданный тип «string», хотя ожидается «number»"
|
|
70
|
+
/// @debug is-number-has-unit((16, px)); // Error: "⛔ Параметр «$value» функции «is-number-has-unit» получил неожиданный тип «list», хотя ожидается «number»"
|
|
71
|
+
/// @param {Number} $value - Значение для проверки. Может быть
|
|
71
72
|
/// любого типа, но функция вернет `true` только для
|
|
72
73
|
/// чисел, которые имеют единицы измерения. Любые
|
|
73
74
|
/// единицы измерения (даже сложные комбинации)
|
|
@@ -77,9 +78,50 @@
|
|
|
77
78
|
/// `math.unit($value)` не является пустой строкой).
|
|
78
79
|
/// Возвращает `false` для безразмерных чисел и всех
|
|
79
80
|
/// нечисловых значений.
|
|
80
|
-
/// @throws {Error} -
|
|
81
|
-
///
|
|
82
|
-
///
|
|
81
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметры передано
|
|
82
|
+
/// значение, не соответствующее типу `number`. Компиляция Sass
|
|
83
|
+
/// будет остановлена с ошибкой.
|
|
83
84
|
@function is-number-has-unit($value) {
|
|
84
|
-
|
|
85
|
+
|
|
86
|
+
// Проверка типа входного параметра: ожидается числовое значение.
|
|
87
|
+
// Функция is-number() проверяет, является ли $value числом.
|
|
88
|
+
// Это может быть целое число, дробное число или число с единицами измерения.
|
|
89
|
+
@if not is-number($value) {
|
|
90
|
+
|
|
91
|
+
// Если $value не является числом, возвращаем ошибку через
|
|
92
|
+
// стандартную функцию логирования. Это предотвращает
|
|
93
|
+
// некорректные вычисления с нечисловыми данными.
|
|
94
|
+
@return log-invalid-type(
|
|
95
|
+
'is-number-has-unit',
|
|
96
|
+
$value,
|
|
97
|
+
'$value',
|
|
98
|
+
'number'
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Основная логика выполняется только если $value является
|
|
104
|
+
// корректным числом.
|
|
105
|
+
@else {
|
|
106
|
+
|
|
107
|
+
// Логика проверки, имеет ли число единицы измерения:
|
|
108
|
+
// Условие состоит из двух частей, соединенных оператором and:
|
|
109
|
+
// 1. is-number($value) - повторная проверка, что значение является числом
|
|
110
|
+
// (хотя эта проверка уже была выполнена выше, она добавляет
|
|
111
|
+
// дополнительную безопасность для внутренней логики)
|
|
112
|
+
// 2. math.unit($value) != '' - проверяет, что строка единиц измерения
|
|
113
|
+
// не является пустой. Функция math.unit() возвращает единицу измерения
|
|
114
|
+
// числа как строку. Для безразмерных чисел возвращает пустую строку.
|
|
115
|
+
//
|
|
116
|
+
// Возвращаемое значение:
|
|
117
|
+
// - true: если значение является числом И имеет непустую единицу измерения
|
|
118
|
+
// - false: если значение не является числом ИЛИ имеет пустую единицу измерения
|
|
119
|
+
// (безразмерное число)
|
|
120
|
+
//
|
|
121
|
+
// Ключевая особенность: функция возвращает булево значение (true/false),
|
|
122
|
+
// которое можно использовать в условных конструкциях @if/@else.
|
|
123
|
+
@return is-number($value) and math.unit($value) != '';
|
|
124
|
+
|
|
125
|
+
}
|
|
126
|
+
|
|
85
127
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
@use '../type-of/is-number' as
|
|
1
|
+
@use '../type-of/is-number' as *;
|
|
2
|
+
@use '../../loggers/log-invalid-type' as *;
|
|
2
3
|
|
|
3
4
|
/// Проверяет, является ли значение отрицательным числом.
|
|
4
5
|
///
|
|
@@ -55,13 +56,13 @@
|
|
|
55
56
|
/// @debug is-number-negative(-5); // true (явно указанный минус)
|
|
56
57
|
/// @debug is-number-negative(-0.0); // false (отрицательный ноль рассматривается как ноль)
|
|
57
58
|
/// @example scss - Нечисловые значения
|
|
58
|
-
/// @debug is-number-negative("-1"); //
|
|
59
|
-
/// @debug is-number-negative(#ff0000); //
|
|
60
|
-
/// @debug is-number-negative(false); //
|
|
61
|
-
/// @debug is-number-negative(null); //
|
|
62
|
-
/// @debug is-number-negative((1, 2, 3)); //
|
|
63
|
-
/// @debug is-number-negative(auto); //
|
|
64
|
-
/// @param {
|
|
59
|
+
/// @debug is-number-negative("-1"); // Error: "⛔ Параметр «$value» функции «is-number-negative» получил неожиданный тип «string», хотя ожидается «number»"
|
|
60
|
+
/// @debug is-number-negative(#ff0000); // Error: "⛔ Параметр «$value» функции «is-number-negative» получил неожиданный тип «color», хотя ожидается «number»"
|
|
61
|
+
/// @debug is-number-negative(false); // Error: "⛔ Параметр «$value» функции «is-number-negative» получил неожиданный тип «bool», хотя ожидается «number»"
|
|
62
|
+
/// @debug is-number-negative(null); // Error: "⛔ Параметр «$value» функции «is-number-negative» получил неожиданный тип «null», хотя ожидается «number»"
|
|
63
|
+
/// @debug is-number-negative((1, 2, 3)); // Error: "⛔ Параметр «$value» функции «is-number-negative» получил неожиданный тип «list», хотя ожидается «number»"
|
|
64
|
+
/// @debug is-number-negative(auto); // Error: "⛔ Параметр «$value» функции «is-number-negative» получил неожиданный тип «string», хотя ожидается «number»"
|
|
65
|
+
/// @param {Number} $value - Значение для проверки. Может быть
|
|
65
66
|
/// любого типа, но функция вернет `true` только для
|
|
66
67
|
/// чисел строго меньше нуля, включая числа с единицами
|
|
67
68
|
/// измерения.
|
|
@@ -69,8 +70,49 @@
|
|
|
69
70
|
/// является числом и строго меньше нуля. Во всех
|
|
70
71
|
/// остальных случаях возвращает `false`, включая
|
|
71
72
|
/// ноль, положительные числа и значения других типов.
|
|
72
|
-
/// @throws {Error} -
|
|
73
|
-
///
|
|
73
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметры передано
|
|
74
|
+
/// значение, не соответствующее типу `number`. Компиляция Sass
|
|
75
|
+
/// будет остановлена с ошибкой.
|
|
74
76
|
@function is-number-negative($value) {
|
|
75
|
-
|
|
77
|
+
|
|
78
|
+
// Проверка типа входного параметра: ожидается числовое значение.
|
|
79
|
+
// Функция is-number() проверяет, является ли $value числом.
|
|
80
|
+
// Это может быть целое число, дробное число или число с единицами измерения.
|
|
81
|
+
@if not is-number($value) {
|
|
82
|
+
|
|
83
|
+
// Если $value не является числом, возвращаем ошибку через
|
|
84
|
+
// стандартную функцию логирования. Это предотвращает
|
|
85
|
+
// некорректные вычисления с нечисловыми данными.
|
|
86
|
+
@return log-invalid-type(
|
|
87
|
+
'is-number-negative',
|
|
88
|
+
$value,
|
|
89
|
+
'$value',
|
|
90
|
+
'number'
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Основная логика выполняется только если $value является
|
|
96
|
+
// корректным числом.
|
|
97
|
+
@else {
|
|
98
|
+
|
|
99
|
+
// Логика проверки, является ли число отрицательным:
|
|
100
|
+
// Условие состоит из двух частей, соединенных оператором and:
|
|
101
|
+
// 1. is-number($value) - повторная проверка, что значение является числом
|
|
102
|
+
// (хотя эта проверка уже была выполнена выше, она добавляет
|
|
103
|
+
// дополнительную безопасность для внутренней логики)
|
|
104
|
+
// 2. $value < 0 - проверяет, меньше ли значение нуля
|
|
105
|
+
// Оператор < сравнивает числовые значения, учитывая единицы измерения
|
|
106
|
+
// (например, -10px < 0px вернет true)
|
|
107
|
+
//
|
|
108
|
+
// Возвращаемое значение:
|
|
109
|
+
// - true: если значение является числом И меньше нуля
|
|
110
|
+
// - false: если значение не является числом ИЛИ больше или равно нулю
|
|
111
|
+
//
|
|
112
|
+
// Ключевая особенность: функция возвращает булево значение (true/false),
|
|
113
|
+
// которое можно использовать в условных конструкциях @if/@else.
|
|
114
|
+
@return is-number($value) and $value < 0;
|
|
115
|
+
|
|
116
|
+
}
|
|
117
|
+
|
|
76
118
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
@use '../type-of/is-number' as
|
|
1
|
+
@use '../type-of/is-number' as *;
|
|
2
|
+
@use '../../loggers/log-invalid-type' as *;
|
|
2
3
|
|
|
3
4
|
/// Проверяет, является ли значение положительным числом.
|
|
4
5
|
///
|
|
@@ -53,12 +54,12 @@
|
|
|
53
54
|
/// @debug is-number-positive(1.0); // true (целое число в формате с плавающей точкой)
|
|
54
55
|
/// @debug is-number-positive(+5); // true (явно указанный плюс)
|
|
55
56
|
/// @example scss - Нечисловые значения
|
|
56
|
-
/// @debug is-number-positive("1"); //
|
|
57
|
-
/// @debug is-number-positive(#ff0000); //
|
|
58
|
-
/// @debug is-number-positive(true); //
|
|
59
|
-
/// @debug is-number-positive(null); //
|
|
60
|
-
/// @debug is-number-positive((1, 2, 3)); //
|
|
61
|
-
/// @debug is-number-positive(auto); //
|
|
57
|
+
/// @debug is-number-positive("1"); // Error: "⛔ Параметр «$value» функции «is-number-positive» получил неожиданный тип «string», хотя ожидается «number»"
|
|
58
|
+
/// @debug is-number-positive(#ff0000); // Error: "⛔ Параметр «$value» функции «is-number-positive» получил неожиданный тип «color», хотя ожидается «number»"
|
|
59
|
+
/// @debug is-number-positive(true); // Error: "⛔ Параметр «$value» функции «is-number-positive» получил неожиданный тип «bool», хотя ожидается «number»"
|
|
60
|
+
/// @debug is-number-positive(null); // Error: "⛔ Параметр «$value» функции «is-number-positive» получил неожиданный тип «null», хотя ожидается «number»"
|
|
61
|
+
/// @debug is-number-positive((1, 2, 3)); // Error: "⛔ Параметр «$value» функции «is-number-positive» получил неожиданный тип «list», хотя ожидается «number»"
|
|
62
|
+
/// @debug is-number-positive(auto); // Error: "⛔ Параметр «$value» функции «is-number-positive» получил неожиданный тип «string», хотя ожидается «number»"
|
|
62
63
|
/// @param {*} $value - Значение для проверки. Может быть
|
|
63
64
|
/// любого типа, но функция вернет `true` только для
|
|
64
65
|
/// чисел строго больше нуля, включая числа с единицами
|
|
@@ -67,8 +68,49 @@
|
|
|
67
68
|
/// является числом и строго больше нуля. Во всех
|
|
68
69
|
/// остальных случаях возвращает `false`, включая
|
|
69
70
|
/// ноль, отрицательные числа и значения других типов.
|
|
70
|
-
/// @throws {Error} -
|
|
71
|
-
///
|
|
71
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметры передано
|
|
72
|
+
/// значение, не соответствующее типу `number`. Компиляция Sass
|
|
73
|
+
/// будет остановлена с ошибкой.
|
|
72
74
|
@function is-number-positive($value) {
|
|
73
|
-
|
|
75
|
+
|
|
76
|
+
// Проверка типа входного параметра: ожидается числовое значение.
|
|
77
|
+
// Функция is-number() проверяет, является ли $value числом.
|
|
78
|
+
// Это может быть целое число, дробное число или число с единицами измерения.
|
|
79
|
+
@if not is-number($value) {
|
|
80
|
+
|
|
81
|
+
// Если $value не является числом, возвращаем ошибку через
|
|
82
|
+
// стандартную функцию логирования. Это предотвращает
|
|
83
|
+
// некорректные вычисления с нечисловыми данными.
|
|
84
|
+
@return log-invalid-type(
|
|
85
|
+
'is-number-positive',
|
|
86
|
+
$value,
|
|
87
|
+
'$value',
|
|
88
|
+
'number'
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Основная логика выполняется только если $value является
|
|
94
|
+
// корректным числом.
|
|
95
|
+
@else {
|
|
96
|
+
|
|
97
|
+
// Логика проверки, является ли число положительным:
|
|
98
|
+
// Условие состоит из двух частей, соединенных оператором and:
|
|
99
|
+
// 1. is-number($value) - повторная проверка, что значение является числом
|
|
100
|
+
// (хотя эта проверка уже была выполнена выше, она добавляет
|
|
101
|
+
// дополнительную безопасность для внутренней логики)
|
|
102
|
+
// 2. $value > 0 - проверяет, больше ли значение нуля
|
|
103
|
+
// Оператор > сравнивает числовые значения, учитывая единицы измерения
|
|
104
|
+
// (например, 10px > 0px вернет true)
|
|
105
|
+
//
|
|
106
|
+
// Возвращаемое значение:
|
|
107
|
+
// - true: если значение является числом И больше нуля
|
|
108
|
+
// - false: если значение не является числом ИЛИ меньше или равно нулю
|
|
109
|
+
//
|
|
110
|
+
// Ключевая особенность: функция возвращает булево значение (true/false),
|
|
111
|
+
// которое можно использовать в условных конструкциях @if/@else.
|
|
112
|
+
@return is-number($value) and $value > 0;
|
|
113
|
+
|
|
114
|
+
}
|
|
115
|
+
|
|
74
116
|
}
|