@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,66 @@
1
+ @use 'sass:string';
2
+
3
+ /// Проверяет, заканчивается ли строка указанной подстрокой.
4
+ ///
5
+ /// Функция извлекает конец строки, равный по длине проверяемой
6
+ /// подстроке, и сравнивает его с этой подстрокой. Если
7
+ /// извлеченная часть строки совпадает с подстрокой, функция
8
+ /// возвращает `true`. В противном случае возвращается `false`.
9
+ ///
10
+ /// Важные особенности функции:
11
+ /// - Использует функцию `string.slice()` с отрицательным индексом
12
+ /// для извлечения конца строки
13
+ /// - Сравнивает извлеченную часть с подстрокой оператором равенства (==)
14
+ /// - Отрицательный индекс позволяет отсчитывать позиции с конца строки
15
+ /// - Чувствительна к регистру символов
16
+ /// - Учитывает пробелы и специальные символы в конце строки
17
+ /// ---
18
+ /// @name is-string-ending-with
19
+ /// @group utilities-validators
20
+ /// @since 2026.01.03
21
+ /// @access public
22
+ /// @author Murad Rustamov (therteenten)
23
+ /// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft - therteenten
24
+ /// @link https://sourcecraft.dev/omnisass/library SourceCraft - OmniSass
25
+ /// @link https://sass-lang.com/documentation/values/strings См. также: Официальная документация Sass - Тип данных "Строки"
26
+ /// @link https://sass-lang.com/documentation/modules/string#slice См. также: Официальная документация Sass - Функция string.slice()
27
+ /// @link https://sass-lang.com/documentation/modules/string#length См. также: Официальная документация Sass - Функция string.length()
28
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/string_value См. также: MDN Web Docs - CSS-тип <string>
29
+ /// @link https://sass-lang.com/documentation/operators/equality См. также: Официальная документация Sass - Операторы равенства
30
+ /// @link https://sass-lang.com/documentation/values/strings#interpolation См. также: Официальная документация Sass - Интерполяция строк
31
+ /// @link https://sass-lang.com/documentation/values/strings#quotes См. также: Официальная документация Sass - Кавычки в строках
32
+ /// @example scss - Строка заканчивается подстрокой
33
+ /// @debug is-string-ending-with('hello world', 'world'); // true
34
+ /// @debug is-string-ending-with('test-string', 'string'); // true
35
+ /// @debug is-string-ending-with('filename.jpg', '.jpg'); // true
36
+ /// @example scss - Строка не заканчивается подстрокой
37
+ /// @debug is-string-ending-with('hello world', 'hello'); // false
38
+ /// @debug is-string-ending-with('test', 'testing'); // false (подстрока длиннее строки)
39
+ /// @debug is-string-ending-with('World', 'world'); // false (регистр не совпадает)
40
+ /// @example scss - Граничные случаи
41
+ /// @debug is-string-ending-with('', ''); // true (обе строки пустые)
42
+ /// @debug is-string-ending-with('abc', ''); // false
43
+ /// @debug is-string-ending-with('', 'abc'); // false (строка короче подстроки)
44
+ /// @debug is-string-ending-with('space ', ' '); // true (пробелы в конце учитываются)
45
+ /// @example scss - Специальные символы и расширения файлов
46
+ /// @debug is-string-ending-with('style.css', '.css'); // true
47
+ /// @debug is-string-ending-with('data.json', '.json'); // true
48
+ /// @debug is-string-ending-with('index.html', '.html'); // true
49
+ /// @debug is-string-ending-with('text.txt', '.txt'); // true
50
+ /// @param {String} $string - Основная строка, в которой выполняется поиск.
51
+ /// @param {String} $substring - Подстрока, наличие которой проверяется
52
+ /// в конце основной строки.
53
+ /// @return {Boolean} - Возвращает `true`, если строка заканчивается
54
+ /// указанной подстрокой. Возвращает `false`, если строка не заканчивается
55
+ /// подстрокой, если подстрока длиннее строки, или если регистр
56
+ /// символов не совпадает.
57
+ /// @throws {Error} - Не выбрасывает ошибок. Если переданы нестроковые
58
+ /// значения, функция может вернуть неожиданный результат или вызвать
59
+ /// ошибку выполнения.
60
+ @function is-string-ending-with($string, $substring) {
61
+
62
+ $-substring-length: string.length($substring);
63
+
64
+ @return string.slice($string, -$-substring-length) == $substring;
65
+
66
+ }
@@ -0,0 +1,66 @@
1
+ @use 'sass:string';
2
+
3
+ /// Проверяет, начинается ли строка с указанной подстроки.
4
+ ///
5
+ /// Функция извлекает начало строки, равное по длине проверяемой
6
+ /// подстроке, и сравнивает его с этой подстрокой. Если
7
+ /// извлеченная часть строки совпадает с подстрокой, функция
8
+ /// возвращает `true`. В противном случае возвращается `false`.
9
+ ///
10
+ /// Важные особенности функции:
11
+ /// - Использует функцию `string.slice()` для извлечения части
12
+ /// строки
13
+ /// - Сравнивает извлеченную часть с подстрокой оператором равенства (==)
14
+ /// - Проверяет начало строки, начиная с первого символа (индекс 1)
15
+ /// - Чувствительна к регистру символов
16
+ /// - Учитывает пробелы и специальные символы
17
+ /// ---
18
+ /// @name is-string-starting-with
19
+ /// @group utilities-validators
20
+ /// @since 2026.01.03
21
+ /// @access public
22
+ /// @author Murad Rustamov (therteenten)
23
+ /// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft - therteenten
24
+ /// @link https://sourcecraft.dev/omnisass/library SourceCraft - OmniSass
25
+ /// @link https://sass-lang.com/documentation/values/strings См. также: Официальная документация Sass - Тип данных "Строки"
26
+ /// @link https://sass-lang.com/documentation/modules/string#slice См. также: Официальная документация Sass - Функция string.slice()
27
+ /// @link https://sass-lang.com/documentation/modules/string#length См. также: Официальная документация Sass - Функция string.length()
28
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/string_value См. также: MDN Web Docs - CSS-тип <string>
29
+ /// @link https://sass-lang.com/documentation/operators/equality См. также: Официальная документация Sass - Операторы равенства
30
+ /// @link https://sass-lang.com/documentation/values/strings#interpolation См. также: Официальная документация Sass - Интерполяция строк
31
+ /// @link https://sass-lang.com/documentation/values/strings#quotes См. также: Официальная документация Sass - Кавычки в строках
32
+ /// @example scss - Строка начинается с подстроки
33
+ /// @debug is-string-starting-with('hello world', 'hello'); // true
34
+ /// @debug is-string-starting-with('test-string', 'test'); // true
35
+ /// @debug is-string-starting-with('12345', '123'); // true
36
+ /// @example scss - Строка не начинается с подстроки
37
+ /// @debug is-string-starting-with('hello world', 'world'); // false
38
+ /// @debug is-string-starting-with('test', 'testing'); // false (подстрока длиннее строки)
39
+ /// @debug is-string-starting-with('Hello', 'hello'); // false (регистр не совпадает)
40
+ /// @example scss - Граничные случаи
41
+ /// @debug is-string-starting-with('', ''); // true (обе строки пустые)
42
+ /// @debug is-string-starting-with('abc', ''); // true (пустая подстрока всегда в начале)
43
+ /// @debug is-string-starting-with('', 'abc'); // false (строка короче подстроки)
44
+ /// @debug is-string-starting-with(' space', ' '); // true (пробелы учитываются)
45
+ /// @example scss - Специальные символы
46
+ /// @debug is-string-starting-with('#selector', '#'); // true
47
+ /// @debug is-string-starting-with('.class-name', '.'); // true
48
+ /// @debug is-string-starting-with('url(image.jpg)', 'url'); // true
49
+ /// @param {String} $string - Основная строка, в которой
50
+ /// выполняется поиск.
51
+ /// @param {String} $substring - Подстрока, наличие которой
52
+ /// проверяется в начале основной строки.
53
+ /// @return {Boolean} - Возвращает `true`, если строка начинается
54
+ /// с указанной подстроки. Возвращает `false`, если строка не
55
+ /// начинается с подстроки, если подстрока длиннее строки, или
56
+ /// если регистр символов не совпадает.
57
+ /// @throws {Error} - Не выбрасывает ошибок. Если переданы
58
+ /// нестроковые значения, функция может вернуть неожиданный
59
+ /// результат или вызвать ошибку выполнения.
60
+ @function is-string-starting-with($string, $substring) {
61
+ @return string.slice(
62
+ $string,
63
+ 1,
64
+ string.length($substring)
65
+ ) == $substring;
66
+ }
@@ -0,0 +1,92 @@
1
+ @use 'sass:meta';
2
+
3
+ /// Проверяет, является ли переданное значение
4
+ /// логическим типом (boolean).
5
+ ///
6
+ /// Функция анализирует тип переданной переменной
7
+ /// и возвращает `true`, если это логическое
8
+ /// значение (true или false). Используется для
9
+ /// валидации входных параметров в функциях и миксинах,
10
+ /// а также для условных операций в зависимости от
11
+ /// типа данных.
12
+ /// ---
13
+ /// @name is-boolean
14
+ /// @group utilities-validators
15
+ /// @since 2025.12.27
16
+ /// @access public
17
+ /// @author takamoso
18
+ /// @author Murad Rustamov (therteenten) [адаптация]
19
+ /// @link https://github.com/takamoso GitHub - takamoso
20
+ /// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft - therteenten
21
+ /// @link https://sourcecraft.dev/omnisass/library SourceCraft - OmniSass
22
+ /// @link https://sass-lang.com/documentation/modules/meta#type-of См. также: Официальная документация Sass - Функция meta.type-of()
23
+ /// @link https://sass-lang.com/documentation/modules/meta См. также: Официальная документация Sass - Модуль meta
24
+ /// @link https://sass-lang.com/documentation/values/booleans См. также: Официальная документация Sass - Тип данных "Логические значения" (Booleans)
25
+ /// @link https://sass-lang.com/documentation/at-rules/function См. также: Официальная документация Sass - Правило @function
26
+ /// @link https://sass-lang.com/documentation/style-rules/declarations#custom-properties См. также: Документация Sass - Пользовательские функции
27
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/:checked См. также: MDN Web Docs - Псевдокласс :checked
28
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/:enabled См. также: MDN Web Docs - Псевдокласс :enabled
29
+ /// @link https://www.w3schools.com/sass/sass_functions_meta.php См. также: W3Schools - Мета-функции в Sass
30
+ /// @link https://www.sass.hk/docs/ См. также: Китайская документация Sass - Полное руководство
31
+ /// @link https://sass-guidelin.es/ru/#section-39 См. также: Sass Guidelines - Раздел про проверку типов
32
+ /// @link https://github.com/sass/sass/blob/main/accepted/module-system.md См. также: GitHub - Документация по модульной системе Sass
33
+ /// @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
34
+ /// @link https://stackoverflow.com/questions/51785890/sass-check-if-a-variable-is-of-type-boolean См. также: Stack Overflow - Проверка, является ли переменная булевой
35
+ /// @link https://css-tricks.com/snippets/sass/ См. также: CSS-Tricks - Коллекция сниппетов Sass
36
+ /// @link https://web.dev/learn/css/pseudo-classes/ См. также: web.dev - Изучение псевдоклассов CSS
37
+ /// @link https://frontender.info/sass-type-checking/ См. также: Frontender Magazine - Проверка типов в Sass
38
+ /// @link https://habr.com/ru/post/156549/ См. также: Habr - Статья "Sass для верстальщика: типы данных"
39
+ /// @link https://www.sitepoint.com/sass-basics-operators/ См. также: SitePoint - Основы Sass: операторы сравнения
40
+ /// @link https://www.freecodecamp.org/news/sass-data-types/ См. также: freeCodeCamp - Типы данных в Sass
41
+ /// @link https://code.tutsplus.com/tutorials/understanding-sass-data-types--cms-22110 См. также: Envato Tuts+ - Понимание типов данных в Sass
42
+ /// @link https://dev.to/kathryngrayson/sass-type-checking-1p6c См. также: Dev.to - Проверка типов в Sass
43
+ /// @link https://css-live.ru/articles/uskorenie-razrabotki-s-pomoshhyu-sass.html См. также: CSS-Live - Ускорение разработки с помощью Sass
44
+ /// @link https://itchief.ru/sass/data-types См. также: itchief - Типы данных в Sass
45
+ /// @link https://htmlacademy.ru/blog/boost/tools/sass-2 См. также: HTML Academy - Sass: переменные и типы данных
46
+ /// @link https://metanit.com/web/html5/13.3.php См. также: Metanit - Типы данных в Sass
47
+ /// @link https://ru.hexlet.io/courses/sass-basics/lessons/data-types/theory_unit См. также: Hexlet - Типы данных в Sass
48
+ /// @link https://www.youtube.com/watch?v=Zz6eOVaaelI См. также: YouTube - Sass Tutorial #4 - Data Types (The Net Ninja)
49
+ /// @link https://www.youtube.com/watch?v=URtUXqOQq0k См. также: YouTube - Типы данных в Sass (на русском)
50
+ /// @link https://codelabs.developers.google.com/codelabs/cloud-sass-cli#5 См. также: Google Codelabs - Создание пользовательских функций в Sass
51
+ /// @link https://www.npmjs.com/package/sass См. также: npm - Документация пакета Dart Sass
52
+ /// @link https://marketplace.visualstudio.com/items?itemName=Syler.sass-indented См. также: VS Code Marketplace - Поддержка синтаксиса Sass
53
+ /// @link https://stylelint.io/user-guide/rules/selector-pseudo-class/ См. также: Stylelint - Правила для псевдоклассов
54
+ /// @link https://sass-lang.com/documentation/js-api См. также: JavaScript API - Работа с Sass через JavaScript
55
+ /// @link https://sass-lang.com/documentation/cli/dart-sass См. также: CLI - Командная строка Dart Sass
56
+ /// @link https://sass-lang.com/documentation/breaking-changes/module-system См. также: Breaking Changes - Изменения в модульной системе
57
+ /// @link https://sass-lang.com/documentation/values/numbers См. также: Документация Sass - Числа
58
+ /// @link https://sass-lang.com/documentation/values/strings См. также: Документация Sass - Строки
59
+ /// @link https://sass-lang.com/documentation/values/colors См. также: Документация Sass - Цвета
60
+ /// @link https://sass-lang.com/documentation/values/null См. также: Документация Sass - Значение null
61
+ /// @link https://sass-lang.com/documentation/values/maps См. также: Документация Sass - Карты (maps)
62
+ /// @link https://sass-lang.com/documentation/interpolation См. также: Документация Sass - Интерполяция
63
+ /// @example scss - Базовое использование
64
+ /// $is-valid: true;
65
+ /// $count: 42;
66
+ /// $message: "text";
67
+ ///
68
+ /// @debug is-boolean($is-valid); //=> true
69
+ /// @debug is-boolean($count); //=> false
70
+ /// @debug is-boolean($message); //=> false
71
+ /// @example scss - Использование в условиях
72
+ /// @if is-boolean($setting) {
73
+ /// // Выполняется только для boolean значений
74
+ /// @debug "Настройка имеет логический тип";
75
+ /// } @else {
76
+ /// @warn "Ожидается логическое значение true/false";
77
+ /// }
78
+ /// @example scss - Валидация параметров функции
79
+ /// @function set-visibility($is-visible) {
80
+ /// @if not is-boolean($is-visible) {
81
+ /// @error "Параметр $is-visible должен быть true или false";
82
+ /// }
83
+ /// @return if($is-visible, block, none);
84
+ /// }
85
+ /// @param {*} $value - Переменная для проверки типа
86
+ /// (может быть любого типа).
87
+ /// @return {Boolean} - `true` если переменная является
88
+ /// логическим типом (true/false), `false` во
89
+ /// всех остальных случаях.
90
+ @function is-boolean($value) {
91
+ @return meta.type-of($value) == bool;
92
+ }
@@ -0,0 +1,96 @@
1
+ @use 'sass:meta';
2
+
3
+ /// Проверяет, является ли значение допустимым цветом.
4
+ ///
5
+ /// Функция `is-color()` определяет, представляет ли
6
+ /// переданное значение допустимый цвет в Sass. Это
7
+ /// типобезопасная проверка, которая помогает избежать
8
+ /// ошибок при работе с динамическими значениями,
9
+ /// или данными из внешних источников.
10
+ ///
11
+ /// Особенно полезна в миксинах и функциях, которые ожидают
12
+ /// цветовые параметры.
13
+ ///
14
+ /// > Функция проверяет тип значения во время компиляции, а
15
+ /// > не содержимое. Строка `"#ff0000"` вернет `false`, хотя
16
+ /// > выглядит как цвет.
17
+ ///
18
+ /// > CSS-переменные (`var(--my-color)`) считаются строками,
19
+ /// > а не цветами, даже если они ссылаются на цветовые
20
+ /// > значения.
21
+ /// ---
22
+ /// @name is-color
23
+ /// @group utilities-validators
24
+ /// @since 2025.12.27
25
+ /// @access public
26
+ /// @author Murad Rustamov (therteenten)
27
+ /// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft - therteenten
28
+ /// @link https://sourcecraft.dev/omnisass/library SourceCraft - OmniSass
29
+ /// @link https://sass-lang.com/documentation/values/colors См. также: Sass - Значения цветов
30
+ /// @link https://sass-lang.com/documentation/modules/meta#type-of См. также: Sass - Функция meta.type-of()
31
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/color_value См. также: MDN - Значения цвета CSS
32
+ /// @link https://www.w3.org/TR/css-color-4/ См. также: W3C - CSS Color Module Level 4
33
+ /// @link https://www.w3schools.com/sass/sass_data_types.php См. также: W3Schools - Типы данных Sass
34
+ /// @link https://www.sitepoint.com/5-things-you-might-not-know-about-sass/#typeof См. также: SitePoint - 5 вещей о Sass
35
+ /// @link https://css-tricks.com/snippets/sass/advanced-type-checking/ См. также: CSS-Tricks - Продвинутая проверка типов в Sass
36
+ /// @link https://webplatform.news/issues/2023-07-12 См. также: WebPlatform News - Цвета в CSS
37
+ /// @example scss - Проверка статических значений
38
+ /// @debug is-color(#ff0000); // true
39
+ /// @debug is-color(rgb(255, 0, 0)); // true
40
+ /// @debug is-color(red); // true
41
+ /// @debug is-color("red"); // false (строка, не цвет!)
42
+ /// @debug is-color(16px); // false
43
+ /// @debug is-color(null); // false
44
+ ///
45
+ /// @example scss - Обработка динамических значений
46
+ /// @mixin apply-color($value) {
47
+ /// @if is-color($value) {
48
+ /// color: $value;
49
+ /// } @else {
50
+ /// @warn "Ожидался цвет, получено: #{$value}. Используется значение по умолчанию.";
51
+ /// color: #333;
52
+ /// }
53
+ /// }
54
+ ///
55
+ /// .test {
56
+ /// @include apply-color(#ffffff);
57
+ /// }
58
+ /// @example css - Результат
59
+ /// .test {
60
+ /// color: #ffffff;
61
+ /// }
62
+ /// @example scss - Валидация в дизайн-системе
63
+ /// :root {
64
+ ///
65
+ /// $custom-color: var(--user-color, #3498db);
66
+ ///
67
+ /// @if is-color($custom-color) {
68
+ /// --validated-color: #{$custom-color};
69
+ /// } @else {
70
+ /// --validated-color: #3498db;
71
+ /// }
72
+ ///
73
+ /// }
74
+ /// @example css - Результат
75
+ /// :root {
76
+ /// --validated-color: #3498db;
77
+ /// }
78
+ /// @param {*} $value - Произвольное значение для проверки.
79
+ /// Может быть любого типа: строка, число, список, карта,
80
+ /// цвет, логическое значение и т.д.
81
+ /// @return {Boolean} - Возвращает `true`, если значение
82
+ /// является цветом, и `false` в противном случае.
83
+ /// Распознает все форматы цветов, поддерживаемые Sass:
84
+ /// - HEX (`#ff0000`, `#f00`),
85
+ /// - RGB/A (`rgb(255, 0, 0)`, `rgba(255, 0, 0, 0.5)`),
86
+ /// - HSL/A (`hsl(0, 100%, 50%)`, `hsla(0, 100%, 50%, 0.5)`),
87
+ /// - Именованные цвета (`red`, `blue`, `transparent`, `currentColor`),
88
+ /// - Цвета в новых пространствах (`lab()`, `lch()`, `oklab()`, `oklch()`),
89
+ /// - CSS-переменные (если они ссылаются на цвета)
90
+ @function is-color($value) {
91
+ @return meta.type-of($value) == color;
92
+ }
93
+
94
+
95
+
96
+
@@ -0,0 +1,105 @@
1
+ @use 'sass:list';
2
+ @use 'sass:meta';
3
+
4
+ /// Проверяет, является ли значение списком
5
+ /// (list) или списком аргументов (arglist).
6
+ ///
7
+ /// Функция определяет, относится ли переданное
8
+ /// значение к типам данных "список" в Sass.
9
+ /// Проверяет как обычные списки (list), так и
10
+ /// списки аргументов (arglist), которые используются
11
+ /// в миксинах и функциях для передачи переменного
12
+ /// количества параметров.
13
+ /// ---
14
+ /// @name is-list
15
+ /// @group utilities-validators
16
+ /// @since 2025.12.27
17
+ /// @access public
18
+ /// @author takamoso
19
+ /// @author Murad Rustamov (therteenten) [адаптация]
20
+ /// @link https://github.com/takamoso GitHub - takamoso
21
+ /// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft - therteenten
22
+ /// @link https://sourcecraft.dev/omnisass/library SourceCraft - OmniSass
23
+ /// @link https://sass-lang.com/documentation/modules/meta#type-of См. также: Официальная документация Sass - Функция meta.type-of()
24
+ /// @link https://sass-lang.com/documentation/modules/meta См. также: Официальная документация Sass - Модуль meta
25
+ /// @link https://sass-lang.com/documentation/values/lists См. также: Официальная документация Sass - Тип данных "Списки" (Lists)
26
+ /// @link https://sass-lang.com/documentation/values/lists#arglists См. также: Официальная документация Sass - Arglist (списки аргументов)
27
+ /// @link https://sass-lang.com/documentation/at-rules/function См. также: Официальная документация Sass - Правило @function
28
+ /// @link https://sass-lang.com/documentation/style-rules/declarations#custom-properties См. также: Документация Sass - Пользовательские функции
29
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/list-style-type См. также: MDN Web Docs - CSS свойство list-style-type
30
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_lists См. также: MDN Web Docs - Работа со списками в CSS
31
+ /// @link https://www.w3schools.com/sass/sass_functions_list.php См. также: W3Schools - Функции для работы со списками в Sass
32
+ /// @link https://www.sass.hk/docs/ См. также: Китайская документация Sass - Полное руководство
33
+ /// @link https://sass-guidelin.es/ru/#section-39 См. также: Sass Guidelines - Раздел про проверку типов данных
34
+ /// @link https://github.com/sass/sass/blob/main/accepted/module-system.md См. также: GitHub - Документация по модульной системе Sass
35
+ /// @link https://stackoverflow.com/questions/36885966/sass-get-first-item-from-a-list См. также: Stack Overflow - Работа со списками в Sass
36
+ /// @link https://stackoverflow.com/questions/12528457/determine-type-of-a-variable-in-sass См. также: Stack Overflow - Определение типа переменной в Sass
37
+ /// @link https://css-tricks.com/snippets/sass/ См. также: CSS-Tricks - Коллекция сниппетов Sass
38
+ /// @link https://web.dev/learn/css/lists/ См. также: web.dev - Изучение CSS списков
39
+ /// @link https://frontender.info/sass-lists/ См. также: Frontender Magazine - Работа со списками в Sass
40
+ /// @link https://habr.com/ru/post/156549/ См. также: Habr - Статья "Sass для верстальщика: списки и циклы"
41
+ /// @link https://www.sitepoint.com/using-sass-maps/ См. также: SitePoint - Использование карт (maps) в Sass
42
+ /// @link https://www.freecodecamp.org/news/how-to-use-lists-in-sass/ См. также: freeCodeCamp - Как использовать списки в Sass
43
+ /// @link https://code.tutsplus.com/tutorials/understanding-sass-lists--cms-22020 См. также: Envato Tuts+ - Понимание списков в Sass
44
+ /// @link https://dev.to/kathryngrayson/using-sass-list-functions-4lp См. также: Dev.to - Использование функций для работы со списками в Sass
45
+ /// @link https://css-live.ru/vecssti-i-sovety/vse-o-spiskax-v-sass.html См. также: CSS-Live - Все о списках в Sass
46
+ /// @link https://itchief.ru/sass/cycles-and-lists См. также: itchief - Циклы и списки в Sass
47
+ /// @link https://htmlacademy.ru/blog/boost/tools/sass-3 См. также: HTML Academy - Sass: списки, циклы, условия
48
+ /// @link https://metanit.com/web/html5/13.6.php См. также: Metanit - Списки и циклы в Sass
49
+ /// @link https://ru.hexlet.io/courses/sass-basics/lessons/conditionals/theory_unit См. также: Hexlet - Условные операторы и списки в Sass
50
+ /// @link https://www.youtube.com/watch?v=roywYSEPSvc См. также: YouTube - Sass Tutorial #10 - Lists (The Net Ninja)
51
+ /// @link https://www.youtube.com/watch?v=BIz02qY5BRA См. также: YouTube - Sass списки и циклы (на русском)
52
+ /// @link https://codelabs.developers.google.com/codelabs/cloud-sass-cli#5 См. также: Google Codelabs - Создание пользовательских функций в Sass
53
+ /// @link https://www.npmjs.com/package/sass См. также: npm - Документация пакета Dart Sass
54
+ /// @link https://marketplace.visualstudio.com/items?itemName=Syler.sass-indented См. также: VS Code Marketplace - Поддержка синтаксиса Sass
55
+ /// @link https://stylelint.io/user-guide/rules/list/ См. также: Stylelint - Правила для работы со списками
56
+ /// @link https://sass-lang.com/documentation/js-api См. также: JavaScript API - Работа с Sass через JavaScript
57
+ /// @link https://sass-lang.com/documentation/cli/dart-sass См. также: CLI - Командная строка Dart Sass
58
+ /// @link https://sass-lang.com/documentation/breaking-changes/module-system См. также: Breaking Changes - Изменения в модульной системе
59
+ /// @link https://sass-lang.com/documentation/values/booleans См. также: Документация Sass - Логические значения
60
+ /// @link https://sass-lang.com/documentation/values/strings См. также: Документация Sass - Строки
61
+ /// @link https://sass-lang.com/documentation/values/colors См. также: Документация Sass - Цвета
62
+ /// @link https://sass-lang.com/documentation/values/null См. также: Документация Sass - Значение null
63
+ /// @link https://sass-lang.com/documentation/values/maps См. также: Документация Sass - Карты (maps)
64
+ /// @link https://sass-lang.com/documentation/interpolation См. также: Документация Sass - Интерполяция
65
+ /// @link https://sass-lang.com/documentation/at-rules/mixin#taking-arbitrary-arguments См. также: Документация Sass - Прием произвольных аргументов (arglist)
66
+ /// @link https://sass-lang.com/documentation/at-rules/function#taking-arbitrary-arguments См. также: Документация Sass - Функции с произвольными аргументами
67
+ /// @link https://sass-lang.com/documentation/modules/list#functions-in-the-list-module См. также: Документация Sass - Функции модуля list
68
+ /// @example scss - Проверка списков
69
+ /// $simple-list: 1, 2, 3;
70
+ /// $nested-list: (1, 2), (3, 4);
71
+ /// $single-item: (1,);
72
+ /// $empty-list: ();
73
+ ///
74
+ /// @debug is-list($simple-list); // true
75
+ /// @debug is-list($nested-list); // true
76
+ /// @debug is-list($single-item); // true
77
+ /// @debug is-list($empty-list); // true
78
+ /// @example scss - Проверка других типов
79
+ /// @debug is-list(42); // false
80
+ /// @debug is-list("text"); // false
81
+ /// @debug is-list(true); // false
82
+ /// @debug is-list(#fff); // false
83
+ /// @debug is-list((key: value)); // false (это map)
84
+ /// @example scss - Использование с миксинами
85
+ /// @mixin custom-mixin($items...) {
86
+ /// @if is-list($items) {
87
+ /// @each $item in $items {
88
+ /// // Обработка каждого элемента списка
89
+ /// }
90
+ /// }
91
+ /// }
92
+ /// @example scss - Валидация параметров
93
+ /// @function join-lists($list1, $list2) {
94
+ /// @if not is-list($list1) or not is-list($list2) {
95
+ /// @error "Оба параметра должны быть списками";
96
+ /// }
97
+ /// @return join($list1, $list2);
98
+ /// }
99
+ /// @param {*} $value - Проверяемое значение
100
+ /// @return {Boolean} - `true` если значение является
101
+ /// списком или списком аргументов, `false` во всех
102
+ /// остальных случаях.
103
+ @function is-list($value) {
104
+ @return meta.type-of($value) == list or meta.type-of($value) == arglist;
105
+ }
@@ -0,0 +1,105 @@
1
+ @use 'sass:meta';
2
+
3
+ /// Проверяет, является ли значение ассоциативным
4
+ /// массивом (map).
5
+ ///
6
+ /// Функция определяет, относится ли переданное
7
+ /// значение к типу данных "map" в Sass.
8
+ /// Map представляет собой коллекцию пар ключ-значение
9
+ /// и используется для хранения структурированных данных,
10
+ /// конфигураций и тематических настроек.
11
+ /// ---
12
+ /// @name is-map
13
+ /// @group utilities-validators
14
+ /// @since 2025.12.27
15
+ /// @access public
16
+ /// @author takamoso
17
+ /// @author Murad Rustamov (therteenten) [адаптация]
18
+ /// @link https://github.com/takamoso GitHub - takamoso
19
+ /// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft - therteenten
20
+ /// @link https://sourcecraft.dev/omnisass/library SourceCraft - OmniSass
21
+ /// @link https://sass-lang.com/documentation/modules/meta#type-of См. также: Официальная документация Sass - Функция `meta.type-of()`
22
+ /// @link https://sass-lang.com/documentation/modules/meta См. также: Официальная документация Sass - Модуль `meta`
23
+ /// @link https://sass-lang.com/documentation/values/maps См. также: Официальная документация Sass - Тип данных "Карты" (Maps)
24
+ /// @link https://sass-lang.com/documentation/modules/map См. также: Официальная документация Sass - Модуль map
25
+ /// @link https://sass-lang.com/documentation/at-rules/function См. также: Официальная документация Sass - Правило `@function`
26
+ /// @link https://sass-lang.com/documentation/style-rules/declarations#custom-properties См. также: Документация Sass - Пользовательские функции
27
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/map См. также: MDN Web Docs - CSS тип данных map()
28
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_functions См. также: MDN Web Docs - CSS функции
29
+ /// @link https://www.w3schools.com/sass/sass_functions_map.php См. также: W3Schools - Функции для работы с картами в Sass
30
+ /// @link https://www.sass.hk/docs/ См. также: Китайская документация Sass - Полное руководство
31
+ /// @link https://sass-guidelin.es/ru/#maps См. также: Sass Guidelines - Руководство по использованию карт в Sass
32
+ /// @link https://github.com/sass/sass/blob/main/accepted/module-system.md См. также: GitHub - Документация по модульной системе Sass
33
+ /// @link https://stackoverflow.com/questions/21192078/sass-check-if-map-has-key См. также: Stack Overflow - Проверка наличия ключа в карте Sass
34
+ /// @link https://stackoverflow.com/questions/21768988/how-to-check-for-a-map-in-sass См. также: Stack Overflow - Как проверить, является ли значение картой в Sass
35
+ /// @link https://css-tricks.com/snippets/sass/ См. также: CSS-Tricks - Коллекция сниппетов Sass
36
+ /// @link https://web.dev/learn/css/functions/ См. также: web.dev - Изучение CSS функций
37
+ /// @link https://frontender.info/sass-maps/ См. также: Frontender Magazine - Работа с картами в Sass
38
+ /// @link https://habr.com/ru/post/247881/ См. также: Habr - Статья "Sass для верстальщика: карты (maps)"
39
+ /// @link https://www.sitepoint.com/using-sass-maps/ См. также: SitePoint - Использование карт в Sass
40
+ /// @link https://www.freecodecamp.org/news/sass-maps/ См. также: freeCodeCamp - Карты в Sass
41
+ /// @link https://code.tutsplus.com/tutorials/understanding-sass-maps--cms-22184 См. также: Envato Tuts+ - Понимание карт в Sass
42
+ /// @link https://dev.to/kathryngrayson/sass-maps-43cn См. также: Dev.to - Карты в Sass
43
+ /// @link https://css-live.ru/articles/karty-v-sass-samaya-polnaya-statya.html См. также: CSS-Live - Карты в Sass: самая полная статья
44
+ /// @link https://itchief.ru/sass/maps См. также: itchief - Карты в Sass
45
+ /// @link https://htmlacademy.ru/blog/boost/tools/sass-maps См. также: HTML Academy - Карты в Sass
46
+ /// @link https://metanit.com/web/html5/13.7.php См. также: Metanit - Карты в Sass
47
+ /// @link https://ru.hexlet.io/courses/sass-basics/lessons/maps/theory_unit См. также: Hexlet - Карты в Sass
48
+ /// @link https://www.youtube.com/watch?v=7uUaU0KpO3Y См. также: YouTube - Sass Tutorial #11 - Maps (The Net Ninja)
49
+ /// @link https://www.youtube.com/watch?v=8y-6p8n8Vc8 См. также: YouTube - Карты в Sass (на русском)
50
+ /// @link https://codelabs.developers.google.com/codelabs/cloud-sass-cli#5 См. также: Google Codelabs - Создание пользовательских функций в Sass
51
+ /// @link https://www.npmjs.com/package/sass См. также: npm - Документация пакета Dart Sass
52
+ /// @link https://marketplace.visualstudio.com/items?itemName=Syler.sass-indented См. также: VS Code Marketplace - Поддержка синтаксиса Sass
53
+ /// @link https://stylelint.io/user-guide/rules/declaration-property-value/ См. также: Stylelint - Правила для значений свойств
54
+ /// @link https://sass-lang.com/documentation/js-api См. также: JavaScript API - Работа с Sass через JavaScript
55
+ /// @link https://sass-lang.com/documentation/cli/dart-sass См. также: CLI - Командная строка Dart Sass
56
+ /// @link https://sass-lang.com/documentation/breaking-changes/module-system См. также: Breaking Changes - Изменения в модульной системе
57
+ /// @link https://sass-lang.com/documentation/values/booleans См. также: Документация Sass - Логические значения
58
+ /// @link https://sass-lang.com/documentation/values/strings См. также: Документация Sass - Строки
59
+ /// @link https://sass-lang.com/documentation/values/lists См. также: Документация Sass - Списки
60
+ /// @link https://sass-lang.com/documentation/values/colors См. также: Документация Sass - Цвета
61
+ /// @link https://sass-lang.com/documentation/values/null См. также: Документация Sass - Значение `null`
62
+ /// @link https://sass-lang.com/documentation/interpolation См. также: Документация Sass - Интерполяция
63
+ /// @link https://sass-lang.com/documentation/modules/map#functions-in-the-map-module См. также: Документация Sass - Функции модуля map
64
+ /// @link https://sass-lang.com/documentation/modules/map#keys См. также: Документация Sass - Функция `map.keys()`
65
+ /// @link https://sass-lang.com/documentation/modules/map#values См. также: Документация Sass - Функция `map.values()`
66
+ /// @link https://sass-lang.com/documentation/modules/map#get См. также: Документация Sass - Функция `map.get()`
67
+ /// @link https://sass-lang.com/documentation/modules/map#merge См. также: Документация Sass - Функция `map.merge()`
68
+ /// @link https://sass-lang.com/documentation/modules/map#remove См. также: Документация Sass - Функция `map.remove()`
69
+ /// @example scss - Проверка map
70
+ /// $color-map: (primary: blue, secondary: green);
71
+ /// $config-map: (font-size: 16px, spacing: 10px);
72
+ /// $nested-map: (colors: (primary: red, secondary: blue));
73
+ /// $empty-map: ();
74
+ ///
75
+ /// @debug is-map($color-map); // true
76
+ /// @debug is-map($config-map); // true
77
+ /// @debug is-map($nested-map); // true
78
+ /// @debug is-map($empty-map); // true
79
+ /// @example scss - Проверка других типов
80
+ /// @debug is-map((1, 2, 3)); // false (это list)
81
+ /// @debug is-map("hello"); // false
82
+ /// @debug is-map(42); // false
83
+ /// @debug is-map(true); // false
84
+ /// @example scss - Использование для безопасного доступа к map
85
+ /// @function map-get-safe($map, $key) {
86
+ /// @if not is-map($map) {
87
+ /// @warn "Первый параметр должен быть map";
88
+ /// @return null;
89
+ /// }
90
+ /// @return map.get($map, $key);
91
+ /// }
92
+ /// @example scss - Валидация конфигурационных объектов
93
+ /// @mixin configure($config) {
94
+ /// @if not is-map($config) {
95
+ /// @error "Конфигурация должна быть передана в виде map";
96
+ /// }
97
+ /// // Применение конфигурации
98
+ /// }
99
+ /// @param {*} $value - Проверяемое значение
100
+ /// @return {Boolean} - `true` если значение является
101
+ /// ассоциативным массивом (map), `false` во всех
102
+ /// остальных случаях.
103
+ @function is-map($value) {
104
+ @return meta.type-of($value) == map;
105
+ }