maooo-skyline-ui-system 0.1.21 → 0.1.22

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.
@@ -71,3 +71,5 @@ Compatibility notes:
71
71
  7. For generation instructions, read `design-system/prompts` and `design-system/skills`.
72
72
 
73
73
  AI output should not bypass schema. Evidence from design boards should be marked as evidence until it is promoted into token source, pattern documentation, schema, or component registry.
74
+
75
+ The dated [foundation correction evidence](references/figma-foundations-2026-11-05.md) documents promoted token values and their permitted roles; it is included in the published AI snapshot and read order. Read it with tokens before applying new spacing scales or explicit line-height variants.
@@ -1,15 +1,16 @@
1
1
  {
2
2
  "package": {
3
3
  "name": "maooo-skyline-ui-system",
4
- "version": "0.1.21"
4
+ "version": "0.1.22"
5
5
  },
6
- "snapshotVersion": "0.1.21",
7
- "generatedAt": "2026-11-05T01:38:27.226Z",
6
+ "snapshotVersion": "0.1.22",
7
+ "generatedAt": "2026-11-05T02:12:20.502Z",
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",
11
11
  "tokens.json",
12
12
  "references/figma-user-client-visual-evidence.md",
13
+ "references/figma-foundations-2026-11-05.md",
13
14
  "patterns",
14
15
  "schemas/page.schema.json",
15
16
  "component-registry.json",
@@ -61,7 +62,8 @@
61
62
  "patterns/navigation-tabbar.md"
62
63
  ],
63
64
  "references": [
64
- "references/figma-user-client-visual-evidence.md"
65
+ "references/figma-user-client-visual-evidence.md",
66
+ "references/figma-foundations-2026-11-05.md"
65
67
  ],
66
68
  "prompts": [
67
69
  "prompts/page-generation.prompt.md"
@@ -102,6 +104,7 @@
102
104
  "patterns/form-section.md",
103
105
  "patterns/navigation-tabbar.md",
104
106
  "prompts/page-generation.prompt.md",
107
+ "references/figma-foundations-2026-11-05.md",
105
108
  "references/figma-user-client-visual-evidence.md",
106
109
  "schemas/component.schema.json",
107
110
  "schemas/page.schema.json",
@@ -109,13 +112,15 @@
109
112
  "tokens.json"
110
113
  ],
111
114
  "sourceHashes": {
112
- "design-system/tokens/source/border-width.json": "sha256:8ac672de5e5912ff493646b74afc5304d15d9c13d6f83473742cb014bd30729e",
113
- "design-system/tokens/source/color.json": "sha256:6db4252b0409879d2e444e570fe200944c7e22798c3caebb480c507d57558e8a",
115
+ "design-system/tokens/source/border-width.json": "sha256:a154bb433b3b4301e4da7ba9756821180aaae5c96bc503a6a2be2acf9ca85e53",
116
+ "design-system/tokens/source/color.json": "sha256:cae2c9ab067fd5e9abdaf7977ff34ffdee087cd5483326ccb83b273fd2a625bb",
114
117
  "design-system/tokens/source/radius.json": "sha256:7ef7d9349d3e4caf5649b4715cb01c632c7ce20d1d330e94d086027bda9779ee",
115
118
  "design-system/tokens/source/shadow.json": "sha256:025bdabeb6b3e04c4174792506832f686f0662b12740dd3b5612846a4e063362",
116
- "design-system/tokens/source/spacing.json": "sha256:b0176c6eb256186a3e10ad6defa3ae46f81ce75ca4f4dfb8ccb9de6461e0ebfa",
117
- "design-system/tokens/source/typography.json": "sha256:9243057a115be33401b588011d1513e17c27e4977c0cd31fb20ee1700e410dd8",
118
- "design-system/DESIGN.md": "sha256:b00f2e5030df81c6d985eb46b9489b2ce98d0803134389d385053605aba66cbc",
119
+ "design-system/tokens/source/spacing.json": "sha256:48c0e8adaad606e37c16c6a84acb7be5f8341dc07516f440b400641a24981c28",
120
+ "design-system/tokens/source/typography.json": "sha256:ed72cd387c1cd9e3c6784a9a58871dc768a323a7df1de6a691bb0a6ba3349c72",
121
+ "design-system/references/figma-user-client-visual-evidence.md": "sha256:2efa1c69fc6097d7eda863fe41b67ada604af2de5b7abfad6133a99f4dff134a",
122
+ "design-system/references/figma-foundations-2026-11-05.md": "sha256:8455897519e087eb1f7820dea3958bb7915137a213552d1e8496a4763d9df260",
123
+ "design-system/DESIGN.md": "sha256:3b903c674e54fdd762a42fa1e2a4b681aec42ad12cff3f1256dacdf113fde3af",
119
124
  "packages/ui/component-registry.json": "sha256:a4c6554280175ecfb14b93f47037ba5e0c546f602aaa1e2713e440dd56cea360"
120
125
  }
