maooo-skyline-ui-system 0.1.26 → 0.1.29

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.
@@ -379,7 +379,8 @@
379
379
  "Footer confirm and cancel actions",
380
380
  "Drag down close request",
381
381
  "Z-index control",
382
- "Centered single-line title with a close button (design 506:2954), via titleAlign=center + closable"
382
+ "Centered single-line title with a close button (design 506:2954), via titleAlign=center + closable",
383
+ "Centered double-line H166 header with subtitle named slot (design665:3731), preserving default single-line behavior"
383
384
  ],
384
385
  "composes": [
385
386
  "mo-popup",
@@ -616,7 +617,7 @@
616
617
  "Controlled upload file list display",
617
618
  "Auto append or business pipeline choose mode",
618
619
  "Configurable item width and aspect ratio",
619
- "Default, borderless camera-plus and photo placeholder trigger variants",
620
+ "Default, borderless camera-plus, photo and avatar placeholder trigger variants",
620
621
  "Preview and delete events",
621
622
  "Max count limiting",
622
623
  "Basic upload status overlays"
@@ -679,7 +680,7 @@
679
680
  "capabilities": [
680
681
  "Composes mo-upload media choosing and display",
681
682
  "Composes mo-image-cropper image and cover cropping",
682
- "Configurable item width and aspect ratio and default, camera-plus or photo trigger variants",
683
+ "Configurable item width and aspect ratio and default, camera-plus, photo or avatar trigger variants",
683
684
  "Uploads image and video files to Aliyun OSS",
684
685
  "Optionally audits uploaded images before success",
685
686
  "Generates default OSS snapshot covers for videos",
@@ -85,10 +85,11 @@
85
85
  "enum": [
86
86
  "default",
87
87
  "camera",
88
- "photo"
88
+ "photo",
89
+ "avatar"
89
90
  ],
90
91
  "default": "default",
91
- "description": "选择触发器外观;camera 为无文字、无边框的相机加号入口;photo 为灰底无文字矩形照片占位入口"
92
+ "description": "选择触发器外观;camera 为无文字、无边框的相机加号入口;photo 为灰底无文字矩形照片占位入口;avatar 为 #F0F0F0 灰底头像占位入口,尺寸与圆角使用 itemSize/imageRadius"
92
93
  },
93
94
  {
94
95
  "name": "enableCrop",
@@ -14,6 +14,16 @@
14
14
  "default": "",
15
15
  "description": "顶部标题"
16
16
  },
17
+ {
18
+ "name": "headerVariant",
19
+ "type": "string",
20
+ "default": "default",
21
+ "enum": [
22
+ "default",
23
+ "center-double"
24
+ ],
25
+ "description": "default 保持现有标题对齐与H120居中单行;center-double 对应原稿H166居中双行,使用subtitle命名插槽(搭配showHandle=false),不内置业务评分"
26
+ },
17
27
  {
18
28
  "name": "zIndex",
19
29
  "type": "number",
@@ -121,7 +131,8 @@
121
131
  "onCancel"
122
132
  ],
123
133
  "slots": [
124
- "default"
134
+ "default",
135
+ "subtitle"
125
136
  ],
126
137
  "tokens": [
127
138
  "color.text.primary",
@@ -85,10 +85,11 @@
85
85
  "enum": [
86
86
  "default",
87
87
  "camera",
88
- "photo"
88
+ "photo",
89
+ "avatar"
89
90
  ],
90
91
  "default": "default",
91
- "description": "选择触发器外观;camera 为无文字、无边框的相机加号入口;photo 为灰底无文字矩形照片占位入口"
92
+ "description": "选择触发器外观;camera 为无文字、无边框的相机加号入口;photo 为灰底无文字矩形照片占位入口;avatar 为 #F0F0F0 灰底头像占位入口,尺寸与圆角使用 itemSize/imageRadius"
92
93
  },
93
94
  {
94
95
  "name": "autoAppend",
@@ -121,7 +122,8 @@
121
122
  "color.text.secondary",
122
123
  "color.text.inverse",
123
124
  "radius.md",
124
- "color.background.page"
125
+ "color.background.page",
126
+ "color.background.tab"
125
127
  ],
126
128
  "eventDetails": {
127
129
  "onChoose": {
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "package": {
3
3
  "name": "maooo-skyline-ui-system",
4
- "version": "0.1.26"
4
+ "version": "0.1.29"
5
5
  },
6
- "snapshotVersion": "0.1.26",
7
- "generatedAt": "2026-11-05T03:31:33.237Z",
6
+ "snapshotVersion": "0.1.29",
7
+ "generatedAt": "2026-11-05T06:46:26.497Z",
8
8
  "description": "Read-only design spec snapshot for AI page generation in business projects. Source of truth is design-system/ and packages/ui/.",
9
9
  "readOrder": [
10
10
  "DESIGN.md",
@@ -112,15 +112,15 @@
112
112
  "tokens.json"
113
113
  ],
114
114
  "sourceHashes": {
115
- "design-system/tokens/source/border-width.json": "sha256:a154bb433b3b4301e4da7ba9756821180aaae5c96bc503a6a2be2acf9ca85e53",
116
- "design-system/tokens/source/color.json": "sha256:e62f7f8012ff857b8084ec880ee09324a79b7822a9208364381cd7e4b5c9ee4c",
115
+ "design-system/tokens/source/border-width.json": "sha256:578d218963dc25bd52364a620f74992c357d7dabd7b96a3db73578bf08024275",
116
+ "design-system/tokens/source/color.json": "sha256:e662f43edb6c6619a3d74cc06b47c00edc97020b498de3ec0424dee68baa2947",
117
117
  "design-system/tokens/source/radius.json": "sha256:bfd50ac1fdf091ad94a00f201712cce42e889797270fb0be87ee6cb075c2ff5c",
118
118
  "design-system/tokens/source/shadow.json": "sha256:025bdabeb6b3e04c4174792506832f686f0662b12740dd3b5612846a4e063362",
119
- "design-system/tokens/source/spacing.json": "sha256:bedb2d35044ff9b440857eea6bcfbea543ed7d2fef089fa781b1732aa7a5e40a",
120
- "design-system/tokens/source/typography.json": "sha256:0035640290a133444cf0f9f39df1ca9261c4cb3501a8b79ca438d7f2818ab5c4",
119
+ "design-system/tokens/source/spacing.json": "sha256:7ee3492fe060061716d8d5a4391d22963c59b813e2fe5733768076635ef7ff19",
120
+ "design-system/tokens/source/typography.json": "sha256:9c0a378cee112543faed4cc2a88b41da117bab9317372a37b604203521bdc2a9",
121
121
  "design-system/references/figma-user-client-visual-evidence.md": "sha256:2efa1c69fc6097d7eda863fe41b67ada604af2de5b7abfad6133a99f4dff134a",
122
- "design-system/references/figma-foundations-2026-11-05.md": "sha256:c29b73e166465790fd128c2d0eecd09f7d60eab9bad4130c3d843cd0c95308a9",
122
+ "design-system/references/figma-foundations-2026-11-05.md": "sha256:b38944968bd0d31b58b5d3dd5d9e7890423db342c1a3c71862ee53536ff69bff",
123
123
  "design-system/DESIGN.md": "sha256:3b903c674e54fdd762a42fa1e2a4b681aec42ad12cff3f1256dacdf113fde3af",
124
- "packages/ui/component-registry.json": "sha256:a4c6554280175ecfb14b93f47037ba5e0c546f602aaa1e2713e440dd56cea360"
124
+ "packages/ui/component-registry.json": "sha256:fe9faaca089af104353294aa367b018499c08ece3b73010160f683051315b924"
125
125
  }
126
126
  }
@@ -129,3 +129,64 @@ Honor privilege pet311:2353 full context/screenshot plus direct properties: card
129
129
  ## Shared fixed40 line-height after0.1.25
130
130
 
131
131
  Direct properties in current pet-edit original nodes1683:401 (font36) and1683:406 (font28) both explicitly lineHeight PIXELS40, alongside documented earlier tip font24/fixed40. Promote typography.lineHeight.scale40=40rpx as a deliberate finite shared fixed-height value across these text roles, not as an AUTO-text approximation. Current hero1683:390 was exported read-only with svgOutlineText:false; Figma nodes were not cloned, hidden or modified.
132
+
133
+
134
+ ## Consolidated source additions in0.1.27
135
+
136
+ Full contexts/screenshots and direct node properties distinguish actual paint alpha and fixed text heights. System notifications655:1734: metadata655:1803/1805/1809 and details655:1837 are font26/PIXELS31, establishing finite typography.lineHeight.scale31=31rpx rather than borrowing assist typography. Titles655:1800/1801/1802 are font30/PIXELS36 and body655:1806/1807/1808 font26/AUTO, so retain existing titleDense36 and normal respectively. Cards655:1797/1798/1799 have radius36 and white fill with node opacity0.98; color.background.notificationCard=rgba(255,255,255,0.98) applies only to the background, never to the whole content container (which would double alpha text). Individual text opacity is not uniform: date655:1809 is1.
137
+
138
+ Shared color.background.brandPrimary70=rgba(254,203,231,0.7) has independent evidence: record mood card248:80 #FECBE7/node opacity0.699999988; ranking TOP2 404:530 #FECBE7/fill opacity0.699999988 and node opacity1. Ranking TOP1 404:522 uses existing brand.primary; TOP3 404:538 fill opacity0.40000000596 gives brandPrimary40=rgba(254,203,231,0.4). Do not replace these with opaque flattened samples or assign a record-specific alias to ranking.
139
+
140
+ Recommend location divider665:4862 is2×24, solid black fill opacity1 and node opacity0.10000000149: color.border.locationDivider=rgba(0,0,0,0.1). Adjacent address665:4860 and time665:4861 font28/AUTO, distinct from the fixed42 home labels. Order status827:1770 explicitly #000000 with opacity1, font42 PingFang SC Semibold/AUTO: color.text.black preserves actual pure black rather than approximating existing #111.
141
+
142
+ Ranking ordinary-number text404:480/488 directly confirms MiSans Semibold32/AUTO, solid #DDDDDD opacity1/node1. Promote color.text.rankingMuted=#DDDDDD for this text role; existing disabled#CCC and border aliases are not visually or semantically interchangeable.
143
+
144
+ Avatar upload direct properties1683:402:170×170 RECTANGLE #F0F0F0 radius200 (clamped to85 visually);1683:40370×70 BOOLEAN_OPERATION fill#999. Formal upload/media-upload triggerVariant avatar reuses existing background.tab and mo-core plus-thin, with dimensions and imageRadius still consumer-owned. No business dimensions or upload APIs are hardcoded in the library.
145
+
146
+ Ranking numeric nodes404:480/488 directly specify MiSans Semibold32/AUTO. Preserve existing typography.fontFamily="system" policy and add typography.family.number="MiSans, sans-serif" → --mo-font-family-number. This declares the original family only; consumers must separately load unmodified official font assets through supported Skyline/native font loading, handle failure with the declared fallback, and verify network/CORS. No bundled font, altered subset or Latin near-match is introduced by this library token.
147
+
148
+
149
+ ## Consolidated0.1.28 follow-up source measurements
150
+
151
+ Version0.1.27 was frozen but never published because web identity sessions expired while the device was locked.0.1.28 includes all eight variables and avatar capability described above, plus these independently measured finite additions; no change is made to the frozen0.1.27 tarball.
152
+
153
+ Spacing.scale11: mine1871:2442 name y4446 minus avatar2447 y4435. Scale47: price detail963:2130 pet x8625 minus date2137x8578. Scale19: price summary2142y1946h42 ends1988 to card2089y2007. Scale81: total2084y2757h53 ends2810 to tip2090y2891. Scale23: terms1699:2855 bulletx4043w10 ends4053 to text2858x4076. Scale15: same bullet y4589 minus texty4574. Scale39: message691:106y−2121 and691:90y−1959 establish162 row pitch, centered84 icons leave78/2=39 per row interior; this measured row-padding role does not establish the first-row navigation offset. Scale69: type1699:2587 titley3925h70 ends3995 to card2575y4064. Scale90: same cardy4064 to complete hero2616y4154. Scale92: identity1739:2386 navigation y3718h177 ends3895 to progress2385y3987. Scale101: typecard1699:2575y4064h960 ends5024 to studentlink2585y5125. These deliberately finite values are valid only for measured actual padding/margin/gap/indent, never arbitrary geometry, font-size or line-height.
154
+
155
+ Corrections using existing values: mine order first-item inset40, not42; menu gaps54 on each side of a1px divider, not55; login raw logo-to-welcome gap60, not50. Badge1786:2424 labely7911h44 ends7955 to second-row image2460y8015 gives60, not66. Terms titlesfont30/AUTO and bullet offset15, not17. Type hero complete groupheight408 includes its shadow beyond image384; complete-group to title gap60 (image-only container would need84), not76. Type description-to-button70, not48. Pay-success note after fixed48 two-line text uses gap30, then next button gap90; prior26/80 and flexible blank120 were not source-exact. Profile current1704:1921 supersedes602:1290: cardtop285, intro padding30, header name inset182 is avatar158+existing24; record yearfont30/AUTO with section gap40; record titlesfont26/AUTO. None of these obsolete values establishes a new token.
156
+
157
+ Colors: city divider665:4246 #D9D9D9,2×16, paint/node opacity1 -> color.border.cityDivider. Message divider691:141/144 and others stroke#F5F3F1 opacity1 -> color.border.messageDivider.
158
+
159
+ Typography.size.statValue48=48rpx: direct clock1575:5081/5092/5070 font48/AUTO/MiSans Demibold; walk568:1279/1284/1286/1287 font48/AUTO/MiSans Semibold. Preserve actual font styles where text is rendered; original baked clock PNG does not require remapping its font. No48 line-height is inferred. Typography.letterSpacing.numberTight=-0.05em: ranking404:548/551/552 font26 and404:480/488 font32 all directly report letterSpacing PERCENT−5 with MiSans Semibold/AUTO. This is true relative tracking, not a spacing or geometric alias.
160
+
161
+
162
+ ## Consolidated follow-up after0.1.28
163
+
164
+ spacing.scale.3=3rpx: 665:3744, 665:3747, 665:3750, 665:3753, 665:3756. 20px star boxes absolute x2052/2075/2098/2121/2144; gap3; list18px stars step22 -> existing4.
165
+
166
+ spacing.scale.5=5rpx: 2307:2748, 2307:2747, 2307:2744, 2307:2743. 44px icon y2915 ends2959 -> font22 AUTO label y2964/h31; gap5.
167
+
168
+ spacing.scale.45=45rpx: 866:1377, 866:1397, 866:1398, 866:1399, 866:1400, 866:1401. font28 PIXELS48; y2421/2514/2607/2700/2793/2886 -> pitch93 -48=45.
169
+
170
+ borderWidth.avatarOverlap=2rpx: 827:1685, 827:1686. 72x72 Vector, strokeWeight2 INSIDE, white solid opacity1; old border4 rejected.
171
+
172
+ spacing.scale.27=27rpx: 1575:5071, 1575:5082, 1575:5060. Direct FRAME autolayout paddingBottom27; paddingTop36; first twoX44, finalX20.
173
+
174
+ spacing.scale.204=204rpx: 2235:2399, 2235:2444. Login navigation y0h176 ends176; rawlogo y380 ->gap204; rendered glyph has internal raw padding, do not confuse painty389.
175
+
176
+ spacing.scale.239=239rpx: 2235:2397, 2245:2531. Loginframeh1624, termsy1341h44 ends1385 ->239; account actual safe area separately, no duplicated240.
177
+
178
+ color.border.scheduleDivider=#D8D8D8: 827:1690. Original SVG b7a1e.svg path2x12 fill#D8D8D8; local original artifact174/order-schedule-divider.svg verified.
179
+
180
+ spacing.scale.2=2rpx: 2260:2631, 2260:2632. number relativex158width72 right230 -> unitrelativex232 =gap2; independent direct boxes.
181
+
182
+ spacing.scale.25=25rpx: 1704:2267, 1704:2321. cardtop6616 -> namegroup6641 =25 actual inner top.
183
+
184
+ spacing.scale.35=35rpx: 1704:2267, 1704:2342, 665:3731, I665:3731;563:4967. profile avatar6581 above card6616 by35; doubleheader title10634 minus headertop10599=35.
185
+
186
+ spacing.scale.37=37rpx: 1704:2265, 1704:2267. hero6331+322=6653 -> card6616, actual overlap37; oldcard280 rejected.
187
+
188
+ spacing.scale.120=120rpx: 985:214, 985:245. Direct absolute navigation y-17 height177 ends160; hero y280 →120. Relative root y-17: nav end177, hero297. This is hero top spacing, not the flexible gap between title and tips..
189
+
190
+ popup-page adds headerVariant=center-double and a subtitle named slot. Original header665:3731 has166 height, title top35 and AUTO36 text, title-to-subtitle gap12. Default120 header and controlled events remain unchanged. Registry, schema, README, formal demo and compatibility tests are updated. Real Skyline3.16.1 native clicks verified double title, five-star subtitle, default body slot and X close, then the default header. Evidence: docs/runtime/2026-11-05/popup-double-evidence.json.
191
+
192
+ Spacing.scale42=42rpx: order detail827:1723 avatar absolute y810/h60 ends870;827:1683 first service group and827:1698 title start912; actual gap42, independent of list1374 padding24+18.
@@ -2,7 +2,8 @@
2
2
  "borderWidth": {
3
3
  "hairline": "1rpx",
4
4
  "selection": "4rpx",
5
- "avatarSelection": "3rpx"
5
+ "avatarSelection": "3rpx",
6
+ "avatarOverlap": "2rpx"
6
7
  },
7
8
  "color": {
8
9
  "brand": {
@@ -45,7 +46,9 @@
45
46
  "disabled": "#CCCCCC",
46
47
  "inverse": "#FFFFFF",
47
48
  "amount": "#FF3E7A",
48
- "active": "#FF3E7A"
49
+ "active": "#FF3E7A",
50
+ "black": "#000000",
51
+ "rankingMuted": "#DDDDDD"
49
52
  },
50
53
  "background": {
51
54
  "page": "#F8F8F8",
@@ -62,7 +65,10 @@
62
65
  "featurePink": "rgba(255, 134, 201, 0.1)",
63
66
  "featurePurple": "rgba(149, 163, 253, 0.1)",
64
67
  "featureGreen": "rgba(17, 191, 89, 0.1)",
65
- "serviceStepActive": "rgba(254, 203, 231, 0.2)"
68
+ "serviceStepActive": "rgba(254, 203, 231, 0.2)",
69
+ "brandPrimary70": "rgba(254, 203, 231, 0.7)",
70
+ "brandPrimary40": "rgba(254, 203, 231, 0.4)",
71
+ "notificationCard": "rgba(255, 255, 255, 0.98)"
66
72
  },
67
73
  "accent": {
68
74
  "amount": "#FF3E7A"
@@ -76,7 +82,11 @@
76
82
  "border": {
77
83
  "default": "#CCCCCC",
78
84
  "strong": "#c9cdd4",
79
- "subtle": "#F0F0F0"
85
+ "subtle": "#F0F0F0",
86
+ "locationDivider": "rgba(0, 0, 0, 0.1)",
87
+ "cityDivider": "#D9D9D9",
88
+ "messageDivider": "#F5F3F1",
89
+ "scheduleDivider": "#D8D8D8"
80
90
  },
81
91
  "status": {
82
92
  "success": "#11BF59",
@@ -153,26 +163,49 @@
153
163
  "pageStart": "100rpx",
154
164
  "panelInset": "54rpx",
155
165
  "scale": {
166
+ "2": "2rpx",
167
+ "3": "3rpx",
168
+ "5": "5rpx",
156
169
  "6": "6rpx",
157
170
  "10": "10rpx",
171
+ "11": "11rpx",
158
172
  "14": "14rpx",
173
+ "15": "15rpx",
159
174
  "18": "18rpx",
175
+ "19": "19rpx",
160
176
  "20": "20rpx",
161
177
  "21": "21rpx",
162
178
  "22": "22rpx",
179
+ "23": "23rpx",
180
+ "25": "25rpx",
163
181
  "26": "26rpx",
182
+ "27": "27rpx",
164
183
  "30": "30rpx",
165
184
  "31": "31rpx",
166
185
  "34": "34rpx",
186
+ "35": "35rpx",
167
187
  "36": "36rpx",
188
+ "37": "37rpx",
189
+ "39": "39rpx",
168
190
  "40": "40rpx",
191
+ "42": "42rpx",
169
192
  "44": "44rpx",
193
+ "45": "45rpx",
194
+ "47": "47rpx",
170
195
  "50": "50rpx",
171
196
  "54": "54rpx",
172
197
  "60": "60rpx",
198
+ "69": "69rpx",
173
199
  "70": "70rpx",
200
+ "81": "81rpx",
201
+ "90": "90rpx",
202
+ "92": "92rpx",
174
203
  "100": "100rpx",
175
- "125": "125rpx"
204
+ "101": "101rpx",
205
+ "120": "120rpx",
206
+ "125": "125rpx",
207
+ "204": "204rpx",
208
+ "239": "239rpx"
176
209
  }
177
210
  },
178
211
  "typography": {
@@ -192,7 +225,8 @@
192
225
  "bodyXl": "30rpx",
193
226
  "captionSm": "18rpx",
194
227
  "display": "50rpx",
195
- "amountLg": "70rpx"
228
+ "amountLg": "70rpx",
229
+ "statValue48": "48rpx"
196
230
  },
197
231
  "lineHeight": {
198
232
  "headlineLg": "59rpx",
@@ -214,6 +248,7 @@
214
248
  "standard": 1.4,
215
249
  "titleDense": "36rpx",
216
250
  "scale": {
251
+ "31": "31rpx",
217
252
  "40": "40rpx",
218
253
  "42": "42rpx",
219
254
  "44": "44rpx"
@@ -227,6 +262,12 @@
227
262
  "regular": 400,
228
263
  "medium": 500,
229
264
  "semibold": 600
265
+ },
266
+ "family": {
267
+ "number": "MiSans, sans-serif"
268
+ },
269
+ "letterSpacing": {
270
+ "numberTight": "-0.05em"
230
271
  }
231
272
  }
232
273
  }
@@ -1,4 +1,4 @@
1
1
  module.exports = {
2
- version: "0.1.26",
2
+ version: "0.1.29",
3
3
  components: ["button","calendar","card","countdown","form","form-group","form-input","form-textarea","icon","image-cropper","input","media-upload","navbar","notify","oss-upload","photo-slot","popup","popup-page","progress","rate","stepper","switch","tab","tabs","textarea","toast","upload"]
4
4
  };
@@ -21,6 +21,7 @@ function getWindowHeight() {
21
21
  }
22
22
 
23
23
  Component({
24
+ options: { multipleSlots: true },
24
25
  properties: {
25
26
  show: {
26
27
  type: Boolean,
@@ -30,6 +31,10 @@ Component({
30
31
  type: String,
31
32
  value: ""
32
33
  },
34
+ headerVariant: {
35
+ type: String,
36
+ value: "default"
37
+ },
33
38
  zIndex: {
34
39
  type: Number,
35
40
  value: 999
@@ -16,9 +16,12 @@
16
16
 
17
17
  <view
18
18
  wx:if="{{title}}"
19
- class="mo-popup-page__header mo-popup-page__header--{{titleAlign}}"
19
+ class="mo-popup-page__header mo-popup-page__header--{{headerVariant === 'center-double' ? 'center' : titleAlign}} {{headerVariant === 'center-double' ? 'is-double' : ''}}"
20
20
  >
21
21
  <text class="mo-popup-page__title">{{title}}</text>
22
+ <view wx:if="{{headerVariant === 'center-double'}}" class="mo-popup-page__subtitle">
23
+ <slot name="subtitle"></slot>
24
+ </view>
22
25
  <!--
23
26
  关闭按钮。设计「浮层标题-居中-单行 H120」(506:2954)里点击区域为 48rpx,
24
27
  可见 ✕ 约 25rpx、色值 #999999(506:2947)。当前 close 字形接近铺满画布,
@@ -129,3 +129,24 @@
129
129
  align-items: center;
130
130
  justify-content: center;
131
131
  }
132
+
133
+ /* Figma665:3731 H166: title top35, AUTO36; subtitle gap12. */
134
+ .mo-popup-page__header--center.is-double {
135
+ height: 166rpx;
136
+ flex-direction: column;
137
+ justify-content: flex-start;
138
+ padding-top: var(--mo-spacing-scale-35, 35rpx);
139
+ }
140
+
141
+ .mo-popup-page__header--center.is-double .mo-popup-page__title {
142
+ flex: none;
143
+ line-height: normal;
144
+ }
145
+
146
+ .mo-popup-page__subtitle {
147
+ flex: none;
148
+ display: flex;
149
+ align-items: center;
150
+ justify-content: center;
151
+ margin-top: var(--mo-spacing-3, 12rpx);
152
+ }
@@ -4,6 +4,7 @@ page,
4
4
  --mo-border-width-hairline: 1rpx;
5
5
  --mo-border-width-selection: 4rpx;
6
6
  --mo-border-width-avatar-selection: 3rpx;
7
+ --mo-border-width-avatar-overlap: 2rpx;
7
8
  --mo-color-brand-primary: #FECBE7;
8
9
  --mo-color-brand-primary-active: #FF7688;
9
10
  --mo-color-brand-primary-subtle: #FFC2C2;
@@ -32,6 +33,8 @@ page,
32
33
  --mo-color-text-inverse: #FFFFFF;
33
34
  --mo-color-text-amount: #FF3E7A;
34
35
  --mo-color-text-active: #FF3E7A;
36
+ --mo-color-text-black: #000000;
37
+ --mo-color-text-ranking-muted: #DDDDDD;
35
38
  --mo-color-background-page: #F8F8F8;
36
39
  --mo-color-background-surface: #FFFFFF;
37
40
  --mo-color-background-subtle: #FAFAFA;
@@ -47,6 +50,9 @@ page,
47
50
  --mo-color-background-feature-purple: rgba(149, 163, 253, 0.1);
48
51
  --mo-color-background-feature-green: rgba(17, 191, 89, 0.1);
49
52
  --mo-color-background-service-step-active: rgba(254, 203, 231, 0.2);
53
+ --mo-color-background-brand-primary-70: rgba(254, 203, 231, 0.7);
54
+ --mo-color-background-brand-primary-40: rgba(254, 203, 231, 0.4);
55
+ --mo-color-background-notification-card: rgba(255, 255, 255, 0.98);
50
56
  --mo-color-accent-amount: #FF3E7A;
51
57
  --mo-color-gender-female: #FF86C9;
52
58
  --mo-color-gender-male: #38A6FF;
@@ -55,6 +61,10 @@ page,
55
61
  --mo-color-border-default: #CCCCCC;
56
62
  --mo-color-border-strong: #c9cdd4;
57
63
  --mo-color-border-subtle: #F0F0F0;
64
+ --mo-color-border-location-divider: rgba(0, 0, 0, 0.1);
65
+ --mo-color-border-city-divider: #D9D9D9;
66
+ --mo-color-border-message-divider: #F5F3F1;
67
+ --mo-color-border-schedule-divider: #D8D8D8;
58
68
  --mo-color-status-success: #11BF59;
59
69
  --mo-color-status-warning: #FC9517;
60
70
  --mo-color-status-danger: #FA5051;
@@ -111,26 +121,49 @@ page,
111
121
  --mo-spacing-section-gap-lg: 60rpx;
112
122
  --mo-spacing-page-start: 100rpx;
113
123
  --mo-spacing-panel-inset: 54rpx;
124
+ --mo-spacing-scale-2: 2rpx;
125
+ --mo-spacing-scale-3: 3rpx;
126
+ --mo-spacing-scale-5: 5rpx;
114
127
  --mo-spacing-scale-6: 6rpx;
115
128
  --mo-spacing-scale-10: 10rpx;
129
+ --mo-spacing-scale-11: 11rpx;
116
130
  --mo-spacing-scale-14: 14rpx;
131
+ --mo-spacing-scale-15: 15rpx;
117
132
  --mo-spacing-scale-18: 18rpx;
133
+ --mo-spacing-scale-19: 19rpx;
118
134
  --mo-spacing-scale-20: 20rpx;
119
135
  --mo-spacing-scale-21: 21rpx;
120
136
  --mo-spacing-scale-22: 22rpx;
137
+ --mo-spacing-scale-23: 23rpx;
138
+ --mo-spacing-scale-25: 25rpx;
121
139
  --mo-spacing-scale-26: 26rpx;
140
+ --mo-spacing-scale-27: 27rpx;
122
141
  --mo-spacing-scale-30: 30rpx;
123
142
  --mo-spacing-scale-31: 31rpx;
124
143
  --mo-spacing-scale-34: 34rpx;
144
+ --mo-spacing-scale-35: 35rpx;
125
145
  --mo-spacing-scale-36: 36rpx;
146
+ --mo-spacing-scale-37: 37rpx;
147
+ --mo-spacing-scale-39: 39rpx;
126
148
  --mo-spacing-scale-40: 40rpx;
149
+ --mo-spacing-scale-42: 42rpx;
127
150
  --mo-spacing-scale-44: 44rpx;
151
+ --mo-spacing-scale-45: 45rpx;
152
+ --mo-spacing-scale-47: 47rpx;
128
153
  --mo-spacing-scale-50: 50rpx;
129
154
  --mo-spacing-scale-54: 54rpx;
130
155
  --mo-spacing-scale-60: 60rpx;
156
+ --mo-spacing-scale-69: 69rpx;
131
157
  --mo-spacing-scale-70: 70rpx;
158
+ --mo-spacing-scale-81: 81rpx;
159
+ --mo-spacing-scale-90: 90rpx;
160
+ --mo-spacing-scale-92: 92rpx;
132
161
  --mo-spacing-scale-100: 100rpx;
162
+ --mo-spacing-scale-101: 101rpx;
163
+ --mo-spacing-scale-120: 120rpx;
133
164
  --mo-spacing-scale-125: 125rpx;
165
+ --mo-spacing-scale-204: 204rpx;
166
+ --mo-spacing-scale-239: 239rpx;
134
167
  --mo-font-size-headline-lg: 42rpx;
135
168
  --mo-font-size-title-1: 38rpx;
136
169
  --mo-font-size-title-2: 36rpx;
@@ -146,6 +179,7 @@ page,
146
179
  --mo-font-size-caption-sm: 18rpx;
147
180
  --mo-font-size-display: 50rpx;
148
181
  --mo-font-size-amount-lg: 70rpx;
182
+ --mo-font-size-stat-value-48: 48rpx;
149
183
  --mo-line-height-headline-lg: 59rpx;
150
184
  --mo-line-height-title-1: 53rpx;
151
185
  --mo-line-height-title-2: 50rpx;
@@ -164,6 +198,7 @@ page,
164
198
  --mo-line-height-body-lg-relaxed: 45rpx;
165
199
  --mo-line-height-standard: 1.4;
166
200
  --mo-line-height-title-dense: 36rpx;
201
+ --mo-line-height-scale-31: 31rpx;
167
202
  --mo-line-height-scale-40: 40rpx;
168
203
  --mo-line-height-scale-42: 42rpx;
169
204
  --mo-line-height-scale-44: 44rpx;
@@ -174,4 +209,6 @@ page,
174
209
  --mo-font-weight-regular: 400;
175
210
  --mo-font-weight-medium: 500;
176
211
  --mo-font-weight-semibold: 600;
212
+ --mo-font-family-number: MiSans, sans-serif;
213
+ --mo-letter-spacing-number-tight: -0.05em;
177
214
  }
@@ -23,7 +23,7 @@ function normalizeItemAspectRatio(value) {
23
23
  }
24
24
 
25
25
  function normalizeTriggerVariant(value) {
26
- return value === "camera" || value === "photo" ? value : "default";
26
+ return value === "camera" || value === "photo" || value === "avatar" ? value : "default";
27
27
  }
28
28
 
29
29
  function normalizeAccept(value) {
@@ -221,7 +221,7 @@ Component({
221
221
  displayList: fileList.map((file, index) => normalizeDisplayFile(file, index, radius)),
222
222
  canChoose: !this.data.disabled && fileList.length < maxCount,
223
223
  itemStyle: `width: ${itemSize}rpx; height: ${itemHeight}rpx;`,
224
- triggerRadiusStyle: normalizeTriggerVariant(this.data.triggerVariant) === "photo" ? `border-radius: ${radius}rpx;` : "",
224
+ triggerRadiusStyle: ["photo", "avatar"].includes(normalizeTriggerVariant(this.data.triggerVariant)) ? `border-radius: ${radius}rpx;` : "",
225
225
  resolvedTriggerVariant: normalizeTriggerVariant(this.data.triggerVariant)
226
226
  });
227
227
  },
@@ -39,7 +39,7 @@
39
39
  <mo-icon name="plus" size="{{24}}" color="#4A383A" />
40
40
  </view>
41
41
  </view>
42
- <mo-icon wx:elif="{{resolvedTriggerVariant === 'photo'}}" name="plus-thin" size="{{70}}" color="#999999" />
42
+ <mo-icon wx:elif="{{resolvedTriggerVariant === 'photo' || resolvedTriggerVariant === 'avatar'}}" name="plus-thin" size="{{70}}" color="#999999" />
43
43
  <block wx:else>
44
44
  <slot></slot>
45
45
  <text class="mo-upload__trigger-plus">+</text>
@@ -165,3 +165,8 @@
165
165
  border: 0;
166
166
  background-color: var(--mo-color-background-page, #F8F8F8);
167
167
  }
168
+
169
+ .mo-upload__trigger.is-avatar {
170
+ border: 0;
171
+ background-color: var(--mo-color-background-tab, #F0F0F0);
172
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "maooo-skyline-ui-system",
3
- "version": "0.1.26",
3
+ "version": "0.1.29",
4
4
  "private": false,
5
5
  "description": "Skyline + AI design system workspace for WeChat Mini Program UI components.",
6
6
  "main": "miniprogram_dist/index.js",