mvframe 1.0.93 → 1.0.95
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.
- package/.cursor/rules/style-system.mdc +91 -1
- package/README.cn.md +18 -0
- package/README.md +18 -0
- package/dist/css/style.css +1 -1
- package/dist/vendor.js +4716 -2117
- package/package.json +3 -1
- package/scripts/scaffold-app.js +26 -1
- package/src/style/chip/mixin.scss +141 -0
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mvframe",
|
|
3
3
|
"packageManager": "yarn@4.4.1",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.95",
|
|
5
5
|
"author": "matt avis",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"module": "./dist/index.js",
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"import": "./dist/util.js",
|
|
35
35
|
"require": "./dist/util.js"
|
|
36
36
|
},
|
|
37
|
+
"./style/mixin": "./src/style/chip/mixin.scss",
|
|
37
38
|
"./style": "./dist/css/style.css",
|
|
38
39
|
"./style/cpt": "./dist/css/cpt.css",
|
|
39
40
|
"./package.json": "./package.json"
|
|
@@ -59,6 +60,7 @@
|
|
|
59
60
|
},
|
|
60
61
|
"files": [
|
|
61
62
|
"dist/*",
|
|
63
|
+
"src/style/chip/mixin.scss",
|
|
62
64
|
"scripts/build-host.js",
|
|
63
65
|
"scripts/dev-with-notify.js",
|
|
64
66
|
"scripts/install-codex-agents.js",
|
package/scripts/scaffold-app.js
CHANGED
|
@@ -594,7 +594,8 @@ export {};
|
|
|
594
594
|
"src/assets/style/index.scss",
|
|
595
595
|
`/* 项目全局样式入口(main.js 已 import 本文件) */
|
|
596
596
|
/* MVFrame:main.js 已 import "mvframe/style" 与 "mvframe/style/cpt"(发布包 CSS),勿在此处再 @import 同一路径,避免重复。 */
|
|
597
|
-
/*
|
|
597
|
+
/* 若需在业务 SCSS 内复用 mvframe 断点 / mixin,直接:@use "mvframe/style/mixin" as *; */
|
|
598
|
+
/* 例如:@include media-down(sm) { ... } */
|
|
598
599
|
|
|
599
600
|
body {
|
|
600
601
|
margin: 0;
|
|
@@ -867,6 +868,30 @@ yarn exec mvframe-d
|
|
|
867
868
|
|
|
868
869
|
\`src/main.js\` 已包含 \`import "mvframe/style"\` 与 \`import "mvframe/style/cpt"\`(分别对应工具类/变量与 **Mvc\*** 组件 scoped 等样式),一般 **无需** 在 \`index.scss\` 再引一遍 mvframe 的 dist CSS,以免重复。项目级覆盖写在 \`src/assets/style/index.scss\` 即可。
|
|
869
870
|
|
|
871
|
+
宿主项目如需在 SCSS 内复用 MVFrame 断点,直接:
|
|
872
|
+
|
|
873
|
+
\`\`\`scss
|
|
874
|
+
@use "mvframe/style/mixin" as *;
|
|
875
|
+
|
|
876
|
+
.Panel {
|
|
877
|
+
padding: 1.5rem;
|
|
878
|
+
|
|
879
|
+
@include media-down(sm) {
|
|
880
|
+
padding: 1rem;
|
|
881
|
+
}
|
|
882
|
+
}
|
|
883
|
+
\`\`\`
|
|
884
|
+
|
|
885
|
+
发布包的 \`mvframe/style\` 还额外提供响应式工具类:\`{断点}-{up|down|only}-{工具类}\`,如 \`md-down-hide\`、\`lg-up-flexMode\`、\`xs-only-block\`。适合直接写在 template 上;复杂宽高/间距调整仍建议在业务 SCSS 里配合 media mixin 写。
|
|
886
|
+
|
|
887
|
+
做 Grid 列数切换时,也可以直接在容器上写断点列数类,例如:
|
|
888
|
+
|
|
889
|
+
\`\`\`html
|
|
890
|
+
<div class="grid col2 md2 lg3 sm1 g16"></div>
|
|
891
|
+
\`\`\`
|
|
892
|
+
|
|
893
|
+
表示默认 2 列,\`sm\` 1 列,\`md\` 2 列,\`lg\` 3 列。
|
|
894
|
+
|
|
870
895
|
## 表单 Label
|
|
871
896
|
|
|
872
897
|
\`Input\`、\`Textarea\`、\`Select\`、\`SelectV2\` 支持统一的 label 接口:
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
@use "sass:list";
|
|
2
|
+
@use "sass:map";
|
|
3
|
+
|
|
4
|
+
// 响应式断点:xs < 40rem,sm 40rem~47.99875rem,md 48rem~63.99875rem,
|
|
5
|
+
// lg 64rem~79.99875rem,xl 80rem~95.99875rem,xxl >= 96rem。
|
|
6
|
+
$media-breakpoints: (
|
|
7
|
+
"xs": 0,
|
|
8
|
+
"sm": 40rem,
|
|
9
|
+
"md": 48rem,
|
|
10
|
+
"lg": 64rem,
|
|
11
|
+
"xl": 80rem,
|
|
12
|
+
"xxl": 96rem,
|
|
13
|
+
) !default;
|
|
14
|
+
|
|
15
|
+
@function media-breakpoint($name) {
|
|
16
|
+
$value: map.get($media-breakpoints, $name);
|
|
17
|
+
@if $value == null {
|
|
18
|
+
@error "[mvframe media] Unknown breakpoint `#{$name}`. Available: #{map.keys($media-breakpoints)}";
|
|
19
|
+
}
|
|
20
|
+
@return $value;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
@function media-next($name) {
|
|
24
|
+
$keys: map.keys($media-breakpoints);
|
|
25
|
+
$index: list.index($keys, $name);
|
|
26
|
+
|
|
27
|
+
@if $index == null {
|
|
28
|
+
@error "[mvframe media] Unknown breakpoint `#{$name}`. Available: #{$keys}";
|
|
29
|
+
}
|
|
30
|
+
@if $index == list.length($keys) {
|
|
31
|
+
@return null;
|
|
32
|
+
}
|
|
33
|
+
@return list.nth($keys, $index + 1);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@function media-range-max($name) {
|
|
37
|
+
$next: media-next($name);
|
|
38
|
+
@if $next == null {
|
|
39
|
+
@return null;
|
|
40
|
+
}
|
|
41
|
+
@return calc(#{media-breakpoint($next)} - 0.02px);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
@mixin media-up($name) {
|
|
45
|
+
$min: media-breakpoint($name);
|
|
46
|
+
@if $min == 0 {
|
|
47
|
+
@content;
|
|
48
|
+
} @else {
|
|
49
|
+
@media (min-width: #{$min}) {
|
|
50
|
+
@content;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@mixin media-down($name) {
|
|
56
|
+
$max: media-range-max($name);
|
|
57
|
+
@if $max == null {
|
|
58
|
+
@content;
|
|
59
|
+
} @else {
|
|
60
|
+
@media (max-width: #{$max}) {
|
|
61
|
+
@content;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
@mixin media-only($name) {
|
|
67
|
+
$min: media-breakpoint($name);
|
|
68
|
+
$max: media-range-max($name);
|
|
69
|
+
|
|
70
|
+
@if $min == 0 and $max == null {
|
|
71
|
+
@content;
|
|
72
|
+
} @else if $min == 0 {
|
|
73
|
+
@media (max-width: #{$max}) {
|
|
74
|
+
@content;
|
|
75
|
+
}
|
|
76
|
+
} @else if $max == null {
|
|
77
|
+
@media (min-width: #{$min}) {
|
|
78
|
+
@content;
|
|
79
|
+
}
|
|
80
|
+
} @else {
|
|
81
|
+
@media (min-width: #{$min}) and (max-width: #{$max}) {
|
|
82
|
+
@content;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
@mixin media-between($from, $to) {
|
|
88
|
+
$keys: map.keys($media-breakpoints);
|
|
89
|
+
$from-index: list.index($keys, $from);
|
|
90
|
+
$to-index: list.index($keys, $to);
|
|
91
|
+
|
|
92
|
+
@if $from-index == null or $to-index == null {
|
|
93
|
+
@error "[mvframe media] Unknown breakpoint in `media-between(#{$from}, #{$to})`. Available: #{$keys}";
|
|
94
|
+
}
|
|
95
|
+
@if $from-index > $to-index {
|
|
96
|
+
@error "[mvframe media] `media-between` expects `$from <= $to`, got `#{$from}` > `#{$to}`.";
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
$min: media-breakpoint($from);
|
|
100
|
+
$max: media-range-max($to);
|
|
101
|
+
|
|
102
|
+
@if $min == 0 and $max == null {
|
|
103
|
+
@content;
|
|
104
|
+
} @else if $min == 0 {
|
|
105
|
+
@media (max-width: #{$max}) {
|
|
106
|
+
@content;
|
|
107
|
+
}
|
|
108
|
+
} @else if $max == null {
|
|
109
|
+
@media (min-width: #{$min}) {
|
|
110
|
+
@content;
|
|
111
|
+
}
|
|
112
|
+
} @else {
|
|
113
|
+
@media (min-width: #{$min}) and (max-width: #{$max}) {
|
|
114
|
+
@content;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// 发光阴影效果:::after 伪元素,可被 @include 复用
|
|
120
|
+
@mixin glow-shadow-after($css-var) {
|
|
121
|
+
position: relative;
|
|
122
|
+
isolation: isolate;
|
|
123
|
+
&::after {
|
|
124
|
+
content: "";
|
|
125
|
+
position: absolute;
|
|
126
|
+
top: 0;
|
|
127
|
+
left: 0;
|
|
128
|
+
width: 100%;
|
|
129
|
+
height: 100%;
|
|
130
|
+
opacity: 0.25;
|
|
131
|
+
background-color: var(#{$css-var});
|
|
132
|
+
transform: translateY(20%);
|
|
133
|
+
pointer-events: none;
|
|
134
|
+
filter: blur(0.625rem);
|
|
135
|
+
z-index: -1;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
@mixin hover-box-shadow() {
|
|
139
|
+
box-shadow: 0 0.5rem 0.5rem
|
|
140
|
+
color-mix(in srgb, var(--color-body) 6%, rgba(0, 0, 0, 0.05));
|
|
141
|
+
}
|