maooo-skyline-ui-system 0.1.26 → 0.1.28

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.
@@ -616,7 +616,7 @@
616
616
  "Controlled upload file list display",
617
617
  "Auto append or business pipeline choose mode",
618
618
  "Configurable item width and aspect ratio",
619
- "Default, borderless camera-plus and photo placeholder trigger variants",
619
+ "Default, borderless camera-plus, photo and avatar placeholder trigger variants",
620
620
  "Preview and delete events",
621
621
  "Max count limiting",
622
622
  "Basic upload status overlays"
@@ -679,7 +679,7 @@
679
679
  "capabilities": [
680
680
  "Composes mo-upload media choosing and display",
681
681
  "Composes mo-image-cropper image and cover cropping",
682
- "Configurable item width and aspect ratio and default, camera-plus or photo trigger variants",
682
+ "Configurable item width and aspect ratio and default, camera-plus, photo or avatar trigger variants",
683
683
  "Uploads image and video files to Aliyun OSS",
684
684
  "Optionally audits uploaded images before success",
685
685
  "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",
@@ -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.28"
5
5
  },
6
- "snapshotVersion": "0.1.26",
7
- "generatedAt": "2026-11-05T03:31:33.237Z",
6
+ "snapshotVersion": "0.1.28",
7
+ "generatedAt": "2026-11-05T04:59:24.989Z",
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",
@@ -113,14 +113,14 @@
113
113
  ],
114
114
  "sourceHashes": {
115
115
  "design-system/tokens/source/border-width.json": "sha256:a154bb433b3b4301e4da7ba9756821180aaae5c96bc503a6a2be2acf9ca85e53",
116
- "design-system/tokens/source/color.json": "sha256:e62f7f8012ff857b8084ec880ee09324a79b7822a9208364381cd7e4b5c9ee4c",
116
+ "design-system/tokens/source/color.json": "sha256:e7568dace701de11e48d9d938d2a92ca954046bbfa08dbe472e297770cc4843f",
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:e1398e8c86fa38b572d9b01410057327af0987acfbca80fead7abc0f9129cdf4",
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:4305e6309c999cd20052d89259c0a51b6ada9143b833456a8873854f7a339776",
123
123
  "design-system/DESIGN.md": "sha256:3b903c674e54fdd762a42fa1e2a4b681aec42ad12cff3f1256dacdf113fde3af",
124
- "packages/ui/component-registry.json": "sha256:a4c6554280175ecfb14b93f47037ba5e0c546f602aaa1e2713e440dd56cea360"
124
+ "packages/ui/component-registry.json": "sha256:ee37ab5d7c1ec17874737ca08e6540421c0b6d311e6c92a2f396b7e4f1b28663"
125
125
  }
126
126
  }
@@ -129,3 +129,31 @@ 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.
@@ -45,7 +45,9 @@
45
45
  "disabled": "#CCCCCC",
46
46
  "inverse": "#FFFFFF",
47
47
  "amount": "#FF3E7A",
48
- "active": "#FF3E7A"
48
+ "active": "#FF3E7A",
49
+ "black": "#000000",
50
+ "rankingMuted": "#DDDDDD"
49
51
  },
50
52
  "background": {
51
53
  "page": "#F8F8F8",
@@ -62,7 +64,10 @@
62
64
  "featurePink": "rgba(255, 134, 201, 0.1)",
63
65
  "featurePurple": "rgba(149, 163, 253, 0.1)",
64
66
  "featureGreen": "rgba(17, 191, 89, 0.1)",
65
- "serviceStepActive": "rgba(254, 203, 231, 0.2)"
67
+ "serviceStepActive": "rgba(254, 203, 231, 0.2)",
68
+ "brandPrimary70": "rgba(254, 203, 231, 0.7)",
69
+ "brandPrimary40": "rgba(254, 203, 231, 0.4)",
70
+ "notificationCard": "rgba(255, 255, 255, 0.98)"
66
71
  },
