@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,124 @@
1
+ @use '../type-of/is-color' as type-of;
2
+
3
+ /// Проверяет, что все элементы в списке являются цветами.
4
+ ///
5
+ /// Функция проходит по всем элементам списка и проверяет тип
6
+ /// каждого элемента. Если все элементы имеют тип `color`,
7
+ /// функция возвращает `true`. Если хотя бы один элемент не
8
+ /// является цветом, функция немедленно возвращает `false`.
9
+ ///
10
+ /// Важные особенности функции:
11
+ /// - Проверяет тип каждого элемента с помощью `meta.type-of()`,
12
+ /// обёрткой которого является `is-color()`
13
+ /// - Возвращает `false` при первой же найденной нецветовой
14
+ /// записи
15
+ /// - Возвращает `true` для пустого списка (vacuous truth)
16
+ /// - Не выполняет дополнительных проверок формата цвета
17
+ /// - Игнорирует вложенные списки и другие структуры
18
+ /// - Использует локальные переменные с префиксом `$-` для
19
+ /// избежания конфликтов
20
+ /// ---
21
+ /// @name is-color-list
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/modules/meta#type-of См. также: Официальная документация Sass - Функция meta.type-of()
29
+ /// @link https://sass-lang.com/documentation/values/colors См. также: Официальная документация Sass - Тип данных "Цвета"
30
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/color_value 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_color.php См. также: W3Schools - Функции для работы с цветами в Sass
35
+ /// @link https://habr.com/ru/post/247879/ См. также: Habr - Статья "Sass для верстальщика: проверки и валидация"
36
+ /// @example scss - Все элементы являются цветами
37
+ /// @debug is-color-list((#ff0000, #00ff00, #0000ff)); // true
38
+ /// @debug is-color-list((red, blue, green)); // true
39
+ /// @debug is-color-list((rgb(255, 0, 0), hsl(120, 100%, 50%))); // true
40
+ /// @debug is-color-list(()); // true (пустой список)
41
+ /// @example scss - Смешанные типы данных
42
+ /// @debug is-color-list((#ff0000, 10px, #0000ff)); // false
43
+ /// @debug is-color-list(("red", "blue", "green")); // false
44
+ /// @debug is-color-list((#fff, null, #000)); // false
45
+ /// @debug is-color-list((true, false, #ff0000)); // false
46
+ /// @example scss - Разные форматы цветов
47
+ /// @debug is-color-list((#f00, #ff0000, rgb(255, 0, 0))); // true
48
+ /// @debug is-color-list((hsl(0, 100%, 50%), rgba(255, 0, 0, 0.5))); // true
49
+ /// @debug is-color-list((currentColor, transparent)); // false (?)
50
+ /// @example scss - Практическое использование в миксинах
51
+ /// @use 'sass:list';
52
+ ///
53
+ /// @mixin set-colors($colors) {
54
+ /// @if not is-color-list($colors) {
55
+ /// @error "Параметр $colors должен содержать только цвета";
56
+ /// }
57
+ /// color: list.nth($colors, 1);
58
+ /// background-color: list.nth($colors, 2);
59
+ /// border-color: list.nth($colors, 3);
60
+ /// }
61
+ /// // Корректно:
62
+ /// .test {
63
+ /// @include set-colors((#ff0000, #00ff00, #0000ff));
64
+ /// }
65
+ /// // Ошибка:
66
+ /// // @include set-colors((#ff0000, 10px, #0000ff));
67
+ /// @example css - Результат
68
+ /// .test {
69
+ /// color: #ff0000;
70
+ /// background-color: #00ff00;
71
+ /// border-color: #0000ff;
72
+ /// }
73
+ /// @example scss - Практическое использование в функциях
74
+ /// @use 'sass:math';
75
+ /// @use 'sass:color';
76
+ ///
77
+ /// @function calculate-color-brightness($colors) {
78
+ /// @if not is-color-list($colors) {
79
+ /// @return null;
80
+ /// }
81
+ /// $total: 0;
82
+ /// @each $color in $colors {
83
+ /// $total: $total + color.channel($color, "lightness", $space: hsl);
84
+ /// }
85
+ /// @return math.div($total, list.length($colors));
86
+ /// }
87
+ /// @debug calculate-color-brightness((#000, #fff)); // 50
88
+ /// @debug calculate-color-brightness((#000, 10px)); // null
89
+ /// @example scss - Валидация палитры цветов
90
+ /// @use 'sass:map';
91
+ ///
92
+ /// $palette: (primary: #3498db, secondary: #2ecc71, accent: #e74c3c);
93
+ /// @debug is-color-list(map.values($palette)); // true
94
+ ///
95
+ /// $invalid-palette: (primary: #3498db, size: 16px, accent: #e74c3c);
96
+ /// @debug is-color-list(map.values($invalid-palette)); // false
97
+ /// @param {List} $list - Список значений, который может
98
+ /// содержать элементы разных типов. Функция проверит
99
+ /// каждый элемент на соответствие типу `color`.
100
+ /// @return {Boolean} - Возвращает `true`, если все элементы
101
+ /// в списке являются цветами. Возвращает `false`, если
102
+ /// хотя бы один элемент не является цветом. Для пустого
103
+ /// списка возвращает `true`.
104
+ /// @throws {Error} - Не выбрасывает ошибок, безопасно
105
+ /// обрабатывает любые типы данных.
106
+ @function is-color-list($list) {
107
+
108
+ @each $-item in $list {
109
+
110
+ @if not type-of.is-color($-item) {
111
+ @return false;
112
+ }
113
+
114
+ }
115
+
116
+ @return true;
117
+
118
+ }
119
+
120
+
121
+
122
+
123
+
124
+
@@ -0,0 +1,65 @@
1
+ @use 'sass:list';
2
+
3
+ /// Проверяет, содержится ли значение в указанном списке.
4
+ ///
5
+ /// Функция проверяет наличие заданного значения в переданном
6
+ /// списке. Использует функцию `list.index()` для поиска
7
+ /// значения и преобразует результат в булево значение
8
+ /// (`true` если найдено, `false` если нет).
9
+ ///
10
+ /// Функция преобразует результат `list.index()` в
11
+ /// булево значение:
12
+ /// - `list.index()` возвращает `null`, если значение не
13
+ /// найдено
14
+ /// - `null != list.index(...)` возвращает `false` для `null`
15
+ /// и `true` для любого индекса
16
+ ///
17
+ /// Это стандартный паттерн для проверки наличия элемента в списке Sass.
18
+ /// ---
19
+ /// @name is-list-contained
20
+ /// @group utilities-validators
21
+ /// @since 2026.01.03
22
+ /// @access public
23
+ /// @author Murad Rustamov (therteenten) [адаптация]
24
+ /// @author Неизвестный автор [идея не моя, но автора исходной функции не помню уже]
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/modules/list#index См. также: Официальная документация Sass - Функция list.index()
28
+ /// @link https://sass-lang.com/documentation/values/lists См. также: Официальная документация Sass - Тип данных "Списки"
29
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-child См. также: MDN Web Docs - Псевдокласс :nth-child
30
+ /// @link https://stackoverflow.com/questions/29620552/check-if-value-exists-in-list-in-sass См. также: Stack Overflow - Проверка наличия значения в списке Sass
31
+ /// @link https://css-tricks.com/snippets/sass/ См. также: CSS-Tricks - Коллекция сниппетов Sass
32
+ /// @link https://sass-guidelin.es/ru/#validation-functions См. также: Sass Guidelines - Функции валидации
33
+ /// @link https://frontender.info/sass-lists/ См. также: Frontender Magazine - Работа со списками в Sass
34
+ /// @link https://www.w3schools.com/sass/sass_functions_list.php См. также: W3Schools - Функции для работы со списками в Sass
35
+ /// @example scss - Проверка наличия цвета в палитре
36
+ /// $colors: red, blue, green, yellow;
37
+ /// @debug is-list-contained($colors, blue); // true
38
+ /// @debug is-list-contained($colors, purple); // false
39
+ /// @example scss - Проверка наличия размера в допустимых значениях
40
+ /// $sizes: small, medium, large, x-large;
41
+ /// @debug is-list-contained($sizes, medium); // true
42
+ /// @debug is-list-contained($sizes. huge); // false
43
+ /// @example scss - Проверка числовых значений
44
+ /// $numbers: 1, 2, 3, 4, 5;
45
+ /// @debug is-list-contained($numbers, 3); // true
46
+ /// @debug is-list-contained($numbers, 10); // false
47
+ /// @example scss - Использование для валидации параметров
48
+ /// @mixin set-position($position) {
49
+ /// $allowed-positions: top, right, bottom, left, center;
50
+ ///
51
+ /// @if not is-list-contained($position, $allowed-positions) {
52
+ /// @error "Недопустимая позиция: #{$position}. Используйте: #{$allowed-positions}";
53
+ /// }
54
+ ///
55
+ /// position: $position;
56
+ /// }
57
+ /// @param {*} $value - Значение для поиска в списке
58
+ /// @param {List} $list - Список, в котором выполняется поиск
59
+ /// @return {Boolean} - Возвращает `true`, если значение
60
+ /// найдено в списке, иначе возвращает `false`.
61
+ /// @throws Не выбрасывает ошибок, безопасно работает с
62
+ /// любыми списками
63
+ @function is-list-contained($list, $value) {
64
+ @return (null != list.index($list, $value));
65
+ }
@@ -0,0 +1,115 @@
1
+ @use 'sass:meta';
2
+ @use 'sass:list';
3
+ @use 'sass:math';
4
+
5
+ /// Проверяет, является ли значение корректным
6
+ /// временным значением.
7
+ ///
8
+ /// Функция проверяет тип и единицы измерения переданного
9
+ /// значения для определения, можно ли его использовать в
10
+ /// качестве значения времени. Поддерживаются значения с
11
+ /// единицами измерения секунды (s), миллисекунды (ms) и
12
+ /// часы (h), а также нулевое значение без единиц измерения (0).
13
+ /// ---
14
+ /// @name is-time
15
+ /// @group utilities-validators
16
+ /// @since 2025.12.27
17
+ /// @access public
18
+ /// @author Halil İbrahim Çakıroğlu
19
+ /// @author Murad Rustamov (therteenten) [адаптация]
20
+ /// @link https://github.com/selfishprimate GitHub - Halil İbrahim Çakıroğlu
21
+ /// @link https://github.com/selfishprimate/gerillass/blob/master/scss/utilities/_is-time.scss GitHub - Исходник
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/modules/meta#type-of См. также: Официальная документация Sass - Функция meta.type-of()
25
+ /// @link https://sass-lang.com/documentation/modules/meta См. также: Официальная документация Sass - Модуль meta
26
+ /// @link https://sass-lang.com/documentation/modules/math#unit См. также: Официальная документация Sass - Функция math.unit()
27
+ /// @link https://sass-lang.com/documentation/modules/math См. также: Официальная документация Sass - Модуль math
28
+ /// @link https://sass-lang.com/documentation/modules/list#index См. также: Официальная документация Sass - Функция list.index()
29
+ /// @link https://sass-lang.com/documentation/modules/list См. также: Официальная документация Sass - Модуль list
30
+ /// @link https://sass-lang.com/documentation/values/numbers См. также: Официальная документация Sass - Тип данных "Числа" (Numbers)
31
+ /// @link https://sass-lang.com/documentation/values/numbers#units См. также: Официальная документация Sass - Единицы измерения
32
+ /// @link https://sass-lang.com/documentation/at-rules/function См. также: Официальная документация Sass - Правило @function
33
+ /// @link https://sass-lang.com/documentation/style-rules/declarations#custom-properties См. также: Документация Sass - Пользовательские функции
34
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/time См. также: MDN Web Docs - CSS тип данных <time>
35
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Values_and_Units См. также: MDN Web Docs - CSS значения и единицы измерения
36
+ /// @link https://www.w3schools.com/sass/sass_functions_numeric.php См. также: W3Schools - Числовые функции в Sass
37
+ /// @link https://www.sass.hk/docs/ См. также: Китайская документация Sass - Полное руководство
38
+ /// @link https://sass-guidelin.es/ru/#section-39 См. также: Sass Guidelines - Раздел про проверку типов данных
39
+ /// @link https://github.com/sass/sass/blob/main/accepted/module-system.md См. также: GitHub - Документация по модульной системе Sass
40
+ /// @link https://stackoverflow.com/questions/30867526/how-to-check-the-type-of-a-variable-is-a-string-or-a-number-in-scss См. также: Stack Overflow - Как проверить тип переменной в Sass
41
+ /// @link https://stackoverflow.com/questions/12528457/determine-type-of-a-variable-in-sass См. также: Stack Overflow - Определение типа переменной в Sass
42
+ /// @link https://css-tricks.com/snippets/sass/ См. также: CSS-Tricks - Коллекция сниппетов Sass
43
+ /// @link https://web.dev/learn/css/units/ См. также: web.dev - Изучение единиц измерения в CSS
44
+ /// @link https://frontender.info/sass-numbers/ См. также: Frontender Magazine - Работа с числами в Sass
45
+ /// @link https://habr.com/ru/post/247887/ См. также: Habr - Статья "Sass для верстальщика: числа и единицы измерения"
46
+ /// @link https://www.sitepoint.com/sass-basics-operators/ См. также: SitePoint - Основы Sass: операторы
47
+ /// @link https://www.freecodecamp.org/news/sass-data-types/ См. также: freeCodeCamp - Типы данных в Sass
48
+ /// @link https://code.tutsplus.com/tutorials/understanding-sass-data-types--cms-22110 См. также: Envato Tuts+ - Понимание типов данных в Sass
49
+ /// @link https://dev.to/kathryngrayson/sass-type-checking-1p6c См. также: Dev.to - Проверка типов в Sass
50
+ /// @link https://css-live.ru/articles/uskorenie-razrabotki-s-pomoshhyu-sass.html См. также: CSS-Live - Ускорение разработки с помощью Sass
51
+ /// @link https://itchief.ru/sass/data-types См. также: itchief - Типы данных в Sass
52
+ /// @link https://htmlacademy.ru/blog/boost/tools/sass-2 См. также: HTML Academy - Sass: переменные и типы данных
53
+ /// @link https://metanit.com/web/html5/13.3.php См. также: Metanit - Типы данных в Sass
54
+ /// @link https://ru.hexlet.io/courses/sass-basics/lessons/data-types/theory_unit См. также: Hexlet - Типы данных в Sass
55
+ /// @link https://www.youtube.com/watch?v=Zz6eOVaaelI См. также: YouTube - Sass Tutorial #4 - Data Types (The Net Ninja)
56
+ /// @link https://www.youtube.com/watch?v=URtUXqOQq0k См. также: YouTube - Типы данных в Sass (на русском)
57
+ /// @link https://codelabs.developers.google.com/codelabs/cloud-sass-cli#5 См. также: Google Codelabs - Создание пользовательских функций в Sass
58
+ /// @link https://www.npmjs.com/package/sass См. также: npm - Документация пакета Dart Sass
59
+ /// @link https://marketplace.visualstudio.com/items?itemName=Syler.sass-indented См. также: VS Code Marketplace - Поддержка синтаксиса Sass
60
+ /// @link https://stylelint.io/user-guide/rules/time-min-milliseconds/ См. также: Stylelint - Правила для временных значений
61
+ /// @link https://sass-lang.com/documentation/js-api См. также: JavaScript API - Работа с Sass через JavaScript
62
+ /// @link https://sass-lang.com/documentation/cli/dart-sass См. также: CLI - Командная строка Dart Sass
63
+ /// @link https://sass-lang.com/documentation/breaking-changes/module-system См. также: Breaking Changes - Изменения в модульной системе
64
+ /// @link https://sass-lang.com/documentation/values/booleans См. также: Документация Sass - Логические значения
65
+ /// @link https://sass-lang.com/documentation/values/strings См. также: Документация Sass - Строки
66
+ /// @link https://sass-lang.com/documentation/values/colors См. также: Документация Sass - Цвета
67
+ /// @link https://sass-lang.com/documentation/values/lists См. также: Документация Sass - Списки
68
+ /// @link https://sass-lang.com/documentation/values/null См. также: Документация Sass - Значение null
69
+ /// @link https://sass-lang.com/documentation/values/maps См. также: Документация Sass - Карты
70
+ /// @link https://sass-lang.com/documentation/interpolation См. также: Документация Sass - Интерполяция
71
+ /// @link https://sass-lang.com/documentation/modules/math#abs См. также: Документация Sass - Функция math.abs()
72
+ /// @link https://sass-lang.com/documentation/modules/math#compatible См. также: Документация Sass - Функция math.compatible()
73
+ /// @link https://sass-lang.com/documentation/modules/math#unitless См. также: Документация Sass - Функция math.unitless()
74
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/transition-duration См. также: MDN Web Docs - CSS свойство transition-duration
75
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/animation-duration См. также: MDN Web Docs - CSS свойство animation-duration
76
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/transition-timing-function См. также: MDN Web Docs - CSS свойство transition-timing-function
77
+ /// @link https://www.w3.org/TR/css-values-4/#time W3C CSS Values - Спецификация типа <time>
78
+ /// @link https://www.w3.org/TR/css-values-4/#lengths W3C CSS Values - Единицы измерения длины и времени
79
+ /// @example scss - Корректные значения времени
80
+ /// @debug is-time(1s); // true
81
+ /// @debug is-time(0.5s); // true
82
+ /// @debug is-time(250ms); // true
83
+ /// @debug is-time(1.5h); // true
84
+ /// @debug is-time(0); // true
85
+ /// @example scss - Некорректные значения времени
86
+ /// @debug is-time(1px) ; // false
87
+ /// @debug is-time(1em) ; // false
88
+ /// @debug is-time(10); // false (не 0 и без единиц)
89
+ /// @debug is-time("1s"); // false (строка вместо числа)
90
+ /// @debug is-time(null); // false
91
+ /// @debug is-time(true); // false
92
+ /// @example scss - Использование в условных конструкциях
93
+ /// $duration: 1s;
94
+ ///
95
+ /// .test {
96
+ /// @if is-time($duration) {
97
+ /// transition-duration: $duration;
98
+ /// } @else {
99
+ /// @error "Некорректное значение времени: #{$duration}";
100
+ /// }
101
+ /// }
102
+ /// @param {*} $value - Значение для проверки. Может быть
103
+ /// любого типа, но функция ожидает число с соответствующими
104
+ /// единицами измерения или ноль.
105
+ /// @return {Boolean} - Возвращает `true`, если значение является
106
+ /// корректным временным значением, иначе возвращает `false`.
107
+ @function is-time($value) {
108
+ @for $i from 1 through list.length($value) {
109
+ @if (meta.type-of($value) == 'number' and list.index('ms' 's' 'h', math.unit($value)) != null) or $value == 0 {
110
+ @return true;
111
+ } @else {
112
+ @return false;
113
+ }
114
+ }
115
+ }
@@ -0,0 +1,69 @@
1
+ @use './is-int' as *;
2
+
3
+ /// Проверяет, является ли целое число четным.
4
+ ///
5
+ /// Функция выполняет двойную проверку: сначала убеждается,
6
+ /// что значение является целым числом (integer), затем
7
+ /// проверяет, делится ли оно на 2 без остатка. Если значение
8
+ /// не является целым числом, функция возвращает `false`.
9
+ ///
10
+ /// Важные особенности функции:
11
+ /// - Проверяет, что значение является целым числом (is-int())
12
+ /// - Проверяет делимость на 2 без остатка (оператор %)
13
+ /// - Возвращает false для нецелых чисел, даже если они близки
14
+ /// к четным
15
+ /// - Не выполняет автоматического округления или
16
+ /// преобразования типов
17
+ /// - Использует математический оператор модуля для проверки
18
+ /// четности
19
+ /// ---
20
+ /// @name is-int-even
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/operators/numeric#modulo См. также: Официальная документация Sass - Оператор модуля (%)
28
+ /// @link https://sass-lang.com/documentation/values/numbers См. также: Официальная документация Sass - Тип данных "Числа"
29
+ /// @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Remainder См. также: MDN Web Docs - Оператор остатка от деления
30
+ /// @link https://css-tricks.com/snippets/sass/ См. также: CSS-Tricks - Коллекция сниппетов Sass
31
+ /// @link https://sass-guidelin.es/ru/#section-39 См. также: Sass Guidelines - Раздел про проверку типов
32
+ /// @link https://frontender.info/sass-type-checking/ См. также: Frontender Magazine - Проверка типов в Sass
33
+ /// @link https://www.w3schools.com/sass/sass_functions_numeric.php См. также: W3Schools - Числовые функции в Sass
34
+ /// @link https://habr.com/ru/post/247887/ См. также: Habr - Статья "Sass для верстальщика: числа и математика"
35
+ /// @example scss - Четные целые числа
36
+ /// @debug is-int-even(0); // true
37
+ /// @debug is-int-even(2); // true
38
+ /// @debug is-int-even(10); // true
39
+ /// @debug is-int-even(-4); // true
40
+ /// @debug is-int-even(100); // true
41
+ /// @example scss - Нечетные целые числа
42
+ /// @debug is-int-even(1); // false
43
+ /// @debug is-int-even(3); // false
44
+ /// @debug is-int-even(7); // false
45
+ /// @debug is-int-even(-5); // false
46
+ /// @debug is-int-even(99); // false
47
+ /// @example scss - Нецелые числа (всегда false)
48
+ /// @debug is-int-even(2.5); // false
49
+ /// @debug is-int-even(3.14); // false
50
+ /// @debug is-int-even(10.0); // true (10.0 считается целым в Sass)
51
+ /// @debug is-int-even(2.000001); // false
52
+ /// @example scss - Нечисловые значения
53
+ /// @debug is-int-even("2"); // false
54
+ /// @debug is-int-even(#ff0000); // false
55
+ /// @debug is-int-even(true); // false
56
+ /// @debug is-int-even(null); // false
57
+ /// @debug is-int-even((1, 2, 3)); // false
58
+ /// @param {*} $value - Значение для проверки. Может быть
59
+ /// любого типа, но функция вернет `true` только для
60
+ /// целых чисел, которые делятся на 2 без остатка.
61
+ /// @return {Boolean} - Возвращает `true`, если значение
62
+ /// является целым числом и делится на 2 без остатка.
63
+ /// Во всех остальных случаях возвращает `false`,
64
+ /// включая нецелые числа и значения других типов.
65
+ /// @throws {Error} - Не выбрасывает ошибок, безопасно
66
+ /// обрабатывает значения любого типа.
67
+ @function is-int-even($value) {
68
+ @return is-int($value) and $value % 2 == 0;
69
+ }
@@ -0,0 +1,70 @@
1
+ @use './is-int' as *;
2
+
3
+ /// Проверяет, является ли целое число нечетным.
4
+ ///
5
+ /// Функция выполняет двойную проверку: сначала убеждается, что
6
+ /// значение является целым числом (integer), затем проверяет,
7
+ /// что оно не делится на 2 без остатка. Если значение не
8
+ /// является целым числом, функция возвращает `false`.
9
+ ///
10
+ /// Важные особенности функции:
11
+ /// - Проверяет, что значение является целым числом (is-int())
12
+ /// - Проверяет, что остаток от деления на 2 не равен нулю
13
+ /// (оператор %)
14
+ /// - Возвращает false для нецелых чисел, даже если они близки
15
+ /// к нечетным
16
+ /// - Не выполняет автоматического округления или
17
+ /// преобразования типов
18
+ /// - Использует математический оператор модуля для проверки
19
+ /// нечетности
20
+ /// ---
21
+ /// @name is-int-odd
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/operators/numeric#modulo См. также: Официальная документация Sass - Оператор модуля (%)
29
+ /// @link https://sass-lang.com/documentation/values/numbers См. также: Официальная документация Sass - Тип данных "Числа"
30
+ /// @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Remainder См. также: MDN Web Docs - Оператор остатка от деления
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-int-odd(1); // true
38
+ /// @debug is-int-odd(3); // true
39
+ /// @debug is-int-odd(7); // true
40
+ /// @debug is-int-odd(-5); // true
41
+ /// @debug is-int-odd(99); // true
42
+ /// @example scss - Четные целые числа
43
+ /// @debug is-int-odd(0); // false
44
+ /// @debug is-int-odd(2); // false
45
+ /// @debug is-int-odd(10); // false
46
+ /// @debug is-int-odd(-4); // false
47
+ /// @debug is-int-odd(100); // false
48
+ /// @example scss - Нецелые числа (всегда false)
49
+ /// @debug is-int-odd(1.5); // false
50
+ /// @debug is-int-odd(3.14); // false
51
+ /// @debug is-int-odd(5.0); // false (5.0 считается целым в Sass, поэтому true)
52
+ /// @debug is-int-odd(1.000001); // false
53
+ /// @example scss - Нечисловые значения
54
+ /// @debug is-int-odd("1"); // false
55
+ /// @debug is-int-odd(#ff0000); // false
56
+ /// @debug is-int-odd(false); // false
57
+ /// @debug is-int-odd(null); // false
58
+ /// @debug is-int-odd((1, 2, 3)); // false
59
+ /// @param {*} $value - Значение для проверки. Может быть
60
+ /// любого типа, но функция вернет `true` только для
61
+ /// целых чисел, которые не делятся на 2 без остатка.
62
+ /// @return {Boolean} - Возвращает `true`, если значение
63
+ /// является целым числом и не делится на 2 без остатка.
64
+ /// Во всех остальных случаях возвращает `false`,
65
+ /// включая нецелые числа и значения других типов.
66
+ /// @throws {Error} - Не выбрасывает ошибок, безопасно
67
+ /// обрабатывает значения любого типа.
68
+ @function is-int-odd($value) {
69
+ @return is-int($value) and $value % 2 != 0;
70
+ }
@@ -0,0 +1,124 @@
1
+ @use 'sass:math';
2
+ @use 'sass:meta';
3
+
4
+ /// Проверяет, является ли число целым (integer).
5
+ ///
6
+ /// Функция проверяет, что переданное значение
7
+ /// является числом и не имеет дробной части.
8
+ /// Если передано не числовое значение, функция
9
+ /// возвращает `false`.
10
+ ///
11
+ /// Полезно для валидации параметров, которые
12
+ /// должны быть целыми числами (например,
13
+ /// индексы, счётчики).
14
+ ///
15
+ /// > В исходной функции от Zsolt Pentz есть
16
+ /// > предупреждение, если проверяемое значение не
17
+ /// > число. Я переписал функцию так, чтобы она
18
+ /// > возвращала только `true` или `false`. Проверку и
19
+ /// > вывод ошибки можно написать отдельно, возможно, я
20
+ /// > это сделаю, так как это несложно.
21
+ /// > В примере 2 "Использование в условиях" показано как
22
+ /// > это реализовать.
23
+ /// ---
24
+ /// @name is-int
25
+ /// @group utilities-validators
26
+ /// @since 2026.01.03
27
+ /// @access public
28
+ /// @author Zsolt Pentz
29
+ /// @author Murad Rustamov (therteenten) [адаптация]
30
+ /// @link https://github.com/pentzzsolt GitHub - Zsolt Pentz
31
+ /// @link https://github.com/pentzzsolt/sass-recursive-map-merge GitHub - Источник функции
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/modules/meta#type-of См. также: Официальная документация Sass - Функция meta.type-of()
35
+ /// @link https://sass-lang.com/documentation/modules/meta См. также: Официальная документация Sass - Модуль meta
36
+ /// @link https://sass-lang.com/documentation/modules/math#round См. также: Официальная документация Sass - Функция math.round()
37
+ /// @link https://sass-lang.com/documentation/modules/math См. также: Официальная документация Sass - Модуль math
38
+ /// @link https://sass-lang.com/documentation/values/numbers См. также: Официальная документация Sass - Тип данных "Числа" (Numbers)
39
+ /// @link https://sass-lang.com/documentation/at-rules/function См. также: Официальная документация Sass - Правило @function
40
+ /// @link https://sass-lang.com/documentation/style-rules/declarations#custom-properties См. также: Документация Sass - Пользовательские функции
41
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/integer См. также: MDN Web Docs - CSS тип данных <integer>
42
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/number См. также: MDN Web Docs - CSS тип данных <number>
43
+ /// @link https://www.w3schools.com/sass/sass_functions_numeric.php См. также: W3Schools - Числовые функции в Sass
44
+ /// @link https://www.sass.hk/docs/ См. также: Китайская документация Sass - Полное руководство
45
+ /// @link https://sass-guidelin.es/ru/#section-39 См. также: Sass Guidelines - Раздел про проверку типов данных
46
+ /// @link https://github.com/sass/sass/blob/main/accepted/module-system.md См. также: GitHub - Документация по модульной системе Sass
47
+ /// @link https://stackoverflow.com/questions/30867526/how-to-check-the-type-of-a-variable-is-a-string-or-a-number-in-scss См. также: Stack Overflow - Как проверить тип переменной в Sass
48
+ /// @link https://stackoverflow.com/questions/53976920/how-to-check-if-a-number-is-an-integer-in-sass См. также: Stack Overflow - Как проверить, является ли число целым в Sass
49
+ /// @link https://css-tricks.com/snippets/sass/ См. также: CSS-Tricks - Коллекция сниппетов Sass
50
+ /// @link https://web.dev/learn/css/numbers/ См. также: web.dev - Изучение чисел в CSS
51
+ /// @link https://frontender.info/sass-numbers/ См. также: Frontender Magazine - Работа с числами в Sass
52
+ /// @link https://habr.com/ru/post/247887/ См. также: Habr - Статья "Sass для верстальщика: числа и математика"
53
+ /// @link https://www.sitepoint.com/sass-basics-operators/ См. также: SitePoint - Основы Sass: операторы
54
+ /// @link https://www.freecodecamp.org/news/sass-data-types/ См. также: freeCodeCamp - Типы данных в Sass
55
+ /// @link https://code.tutsplus.com/tutorials/understanding-sass-data-types--cms-22110 См. также: Envato Tuts+ - Понимание типов данных в Sass
56
+ /// @link https://dev.to/kathryngrayson/sass-type-checking-1p6c См. также: Dev.to - Проверка типов в Sass
57
+ /// @link https://css-live.ru/articles/uskorenie-razrabotki-s-pomoshhyu-sass.html См. также: CSS-Live - Ускорение разработки с помощью Sass
58
+ /// @link https://itchief.ru/sass/data-types См. также: itchief - Типы данных в Sass
59
+ /// @link https://htmlacademy.ru/blog/boost/tools/sass-2 См. также: HTML Academy - Sass: переменные и типы данных
60
+ /// @link https://metanit.com/web/html5/13.3.php См. также: Metanit - Типы данных в Sass
61
+ /// @link https://ru.hexlet.io/courses/sass-basics/lessons/data-types/theory_unit См. также: Hexlet - Типы данных в Sass
62
+ /// @link https://www.youtube.com/watch?v=Zz6eOVaaelI См. также: YouTube - Sass Tutorial #4 - Data Types (The Net Ninja)
63
+ /// @link https://www.youtube.com/watch?v=URtUXqOQq0k См. также: YouTube - Типы данных в Sass (на русском)
64
+ /// @link https://codelabs.developers.google.com/codelabs/cloud-sass-cli#5 См. также: Google Codelabs - Создание пользовательских функций в Sass
65
+ /// @link https://www.npmjs.com/package/sass См. также: npm - Документация пакета Dart Sass
66
+ /// @link https://marketplace.visualstudio.com/items?itemName=Syler.sass-indented См. также: VS Code Marketplace - Поддержка синтаксиса Sass
67
+ /// @link https://stylelint.io/user-guide/rules/number-max-precision/ См. также: Stylelint - Правила для точности чисел
68
+ /// @link https://sass-lang.com/documentation/js-api См. также: JavaScript API - Работа с Sass через JavaScript
69
+ /// @link https://sass-lang.com/documentation/cli/dart-sass См. также: CLI - Командная строка Dart Sass
70
+ /// @link https://sass-lang.com/documentation/breaking-changes/module-system См. также: Breaking Changes - Изменения в модульной системе
71
+ /// @link https://sass-lang.com/documentation/values/booleans См. также: Документация Sass - Логические значения
72
+ /// @link https://sass-lang.com/documentation/values/strings См. также: Документация Sass - Строки
73
+ /// @link https://sass-lang.com/documentation/values/colors См. также: Документация Sass - Цвета
74
+ /// @link https://sass-lang.com/documentation/values/lists См. также: Документация Sass - Списки
75
+ /// @link https://sass-lang.com/documentation/values/null См. также: Документация Sass - Значение null
76
+ /// @link https://sass-lang.com/documentation/values/maps См. также: Документация Sass - Карты
77
+ /// @link https://sass-lang.com/documentation/interpolation См. также: Документация Sass - Интерполяция
78
+ /// @link https://sass-lang.com/documentation/modules/math#abs См. также: Документация Sass - Функция math.abs()
79
+ /// @link https://sass-lang.com/documentation/modules/math#ceil См. также: Документация Sass - Функция math.ceil()
80
+ /// @link https://sass-lang.com/documentation/modules/math#floor См. также: Документация Sass - Функция math.floor()
81
+ /// @link https://sass-lang.com/documentation/modules/math#max См. также: Документация Sass - Функция math.max()
82
+ /// @link https://sass-lang.com/documentation/modules/math#min См. также: Документация Sass - Функция math.min()
83
+ /// @link https://sass-lang.com/documentation/modules/math#percentage См. также: Документация Sass - Функция math.percentage()
84
+ /// @link https://sass-lang.com/documentation/modules/math#random См. также: Документация Sass - Функция math.random()
85
+ /// @link https://sass-lang.com/documentation/modules/math#unit См. также: Документация Sass - Функция math.unit()
86
+ /// @link https://sass-lang.com/documentation/modules/math#unitless См. также: Документация Sass - Функция math.unitless()
87
+ /// @link https://sass-lang.com/documentation/modules/math#compatible См. также: Документация Sass - Функция math.compatible()
88
+ /// @link https://sass-lang.com/documentation/values/numbers#units См. также: Документация Sass - Числа и единицы измерения
89
+ /// @link https://sass-lang.com/documentation/values/numbers#precision См. также: Документация Sass - Точность чисел в Sass
90
+ /// @example scss - Проверка целых чисел
91
+ /// @debug is-int(42); // true
92
+ /// @debug is-int(3.14); // false
93
+ /// @debug is-int(-7); // true
94
+ /// @debug is-int(0); // true
95
+ /// @debug is-int(2.0); // true
96
+ ///
97
+ /// @example scss - Проверка нечисловых значений
98
+ /// @debug is-int("text"); // false
99
+ /// @debug is-int(true); // false
100
+ /// @debug is-int(null); // false
101
+ ///
102
+ /// @example scss - Использование в условиях
103
+ /// @if is-int($index) {
104
+ /// @debug "Индекс корректен: #{$index}";
105
+ /// } @else {
106
+ /// @warn "Ожидается целое число";
107
+ /// }
108
+ ///
109
+ /// @example scss - Фильтрация значений
110
+ /// $values: 1, 2.5, "3", 4, 5.0;
111
+ /// $integers: ();
112
+ ///
113
+ /// @each $value in $values {
114
+ /// @if is-int($value) {
115
+ /// $integers: append($integers, $value);
116
+ /// }
117
+ /// }
118
+ /// // $integers: (1, 4, 5)
119
+ /// @param {*} $value - Проверяемое значение
120
+ /// @return {Boolean} - `true` если значение является
121
+ /// целым числом, `false` во всех остальных случаях.
122
+ @function is-int($value) {
123
+ @return meta.type-of($value) == number and math.round($value) == $value;
124
+ }