@omnisass/library 0.2.0 → 2026.1.0-alpha.1

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