@omnisass/library 0.2.1 → 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.
Files changed (78) hide show
  1. package/CHANGELOG.md +101 -3
  2. package/README.md +94 -0
  3. package/modules/utilities/converters/_convert-camel2kebab.scss +5 -4
  4. package/modules/utilities/converters/_convert-em2px.scss +5 -3
  5. package/modules/utilities/converters/_convert-hex2rgb.scss +4 -0
  6. package/modules/utilities/converters/_convert-hex2rgba.scss +5 -0
  7. package/modules/utilities/converters/_convert-kebab2camel.scss +5 -4
  8. package/modules/utilities/converters/_convert-kebab2snake.scss +4 -4
  9. package/modules/utilities/converters/_convert-px2em.scss +5 -4
  10. package/modules/utilities/converters/_convert-px2rem.scss +5 -4
  11. package/modules/utilities/converters/_convert-rem2px.scss +5 -3
  12. package/modules/utilities/converters/_convert-snake2kebab.scss +4 -4
  13. package/modules/utilities/getters/color/_get-color-brightness.scss +4 -0
  14. package/modules/utilities/getters/color/_get-color-darkest.scss +5 -1
  15. package/modules/utilities/getters/list/_get-list-item-end.scss +4 -2
  16. package/modules/utilities/getters/list/_get-list-item-start.scss +4 -2
  17. package/modules/utilities/getters/list/_get-list-item.scss +6 -4
  18. package/modules/utilities/getters/number/_get-number-from-percent.scss +6 -2
  19. package/modules/utilities/getters/number/_get-number-height-by-ratio.scss +5 -0
  20. package/modules/utilities/getters/number/_get-number-max.scss +4 -0
  21. package/modules/utilities/getters/number/_get-number-min.scss +4 -0
  22. package/modules/utilities/getters/number/_get-number-percentage-of.scss +6 -1
  23. package/modules/utilities/getters/number/_get-number-unit.scss +4 -2
  24. package/modules/utilities/getters/number/_get-number-width-by-ratio.scss +5 -0
  25. package/modules/utilities/helpers/color/_color-blend-steps.scss +6 -0
  26. package/modules/utilities/helpers/color/_color-blend.scss +6 -0
  27. package/modules/utilities/helpers/color/_color-hue-shift.scss +5 -0
  28. package/modules/utilities/helpers/color/_color-scale.scss +5 -0
  29. package/modules/utilities/helpers/color/_color-shade.scss +5 -0
  30. package/modules/utilities/helpers/color/_color-tint.scss +5 -0
  31. package/modules/utilities/helpers/color/_color-triad.scss +4 -1
  32. package/modules/utilities/helpers/list/_list-dedupe.scss +4 -0
  33. package/modules/utilities/helpers/list/_list-insert-at.scss +5 -0
  34. package/modules/utilities/helpers/list/_list-merge.scss +54 -8
  35. package/modules/utilities/helpers/list/_list-remove-at.scss +5 -0
  36. package/modules/utilities/helpers/list/_list-sum-numbers-safe.scss +3 -0
  37. package/modules/utilities/helpers/list/_list-sum-numbers.scss +3 -0
  38. package/modules/utilities/helpers/misc/_url-encode.scss +5 -6
  39. package/modules/utilities/helpers/number/_number-ceil-to.scss +56 -4
  40. package/modules/utilities/helpers/number/_number-clamp-max.scss +65 -10
  41. package/modules/utilities/helpers/number/_number-clamp-min.scss +65 -10
  42. package/modules/utilities/helpers/number/_number-clamp.scss +88 -12
  43. package/modules/utilities/helpers/number/_number-denormalize.scss +87 -9
  44. package/modules/utilities/helpers/number/_number-fibonacci.scss +62 -9
  45. package/modules/utilities/helpers/number/_number-floor-to.scss +57 -3
  46. package/modules/utilities/helpers/number/_number-format-with-separator.scss +99 -16
  47. package/modules/utilities/helpers/number/_number-normalize.scss +88 -10
  48. package/modules/utilities/helpers/number/_number-random-between-int.scss +74 -13
  49. package/modules/utilities/helpers/number/_number-random-between.scss +76 -15
  50. package/modules/utilities/helpers/number/_number-range.scss +105 -12
  51. package/modules/utilities/helpers/number/_number-round-to-nearest.scss +58 -1
  52. package/modules/utilities/helpers/number/_number-round-to.scss +65 -2
  53. package/modules/utilities/helpers/number/_number-strip-unit.scss +43 -9
  54. package/modules/utilities/helpers/string/_string-capitalize.scss +46 -5
  55. package/modules/utilities/helpers/string/_string-replace.scss +82 -4
  56. package/modules/utilities/helpers/string/_string-trim-end.scss +49 -6
  57. package/modules/utilities/helpers/string/_string-trim-start.scss +49 -6
  58. package/modules/utilities/helpers/string/_string-trim.scss +56 -11
  59. package/modules/utilities/loggers/_log-invalid-type.scss +1 -1
  60. package/modules/utilities/loggers/_log-invalid-value.scss +1 -1
  61. package/modules/utilities/validators/color/_is-color-light.scss +61 -4
  62. package/modules/utilities/validators/color/_is-color-list.scss +41 -9
  63. package/modules/utilities/validators/list/_is-list-contained.scss +42 -3
  64. package/modules/utilities/validators/misc/_is-time.scss +29 -0
  65. package/modules/utilities/validators/number/_is-int-even.scss +50 -8
  66. package/modules/utilities/validators/number/_is-int-odd.scss +51 -9
  67. package/modules/utilities/validators/number/_is-int.scss +71 -12
  68. package/modules/utilities/validators/number/_is-number-has-unit.scss +55 -13
  69. package/modules/utilities/validators/number/_is-number-negative.scss +53 -11
  70. package/modules/utilities/validators/number/_is-number-positive.scss +52 -10
  71. package/modules/utilities/validators/number/_is-number-unitless.scss +53 -12
  72. package/modules/utilities/validators/number/_is-number-zero.scss +54 -10
  73. package/modules/utilities/validators/string/_is-string-contained.scss +59 -4
  74. package/modules/utilities/validators/string/_is-string-empty.scss +48 -8
  75. package/modules/utilities/validators/string/_is-string-ending-with.scss +64 -5
  76. package/modules/utilities/validators/string/_is-string-starting-with.scss +60 -8
  77. package/package.json +1 -1
  78. package/package.scss +9 -8
