@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,103 @@
1
+ @use 'sass:meta';
2
+
3
+ /// Проверяет, является ли значение числом
4
+ ///
5
+ /// Функция определяет тип данных переданного
6
+ /// значения и возвращает `true`, если значение
7
+ /// является числом (включая числа с единицами измерения).
8
+ /// ---
9
+ /// @name is-number
10
+ /// @group utilities-validators
11
+ /// @since 2025.12.27
12
+ /// @access public
13
+ /// @author Murad Rustamov (therteenten)
14
+ /// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft - therteenten
15
+ /// @link https://sourcecraft.dev/omnisass/library SourceCraft - OmniSass
16
+ /// @link https://sass-lang.com/documentation/modules/meta#type-of См. также: Официальная документация Sass - Функция meta.type-of()
17
+ /// @link https://sass-lang.com/documentation/modules/meta См. также: Официальная документация Sass - Модуль meta
18
+ /// @link https://sass-lang.com/documentation/values/numbers См. также: Официальная документация Sass - Тип данных "Числа" (Numbers)
19
+ /// @link https://sass-lang.com/documentation/values/numbers#units См. также: Официальная документация Sass - Числа и единицы измерения
20
+ /// @link https://sass-lang.com/documentation/at-rules/function См. также: Официальная документация Sass - Правило @function
21
+ /// @link https://sass-lang.com/documentation/style-rules/declarations#custom-properties См. также: Документация Sass - Пользовательские функции
22
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/number См. также: MDN Web Docs - CSS тип данных <number>
23
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Values_and_Units См. также: MDN Web Docs - CSS значения и единицы измерения
24
+ /// @link https://www.w3schools.com/sass/sass_functions_numeric.php См. также: W3Schools - Числовые функции в Sass
25
+ /// @link https://www.sass.hk/docs/ См. также: Китайская документация Sass - Полное руководство
26
+ /// @link https://sass-guidelin.es/ru/#section-39 См. также: Sass Guidelines - Раздел про проверку типов данных
27
+ /// @link https://github.com/sass/sass/blob/main/accepted/module-system.md См. также: GitHub - Документация по модульной системе Sass
28
+ /// @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
29
+ /// @link https://stackoverflow.com/questions/12328259/how-do-you-strip-the-unit-from-any-number-in-sass См. также: Stack Overflow - Как удалить единицы измерения из числа в Sass
30
+ /// @link https://css-tricks.com/snippets/sass/ См. также: CSS-Tricks - Коллекция сниппетов Sass
31
+ /// @link https://web.dev/learn/css/numbers/ См. также: web.dev - Изучение чисел в CSS
32
+ /// @link https://frontender.info/sass-numbers/ См. также: Frontender Magazine - Работа с числами в Sass
33
+ /// @link https://habr.com/ru/post/247887/ См. также: Habr - Статья "Sass для верстальщика: числа и математика"
34
+ /// @link https://www.sitepoint.com/sass-basics-operators/ См. также: SitePoint - Основы Sass: операторы
35
+ /// @link https://www.freecodecamp.org/news/sass-data-types/ См. также: freeCodeCamp - Типы данных в Sass
36
+ /// @link https://code.tutsplus.com/tutorials/understanding-sass-data-types--cms-22110 См. также: Envato Tuts+ - Понимание типов данных в Sass
37
+ /// @link https://dev.to/kathryngrayson/sass-type-checking-1p6c См. также: Dev.to - Проверка типов в Sass
38
+ /// @link https://css-live.ru/articles/uskorenie-razrabotki-s-pomoshhyu-sass.html См. также: CSS-Live - Ускорение разработки с помощью Sass
39
+ /// @link https://itchief.ru/sass/data-types См. также: itchief - Типы данных в Sass
40
+ /// @link https://htmlacademy.ru/blog/boost/tools/sass-2 См. также: HTML Academy - Sass: переменные и типы данных
41
+ /// @link https://metanit.com/web/html5/13.3.php См. также: Metanit - Типы данных в Sass
42
+ /// @link https://ru.hexlet.io/courses/sass-basics/lessons/data-types/theory_unit См. также: Hexlet - Типы данных в Sass
43
+ /// @link https://www.youtube.com/watch?v=Zz6eOVaaelI См. также: YouTube - Sass Tutorial #4 - Data Types (The Net Ninja)
44
+ /// @link https://www.youtube.com/watch?v=URtUXqOQq0k См. также: YouTube - Типы данных в Sass (на русском)
45
+ /// @link https://codelabs.developers.google.com/codelabs/cloud-sass-cli#5 См. также: Google Codelabs - Создание пользовательских функций в Sass
46
+ /// @link https://www.npmjs.com/package/sass См. также: npm - Документация пакета Dart Sass
47
+ /// @link https://marketplace.visualstudio.com/items?itemName=Syler.sass-indented См. также: VS Code Marketplace - Поддержка синтаксиса Sass
48
+ /// @link https://stylelint.io/user-guide/rules/length-zero-no-unit/ См. также: Stylelint - Правила для единиц измерения
49
+ /// @link https://sass-lang.com/documentation/js-api См. также: JavaScript API - Работа с Sass через JavaScript
50
+ /// @link https://sass-lang.com/documentation/cli/dart-sass См. также: CLI - Командная строка Dart Sass
51
+ /// @link https://sass-lang.com/documentation/breaking-changes/module-system См. также: Breaking Changes - Изменения в модульной системе
52
+ /// @link https://sass-lang.com/documentation/values/booleans См. также: Документация Sass - Логические значения
53
+ /// @link https://sass-lang.com/documentation/values/strings См. также: Документация Sass - Строки
54
+ /// @link https://sass-lang.com/documentation/values/colors См. также: Документация Sass - Цвета
55
+ /// @link https://sass-lang.com/documentation/values/lists См. также: Документация Sass - Списки
56
+ /// @link https://sass-lang.com/documentation/values/null См. также: Документация Sass - Значение null
57
+ /// @link https://sass-lang.com/documentation/values/maps См. также: Документация Sass - Карты
58
+ /// @link https://sass-lang.com/documentation/interpolation См. также: Документация Sass - Интерполяция
59
+ /// @link https://sass-lang.com/documentation/modules/math См. также: Официальная документация Sass - Модуль math
60
+ /// @link https://sass-lang.com/documentation/modules/math#abs См. также: Документация Sass - Функция math.abs()
61
+ /// @link https://sass-lang.com/documentation/modules/math#ceil См. также: Документация Sass - Функция math.ceil()
62
+ /// @link https://sass-lang.com/documentation/modules/math#floor См. также: Документация Sass - Функция math.floor()
63
+ /// @link https://sass-lang.com/documentation/modules/math#max См. также: Документация Sass - Функция math.max()
64
+ /// @link https://sass-lang.com/documentation/modules/math#min См. также: Документация Sass - Функция math.min()
65
+ /// @link https://sass-lang.com/documentation/modules/math#percentage См. также: Документация Sass - Функция math.percentage()
66
+ /// @link https://sass-lang.com/documentation/modules/math#random См. также: Документация Sass - Функция math.random()
67
+ /// @link https://sass-lang.com/documentation/modules/math#round См. также: Документация Sass - Функция math.round()
68
+ /// @example scss - Проверка числовых значений
69
+ /// @debug is-number(10); // true
70
+ /// @debug is-number(3.14); // true
71
+ /// @debug is-number(1px); // true
72
+ /// @debug is-number(2em); // true
73
+ /// @debug is-number(0); // true
74
+ /// @debug is-number(-5rem); // true
75
+ /// @example scss - Проверка нечисловых значений
76
+ /// @debug is-number("text"); // false
77
+ /// @debug is-number(#fff); // false
78
+ /// @debug is-number(true); // false
79
+ /// @debug is-number(null); // false
80
+ /// @debug is-number((1, 2, 3)); // false
81
+ /// @debug is-number(red); // false
82
+ /// @example scss - Использование для валидации
83
+ /// @function calculate-margin($value) {
84
+ /// @if not is-number($value) {
85
+ /// @error "Ожидается числовое значение, получено: number";
86
+ /// }
87
+ /// @return $value * 2;
88
+ /// }
89
+ /// @example scss - Условная обработка
90
+ /// .test {
91
+ /// $spacing: 1px;
92
+ /// @if is-number($spacing) {
93
+ /// padding: $spacing;
94
+ /// } @else {
95
+ /// padding: 1rem;
96
+ /// }
97
+ /// }
98
+ /// @param {*} $value - Проверяемое значение любого типа
99
+ /// @return {Boolean} - Возвращает `true`, если значение является
100
+ /// числом, иначе возвращает `false`.
101
+ @function is-number($value) {
102
+ @return meta.type-of($value) == number;
103
+ }
@@ -0,0 +1,110 @@
1
+ @use 'sass:meta';
2
+
3
+ /// Проверяет, является ли значение строкой (string)
4
+ ///
5
+ /// Функция определяет, относится ли переданное значение
6
+ /// к строковому типу данных в Sass. Строки могут быть
7
+ /// заключены в кавычки (`""` или `''`) или без них, но тип
8
+ /// всегда определяется как `string`.
9
+ /// Полезно для валидации текстовых параметров,
10
+ /// обработки контента и проверки входных данных.
11
+ /// ---
12
+ /// @name is-string
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/strings См. также: Официальная документация Sass - Тип данных "Строки" (Strings)
24
+ /// @link https://sass-lang.com/documentation/values/strings#escapes См. также: Официальная документация Sass - Экранирование символов в строках
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/string См. также: MDN Web Docs - CSS тип данных <string>
28
+ /// @link https://developer.mozilla.org/en-US/docs/Web/CSS/attr См. также: MDN Web Docs - CSS функция attr()
29
+ /// @link https://www.w3schools.com/sass/sass_functions_string.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/19456143/sass-if-a-variable-is-a-string См. также: Stack Overflow - Проверка строковой переменной в Sass
35
+ /// @link https://css-tricks.com/snippets/sass/ См. также: CSS-Tricks - Коллекция сниппетов Sass
36
+ /// @link https://web.dev/learn/css/strings/ См. также: web.dev - Изучение строк в CSS
37
+ /// @link https://frontender.info/sass-strings/ См. также: Frontender Magazine - Работа со строками в Sass
38
+ /// @link https://habr.com/ru/post/247882/ См. также: 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/string-quotes/ См. также: 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/numbers См. также: Документация Sass - Числа
59
+ /// @link https://sass-lang.com/documentation/values/colors См. также: Документация Sass - Цвета
60
+ /// @link https://sass-lang.com/documentation/values/lists См. также: Документация Sass - Списки
61
+ /// @link https://sass-lang.com/documentation/values/null См. также: Документация Sass - Значение null
62
+ /// @link https://sass-lang.com/documentation/values/maps См. также: Документация Sass - Карты
63
+ /// @link https://sass-lang.com/documentation/interpolation См. также: Документация Sass - Интерполяция
64
+ /// @link https://sass-lang.com/documentation/modules/string См. также: Официальная документация Sass - Модуль string
65
+ /// @link https://sass-lang.com/documentation/modules/string#index См. также: Документация Sass - Функция string.index()
66
+ /// @link https://sass-lang.com/documentation/modules/string#slice См. также: Документация Sass - Функция string.slice()
67
+ /// @link https://sass-lang.com/documentation/modules/string#to-upper-case См. также: Документация Sass - Функция string.to-upper-case()
68
+ /// @link https://sass-lang.com/documentation/modules/string#to-lower-case См. также: Документация Sass - Функция string.to-lower-case()
69
+ /// @link https://sass-lang.com/documentation/modules/string#unique-id См. также: Документация Sass - Функция string.unique-id()
70
+ /// @link https://sass-lang.com/documentation/modules/string#quote См. также: Документация Sass - Функция string.quote()
71
+ /// @link https://sass-lang.com/documentation/modules/string#unquote См. также: Документация Sass - Функция string.unquote()
72
+ /// @example scss - Проверка строковых значений
73
+ /// @debug is-string("Hello World"); // true
74
+ /// @debug is-string('Single quotes'); // true
75
+ /// @debug is-string(without-quotes); // true
76
+ /// @debug is-string(""); // true (пустая строка)
77
+ /// @example scss - Проверка других типов
78
+ /// @debug is-string(42); // false
79
+ /// @debug is-string(true); // false
80
+ /// @debug is-string(#fff); // false
81
+ /// @debug is-string((1, 2, 3)); // false
82
+ /// @debug is-string((key: value)); // false
83
+ /// @example scss - Использование для валидации текстовых параметров
84
+ /// @function to-uppercase($text) {
85
+ /// @if not is-string($text) {
86
+ /// @error "Параметр $text должен быть строкой";
87
+ /// }
88
+ /// @return to-upper-case($text);
89
+ /// }
90
+ ///
91
+ /// @example scss - Обработка контента
92
+ /// @mixin generate-icon($name) {
93
+ /// @if not is-string($name) {
94
+ /// @warn "Название иконки должно быть строкой";
95
+ /// }
96
+ /// content: $name;
97
+ /// }
98
+ ///
99
+ /// @example scss - Условная логика для разных типов
100
+ /// @if is-string($value) {
101
+ /// @debug "Текстовое значение: #{$value}";
102
+ /// } @else if is-number($value) {
103
+ /// @debug "Числовое значение: #{$value}";
104
+ /// }
105
+ /// @param {*} $value - Проверяемое значение
106
+ /// @return {Boolean} - `true` если значение является
107
+ /// строкой, `false` во всех остальных случаях.
108
+ @function is-string($value) {
109
+ @return meta.type-of($value) == string;
110
+ }
@@ -0,0 +1,77 @@
1
+ @use 'sass:meta';
2
+
3
+ /// Возвращает тип данных переданного значения.
4
+ ///
5
+ /// Функция является оберткой над встроенной функцией
6
+ /// `meta.type-of()` для удобства использования и лучшей
7
+ /// читаемости кода. Возвращает строку, содержащую название
8
+ /// типа данных переданного значения.
9
+ ///
10
+ /// Важные особенности функции:
11
+ /// - Является оберткой над `meta.type-of()` для улучшения
12
+ /// читаемости
13
+ /// - Возвращает строковое представление типа данных
14
+ /// - Поддерживает все типы данных Sass
15
+ /// - Не выполняет дополнительных преобразований или проверок
16
+ /// - Возвращает стандартные названия типов Sass
17
+ /// ---
18
+ /// @name is-type
19
+ /// @group utilities-validators
20
+ /// @since 2025.12.27
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/modules/meta#type-of См. также: Официальная документация Sass - Функция meta.type-of()
26
+ /// @link https://sass-lang.com/documentation/values См. также: Официальная документация Sass - Типы данных
27
+ /// @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof MDN Web Docs - Оператор typeof
28
+ /// @link https://css-tricks.com/snippets/sass/ См. также: CSS-Tricks - Коллекция сниппетов Sass
29
+ /// @link https://sass-guidelin.es/ru/#section-39 См. также: Sass Guidelines - Раздел про проверку типов
30
+ /// @link https://frontender.info/sass-type-checking/ См. также: Frontender Magazine - Проверка типов в Sass
31
+ /// @link https://www.w3schools.com/sass/sass_functions_meta.php См. также: W3Schools - Мета-функции в Sass
32
+ /// @link https://habr.com/ru/post/247879/ См. также: Habr - Статья "Sass для верстальщика: проверки и валидация"
33
+ /// @example scss - Определение типа чисел
34
+ /// @debug is-type(10); // "number"
35
+ /// @debug is-type(3.14); // "number"
36
+ /// @debug is-type(10px); // "number"
37
+ /// @debug is-type(-5rem); // "number"
38
+ /// @debug is-type(0); // "number"
39
+ /// @example scss - Определение типа строк
40
+ /// @debug is-type("text"); // "string"
41
+ /// @debug is-type('single'); // "string"
42
+ /// @debug is-type(""); // "string"
43
+ /// @debug is-type("123"); // "string"
44
+ /// @example scss - Определение типа цветов
45
+ /// @debug is-type(#ff0000); // "color"
46
+ /// @debug is-type(red); // "color"
47
+ /// @debug is-type(rgb(255, 0, 0)); // "color"
48
+ /// @debug is-type(hsl(0, 100%, 50%)); // "color"
49
+ /// @example scss - Определение типа списков и карт
50
+ /// @debug is-type((a, b, c)); // "list"
51
+ /// @debug is-type((1 2 3)); // "list"
52
+ /// @debug is-type(()); // "list"
53
+ /// @debug is-type((key: value)); // "map"
54
+ /// @debug is-type((1: a, 2: b)); // "map"
55
+ /// @example scss - Определение типа логических значений и null
56
+ /// @debug is-type(true); // "bool"
57
+ /// @debug is-type(false); // "bool"
58
+ /// @debug is-type(null); // "null"
59
+ /// @param {*} $value - Значение, тип которого нужно определить.
60
+ /// Может быть любого типа: число, строка, цвет, список,
61
+ /// карта, логическое значение, null, arglist или function.
62
+ /// @return {String} - Строка, содержащая название типа данных
63
+ /// переданного значения. Возможные значения:
64
+ /// - `"number"` - для чисел (с единицами или без)
65
+ /// - `"string"` - для строк
66
+ /// - `"color"` - для цветов
67
+ /// - `"list"` - для списков
68
+ /// - `"map"` - для карт (ассоциативных массивов)
69
+ /// - `"bool"` - для логических значений (true/false)
70
+ /// - `"null"` - для значения null
71
+ /// - `"arglist"` - для списков аргументов
72
+ /// - `"function"` - для функций
73
+ /// @throws Не выбрасывает ошибок, корректно обрабатывает
74
+ /// значения любого типа.
75
+ @function is-type($value) {
76
+ @return meta.type-of($value);
77
+ }
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@omnisass/library",
3
+ "version": "0.2.0",
4
+ "description": "Библиотека функций и миксинов, написанная на языке CSS-препроцессора Sass. Она предназначена для того, чтобы упростить, ускорить и улучшить процесс создания стилей для веб-сайтов.",
5
+ "main": "index.scss",
6
+ "scripts": {
7
+ "test": "sass playground/:playground/",
8
+ "test-with-docs": "sass playground/:playground/ && npm run sassdoc",
9
+ "serve": "sass --watch playground/:playground/",
10
+ "sassdoc": "npx sassdoc ./ --config ./.sassdoc.yaml",
11
+ "omni:bump-version": "sh .omnisass/scripts/bump-version.sh"
12
+ },
13
+ "exports": {
14
+ ".": {
15
+ "sass": "./index.scss"
16
+ }
17
+ },
18
+ "keywords": [
19
+ "sass",
20
+ "scss",
21
+ "omnisass",
22
+ "therteenten",
23
+ "css",
24
+ "mixin",
25
+ "function",
26
+ "sass-mixin",
27
+ "sass-function",
28
+ "scss-minix",
29
+ "scss-function",
30
+ "web-development",
31
+ "colors"
32
+ ],
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "https://git@git.sourcecraft.dev/omnisass/library.git"
36
+ },
37
+ "author": {
38
+ "name": "Murad Rustamov (therteenten)",
39
+ "email": "therteenten@ya.ru",
40
+ "url": "https://sourcecraft.dev/users/therteenten/overview"
41
+ },
42
+ "license": "MIT",
43
+ "bugs": {
44
+ "url": "https://sourcecraft.dev/omnisass/library/issues",
45
+ "email": "therteenten@ya.ru"
46
+ },
47
+ "homepage": "https://sourcecraft.dev/therteenten",
48
+ "devDependencies": {
49
+ "sassdoc": "^2.7.4"
50
+ },
51
+ "dependencies": {
52
+ "sass": "^1.97.2"
53
+ }
54
+ }
package/package.scss ADDED
@@ -0,0 +1,156 @@
1
+ @use 'sass:map';
2
+ @use './configs' as libconfigs;
3
+
4
+ ////
5
+ /// В данном файле представлены переменные, описывающие
6
+ /// библиотеку, и, как правило, не требуют модификации
7
+ /// (за исключением переменной `$version`, которая подлежит
8
+ /// обновлению посредством скрипта bump-version.sh).
9
+ /// ---
10
+ /// @group package
11
+ ////
12
+
13
+ /// Библиотека функций и миксинов, написанная на языке
14
+ /// CSS-препроцессора Sass. Она предназначена для того,
15
+ /// чтобы упростить, ускорить и улучшить процесс создания
16
+ /// стилей для веб-сайтов.
17
+ /// ---
18
+ /// @ignore
19
+ /// @name package
20
+ /// @access private
21
+ /// @author Murad Rustamov (therteenten)
22
+ /// @link https://t.me/therteenten Telegram
23
+ /// @link https://t.me/omnisass Telegram (OmniSass)
24
+ /// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft
25
+ /// @link https://sourcecraft.dev/omnisass/library SourceCraft (OmniSass)
26
+ /// @type String
27
+ $package: '@omnisass/library';
28
+
29
+ /// Название библиотеки - используется для идентификации и
30
+ /// ссылок в документации.
31
+ /// ---
32
+ /// @ignore
33
+ /// @name title
34
+ /// @access private
35
+ /// @type String
36
+ $title: "OmniSass";
37
+
38
+ /// Описание библиотеки - краткое пояснение назначения и
39
+ /// преимуществ использования данного набора.
40
+ /// ---
41
+ /// @ignore
42
+ /// @name description
43
+ /// @access private
44
+ /// @type String
45
+ $description: "Набор утилит, миксинов, расширений на языке препроцессора @sass для помощи в ускорении, упрощении и улучщения процесса написания CSS-стилей.";
46
+
47
+ /// Текущая версия библиотеки - используется для контроля
48
+ /// версий и отслеживания изменений.
49
+ /// ---
50
+ /// @ignore Данная переменная не важна для кода. Она дублирует
51
+ /// версию проекта из package.json, благодаря скрипту
52
+ /// bump-version.sh.
53
+ /// @name version
54
+ /// @access private
55
+ /// @type String | Number
56
+ $version: "0.2.0";
57
+
58
+ /// Тип лицензии библиотеки - используется для указания
59
+ /// условий использования и распространения.
60
+ /// ---
61
+ /// @ignore
62
+ /// @name license
63
+ /// @access private
64
+ /// @type String
65
+ $license: "MIT";
66
+
67
+ /// URL исходного кода библиотеки OmniSass - используется
68
+ /// для атрибуции и ссылок на документацию.
69
+ /// ---
70
+ /// @ignore
71
+ /// @name sources
72
+ /// @access private
73
+ /// @type String
74
+ $sources: "https://sourcecraft.dev/omnisass/library";
75
+
76
+ /// )))
77
+ /// ---
78
+ /// @ignore
79
+ /// @name author
80
+ /// @access private
81
+ /// @link https://t.me/therteenten Telegram
82
+ /// @link https://sourcecraft.dev/users/therteenten/overview SourceCraft
83
+ /// @prop {String} author.name [Murad Rustamov (therteenten)] - Автор проекта
84
+ /// @prop {String} author.email [therteenten@ya.ru] - Адрес электронной почты автора проекта
85
+ /// @type Map
86
+ $author: (
87
+ name: "Murad Rustamov (therteenten)",
88
+ email: "therteenten@ya.ru"
89
+ );
90
+
91
+ /// Миксин создающий комментарий с основной информацией о
92
+ /// библиотеке в итоговом CSS-файле.
93
+ /// ---
94
+ /// @name genOmniSassFingerprint
95
+ /// @access public
96
+ /// @example scss - Базовое использование
97
+ /// @include genOmniSassFingerprint();
98
+ /// @example scss - Использование без лога в консоль
99
+ /// @include genOmniSassFingerprint(false);
100
+ /// @example css - Примерный итоговый результат
101
+ /// /*
102
+ /// * @package:
103
+ /// └─ name: @therteenten/omnisass
104
+ /// └─ version: 0.0.0
105
+ /// └─ project: OmniSass
106
+ /// └─ description: Набор утилит, миксинов, расширений на языке препроцессора @sass для помощи в ускорении, упрощении и улучщения процесса написания CSS-стилей.
107
+ /// * @license
108
+ /// └─ MIT
109
+ /// * @author:
110
+ /// └─ name: Murad Rustamov (therteenten)
111
+ /// └─ email: therteenten@ya.ru
112
+ /// * @links:
113
+ /// └─ sources: https://sourcecraft.dev/omnisass/library
114
+ /// */
115
+ /// @output На выходе в итоговом скомпилированном CSS-файле
116
+ /// будет находиться блок комментария с краткой информацией
117
+ /// о проекте OmniSass (имя пакета, версия, автор и etc).
118
+ /// @param {Boolean} $show-console-log [true] - переменная логического
119
+ /// типа (true/false), влияющая на отображение лога об использовании
120
+ /// OmniSass в консоль при компиляции Sass в CSS.
121
+ /// @require {Variable} $package
122
+ /// @require {Variable} $version
123
+ /// @require {Variable} $description
124
+ /// @require {Variable} $sources
125
+ /// @require {Variable} $title
126
+ /// @require {Variable} $author
127
+ /// @require {Variable} $license
128
+ @mixin genOmniSassFingerprint($show-console-log: true) {
129
+
130
+ $-author-name: map.get($author, name);
131
+ $-author-email: map.get($author, email);
132
+
133
+ @if libconfigs.$set-fingerprint == true {
134
+
135
+ /*
136
+ * @package:
137
+ └─ name: #{$package}
138
+ └─ version: #{$version}
139
+ └─ project: #{$title}
140
+ └─ description: #{$description}
141
+ * @license
142
+ └─ #{$license}
143
+ * @author:
144
+ └─ name: #{$-author-name}
145
+ └─ email: #{$-author-email}
146
+ * @links:
147
+ └─ sources: #{$sources}
148
+ */
149
+
150
+ @if ($show-console-log) == true {
151
+ @debug "#{$title} #{$version} using!";
152
+ }
153
+
154
+ }
155
+
156
+ }