@omnisass/library 0.2.1 → 0.4.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 +120 -3
- package/README.md +94 -0
- package/index.scss +6 -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/misc/_get-uid.scss +135 -0
- 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/getters/string/_get-string-hash.scss +143 -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 +7 -8
- 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-count.scss +173 -0
- package/modules/utilities/helpers/string/_string-lorips.config.scss +81 -0
- package/modules/utilities/helpers/string/_string-lorips.scss +198 -0
- package/modules/utilities/helpers/string/_string-repeat.scss +147 -0
- package/modules/utilities/helpers/string/_string-replace.scss +82 -4
- package/modules/utilities/helpers/string/_string-reverse.scss +139 -0
- 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/test2.sh +158 -0
- package/modules/utilities/setters/_index.scss +0 -3
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
@use 'sass:string';
|
|
2
|
+
@use '../../loggers/log-invalid-type' as *;
|
|
3
|
+
@use '../../validators/type-of/is-string' as *;
|
|
4
|
+
|
|
5
|
+
/// Переворачивает строку (меняет порядок символов на обратный).
|
|
6
|
+
///
|
|
7
|
+
/// Функция принимает строку и возвращает новую строку, в которой
|
|
8
|
+
/// все символы расположены в обратном порядке. Например, строка
|
|
9
|
+
/// "hello" превращается в "olleh". Это полезно для различных
|
|
10
|
+
/// текстовых манипуляций, создания зеркальных эффектов в дизайне
|
|
11
|
+
/// или обработки строк в специфичных сценариях.
|
|
12
|
+
///
|
|
13
|
+
/// Важные особенности функции:
|
|
14
|
+
/// - Сохраняет все символы исходной строки без изменений
|
|
15
|
+
/// - Работает с любыми символами, включая Unicode, пробелы, цифры
|
|
16
|
+
/// - Выполняет строгую проверку типа входного параметра
|
|
17
|
+
/// - Использует цикл для итерации по символам строки в обратном порядке
|
|
18
|
+
/// - Возвращает пустую строку для пустого входного значения
|
|
19
|
+
/// - Полезна для создания палиндромов или проверки симметрии текста
|
|
20
|
+
/// - Может использоваться для зеркального отображения текста в CSS
|
|
21
|
+
/// - Подходит для шифрования простых текстовых преобразований
|
|
22
|
+
/// - Обрабатывает строки любой длины
|
|
23
|
+
/// - Совместима с многострочными строками
|
|
24
|
+
/// - Сохраняет пробелы и специальные символы
|
|
25
|
+
/// - Функция использует цикл for с обратным порядком
|
|
26
|
+
/// итерации `(from $-length through 1)`. Это эффективный
|
|
27
|
+
/// способ перевернуть строку в Sass.
|
|
28
|
+
/// - Для палиндромов (строк, которые читаются одинаково
|
|
29
|
+
/// слева направо и справа налево) функция вернет исходную
|
|
30
|
+
/// строку без изменений.
|
|
31
|
+
/// - Функция корректно работает с Unicode-символами
|
|
32
|
+
/// (например, эмодзи или символами нелатинских алфавитов),
|
|
33
|
+
/// так как `string.slice()` в Sass правильно обрабатывает
|
|
34
|
+
/// Unicode.
|
|
35
|
+
/// - Производительность функции снижается для очень
|
|
36
|
+
/// длинных строк (сотни символов), так как каждый символ
|
|
37
|
+
/// обрабатывается в отдельной итерации цикла.
|
|
38
|
+
/// ---
|
|
39
|
+
/// @name string-reverse
|
|
40
|
+
/// @group utilities-helpers
|
|
41
|
+
/// @since 2026.01.18
|
|
42
|
+
/// @access public
|
|
43
|
+
/// @author Murad Rustamov (therteenten)
|
|
44
|
+
/// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft - therteenten
|
|
45
|
+
/// @link https://sourcecraft.dev/omnisass/library SourceCraft - OmniSass
|
|
46
|
+
/// @link https://sass-lang.com/documentation/modules/string См. также: Официальная документация Sass - Модуль String
|
|
47
|
+
/// @link https://sass-lang.com/documentation/values/strings См. также: Официальная документация Sass - Тип данных "Строки"
|
|
48
|
+
/// @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String См. также: MDN Web Docs - Объект String
|
|
49
|
+
/// @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse См. также: MDN Web Docs - Метод Array.reverse()
|
|
50
|
+
/// @link https://en.wikipedia.org/wiki/Palindrome См. также: Wikipedia - Палиндром
|
|
51
|
+
/// @link https://en.wikipedia.org/wiki/String_(computer_science) См. также: Wikipedia - Строка (информатика)
|
|
52
|
+
/// @link https://css-tricks.com/snippets/sass/string-reverse-function/ См. также: CSS-Tricks - Функция реверса строк в Sass
|
|
53
|
+
/// @link https://css-tricks.com/sass-string-manipulation-functions/ См. также: CSS-Tricks - Функции для работы со строками в Sass
|
|
54
|
+
/// @link https://sass-guidelin.es/ru/#section-44 См. также: Sass Guidelines - Раздел про функции
|
|
55
|
+
/// @link https://github.com/sass/sass/issues/1402 См. также: GitHub - Обсуждение строковых операций в Sass
|
|
56
|
+
/// @link https://www.30secondsofcode.org/sass/p/1/string-reverse См. также: 30 seconds of code - Функция string-reverse
|
|
57
|
+
/// @example scss - Базовое использование
|
|
58
|
+
/// @debug string-reverse("hello"); // "olleh"
|
|
59
|
+
/// @debug string-reverse("world"); // "dlrow"
|
|
60
|
+
/// @debug string-reverse("12345"); // "54321"
|
|
61
|
+
/// @debug string-reverse(""); // ""
|
|
62
|
+
/// @debug string-reverse("a"); // "a"
|
|
63
|
+
/// @example scss - Работа с пробелами и специальными символами
|
|
64
|
+
/// @debug string-reverse("hello world"); // "dlrow olleh"
|
|
65
|
+
/// @debug string-reverse("a b c"); // "c b a"
|
|
66
|
+
/// @debug string-reverse("test!"); // "!tset"
|
|
67
|
+
/// @debug string-reverse("привет"); // "тевирп"
|
|
68
|
+
/// @example scss - Создание зеркальных эффектов
|
|
69
|
+
/// @debug string-reverse("CSS"); // "SSC"
|
|
70
|
+
/// @debug string-reverse("level"); // "level" (палиндром)
|
|
71
|
+
/// @debug string-reverse("radar"); // "radar" (палиндром)
|
|
72
|
+
/// @debug string-reverse("madam"); // "madam" (палиндром)
|
|
73
|
+
/// @param {String} $string - Исходная строка для переворачивания.
|
|
74
|
+
/// Может быть любой строкой: пустой, односимвольной,
|
|
75
|
+
/// многосимвольной, содержащей пробелы, Unicode-символы,
|
|
76
|
+
/// цифры или специальные символы. Все символы сохраняются
|
|
77
|
+
/// и меняют только порядок следования.
|
|
78
|
+
/// @return {String} - Новая строка, содержащая все символы
|
|
79
|
+
/// исходной строки в обратном порядке. Для пустой строки
|
|
80
|
+
/// возвращается пустая строка. Для строки из одного символа
|
|
81
|
+
/// возвращается та же строка (так как порядок не меняется).
|
|
82
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметр передано
|
|
83
|
+
/// значение, не соответствующее необходимому типу:
|
|
84
|
+
///
|
|
85
|
+
/// - `$string` → `string`
|
|
86
|
+
@function string-reverse($string) {
|
|
87
|
+
|
|
88
|
+
// Проверка типа входного параметра: ожидается строковое значение.
|
|
89
|
+
// Функция предназначена для работы исключительно со строками,
|
|
90
|
+
// так как операция реверса имеет смысл только для последовательности
|
|
91
|
+
// символов.
|
|
92
|
+
@if not is-string($string) {
|
|
93
|
+
|
|
94
|
+
// Если $string не является строкой, возвращаем ошибку через
|
|
95
|
+
// стандартную функцию логирования. Это предотвращает
|
|
96
|
+
// некорректные операции с нестроковыми типами данных.
|
|
97
|
+
@return log-invalid-type(
|
|
98
|
+
'string-reverse',
|
|
99
|
+
$string,
|
|
100
|
+
'$string',
|
|
101
|
+
'string'
|
|
102
|
+
);
|
|
103
|
+
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Параметр прошел валидацию - переворачиваем строку.
|
|
107
|
+
@else {
|
|
108
|
+
|
|
109
|
+
// Инициализация переменной результата.
|
|
110
|
+
// Начальное значение null позволяет начать конкатенацию
|
|
111
|
+
// с первого символа без специальной обработки.
|
|
112
|
+
$-result: null;
|
|
113
|
+
|
|
114
|
+
// Определение длины входной строки.
|
|
115
|
+
// Длина используется для итерации по символам строки
|
|
116
|
+
// в обратном порядке.
|
|
117
|
+
$-length: string.length($string);
|
|
118
|
+
|
|
119
|
+
// Цикл итерации по символам строки в обратном порядке.
|
|
120
|
+
// Начинаем с последнего символа (индекс $-length) и
|
|
121
|
+
// движемся к первому символу (индекс 1).
|
|
122
|
+
@for $i from $-length through 1 {
|
|
123
|
+
|
|
124
|
+
// Извлечение текущего символа строки по индексу.
|
|
125
|
+
// string.slice($string, $i, $i) возвращает один символ
|
|
126
|
+
// на позиции $i. Индексация в Sass начинается с 1.
|
|
127
|
+
$-result: $-result + string.slice($string, $i, $i);
|
|
128
|
+
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Возвращаем перевернутую строку.
|
|
132
|
+
// Если исходная строка была пустой, $-length = 0,
|
|
133
|
+
// цикл не выполнится ни разу, и функция вернет null,
|
|
134
|
+
// который в контексте строки преобразуется в пустую строку.
|
|
135
|
+
@return $-result;
|
|
136
|
+
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
@use 'sass:string';
|
|
2
|
+
@use '../../loggers/log-invalid-type' as *;
|
|
3
|
+
@use '../../validators/type-of/is-string' as *;
|
|
2
4
|
|
|
3
5
|
/// Удаляет пробелы с конца строки (справа).
|
|
4
6
|
///
|
|
@@ -48,15 +50,56 @@
|
|
|
48
50
|
/// @return {String} - Возвращает новую строку, в которой удалены
|
|
49
51
|
/// все пробелы с конца оригинальной строки.
|
|
50
52
|
/// Если строка состоит только из пробелов, возвращается пустая строка.
|
|
51
|
-
/// @throws {Error} -
|
|
52
|
-
/// значение,
|
|
53
|
-
///
|
|
53
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметры передано
|
|
54
|
+
/// значение, не соответствующее типу `string`. Компиляция Sass
|
|
55
|
+
/// будет остановлена с ошибкой.
|
|
54
56
|
@function string-trim-end($string) {
|
|
55
57
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
+
// Проверка типа входного параметра: ожидается строковое значение.
|
|
59
|
+
// Функция is-string() проверяет, является ли $string строкой
|
|
60
|
+
// (тип данных string). Строка будет обработана для удаления
|
|
61
|
+
// пробельных символов в конце.
|
|
62
|
+
@if not is-string($string) {
|
|
63
|
+
|
|
64
|
+
// Если $string не является строкой, возвращаем ошибку через
|
|
65
|
+
// стандартную функцию логирования. Это предотвращает
|
|
66
|
+
// некорректные операции обрезки с нестроковыми данными.
|
|
67
|
+
@return log-invalid-type(
|
|
68
|
+
'string-trim-end',
|
|
69
|
+
$string,
|
|
70
|
+
'$string',
|
|
71
|
+
'string'
|
|
72
|
+
);
|
|
73
|
+
|
|
58
74
|
}
|
|
59
75
|
|
|
60
|
-
|
|
76
|
+
// Основная логика выполняется только если $string является
|
|
77
|
+
// корректной строкой.
|
|
78
|
+
@else {
|
|
79
|
+
|
|
80
|
+
// Цикл удаления пробельных символов с конца строки.
|
|
81
|
+
// Цикл продолжается до тех пор, пока последний символ строки
|
|
82
|
+
// является пробелом.
|
|
83
|
+
@while string.slice($string, -1) == " " {
|
|
84
|
+
|
|
85
|
+
// Удаление последнего символа из строки.
|
|
86
|
+
// Алгоритм:
|
|
87
|
+
// 1. string.slice($string, 1, -2) - создает новую строку,
|
|
88
|
+
// которая содержит все символы исходной строки,
|
|
89
|
+
// кроме последнего.
|
|
90
|
+
// - 1: начальный индекс (первый символ)
|
|
91
|
+
// - -2: конечный индекс (предпоследний символ, считая с конца)
|
|
92
|
+
// 2. Присваивание результата обратно переменной $string
|
|
93
|
+
// для следующей итерации цикла.
|
|
94
|
+
$string: string.slice($string, 1, -2);
|
|
95
|
+
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Возвращаем строку без пробельных символов в конце.
|
|
99
|
+
// Если в исходной строке не было пробелов в конце,
|
|
100
|
+
// возвращается оригинальная строка без изменений.
|
|
101
|
+
@return $string;
|
|
102
|
+
|
|
103
|
+
}
|
|
61
104
|
|
|
62
105
|
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
@use 'sass:string';
|
|
2
|
+
@use '../../loggers/log-invalid-type' as *;
|
|
3
|
+
@use '../../validators/type-of/is-string' as *;
|
|
2
4
|
|
|
3
5
|
/// Удаляет пробелы с начала строки (слева).
|
|
4
6
|
///
|
|
@@ -48,15 +50,56 @@
|
|
|
48
50
|
/// @return {String} - Возвращает новую строку, в которой удалены
|
|
49
51
|
/// все пробелы с начала оригинальной строки.
|
|
50
52
|
/// Если строка состоит только из пробелов, возвращается пустая строка.
|
|
51
|
-
/// @throws {Error} -
|
|
52
|
-
/// значение,
|
|
53
|
-
///
|
|
53
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметры передано
|
|
54
|
+
/// значение, не соответствующее типу `string`. Компиляция Sass
|
|
55
|
+
/// будет остановлена с ошибкой.
|
|
54
56
|
@function string-trim-start($string) {
|
|
55
57
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
+
// Проверка типа входного параметра: ожидается строковое значение.
|
|
59
|
+
// Функция is-string() проверяет, является ли $string строкой
|
|
60
|
+
// (тип данных string). Строка будет обработана для удаления
|
|
61
|
+
// пробельных символов в начале.
|
|
62
|
+
@if not is-string($string) {
|
|
63
|
+
|
|
64
|
+
// Если $string не является строкой, возвращаем ошибку через
|
|
65
|
+
// стандартную функцию логирования. Это предотвращает
|
|
66
|
+
// некорректные операции обрезки с нестроковыми данными.
|
|
67
|
+
@return log-invalid-type(
|
|
68
|
+
'string-trim-start',
|
|
69
|
+
$string,
|
|
70
|
+
'$string',
|
|
71
|
+
'string'
|
|
72
|
+
);
|
|
73
|
+
|
|
58
74
|
}
|
|
59
75
|
|
|
60
|
-
|
|
76
|
+
// Основная логика выполняется только если $string является
|
|
77
|
+
// корректной строкой.
|
|
78
|
+
@else {
|
|
79
|
+
|
|
80
|
+
// Цикл удаления пробельных символов с начала строки.
|
|
81
|
+
// Цикл продолжается до тех пор, пока первый символ строки
|
|
82
|
+
// является пробелом.
|
|
83
|
+
@while string.slice($string, 1, 1) == " " {
|
|
84
|
+
|
|
85
|
+
// Удаление первого символа из строки.
|
|
86
|
+
// Алгоритм:
|
|
87
|
+
// 1. string.slice($string, 2) - создает новую строку,
|
|
88
|
+
// которая содержит все символы исходной строки,
|
|
89
|
+
// начиная со второго символа.
|
|
90
|
+
// - 2: начальный индекс (второй символ)
|
|
91
|
+
// - Если не указан конечный индекс, берется до конца строки
|
|
92
|
+
// 2. Присваивание результата обратно переменной $string
|
|
93
|
+
// для следующей итерации цикла.
|
|
94
|
+
$string: string.slice($string, 2);
|
|
95
|
+
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Возвращаем строку без пробельных символов в начале.
|
|
99
|
+
// Если в исходной строке не было пробелов в начале,
|
|
100
|
+
// возвращается оригинальная строка без изменений.
|
|
101
|
+
@return $string;
|
|
102
|
+
|
|
103
|
+
}
|
|
61
104
|
|
|
62
105
|
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
@use 'sass:string';
|
|
2
|
+
@use '../../loggers/log-invalid-type' as *;
|
|
3
|
+
@use '../../validators/type-of/is-string' as *;
|
|
2
4
|
|
|
3
5
|
/// Удаляет пробелы с начала и конца строки.
|
|
4
6
|
///
|
|
@@ -49,21 +51,64 @@
|
|
|
49
51
|
/// @return {String} - Возвращает новую строку, в которой удалены
|
|
50
52
|
/// все пробелы с начала и конца оригинальной строки.
|
|
51
53
|
/// Если строка состоит только из пробелов, возвращается пустая строка.
|
|
52
|
-
/// @throws {Error} -
|
|
53
|
-
/// значение,
|
|
54
|
-
///
|
|
54
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметры передано
|
|
55
|
+
/// значение, не соответствующее типу `string`. Компиляция Sass
|
|
56
|
+
/// будет остановлена с ошибкой.
|
|
55
57
|
@function string-trim($string) {
|
|
56
58
|
|
|
57
|
-
//
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
// Проверка типа входного параметра: ожидается строковое значение.
|
|
60
|
+
// Функция is-string() проверяет, является ли $string строкой
|
|
61
|
+
// (тип данных string). Строка будет обработана для удаления
|
|
62
|
+
// пробельных символов с обоих концов.
|
|
63
|
+
@if not is-string($string) {
|
|
64
|
+
|
|
65
|
+
// Если $string не является строкой, возвращаем ошибку через
|
|
66
|
+
// стандартную функцию логирования. Это предотвращает
|
|
67
|
+
// некорректные операции обрезки с нестроковыми данными.
|
|
68
|
+
@return log-invalid-type(
|
|
69
|
+
'string-trim',
|
|
70
|
+
$string,
|
|
71
|
+
'$string',
|
|
72
|
+
'string'
|
|
73
|
+
);
|
|
61
74
|
|
|
62
|
-
// Убираем пробелы в конце
|
|
63
|
-
@while string.slice($string, -1) == " " {
|
|
64
|
-
$string: string.slice($string, 1, -2);
|
|
65
75
|
}
|
|
66
76
|
|
|
67
|
-
|
|
77
|
+
// Основная логика выполняется только если $string является
|
|
78
|
+
// корректной строкой.
|
|
79
|
+
@else {
|
|
80
|
+
|
|
81
|
+
// Удаление пробельных символов с начала строки.
|
|
82
|
+
// Цикл продолжается до тех пор, пока первый символ строки
|
|
83
|
+
// является пробелом.
|
|
84
|
+
@while string.slice($string, 1, 1) == " " {
|
|
85
|
+
|
|
86
|
+
// Удаление первого символа из строки.
|
|
87
|
+
// string.slice($string, 2) создает новую строку,
|
|
88
|
+
// которая содержит все символы исходной строки,
|
|
89
|
+
// начиная со второго символа.
|
|
90
|
+
$string: string.slice($string, 2);
|
|
91
|
+
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Удаление пробельных символов с конца строки.
|
|
95
|
+
// Цикл продолжается до тех пор, пока последний символ строки
|
|
96
|
+
// является пробелом.
|
|
97
|
+
@while string.slice($string, -1) == " " {
|
|
98
|
+
|
|
99
|
+
// Удаление последнего символа из строки.
|
|
100
|
+
// string.slice($string, 1, -2) создает новую строку,
|
|
101
|
+
// которая содержит все символы исходной строки,
|
|
102
|
+
// кроме последнего.
|
|
103
|
+
$string: string.slice($string, 1, -2);
|
|
104
|
+
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Возвращаем строку без пробельных символов в начале и конце.
|
|
108
|
+
// Если в исходной строке не было пробелов на краях,
|
|
109
|
+
// возвращается оригинальная строка без изменений.
|
|
110
|
+
@return $string;
|
|
111
|
+
|
|
112
|
+
}
|
|
68
113
|
|
|
69
114
|
}
|
|
@@ -111,7 +111,7 @@
|
|
|
111
111
|
// Получаем глобальные настройки из конфигурации
|
|
112
112
|
$-strict-mode: libconfigs.$set-strict-mode; // Режим работы: true = ошибки (строгий), false = предупреждения
|
|
113
113
|
$-loglang: libconfigs.$set-loglang; // Язык вывода сообщений
|
|
114
|
-
$-log-message:
|
|
114
|
+
$-log-message: null; // Текст сообщения об ошибке
|
|
115
115
|
|
|
116
116
|
// Определяем язык на основе глобальной настройки
|
|
117
117
|
@if $-loglang != 'ru' {
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
// файла:
|
|
110
110
|
$-strict-mode: libconfigs.$set-strict-mode; // true = строгий режим (ошибки), false = режим предупреждений
|
|
111
111
|
$-loglang: libconfigs.$set-loglang; // язык сообщений ('ru' = русский, любое другое = английский)
|
|
112
|
-
$-log-message:
|
|
112
|
+
$-log-message: null; // переменная для хранения текста сообщения
|
|
113
113
|
|
|
114
114
|
// Если язык НЕ русский, используем английский текст
|
|
115
115
|
@if $-loglang != 'ru' {
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
@use 'sass:color';
|
|
2
|
+
@use '../../loggers/log-invalid-type' as *;
|
|
3
|
+
@use '../type-of/is-color' as *;
|
|
4
|
+
@use '../type-of/is-number' as *;
|
|
2
5
|
|
|
3
6
|
/// Определяет, является ли цвет светлым (по пороговому
|
|
4
7
|
/// значению светлоты).
|
|
@@ -124,9 +127,63 @@
|
|
|
124
127
|
/// используется значение 50%, которое является
|
|
125
128
|
/// общепринятым разделением между светлыми и темными
|
|
126
129
|
/// тонами. Можно изменить для тонкой настройки.
|
|
127
|
-
/// @
|
|
128
|
-
///
|
|
129
|
-
///
|
|
130
|
+
/// @throws {Error} - Выбрасывает ошибку, если в параметры передано
|
|
131
|
+
/// значение, не соответствующее типу `color` ($color) или
|
|
132
|
+
/// `number` (`$threshold`). Компиляция Sass будет остановлена
|
|
133
|
+
/// с ошибкой.
|
|
130
134
|
@function is-color-light($color, $threshold: 50) {
|
|
131
|
-
|
|
135
|
+
|
|
136
|
+
// Проверка типа первого параметра: ожидается цветовое значение.
|
|
137
|
+
// Функция is-color() проверяет, является ли $color валидным цветом CSS.
|
|
138
|
+
// Цвет будет проанализирован для определения его яркости.
|
|
139
|
+
@if not is-color($color) {
|
|
140
|
+
|
|
141
|
+
// Если $color не является цветом, возвращаем ошибку через
|
|
142
|
+
// стандартную функцию логирования. Это предотвращает
|
|
143
|
+
// некорректные вычисления с нецветовыми данными.
|
|
144
|
+
@return log-invalid-type(
|
|
145
|
+
'is-color-light',
|
|
146
|
+
$color,
|
|
147
|
+
'$color',
|
|
148
|
+
'color'
|
|
149
|
+
);
|
|
150
|
+
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// Проверка типа второго параметра: ожидается числовое значение
|
|
154
|
+
// порога яркости. $threshold определяет граничное значение
|
|
155
|
+
// яркости (в процентах), выше которой цвет считается светлым.
|
|
156
|
+
// По умолчанию используется 50%.
|
|
157
|
+
@else if not is-number($threshold) {
|
|
158
|
+
|
|
159
|
+
// Если $threshold не является числом, возвращаем ошибку.
|
|
160
|
+
// Проверка выполняется только если $color прошел валидацию.
|
|
161
|
+
@return log-invalid-type(
|
|
162
|
+
'is-color-light',
|
|
163
|
+
$threshold,
|
|
164
|
+
'$threshold',
|
|
165
|
+
'number'
|
|
166
|
+
);
|
|
167
|
+
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// Все параметры прошли валидацию - определяем, является ли цвет светлым.
|
|
171
|
+
@else {
|
|
172
|
+
|
|
173
|
+
// Логика определения светлоты цвета:
|
|
174
|
+
// 1. color.channel($color, "lightness", $space: hsl) - извлекает
|
|
175
|
+
// значение яркости цвета в пространстве HSL (от 0% до 100%)
|
|
176
|
+
// 2. ... > $threshold - сравнивает яркость цвета с пороговым значением
|
|
177
|
+
//
|
|
178
|
+
// Возвращаемое значение:
|
|
179
|
+
// - true: если яркость цвета больше порогового значения (цвет светлый)
|
|
180
|
+
// - false: если яркость цвета меньше или равна пороговому значению
|
|
181
|
+
// (цвет темный или нейтральный)
|
|
182
|
+
//
|
|
183
|
+
// Ключевая особенность: функция возвращает булево значение (true/false),
|
|
184
|
+
// которое можно использовать в условных конструкциях @if/@else.
|
|
185
|
+
@return color.channel($color, "lightness", $space: hsl) > $threshold;
|
|
186
|
+
|
|
187
|
+
}
|
|
188
|
+
|
|
132
189
|
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
@use '
|
|
1
|
+
@use '../../loggers/log-invalid-type' as *;
|
|
2
|
+
@use '../type-of/is-color' as *;
|
|
3
|
+
@use '../type-of/is-list' as *;
|
|
2
4
|
|
|
3
5
|
/// Проверяет, что все элементы в списке являются цветами.
|
|
4
6
|
///
|
|
@@ -101,24 +103,54 @@
|
|
|
101
103
|
/// в списке являются цветами. Возвращает `false`, если
|
|
102
104
|
/// хотя бы один элемент не является цветом. Для пустого
|
|
103
105
|
/// списка возвращает `true`.
|
|
104
|
-
/// @throws {Error} -
|
|
105
|
-
///
|
|
106
|
+
/// @throws {Error} - Выбрасывает ошибку, если параметру `$list` передано
|
|
107
|
+
/// значение, не соответствующее типу `list`. Компиляция Sass
|
|
108
|
+
/// будет остановлена с ошибкой.
|
|
106
109
|
@function is-color-list($list) {
|
|
107
110
|
|
|
108
|
-
|
|
111
|
+
// Проверка типа входного параметра: ожидается список или arglist.
|
|
112
|
+
// Функция is-list() проверяет, является ли $list валидным списком
|
|
113
|
+
// или arglist (специальный тип для переменного числа аргументов).
|
|
114
|
+
@if not is-list($list) {
|
|
109
115
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
116
|
+
// Если $list не является списком, возвращаем ошибку через
|
|
117
|
+
// стандартную функцию логирования. Это предотвращает
|
|
118
|
+
// некорректные проверки с некорректными данными.
|
|
119
|
+
@return log-invalid-type(
|
|
120
|
+
'is-color-list',
|
|
121
|
+
$list,
|
|
122
|
+
'$list',
|
|
123
|
+
('list', 'arglist')
|
|
124
|
+
);
|
|
113
125
|
|
|
114
126
|
}
|
|
115
127
|
|
|
116
|
-
|
|
128
|
+
// Основная логика выполняется только если $list является
|
|
129
|
+
// корректным списком или arglist.
|
|
130
|
+
@else {
|
|
117
131
|
|
|
118
|
-
|
|
132
|
+
// Итерация по всем элементам списка.
|
|
133
|
+
// Переменная $-item содержит текущий проверяемый элемент.
|
|
134
|
+
@each $-item in $list {
|
|
135
|
+
|
|
136
|
+
// Проверка: является ли текущий элемент цветом.
|
|
137
|
+
// Функция is-color() возвращает true для валидных цветов CSS.
|
|
138
|
+
@if not is-color($-item) {
|
|
119
139
|
|
|
140
|
+
// Если хотя бы один элемент не является цветом,
|
|
141
|
+
// немедленно возвращаем false. Это ранний выход из функции,
|
|
142
|
+
// который оптимизирует производительность для больших списков.
|
|
143
|
+
@return false;
|
|
120
144
|
|
|
145
|
+
}
|
|
121
146
|
|
|
147
|
+
}
|
|
122
148
|
|
|
149
|
+
// Если все элементы прошли проверку и являются цветами,
|
|
150
|
+
// возвращаем true. Эта точка достигается только если цикл
|
|
151
|
+
// завершился без преждевременного возврата.
|
|
152
|
+
@return true;
|
|
123
153
|
|
|
154
|
+
}
|
|
124
155
|
|
|
156
|
+
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
@use 'sass:list';
|
|
2
|
+
@use '../../loggers/log-invalid-type' as *;
|
|
3
|
+
@use '../type-of/is-list' as *;
|
|
2
4
|
|
|
3
5
|
/// Проверяет, содержится ли значение в указанном списке.
|
|
4
6
|
///
|
|
@@ -58,8 +60,45 @@
|
|
|
58
60
|
/// @param {List} $list - Список, в котором выполняется поиск
|
|
59
61
|
/// @return {Boolean} - Возвращает `true`, если значение
|
|
60
62
|
/// найдено в списке, иначе возвращает `false`.
|
|
61
|
-
/// @throws
|
|
62
|
-
///
|
|
63
|
+
/// @throws {Error} - Выбрасывает ошибку, если параметру `$list` передано
|
|
64
|
+
/// значение, не соответствующее типу `list`. Компиляция Sass
|
|
65
|
+
/// будет остановлена с ошибкой.
|
|
63
66
|
@function is-list-contained($list, $value) {
|
|
64
|
-
|
|
67
|
+
|
|
68
|
+
// Проверка типа первого параметра: ожидается список или arglist.
|
|
69
|
+
// Функция is-list() проверяет, является ли $list валидным списком
|
|
70
|
+
// или arglist (специальный тип для переменного числа аргументов).
|
|
71
|
+
@if not is-list($list) {
|
|
72
|
+
|
|
73
|
+
// Если $list не является списком, возвращаем ошибку через
|
|
74
|
+
// стандартную функцию логирования. Это предотвращает
|
|
75
|
+
// некорректные проверки с некорректными данными.
|
|
76
|
+
@return log-invalid-type(
|
|
77
|
+
'is-list-contained',
|
|
78
|
+
$list,
|
|
79
|
+
'$list',
|
|
80
|
+
('list', 'arglist')
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Основная логика выполняется только если $list является
|
|
86
|
+
// корректным списком или arglist.
|
|
87
|
+
@else {
|
|
88
|
+
|
|
89
|
+
// Проверка наличия значения в списке.
|
|
90
|
+
// Алгоритм:
|
|
91
|
+
// 1. list.index($list, $value) - ищет первое вхождение значения
|
|
92
|
+
// в списке и возвращает его индекс (начиная с 1)
|
|
93
|
+
// Если значение не найдено, возвращает null
|
|
94
|
+
// 2. null != ... - сравниваем результат с null
|
|
95
|
+
// - Если результат не равен null → значение найдено → true
|
|
96
|
+
// - Если результат равен null → значение не найдено → false
|
|
97
|
+
//
|
|
98
|
+
// Ключевая особенность: функция возвращает булево значение (true/false),
|
|
99
|
+
// указывающее, содержится ли значение хотя бы один раз в списке.
|
|
100
|
+
@return (null != list.index($list, $value));
|
|
101
|
+
|
|
102
|
+
}
|
|
103
|
+
|
|
65
104
|
}
|
|
@@ -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
|
}
|