67
72
  "accent": {
68
73
  "amount": "#FF3E7A"
@@ -76,7 +81,10 @@
76
81
  "border": {
77
82
  "default": "#CCCCCC",
78
83
  "strong": "#c9cdd4",
79
- "subtle": "#F0F0F0"
84
+ "subtle": "#F0F0F0",
85
+ "locationDivider": "rgba(0, 0, 0, 0.1)",
86
+ "cityDivider": "#D9D9D9",
87
+ "messageDivider": "#F5F3F1"
80
88
  },
81
89
  "status": {
82
90
  "success": "#11BF59",
@@ -155,23 +163,34 @@
155
163
  "scale": {
156
164
  "6": "6rpx",
157
165
  "10": "10rpx",
166
+ "11": "11rpx",
158
167
  "14": "14rpx",
168
+ "15": "15rpx",
159
169
  "18": "18rpx",
170
+ "19": "19rpx",
160
171
  "20": "20rpx",
161
172
  "21": "21rpx",
162
173
  "22": "22rpx",
174
+ "23": "23rpx",
163
175
  "26": "26rpx",
164
176
  "30": "30rpx",
165
177
  "31": "31rpx",
166
178
  "34": "34rpx",
167
179
  "36": "36rpx",
180
+ "39": "39rpx",
168
181
  "40": "40rpx",
169
182
  "44": "44rpx",
183
+ "47": "47rpx",
170
184
  "50": "50rpx",
171
185
  "54": "54rpx",
172
186
  "60": "60rpx",
187
+ "69": "69rpx",
173
188
  "70": "70rpx",
189
+ "81": "81rpx",
190
+ "90": "90rpx",
191
+ "92": "92rpx",
174
192
  "100": "100rpx",
193
+ "101": "101rpx",
175
194
  "125": "125rpx"
176
195
  }
177
196
  },
@@ -192,7 +211,8 @@
192
211
  "bodyXl": "30rpx",
193
212
  "captionSm": "18rpx",
194
213
  "display": "50rpx",
195
- "amountLg": "70rpx"
214
+ "amountLg": "70rpx",
215
+ "statValue48": "48rpx"
196
216
  },
197
217
  "lineHeight": {
198
218
  "headlineLg": "59rpx",
@@ -214,6 +234,7 @@
214
234
  "standard": 1.4,
215
235
  "titleDense": "36rpx",
216
236
  "scale": {
237
+ "31": "31rpx",
217
238
  "40": "40rpx",
218
239
  "42": "42rpx",
219
240
  "44": "44rpx"
@@ -227,6 +248,12 @@
227
248
  "regular": 400,
228
249
  "medium": 500,
229
250
  "semibold": 600
251
+ },
252
+ "family": {
253
+ "number": "MiSans, sans-serif"
254
+ },
255
+ "letterSpacing": {
256
+ "numberTight": "-0.05em"
230
257
  }
231
258
  }
232
259
  }
@@ -1,4 +1,4 @@
1
1
  module.exports = {
2
- version: "0.1.26",
2
+ version: "0.1.28",
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
  };
@@ -32,6 +32,8 @@ page,
32
32
  --mo-color-text-inverse: #FFFFFF;
33
33
  --mo-color-text-amount: #FF3E7A;
34
34
  --mo-color-text-active: #FF3E7A;
35
+ --mo-color-text-black: #000000;
36
+ --mo-color-text-ranking-muted: #DDDDDD;
35
37
  --mo-color-background-page: #F8F8F8;
36
38
  --mo-color-background-surface: #FFFFFF;
37
39
  --mo-color-background-subtle: #FAFAFA;
@@ -47,6 +49,9 @@ page,
47
49
  --mo-color-background-feature-purple: rgba(149, 163, 253, 0.1);
48
50
  --mo-color-background-feature-green: rgba(17, 191, 89, 0.1);
49
51
  --mo-color-background-service-step-active: rgba(254, 203, 231, 0.2);
52
+ --mo-color-background-brand-primary-70: rgba(254, 203, 231, 0.7);
53
+ --mo-color-background-brand-primary-40: rgba(254, 203, 231, 0.4);
54
+ --mo-color-background-notification-card: rgba(255, 255, 255, 0.98);
50
55
  --mo-color-accent-amount: #FF3E7A;
51
56
  --mo-color-gender-female: #FF86C9;
52
57
  --mo-color-gender-male: #38A6FF;