@@ -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
  /// оставляет без изменений.
@@ -72,13 +74,52 @@
72
74
  /// первый символ преобразован в верхний регистр, а все
73
75
  /// остальные символы остаются без изменений. Для пустой
74
76
  /// строки возвращает пустую строку.
75
- /// @throws Не выбрасывает ошибок, корректно обрабатывает строки
76
- /// любой длины и содержания.
77
+ /// @throws {Error} - Выбрасывает ошибку, если в параметры передано
78
+ /// значение, не соответствующее типу `string`. Компиляция Sass
79
+ /// будет остановлена с ошибкой.
77
80
  @function string-capitalize($string) {
78
81
 
79
- $-first: string.to-upper-case(string.slice($string, 1, 1));
80
- $-rest: string.slice($string, 2);
82
+ // Проверка типа входного параметра: ожидается строковое значение.
83
+ // Функция is-string() проверяет, является ли $string строкой
84
+ // (тип данных string). Строка будет преобразована в формат,
85
+ // где первый символ становится заглавным.
86
+ @if not is-string($string) {
81
87
 
82
- @return $-first + $-rest;
88
+ // Если $string не является строкой, возвращаем ошибку через
89
+ // стандартную функцию логирования. Это предотвращает
90
+ // некорректные операции преобразования с нестроковыми данными.
91
+ @return log-invalid-type(
92
+ 'string-capitalize',
93
+ $string,
94
+ '$string',
95
+ 'string'
96
+ );
97
+
98
+ }
99
+
100
+ // Основная логика выполняется только если $string является
101
+ // корректной строкой.
102
+ @else {
103
+
104
+ // Извлечение первого символа строки и преобразование его
105
+ // в верхний регистр.
106
+ // Алгоритм:
107
+ // 1. string.slice($string, 1, 1) - извлекает первый символ строки
108
+ // (позиции с 1 по 1 включительно)
109
+ // 2. string.to-upper-case(...) - преобразует символ в верхний регистр
110
+ $-first: string.to-upper-case(string.slice($string, 1, 1));
111
+
112
+ // Извлечение оставшейся части строки (все символы после первого).
113
+ // string.slice($string, 2) возвращает подстроку, начиная со второго символа
114
+ // и до конца строки. Если строка состоит из одного символа,
115
+ // возвращается пустая строка.
116
+ $-rest: string.slice($string, 2);
117
+
118
+ // Соединение заглавного первого символа с оставшейся частью строки.
119
+ // Результат - строка, где первый символ заглавный, а остальные
120
+ // символы сохраняют свой исходный регистр.
121
+ @return $-first + $-rest;
122
+
123
+ }
83
124
 
84
125
  }
@@ -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
  ///
@@ -56,14 +58,90 @@
56
58
  /// `$replaceable` не найдена, возвращается оригинальная строка.
57
59
  /// @throws {Error} - Может вызвать ошибку глубины рекурсии при очень
58
60
  /// длинных строках с множественными заменами.
