@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
package/README.md ADDED
@@ -0,0 +1,182 @@
1
+ # @mr.slonn/my-scss-theme
2
+
3
+ SCSS-тема с чётко зафиксированным архитектурным контрактом.
4
+ **Этот файл README.md является контрактом использования пакета.**
5
+
6
+ Пакет предназначен для установки через npm и использования в Sass
7
+ с применением модульной системы (`@use`, `@forward`).
8
+
9
+ ---
10
+
11
+ ## Установка
12
+
13
+ ```bash
14
+ npm install @mr.slonn/my-scss-theme
15
+ ````
16
+
17
+ Пакет не содержит JavaScript и не имеет runtime-зависимостей.
18
+
19
+ ---
20
+
21
+ ## Архитектурный контракт
22
+
23
+ В пакете **строго разделены две роли**.
24
+ Смешивание этих ролей **запрещено**.
25
+
26
+ ### 1. API-модуль
27
+
28
+ API предоставляет:
29
+
30
+ * переменные
31
+ * функции
32
+ * миксины
33
+
34
+ Свойства API:
35
+
36
+ * **не генерирует CSS**
37
+ * **не имеет side effects**
38
+ * безопасен для повторного `@use`
39
+ * предназначен для использования в компонентах и библиотеках
40
+
41
+ ### 2. CSS entrypoint
42
+
43
+ CSS entrypoint:
44
+
45
+ * генерирует utility-классы
46
+ * генерирует CSS-компоненты
47
+ * используется **только** в корневом entry-файле проекта
48
+
49
+ ❗ Эти роли **запрещено смешивать**.
50
+ Это ограничение Sass, а не рекомендация.
51
+
52
+ ---
53
+
54
+ ## Использование API (основной сценарий)
55
+
56
+ Используется в компонентах, библиотеках и темах.
57
+
58
+ ```scss
59
+ @use "@mr.slonn/my-scss-theme" as theme;
60
+
61
+ .card {
62
+ padding: theme.spacing(4);
63
+ border-radius: theme.$radius-md;
64
+ }
65
+ ```
66
+
67
+ ### Гарантии API
68
+
69
+ * не генерирует CSS
70
+ * не имеет side effects
71
+ * безопасен для повторного `@use`
72
+ * не зависит от порядка подключения
73
+ * предназначен для переиспользования
74
+
75
+ ---
76
+
77
+ ## Генерация CSS (entrypoint проекта)
78
+
79
+ Используется **ТОЛЬКО** в корневом entry-файле проекта
80
+ (`main.scss`, `entry.scss`, `app.scss` и т.п.).
81
+
82
+ ```scss
83
+ @use "@mr.slonn/my-scss-theme/scss/main";
84
+ ```
85
+
86
+ Поведение:
87
+
88
+ * подключает utilities
89
+ * подключает components
90
+ * генерирует готовые CSS-классы
91
+
92
+ ---
93
+
94
+ ## Запрещённые сценарии
95
+
96
+ ```scss
97
+ // ЗАПРЕЩЕНО: использование CSS entrypoint как модуля
98
+ @use "@mr.slonn/my-scss-theme/scss/main" as theme;
99
+
100
+ // ЗАПРЕЩЕНО: ожидание CSS от API
101
+ @use "@mr.slonn/my-scss-theme";
102
+ ```
103
+
104
+ Нарушение контракта приводит к:
105
+
106
+ * дублированию CSS
107
+ * конфликтам Sass-модулей
108
+ * неявным ошибкам сборки
109
+
110
+ ---
111
+
112
+ ## Структура пакета (зафиксировано)
113
+
114
+ ```text
115
+ my-scss-theme/
116
+ ├── index.scss # npm API entrypoint (ТОЛЬКО @forward)
117
+ ├── package.json
118
+ └── scss/
119
+ ├── api.scss # чистый API
120
+ ├── main.scss # CSS entrypoint
121
+ ├── abstracts/
122
+ │ └── _index.scss
123
+ ├── utilities/
124
+ │ └── _index.scss
125
+ └── components/
126
+ └── _index.scss
127
+ ```
128
+
129
+ ---
130
+
131
+ ## Обоснование архитектуры
132
+
133
+ * Sass строго разделяет модули и side effects
134
+ * SCSS npm-пакет не является JavaScript-пакетом
135
+ * `index.scss` пакета обязан быть чистым API
136
+
137
+ Данная структура:
138
+
139
+ * соответствует канону Sass
140
+ * масштабируется
141
+ * безопасна для автоматического использования (включая AI)
142
+
143
+ ---
144
+
145
+ ## Контракт для AI
146
+
147
+ ### Разрешено
148
+
149
+ ```scss
150
+ @use "@mr.slonn/my-scss-theme" as theme;
151
+ ```
152
+
153
+ ### Разрешено только в entrypoint проекта
154
+
155
+ ```scss
156
+ @use "@mr.slonn/my-scss-theme/scss/main";
157
+ ```
158
+
159
+ ### Запрещено
160
+
161
+ ```scss
162
+ @use "@mr.slonn/my-scss-theme/scss/main" as theme;
163
+ ```
164
+
165
+ ---
166
+
167
+ ## Версионирование
168
+
169
+ * **PATCH** — исправления, не ломающие API
170
+ * **MINOR** — расширение API
171
+ * **MAJOR** — изменение структуры или контрактов
172
+
173
+ ---
174
+
175
+ ## Статус
176
+
177
+ * совместим с `install_npm_packages`
178
+ * протестирован через `npx sass`
179
+ * готов для production-использования
180
+
181
+ ```
182
+ ```
package/index.scss ADDED
@@ -0,0 +1 @@
1
+ @forward "scss/api";
package/package.json ADDED
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "@mr.slonn/my-scss-theme",
3
+ "version": "1.0.0",
4
+ "license": "MIT",
5
+ "files": [
6
+ "index.scss",
7
+ "scss",
8
+ "README.md"
9
+ ]
10
+ }
@@ -0,0 +1,85 @@
1
+ {
2
+ "package": {
3
+ "name": "Theme Moexp",
4
+ "version": "1.0.0",
5
+ "description": "Основная SCSS тема с архитектурным подходом"
6
+ },
7
+ "groups": {
8
+ "undefined": "Общее",
9
+ "main": "Главная точка входа",
10
+ "abstracts": "Абстракции (индекс)",
11
+ "utilities": "Утилиты (индекс)",
12
+ "colors": "Цвета",
13
+ "typography": "Типографика",
14
+ "spacing": "Отступы",
15
+ "radius": "Скругления",
16
+ "mixins": "Миксины",
17
+ "mixins-color": "Миксины → Цвета",
18
+ "mixins-shadow": "Миксины → Тени",
19
+ "mixins-focus": "Миксины → Фокус",
20
+ "mixins-gradient": "Миксины → Градиенты",
21
+ "mixins-layout": "Миксины → Раскладка",
22
+ "mixins-image": "Миксины → Изображения",
23
+ "mixins-a11y": "Миксины → Доступность",
24
+ "mixins-reset": "Миксины → Сброс",
25
+ "mixins-text": "Миксины → Текст",
26
+ "mixins-flex": "Миксины → Flex",
27
+ "animations": "Анимации",
28
+ "animations-timing": "Анимации → Timing",
29
+ "animations-easing": "Анимации → Easing",
30
+ "animations-keyframes": "Анимации → Keyframes",
31
+ "animations-transition": "Анимации → Transitions",
32
+ "animations-animate": "Анимации → Animate",
33
+ "animations-hover": "Анимации → Hover",
34
+ "animations-focus": "Анимации → Focus",
35
+ "animations-button": "Анимации → Buttons",
36
+ "animations-icon": "Анимации → Icons",
37
+ "animations-a11y": "Анимации → A11y",
38
+ "buttons": "Кнопки",
39
+ "buttons-variables": "Кнопки → Переменные",
40
+ "buttons-base": "Кнопки → Базовый миксин",
41
+ "buttons-variants": "Кнопки → Варианты",
42
+ "buttons-modifiers": "Кнопки → Модификаторы",
43
+ "buttons-classes": "Кнопки → CSS-классы",
44
+ "cards": "Карточки",
45
+ "cards-variables": "Карточки → Переменные",
46
+ "cards-base": "Карточки → Базовые",
47
+ "cards-hover": "Карточки → Hover",
48
+ "cards-variants": "Карточки → Варианты",
49
+ "cards-sizes": "Карточки → Размеры",
50
+ "cards-parts": "Карточки → Части",
51
+ "cards-blur": "Карточки → Blur",
52
+ "cards-featured": "Карточки → Featured",
53
+ "cards-vertical": "Карточки → Vertical",
54
+ "cards-image": "Карточки → Image",
55
+ "grid": "Сетка",
56
+ "grid-variables": "Сетка → Переменные",
57
+ "grid-functions": "Сетка → Функции",
58
+ "grid-container": "Сетка → Контейнер",
59
+ "grid-responsive": "Сетка → Респонсивный",
60
+ "grid-presets": "Сетка → Пресеты",
61
+ "grid-item": "Сетка → Элементы",
62
+ "grid-limit": "Сетка → Ограничение",
63
+ "grid-areas": "Сетка → Области",
64
+ "grid-display": "Сетка → Display",
65
+ "grid-expand": "Сетка → Expand",
66
+ "patterns": "Декоративные паттерны",
67
+ "patterns-base": "Паттерны: Базовые",
68
+ "patterns-stripes": "Паттерны: Полосы",
69
+ "patterns-dots": "Паттерны: Точки",
70
+ "patterns-grid": "Паттерны: Сетка",
71
+ "patterns-checkerboard": "Паттерны: Шахматка",
72
+ "patterns-noise": "Паттерны: Шум",
73
+ "patterns-utils": "Паттерны: Утилиты",
74
+ "patterns-pseudo": "Паттерны: Псевдоэлементы",
75
+ "utilities": "Утилиты (индекс)",
76
+ "utilities-visibility": "Утилиты: Видимость",
77
+ "utilities-spacing": "Утилиты: Отступы",
78
+ "utilities-text": "Утилиты: Текст",
79
+ "components": "Компоненты (индекс)",
80
+ "components-chip": "Компоненты → Chip"
81
+ "section-title": "Section Title",
82
+ "section-title-variables": "Section Title → Переменные",
83
+ "section-title-base": "Section Title → Базовые"
84
+ }
85
+ }
@@ -0,0 +1,25 @@
1
+ /* stylelint-disable */
2
+ ////
3
+ /// Переменные шрифтов (без @font-face)
4
+ ///
5
+ /// Этот файл генерируется автоматически таском `gulp fonts`.
6
+ /// **Не редактируйте вручную!**
7
+ ///
8
+ /// Используйте этот файл в компонентах, где нужны только переменные.
9
+ /// Для полного подключения шрифтов используйте _fonts.scss
10
+ ///
11
+ /// @group fonts
12
+ /// @author Gulp fonts task
13
+ /// Generated: 2026-01-31T10:24:19.279Z
14
+ ////
15
+
16
+ /// Шрифт golos text
17
+ /// @type String
18
+ /// @group fonts
19
+ $font-golos-text: 'golos text', sans-serif;
20
+
21
+ /// Шрифт literata
22
+ /// @type String
23
+ /// @group fonts
24
+ $font-literata: 'literata', sans-serif;
25
+
@@ -0,0 +1,139 @@
1
+ /* stylelint-disable */
2
+ ////
3
+ /// Автоматически сгенерированные @font-face правила
4
+ ///
5
+ /// Этот файл генерируется автоматически таском `gulp fonts`.
6
+ /// **Не редактируйте вручную!**
7
+ ///
8
+ /// @group fonts
9
+ /// @author Gulp fonts task
10
+ /// @since 1.0.0
11
+ ///
12
+ /// Generated: 2026-01-31T10:24:19.281Z
13
+ /// Font base path: /local/common/theme-moexp/fonts
14
+ /// Total font families: 14
15
+ ////
16
+
17
+ // Re-export переменных для обратной совместимости
18
+ @forward "font-vars";
19
+
20
+ @font-face {
21
+ font-family: 'golos text';
22
+ font-style: normal;
23
+ font-weight: 900;
24
+ font-display: swap;
25
+ src: url('/local/common/theme-moexp/fonts/Golos-Text/golos-text_black.woff2') format('woff2');
26
+ }
27
+
28
+ @font-face {
29
+ font-family: 'golos text';
30
+ font-style: normal;
31
+ font-weight: 700;
32
+ font-display: swap;
33
+ src: url('/local/common/theme-moexp/fonts/Golos-Text/golos-text_bold.woff2') format('woff2');
34
+ }
35
+
36
+ @font-face {
37
+ font-family: 'golos text';
38
+ font-style: normal;
39
+ font-weight: 600;
40
+ font-display: swap;
41
+ src: url('/local/common/theme-moexp/fonts/Golos-Text/golos-text_demibold.woff2') format('woff2');
42
+ }
43
+
44
+ @font-face {
45
+ font-family: 'golos text';
46
+ font-style: normal;
47
+ font-weight: 500;
48
+ font-display: swap;
49
+ src: url('/local/common/theme-moexp/fonts/Golos-Text/golos-text_medium.woff2') format('woff2');
50
+ }
51
+
52
+ @font-face {
53
+ font-family: 'golos text';
54
+ font-style: normal;
55
+ font-weight: 400;
56
+ font-display: swap;
57
+ src: url('/local/common/theme-moexp/fonts/Golos-Text/golos-text_regular.woff2') format('woff2');
58
+ }
59
+
60
+ @font-face {
61
+ font-family: 'golos text';
62
+ font-style: normal;
63
+ font-weight: 1 999;
64
+ font-display: swap;
65
+ src: url('/local/common/theme-moexp/fonts/Golos-Text/golos-text_vf.woff2') format('woff2');
66
+ }
67
+
68
+ @font-face {
69
+ font-family: 'literata';
70
+ font-style: normal;
71
+ font-weight: 700;
72
+ font-display: swap;
73
+ src: url('/local/common/theme-moexp/fonts/Literata/literata_bold.woff2') format('woff2'),
74
+ url('/local/common/theme-moexp/fonts/Literata/literata_bold.woff') format('woff');
75
+ }
76
+
77
+ @font-face {
78
+ font-family: 'literata';
79
+ font-style: italic;
80
+ font-weight: 700;
81
+ font-display: swap;
82
+ src: url('/local/common/theme-moexp/fonts/Literata/literata_bold-italic.woff2') format('woff2'),
83
+ url('/local/common/theme-moexp/fonts/Literata/literata_bold-italic.woff') format('woff');
84
+ }
85
+
86
+ @font-face {
87
+ font-family: 'literata';
88
+ font-style: italic;
89
+ font-weight: 400;
90
+ font-display: swap;
91
+ src: url('/local/common/theme-moexp/fonts/Literata/literata_italic.woff2') format('woff2'),
92
+ url('/local/common/theme-moexp/fonts/Literata/literata_italic.woff') format('woff');
93
+ }
94
+
95
+ @font-face {
96
+ font-family: 'literata';
97
+ font-style: normal;
98
+ font-weight: 500;
99
+ font-display: swap;
100
+ src: url('/local/common/theme-moexp/fonts/Literata/literata_medium.woff2') format('woff2'),
101
+ url('/local/common/theme-moexp/fonts/Literata/literata_medium.woff') format('woff');
102
+ }
103
+
104
+ @font-face {
105
+ font-family: 'literata';
106
+ font-style: italic;
107
+ font-weight: 500;
108
+ font-display: swap;
109
+ src: url('/local/common/theme-moexp/fonts/Literata/literata_medium-italic.woff2') format('woff2'),
110
+ url('/local/common/theme-moexp/fonts/Literata/literata_medium-italic.woff') format('woff');
111
+ }
112
+
113
+ @font-face {
114
+ font-family: 'literata';
115
+ font-style: normal;
116
+ font-weight: 400;
117
+ font-display: swap;
118
+ src: url('/local/common/theme-moexp/fonts/Literata/literata_regular.woff2') format('woff2'),
119
+ url('/local/common/theme-moexp/fonts/Literata/literata_regular.woff') format('woff');
120
+ }
121
+
122
+ @font-face {
123
+ font-family: 'literata';
124
+ font-style: normal;
125
+ font-weight: 600;
126
+ font-display: swap;
127
+ src: url('/local/common/theme-moexp/fonts/Literata/literata_semibold.woff2') format('woff2'),
128
+ url('/local/common/theme-moexp/fonts/Literata/literata_semibold.woff') format('woff');
129
+ }
130
+
131
+ @font-face {
132
+ font-family: 'literata';
133
+ font-style: italic;
134
+ font-weight: 600;
135
+ font-display: swap;
136
+ src: url('/local/common/theme-moexp/fonts/Literata/literata_semibold-italic.woff2') format('woff2'),
137
+ url('/local/common/theme-moexp/fonts/Literata/literata_semibold-italic.woff') format('woff');
138
+ }
139
+