@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,52 @@
1
+ // ============================================
2
+ // CARDS — SIZES
3
+ // local/common/theme-moexp/src/scss/abstracts/cards/_sizes.scss
4
+ // ============================================
5
+
6
+ ////
7
+ /// Размеры карточек
8
+ /// Модификаторы padding и radius
9
+ /// @group cards-sizes
10
+ /// @author MOEXP Team
11
+ ////
12
+
13
+ @use "../radius";
14
+ @use "variables" as *;
15
+
16
+ // ─────────────────────────────────────────
17
+ // SMALL
18
+ // ─────────────────────────────────────────
19
+
20
+ /// Маленькая карточка — меньше padding и radius
21
+ /// @require {mixin} radius.rounded
22
+ /// @example scss
23
+ /// .card--sm {
24
+ /// @include card-base;
25
+ /// @include card-sm;
26
+ /// }
27
+ /// @output padding: 1rem; border-radius: md;
28
+ /// @group cards-sizes
29
+ /// @access public
30
+ @mixin card-sm {
31
+ padding: $card-padding-sm;
32
+ @include radius.rounded(md);
33
+ }
34
+
35
+ // ─────────────────────────────────────────
36
+ // LARGE
37
+ // ─────────────────────────────────────────
38
+
39
+ /// Большая карточка — больше padding и radius
40
+ /// @require {mixin} radius.rounded
41
+ /// @example scss
42
+ /// .card--lg {
43
+ /// @include card-base;
44
+ /// @include card-lg;
45
+ /// }
46
+ /// @output padding: 2rem; border-radius: xl;
47
+ /// @group cards-sizes
48
+ /// @access public
49
+ @mixin card-lg {
50
+ padding: $card-padding-lg;
51
+ @include radius.rounded(xl);
52
+ }
@@ -0,0 +1,72 @@
1
+ // ============================================
2
+ // CARDS — VARIABLES
3
+ // local/common/theme-moexp/src/scss/abstracts/cards/_variables.scss
4
+ // ============================================
5
+
6
+ ////
7
+ /// Переменные системы карточек
8
+ /// Токены дизайна для размеров, отступов и анимаций
9
+ /// @group cards-variables
10
+ /// @author MOEXP Team
11
+ ////
12
+
13
+ @use "../spacing";
14
+ @use "../radius";
15
+
16
+ // ─────────────────────────────────────────
17
+ // БАЗОВЫЕ ПЕРЕМЕННЫЕ
18
+ // ─────────────────────────────────────────
19
+
20
+ /// Стандартный padding карточки (1.5rem / 24px)
21
+ /// @type Number
22
+ /// @group cards-variables
23
+ $card-padding: spacing.$spacing-lg !default;
24
+
25
+ /// Маленький padding карточки (1rem / 16px)
26
+ /// @type Number
27
+ /// @group cards-variables
28
+ $card-padding-sm: spacing.$spacing-md !default;
29
+
30
+ /// Большой padding карточки (2rem / 32px)
31
+ /// @type Number
32
+ /// @group cards-variables
33
+ $card-padding-lg: spacing.$spacing-xl !default;
34
+
35
+ /// Border-radius карточки (8px)
36
+ /// @type Number
37
+ /// @group cards-variables
38
+ $card-radius: radius.$radius-lg !default;
39
+
40
+ /// Прозрачность border по умолчанию
41
+ /// @type Number
42
+ /// @group cards-variables
43
+ $card-border-alpha: 0.5 !default;
44
+
45
+ /// Прозрачность фона по умолчанию
46
+ /// @type Number
47
+ /// @group cards-variables
48
+ $card-bg-alpha: 0.95 !default;
49
+
50
+ /// Длительность transition карточки
51
+ /// @type Number
52
+ /// @group cards-variables
53
+ $card-transition-duration: 300ms !default;
54
+
55
+ // ─────────────────────────────────────────
56
+ // FEATURED CARD ПЕРЕМЕННЫЕ
57
+ // ─────────────────────────────────────────
58
+
59
+ /// Высота изображения featured card (16rem / 256px)
60
+ /// @type Number
61
+ /// @group cards-featured
62
+ $card-featured-image-height: 16rem !default;
63
+
64
+ /// Padding контента featured card (2rem / 32px)
65
+ /// @type Number
66
+ /// @group cards-featured
67
+ $card-featured-padding: spacing.$spacing-xl !default;
68
+
69
+ /// Длительность transition featured card
70
+ /// @type Number
71
+ /// @group cards-featured
72
+ $card-featured-transition: 300ms !default;
@@ -0,0 +1,143 @@
1
+ // ============================================
2
+ // CARDS — VARIANTS
3
+ // local/common/theme-moexp/src/scss/abstracts/cards/_variants.scss
4
+ // ============================================
5
+
6
+ ////
7
+ /// Готовые варианты карточек
8
+ /// Interactive, Service, Static, Link, Glass-interactive
9
+ /// @group cards-variants
10
+ /// @author MOEXP Team
11
+ ////
12
+
13
+ @use "../mixins";
14
+ @use "../radius";
15
+ @use "../animations";
16
+ @use "variables" as *;
17
+ @use "base" as *;
18
+ @use "hover" as *;
19
+
20
+ // ─────────────────────────────────────────
21
+ // INTERACTIVE
22
+ // ─────────────────────────────────────────
23
+
24
+ /// Стандартная интерактивная карточка
25
+ /// Соответствует Tailwind: rounded-lg border shadow-sm p-6
26
+ /// hover:shadow-lg transition-all bg-card/95 border-border/50 hover:border-accent/50
27
+ /// @require {mixin} card-base
28
+ /// @require {mixin} card-hover-shadow
29
+ /// @example scss
30
+ /// .service-card {
31
+ /// @include card-interactive;
32
+ /// }
33
+ /// @output Полные стили интерактивной карточки
34
+ /// @group cards-variants
35
+ /// @access public
36
+ @mixin card-interactive {
37
+ @include card-base;
38
+ @include card-hover-shadow(true);
39
+ cursor: pointer;
40
+ }
41
+
42
+ // ─────────────────────────────────────────
43
+ // SERVICE
44
+ // ─────────────────────────────────────────
45
+
46
+ /// Service Card — карточка услуги
47
+ /// Из оригинального Tailwind шаблона
48
+ /// @require {mixin} mixins.bg-color
49
+ /// @require {mixin} mixins.border-hsl
50
+ /// @require {mixin} radius.rounded-var
51
+ /// @require {mixin} animations.transition
52
+ /// @require {mixin} mixins.shadow-lg
53
+ /// @require {mixin} mixins.border-color-hsl
54
+ /// @example scss
55
+ /// .services__item {
56
+ /// @include card-service;
57
+ /// }
58
+ /// @output Карточка услуги с hover эффектами
59
+ /// @group cards-variants
60
+ /// @access public
61
+ @mixin card-service {
62
+ position: relative;
63
+ overflow: hidden;
64
+
65
+ padding: $card-padding;
66
+
67
+ @include mixins.bg-color(background-card);
68
+ @include mixins.border-hsl(1px, solid, border, 0.5);
69
+ @include radius.rounded-var(-4px); // calc(var(--radius) - 4px)
70
+
71
+ @include animations.transition(all, $card-transition-duration, animations.$ease-in-out);
72
+
73
+ &:hover {
74
+ @include mixins.shadow-lg;
75
+ @include mixins.border-color-hsl(accent, 0.5);
76
+ }
77
+ }
78
+
79
+ // ─────────────────────────────────────────
80
+ // GLASS INTERACTIVE
81
+ // ─────────────────────────────────────────
82
+
83
+ /// Карточка с glassmorphism и интерактивностью
84
+ /// @require {mixin} card-glass
85
+ /// @require {mixin} card-hover-shadow
86
+ /// @example scss
87
+ /// .overlay-card {
88
+ /// @include card-glass-interactive;
89
+ /// }
90
+ /// @output Glass карточка с hover
91
+ /// @group cards-variants
92
+ /// @access public
93
+ @mixin card-glass-interactive {
94
+ @include card-glass;
95
+ @include card-hover-shadow(true);
96
+ cursor: pointer;
97
+ }
98
+
99
+ // ─────────────────────────────────────────
100
+ // STATIC
101
+ // ─────────────────────────────────────────
102
+
103
+ /// Простая карточка без hover эффектов
104
+ /// Для статичного контента
105
+ /// @require {mixin} card-base
106
+ /// @example scss
107
+ /// .info-card {
108
+ /// @include card-static;
109
+ /// }
110
+ /// @output Статичная карточка
111
+ /// @group cards-variants
112
+ /// @access public
113
+ @mixin card-static {
114
+ @include card-base(background-card, 1, border, 0.3);
115
+ }
116
+
117
+ // ─────────────────────────────────────────
118
+ // LINK
119
+ // ─────────────────────────────────────────
120
+
121
+ /// Карточка-ссылка — вся кликабельная
122
+ /// С focus-visible для accessibility
123
+ /// @require {mixin} card-interactive
124
+ /// @require {mixin} mixins.focus-ring
125
+ /// @example scss
126
+ /// a.project-card {
127
+ /// @include card-link;
128
+ /// }
129
+ /// @example html
130
+ /// <a href="/project" class="project-card">...</a>
131
+ /// @output Кликабельная карточка с focus ring
132
+ /// @group cards-variants
133
+ /// @access public
134
+ @mixin card-link {
135
+ @include card-interactive;
136
+ text-decoration: none;
137
+ color: inherit;
138
+ display: block;
139
+
140
+ &:focus-visible {
141
+ @include mixins.focus-ring(ring);
142
+ }
143
+ }
@@ -0,0 +1,218 @@
1
+ // ============================================
2
+ // CARDS — VERTICAL
3
+ // local/common/theme-moexp/src/scss/abstracts/cards/_vertical.scss
4
+ // ============================================
5
+
6
+ ////
7
+ /// Вертикальные карточки (изображение сверху)
8
+ /// Контейнер, изображение, контент, мета, title, description
9
+ /// @group cards-vertical
10
+ /// @author MOEXP Team
11
+ ////
12
+
13
+ @use "../mixins";
14
+ @use "../radius";
15
+ @use "../spacing";
16
+ @use "../typography";
17
+ @use "../animations";
18
+ @use "variables" as *;
19
+
20
+ // ─────────────────────────────────────────
21
+ // VERTICAL CONTAINER
22
+ // ─────────────────────────────────────────
23
+
24
+ /// Вертикальная карточка — контейнер
25
+ /// @require {mixin} mixins.bg-color
26
+ /// @require {mixin} mixins.border-hsl
27
+ /// @require {mixin} radius.rounded
28
+ /// @require {mixin} mixins.shadow-sm
29
+ /// @require {mixin} animations.transition
30
+ /// @require {mixin} mixins.shadow-lg
31
+ /// @require {mixin} mixins.border-color-hsl
32
+ /// @example scss
33
+ /// .article-card {
34
+ /// @include card-vertical;
35
+ /// }
36
+ /// @output Контейнер вертикальной карточки
37
+ /// @group cards-vertical
38
+ /// @access public
39
+ @mixin card-vertical {
40
+ position: relative;
41
+ overflow: hidden;
42
+ display: block;
43
+ text-decoration: none;
44
+ color: inherit;
45
+
46
+ @include mixins.bg-color(background-card);
47
+ @include mixins.border-hsl(1px, solid, border, 0.5);
48
+ @include radius.rounded(lg);
49
+ @include mixins.shadow-sm;
50
+
51
+ cursor: pointer;
52
+
53
+ @include animations.transition((box-shadow, border-color), $card-transition-duration, animations.$ease-in-out);
54
+
55
+ &:hover {
56
+ @include mixins.shadow-lg;
57
+ @include mixins.border-color-hsl(accent, 0.5);
58
+ }
59
+ }
60
+
61
+ // ─────────────────────────────────────────
62
+ // VERTICAL IMAGE
63
+ // ─────────────────────────────────────────
64
+
65
+ /// Обёртка изображения вертикальной карточки
66
+ /// @param {Number} $height [12rem] - Высота изображения
67
+ /// @param {Number} $aspect-ratio [null] - Или aspect-ratio (16/9, 4/3)
68
+ /// @example scss - С фиксированной высотой
69
+ /// .article-card__image-wrap {
70
+ /// @include card-vertical-image-wrap(10rem);
71
+ /// }
72
+ /// @example scss - С aspect-ratio
73
+ /// .article-card__image-wrap {
74
+ /// @include card-vertical-image-wrap($aspect-ratio: 16/9);
75
+ /// }
76
+ /// @output Контейнер изображения
77
+ /// @group cards-vertical
78
+ /// @access public
79
+ @mixin card-vertical-image-wrap($height: 12rem, $aspect-ratio: null) {
80
+ position: relative;
81
+ overflow: hidden;
82
+
83
+ @if $aspect-ratio {
84
+ aspect-ratio: $aspect-ratio;
85
+ } @else {
86
+ height: $height;
87
+ }
88
+ }
89
+
90
+ /// Изображение вертикальной карточки с hover
91
+ /// @require {mixin} animations.transition
92
+ /// @example scss
93
+ /// .article-card__image {
94
+ /// @include card-vertical-image;
95
+ /// }
96
+ /// @output Изображение со scale при hover
97
+ /// @group cards-vertical
98
+ /// @access public
99
+ @mixin card-vertical-image {
100
+ width: 100%;
101
+ height: 100%;
102
+ // object-fit: cover;
103
+
104
+ @include animations.transition(transform, $card-transition-duration, animations.$ease-out);
105
+
106
+ [class*="card"]:hover &,
107
+ a:hover & {
108
+ transform: scale(1.05);
109
+ }
110
+ }
111
+
112
+ // ─────────────────────────────────────────
113
+ // VERTICAL CONTENT
114
+ // ─────────────────────────────────────────
115
+
116
+ /// Контент вертикальной карточки
117
+ /// @param {Number} $padding [$card-padding] - Padding
118
+ /// @example scss
119
+ /// .article-card__content {
120
+ /// @include card-vertical-content;
121
+ /// }
122
+ /// @output Padding контента
123
+ /// @group cards-vertical
124
+ /// @access public
125
+ @mixin card-vertical-content($padding: $card-padding) {
126
+ padding: $padding;
127
+ }
128
+
129
+ /// Мета вертикальной карточки (дата, категория)
130
+ /// @param {String} $color [accent-on-light] - Цвет текста
131
+ /// @require {mixin} mixins.text-color
132
+ /// @example scss
133
+ /// .article-card__meta {
134
+ /// @include card-vertical-meta;
135
+ /// }
136
+ /// @output Flex строка с иконкой
137
+ /// @group cards-vertical
138
+ /// @access public
139
+ @mixin card-vertical-meta($color: accent-on-light) {
140
+ display: flex;
141
+ align-items: center;
142
+ gap: 0.5rem;
143
+ margin-bottom: 0.75rem;
144
+
145
+ @include mixins.text-color($color);
146
+ font-size: typography.$font-size-sm;
147
+
148
+ svg {
149
+ width: 1rem;
150
+ height: 1rem;
151
+ flex-shrink: 0;
152
+ }
153
+ }
154
+
155
+ /// Заголовок вертикальной карточки с hover
156
+ /// @param {String} $color [foreground] - Цвет текста
157
+ /// @param {String} $hover-color [accent-on-light] - Цвет при hover
158
+ /// @require {mixin} mixins.text-color
159
+ /// @require {mixin} animations.transition
160
+ /// @example scss
161
+ /// .article-card__title {
162
+ /// @include card-vertical-title;
163
+ /// }
164
+ /// @output Заголовок с hover цветом
165
+ /// @group cards-vertical
166
+ /// @access public
167
+ @mixin card-vertical-title($color: foreground, $hover-color: accent-on-light) {
168
+ font-weight: typography.$font-weight-semibold;
169
+ font-size: typography.$font-size-lg;
170
+ line-height: typography.$line-height-snug;
171
+ margin-bottom: 0.5rem;
172
+
173
+ @include mixins.text-color($color);
174
+ @include animations.transition(color, $card-transition-duration);
175
+
176
+ [class*="card"]:hover &,
177
+ a:hover & {
178
+ @include mixins.text-color($hover-color);
179
+ }
180
+ }
181
+
182
+ /// Описание вертикальной карточки с truncate
183
+ /// @param {String} $color [foreground-muted] - Цвет текста
184
+ /// @param {Number} $lines [3] - Количество строк для truncate
185
+ /// @require {mixin} mixins.text-color
186
+ /// @require {mixin} mixins.text-truncate
187
+ /// @example scss
188
+ /// .article-card__description {
189
+ /// @include card-vertical-description('foreground-muted', 2);
190
+ /// }
191
+ /// @output Описание с line-clamp
192
+ /// @group cards-vertical
193
+ /// @access public
194
+ @mixin card-vertical-description($color: foreground-muted, $lines: 3) {
195
+ font-size: typography.$font-size-sm;
196
+ line-height: typography.$line-height-relaxed;
197
+
198
+ @include mixins.text-color($color);
199
+ @include mixins.text-truncate($lines);
200
+ }
201
+
202
+ // ─────────────────────────────────────────
203
+ // IMAGE COVER UTILITY
204
+ // ─────────────────────────────────────────
205
+
206
+ /// Изображение cover — заполняет контейнер
207
+ /// @example scss
208
+ /// .card__img {
209
+ /// @include image-cover;
210
+ /// }
211
+ /// @output width: 100%; height: 100%; object-fit: cover;
212
+ /// @group cards-vertical
213
+ /// @access public
214
+ @mixin image-cover {
215
+ width: 100%;
216
+ height: 100%;
217
+ object-fit: cover;
218
+ }
@@ -0,0 +1,99 @@
1
+ ////
2
+ /// Chip Base — базовые миксины
3
+ /// @group chip-base
4
+ /// @author MOEXP Team
5
+ ////
6
+
7
+ @use "../mixins";
8
+ @use "../animations";
9
+ @use "../spacing";
10
+ @use "variables" as *;
11
+
12
+ // ============================================
13
+ // CHIP BASE
14
+ // ============================================
15
+
16
+ /// Базовый chip — контейнер с flex-выравниванием
17
+ /// @param {String} $color [$chip-color-default] - Цвет текста
18
+ /// @example scss
19
+ /// .my-chip {
20
+ /// @include chip-base;
21
+ /// }
22
+ /// @output inline-flex контейнер с gap и transition
23
+ /// @group chip-base
24
+ /// @access public
25
+ @mixin chip-base($color: $chip-color-default) {
26
+ display: inline-flex;
27
+ align-items: center;
28
+ font-size: inherit;
29
+ line-height: 1;
30
+ text-decoration: none;
31
+ cursor: pointer;
32
+
33
+ // Сброс для button
34
+ background: transparent;
35
+ border: none;
36
+ padding: 0;
37
+
38
+ @include mixins.flex-gap(spacing.$gap-xs);
39
+ @include mixins.text-color($color);
40
+ @include animations.transition-colors;
41
+ @include animations.focus-visible-ring;
42
+ }
43
+
44
+ // ============================================
45
+ // CHIP ICON
46
+ // ============================================
47
+
48
+ /// Иконка внутри chip
49
+ /// @param {Number} $size [$chip-icon-size] - Размер иконки
50
+ /// @example scss
51
+ /// .my-chip__icon {
52
+ /// @include chip-icon;
53
+ /// }
54
+ /// @output SVG-иконка с fill: currentColor
55
+ /// @group chip-base
56
+ /// @access public
57
+ @mixin chip-icon($size: $chip-icon-size) {
58
+ width: $size;
59
+ height: $size;
60
+ min-width: $size;
61
+ min-height: $size;
62
+ flex-shrink: 0;
63
+ fill: currentColor;
64
+ }
65
+
66
+ // ============================================
67
+ // CHIP TEXT
68
+ // ============================================
69
+
70
+ /// Текст внутри chip
71
+ /// @example scss
72
+ /// .my-chip__text {
73
+ /// @include chip-text;
74
+ /// }
75
+ /// @output Текстовый элемент
76
+ /// @group chip-base
77
+ /// @access public
78
+ @mixin chip-text {
79
+ line-height: inherit;
80
+ }
81
+
82
+ // ============================================
83
+ // CHIP DISABLED
84
+ // ============================================
85
+
86
+ /// Disabled состояние chip
87
+ /// @param {Number} $opacity [$chip-opacity-disabled] - Прозрачность
88
+ /// @example scss
89
+ /// .my-chip:disabled {
90
+ /// @include chip-disabled;
91
+ /// }
92
+ /// @output opacity + pointer-events: none
93
+ /// @group chip-base
94
+ /// @access public
95
+ @mixin chip-disabled($opacity: $chip-opacity-disabled) {
96
+ opacity: $opacity;
97
+ cursor: not-allowed;
98
+ pointer-events: none;
99
+ }
@@ -0,0 +1,73 @@
1
+ ////
2
+ /// Chip Icon — миксины для работы с иконками
3
+ /// @group chip-icon
4
+ /// @author MOEXP Team
5
+ ////
6
+
7
+ @use "variables" as *;
8
+
9
+ // ============================================
10
+ // ICON ONLY
11
+ // ============================================
12
+
13
+ /// Chip только с иконкой (без текста)
14
+ /// Требует aria-label для accessibility
15
+ /// @example scss
16
+ /// .social-icon {
17
+ /// @include chip-base;
18
+ /// @include chip-icon-only;
19
+ /// }
20
+ /// @output Минимальные стили (наследует от base)
21
+ /// @group chip-icon
22
+ /// @access public
23
+ @mixin chip-icon-only {
24
+ // Базовые стили наследуются от chip-base
25
+ // Можно добавить специфичные стили при необходимости
26
+ }
27
+
28
+ // ============================================
29
+ // DUAL ICON (для toggle)
30
+ // ============================================
31
+
32
+ /// Контейнер для двух иконок (toggle состояния)
33
+ /// Используется для accessibility-toggle, theme-toggle
34
+ /// @param {String} $active-class ['accessibility-icon--active'] - Класс активной иконки
35
+ /// @example scss
36
+ /// .toggle-chip {
37
+ /// @include chip-base;
38
+ /// @include chip-dual-icon;
39
+ /// }
40
+ /// @example html
41
+ /// <button class="toggle-chip">
42
+ /// <svg class="toggle-chip__icon toggle-chip__icon--default">...</svg>
43
+ /// <svg class="toggle-chip__icon toggle-chip__icon--active">...</svg>
44
+ /// </button>
45
+ /// @output Скрытие/показ иконок через CSS
46
+ /// @group chip-icon
47
+ /// @access public
48
+ @mixin chip-dual-icon($active-class: "accessibility-icon--active") {
49
+ // Активная иконка скрыта по умолчанию
50
+ .#{$active-class} {
51
+ display: none;
52
+ }
53
+ }
54
+
55
+ /// Показать активную иконку (для состояния active)
56
+ /// @param {String} $default-class ['accessibility-icon--default'] - Класс дефолтной иконки
57
+ /// @param {String} $active-class ['accessibility-icon--active'] - Класс активной иконки
58
+ /// @example scss
59
+ /// .toggle-chip.is-active {
60
+ /// @include chip-dual-icon-active;
61
+ /// }
62
+ /// @output Переключение видимости иконок
63
+ /// @group chip-icon
64
+ /// @access public
65
+ @mixin chip-dual-icon-active($default-class: "accessibility-icon--default", $active-class: "accessibility-icon--active") {
66
+ .#{$default-class} {
67
+ display: none;
68
+ }
69
+
70
+ .#{$active-class} {
71
+ display: block;
72
+ }
73
+ }
@@ -0,0 +1,21 @@
1
+ ////
2
+ /// Chip Index — точка входа модуля
3
+ /// @group chip
4
+ /// @author MOEXP Team
5
+ ////
6
+
7
+ /// Переменные
8
+ /// @access public
9
+ @forward "variables";
10
+
11
+ /// Базовые миксины
12
+ /// @access public
13
+ @forward "base";
14
+
15
+ /// Варианты оформления
16
+ /// @access public
17
+ @forward "variants";
18
+
19
+ /// Работа с иконками
20
+ /// @access public
21
+ @forward "icon";