@epxing/theme 0.0.0-stage → 5.3.0-beta.2

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.
@@ -0,0 +1,4 @@
1
+ $namespace: 'epx';
2
+ $element-separator: '__';
3
+ $modifier-separator: '--';
4
+ $state-prefix: 'is-';
@@ -0,0 +1,44 @@
1
+ @import "config";
2
+
3
+ /* BEM support Func
4
+ -------------------------- */
5
+ @function selectorToString($selector) {
6
+ $selector: inspect($selector);
7
+ $selector: str-slice($selector, 2, -2);
8
+ @return $selector;
9
+ }
10
+
11
+ @function containsModifier($selector) {
12
+ $selector: selectorToString($selector);
13
+
14
+ @if str-index($selector, $modifier-separator) {
15
+ @return true;
16
+ } @else {
17
+ @return false;
18
+ }
19
+ }
20
+
21
+ @function containWhenFlag($selector) {
22
+ $selector: selectorToString($selector);
23
+
24
+ @if str-index($selector, '.' + $state-prefix) {
25
+ @return true
26
+ } @else {
27
+ @return false
28
+ }
29
+ }
30
+
31
+ @function containPseudoClass($selector) {
32
+ $selector: selectorToString($selector);
33
+
34
+ @if str-index($selector, ':') {
35
+ @return true
36
+ } @else {
37
+ @return false
38
+ }
39
+ }
40
+
41
+ @function hitAllSpecialNestRule($selector) {
42
+
43
+ @return containsModifier($selector) or containWhenFlag($selector) or containPseudoClass($selector);
44
+ }
@@ -0,0 +1,354 @@
1
+ @import "function";
2
+ @import "./var.scss";
3
+
4
+ /*****BEM*********/
5
+ @mixin b($block) {
6
+ $B: $namespace+'-'+$block !global;
7
+
8
+ .#{$B} {
9
+ @content;
10
+ }
11
+ }
12
+
13
+ @mixin e($element) {
14
+ $E: $element !global;
15
+ $selector: &;
16
+ $currentSelector: "";
17
+ @each $unit in $element {
18
+ $currentSelector: #{$currentSelector + "." + $B + $element-separator + $unit + ","};
19
+ }
20
+
21
+ @if hitAllSpecialNestRule($selector) {
22
+ @at-root {
23
+ #{$selector} {
24
+ #{$currentSelector} {
25
+ @content;
26
+ }
27
+ }
28
+ }
29
+ } @else {
30
+ @at-root {
31
+ #{$currentSelector} {
32
+ @content;
33
+ }
34
+ }
35
+ }
36
+ }
37
+
38
+ @mixin m($modifier) {
39
+ $selector: &;
40
+ $currentSelector: "";
41
+ @each $unit in $modifier {
42
+ $currentSelector: #{$currentSelector + & + $modifier-separator + $unit + ","};
43
+ }
44
+
45
+ @at-root {
46
+ #{$currentSelector} {
47
+ @content;
48
+ }
49
+ }
50
+ }
51
+
52
+ @mixin meb($modifier: false, $element: $E, $block: $B) {
53
+ $selector: &;
54
+ $modifierCombo: '';
55
+
56
+ @if $modifier {
57
+ $modifierCombo: $modifier-separator + $modifier;
58
+ }
59
+
60
+ @at-root {
61
+ #{$selector} {
62
+ .#{$block+$element-separator+$element+$modifierCombo} {
63
+ @content
64
+ }
65
+ }
66
+ }
67
+ }
68
+
69
+ @mixin when($state) {
70
+ @at-root {
71
+ &.#{$state-prefix + $state} {
72
+ @content;
73
+ }
74
+ }
75
+ }
76
+ $theme: (
77
+ purple: $--color-primary-purple,
78
+ palevioletred: $--color-primary-palevioletred,
79
+ forestgreen: $--color-primary-forestgreen,
80
+ deepblue: $--color-primary-deepblue,
81
+ orange: $--color-primary-orange,
82
+ skyblue: $--color-primary-skyblue,
83
+ aurorablue: $--color-primary-aurorablue,
84
+ tiffanyblue: $--color-primary-tiffanyblue,
85
+ tsinghuapurple:$--color-primary-tsinghuapurple,
86
+ creativeblue:$--color-primary-creativeblue,
87
+ njhkht:$--color-primary-njhkht,
88
+ custom: var(--color-primary)
89
+ );
90
+
91
+ // ⚠️ 本文件经 additionalData 注入到每个 scss 编译单元——只允许 @mixin/@function/$变量,
92
+ // 禁止任何顶层 CSS 发射(会被复制 N 份进产物)。--color-primary 的 :root/[data-theme]
93
+ // 定义块在 theme/tokens.scss(index.scss 只编译一次)。
94
+
95
+ /* 主题色 mixin —— 已塌缩为 CSS 变量单条规则
96
+ 原实现每个 mixin 经 @each 展开 12 套 [data-theme=x] 规则,346 个调用点 ≈4500 条规则,
97
+ 是组件库 CSS 体积大头。现依赖上方每套主题的 --color-primary(RGB 三元组):
98
+ 透明度走 rgba(var(--color-primary), a);混合色走原生 color-mix(同 EP tokens 先例,
99
+ 平台 Chrome 支持)。签名不变,346 个调用点零改动。
100
+ -------------------------- */
101
+ @mixin font_color_primary($opacity: 1, $color: $--color-primary) {
102
+ color: rgba(var(--color-primary), $opacity);
103
+ &:hover {
104
+ @include font_color_primary_mixin(.2)
105
+ }
106
+ }
107
+
108
+ @mixin font_color_primary_mixin($opacity: 1, $color: $--color-white) {
109
+ color: color-mix(in srgb, rgb(var(--color-primary)) #{(1 - $opacity) * 100%}, #fff);
110
+ }
111
+
112
+ @mixin bg_color_primary($opacity: 1, $color: $--color-primary) {
113
+ background-color: rgba(var(--color-primary), $opacity);
114
+ }
115
+
116
+ @mixin bg_color_primary_mixin($opacity: 1, $color: $--color-white) {
117
+ background-color: color-mix(in srgb, rgb(var(--color-primary)) #{(1 - $opacity) * 100%}, #fff);
118
+ }
119
+
120
+ @mixin border_color_primary($opacity: 1, $position: null, $color: $--color-primary) {
121
+ @if $position {
122
+ border-#{$position}-color: rgba(var(--color-primary), $opacity);
123
+ } @else {
124
+ border-color: rgba(var(--color-primary), $opacity);
125
+ }
126
+ }
127
+
128
+ @mixin border_color_primary_mixin($opacity: 1, $color: $--color-white) {
129
+ border-color: color-mix(in srgb, rgb(var(--color-primary)) #{(1 - $opacity) * 100%}, #fff);
130
+ }
131
+
132
+ @mixin stroke_color_primary($opacity: 1, $color: $--color-primary) {
133
+ stroke: rgba(var(--color-primary), $opacity);
134
+ }
135
+
136
+ @mixin border_primary($width: 1px, $position: null, $type: solid, $opacity: 1, $color: $--color-primary) {
137
+ @if $position {
138
+ border-#{$position}: $width $type rgba(var(--color-primary), $opacity);
139
+ } @else {
140
+ border: $width $type rgba(var(--color-primary), $opacity);
141
+ }
142
+ }
143
+
144
+ @mixin box_shadow_primary($hShadow, $vShadow, $blur, $spread, $opacity, $args...) {
145
+ box-shadow: $hShadow $vShadow $blur $spread rgba(var(--color-primary), $opacity) $args;
146
+ }
147
+
148
+ /* Break-points
149
+ -------------------------- */
150
+ @mixin res($key, $map: $--breakpoints) {
151
+ // 循环断点Map,如果存在则返回
152
+ @if map-has-key($map, $key) {
153
+ @media only screen and #{inspect(map-get($map, $key))} {
154
+ @content;
155
+ }
156
+ } @else {
157
+ @warn "Undefeined points: `#{$map}`";
158
+ }
159
+ }
160
+
161
+ /* Scrollbar
162
+ -------------------------- */
163
+ @mixin scroll-bar {
164
+ $--scrollbar-thumb-background: #b4bccc;
165
+ $--scrollbar-track-background: #fff;
166
+
167
+ &::-webkit-scrollbar {
168
+ z-index: 11;
169
+ width: 6px;
170
+
171
+ &:horizontal {
172
+ height: 6px;
173
+ }
174
+
175
+ &-thumb {
176
+ border-radius: 5px;
177
+ width: 6px;
178
+ background: $--scrollbar-thumb-background;
179
+ }
180
+
181
+ &-corner {
182
+ background: $--scrollbar-track-background;
183
+ }
184
+
185
+ &-track {
186
+ background: $--scrollbar-track-background;
187
+
188
+ &-piece {
189
+ background: $--scrollbar-track-background;
190
+ width: 6px;
191
+ }
192
+ }
193
+ }
194
+ }
195
+
196
+ /* Placeholder
197
+ -------------------------- */
198
+ @mixin placeholder {
199
+ &::-webkit-input-placeholder {
200
+ @content
201
+ }
202
+
203
+ &::-moz-placeholder {
204
+ @content
205
+ }
206
+
207
+ &:-ms-input-placeholder {
208
+ @content
209
+ }
210
+ }
211
+
212
+ /* BEM
213
+ -------------------------- */
214
+ @mixin b($block) {
215
+ $B: $namespace+'-'+$block !global;
216
+
217
+ .#{$B} {
218
+ @content;
219
+ }
220
+ }
221
+
222
+ @mixin e($element) {
223
+ $E: $element !global;
224
+ $selector: &;
225
+ $currentSelector: "";
226
+ @each $unit in $element {
227
+ $currentSelector: #{$currentSelector + "." + $B + $element-separator + $unit + ","};
228
+ }
229
+
230
+ @if hitAllSpecialNestRule($selector) {
231
+ @at-root {
232
+ #{$selector} {
233
+ #{$currentSelector} {
234
+ @content;
235
+ }
236
+ }
237
+ }
238
+ } @else {
239
+ @at-root {
240
+ #{$currentSelector} {
241
+ @content;
242
+ }
243
+ }
244
+ }
245
+ }
246
+
247
+ @mixin m($modifier) {
248
+ $selector: &;
249
+ $currentSelector: "";
250
+ @each $unit in $modifier {
251
+ $currentSelector: #{$currentSelector + & + $modifier-separator + $unit + ","};
252
+ }
253
+
254
+ @at-root {
255
+ #{$currentSelector} {
256
+ @content;
257
+ }
258
+ }
259
+ }
260
+
261
+ @mixin configurable-m($modifier, $E-flag: false) {
262
+ $selector: &;
263
+ $interpolation: '';
264
+
265
+ @if $E-flag {
266
+ $interpolation: $element-separator + $E-flag;
267
+ }
268
+
269
+ @at-root {
270
+ #{$selector} {
271
+ .#{$B+$interpolation+$modifier-separator+$modifier} {
272
+ @content;
273
+ }
274
+ }
275
+ }
276
+ }
277
+
278
+ @mixin spec-selector($specSelector: '', $element: $E, $modifier: false, $block: $B) {
279
+ $modifierCombo: '';
280
+
281
+ @if $modifier {
282
+ $modifierCombo: $modifier-separator + $modifier;
283
+ }
284
+
285
+ @at-root {
286
+ #{&}#{$specSelector}.#{$block+$element-separator+$element+$modifierCombo} {
287
+ @content
288
+ }
289
+ }
290
+ }
291
+
292
+ @mixin meb($modifier: false, $element: $E, $block: $B) {
293
+ $selector: &;
294
+ $modifierCombo: '';
295
+
296
+ @if $modifier {
297
+ $modifierCombo: $modifier-separator + $modifier;
298
+ }
299
+
300
+ @at-root {
301
+ #{$selector} {
302
+ .#{$block+$element-separator+$element+$modifierCombo} {
303
+ @content
304
+ }
305
+ }
306
+ }
307
+ }
308
+
309
+ @mixin when($state) {
310
+ @at-root {
311
+ &.#{$state-prefix + $state} {
312
+ @content;
313
+ }
314
+ }
315
+ }
316
+
317
+ @mixin extend-rule($name) {
318
+ @extend #{'%shared-'+$name};
319
+ }
320
+
321
+ @mixin share-rule($name) {
322
+ $rule-name: '%shared-'+$name;
323
+
324
+ @at-root #{$rule-name} {
325
+ @content
326
+ }
327
+ }
328
+
329
+ @mixin pseudo($pseudo) {
330
+ @at-root #{&}#{':#{$pseudo}'} {
331
+ @content
332
+ }
333
+ }
334
+
335
+
336
+ // ── epx 设计令牌语义封装(P1,令牌定义见 theme/tokens.scss;本文件已全局注入免 import)──
337
+ // 卡片容器:底色/圆角/内边距/边框 一把抓(暗黑自动跟随令牌)
338
+ @mixin epx-card {
339
+ background: var(--epx-bg-card);
340
+ border: 1px solid var(--epx-border);
341
+ border-radius: var(--epx-radius-base);
342
+ padding: var(--epx-space-4);
343
+ color: var(--epx-text);
344
+ }
345
+
346
+ // 字号档位:s/base/l/xl(次要文字传 $secondary: true 带次要色)
347
+ @mixin epx-text($size: base, $secondary: false) {
348
+ font-size: var(--epx-font-size-#{$size});
349
+ @if $secondary {
350
+ color: var(--epx-text-secondary);
351
+ } @else {
352
+ color: var(--epx-text);
353
+ }
354
+ }
@@ -0,0 +1,117 @@
1
+ // 默认主题色
2
+ $--color-primary: #0874E7!default;
3
+ // 薰衣草紫主题色
4
+ $--color-primary-purple: #7569E2!default;
5
+ // 霞红主题色
6
+ $--color-primary-palevioletred: #CE4545!default;
7
+ // 森绿主题色
8
+ $--color-primary-forestgreen: #3D8A50!default;
9
+ // 海蓝主题色
10
+ $--color-primary-deepblue: #0F5FBD!default;
11
+ // 橙橘
12
+ $--color-primary-orange: #EA6000!default;
13
+ // 星空蓝
14
+ $--color-primary-skyblue: #1A4586!default;
15
+ // 极光蓝
16
+ $--color-primary-aurorablue: #383B9E!default;
17
+ // 蒂芙尼蓝
18
+ $--color-primary-tiffanyblue: #00AAAD!default;
19
+ // 清华紫
20
+ $--color-primary-tsinghuapurple: #5F2167!default;
21
+ // 创想蓝
22
+ $--color-primary-creativeblue: #418CFF!default;
23
+ // 南京航空航天主题色
24
+ $--color-primary-njhkht: #1D2088!default;
25
+ // 成功色
26
+ $--color-success: #67C23A !default;
27
+ // 警告色
28
+ $--color-warning: #E6A23C !default;
29
+ // 危险色
30
+ $--color-danger: #F56C6C !default;
31
+ // color|1|Background Color|4
32
+ $--color-white: #FFFFFF !default;
33
+ /// color|1|Background Color|4
34
+ $--color-black: #000000 !default;
35
+ $--color-primary-light-1: mix($--color-white, $--color-primary, 10%) !default; /* 53a8ff */
36
+ $--color-primary-light-2: mix($--color-white, $--color-primary, 20%) !default; /* 66b1ff */
37
+ $--color-primary-light-3: mix($--color-white, $--color-primary, 30%) !default; /* 79bbff */
38
+ $--color-primary-light-4: mix($--color-white, $--color-primary, 40%) !default; /* 8cc5ff */
39
+ $--color-primary-light-5: mix($--color-white, $--color-primary, 50%) !default; /* a0cfff */
40
+ $--color-primary-light-6: mix($--color-white, $--color-primary, 60%) !default; /* b3d8ff */
41
+ $--color-primary-light-7: mix($--color-white, $--color-primary, 70%) !default; /* c6e2ff */
42
+ $--color-primary-light-8: mix($--color-white, $--color-primary, 80%) !default; /* d9ecff */
43
+ $--color-primary-light-9: mix($--color-white, $--color-primary, 90%) !default; /* ecf5ff */
44
+
45
+ // 默认文本色
46
+ $--color-text-primary: #333 !default;
47
+ // 文本辅助色
48
+ $--color-text-regular: #666 !default;
49
+ // 次要文本色
50
+ $--color-text-secondary: #999 !default;
51
+ // 提示色
52
+ $--color-text-placeholder: #C0C4CC !default;
53
+
54
+ // 边框色
55
+ $--border-color-base: #E3E3E3 !default;
56
+ /// color|1|Border Color|3
57
+ $--border-color-light: #E4E7ED !default;
58
+ /// color|1|Border Color|3
59
+ $--border-color-lighter: #EBEEF5 !default;
60
+ /// color|1|Border Color|3
61
+ $--border-color-extra-light: #F2F6FC !default;
62
+
63
+ // 背景色
64
+ $--background-color-base: #F5F7FA !default;
65
+
66
+ /* 链接颜色
67
+ -------------------------- */
68
+ $--link-color: $--color-primary-light-2 !default;
69
+ $--link-hover-color: $--color-primary !default;
70
+
71
+ /* Border
72
+ -------------------------- */
73
+ $--border-width-base: 1px !default;
74
+ $--border-style-base: solid !default;
75
+ $--border-color-hover: $--color-text-placeholder !default;
76
+ $--border-base: $--border-width-base $--border-style-base $--border-color-base !default;
77
+ /// borderRadius|1|Radius|0
78
+ $--border-radius-base: 4px !default;
79
+ /// borderRadius|1|Radius|0
80
+ $--border-radius-small: 2px !default;
81
+ /// borderRadius|1|Radius|0
82
+ $--border-radius-circle: 100% !default;
83
+ /// borderRadius|1|Radius|0
84
+ $--border-radius-zero: 0 !default;
85
+
86
+ // 字体大小
87
+ /// fontSize|1|Font Size|0
88
+ $--font-size-extra-large: 20px !default;
89
+ /// fontSize|1|Font Size|0
90
+ $--font-size-large: 18px !default;
91
+ /// fontSize|1|Font Size|0
92
+ $--font-size-medium: 16px !default;
93
+ /// fontSize|1|Font Size|0
94
+ $--font-size-base: 14px !default;
95
+ /// fontSize|1|Font Size|0
96
+ $--font-size-small: 13px !default;
97
+ /// fontSize|1|Font Size|0
98
+ $--font-size-extra-small: 12px !default;
99
+ /// fontLineHeight|1|Line Height|2
100
+ $--font-line-height-primary: 24px !default;
101
+ /// fontLineHeight|1|Line Height|2
102
+ $--font-line-height-secondary: 16px !default;
103
+ $--font-color-disabled-base: #bbb !default;
104
+
105
+ // 默认内边距
106
+ $--padding-base: 16px!default;
107
+ // 小边距
108
+ $--padding-small: 10px!default;
109
+ // 大边距
110
+ $--padding-large: 24px!default;
111
+
112
+ // 默认外边距
113
+ $--margin-base: 16px!default;
114
+ // 小边距
115
+ $--margin-small: 10px!default;
116
+ // 大边距
117
+ $--margin-large: 24px!default;