@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
|
@@ -129,6 +129,11 @@
|
|
|
129
129
|
/// - Последний элемент: `color-shade($color, 100%)`
|
|
130
130
|
/// - Промежуточные элементы: равномерно распределенные оттенки
|
|
131
131
|
/// - Длина списка = `$steps + 1`
|
|
132
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметр передано
|
|
133
|
+
/// значение, не соответствующее необходимому типу:
|
|
134
|
+
///
|
|
135
|
+
/// - `$color` → `color`
|
|
136
|
+
/// - `$steps` → `number`
|
|
132
137
|
@function color-scale($color, $steps: 5) {
|
|
133
138
|
|
|
134
139
|
// Проверка типа первого параметра: ожидается базовый цвет.
|
|
@@ -53,6 +53,11 @@
|
|
|
53
53
|
/// черный.
|
|
54
54
|
/// @return {Color} - Затемненный цвет в том же формате,
|
|
55
55
|
/// что и исходный.
|
|
56
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметр передано
|
|
57
|
+
/// значение, не соответствующее необходимому типу:
|
|
58
|
+
///
|
|
59
|
+
/// - `$color` → `color`
|
|
60
|
+
/// - `$percentage` → `number`
|
|
56
61
|
@function color-shade($color, $percentage) {
|
|
57
62
|
|
|
58
63
|
// Проверка типа первого параметра: ожидается базовый цвет.
|
|
@@ -58,6 +58,11 @@
|
|
|
58
58
|
/// При 0 вернется исходный цвет, при 100 — чистый белый.
|
|
59
59
|
/// @return {Color} - Осветленный цвет в том же формате,
|
|
60
60
|
/// что и входной.
|
|
61
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметр передано
|
|
62
|
+
/// значение, не соответствующее необходимому типу:
|
|
63
|
+
///
|
|
64
|
+
/// - `$color` → `color`
|
|
65
|
+
/// - `$percentage` → `number`
|
|
61
66
|
@function color-tint($color, $percentage) {
|
|
62
67
|
|
|
63
68
|
// Проверка типа первого параметра: ожидается базовый цвет.
|
|
@@ -74,7 +74,6 @@
|
|
|
74
74
|
/// (HEX, RGB, HSL, имя цвета).
|
|
75
75
|
/// Цветовой тон (hue) этого цвета используется как отправная
|
|
76
76
|
/// точка для расчета двух дополнительных цветов.
|
|
77
|
-
///
|
|
78
77
|
/// @return {List} - Список (list) из трех строковых
|
|
79
78
|
/// представлений цветов в формате, который Sass использует
|
|
80
79
|
/// для внутреннего хранения (обычно HEX для цветов в
|
|
@@ -84,6 +83,10 @@
|
|
|
84
83
|
/// - Первый элемент: строковое представление исходного цвета
|
|
85
84
|
/// - Второй элемент: цвет со смещением +120° по цветовому кругу
|
|
86
85
|
/// - Третий элемент: цвет со смещением +240° по цветовому кругу
|
|
86
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметр передано
|
|
87
|
+
/// значение, не соответствующее необходимому типу:
|
|
88
|
+
///
|
|
89
|
+
/// - `$color` → `color`
|
|
87
90
|
@function color-triad($color) {
|
|
88
91
|
|
|
89
92
|
// Проверка типа входного параметра: ожидается цветовое значение.
|
|
@@ -90,6 +90,10 @@
|
|
|
90
90
|
/// Сохраняет порядок элементов, оставляя только первое
|
|
91
91
|
/// вхождение каждого значения. Если исходный список
|
|
92
92
|
/// пустой, возвращает пустой список.
|
|
93
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметр передано
|
|
94
|
+
/// значение, не соответствующее необходимому типу:
|
|
95
|
+
///
|
|
96
|
+
/// - `$list` → `list`
|
|
93
97
|
@function list-dedupe($list) {
|
|
94
98
|
|
|
95
99
|
// Проверка типа входного параметра: ожидается список или arglist.
|
|
@@ -76,6 +76,11 @@
|
|
|
76
76
|
/// `$index` не является числом или если индекс меньше 1,
|
|
77
77
|
/// а также предупреждение, если индекс превышает длину
|
|
78
78
|
/// списка.
|
|
79
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметр передано
|
|
80
|
+
/// значение, не соответствующее необходимому типу:
|
|
81
|
+
///
|
|
82
|
+
/// - `$list` → `list`
|
|
83
|
+
/// - `$index` → `number`
|
|
79
84
|
@function list-insert-at($list, $value, $index) {
|
|
80
85
|
|
|
81
86
|
// Проверка типа первого параметра: ожидается список или arglist.
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
@use 'sass:list';
|
|
2
|
+
@use '../../loggers/log-invalid-type' as *;
|
|
3
|
+
@use '../../validators/type-of/is-list' as *;
|
|
2
4
|
|
|
3
5
|
/// Объединяет несколько списков в один плоский список.
|
|
4
6
|
///
|
|
@@ -62,25 +64,69 @@
|
|
|
62
64
|
/// .test {
|
|
63
65
|
/// transition: opacity transform 0.3s 0.5s;
|
|
64
66
|
/// }
|
|
65
|
-
/// @param {ArgList} $lists... - Произвольное количество
|
|
67
|
+
/// @param {ArgList | List} $lists... - Произвольное количество
|
|
66
68
|
/// списков для объединения. Каждый аргумент должен быть
|
|
67
69
|
/// списком. Функция использует `arglist` для поддержки
|
|
68
70
|
/// переменного числа аргументов.
|
|
69
71
|
/// @return {List} - Новый список, содержащий все элементы из
|
|
70
72
|
/// входных списков в порядке их следования. Если ни одного
|
|
71
73
|
/// списка не передано, возвращается пустой список `()`.
|
|
72
|
-
/// @throws
|
|
74
|
+
/// @throws {Warning} - Если передать не список,
|
|
73
75
|
/// элемент будет добавлен как есть (не рекомендуется).
|
|
76
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметр передано
|
|
77
|
+
/// значение, не соответствующее необходимому типу:
|
|
78
|
+
///
|
|
79
|
+
/// - `$lists` → `list`, 'arglist'
|
|
74
80
|
@function list-merge($lists...) {
|
|
75
81
|
|
|
76
|
-
|
|
82
|
+
// Проверка типа входных параметров.
|
|
83
|
+
// Параметр $lists является arglist (переменное число аргументов),
|
|
84
|
+
// но функция также должна принимать единичный список.
|
|
85
|
+
// Функция is-list() проверяет, является ли $lists списком или arglist.
|
|
86
|
+
@if not is-list($lists) {
|
|
87
|
+
|
|
88
|
+
// Если $lists не является списком или arglist, возвращаем ошибку.
|
|
89
|
+
// Это предотвращает некорректные операции с некорректными данными.
|
|
90
|
+
@return log-invalid-type(
|
|
91
|
+
'list-merge',
|
|
92
|
+
$lists,
|
|
93
|
+
'$lists',
|
|
94
|
+
('arglist', 'list')
|
|
95
|
+
);
|
|
77
96
|
|
|
78
|
-
@each $-list in $lists {
|
|
79
|
-
@each $-item in $-list {
|
|
80
|
-
$-result: list.append($-result, $-item);
|
|
81
|
-
}
|
|
82
97
|
}
|
|
83
98
|
|
|
84
|
-
|
|
99
|
+
// Основная логика выполняется только если $lists является
|
|
100
|
+
// корректным списком или arglist.
|
|
101
|
+
@else {
|
|
102
|
+
|
|
103
|
+
// Инициализация переменной для хранения результата.
|
|
104
|
+
// $-result будет содержать объединенный список всех элементов
|
|
105
|
+
// из переданных списков.
|
|
106
|
+
$-result: ();
|
|
107
|
+
|
|
108
|
+
// Внешний цикл: итерация по всем переданным спискам.
|
|
109
|
+
// Переменная $-list содержит текущий обрабатываемый список.
|
|
110
|
+
@each $-list in $lists {
|
|
111
|
+
|
|
112
|
+
// Внутренний цикл: итерация по всем элементам текущего списка.
|
|
113
|
+
// Переменная $-item содержит текущий обрабатываемый элемент.
|
|
114
|
+
@each $-item in $-list {
|
|
115
|
+
|
|
116
|
+
// Добавление элемента в результирующий список.
|
|
117
|
+
// Функция list.append() добавляет элемент в конец списка,
|
|
118
|
+
// сохраняя порядок элементов из исходных списков.
|
|
119
|
+
$-result: list.append($-result, $-item);
|
|
120
|
+
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Возвращаем объединенный список.
|
|
126
|
+
// Результат содержит все элементы из всех переданных списков
|
|
127
|
+
// в том порядке, в котором они были переданы.
|
|
128
|
+
@return $-result;
|
|
129
|
+
|
|
130
|
+
}
|
|
85
131
|
|
|
86
132
|
}
|
|
@@ -84,6 +84,11 @@
|
|
|
84
84
|
/// @throws {Error} - Не выбрасывает ошибок при невалидных
|
|
85
85
|
/// индексах, но может выбросить ошибку если `$index` не
|
|
86
86
|
/// является числом.
|
|
87
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметр передано
|
|
88
|
+
/// значение, не соответствующее необходимому типу:
|
|
89
|
+
///
|
|
90
|
+
/// - `$list` → `list`
|
|
91
|
+
/// - `$index` → `number`
|
|
87
92
|
@function list-remove-at($list, $index) {
|
|
88
93
|
|
|
89
94
|
// Проверка типа первого параметра: ожидается список или arglist.
|
|
@@ -84,6 +84,9 @@
|
|
|
84
84
|
/// измерения первого найденного числа.
|
|
85
85
|
/// @throws {Warning} - Выводит предупреждение при обнаружении
|
|
86
86
|
/// чисел с несовместимыми единицами измерения.
|
|
87
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметры передано
|
|
88
|
+
/// значение, не соответствующее типу `list`. Компиляция Sass
|
|
89
|
+
/// будет остановлена с ошибкой.
|
|
87
90
|
@function list-sum-numbers-safe($list) {
|
|
88
91
|
|
|
89
92
|
// Проверка типа входного параметра: ожидается список или arglist.
|
|
@@ -66,6 +66,9 @@
|
|
|
66
66
|
/// @throws {Error} - Может выбросить ошибку при попытке
|
|
67
67
|
/// сложить числа с несовместимыми единицами измерения
|
|
68
68
|
/// (например, px + em).
|
|
69
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметры передано
|
|
70
|
+
/// значение, не соответствующее типу `list`. Компиляция Sass
|
|
71
|
+
/// будет остановлена с ошибкой.
|
|
69
72
|
@function list-sum-numbers($list) {
|
|
70
73
|
|
|
71
74
|
// Проверка типа входного параметра: ожидается список или arglist.
|
|
@@ -66,12 +66,11 @@
|
|
|
66
66
|
/// значение - процентное представление символа.
|
|
67
67
|
/// @return {String} - Закодированная строка, где все символы
|
|
68
68
|
/// из карты замены преобразованы в их процентное
|
|
69
|
-
/// представление.
|
|
70
|
-
///
|
|
71
|
-
///
|
|
72
|
-
///
|
|
73
|
-
///
|
|
74
|
-
/// в доступном scope.
|
|
69
|
+
/// представление.
|
|
70
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметры передано
|
|
71
|
+
/// значение, не соответствующее типу `string` (`$value`) или
|
|
72
|
+
/// `map` (`$chars-map`). Компиляция Sass будет остановлена
|
|
73
|
+
/// с ошибкой.
|
|
75
74
|
/// @require {function} string-replace - Вспомогательная
|
|
76
75
|
/// функция замены подстрок в строке. Должна быть определена
|
|
77
76
|
/// и доступна для корректной работы данной функции.
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
@use 'sass:math';
|
|
2
|
+
@use '../../loggers/log-invalid-type' as *;
|
|
3
|
+
@use '../../validators/type-of/is-number' as *;
|
|
2
4
|
|
|
3
5
|
/// Округляет число вверх до ближайшего кратного значения.
|
|
4
6
|
///
|
|
@@ -103,9 +105,59 @@
|
|
|
103
105
|
/// @return {Number} - Число, округленное вверх до ближайшего
|
|
104
106
|
/// значения, кратного `$nearest`. Сохраняет единицы
|
|
105
107
|
/// измерения исходного числа `$value`.
|
|
106
|
-
/// @throws {Error} -
|
|
107
|
-
///
|
|
108
|
-
///
|
|
108
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметры передано
|
|
109
|
+
/// значение, не соответствующее типу `number`. Компиляция Sass
|
|
110
|
+
/// будет остановлена с ошибкой.
|
|
109
111
|
@function number-ceil-to($value, $nearest) {
|
|
110
|
-
|
|
112
|
+
|
|
113
|
+
// Проверка типа первого параметра: ожидается числовое значение.
|
|
114
|
+
// Функция is-number() проверяет, является ли $value числом.
|
|
115
|
+
// Это может быть целое число, дробное число или число с единицами измерения.
|
|
116
|
+
@if not is-number($value) {
|
|
117
|
+
|
|
118
|
+
// Если $value не является числом, возвращаем ошибку через
|
|
119
|
+
// стандартную функцию логирования. Это предотвращает
|
|
120
|
+
// некорректные вычисления с нечисловыми данными.
|
|
121
|
+
@return log-invalid-type(
|
|
122
|
+
'number-ceil-to',
|
|
123
|
+
$value,
|
|
124
|
+
'$value',
|
|
125
|
+
'number'
|
|
126
|
+
);
|
|
127
|
+
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Проверка типа второго параметра: ожидается числовое значение
|
|
131
|
+
// для шага округления. $nearest определяет, до какого ближайшего
|
|
132
|
+
// кратного значения нужно округлить исходное число.
|
|
133
|
+
@else if not is-number($nearest) {
|
|
134
|
+
|
|
135
|
+
// Если $nearest не является числом, возвращаем ошибку.
|
|
136
|
+
// Проверка выполняется только если $value прошел валидацию.
|
|
137
|
+
@return log-invalid-type(
|
|
138
|
+
'number-ceil-to',
|
|
139
|
+
$nearest,
|
|
140
|
+
'$nearest',
|
|
141
|
+
'number'
|
|
142
|
+
);
|
|
143
|
+
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Все параметры прошли валидацию - выполняем округление вверх.
|
|
147
|
+
@else {
|
|
148
|
+
|
|
149
|
+
// Формула округления вверх до ближайшего кратного значения:
|
|
150
|
+
// 1. math.div($value, $nearest) - делим исходное значение на шаг округления
|
|
151
|
+
// 2. math.ceil() - округляем результат деления вверх до ближайшего целого
|
|
152
|
+
// 3. * $nearest - умножаем округленное целое на шаг округления
|
|
153
|
+
//
|
|
154
|
+
// Математическая формула:
|
|
155
|
+
// result = ceil(value / nearest) × nearest
|
|
156
|
+
//
|
|
157
|
+
// Ключевая особенность: функция всегда округляет ВВЕРХ до ближайшего
|
|
158
|
+
// кратного значения, даже если исходное число уже близко к нижнему крайнему.
|
|
159
|
+
@return math.ceil(math.div($value, $nearest)) * $nearest;
|
|
160
|
+
|
|
161
|
+
}
|
|
162
|
+
|
|
111
163
|
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
@use 'sass:math';
|
|
2
|
+
@use '../../loggers/log-invalid-type' as *;
|
|
3
|
+
@use '../../validators/type-of/is-number' as *;
|
|
2
4
|
|
|
3
5
|
/// Ограничивает число сверху, обеспечивая максимальное
|
|
4
6
|
/// значение.
|
|
@@ -13,7 +15,7 @@
|
|
|
13
15
|
/// - Если `value ≤ max` → возвращает `value`
|
|
14
16
|
///
|
|
15
17
|
/// Важные особенности функции:
|
|
16
|
-
/// - Гарантирует, что результат будет не больше `$max`
|
|
18
|
+
/// - Гарантирует, что результат будет не больше `$value-max`
|
|
17
19
|
/// - Использует встроенную функцию `math.min()`
|
|
18
20
|
/// - Работает с любыми числовыми значениями (целые, дробные,
|
|
19
21
|
/// с единицами)
|
|
@@ -78,15 +80,68 @@
|
|
|
78
80
|
/// сверху. Может быть любым числом: целым, дробным,
|
|
79
81
|
/// положительным, отрицательным, с единицами измерения
|
|
80
82
|
/// или без.
|
|
81
|
-
/// @param {Number} $max - Максимальное допустимое значение.
|
|
82
|
-
/// Если `$value` больше `$max`, возвращается `$max`.
|
|
83
|
+
/// @param {Number} $value-max - Максимальное допустимое значение.
|
|
84
|
+
/// Если `$value` больше `$value-max`, возвращается `$value-max`.
|
|
83
85
|
/// @return {Number} - Наименьшее из двух значений: `$value`
|
|
84
|
-
/// или `$max`. Если `$value` меньше или равно `$max`,
|
|
86
|
+
/// или `$value-max`. Если `$value` меньше или равно `$value-max`,
|
|
85
87
|
/// возвращается `$value`. В противном случае возвращается
|
|
86
|
-
/// `$max`.
|
|
87
|
-
/// @throws
|
|
88
|
-
///
|
|
89
|
-
///
|
|
90
|
-
@function number-clamp-max($value, $max) {
|
|
91
|
-
|
|
88
|
+
/// `$value-max`.
|
|
89
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметры передано
|
|
90
|
+
/// значение, не соответствующее типу `number`. Компиляция Sass
|
|
91
|
+
/// будет остановлена с ошибкой.
|
|
92
|
+
@function number-clamp-max($value, $value-max) {
|
|
93
|
+
|
|
94
|
+
// Проверка типа первого параметра: ожидается числовое значение.
|
|
95
|
+
// Функция is-number() проверяет, является ли $value числом.
|
|
96
|
+
// Это может быть целое число, дробное число или число с единицами измерения.
|
|
97
|
+
@if not is-number($value) {
|
|
98
|
+
|
|
99
|
+
// Если $value не является числом, возвращаем ошибку через
|
|
100
|
+
// стандартную функцию логирования. Это предотвращает
|
|
101
|
+
// некорректные вычисления с нечисловыми данными.
|
|
102
|
+
@return log-invalid-type(
|
|
103
|
+
'number-clamp-max',
|
|
104
|
+
$value,
|
|
105
|
+
'$value',
|
|
106
|
+
'number'
|
|
107
|
+
);
|
|
108
|
+
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Проверка типа второго параметра: ожидается числовое значение
|
|
112
|
+
// максимального предела. $value-max определяет верхнюю границу,
|
|
113
|
+
// которую не может превышать возвращаемое значение.
|
|
114
|
+
@else if not is-number($value-max) {
|
|
115
|
+
|
|
116
|
+
// Если $value-max не является числом, возвращаем ошибку.
|
|
117
|
+
// Проверка выполняется только если $value прошел валидацию.
|
|
118
|
+
@return log-invalid-type(
|
|
119
|
+
'number-clamp-max',
|
|
120
|
+
$value-max,
|
|
121
|
+
'$value-max',
|
|
122
|
+
'number'
|
|
123
|
+
);
|
|
124
|
+
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Все параметры прошли валидацию - выполняем ограничение сверху.
|
|
128
|
+
@else {
|
|
129
|
+
|
|
130
|
+
// Формула ограничения значения сверху:
|
|
131
|
+
// Используем встроенную функцию math.min() для выбора
|
|
132
|
+
// меньшего из двух значений.
|
|
133
|
+
//
|
|
134
|
+
// Логика работы:
|
|
135
|
+
// - Если $value меньше или равен $value-max, возвращается $value
|
|
136
|
+
// - Если $value больше $value-max, возвращается $value-max
|
|
137
|
+
//
|
|
138
|
+
// Математическая формула:
|
|
139
|
+
// result = min(value, max-value)
|
|
140
|
+
//
|
|
141
|
+
// Ключевая особенность: функция гарантирует, что возвращаемое
|
|
142
|
+
// значение никогда не превысит указанный максимальный предел.
|
|
143
|
+
@return math.min($value, $value-max);
|
|
144
|
+
|
|
145
|
+
}
|
|
146
|
+
|
|
92
147
|
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
@use 'sass:math';
|
|
2
|
+
@use '../../loggers/log-invalid-type' as *;
|
|
3
|
+
@use '../../validators/type-of/is-number' as *;
|
|
2
4
|
|
|
3
5
|
/// Ограничивает число снизу, обеспечивая минимальное значение.
|
|
4
6
|
///
|
|
@@ -12,7 +14,7 @@
|
|
|
12
14
|
/// - Если `value ≥ min` → возвращает `value`
|
|
13
15
|
///
|
|
14
16
|
/// Важные особенности функции:
|
|
15
|
-
/// - Гарантирует, что результат будет не меньше `$min`
|
|
17
|
+
/// - Гарантирует, что результат будет не меньше `$value-min`
|
|
16
18
|
/// - Использует встроенную функцию `math.max()`
|
|
17
19
|
/// - Работает с любыми числовыми значениями (целые, дробные,
|
|
18
20
|
/// с единицами)
|
|
@@ -86,15 +88,68 @@
|
|
|
86
88
|
/// снизу. Может быть любым числом: целым, дробным,
|
|
87
89
|
/// положительным, отрицательным, с единицами измерения или
|
|
88
90
|
/// без.
|
|
89
|
-
/// @param {Number} $min - Минимальное допустимое значение.
|
|
90
|
-
/// Если `$value` меньше `$min`, возвращается `$min`.
|
|
91
|
+
/// @param {Number} $value-min - Минимальное допустимое значение.
|
|
92
|
+
/// Если `$value` меньше `$value-min`, возвращается `$value-min`.
|
|
91
93
|
/// @return {Number} - Наибольшее из двух значений: `$value`
|
|
92
|
-
/// или `$min`. Если `$value` больше или равно `$min`,
|
|
94
|
+
/// или `$value-min`. Если `$value` больше или равно `$value-min`,
|
|
93
95
|
/// возвращается `$value`. В противном случае возвращается
|
|
94
|
-
/// `$min`.
|
|
95
|
-
/// @throws
|
|
96
|
-
///
|
|
97
|
-
///
|
|
98
|
-
@function number-clamp-min($value, $min) {
|
|
99
|
-
|
|
96
|
+
/// `$value-min`.
|
|
97
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметры передано
|
|
98
|
+
/// значение, не соответствующее типу `number`. Компиляция Sass
|
|
99
|
+
/// будет остановлена с ошибкой.
|
|
100
|
+
@function number-clamp-min($value, $value-min) {
|
|
101
|
+
|
|
102
|
+
// Проверка типа первого параметра: ожидается числовое значение.
|
|
103
|
+
// Функция is-number() проверяет, является ли $value числом.
|
|
104
|
+
// Это может быть целое число, дробное число или число с единицами измерения.
|
|
105
|
+
@if not is-number($value) {
|
|
106
|
+
|
|
107
|
+
// Если $value не является числом, возвращаем ошибку через
|
|
108
|
+
// стандартную функцию логирования. Это предотвращает
|
|
109
|
+
// некорректные вычисления с нечисловыми данными.
|
|
110
|
+
@return log-invalid-type(
|
|
111
|
+
'number-clamp-min',
|
|
112
|
+
$value,
|
|
113
|
+
'$value',
|
|
114
|
+
'number'
|
|
115
|
+
);
|
|
116
|
+
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Проверка типа второго параметра: ожидается числовое значение
|
|
120
|
+
// минимального предела. $value-min определяет нижнюю границу,
|
|
121
|
+
// ниже которой не может опускаться возвращаемое значение.
|
|
122
|
+
@else if not is-number($value-min) {
|
|
123
|
+
|
|
124
|
+
// Если $value-min не является числом, возвращаем ошибку.
|
|
125
|
+
// Проверка выполняется только если $value прошел валидацию.
|
|
126
|
+
@return log-invalid-type(
|
|
127
|
+
'number-clamp-min',
|
|
128
|
+
$value-min,
|
|
129
|
+
'$value-min',
|
|
130
|
+
'number'
|
|
131
|
+
);
|
|
132
|
+
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Все параметры прошли валидацию - выполняем ограничение снизу.
|
|
136
|
+
@else {
|
|
137
|
+
|
|
138
|
+
// Формула ограничения значения снизу:
|
|
139
|
+
// Используем встроенную функцию math.max() для выбора
|
|
140
|
+
// большего из двух значений.
|
|
141
|
+
//
|
|
142
|
+
// Логика работы:
|
|
143
|
+
// - Если $value больше или равен $value-min, возвращается $value
|
|
144
|
+
// - Если $value меньше $value-min, возвращается $value-min
|
|
145
|
+
//
|
|
146
|
+
// Математическая формула:
|
|
147
|
+
// result = max(value, min-value)
|
|
148
|
+
//
|
|
149
|
+
// Ключевая особенность: функция гарантирует, что возвращаемое
|
|
150
|
+
// значение никогда не будет меньше указанного минимального предела.
|
|
151
|
+
@return math.max($value, $value-min);
|
|
152
|
+
|
|
153
|
+
}
|
|
154
|
+
|
|
100
155
|
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
@use 'sass:math';
|
|
2
|
+
@use '../../loggers/log-invalid-type' as *;
|
|
3
|
+
@use '../../validators/type-of/is-number' as *;
|
|
2
4
|
|
|
3
5
|
/// Ограничивает число заданным диапазоном значений.
|
|
4
6
|
///
|
|
@@ -16,7 +18,7 @@
|
|
|
16
18
|
/// - Если `min ≤ value ≤ max` → возвращает `value`
|
|
17
19
|
///
|
|
18
20
|
/// Важные особенности функции:
|
|
19
|
-
/// - Гарантирует, что результат будет в диапазоне `[$min, $max]`
|
|
21
|
+
/// - Гарантирует, что результат будет в диапазоне `[$value-min, $value-max]`
|
|
20
22
|
/// - Использует встроенные функции `math.max()` и `math.min()`
|
|
21
23
|
/// - Работает с любыми числовыми значениями (целые, дробные,
|
|
22
24
|
/// с единицами)
|
|
@@ -32,7 +34,7 @@
|
|
|
32
34
|
/// > `number-clamp()` вычисляется один раз при компиляции и
|
|
33
35
|
/// > возвращает фиксированное значение. Для обеспечения
|
|
34
36
|
/// > корректной работы рекомендуется всегда передавать
|
|
35
|
-
/// > `$min ≤ $max`. При `$min > $max` функция все равно
|
|
37
|
+
/// > `$value-min ≤ $value-max`. При `$value-min > $value-max` функция все равно
|
|
36
38
|
/// > работает, но результат может отличаться от ожидаемого.
|
|
37
39
|
/// ---
|
|
38
40
|
/// @name number-clamp
|
|
@@ -92,18 +94,92 @@
|
|
|
92
94
|
/// @param {Number} $value - Число, которое нужно ограничить.
|
|
93
95
|
/// Может быть любым числом: целым, дробным, положительным,
|
|
94
96
|
/// отрицательным, с единицами измерения или без.
|
|
95
|
-
/// @param {Number} $min - Минимальное допустимое значение.
|
|
96
|
-
/// Если `$value` меньше `$min`, возвращается `$min`.
|
|
97
|
-
/// @param {Number} $max - Максимальное допустимое значение.
|
|
98
|
-
/// Если `$value` больше `$max`, возвращается `$max`.
|
|
97
|
+
/// @param {Number} $value-min - Минимальное допустимое значение.
|
|
98
|
+
/// Если `$value` меньше `$value-min`, возвращается `$value-min`.
|
|
99
|
+
/// @param {Number} $value-max - Максимальное допустимое значение.
|
|
100
|
+
/// Если `$value` больше `$value-max`, возвращается `$value-max`.
|
|
99
101
|
/// @return {Number} - Значение `$value`, ограниченное
|
|
100
|
-
/// диапазоном `[$min, $max]`. Если `$value` находится в
|
|
102
|
+
/// диапазоном `[$value-min, $value-max]`. Если `$value` находится в
|
|
101
103
|
/// пределах диапазона, возвращается исходное значение. В
|
|
102
104
|
/// противном случае возвращается соответствующая граница
|
|
103
105
|
/// диапазона.
|
|
104
|
-
/// @throws {
|
|
105
|
-
///
|
|
106
|
-
///
|
|
107
|
-
|
|
108
|
-
|
|
106
|
+
/// @throws {Warning} - когда `$value-min > $value-max` поведение
|
|
107
|
+
/// функции может быть неинтуитивным.
|
|
108
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметры передано
|
|
109
|
+
/// значение, не соответствующее типу `number`. Компиляция Sass
|
|
110
|
+
/// будет остановлена с ошибкой.
|
|
111
|
+
@function number-clamp($value, $value-min, $value-max) {
|
|
112
|
+
|
|
113
|
+
// Проверка типа первого параметра: ожидается числовое значение.
|
|
114
|
+
// Функция is-number() проверяет, является ли $value числом.
|
|
115
|
+
// Это может быть целое число, дробное число или число с единицами измерения.
|
|
116
|
+
@if not is-number($value) {
|
|
117
|
+
|
|
118
|
+
// Если $value не является числом, возвращаем ошибку через
|
|
119
|
+
// стандартную функцию логирования. Это предотвращает
|
|
120
|
+
// некорректные вычисления с нечисловыми данными.
|
|
121
|
+
@return log-invalid-type(
|
|
122
|
+
'number-clamp',
|
|
123
|
+
$value,
|
|
124
|
+
'$value',
|
|
125
|
+
'number'
|
|
126
|
+
);
|
|
127
|
+
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Проверка типа второго параметра: ожидается числовое значение
|
|
131
|
+
// минимального предела. $value-min определяет нижнюю границу,
|
|
132
|
+
// ниже которой не может опускаться возвращаемое значение.
|
|
133
|
+
@else if not is-number($value-min) {
|
|
134
|
+
|
|
135
|
+
// Если $value-min не является числом, возвращаем ошибку.
|
|
136
|
+
// Проверка выполняется только если $value прошел валидацию.
|
|
137
|
+
@return log-invalid-type(
|
|
138
|
+
'number-clamp',
|
|
139
|
+
$value-min,
|
|
140
|
+
'$value-min',
|
|
141
|
+
'number'
|
|
142
|
+
);
|
|
143
|
+
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Проверка типа третьего параметра: ожидается числовое значение
|
|
147
|
+
// максимального предела. $value-max определяет верхнюю границу,
|
|
148
|
+
// которую не может превышать возвращаемое значение.
|
|
149
|
+
@else if not is-number($value-max) {
|
|
150
|
+
|
|
151
|
+
// Если $value-max не является числом, возвращаем ошибку.
|
|
152
|
+
// Проверка выполняется только если $value и $value-min
|
|
153
|
+
// прошли валидацию.
|
|
154
|
+
@return log-invalid-type(
|
|
155
|
+
'number-clamp',
|
|
156
|
+
$value-max,
|
|
157
|
+
'$value-max',
|
|
158
|
+
'number'
|
|
159
|
+
);
|
|
160
|
+
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// Все параметры прошли валидацию - выполняем ограничение диапазона.
|
|
164
|
+
@else {
|
|
165
|
+
|
|
166
|
+
// Формула ограничения значения в заданном диапазоне:
|
|
167
|
+
// Используем комбинацию встроенных функций math.max() и math.min().
|
|
168
|
+
//
|
|
169
|
+
// Логика работы:
|
|
170
|
+
// 1. math.max($value, $value-min) - гарантирует, что значение
|
|
171
|
+
// не будет меньше минимального предела
|
|
172
|
+
// 2. math.min(..., $value-max) - гарантирует, что значение
|
|
173
|
+
// не будет больше максимального предела
|
|
174
|
+
//
|
|
175
|
+
// Математическая формула:
|
|
176
|
+
// result = min(max(value, min-value), max-value)
|
|
177
|
+
//
|
|
178
|
+
// Ключевая особенность: функция гарантирует, что возвращаемое
|
|
179
|
+
// значение всегда будет находиться в диапазоне между $value-min
|
|
180
|
+
// и $value-max включительно.
|
|
181
|
+
@return math.min(math.max($value, $value-min), $value-max);
|
|
182
|
+
|
|
183
|
+
}
|
|
184
|
+
|
|
109
185
|
}
|