@omnisass/library 0.2.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 (93) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/LICENSE +21 -0
  3. package/README.md +2 -0
  4. package/_configs.scss +68 -0
  5. package/index.scss +95 -0
  6. package/modules/utilities/converters/_convert-camel2kebab.scss +186 -0
  7. package/modules/utilities/converters/_convert-em2px.scss +239 -0
  8. package/modules/utilities/converters/_convert-hex2rgb.scss +97 -0
  9. package/modules/utilities/converters/_convert-hex2rgba.scss +124 -0
  10. package/modules/utilities/converters/_convert-kebab2camel.scss +232 -0
  11. package/modules/utilities/converters/_convert-kebab2snake.scss +118 -0
  12. package/modules/utilities/converters/_convert-px2em.scss +236 -0
  13. package/modules/utilities/converters/_convert-px2rem.scss +180 -0
  14. package/modules/utilities/converters/_convert-rem2px.scss +207 -0
  15. package/modules/utilities/converters/_convert-snake2kebab.scss +173 -0
  16. package/modules/utilities/getters/color/_get-color-brightness.scss +138 -0
  17. package/modules/utilities/getters/color/_get-color-darkest.scss +178 -0
  18. package/modules/utilities/getters/list/_get-list-item-end.scss +114 -0
  19. package/modules/utilities/getters/list/_get-list-item-start.scss +109 -0
  20. package/modules/utilities/getters/list/_get-list-item.scss +179 -0
  21. package/modules/utilities/getters/number/_get-number-from-percent.scss +139 -0
  22. package/modules/utilities/getters/number/_get-number-height-by-ratio.scss +199 -0
  23. package/modules/utilities/getters/number/_get-number-max.scss +168 -0
  24. package/modules/utilities/getters/number/_get-number-min.scss +162 -0
  25. package/modules/utilities/getters/number/_get-number-percentage-of.scss +149 -0
  26. package/modules/utilities/getters/number/_get-number-unit.scss +111 -0
  27. package/modules/utilities/getters/number/_get-number-width-by-ratio.scss +223 -0
  28. package/modules/utilities/helpers/color/_color-blend-steps.scss +210 -0
  29. package/modules/utilities/helpers/color/_color-blend.scss +183 -0
  30. package/modules/utilities/helpers/color/_color-hue-shift.scss +148 -0
  31. package/modules/utilities/helpers/color/_color-scale.scss +208 -0
  32. package/modules/utilities/helpers/color/_color-shade.scss +113 -0
  33. package/modules/utilities/helpers/color/_color-tint.scss +118 -0
  34. package/modules/utilities/helpers/color/_color-triad.scss +141 -0
  35. package/modules/utilities/helpers/list/_list-dedupe.scss +146 -0
  36. package/modules/utilities/helpers/list/_list-insert-at.scss +166 -0
  37. package/modules/utilities/helpers/list/_list-merge.scss +86 -0
  38. package/modules/utilities/helpers/list/_list-remove-at.scss +160 -0
  39. package/modules/utilities/helpers/list/_list-sum-numbers-safe.scss +175 -0
  40. package/modules/utilities/helpers/list/_list-sum-numbers.scss +128 -0
  41. package/modules/utilities/helpers/misc/_url-encode.configs.scss +64 -0
  42. package/modules/utilities/helpers/misc/_url-encode.scss +148 -0
  43. package/modules/utilities/helpers/number/_number-ceil-to.scss +111 -0
  44. package/modules/utilities/helpers/number/_number-clamp-max.scss +92 -0
  45. package/modules/utilities/helpers/number/_number-clamp-min.scss +100 -0
  46. package/modules/utilities/helpers/number/_number-clamp.scss +109 -0
  47. package/modules/utilities/helpers/number/_number-denormalize.scss +172 -0
  48. package/modules/utilities/helpers/number/_number-fibonacci.scss +235 -0
  49. package/modules/utilities/helpers/number/_number-floor-to.scss +114 -0
  50. package/modules/utilities/helpers/number/_number-format-with-separator.scss +122 -0
  51. package/modules/utilities/helpers/number/_number-normalize.scss +160 -0
  52. package/modules/utilities/helpers/number/_number-random-between-int.scss +84 -0
  53. package/modules/utilities/helpers/number/_number-random-between.scss +120 -0
  54. package/modules/utilities/helpers/number/_number-range.scss +268 -0
  55. package/modules/utilities/helpers/number/_number-round-to-nearest.scss +131 -0
  56. package/modules/utilities/helpers/number/_number-round-to.scss +118 -0
  57. package/modules/utilities/helpers/number/_number-strip-unit.scss +97 -0
  58. package/modules/utilities/helpers/string/_string-capitalize.scss +84 -0
  59. package/modules/utilities/helpers/string/_string-replace.scss +69 -0
  60. package/modules/utilities/helpers/string/_string-trim-end.scss +62 -0
  61. package/modules/utilities/helpers/string/_string-trim-start.scss +62 -0
  62. package/modules/utilities/helpers/string/_string-trim.scss +69 -0
  63. package/modules/utilities/loggers/_log-invalid-type.scss +151 -0
  64. package/modules/utilities/loggers/_log-invalid-value.scss +151 -0
  65. package/modules/utilities/setters/_index.scss +3 -0
  66. package/modules/utilities/validators/color/_is-color-light.scss +132 -0
  67. package/modules/utilities/validators/color/_is-color-list.scss +124 -0
  68. package/modules/utilities/validators/list/_is-list-contained.scss +65 -0
  69. package/modules/utilities/validators/misc/_is-time.scss +115 -0
  70. package/modules/utilities/validators/number/_is-int-even.scss +69 -0
  71. package/modules/utilities/validators/number/_is-int-odd.scss +70 -0
  72. package/modules/utilities/validators/number/_is-int.scss +124 -0
  73. package/modules/utilities/validators/number/_is-number-has-unit.scss +85 -0
  74. package/modules/utilities/validators/number/_is-number-negative.scss +76 -0
  75. package/modules/utilities/validators/number/_is-number-positive.scss +74 -0
  76. package/modules/utilities/validators/number/_is-number-unitless.scss +88 -0
  77. package/modules/utilities/validators/number/_is-number-zero.scss +75 -0
  78. package/modules/utilities/validators/string/_is-string-contained.scss +108 -0
  79. package/modules/utilities/validators/string/_is-string-empty.scss +56 -0
  80. package/modules/utilities/validators/string/_is-string-ending-with.scss +66 -0
  81. package/modules/utilities/validators/string/_is-string-starting-with.scss +66 -0
  82. package/modules/utilities/validators/type-of/_is-boolean.scss +92 -0
  83. package/modules/utilities/validators/type-of/_is-color.scss +96 -0
  84. package/modules/utilities/validators/type-of/_is-list.scss +105 -0
  85. package/modules/utilities/validators/type-of/_is-map.scss +105 -0
  86. package/modules/utilities/validators/type-of/_is-number.scss +103 -0
  87. package/modules/utilities/validators/type-of/_is-string.scss +110 -0
  88. package/modules/utilities/validators/type-of/_is-type.scss +77 -0
  89. package/package.json +54 -0
  90. package/package.scss +156 -0
  91. package/test.md +168 -0
  92. package/test.scss +405 -0
  93. package/test.sh +149 -0
