@mr.slonn/my-scss-theme 1.0.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 (103) hide show
  1. package/README.md +182 -0
  2. package/index.scss +1 -0
  3. package/package.json +10 -0
  4. package/scss/.sassdocrc +85 -0
  5. package/scss/_font-vars.scss +25 -0
  6. package/scss/_fonts.scss +139 -0
  7. package/scss/abstracts/_animations.scss +819 -0
  8. package/scss/abstracts/_breakpoints.scss +865 -0
  9. package/scss/abstracts/_colors.scss +256 -0
  10. package/scss/abstracts/_functions.scss +3 -0
  11. package/scss/abstracts/_grid.scss +816 -0
  12. package/scss/abstracts/_index.scss +134 -0
  13. package/scss/abstracts/_mixins.scss +1142 -0
  14. package/scss/abstracts/_patterns.scss +657 -0
  15. package/scss/abstracts/_radius.scss +279 -0
  16. package/scss/abstracts/_search-form.scss +271 -0
  17. package/scss/abstracts/_spacing.scss +158 -0
  18. package/scss/abstracts/_typography.scss +477 -0
  19. package/scss/abstracts/_utilities.scss +0 -0
  20. package/scss/abstracts/_variables.scss +3 -0
  21. package/scss/abstracts/breadcrumb/_base.scss +194 -0
  22. package/scss/abstracts/breadcrumb/_index.scss +12 -0
  23. package/scss/abstracts/breadcrumb/_variables.scss +54 -0
  24. package/scss/abstracts/buttons/_base.scss +92 -0
  25. package/scss/abstracts/buttons/_index.scss +31 -0
  26. package/scss/abstracts/buttons/_modifiers.scss +114 -0
  27. package/scss/abstracts/buttons/_variables.scss +98 -0
  28. package/scss/abstracts/buttons/_variants.scss +295 -0
  29. package/scss/abstracts/callout/_base.scss +142 -0
  30. package/scss/abstracts/callout/_index.scss +23 -0
  31. package/scss/abstracts/callout/_variables.scss +27 -0
  32. package/scss/abstracts/cards/_base.scss +74 -0
  33. package/scss/abstracts/cards/_blur.scss +65 -0
  34. package/scss/abstracts/cards/_featured.scss +363 -0
  35. package/scss/abstracts/cards/_hover.scss +99 -0
  36. package/scss/abstracts/cards/_index.scss +51 -0
  37. package/scss/abstracts/cards/_parts.scss +135 -0
  38. package/scss/abstracts/cards/_sizes.scss +52 -0
  39. package/scss/abstracts/cards/_variables.scss +72 -0
  40. package/scss/abstracts/cards/_variants.scss +143 -0
  41. package/scss/abstracts/cards/_vertical.scss +218 -0
  42. package/scss/abstracts/chip/_base.scss +99 -0
  43. package/scss/abstracts/chip/_icon.scss +73 -0
  44. package/scss/abstracts/chip/_index.scss +21 -0
  45. package/scss/abstracts/chip/_variables.scss +57 -0
  46. package/scss/abstracts/chip/_variants.scss +98 -0
  47. package/scss/abstracts/file-card/_base.scss +326 -0
  48. package/scss/abstracts/file-card/_index.scss +12 -0
  49. package/scss/abstracts/file-card/_variables.scss +79 -0
  50. package/scss/abstracts/hero/_base.scss +182 -0
  51. package/scss/abstracts/hero/_index.scss +23 -0
  52. package/scss/abstracts/hero/_variables.scss +59 -0
  53. package/scss/abstracts/info-card/_base.scss +152 -0
  54. package/scss/abstracts/info-card/_index.scss +12 -0
  55. package/scss/abstracts/info-card/_variables.scss +44 -0
  56. package/scss/abstracts/news-card/_base.scss +143 -0
  57. package/scss/abstracts/news-card/_compact.scss +24 -0
  58. package/scss/abstracts/news-card/_featured.scss +83 -0
  59. package/scss/abstracts/news-card/_index.scss +31 -0
  60. package/scss/abstracts/news-card/_variables.scss +44 -0
  61. package/scss/abstracts/project-card/_base.scss +109 -0
  62. package/scss/abstracts/project-card/_index.scss +23 -0
  63. package/scss/abstracts/project-card/_variables.scss +20 -0
  64. package/scss/abstracts/search-form/_base.scss +132 -0
  65. package/scss/abstracts/search-form/_composite.scss +54 -0
  66. package/scss/abstracts/search-form/_index.scss +31 -0
  67. package/scss/abstracts/search-form/_theme.scss +89 -0
  68. package/scss/abstracts/search-form/_variables.scss +39 -0
  69. package/scss/abstracts/section-title/_base.scss +127 -0
  70. package/scss/abstracts/section-title/_index.scss +23 -0
  71. package/scss/abstracts/section-title/_variables.scss +27 -0
  72. package/scss/abstracts/service-card/_base.scss +77 -0
  73. package/scss/abstracts/service-card/_index.scss +23 -0
  74. package/scss/abstracts/service-card/_variables.scss +23 -0
  75. package/scss/abstracts/sidebar-menu/_base.scss +148 -0
  76. package/scss/abstracts/sidebar-menu/_index.scss +12 -0
  77. package/scss/abstracts/sidebar-menu/_variables.scss +55 -0
  78. package/scss/abstracts/stats-card/_base.scss +99 -0
  79. package/scss/abstracts/stats-card/_index.scss +23 -0
  80. package/scss/abstracts/stats-card/_variables.scss +32 -0
  81. package/scss/api.scss +12 -0
  82. package/scss/components/_breadcrumb.scss +140 -0
  83. package/scss/components/_buttons.scss +226 -0
  84. package/scss/components/_callout.scss +118 -0
  85. package/scss/components/_chip.scss +56 -0
  86. package/scss/components/_file-card.scss +182 -0
  87. package/scss/components/_hero.scss +103 -0
  88. package/scss/components/_index.scss +110 -0
  89. package/scss/components/_info-card.scss +103 -0
  90. package/scss/components/_news-card-compact.scss +33 -0
  91. package/scss/components/_news-card-featured.scss +49 -0
  92. package/scss/components/_news-card.scss +303 -0
  93. package/scss/components/_project-card.scss +93 -0
  94. package/scss/components/_search-form.scss +181 -0
  95. package/scss/components/_section-title.scss +94 -0
  96. package/scss/components/_service-card.scss +83 -0
  97. package/scss/components/_sidebar-menu.scss +82 -0
  98. package/scss/components/_stats-card.scss +92 -0
  99. package/scss/components/_tag.scss +144 -0
  100. package/scss/components/_top-nav.scss +537 -0
  101. package/scss/main.scss +73 -0
  102. package/scss/utilities/_index.scss +40 -0
  103. package/scss/utilities/_visibility.scss +224 -0