61
+ /// @throws {Error} - Выбрасывает ошибку, если в параметры передано
62
+ /// значение, не соответствующее типу `string`. Компиляция Sass
63
+ /// будет остановлена с ошибкой.
59
64
  @function string-replace($string, $replaceable, $replacement: '') {
60
65
 
61
- $-index: string.index($string, $replaceable);
66
+ // Проверка типа первого параметра: ожидается исходная строка.
67
+ // Функция is-string() проверяет, является ли $string строкой.
68
+ // В этой строке будут заменяться все вхождения подстроки.
69
+ @if not is-string($string) {
70
+
71
+ // Если $string не является строкой, возвращаем ошибку через
72
+ // стандартную функцию логирования. Это предотвращает
73
+ // некорректные операции замены с нестроковыми данными.
74
+ @return log-invalid-type(
75
+ 'string-replace',
76
+ $string,
77
+ '$string',
78
+ 'string'
79
+ );
80
+
81
+ }
82
+
83
+ // Проверка типа второго параметра: ожидается строка для поиска.
84
+ // $replaceable определяет подстроку, которую нужно найти и заменить.
85
+ @else if not is-string($replaceable) {
86
+
87
+ // Если $replaceable не является строкой, возвращаем ошибку.
88
+ // Проверка выполняется только если $string прошел валидацию.
89
+ @return log-invalid-type(
90
+ 'string-replace',
91
+ $replaceable,
92
+ '$replaceable',
93
+ 'string'
94
+ );
95
+
96
+ }
97
+
98
+ // Проверка типа третьего параметра: ожидается строка-замена.
99
+ // $replacement определяет подстроку, на которую будет заменено
100
+ // каждое вхождение $replaceable. По умолчанию - пустая строка.
101
+ @else if not is-string($replacement) {
102
+
103
+ // Если $replacement не является строкой, возвращаем ошибку.
104
+ // Проверка выполняется только если $string и $replaceable
105
+ // прошли валидацию.
106
+ @return log-invalid-type(
107
+ 'string-replace',
108
+ $replacement,
109
+ '$replacement',
110
+ 'string'
111
+ );
62
112
 
63
- @if $-index {
64
- @return string.slice($string, 1, $-index - 1) + $replacement + string-replace(string.slice($string, $-index + string.length($replaceable)), $replaceable, $replacement);
65
113
  }
66
114
 
67
- @return $string;
115
+ // Все параметры прошли валидацию - выполняем замену подстрок.
116
+ @else {
117
+
118
+ // Поиск первого вхождения искомой подстроки в исходной строке.
119
+ // string.index() возвращает позицию первого вхождения $replaceable
120
+ // в $string или null, если подстрока не найдена.
121
+ $-index: string.index($string, $replaceable);
122
+
123
+ // Проверка: найдено ли хотя бы одно вхождение подстроки.
124
+ @if $-index {
125
+
126
+ // Рекурсивная замена всех вхождений подстроки.
127
+ // Алгоритм:
128
+ // 1. string.slice($string, 1, $-index - 1) - часть строки
129
+ // до первого вхождения заменяемой подстроки
130
+ // 2. + $replacement - добавляем строку-замену
131
+ // 3. + string-replace(string.slice($string, $-index + string.length($replaceable)), ...)
132
+ // - рекурсивный вызов функции для оставшейся части строки
133
+ // (после первого вхождения заменяемой подстроки)
134
+ //
135
+ // Рекурсия продолжается до тех пор, пока в строке
136
+ // не останется вхождений заменяемой подстроки.
137
+ @return string.slice($string, 1, $-index - 1) + $replacement + string-replace(string.slice($string, $-index + string.length($replaceable)), $replaceable, $replacement);
138
+
139
+ }
140
+
141
+ // Если подстрока не найдена, возвращаем исходную строку без изменений.
142
+ // Это базовый случай рекурсии.
143
+ @return $string;
144
+
145
+ }
68
146
 
69
147
  }
@@ -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
- @while string.slice($string, -1) == " " {
57
- $string: string.slice($string, 1, -2);
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
- @return $string;
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
- @while string.slice($string, 1, 1) == " " {
57
- $string: string.slice($string, 2);
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
- @return $string;
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
- @while string.slice($string, 1, 1) == " " {
59
- $string: string.slice($string, 2);
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
- @return $string;
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
- /// @return {Boolean} - Возвращает `true`, если светлота
128
- /// цвета больше порогового значения, и `false` в противном
129
- /// случае.
130
+ /// @throws {Error} - Выбрасывает ошибку, если в параметры передано
131
+ /// значение, не соответствующее типу `color` ($color) или
132
+ /// `number` (`$threshold`). Компиляция Sass будет остановлена
133
+ /// с ошибкой.
130
134
  @function is-color-light($color, $threshold: 50) {
131
- @return color.channel($color, "lightness", $space: hsl) > $threshold;
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 '../type-of/is-color' as type-of;
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
- @each $-item in $list {
111
+ // Проверка типа входного параметра: ожидается список или arglist.
112
+ // Функция is-list() проверяет, является ли $list валидным списком
113
+ // или arglist (специальный тип для переменного числа аргументов).
114
+ @if not is-list($list) {
109
115
 
110
- @if not type-of.is-color($-item) {
111
- @return false;
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
- @return true;
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
- @return (null != list.index($list, $value));
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
  }