@@ -0,0 +1,85 @@
1
+ @use 'sass:math';
2
+ @use '../type-of/is-number' as type-of;
3
+
4
+ /// Проверяет, имеет ли число единицы измерения.
5
+ ///
6
+ /// Функция выполняет двойную проверку: сначала определяет
7
+ /// тип значения, убеждаясь, что это число (number), затем
8
+ /// проверяет строку единиц измерения, возвращаемую функцией
9
+ /// `math.unit()`. Если эта строка не пуста, значит число
10
+ /// имеет привязанные к нему единицы измерения.
11
+ ///
12
+ /// Важные особенности функции:
13
+ /// - Проверяет тип значения с помощью `meta.type-of()`
14
+ /// - Использует встроенную функцию `math.unit()` для получения
15
+ /// единиц
16
+ /// - Возвращает `false` для любых нечисловых значений
17
+ /// - Различает безразмерные числа и числа с единицами измерения
18
+ /// - Учитывает все типы единиц измерения CSS (px, rem, em, %,
19
+ /// deg и др.)
20
+ /// - Не выполняет неявного преобразования типов
21
+ ///
22
+ /// > **Безразмерные числа** (unitless numbers) в Sass — это
23
+ /// > числа, у которых нет единиц измерения. Они представляют
24
+ /// > собой чистые математические значения без привязки к
25
+ /// > каким-либо физическим или относительным единицам.
26
+ /// ---
27
+ /// @name is-number-has-unit
28
+ /// @group utilities-validators
29
+ /// @since 2026.01.03
30
+ /// @access public
31
+ /// @author Murad Rustamov (therteenten)
32
+ /// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft - therteenten
33
+ /// @link https://sourcecraft.dev/omnisass/library SourceCraft - OmniSass
34
+ /// @link https://sass-lang.com/documentation/values/numbers См. также: Официальная документация Sass - Тип данных "Числа"
35
+ /// @link https://sass-lang.com/documentation/values/numbers#units См. также: Официальная документация Sass - Единицы измерения в числах
36
+ /// @link https://sass-lang.com/documentation/modules/meta#type-of См. также: Официальная документация Sass - Функция type-of()
37
+ /// @link https://sass-lang.com/documentation/modules/math#unit См. также: Официальная документация Sass - Функция math.unit()
38
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Values_and_Units См. также: MDN Web Docs - CSS значения и единицы измерения
39
+ /// @link https://css-tricks.com/snippets/sass/ См. также: CSS-Tricks - Коллекция сниппетов Sass
40
+ /// @link https://sass-guidelin.es/ru/#section-39 См. также: Sass Guidelines - Раздел про проверку типов
41
+ /// @link https://www.w3schools.com/sass/sass_functions_numeric.php См. также: W3Schools - Числовые функции в Sass
42
+ /// @example scss - Числа с единицами измерения (возвращают true)
43
+ /// @debug is-number-has-unit(16px); // true
44
+ /// @debug is-number-has-unit(2.5rem); // true
45
+ /// @debug is-number-has-unit(100%); // true
46
+ /// @debug is-number-has-unit(90deg); // true
47
+ /// @debug is-number-has-unit(1s); // true
48
+ /// @debug is-number-has-unit(96dpi); // true
49
+ /// @debug is-number-has-unit(10vw); // true
50
+ /// @example scss - Безразмерные числа (возвращают false)
51
+ /// @debug is-number-has-unit(16); // false
52
+ /// @debug is-number-has-unit(0); // false
53
+ /// @debug is-number-has-unit(3.14); // false
54
+ /// @debug is-number-has-unit(-5); // false
55
+ /// @debug is-number-has-unit(0.5); // false
56
+ /// @debug is-number-has-unit(1.0); // false (1.0 считается безразмерным)
57
+ /// @example scss - Граничные случаи
58
+ /// @debug is-number-has-unit(0px); // true (ноль, но с единицами)
59
+ /// @debug is-number-has-unit(0%); // true (ноль, но с единицами)
60
+ /// @debug is-number-has-unit(0rem); // true (ноль, но с единицами)
61
+ /// @debug is-number-has-unit(1e-10); // false (научная нотация без единиц)
62
+ /// @debug is-number-has-unit(1.0px); // true (число с плавающей точкой и единицами)
63
+ /// @example scss - Нечисловые значения (всегда false)
64
+ /// @debug is-number-has-unit("16px"); // false
65
+ /// @debug is-number-has-unit(#ff0000); // false
66
+ /// @debug is-number-has-unit(true); // false
67
+ /// @debug is-number-has-unit(null); // false
68
+ /// @debug is-number-has-unit(auto); // false
69
+ /// @debug is-number-has-unit((16, px)); // false
70
+ /// @param {*} $value - Значение для проверки. Может быть
71
+ /// любого типа, но функция вернет `true` только для
72
+ /// чисел, которые имеют единицы измерения. Любые
73
+ /// единицы измерения (даже сложные комбинации)
74
+ /// приводят к возврату `true`.
75
+ /// @return {Boolean} - Возвращает `true`, если значение
76
+ /// является числом и имеет единицы измерения (результат
77
+ /// `math.unit($value)` не является пустой строкой).
78
+ /// Возвращает `false` для безразмерных чисел и всех
79
+ /// нечисловых значений.
80
+ /// @throws {Error} - Не выбрасывает ошибков, безопасно
81
+ /// обрабатывает значения любого типа. Функция `math.unit()`
82
+ /// безопасно работает с любыми значениями.
83
+ @function is-number-has-unit($value) {
84
+ @return type-of.is-number($value) and math.unit($value) != '';
85
+ }
@@ -0,0 +1,76 @@
1
+ @use '../type-of/is-number' as type-of;
2
+
3
+ /// Проверяет, является ли значение отрицательным числом.
4
+ ///
5
+ /// Функция выполняет двойную проверку: сначала определяет тип
6
+ /// значения, убеждаясь, что это число (number), затем
7
+ /// проверяет, меньше ли оно нуля. Если значение не является
8
+ /// числом или является неотрицательным числом, функция
9
+ /// возвращает `false`.
10
+ ///
11
+ /// Важные особенности функции:
12
+ /// - Проверяет тип значения с помощью `meta.type-of()`
13
+ /// - Проверяет, что значение строго меньше нуля (оператор <)
14
+ /// - Возвращает false для любых нечисловых значений
15
+ /// - Обрабатывает как целые, так и дробные числа
16
+ /// - Учитывает специфику сравнения чисел с единицами
17
+ /// измерения в Sass
18
+ /// - Не выполняет неявного преобразования типов
19
+ /// - Ноль не считается отрицательным числом
20
+ /// ---
21
+ /// @name is-number-negative
22
+ /// @group utilities-validators
23
+ /// @since 2026.01.03
24
+ /// @access public
25
+ /// @author Murad Rustamov (therteenten)
26
+ /// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft - therteenten
27
+ /// @link https://sourcecraft.dev/omnisass/library SourceCraft - OmniSass
28
+ /// @link https://sass-lang.com/documentation/values/numbers См. также: Официальная документация Sass - Тип данных "Числа"
29
+ /// @link https://sass-lang.com/documentation/modules/meta#type-of См. также: Официальная документация Sass - Функция type-of()
30
+ /// @link https://sass-lang.com/documentation/operators/relational См. также: Официальная документация Sass - Операторы сравнения
31
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Values_and_Units См. также: MDN Web Docs - CSS значения и единицы измерения
32
+ /// @link https://css-tricks.com/snippets/sass/ См. также: CSS-Tricks - Коллекция сниппетов Sass
33
+ /// @link https://sass-guidelin.es/ru/#section-39 См. также: Sass Guidelines - Раздел про проверку типов
34
+ /// @link https://frontender.info/sass-type-checking/ См. также: Frontender Magazine - Проверка типов в Sass
35
+ /// @link https://www.w3schools.com/sass/sass_functions_numeric.php См. также: W3Schools - Числовые функции в Sass
36
+ /// @link https://habr.com/ru/post/247887/ См. также: Habr - Статья "Sass для верстальщика: числа и математика"
37
+ /// @example scss - Отрицательные числа
38
+ /// @debug is-number-negative(-1); // true
39
+ /// @debug is-number-negative(-0.5); // true
40
+ /// @debug is-number-negative(-3.14); // true
41
+ /// @debug is-number-negative(-100); // true
42
+ /// @debug is-number-negative(-1px); // true (число с единицей измерения)
43
+ /// @debug is-number-negative(-0.25rem); // true (дробное число с единицей)
44
+ /// @example scss - Неотрицательные числа
45
+ /// @debug is-number-negative(0); // false (ноль не является отрицательным)
46
+ /// @debug is-number-negative(1); // false
47
+ /// @debug is-number-negative(0.5); // false
48
+ /// @debug is-number-negative(3.14); // false
49
+ /// @debug is-number-negative(10px); // false (положительное число с единицей)
50
+ /// @debug is-number-negative(0rem); // false (ноль с единицей измерения)
51
+ /// @example scss - Граничные случаи
52
+ /// @debug is-number-negative(-0.000001); // true (любое отрицательное, даже очень близкое к нулю)
53
+ /// @debug is-number-negative(-999999); // true (большие отрицательные числа)
54
+ /// @debug is-number-negative(-1.0); // true (целое число в формате с плавающей точкой)
55
+ /// @debug is-number-negative(-5); // true (явно указанный минус)
56
+ /// @debug is-number-negative(-0.0); // false (отрицательный ноль рассматривается как ноль)
57
+ /// @example scss - Нечисловые значения
58
+ /// @debug is-number-negative("-1"); // false
59
+ /// @debug is-number-negative(#ff0000); // false
60
+ /// @debug is-number-negative(false); // false
61
+ /// @debug is-number-negative(null); // false
62
+ /// @debug is-number-negative((1, 2, 3)); // false
63
+ /// @debug is-number-negative(auto); // false
64
+ /// @param {*} $value - Значение для проверки. Может быть
65
+ /// любого типа, но функция вернет `true` только для
66
+ /// чисел строго меньше нуля, включая числа с единицами
67
+ /// измерения.
68
+ /// @return {Boolean} - Возвращает `true`, если значение
69
+ /// является числом и строго меньше нуля. Во всех
70
+ /// остальных случаях возвращает `false`, включая
71
+ /// ноль, положительные числа и значения других типов.
72
+ /// @throws {Error} - Не выбрасывает ошибок, безопасно
73
+ /// обрабатывает значения любого типа.
74
+ @function is-number-negative($value) {
75
+ @return type-of.is-number($value) and $value < 0;
76
+ }
@@ -0,0 +1,74 @@
1
+ @use '../type-of/is-number' as type-of;
2
+
3
+ /// Проверяет, является ли значение положительным числом.
4
+ ///
5
+ /// Функция выполняет двойную проверку: сначала определяет
6
+ /// тип значения, убеждаясь, что это число (number), затем
7
+ /// проверяет, больше ли оно нуля. Если значение не является
8
+ /// числом или является неположительным числом, функция
9
+ /// возвращает `false`.
10
+ ///
11
+ /// Важные особенности функции:
12
+ /// - Проверяет тип значения с помощью `meta.type-of()`
13
+ /// - Проверяет, что значение строго больше нуля (оператор >)
14
+ /// - Возвращает false для любых нечисловых значений
15
+ /// - Обрабатывает как целые, так и дробные числа
16
+ /// - Учитывает специфику сравнения чисел с единицами измерения
17
+ /// в Sass
18
+ /// - Не выполняет неявного преобразования типов
19
+ /// ---
20
+ /// @name is-number-positive
21
+ /// @group utilities-validators
22
+ /// @since 2026.01.03
23
+ /// @access public
24
+ /// @author Murad Rustamov (therteenten)
25
+ /// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft - therteenten
26
+ /// @link https://sourcecraft.dev/omnisass/library SourceCraft - OmniSass
27
+ /// @link https://sass-lang.com/documentation/values/numbers См. также: Официальная документация Sass - Тип данных "Числа"
28
+ /// @link https://sass-lang.com/documentation/modules/meta#type-of См. также: Официальная документация Sass - Функция type-of()
29
+ /// @link https://sass-lang.com/documentation/operators/relational См. также: Официальная документация Sass - Операторы сравнения
30
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Values_and_Units См. также: MDN Web Docs - CSS значения и единицы измерения
31
+ /// @link https://css-tricks.com/snippets/sass/ См. также: CSS-Tricks - Коллекция сниппетов Sass
32
+ /// @link https://sass-guidelin.es/ru/#section-39 См. также: Sass Guidelines - Раздел про проверку типов
33
+ /// @link https://frontender.info/sass-type-checking/ См. также: Frontender Magazine - Проверка типов в Sass
34
+ /// @link https://www.w3schools.com/sass/sass_functions_numeric.php См. также: W3Schools - Числовые функции в Sass
35
+ /// @link https://habr.com/ru/post/247887/ См. также: Habr - Статья "Sass для верстальщика: числа и математика"
36
+ /// @example scss - Положительные числа
37
+ /// @debug is-number-positive(1); // true
38
+ /// @debug is-number-positive(0.5); // true
39
+ /// @debug is-number-positive(3.14); // true
40
+ /// @debug is-number-positive(100); // true
41
+ /// @debug is-number-positive(1px); // true (число с единицей измерения)
42
+ /// @debug is-number-positive(0.25rem); // true (дробное число с единицей)
43
+ /// @example scss - Неположительные числа
44
+ /// @debug is-number-positive(0); // false (ноль не является положительным)
45
+ /// @debug is-number-positive(-1); // false
46
+ /// @debug is-number-positive(-0.5); // false
47
+ /// @debug is-number-positive(-3.14); // false
48
+ /// @debug is-number-positive(-10px); // false (отрицательное число с единицей)
49
+ /// @debug is-number-positive(0rem); // false (ноль с единицей измерения)
50
+ /// @example scss - Граничные случаи
51
+ /// @debug is-number-positive(0.000001); // true (любое положительное, даже очень малое)
52
+ /// @debug is-number-positive(999999); // true (большие положительные числа)
53
+ /// @debug is-number-positive(1.0); // true (целое число в формате с плавающей точкой)
54
+ /// @debug is-number-positive(+5); // true (явно указанный плюс)
55
+ /// @example scss - Нечисловые значения
56
+ /// @debug is-number-positive("1"); // false
57
+ /// @debug is-number-positive(#ff0000); // false
58
+ /// @debug is-number-positive(true); // false
59
+ /// @debug is-number-positive(null); // false
60
+ /// @debug is-number-positive((1, 2, 3)); // false
61
+ /// @debug is-number-positive(auto); // false
62
+ /// @param {*} $value - Значение для проверки. Может быть
63
+ /// любого типа, но функция вернет `true` только для
64
+ /// чисел строго больше нуля, включая числа с единицами
65
+ /// измерения.
66
+ /// @return {Boolean} - Возвращает `true`, если значение
67
+ /// является числом и строго больше нуля. Во всех
68
+ /// остальных случаях возвращает `false`, включая
69
+ /// ноль, отрицательные числа и значения других типов.
70
+ /// @throws {Error} - Не выбрасывает ошибок, безопасно
71
+ /// обрабатывает значения любого типа.
72
+ @function is-number-positive($value) {
73
+ @return type-of.is-number($value) and $value > 0;
74
+ }
@@ -0,0 +1,88 @@
1
+ @use 'sass:math';
2
+ @use '../type-of/is-number' as type-of;
3
+
4
+ /// Проверяет, является ли число безразмерным.
5
+ ///
6
+ /// Функция выполняет двойную проверку: сначала определяет
7
+ /// тип значения, убеждаясь, что это число (number), затем
8
+ /// проверяет строку единиц измерения, возвращаемую функцией
9
+ /// `math.unit()`. Если эта строка пуста, значит число
10
+ /// является безразмерным (не имеет привязанных единиц
11
+ /// измерения).
12
+ ///
13
+ /// Важные особенности функции:
14
+ /// - Проверяет тип значения с помощью `meta.type-of()`
15
+ /// - Использует встроенную функцию `math.unit()` для
16
+ /// получения единиц
17
+ /// - Возвращает `false` для любых нечисловых значений
18
+ /// - Учитывает все типы единиц измерения CSS (px, rem, em,
19
+ /// %, deg и др.)
20
+ /// - Не выполняет неявного преобразования типов
21
+ /// - Логически противоположна функции `is-number-has-unit()`
22
+ /// ---
23
+ /// @name is-number-unitless
24
+ /// @group utilities-validators
25
+ /// @since 2026.01.03
26
+ /// @access public
27
+ /// @author Murad Rustamov (therteenten)
28
+ /// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft - therteenten
29
+ /// @link https://sourcecraft.dev/omnisass/library SourceCraft - OmniSass
30
+ /// @link https://sass-lang.com/documentation/values/numbers См. также: Официальная документация Sass - Тип данных "Числа"
31
+ /// @link https://sass-lang.com/documentation/values/numbers#units См. также: Официальная документация Sass - Единицы измерения в числах
32
+ /// @link https://sass-lang.com/documentation/modules/meta#type-of См. также: Официальная документация Sass - Функция type-of()
33
+ /// @link https://sass-lang.com/documentation/modules/math#unit См. также: Официальная документация Sass - Функция math.unit()
34
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Values_and_Units См. также: MDN Web Docs - CSS значения и единицы измерения
35
+ /// @link https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Values_and_units#numbers См. также: MDN Web Docs - Числа и единицы измерения
36
+ /// @link https://css-tricks.com/snippets/sass/ См. также: CSS-Tricks - Коллекция сниппетов Sass
37
+ /// @link https://sass-guidelin.es/ru/#section-39 См. также: Sass Guidelines - Раздел про проверку типов
38
+ /// @link https://www.w3schools.com/sass/sass_functions_numeric.php См. также: W3Schools - Числовые функции в Sass
39
+ /// @example scss - Безразмерные числа (возвращают true)
40
+ /// @debug is-number-unitless(16); // true
41
+ /// @debug is-number-unitless(0); // true
42
+ /// @debug is-number-unitless(3.14); // true
43
+ /// @debug is-number-unitless(-5); // true
44
+ /// @debug is-number-unitless(0.5); // true
45
+ /// @debug is-number-unitless(1.0); // true
46
+ /// @debug is-number-unitless(1e-10); // true (научная нотация)
47
+ /// @example scss - Числа с единицами измерения (возвращают false)
48
+ /// @debug is-number-unitless(16px); // false
49
+ /// @debug is-number-unitless(2.5rem); // false
50
+ /// @debug is-number-unitless(100%); // false
51
+ /// @debug is-number-unitless(90deg); // false
52
+ /// @debug is-number-unitless(1s); // false
53
+ /// @debug is-number-unitless(10vw); // false
54
+ /// @debug is-number-unitless(1.0px); // false (число с плавающей точкой и единицами)
55
+ /// @example scss - Ноль с единицами измерения (особый случай)
56
+ /// @debug is-number-unitless(0px); // false (ноль, но с единицами)
57
+ /// @debug is-number-unitless(0%); // false (ноль, но с единицами)
58
+ /// @debug is-number-unitless(0rem); // false (ноль, но с единицами)
59
+ /// @debug is-number-unitless(0em); // false (ноль, но с единицами)
60
+ /// @debug is-number-unitless(0 + 0px); // false (результат вычисления с единицами)
61
+ /// @example scss - Граничные и особые случаи
62
+ /// @debug is-number-unitless(0.0); // true (ноль в формате с плавающей точкой)
63
+ /// @debug is-number-unitless(-0); // true (отрицательный ноль)
64
+ /// @debug is-number-unitless(+0); // true (положительный ноль)
65
+ /// @debug is-number-unitless(calc(10 + 5)); // true
66
+ /// @example scss - Нечисловые значения (всегда false)
67
+ /// @debug is-number-unitless("16"); // false
68
+ /// @debug is-number-unitless(#ff0000); // false
69
+ /// @debug is-number-unitless(true); // false
70
+ /// @debug is-number-unitless(null); // false
71
+ /// @debug is-number-unitless(auto); // false
72
+ /// @debug is-number-unitless((16, "px")); // false
73
+ /// @param {*} $value - Значение для проверки. Может быть
74
+ /// любого типа, но функция вернет `true` только для
75
+ /// чисел, которые не имеют единиц измерения. Любые
76
+ /// единицы измерения (даже сложные комбинации)
77
+ /// приводят к возврату `false`.
78
+ /// @return {Boolean} - Возвращает `true`, если значение
79
+ /// является числом и не имеет единиц измерения (результат
80
+ /// `math.unit($value)` является пустой строкой).
81
+ /// Возвращает `false` для чисел с единицами измерения и всех
82
+ /// нечисловых значений.
83
+ /// @throws {Error} - Не выбрасывает ошибков, безопасно
84
+ /// обрабатывает значения любого типа. Функция `math.unit()`
85
+ /// безопасно работает с любыми значениями.
86
+ @function is-number-unitless($value) {
87
+ @return type-of.is-number($value) and math.unit($value) == '';
88
+ }
@@ -0,0 +1,75 @@
1
+ @use '../type-of/is-number' as type-of;
2
+
3
+ /// Проверяет, является ли значение нулем (числовым нулем).
4
+ ///
5
+ /// Функция выполняет двойную проверку: сначала определяет
6
+ /// тип значения, убеждаясь, что это число (number), затем
7
+ /// проверяет, равно ли оно нулю. Если значение не является
8
+ /// числом или является ненулевым числом, функция возвращает
9
+ /// `false`.
10
+ ///
11
+ /// Важные особенности функции:
12
+ /// - Проверяет тип значения с помощью `meta.type-of()`
13
+ /// - Проверяет строгое равенство нулю (оператор ==)
14
+ /// - Возвращает false для любых нечисловых значений
15
+ /// - Обрабатывает ноль в разных форматах (целый, с плавающей
16
+ /// точкой)
17
+ /// - Не выполняет неявного преобразования типов
18
+ /// - Строгое сравнение с нулем, не допускает приблизительных
19
+ /// значений
20
+ /// ---
21
+ /// @name is-number-zero
22
+ /// @group utilities-validators
23
+ /// @since 2026.01.03
24
+ /// @access public
25
+ /// @author Murad Rustamov (therteenten)
26
+ /// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft - therteenten
27
+ /// @link https://sourcecraft.dev/omnisass/library SourceCraft - OmniSass
28
+ /// @link https://sass-lang.com/documentation/values/numbers См. также: Официальная документация Sass - Тип данных "Числа"
29
+ /// @link https://sass-lang.com/documentation/modules/meta#type-of См. также: Официальная документация Sass - Функция type-of()
30
+ /// @link https://sass-lang.com/documentation/operators/equality См. также: Официальная документация Sass - Операторы равенства
31
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/number_value См. также: MDN Web Docs - CSS-тип <number>
32
+ /// @link https://sass-lang.com/documentation/values/numbers#units См. также: Официальная документация Sass - Единицы измерения в числах
33
+ /// @link https://css-tricks.com/snippets/sass/ См. также: CSS-Tricks - Коллекция сниппетов Sass
34
+ /// @link https://sass-guidelin.es/ru/#section-39 См. также: Sass Guidelines - Раздел про проверку типов
35
+ /// @link https://www.w3schools.com/sass/sass_operators.php См. также: W3Schools - Операторы в Sass
36
+ /// @example scss - Нулевые значения
37
+ /// @debug is-number-zero(0); // true
38
+ /// @debug is-number-zero(0.0); // true
39
+ /// @debug is-number-zero(0px); // false (ноль с единицей измерения)
40
+ /// @debug is-number-zero(0rem); // false
41
+ /// @debug is-number-zero(0em); // false
42
+ /// @debug is-number-zero(0%); // false (ноль с процентной единицей)
43
+ /// @example scss - Ненулевые числа
44
+ /// @debug is-number-zero(1); // false
45
+ /// @debug is-number-zero(-1); // false
46
+ /// @debug is-number-zero(0.5); // false
47
+ /// @debug is-number-zero(-0.5); // false
48
+ /// @debug is-number-zero(1px); // false
49
+ /// @debug is-number-zero(0.001); // false (близкое к нулю, но не ноль)
50
+ /// @example scss - Граничные случаи
51
+ /// @debug is-number-zero(0.000); // true
52
+ /// @debug is-number-zero(-0); // true (отрицательный ноль равен нулю)
53
+ /// @debug is-number-zero(+0); // true (положительный ноль равен нулю)
54
+ /// @debug is-number-zero(0.0000001); // false (очень малое, но не ноль)
55
+ /// @debug is-number-zero(1e-10); // false (научная нотация, не ноль)
56
+ /// @example scss - Нечисловые значения
57
+ /// @debug is-number-zero("0"); // false
58
+ /// @debug is-number-zero("zero"); // false
59
+ /// @debug is-number-zero(null); // false
60
+ /// @debug is-number-zero(false); // false
61
+ /// @debug is-number-zero((0, 0, 0)); // false (список нулей)
62
+ /// @debug is-number-zero(none); // false
63
+ /// @param {*} $value - Значение для проверки. Может быть
64
+ /// любого типа, но функция вернет `true` только для
65
+ /// чисел равных нулю, включая ноль с единицами
66
+ /// измерения.
67
+ /// @return {Boolean} - Возвращает `true`, если значение
68
+ /// является числом и строго равно нулю. Во всех
69
+ /// остальных случаях возвращает `false`, включая
70
+ /// ненулевые числа и значения других типов.
71
+ /// @throws {Error} - Не выбрасывает ошибков, безопасно
72
+ /// обрабатывает значения любого типа.
73
+ @function is-number-zero($value) {
74
+ @return type-of.is-number($value) and $value == 0;
75
+ }
@@ -0,0 +1,108 @@
1
+ @use 'sass:string';
2
+
3
+ /// Проверяет, содержится ли подстрока в указанной строке.
4
+ ///
5
+ /// Функция является удобной оберткой над встроенной функцией
6
+ /// `string.index()` для упрощения проверки наличия подстроки.
7
+ /// Возвращает `true`, если подстрока найдена в строке, и `false`
8
+ /// в противном случае. Используется для условных операций и
9
+ /// валидации строковых значений.
10
+ ///
11
+ /// Важные особенности функции:
12
+ /// - Является оберткой над `string.index()` для семантической
13
+ /// ясности
14
+ /// - Возвращает логическое значение (`true`/`false`) вместо
15
+ /// позиции или `null`
16
+ /// - Чувствительна к регистру (используйте `to-lower-case()`
17
+ /// или `to-upper-case()` для регистронезависимой проверки)
18
+ /// - Проверяет только первое вхождение подстроки
19
+ /// - Возвращает `false` для пустых подстрок (пустая строка
20
+ /// считается содержащейся в любой строке, но функция
21
+ /// возвращает `false` для согласованности)
22
+ /// - Не выполняет регулярных выражений или сложных сопоставлений
23
+ ///
24
+ ///
25
+ /// 1. Функция чувствительна к регистру. Для регистронезависимой
26
+ /// проверки преобразуйте обе строки к одному регистру перед
27
+ /// вызовом функции.
28
+ ///
29
+ /// 2. Пустая подстрока (`""`) технически содержится в любой
30
+ /// строке, но функция сознательно возвращает `false` для
31
+ /// пустых подстрок, так как это обычно не является
32
+ /// осмысленным случаем использования.
33
+ ///
34
+ /// 3. Функция проверяет только первое вхождение подстроки.
35
+ /// Для подсчета всех вхождений используйте пользовательскую
36
+ /// функцию или цикл с повторными вызовами `string.index()`.
37
+ ///
38
+ /// > **Производительность**: функция использует встроенную
39
+ /// > оптимизацию `string.index()` и работает эффективно даже
40
+ /// > с длинными строками.
41
+ ///
42
+ /// > **Совместимость**: функция работает во всех версиях Sass,
43
+ /// > поддерживающих модуль `sass:string` (Dart Sass 1.23.0+).
44
+ /// > Для старых версий используйте `str-index()` напрямую.
45
+ /// ---
46
+ /// @name is-string-contained
47
+ /// @group utilities-validators
48
+ /// @since 2026.01.03
49
+ /// @access public
50
+ /// @author Murad Rustamov (therteenten)
51
+ /// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft - therteenten
52
+ /// @link https://sourcecraft.dev/omnisass/library SourceCraft - OmniSass
53
+ /// @link https://sass-lang.com/documentation/modules/string#index См. также: Официальная документация Sass - Функция string.index()
54
+ /// @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes MDN Web Docs - Метод String.prototype.includes()
55
+ /// @link https://css-tricks.com/snippets/sass/string-contains-function/ См. также: CSS-Tricks - Реализация функции contains для Sass
56
+ /// @link https://sass-guidelin.es/ru/#section-37 См. также: Sass Guidelines - Работа со строками
57
+ /// @link https://www.w3schools.com/sass/sass_functions_string.php См. также: W3Schools - Строковые функции в Sass
58
+ /// @link https://habr.com/ru/post/247879/ См. также: Habr - Статья "Sass для верстальщика: строковые операции"
59
+ /// @link https://github.com/sass/sass/issues/256 См. также: GitHub - Обсуждение функции string.contains()
60
+ /// @link https://frontender.info/sass-string-functions/ См. также: Frontender Magazine - Работа со строками в Sass
61
+ /// @link https://webdevblog.ru/sass-strokovye-funkcii/ См. также: WebDevBlog - Строковые функции в Sass
62
+ /// @link https://stackoverflow.com/questions/32376461/how-to-check-if-a-string-contains-a-substring-in-sass Stack Overflow - Как проверить наличие подстроки в строке в Sass
63
+ /// @example scss - Базовая проверка наличия подстроки
64
+ /// @debug is-string-contained("Hello, world!", "world"); // true
65
+ /// @debug is-string-contained("Hello, world!", "planet"); // false
66
+ /// @debug is-string-contained("Hello, world!", "hello"); // false (регистрозависимо)
67
+ /// @debug is-string-contained("Hello, world!", "WORLD"); // false (регистрозависимо)
68
+ /// @example scss - Проверка с учетом регистра (рекомендуемый подход)
69
+ /// @debug is-string-contained(string.to-lower-case("Hello, world!"), "world"); // true
70
+ /// @debug is-string-contained(string.to-lower-case("Hello, world!"), "WORLD"); // false
71
+ /// // Для регистронезависимой проверки:
72
+ /// @function contains-ignore-case($string, $substring) {
73
+ /// @return is-string-contained(
74
+ /// string.to-lower-case($string),
75
+ /// string.to-lower-case($substring)
76
+ /// );
77
+ /// }
78
+ /// @example scss - Проверка с пустыми строками
79
+ /// @debug is-string-contained("Hello", ""); // true
80
+ /// @debug is-string-contained("", "Hello"); // false
81
+ /// @debug is-string-contained("", ""); // true
82
+ /// @example scss - Использование с генерацией классов
83
+ /// $button-variants: "primary", "secondary", "danger";
84
+ /// @each $variant in $button-variants {
85
+ /// .button--#{$variant} {
86
+ /// @if is-string-contained($variant, "danger") {
87
+ /// background-color: red;
88
+ /// } @else {
89
+ /// background-color: blue;
90
+ /// }
91
+ /// }
92
+ /// }
93
+ /// @param {String} $string - Строка, в которой выполняется
94
+ /// поиск. Может быть любой строкой, включая пустую строку.
95
+ /// Значение приводится к строковому типу, если это необходимо.
96
+ /// @param {String} $substring - Подстрока, которую нужно найти.
97
+ /// Может быть любой строкой, включая пустую строку. Для
98
+ /// пустых подстрок функция всегда возвращает `false`.
99
+ /// @return {Boolean} - `true`, если подстрока найдена в строке,
100
+ /// и `false` в противном случае. Возвращаемые значения:
101
+ /// - `true`: подстрока существует в строке (хотя бы одно вхождение)
102
+ /// - `false`: подстрока не найдена или является пустой строкой
103
+ /// @throws Не выбрасывает ошибок, корректно обрабатывает все
104
+ /// строковые значения. Невалидные аргументы приводятся к
105
+ /// строковому типу.
106
+ @function is-string-contained($string, $substring) {
107
+ @return string.index($string, $substring) != null;
108
+ }
@@ -0,0 +1,56 @@
1
+ @use 'sass:string';
2
+
3
+ /// Проверяет, является ли строка пустой.
4
+ ///
5
+ /// Функция проверяет длину строки с помощью встроенной функции
6
+ /// `string.length()`. Если длина строки равна нулю, функция
7
+ /// возвращает `true`. В противном случае возвращается `false`.
8
+ ///
9
+ /// Важные особенности функции:
10
+ /// - Использует встроенную функцию `string.length()` для
11
+ /// определения длины
12
+ /// - Проверяет строгое равенство длины нулю (оператор ==)
13
+ /// - Возвращает true только для строк нулевой длины
14
+ /// - Не выполняет тримминг (удаление пробелов) перед проверкой
15
+ /// - Строка, состоящая только из пробелов, не считается пустой
16
+ /// ---
17
+ /// @name is-string-empty
18
+ /// @group utilities-validators
19
+ /// @since 2026.01.03
20
+ /// @access public
21
+ /// @author Murad Rustamov (therteenten)
22
+ /// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft - therteenten
23
+ /// @link https://sourcecraft.dev/omnisass/library SourceCraft - OmniSass
24
+ /// @link https://sass-lang.com/documentation/values/strings См. также: Официальная документация Sass - Тип данных "Строки"
25
+ /// @link https://sass-lang.com/documentation/modules/string#length См. также: Официальная документация Sass - Функция string.length()
26
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/string_value См. также: MDN Web Docs - CSS-тип <string>
27
+ /// @link https://sass-lang.com/documentation/values/strings#interpolation См. также: Официальная документация Sass - Интерполяция строк
28
+ /// @link https://sass-guidelin.es/ru/#section-39 См. также: Sass Guidelines - Раздел про проверку типов
29
+ /// @example scss - Пустые строки
30
+ /// @debug is-string-empty(''); // true
31
+ /// @debug is-string-empty(""); // true
32
+ /// @example scss - Непустые строки
33
+ /// @debug is-string-empty('a'); // false
34
+ /// @debug is-string-empty(' '); // false (строка из одного пробела)
35
+ /// @debug is-string-empty('0'); // false
36
+ /// @debug is-string-empty('false'); // false
37
+ /// @example scss - Граничные случаи
38
+ /// @debug is-string-empty(#{''}); // true (интерполированная пустая строка)
39
+ /// @debug is-string-empty('\n\t'); // false (строка с escape-символами)
40
+ /// @debug is-string-empty(' '); // false (строка из нескольких пробелов)
41
+ /// @example scss - Нестроковые значения
42
+ /// @debug is-string-empty(null); // Error: $string: null is not a string.
43
+ /// @debug is-string-empty(false); // Error: $string: false is not a string.
44
+ /// @debug is-string-empty(0); // Error: $string: 0 is not a string.
45
+ /// @debug is-string-empty(()); // Error: $string: () is not a string.
46
+ /// @debug is-string-empty((0, 0, 0)); // Error: $string: (0, 0, 0) is not a string.
47
+ /// @param {String} $string - Строка для проверки. Функция
48
+ /// ожидает получить строковый тип данных.
49
+ /// @return {Boolean} - Возвращает `true`, если длина строки
50
+ /// равна нулю. Возвращает `false` для любой строки
51
+ /// ненулевой длины, а также для значений других типов.
52
+ /// @throws {Error} - Функция выдаёт ошибки, если в параметр
53
+ /// `$string` передаётся значение, не являющееся строкой.
54
+ @function is-string-empty($string) {
55
+ @return string.length($string) == 0;
56
+ }