@@ -0,0 +1,83 @@
1
+ // ============================================
2
+ // NEWS CARD — FEATURED
3
+ // local/common/theme-moexp/src/scss/abstracts/news-card/_featured.scss
4
+ // ============================================
5
+
6
+ ////
7
+ /// Featured карточка новости (с изображением)
8
+ /// Горизонтальная раскладка на десктопе
9
+ /// @group news-card-featured
10
+ /// @author MOEXP Team
11
+ ////
12
+
13
+ @use "../mixins";
14
+ @use "../animations";
15
+ @use "../breakpoints";
16
+ @use "variables" as *;
17
+
18
+ // ─────────────────────────────────────────
19
+ // GRID (вложенный контейнер)
20
+ // ─────────────────────────────────────────
21
+
22
+ /// Grid layout — применяется к __grid, НЕ к контейнеру
23
+ /// @param {String} $image-position [left] - Позиция изображения
24
+ /// @group news-card-featured
25
+ /// @access public
26
+ @mixin news-card-featured-grid($image-position: left) {
27
+ display: grid;
28
+ grid-template-columns: 1fr;
29
+ gap: 0;
30
+
31
+ @include breakpoints.md {
32
+ grid-template-columns: 1fr 1fr;
33
+
34
+ @if $image-position == right {
35
+ > *:first-child {
36
+ order: 2;
37
+ }
38
+ > *:last-child {
39
+ order: 1;
40
+ }
41
+ }
42
+ }
43
+ }
44
+
45
+ // ─────────────────────────────────────────
46
+ // IMAGE WRAPPER
47
+ // ─────────────────────────────────────────
48
+
49
+ /// Обёртка изображения
50
+ /// @group news-card-featured
51
+ /// @access public
52
+ @mixin news-card-featured-image-wrap {
53
+ position: relative;
54
+ height: $news-card-featured-image-height;
55
+ overflow: hidden;
56
+
57
+ @include breakpoints.md {
58
+ height: auto;
59
+ min-height: $news-card-featured-image-height;
60
+ }
61
+ }
62
+
63
+ // ─────────────────────────────────────────
64
+ // IMAGE
65
+ // ─────────────────────────────────────────
66
+
67
+ /// Изображение с hover эффектом
68
+ /// @param {String} $parent-selector - Селектор родителя для hover
69
+ /// @group news-card-featured
70
+ /// @access public
71
+ @mixin news-card-featured-image($parent-selector: null) {
72
+ width: 100%;
73
+ height: 100%;
74
+ object-fit: cover;
75
+
76
+ @include animations.transition(transform, $news-card-transition, animations.$ease-out);
77
+
78
+ @if $parent-selector {
79
+ #{$parent-selector}:hover & {
80
+ transform: scale(1.05);
81
+ }
82
+ }
83
+ }
@@ -0,0 +1,31 @@
1
+ // ============================================
2
+ // NEWS CARD — INDEX
3
+ // local/common/theme-moexp/src/scss/abstracts/news-card/_index.scss
4
+ // ============================================
5
+
6
+ ////
7
+ /// Точка входа модуля карточек новостей
8
+ /// Экспортирует все переменные и миксины
9
+ /// @group news-card
10
+ /// @author MOEXP Team
11
+ ////
12
+
13
+ // ─────────────────────────────────────────
14
+ // EXPORTS
15
+ // ─────────────────────────────────────────
16
+
17
+ /// Переменные
18
+ /// @see news-card/_variables.scss
19
+ @forward "variables";
20
+
21
+ /// Базовые миксины
22
+ /// @see news-card/_base.scss
23
+ @forward "base";
24
+
25
+ /// Featured (с изображением)
26
+ /// @see news-card/_featured.scss
27
+ @forward "featured";
28
+
29
+ /// Compact (без изображения)
30
+ /// @see news-card/_compact.scss
31
+ @forward "compact";
@@ -0,0 +1,44 @@
1
+ // ============================================
2
+ // NEWS CARD — VARIABLES
3
+ // local/common/theme-moexp/src/scss/abstracts/news-card/_variables.scss
4
+ // ============================================
5
+
6
+ ////
7
+ /// Переменные для карточек новостей
8
+ /// @group news-card
9
+ /// @author MOEXP Team
10
+ ////
11
+
12
+ @use "../spacing";
13
+
14
+ // ─────────────────────────────────────────
15
+ // ОБЩИЕ
16
+ // ─────────────────────────────────────────
17
+
18
+ /// Transition duration
19
+ /// @type Number
20
+ /// @group news-card
21
+ $news-card-transition: 300ms !default;
22
+
23
+ /// Padding контента
24
+ /// @type Number
25
+ /// @group news-card
26
+ $news-card-padding: spacing.$spacing-xl !default;
27
+
28
+ // ─────────────────────────────────────────
29
+ // FEATURED (с изображением)
30
+ // ─────────────────────────────────────────
31
+
32
+ /// Высота изображения featured
33
+ /// @type Number
34
+ /// @group news-card
35
+ $news-card-featured-image-height: 16rem !default;
36
+
37
+ // ─────────────────────────────────────────
38
+ // COMPACT (без изображения)
39
+ // ─────────────────────────────────────────
40
+
41
+ /// Padding compact карточки
42
+ /// @type Number
43
+ /// @group news-card
44
+ $news-card-compact-padding: spacing.$spacing-lg !default;
@@ -0,0 +1,109 @@
1
+ // ============================================
2
+ // PROJECT CARD — BASE
3
+ // local/common/theme-moexp/src/scss/abstracts/project-card/_base.scss
4
+ // ============================================
5
+
6
+ ////
7
+ /// Базовые миксины карточки проекта
8
+ /// @group project-card-base
9
+ /// @author MOEXP Team
10
+ ////
11
+
12
+ @use "../typography";
13
+ @use "../spacing";
14
+ @use "../mixins";
15
+ @use "../radius";
16
+ @use "../animations";
17
+ @use "../cards";
18
+ @use "variables" as *;
19
+
20
+ // ─────────────────────────────────────────
21
+ // БАЗОВЫЕ МИКСИНЫ
22
+ // ─────────────────────────────────────────
23
+
24
+ /// Базовые стили карточки
25
+ /// @output Стили контейнера
26
+ /// @group project-card-base
27
+ @mixin base {
28
+ @include cards.card-vertical;
29
+
30
+ &:focus-visible {
31
+ @include mixins.focus-ring(ring);
32
+ }
33
+ }
34
+
35
+ /// Badge года
36
+ /// @param {String} $bg-color [background-section] - Фон
37
+ /// @param {String} $text-color [foreground-muted] - Цвет текста
38
+ /// @output Стили badge
39
+ /// @group project-card-base
40
+ @mixin year($bg-color: background-section, $text-color: foreground-muted) {
41
+ position: absolute;
42
+ top: spacing.$spacing-lg;
43
+ left: spacing.$spacing-lg;
44
+ z-index: 1;
45
+
46
+ padding: spacing.$spacing-xs spacing.$spacing-sm;
47
+
48
+ font-size: typography.$font-size-xs;
49
+ font-weight: typography.$font-weight-semibold;
50
+ line-height: typography.$line-height-normal;
51
+
52
+ @include mixins.bg-color($bg-color);
53
+ @include mixins.text-color($text-color);
54
+ @include radius.rounded(sm);
55
+ }
56
+
57
+ /// Обёртка изображения
58
+ /// @param {Number} $height [$image-height] - Высота
59
+ /// @output Стили контейнера изображения
60
+ /// @group project-card-base
61
+ @mixin image-wrap($height: $image-height) {
62
+ @include cards.card-vertical-image-wrap($height);
63
+ }
64
+
65
+ /// Изображение с hover
66
+ /// @output Стили изображения
67
+ /// @group project-card-base
68
+ @mixin image {
69
+ @include cards.image-cover;
70
+
71
+ @include animations.transition(transform, $transition, animations.$ease-out);
72
+ }
73
+
74
+ /// Контент карточки
75
+ /// @output Padding контента
76
+ /// @group project-card-base
77
+ @mixin content {
78
+ @include cards.card-vertical-content;
79
+ }
80
+
81
+ /// Мета-информация (локация)
82
+ /// @param {String} $color [accent-on-light] - Цвет
83
+ /// @output Стили meta
84
+ /// @group project-card-base
85
+ @mixin meta($color: accent-on-light) {
86
+ @include cards.card-vertical-meta($color);
87
+ }
88
+
89
+ /// Заголовок с hover
90
+ /// @param {String} $color [foreground] - Цвет
91
+ /// @param {String} $hover-color [accent-on-light] - Цвет при hover
92
+ /// @output Стили заголовка
93
+ /// @group project-card-base
94
+ @mixin title($color: foreground, $hover-color: accent-on-light) {
95
+ @include cards.card-vertical-title($color, $hover-color);
96
+
97
+ span {
98
+ font-weight: typography.$font-weight-bold;
99
+ }
100
+ }
101
+
102
+ /// Описание
103
+ /// @param {String} $color [foreground-muted] - Цвет
104
+ /// @param {Number} $lines [2] - Количество строк для truncate
105
+ /// @output Стили описания
106
+ /// @group project-card-base
107
+ @mixin description($color: foreground-muted, $lines: 2) {
108
+ @include cards.card-vertical-description($color, $lines);
109
+ }
@@ -0,0 +1,23 @@
1
+ // ============================================
2
+ // PROJECT CARD — INDEX
3
+ // local/common/theme-moexp/src/scss/abstracts/project-card/_index.scss
4
+ // ============================================
5
+
6
+ ////
7
+ /// Точка входа модуля карточки проекта
8
+ /// Экспортирует все переменные и миксины
9
+ /// @group project-card
10
+ /// @author MOEXP Team
11
+ ////
12
+
13
+ // ─────────────────────────────────────────
14
+ // EXPORTS
15
+ // ─────────────────────────────────────────
16
+
17
+ /// Переменные
18
+ /// @see project-card/_variables.scss
19
+ @forward "variables";
20
+
21
+ /// Базовые миксины
22
+ /// @see project-card/_base.scss
23
+ @forward "base";
@@ -0,0 +1,20 @@
1
+ // ============================================
2
+ // PROJECT CARD — VARIABLES
3
+ // local/common/theme-moexp/src/scss/abstracts/project-card/_variables.scss
4
+ // ============================================
5
+
6
+ ////
7
+ /// Переменные карточки проекта
8
+ /// @group project-card-variables
9
+ /// @author MOEXP Team
10
+ ////
11
+
12
+ /// Высота изображения
13
+ /// @type Number
14
+ /// @group project-card-variables
15
+ $image-height: 12rem !default;
16
+
17
+ /// Transition duration
18
+ /// @type Number
19
+ /// @group project-card-variables
20
+ $transition: 300ms !default;
@@ -0,0 +1,132 @@
1
+ // ============================================
2
+ // SEARCH FORM — BASE
3
+ // local/common/theme-moexp/src/scss/abstracts/search-form/_base.scss
4
+ // ============================================
5
+
6
+ ////
7
+ /// Базовые миксины формы поиска
8
+ /// Структура контейнера, input и button
9
+ /// @group search-form
10
+ /// @author MOEXP Team
11
+ ////
12
+
13
+ @use "../spacing";
14
+ @use "../typography";
15
+ @use "../radius";
16
+ @use "variables" as *;
17
+
18
+ // ─────────────────────────────────────────
19
+ // CONTAINER
20
+ // ─────────────────────────────────────────
21
+
22
+ /// Базовая структура контейнера формы поиска
23
+ /// Устанавливает размеры и relative positioning для абсолютной кнопки
24
+ ///
25
+ /// @param {Length} $width [$search-form-width] - Ширина формы
26
+ /// @param {Length} $height [$search-form-height] - Высота формы
27
+ /// @example scss
28
+ /// .my-search {
29
+ /// @include search-form-base;
30
+ /// }
31
+ /// @example scss - Кастомные размеры
32
+ /// .my-search {
33
+ /// @include search-form-base(20rem, 3rem);
34
+ /// }
35
+ /// @output position, width, height
36
+ /// @group search-form
37
+ /// @access public
38
+ @mixin search-form-base($width: $search-form-width, $height: $search-form-height) {
39
+ position: relative;
40
+ width: $width;
41
+ height: $height;
42
+
43
+ // Доступность: минимальный размер touch target
44
+ min-height: 44px;
45
+ }
46
+
47
+ // ─────────────────────────────────────────
48
+ // INPUT
49
+ // ─────────────────────────────────────────
50
+
51
+ /// Базовые стили поля ввода поиска
52
+ /// Input занимает 100% размеров контейнера
53
+ ///
54
+ /// @example scss
55
+ /// .my-search__input {
56
+ /// @include search-form-input-base;
57
+ /// }
58
+ /// @output width: 100%, height: 100%, padding, font-size, border-radius
59
+ /// @group search-form
60
+ /// @access public
61
+ @mixin search-form-input-base {
62
+ // Занимаем всё пространство формы
63
+ width: 100%;
64
+ height: 100%;
65
+
66
+ // Отступы
67
+ padding-left: spacing.$spacing-md;
68
+ padding-right: $search-form-icon-offset + $search-form-icon-size + 0.5rem;
69
+
70
+ // Типографика
71
+ font-size: typography.$font-size-sm;
72
+
73
+ // Скругление
74
+ border-radius: radius.$radius-sm;
75
+
76
+ // Убираем стандартные стили
77
+ appearance: none;
78
+ -webkit-appearance: none;
79
+
80
+ &::-webkit-search-cancel-button,
81
+ &::-webkit-search-decoration {
82
+ -webkit-appearance: none;
83
+ appearance: none;
84
+ }
85
+ }
86
+
87
+ // ─────────────────────────────────────────
88
+ // BUTTON
89
+ // ─────────────────────────────────────────
90
+
91
+ /// Базовые стили кнопки поиска (иконка)
92
+ /// Позиционирование и размеры SVG
93
+ ///
94
+ /// @example scss
95
+ /// .my-search__button {
96
+ /// @include search-form-button-base;
97
+ /// }
98
+ /// @output position, размеры, сброс стилей кнопки
99
+ /// @group search-form
100
+ /// @access public
101
+ @mixin search-form-button-base {
102
+ position: absolute;
103
+ right: $search-form-icon-offset;
104
+ top: 50%;
105
+ transform: translateY(-50%);
106
+
107
+ // Сброс стилей кнопки
108
+ padding: 0;
109
+ margin: 0;
110
+ background: transparent;
111
+ border: none;
112
+ cursor: pointer;
113
+
114
+ // Доступность: минимальный размер touch target
115
+ // Увеличиваем кликабельную область
116
+ &::before {
117
+ content: "";
118
+ position: absolute;
119
+ top: 50%;
120
+ left: 50%;
121
+ transform: translate(-50%, -50%);
122
+ width: 44px;
123
+ height: 44px;
124
+ }
125
+
126
+ svg {
127
+ width: $search-form-icon-size;
128
+ height: $search-form-icon-size;
129
+ fill: currentColor;
130
+ display: block;
131
+ }
132
+ }
@@ -0,0 +1,54 @@
1
+ // ============================================
2
+ // SEARCH FORM — COMPOSITE
3
+ // local/common/theme-moexp/src/scss/abstracts/search-form/_composite.scss
4
+ // ============================================
5
+
6
+ ////
7
+ /// Комбинированные миксины формы поиска
8
+ /// Быстрое создание полной формы одним вызовом
9
+ /// @group search-form
10
+ /// @author MOEXP Team
11
+ ////
12
+
13
+ @use "variables" as *;
14
+ @use "base" as *;
15
+ @use "theme" as *;
16
+
17
+ // ─────────────────────────────────────────
18
+ // FULL SEARCH FORM
19
+ // ─────────────────────────────────────────
20
+
21
+ /// Полный набор стилей для контейнера формы поиска
22
+ /// Комбинирует base + структуру для input и button
23
+ ///
24
+ /// @param {String} $color - Имя цвета темы
25
+ /// @param {Length} $width [$search-form-width] - Ширина формы
26
+ /// @param {Length} $height [$search-form-height] - Высота формы
27
+ /// @example scss - Быстрое создание формы
28
+ /// .header__search-form {
29
+ /// @include search-form($color: primary-foreground);
30
+ /// }
31
+ /// @example scss - Кастомные размеры
32
+ /// .hero__search-form {
33
+ /// @include search-form(primary-foreground, 25rem, 3.5rem);
34
+ /// }
35
+ /// @output Полная структура формы с темой
36
+ /// @group search-form
37
+ /// @access public
38
+ @mixin search-form($color, $width: $search-form-width, $height: $search-form-height) {
39
+ @include search-form-base($width, $height);
40
+
41
+ // Стили для input внутри
42
+ input,
43
+ &__input {
44
+ @include search-form-input-base;
45
+ @include search-form-input-theme($color);
46
+ }
47
+
48
+ // Стили для button внутри
49
+ button,
50
+ &__button {
51
+ @include search-form-button-base;
52
+ @include search-form-button-theme($color);
53
+ }
54
+ }
@@ -0,0 +1,31 @@
1
+ // ============================================
2
+ // SEARCH FORM — INDEX
3
+ // local/common/theme-moexp/src/scss/abstracts/search-form/_index.scss
4
+ // ============================================
5
+
6
+ ////
7
+ /// Точка входа модуля формы поиска
8
+ /// Экспортирует все переменные и миксины
9
+ /// @group search-form
10
+ /// @author MOEXP Team
11
+ ////
12
+
13
+ // ─────────────────────────────────────────
14
+ // EXPORTS
15
+ // ─────────────────────────────────────────
16
+
17
+ /// Переменные формы поиска
18
+ /// @see search-form/_variables.scss
19
+ @forward "variables";
20
+
21
+ /// Базовые миксины
22
+ /// @see search-form/_base.scss
23
+ @forward "base";
24
+
25
+ /// Темизация
26
+ /// @see search-form/_theme.scss
27
+ @forward "theme";
28
+
29
+ /// Комбинированные миксины
30
+ /// @see search-form/_composite.scss
31
+ @forward "composite";
@@ -0,0 +1,89 @@
1
+ // ============================================
2
+ // SEARCH FORM — THEME
3
+ // local/common/theme-moexp/src/scss/abstracts/search-form/_theme.scss
4
+ // ============================================
5
+
6
+ ////
7
+ /// Темизация формы поиска
8
+ /// Цвета для input и button в разных контекстах
9
+ /// @group search-form
10
+ /// @author MOEXP Team
11
+ ////
12
+
13
+ @use "../mixins";
14
+ @use "../animations";
15
+
16
+ // ─────────────────────────────────────────
17
+ // INPUT THEME
18
+ // ─────────────────────────────────────────
19
+
20
+ /// Тема для поля ввода поиска
21
+ /// Устанавливает цвета фона, границы, текста, placeholder
22
+ ///
23
+ /// @param {String} $color - Имя цвета из палитры темы
24
+ /// @param {Number} $bg-alpha [0.1] - Прозрачность фона
25
+ /// @param {Number} $border-alpha [0.2] - Прозрачность границы
26
+ /// @param {Number} $placeholder-alpha [0.5] - Прозрачность placeholder
27
+ /// @require {mixin} mixins.hsl-prop
28
+ /// @require {mixin} mixins.border-hsl
29
+ /// @require {mixin} mixins.text-color
30
+ /// @require {mixin} animations.input-focus-light
31
+ /// @example scss - На тёмном фоне
32
+ /// .search__input {
33
+ /// @include search-form-input-theme(primary-foreground);
34
+ /// }
35
+ /// @example scss - На светлом фоне
36
+ /// .search__input {
37
+ /// @include search-form-input-theme(primary, 0.05, 0.15);
38
+ /// }
39
+ /// @output background-color, border, color, placeholder, focus
40
+ /// @group search-form
41
+ /// @access public
42
+ @mixin search-form-input-theme($color, $bg-alpha: 0.1, $border-alpha: 0.2, $placeholder-alpha: 0.5) {
43
+ @include mixins.hsl-prop(background-color, $color, $bg-alpha);
44
+ @include mixins.border-hsl(1px, solid, $color, $border-alpha);
45
+ @include mixins.text-color($color);
46
+
47
+ &::placeholder {
48
+ @include mixins.hsl-prop(color, $color, $placeholder-alpha);
49
+ }
50
+
51
+ @include animations.input-focus-light($color);
52
+ }
53
+
54
+ // ─────────────────────────────────────────
55
+ // BUTTON THEME
56
+ // ─────────────────────────────────────────
57
+
58
+ /// Тема для кнопки поиска
59
+ /// Устанавливает цвет иконки и hover-состояние
60
+ ///
61
+ /// @param {String} $color - Имя цвета из палитры темы
62
+ /// @param {Number} $alpha [0.6] - Прозрачность цвета
63
+ /// @param {Number} $hover-alpha [1] - Прозрачность при hover
64
+ /// @require {mixin} mixins.hsl-prop
65
+ /// @require {mixin} mixins.focus-ring
66
+ /// @require {mixin} animations.transition-colors
67
+ /// @example scss
68
+ /// .search__button {
69
+ /// @include search-form-button-theme(primary-foreground);
70
+ /// }
71
+ /// @output color, transition, hover
72
+ /// @group search-form
73
+ /// @access public
74
+ @mixin search-form-button-theme($color, $alpha: 0.6, $hover-alpha: 1) {
75
+ @include mixins.hsl-prop(color, $color, $alpha);
76
+ @include animations.transition-colors;
77
+
78
+ &:hover {
79
+ @include mixins.hsl-prop(color, $color, $hover-alpha);
80
+ }
81
+
82
+ &:focus {
83
+ outline: none;
84
+ }
85
+
86
+ &:focus-visible {
87
+ @include mixins.focus-ring($color);
88
+ }
89
+ }
@@ -0,0 +1,39 @@
1
+ // ============================================
2
+ // SEARCH FORM — VARIABLES
3
+ // local/common/theme-moexp/src/scss/abstracts/search-form/_variables.scss
4
+ // ============================================
5
+
6
+ ////
7
+ /// Переменные формы поиска
8
+ /// Токены дизайна для размеров и позиционирования
9
+ /// @group search-form
10
+ /// @author MOEXP Team
11
+ ////
12
+
13
+ // ─────────────────────────────────────────
14
+ // РАЗМЕРЫ ФОРМЫ
15
+ // ─────────────────────────────────────────
16
+
17
+ /// Ширина формы поиска по умолчанию
18
+ /// @type Length
19
+ /// @group search-form
20
+ $search-form-width: 15rem !default;
21
+
22
+ /// Высота формы поиска по умолчанию
23
+ /// @type Length
24
+ /// @group search-form
25
+ $search-form-height: 2.5rem !default;
26
+
27
+ // ─────────────────────────────────────────
28
+ // ИКОНКА
29
+ // ─────────────────────────────────────────
30
+
31
+ /// Размер иконки поиска
32
+ /// @type Length
33
+ /// @group search-form
34
+ $search-form-icon-size: 1.2rem !default;
35
+
36
+ /// Отступ справа для иконки
37
+ /// @type Length
38
+ /// @group search-form
39
+ $search-form-icon-offset: 1.25rem !default;