@@ -55,6 +60,9 @@ page,
55
60
  --mo-color-border-default: #CCCCCC;
56
61
  --mo-color-border-strong: #c9cdd4;
57
62
  --mo-color-border-subtle: #F0F0F0;
63
+ --mo-color-border-location-divider: rgba(0, 0, 0, 0.1);
64
+ --mo-color-border-city-divider: #D9D9D9;
65
+ --mo-color-border-message-divider: #F5F3F1;
58
66
  --mo-color-status-success: #11BF59;
59
67
  --mo-color-status-warning: #FC9517;
60
68
  --mo-color-status-danger: #FA5051;
@@ -113,23 +121,34 @@ page,
113
121
  --mo-spacing-panel-inset: 54rpx;
114
122
  --mo-spacing-scale-6: 6rpx;
115
123
  --mo-spacing-scale-10: 10rpx;
124
+ --mo-spacing-scale-11: 11rpx;
116
125
  --mo-spacing-scale-14: 14rpx;
126
+ --mo-spacing-scale-15: 15rpx;
117
127
  --mo-spacing-scale-18: 18rpx;
128
+ --mo-spacing-scale-19: 19rpx;
118
129
  --mo-spacing-scale-20: 20rpx;
119
130
  --mo-spacing-scale-21: 21rpx;
120
131
  --mo-spacing-scale-22: 22rpx;
132
+ --mo-spacing-scale-23: 23rpx;
121
133
  --mo-spacing-scale-26: 26rpx;
122
134
  --mo-spacing-scale-30: 30rpx;
123
135
  --mo-spacing-scale-31: 31rpx;
124
136
  --mo-spacing-scale-34: 34rpx;
125
137
  --mo-spacing-scale-36: 36rpx;
138
+ --mo-spacing-scale-39: 39rpx;
126
139
  --mo-spacing-scale-40: 40rpx;
127
140
  --mo-spacing-scale-44: 44rpx;
141
+ --mo-spacing-scale-47: 47rpx;
128
142
  --mo-spacing-scale-50: 50rpx;
129
143
  --mo-spacing-scale-54: 54rpx;
130
144
  --mo-spacing-scale-60: 60rpx;
145
+ --mo-spacing-scale-69: 69rpx;
131
146
  --mo-spacing-scale-70: 70rpx;
147
+ --mo-spacing-scale-81: 81rpx;
148
+ --mo-spacing-scale-90: 90rpx;
149
+ --mo-spacing-scale-92: 92rpx;
132
150
  --mo-spacing-scale-100: 100rpx;
151
+ --mo-spacing-scale-101: 101rpx;
133
152
  --mo-spacing-scale-125: 125rpx;
134
153
  --mo-font-size-headline-lg: 42rpx;
135
154
  --mo-font-size-title-1: 38rpx;
@@ -146,6 +165,7 @@ page,
146
165
  --mo-font-size-caption-sm: 18rpx;
147
166
  --mo-font-size-display: 50rpx;
148
167
  --mo-font-size-amount-lg: 70rpx;
168
+ --mo-font-size-stat-value-48: 48rpx;
149
169
  --mo-line-height-headline-lg: 59rpx;
150
170
  --mo-line-height-title-1: 53rpx;
151
171
  --mo-line-height-title-2: 50rpx;
@@ -164,6 +184,7 @@ page,
164
184
  --mo-line-height-body-lg-relaxed: 45rpx;
165
185
  --mo-line-height-standard: 1.4;
166
186
  --mo-line-height-title-dense: 36rpx;
187
+ --mo-line-height-scale-31: 31rpx;
167
188
  --mo-line-height-scale-40: 40rpx;
168
189
  --mo-line-height-scale-42: 42rpx;
169
190
  --mo-line-height-scale-44: 44rpx;
@@ -174,4 +195,6 @@ page,
174
195
  --mo-font-weight-regular: 400;
175
196
  --mo-font-weight-medium: 500;
176
197
  --mo-font-weight-semibold: 600;
198
+ --mo-font-family-number: MiSans, sans-serif;
199
+ --mo-letter-spacing-number-tight: -0.05em;
177
200
  }
@@ -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.28",
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",