121
126
  }
@@ -0,0 +1,69 @@
1
+ # Figma foundation corrections · 2026-11-05
2
+
3
+ File: `Zk2msFrLweYZezZLIZOoJX`. Inspected through Figma high-fidelity context plus read-only node properties. These additions address concrete missing roles; arbitrary page dimensions are not promoted to global tokens.
4
+
5
+ | Source node | Role | Canonical token | Exact value |
6
+ | --- | --- | --- | --- |
7
+ | 135:2 Font | Large body / form label | typography.size.bodyXl | 30rpx |
8
+ | 135:2 Font | Small caption | typography.size.captionSm | 18rpx |
9
+ | 834:1975 Layout | Looser body copy | typography.lineHeight.bodyLoose | 40rpx |
10
+ | 683:6701 TabBar | Subtle floating border | color.border.subtle | #F0F0F0 |
11
+ | 683:6701 TabBar | Floating navigation elevation | shadow.floating | 0 12rpx 24rpx rgba(0,0,0,0.047) |
12
+ | 671:5933 current homepage card | Gold badge background | color.tag.goldBackground | #FFF0C8 |
13
+ | 671:5933 current homepage card | Purple badge background | color.tag.purpleBackground | #E8E3FF |
14
+
15
+ Font-board text uses normal line-height; no fixed line-height is inferred from text bounding boxes. Existing guide geometry: page margin38, card36, item24, small tag12, tiny date8. TabBar radius100 on height112 clamps visually; existing pill is equivalent and does not require another token. Vector outline cornerRadius=0 does not establish a zero visual radius.
16
+
17
+ `mo-stepper variant="block"` is a component contract, not a global spacing scale: qualification frame1742:3294, background1742:3392 (674×100, radius24), buttons1742:3400/3407 (44×44, radius12), horizontal inset43. Label is owned by the page. The component uses the existing mo-core minus (two orthogonal strokes for the block plus), keeps native control hit targets, controlled values, min/max and disabled behavior. The default compact API remains compatible. Business adoption requires actual Skyline preview evidence.
18
+
19
+ The generation pipeline now emits runtime WXSS and TS together with the canonical snapshot. Previously missing existing tokens (spacing1/8/10, radiusnone, borderstrong, title/headline typography and palettes) are restored by generation, not recreated with alternate names. Publish validation rejects both runtime and snapshot drift.
20
+
21
+ Photo upload contract: Figma1740:2830/1740:2895/1740:2897, 538×372, radius36, background#F8F8F8, plus70×70 with8px stroke and#999999. `itemAspectRatio` defaults1; `triggerVariant=photo` does not alter file choice, crop, OSS, delete, or events. The exact SVG is uploaded to mo-core as plus-thin (icon48823338), avoiding the existing thicker record-action plus.
22
+
23
+ ## Measured layout roles
24
+
25
+ | Token | Value | Exact evidence |
26
+ | --- | --- | --- |
27
+ | spacing.fieldGap | 20rpx | Address form1054:2157: label1070:1541 bottom318 → field1070:1547 top338 |
28
+ | spacing.cardInset | 30rpx | Homecard671:5934 left38 → avatar671:5974 left68; mine menu1871:2296 children x30 |
29
+ | spacing.sectionInset | 40rpx | Mine user1871:2429 bottom315 → order1871:2422 top355; address1126:1525 first card top216 minus navigation176 |
30
+ | spacing.sectionGapLg | 60rpx | Address field1096:1720 bottom438 → next label1096:1721 top498; home trust665:4214 bottom1024 → card665:4213 bottom1084 |
31
+ | spacing.pageStart | 100rpx | Address1054:2157: navigation bottom176 → first label1070:1541 top276 |
32
+ | spacing.panelInset | 54rpx | Mine menu1871:2296 first row1871:2299 y54 and bottom823−(721+48)=54 |
33
+ | borderWidth.hairline | 1rpx | TabBar683:6701 strokeWeight1 |
34
+ | color.tag.goldText | #DC9416 | Homepage671:5947 |
35
+ | color.tag.purpleText | #806ED6 | Homepage671:5950/5953 |
36
+ | color.tag.defaultAddressBackground | rgba(255,134,201,0.12) | Default-address tag1126:1537 pink at12% over#FAFAFA (composite#FBECF4); retain the actual alpha |
37
+
38
+ Roles apply only to corresponding layout duties. Do not use spacing tokens to alias unrelated font, line-height, border-width, anchor geometry or icon sizes. No50/70 spacing is inferred from high raw-value frequency; those usages still require their actual page source. The measured home search separator bottom810 → button top864 is54, not50.
39
+
40
+ Large typography: `typography.size.display=50rpx` from certification heading1740:2841; `typography.size.amountLg=70rpx` from bond amount1743:3624. Both lineHeight=AUTO, so no fabricated70/98px line-height token accompanies these sizes.
41
+
42
+ Mine-page exact text/background properties:1871:2446 font36 with42px line-height → `typography.lineHeight.titleCompact`;1871:2300 font26 with36.4000015px line-height → `typography.lineHeight.bodyCompact=36.4rpx` (not36). Check-in1871:2431 fill#FC9517 at6% → `color.background.checkin`;profiletag1871:2444 fill#FF86C9 at10% → `color.tag.profileBackground`. Do not promote the incorrect prior check-in orangeFF8006@4%.
43
+
44
+ ## Follow-up batch 0.1.22
45
+
46
+ Direct node-property verification after0.1.21 was frozen:
47
+
48
+ | Token | Exact value | Figma source |
49
+ | --- | --- | --- |
50
+ | color.progress.track | #EEEEEE | 1740:2873 (270×12 track) |
51
+ | color.progress.active | #FF3E7A | 1740:2874 (90×12 fill) |
52
+ | color.background.guide | #D7E6FF | 665:4200 homepage service guide |
53
+ | color.background.heroPink | #FEDBEE | 1699:2569 certification hero |
54
+ | color.background.featureBlue | rgba(96,184,255,0.1) | 1743:3625 feature card, opacity0.1 |
55
+ | color.background.featureYellow | rgba(250,183,0,0.1) | 1743:3626 feature card, opacity0.1 |
56
+ | typography.lineHeight.bodyRelaxed | 36rpx | 1743:3629/3630 font24 with fixed36 |
57
+ | typography.lineHeight.bodyLgRelaxed | 45rpx | 1699:2615 security notice font26 with fixed45 |
58
+
59
+ Do not replace explicit36/45 line heights with normal or approximate36.4/44. The existing border.subtle#F0F0F0 also matches homepage separator665:4237/4243. Existing layout corrections need no new tokens: order entry1929:2092 icon1871:2476 y497+48 → label1871:2425 y565 gives20; TabBar683:6846 icon683:6848 y1465+48 → label683:6847 y1517 gives4.
60
+
61
+ Time mark sheet160:929 verified with full high-fidelity context and screenshot: backgrounds160:932/938/939/940/941 → `color.walkMark.{sniff,water,rest,stool,friend}Background` =#FFF4FA/#EAF4FF/#ECFFDF/#F7F5FF/#FFF9DD. Selected mark border160:932 is4px/#111 → `borderWidth.selection`; pet selection ellipse160:953 is3px/#111 → `borderWidth.avatarSelection`. Existing white4px/unselected outlines are not established by this evidence. Mark labels are28/AUTO at912 following100px circles at800, giving12px gap. Explicit typography:160:944/947 font34/line47.6 ;160:956 font36/line50.4 ;160:966 font28/line39.2 . Preserve fractions rather than substituting48/50/39. Existing historical rounded tokens remain compatible.
62
+
63
+ The three explicit text pairs all have exactly1.4 line-height ratio. Use one `typography.lineHeight.standard=1.4` unitless token with their actual font sizes instead of introducing three separately rounded constants. It yields47.6/50.4/39.2 at34/36/28rpx respectively. Do not apply it to AUTO text or fixed42/36/45 variants.
64
+
65
+ Six measured values promoted to a finite shared spacing scale: `spacing.scale.{20,30,40,54,60,100}`. Their values are identical to the directly evidenced roles above, retained as compatible semantic names. The explicit scale names distinguish physical rpx values from historical numbered indexes (`spacing.5=24`). Consumers may use this finite scale for actual padding/margin/gap when the page's source establishes the same distance; do not use it for font-size, line-height, stroke, icon dimensions or arbitrary anchors. This is a deliberate shared-scale promotion, not permission to add other raw values by frequency. Other values require further original-node evidence.
66
+
67
+ Walk result568:1136, cards568:1276/1277/1278: fills#FF86C9/#38A6FF/#FC9517 all atopacity0.1, radius24. Promote `color.walkStat.distanceBackground/durationBackground/markBackground` with10% alpha. Existing mini20% values are incorrect and are not promoted. Label positions568:1291/92/93 confirm role ordering; card y1086h182, labelx68y1122 versus firstcardx38 yields padding30/36, card gap24.
68
+
69
+ `spacing.scale.36=36rpx` is additionally promoted from walk-result stat-card top inset:568:1291 y1122 minus568:1276 y1086. It is an actual spacing measurement, not the unrelated36 font/line-height value.
@@ -1,6 +1,8 @@
1
1
  {
2
2
  "borderWidth": {
3
- "hairline": "1rpx"
3
+ "hairline": "1rpx",
4
+ "selection": "4rpx",
5
+ "avatarSelection": "3rpx"
4
6
  },
5
7
  "color": {
6
8
  "brand": {
@@ -52,7 +54,11 @@
52
54
  "muted": "#F2F2F2",
53
55
  "tab": "#F0F0F0",
54
56
  "icon": "#BBBBBB",
55
- "checkin": "rgba(252, 149, 23, 0.06)"
57
+ "checkin": "rgba(252, 149, 23, 0.06)",
58
+ "guide": "#D7E6FF",
59
+ "heroPink": "#FEDBEE",
60
+ "featureBlue": "rgba(96, 184, 255, 0.1)",
61
+ "featureYellow": "rgba(250, 183, 0, 0.1)"
56
62
  },
57
63
  "accent": {
58
64
  "amount": "#FF3E7A"
@@ -80,6 +86,22 @@
80
86
  "purpleText": "#806ED6",
81
87
  "defaultAddressBackground": "rgba(255, 134, 201, 0.12)",
82
88
  "profileBackground": "rgba(255, 134, 201, 0.1)"
89
+ },
90
+ "progress": {
91
+ "track": "#EEEEEE",
92
+ "active": "#FF3E7A"
93
+ },
94
+ "walkMark": {
95
+ "sniffBackground": "#FFF4FA",
96
+ "waterBackground": "#EAF4FF",
97
+ "restBackground": "#ECFFDF",
98
+ "stoolBackground": "#F7F5FF",
99
+ "friendBackground": "#FFF9DD"
100
+ },
101
+ "walkStat": {
102
+ "distanceBackground": "rgba(255, 134, 201, 0.1)",
103
+ "durationBackground": "rgba(56, 166, 255, 0.1)",
104
+ "markBackground": "rgba(252, 149, 23, 0.1)"
83
105
  }
84
106
  },
85
107
  "radius": {
@@ -112,7 +134,16 @@
112
134
  "sectionInset": "40rpx",
113
135
  "sectionGapLg": "60rpx",
114
136
  "pageStart": "100rpx",
115
- "panelInset": "54rpx"
137
+ "panelInset": "54rpx",
138
+ "scale": {
139
+ "20": "20rpx",
140
+ "30": "30rpx",
141
+ "36": "36rpx",
142
+ "40": "40rpx",
143
+ "54": "54rpx",
144
+ "60": "60rpx",
145
+ "100": "100rpx"
146
+ }
116
147
  },
117
148
  "typography": {
118
149
  "fontFamily": "system",
@@ -147,7 +178,10 @@
147
178
  "headline": "56rpx",
148
179
  "bodyLoose": "40rpx",
149
180
  "titleCompact": "42rpx",
150
- "bodyCompact": "36.4rpx"
181
+ "bodyCompact": "36.4rpx",
182
+ "bodyRelaxed": "36rpx",
183
+ "bodyLgRelaxed": "45rpx",
184
+ "standard": 1.4
151
185
  },
152
186
  "weight": {
153
187
  "regular": 400,
@@ -1,4 +1,4 @@
1
1
  module.exports = {
2
- version: "0.1.21",
2
+ version: "0.1.22",
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
  };
@@ -2,6 +2,8 @@
2
2
  page,
3
3
  .theme-maooo {
4
4
  --mo-border-width-hairline: 1rpx;
5
+ --mo-border-width-selection: 4rpx;
6
+ --mo-border-width-avatar-selection: 3rpx;
5
7
  --mo-color-brand-primary: #FECBE7;
6
8
  --mo-color-brand-primary-active: #FF7688;
7
9
  --mo-color-brand-primary-subtle: #FFC2C2;
@@ -37,6 +39,10 @@ page,
37
39
  --mo-color-background-tab: #F0F0F0;
38
40
  --mo-color-background-icon: #BBBBBB;
39
41
  --mo-color-background-checkin: rgba(252, 149, 23, 0.06);
42
+ --mo-color-background-guide: #D7E6FF;
43
+ --mo-color-background-hero-pink: #FEDBEE;
44
+ --mo-color-background-feature-blue: rgba(96, 184, 255, 0.1);
45
+ --mo-color-background-feature-yellow: rgba(250, 183, 0, 0.1);
40
46
  --mo-color-accent-amount: #FF3E7A;
41
47
  --mo-color-gender-female: #FF86C9;
42
48
  --mo-color-gender-male: #38A6FF;
@@ -54,6 +60,16 @@ page,
54
60
  --mo-color-tag-purple-text: #806ED6;
55
61
  --mo-color-tag-default-address-background: rgba(255, 134, 201, 0.12);
56
62
  --mo-color-tag-profile-background: rgba(255, 134, 201, 0.1);
63
+ --mo-color-progress-track: #EEEEEE;
64
+ --mo-color-progress-active: #FF3E7A;
65
+ --mo-color-walk-mark-sniff-background: #FFF4FA;
66
+ --mo-color-walk-mark-water-background: #EAF4FF;
67
+ --mo-color-walk-mark-rest-background: #ECFFDF;
68
+ --mo-color-walk-mark-stool-background: #F7F5FF;
69
+ --mo-color-walk-mark-friend-background: #FFF9DD;
70
+ --mo-color-walk-stat-distance-background: rgba(255, 134, 201, 0.1);
71
+ --mo-color-walk-stat-duration-background: rgba(56, 166, 255, 0.1);
72
+ --mo-color-walk-stat-mark-background: rgba(252, 149, 23, 0.1);
57
73
  --mo-radius-none: 0;
58
74
  --mo-radius-sm: 8rpx;
59
75
  --mo-radius-md: 12rpx;
@@ -80,6 +96,13 @@ page,
80
96
  --mo-spacing-section-gap-lg: 60rpx;
81
97
  --mo-spacing-page-start: 100rpx;
82
98
  --mo-spacing-panel-inset: 54rpx;
99
+ --mo-spacing-scale-20: 20rpx;
100
+ --mo-spacing-scale-30: 30rpx;
101
+ --mo-spacing-scale-36: 36rpx;
102
+ --mo-spacing-scale-40: 40rpx;
103
+ --mo-spacing-scale-54: 54rpx;
104
+ --mo-spacing-scale-60: 60rpx;
105
+ --mo-spacing-scale-100: 100rpx;
83
106
  --mo-font-size-headline-lg: 42rpx;
84
107
  --mo-font-size-title-1: 38rpx;
85
108
  --mo-font-size-title-2: 36rpx;
@@ -109,6 +132,9 @@ page,
109
132
  --mo-line-height-body-loose: 40rpx;
110
133
  --mo-line-height-title-compact: 42rpx;
111
134
  --mo-line-height-body-compact: 36.4rpx;
135
+ --mo-line-height-body-relaxed: 36rpx;
136
+ --mo-line-height-body-lg-relaxed: 45rpx;
137
+ --mo-line-height-standard: 1.4;
112
138
  --mo-font-weight-regular: 400;
113
139
  --mo-font-weight-medium: 500;
114
140
  --mo-font-weight-semibold: 600;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "maooo-skyline-ui-system",
3
- "version": "0.1.21",
3
+ "version": "0.1.22",
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",