maooo-skyline-ui-system 0.1.20 → 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.
@@ -466,7 +466,8 @@
466
466
  "Number input",
467
467
  "Min and max clamping",
468
468
  "Disabled and input-disabled states",
469
- "Change and input events"
469
+ "Change and input events",
470
+ "Compact and full-width block variants"
470
471
  ],
471
472
  "composes": [
472
473
  "mo-icon"
@@ -614,8 +615,8 @@
614
615
  "Media choosing with wx.chooseMedia",
615
616
  "Controlled upload file list display",
616
617
  "Auto append or business pipeline choose mode",
617
- "Configurable square item size",
618
- "Default or borderless camera-plus trigger variants",
618
+ "Configurable item width and aspect ratio",
619
+ "Default, borderless camera-plus and photo placeholder trigger variants",
619
620
  "Preview and delete events",
620
621
  "Max count limiting",
621
622
  "Basic upload status overlays"
@@ -678,7 +679,7 @@
678
679
  "capabilities": [
679
680
  "Composes mo-upload media choosing and display",
680
681
  "Composes mo-image-cropper image and cover cropping",
681
- "Configurable square item size and default or camera-plus trigger variants",
682
+ "Configurable item width and aspect ratio and default, camera-plus or photo trigger variants",
682
683
  "Uploads image and video files to Aliyun OSS",
683
684
  "Optionally audits uploaded images before success",
684
685
  "Generates default OSS snapshot covers for videos",
@@ -73,15 +73,22 @@
73
73
  "default": 160,
74
74
  "description": "缩略图与选择触发器的正方形边长,单位 rpx;非法或小于等于 0 时由 mo-upload 按 160 处理"
75
75
  },
76
+ {
77
+ "name": "itemAspectRatio",
78
+ "type": "number",
79
+ "default": 1,
80
+ "description": "媒体项宽高比(宽/高),有限正数;非法值按1,默认方形"
81
+ },
76
82
  {
77
83
  "name": "triggerVariant",
78
84
  "type": "string",
79
85
  "enum": [
80
86
  "default",
81
- "camera"
87
+ "camera",
88
+ "photo"
82
89
  ],
83
90
  "default": "default",
84
- "description": "选择触发器外观;camera 为无文字、无边框的相机加号入口"
91
+ "description": "选择触发器外观;camera 为无文字、无边框的相机加号入口;photo 为灰底无文字矩形照片占位入口"
85
92
  },
86
93
  {
87
94
  "name": "enableCrop",
@@ -2,6 +2,16 @@
2
2
  "name": "stepper",
3
3
  "description": "基础数值步进器组件",
4
4
  "props": [
5
+ {
6
+ "name": "variant",
7
+ "type": "string",
8
+ "default": "compact",
9
+ "enum": [
10
+ "compact",
11
+ "block"
12
+ ],
13
+ "description": "compact 紧凑步进器;block 满宽灰底表单行"
14
+ },
5
15
  {
6
16
  "name": "value",
7
17
  "type": "number",
@@ -58,7 +68,10 @@
58
68
  "color.background.surface",
59
69
  "color.background.muted",
60
70
  "color.border.default",
61
- "radius.md"
71
+ "radius.md",
72
+ "color.background.page",
73
+ "radius.lg",
74
+ "typography.weight.regular"
62
75
  ],
63
76
  "eventDetails": {
64
77
  "onChange": {
@@ -73,15 +73,22 @@
73
73
  "default": 160,
74
74
  "description": "缩略图与选择触发器的正方形边长,单位 rpx;非法或小于等于 0 时按 160 处理"
75
75
  },
76
+ {
77
+ "name": "itemAspectRatio",
78
+ "type": "number",
79
+ "default": 1,
80
+ "description": "媒体项宽高比(宽/高),有限正数;非法值按1,默认方形"
81
+ },
76
82
  {
77
83
  "name": "triggerVariant",
78
84
  "type": "string",
79
85
  "enum": [
80
86
  "default",
81
- "camera"
87
+ "camera",
88
+ "photo"
82
89
  ],
83
90
  "default": "default",
84
- "description": "选择触发器外观;camera 为无文字、无边框的相机加号入口"
91
+ "description": "选择触发器外观;camera 为无文字、无边框的相机加号入口;photo 为灰底无文字矩形照片占位入口"
85
92
  },
86
93
  {
87
94
  "name": "autoAppend",
@@ -113,7 +120,8 @@
113
120
  "color.text.primary",
114
121
  "color.text.secondary",
115
122
  "color.text.inverse",
116
- "radius.md"
123
+ "radius.md",
124
+ "color.background.page"
117
125
  ],
118
126
  "eventDetails": {
119
127
  "onChoose": {
@@ -1,15 +1,16 @@
1
1
  {
2
2
  "package": {
3
3
  "name": "maooo-skyline-ui-system",
4
- "version": "0.1.20"
4
+ "version": "0.1.22"
5
5
  },
6
- "snapshotVersion": "0.1.20",
7
- "generatedAt": "2026-11-04T15:46:42.004Z",
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,12 +112,15 @@
109
112
  "tokens.json"
110
113
  ],
111
114
  "sourceHashes": {
112
- "design-system/tokens/source/color.json": "sha256:c96a4e785d0b96bb9cc3789393964afed007251d9235832053a7ebb6d079225a",
115
+ "design-system/tokens/source/border-width.json": "sha256:a154bb433b3b4301e4da7ba9756821180aaae5c96bc503a6a2be2acf9ca85e53",
116
+ "design-system/tokens/source/color.json": "sha256:cae2c9ab067fd5e9abdaf7977ff34ffdee087cd5483326ccb83b273fd2a625bb",
113
117
  "design-system/tokens/source/radius.json": "sha256:7ef7d9349d3e4caf5649b4715cb01c632c7ce20d1d330e94d086027bda9779ee",
114
- "design-system/tokens/source/shadow.json": "sha256:0446793a2152ed2163616e1b791104395167f32eb16e2305235d2afdc389acf6",
115
- "design-system/tokens/source/spacing.json": "sha256:3673a8a009dc36f29f67677906d21a958f6f044b25c068b8e00a4b13cb340b4b",
116
- "design-system/tokens/source/typography.json": "sha256:93183ea92beaa204621229bb5347ad63e1c05c323c058b6f2d73fe8cf9ba6844",
117
- "design-system/DESIGN.md": "sha256:b00f2e5030df81c6d985eb46b9489b2ce98d0803134389d385053605aba66cbc",
118
- "packages/ui/component-registry.json": "sha256:96c540a2772c9cc6e7f0f5957b861db637f6487399ae05f7d2f9832b6a0db1c1"
118
+ "design-system/tokens/source/shadow.json": "sha256:025bdabeb6b3e04c4174792506832f686f0662b12740dd3b5612846a4e063362",
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",
124
+ "packages/ui/component-registry.json": "sha256:a4c6554280175ecfb14b93f47037ba5e0c546f602aaa1e2713e440dd56cea360"
119
125
  }
120
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,4 +1,9 @@
1
1
  {
2
+ "borderWidth": {
3
+ "hairline": "1rpx",
4
+ "selection": "4rpx",
5
+ "avatarSelection": "3rpx"
6
+ },
2
7
  "color": {
3
8
  "brand": {
4
9
  "primary": "#FECBE7",
@@ -48,7 +53,12 @@
48
53
  "subtle": "#FAFAFA",
49
54
  "muted": "#F2F2F2",
50
55
  "tab": "#F0F0F0",
51
- "icon": "#BBBBBB"
56
+ "icon": "#BBBBBB",
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)"
52
62
  },
53
63
  "accent": {
54
64
  "amount": "#FF3E7A"
@@ -61,12 +71,37 @@
61
71
  },
62
72
  "border": {
63
73
  "default": "#CCCCCC",
64
- "strong": "#c9cdd4"
74
+ "strong": "#c9cdd4",
75
+ "subtle": "#F0F0F0"
65
76
  },
66
77
  "status": {
67
78
  "success": "#11BF59",
68
79
  "warning": "#FC9517",
69
80
  "danger": "#FA5051"
81
+ },
82
+ "tag": {
83
+ "goldBackground": "#FFF0C8",
84
+ "purpleBackground": "#E8E3FF",
85
+ "goldText": "#DC9416",
86
+ "purpleText": "#806ED6",
87
+ "defaultAddressBackground": "rgba(255, 134, 201, 0.12)",
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)"
70
105
  }
71
106
  },
72
107
  "radius": {
@@ -80,7 +115,8 @@
80
115
  "shadow": {
81
116
  "none": "none",
82
117
  "sm": "0 2rpx 8rpx rgba(31, 35, 41, 0.08)",
83
- "md": "0 8rpx 24rpx rgba(31, 35, 41, 0.10)"
118
+ "md": "0 8rpx 24rpx rgba(31, 35, 41, 0.10)",
119
+ "floating": "0 12rpx 24rpx rgba(0, 0, 0, 0.047)"
84
120
  },
85
121
  "spacing": {
86
122
  "0": "0",
@@ -92,7 +128,22 @@
92
128
  "6": "32rpx",
93
129
  "8": "48rpx",
94
130
  "10": "64rpx",
95
- "page": "38rpx"
131
+ "page": "38rpx",
132
+ "fieldGap": "20rpx",
133
+ "cardInset": "30rpx",
134
+ "sectionInset": "40rpx",
135
+ "sectionGapLg": "60rpx",
136
+ "pageStart": "100rpx",
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
+ }
96
147
  },
97
148
  "typography": {
98
149
  "fontFamily": "system",
@@ -107,7 +158,11 @@
107
158
  "assist": "22rpx",
108
159
  "caption": "20rpx",
109
160
  "title": "32rpx",
110
- "headline": "40rpx"
161
+ "headline": "40rpx",
162
+ "bodyXl": "30rpx",
163
+ "captionSm": "18rpx",
164
+ "display": "50rpx",
165
+ "amountLg": "70rpx"
111
166
  },
112
167
  "lineHeight": {
113
168
  "headlineLg": "59rpx",
@@ -120,7 +175,13 @@
120
175
  "assist": "31rpx",
121
176
  "caption": "28rpx",
122
177
  "title": "46rpx",
123
- "headline": "56rpx"
178
+ "headline": "56rpx",
179
+ "bodyLoose": "40rpx",
180
+ "titleCompact": "42rpx",
181
+ "bodyCompact": "36.4rpx",
182
+ "bodyRelaxed": "36rpx",
183
+ "bodyLgRelaxed": "45rpx",
184
+ "standard": 1.4
124
185
  },
125
186
  "weight": {
126
187
  "regular": 400,
@@ -128,4 +189,4 @@
128
189
  "semibold": 600
129
190
  }
130
191
  }
131
- }
192
+ }
@@ -1,6 +1,6 @@
1
1
  Component({
2
2
  properties: {
3
- // stop-circle | refresh | clock-outline | play | chevron-down | ellipsis | cat-coin | cat-coin-face | pet-bathtub | shopping-bag | refund-yen | pet-food-bowl | trash | shield-plus | close-circle-cutout | minus | home-smile | service-heart-handshake | chevron-right | copy | close-circle-filled | undo | external-link | video-camera | search | lock | chat-dots | volume | bookmark-star | headset | user-heart | bell-outline | cat-hourglass | dog-face | time | target | share | a-Group32 | edit-square-pen | calendar-close | document-text | webcam-filled | yuan-heart-filled | check | badge-check-filled | location-pin-filled | shield-heart-filled | image | camera | face-smile | gender-male | location-pin | thumb-up-outline | calendar | thumb-up-filled | gender-female | wechat | question-circle | edit-square | hexagon-circle | radio-selected | star-outline | radio-unselected | yuan-square | check-circle-filled | close | arrow-turn-right | star | user | plus | time-house | home | bell | logo | arrow-left
3
+ // stop-circle | refresh | clock-outline | play | chevron-down | ellipsis | cat-coin | cat-coin-face | pet-bathtub | shopping-bag | refund-yen | pet-food-bowl | trash | shield-plus | close-circle-cutout | minus | home-smile | service-heart-handshake | chevron-right | copy | close-circle-filled | undo | external-link | video-camera | search | lock | chat-dots | volume | bookmark-star | headset | user-heart | bell-outline | cat-hourglass | dog-face | time | target | share | a-Group32 | edit-square-pen | calendar-close | document-text | webcam-filled | yuan-heart-filled | check | badge-check-filled | location-pin-filled | shield-heart-filled | image | camera | face-smile | gender-male | location-pin | thumb-up-outline | calendar | thumb-up-filled | gender-female | wechat | question-circle | edit-square | hexagon-circle | radio-selected | star-outline | radio-unselected | yuan-square | check-circle-filled | close | arrow-turn-right | star | user | plus | time-house | home | bell | logo | arrow-left | plus-thin
4
4
  name: {
5
5
  type: String,
6
6
  },
@@ -221,4 +221,7 @@
221
221
  <view wx:if="{{name === 'logo'}}" style="background-image: url({{quot}}data:image/svg+xml, %3Csvg viewBox='0 0 1268 1024' xmlns='http://www.w3.org/2000/svg' width='{{svgSize}}px' height='{{svgSize}}px'%3E%3Cpath d='M1087.4728925 601.24652656C1064.06999187 884.34391625 804.58119219 937.82319969 633.99598906 938.80593875c-184.38925781 1.05130219-324.71524219-61.63830281-403.76859469-160.84923094-56.450355-70.80291562-77.93348625-160.71210469-63.94659656-267.25929375 15.3810075-117.03735656 86.32104938-200.68444125 127.23041625-240.13112718 80.01323625-77.08787437 171.63650531-112.53504 296.92429781-112.53504094 26.62537031 0 54.75913031 1.59980719 84.62982469 4.73086031 203.22127969 21.39171375 436.33610719 149.30776219 412.40755594 438.48442031z' fill='{{(isStr ? colors : colors[0]) || 'rgb(255,255,255)'}}' /%3E%3Cpath d='M877.80667344 747.56036281c105.6558675-85.68112688 113.12925469-189.64576875 83.87562937-290.25081562-30.05352938-103.301865-148.804965-216.20257594-355.61438437-220.0878225-189.417225-3.56528531-287.53114219 76.19655281-337.10232469 152.18741531-58.73579531 89.95489781-68.90600063 252.42679125 55.33048969 351.36346687 151.50178406 120.671205 423.78904406 112.00938937 553.53344437 6.78775594z' fill='{{(isStr ? colors : colors[1]) || 'rgb(180,161,151)'}}' /%3E%3Cpath d='M768.49410312 470.99933c-28.4080125 11.65574156-58.0730175 60.83839875-40.22373562 105.99868312 17.89499156 45.16028437 65.24929781 58.05016313 104.55885656 52.54225407 39.30955875-5.53076344 68.76887437-40.40657063 66.117765-87.55518657-2.97107156-52.79365219-65.22644344-97.72539281-130.45288593-70.98575062zM324.77602625 430.22708937c-32.7503475 5.53076344-60.74698125 37.06982813-65.43213281 72.40272282-7.26769781 54.85054781 39.03530625 93.86299969 88.44650812 93.70301906 49.41120187-0.15998062 88.6521975-41.82354281 84.94978594-89.26926656-3.67955719-47.42286938-45.25170188-87.41806031-107.96416125-76.83647532z' fill='{{(isStr ? colors : colors[2]) || 'rgb(214,236,249)'}}' /%3E%3Cpath d='M347.63042094 459.13789906c-30.46490813 1.41697219-58.09587188 31.88188125-48.97696875 62.57533313 9.1417575 30.6705975 42.18921281 44.93174063 74.96241562 38.6239275 32.7503475-6.30781313 40.31515219-29.7564225 40.65796875-46.39442156 0.4570875-22.51157906-14.67252188-57.22740469-66.64341562-54.80483907z' fill='{{(isStr ? colors : colors[3]) || 'rgb(76,57,58)'}}' /%3E%3Cpath d='M539.10454156 986.57162375c31.42479281 3.63384844 64.28941312 5.59932656 98.91382032 5.41649156a828.88319344 828.88319344 0 0 0 137.2177875-11.56432312l62.84958562-14.05545282c165.05443969-45.86877094 271.738755-152.30168719 301.54088625-309.51707062 18.46635094 7.03915406 51.26240813 17.82642844 64.60937438 11.10723656 19.03771125-9.55313719 11.86143094-29.11649906-6.03356063-31.88188125-11.77001344-1.82835188-37.84687781-4.22806313-54.32489625-5.64503531 1.21128281-9.39315656 2.28543938-18.900585 2.97107156-28.63655719 0.06856313-0.73134094 0.06856313-1.46268094 0.11427188-2.19402187 21.16317-0.22854375 53.79924563-1.14271969 63.07812937-4.1595 14.07830719-4.6165875 13.59836531-22.69441406 1.94262375-30.64774313-7.31340656-5.02796719-40.31515219-0.77704969-63.83232468 3.06248906 0.0914175-11.19865312-0.182835-22.23732656-0.77704969-33.18458156 20.24899406-6.28495875 46.69152844-15.15246375 54.87340219-21.02604375 13.80405469-9.96451594 6.12497813-28.75082906-9.05034-30.6705975-7.99903781-1.02844781-29.84784 8.7760875-48.67986094 18.23780719-12.50135438-102.13629094-56.51891812-192.29687813-128.8987875-260.86006313A407.49386063 407.49386063 0 0 0 984.3538625 213.79596969c6.85631812-28.81939219 12.31851844-118.72858125 1.30270031-140.78307281C971.92107125 45.49620594 942.07323219 53.81520594 918.07611687 68.21347437c-31.8361725 19.15198313-56.29037438 46.71438281-74.89385156 68.51747626-52.40512781-19.65477938-107.80418063-32.36182313-160.94064844-36.29277938-55.83328687-4.1595-158.31239344-8.43327188-261.34000593 24.36278438-13.36982062-22.85439469-39.81235594-65.54640469-58.00445438-78.48199125-25.20839719-17.94070031-50.41679531-21.52884-63.03242062 4.77656812-10.99296375 22.96866656-7.15342594 108.76406531-4.47946219 136.57786406-13.25554875 9.73597219-26.1454275 20.43182906-38.55536344 32.29326-40.95507562 39.081015-107.25567562 120.25982625-135.02376562 230.69226188C96.2320775 439.14030313 64.57874 425.83904562 55.09416594 427.21030906c-14.60395875 2.12545875-23.76857062 22.62585094-6.422085 31.744755 10.65014812 5.59932656 43.1490975 15.74667844 66.64341562 22.74012282-1.00559344 5.66788969-2.03404125 11.33578031-2.81109 17.14079625-0.68563219 5.09653031-1.14271969 10.10164219-1.69122562 15.12960937-22.35159844-2.97107156-56.58748219-6.6963375-65.93492906-3.35959594-14.16972469 5.05082156-16.75227187 30.09923812 1.8054975 32.52180375 11.49576094 1.50838969 40.90936687 2.262585 61.63830281 2.60540063-0.52565063 11.33578031-0.57136031 22.46587031-0.34281656 33.48168843-21.55169438 1.43982656-68.10609656 5.59932656-72.51699469 13.71263719-5.66788969 10.39875-5.32507406 31.49335594 12.5699175 30.28207313 11.79286781-0.79990406 42.09779531-9.43886531 61.40975906-15.24388125 6.67348313 77.3392725 33.41312531 145.49107781 80.01323625 203.44982344 64.15228688 79.80754687 159.82078312 138.26908875 285.33712031 164.73447843l64.28941313 10.42160344z m546.22003782-390.12452063c-23.17435688 277.68089812-279.9663375 330.1774425-448.79175282 331.13732813-182.46948844 1.02844781-321.33279187-60.44987438-399.58624031-157.78674281-55.83328687-69.45450562-77.13358313-157.64961562-63.28381969-262.13990907 15.22102688-114.84333469 85.42972781-196.89061219 125.92771594-235.56024843 79.19047875-75.64804687 169.8767175-110.40958125 293.83895531-110.40958125 26.35111687 0 54.16491563 1.57695281 83.73850313 4.63944187 201.11867531 20.98033406 431.81093719 146.47381688 408.15663843 430.11971156z' fill='{{(isStr ? colors : colors[4]) || 'rgb(76,57,58)'}}' /%3E%3Cpath d='M629.83648906 614.43351219c-12.98129625 2.85679969-16.7294175 20.77464469-42.05208656 8.91321375-13.36982062-6.23925-15.31244438-20.70608156-14.99248312-30.35063625 17.68930125-9.48457406 33.04745531-28.17946875 23.83713374-43.42335-9.62170031-15.95236781-37.06982813-16.02093094-58.00445437-12.50135438-20.93462531 3.51957656-19.49479875 21.6202575-15.51813375 32.95603782 2.42256563 6.90202687 9.05034 16.820835 16.52372719 23.47146375-2.60540063 11.45005219-8.45612625 25.98544688-21.82594688 29.20791656-22.71726844 5.48505469-25.66548563-10.14735094-29.89354875-19.72334344-4.86798656-11.06152688-29.20791656-11.15294437-31.53906469 9.18746719-2.10260437 18.69489469 10.23876937 47.90281125 41.54928938 50.80531969 38.07542156 3.54243094 54.66771281-23.22006563 55.39905375-28.97937282 7.86191156 18.85487625 26.73964219 38.32682063 56.90744344 37.36693594 30.16780125-0.95988469 44.8631775-25.82546625 44.47465218-39.19528781-0.38852438-13.34696625-9.66740906-21.09460688-24.86558156-17.73501zM809.51774188 493.23665563c-34.21302938 7.03915406-48.83984156 31.58477344-47.65141407 59.74138874 1.18842844 28.15661438 28.29374063 49.25122125 68.24322375 43.67474813 38.64678187-5.39363719 51.559515-33.16172719 51.33097032-56.33608313-0.20568938-17.87213719-24.72845531-56.77031719-71.89992563-47.08005375z' fill='{{(isStr ? colors : colors[5]) || 'rgb(76,57,58)'}}' /%3E%3C/svg%3E{{quot}}); width: {{svgSize}}px; height: {{svgSize}}px; " class="icon" />
222
222
 
223
223
  <!--arrow-left-->
224
- <view wx:if="{{name === 'arrow-left'}}" style="background-image: url({{quot}}data:image/svg+xml, %3Csvg viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg' width='{{svgSize}}px' height='{{svgSize}}px'%3E%3Cpath d='M275.98696297 575.71555556L670.5682963 970.29688889c17.74933333 17.74933333 46.53511111 17.74933333 64.28444445 0 17.74933333-17.74933333 17.74933333-46.53511111 0-64.28444444l-394.58133334-394.58133334 394.58133334-394.58133333c17.74933333-17.74933333 17.74933333-46.53511111 0-64.28444445-17.74933333-17.74933333-46.53511111-17.74933333-64.28444445 0L275.98696297 447.14666667l-24.00711112 24.00711111c-22.18666667 22.18666667-22.18666667 58.25422222 0 80.44088889L275.98696297 575.71555556z' fill='{{(isStr ? colors : colors[0]) || 'rgb(0,0,0)'}}' /%3E%3C/svg%3E{{quot}}); width: {{svgSize}}px; height: {{svgSize}}px; " class="icon" />
224
+ <view wx:if="{{name === 'arrow-left'}}" style="background-image: url({{quot}}data:image/svg+xml, %3Csvg viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg' width='{{svgSize}}px' height='{{svgSize}}px'%3E%3Cpath d='M275.98696297 575.71555556L670.5682963 970.29688889c17.74933333 17.74933333 46.53511111 17.74933333 64.28444445 0 17.74933333-17.74933333 17.74933333-46.53511111 0-64.28444444l-394.58133334-394.58133334 394.58133334-394.58133333c17.74933333-17.74933333 17.74933333-46.53511111 0-64.28444445-17.74933333-17.74933333-46.53511111-17.74933333-64.28444445 0L275.98696297 447.14666667l-24.00711112 24.00711111c-22.18666667 22.18666667-22.18666667 58.25422222 0 80.44088889L275.98696297 575.71555556z' fill='{{(isStr ? colors : colors[0]) || 'rgb(0,0,0)'}}' /%3E%3C/svg%3E{{quot}}); width: {{svgSize}}px; height: {{svgSize}}px; " class="icon" />
225
+
226
+ <!--plus-thin-->
227
+ <view wx:if="{{name === 'plus-thin'}}" style="background-image: url({{quot}}data:image/svg+xml, %3Csvg viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg' width='{{svgSize}}px' height='{{svgSize}}px'%3E%3Cpath d='M512 0a58.514286 58.514286 0 0 1 58.514286 58.514286v394.971428h394.971428a58.514286 58.514286 0 0 1 0 117.028572H570.514286v394.971428a58.514286 58.514286 0 0 1-117.028572 0V570.514286H58.514286a58.514286 58.514286 0 0 1 0-117.028572h394.971428V58.514286a58.514286 58.514286 0 0 1 58.514286-58.514286z' fill='{{(isStr ? colors : colors[0]) || 'rgb(153,153,153)'}}' /%3E%3C/svg%3E{{quot}}); width: {{svgSize}}px; height: {{svgSize}}px; " class="icon" />
@@ -1,4 +1,4 @@
1
1
  module.exports = {
2
- version: "0.1.20",
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
  };
@@ -242,6 +242,10 @@ Component({
242
242
  type: Number,
243
243
  value: 160
244
244
  },
245
+ itemAspectRatio: {
246
+ type: Number,
247
+ value: 1
248
+ },
245
249
  triggerVariant: {
246
250
  type: String,
247
251
  value: "default"
@@ -10,6 +10,7 @@
10
10
  preview="{{false}}"
11
11
  image-radius="{{imageRadius}}"
12
12
  item-size="{{itemSize}}"
13
+ item-aspect-ratio="{{itemAspectRatio}}"
13
14
  trigger-variant="{{triggerVariant}}"
14
15
  auto-append="{{false}}"
15
16
  bind:choose="handleChoose"
@@ -31,6 +31,10 @@ function clampValue(value, min, max) {
31
31
 
32
32
  Component({
33
33
  properties: {
34
+ variant: {
35
+ type: String,
36
+ value: "compact"
37
+ },
34
38
  value: {
35
39
  type: Number,
36
40
  value: 0,
@@ -1,8 +1,8 @@
1
1
  <view
2
- class="mo-stepper {{customClass}} {{disabled ? 'is-disabled' : ''}} {{decreaseDisabled ? 'is-decrease-disabled' : ''}} {{increaseDisabled ? 'is-increase-disabled' : ''}} {{disableInput ? 'is-input-disabled' : ''}}"
2
+ class="mo-stepper {{variant === 'block' ? 'mo-stepper--block' : ''}} {{customClass}} {{disabled ? 'is-disabled' : ''}} {{decreaseDisabled ? 'is-decrease-disabled' : ''}} {{increaseDisabled ? 'is-increase-disabled' : ''}} {{disableInput ? 'is-input-disabled' : ''}}"
3
3
  >
4
4
  <view class="mo-stepper__button mo-stepper__button--decrease" bindtap="handleDecrease">
5
- <view class="mo-stepper__icon"><mo-icon name="minus" size="{{34}}" color="{{disabled || decreaseDisabled ? '#666666' : '#111111'}}" /></view>
5
+ <view class="mo-stepper__icon"><mo-icon name="minus" size="{{variant === 'block' ? 38 : 34}}" color="{{disabled || decreaseDisabled ? '#666666' : (variant === 'block' ? '#FFFFFF' : '#111111')}}" /></view>
6
6
  </view>
7
7
  <input
8
8
  class="mo-stepper__input"
@@ -14,6 +14,12 @@
14
14
  bindconfirm="handleInputCommit"
15
15
  />
16
16
  <view class="mo-stepper__button mo-stepper__button--increase" bindtap="handleIncrease">
17
- <view class="mo-stepper__icon"><mo-icon name="plus" size="{{34}}" color="{{disabled || increaseDisabled ? '#666666' : '#111111'}}" /></view>
17
+ <view class="mo-stepper__icon">
18
+ <view wx:if="{{variant === 'block'}}" class="mo-stepper__block-plus">
19
+ <mo-icon name="minus" size="{{38}}" color="{{disabled || increaseDisabled ? '#666666' : '#FFFFFF'}}" />
20
+ <view class="mo-stepper__block-plus-vertical"><mo-icon name="minus" size="{{38}}" color="{{disabled || increaseDisabled ? '#666666' : '#FFFFFF'}}" /></view>
21
+ </view>
22
+ <mo-icon wx:else name="plus" size="{{34}}" color="{{disabled || increaseDisabled ? '#666666' : '#111111'}}" />
23
+ </view>
18
24
  </view>
19
25
  </view>
@@ -71,3 +71,55 @@
71
71
  align-items: center;
72
72
  justify-content: center;
73
73
  }
74
+
75
+ /* Figma 1742:3294 / 1742:3392, 3400, 3407: full-width numeric field. */
76
+ .mo-stepper--block {
77
+ display: flex;
78
+ width: 100%;
79
+ height: 100rpx;
80
+ padding: 0 43rpx;
81
+ border: 0;
82
+ border-radius: var(--mo-radius-lg, 24rpx);
83
+ background-color: var(--mo-color-background-page, #F8F8F8);
84
+ }
85
+
86
+ .mo-stepper--block .mo-stepper__button {
87
+ flex-shrink: 0;
88
+ width: 44rpx;
89
+ height: 44rpx;
90
+ border: 0;
91
+ border-radius: var(--mo-radius-md, 12rpx);
92
+ background-color: var(--mo-color-text-primary, #111111);
93
+ }
94
+
95
+ .mo-stepper--block .mo-stepper__input {
96
+ flex: 1;
97
+ width: 0;
98
+ min-width: 0;
99
+ height: 100rpx;
100
+ padding: 0;
101
+ font-weight: var(--mo-font-weight-regular, 400);
102
+ line-height: 100rpx;
103
+ }
104
+
105
+ .mo-stepper--block.is-decrease-disabled .mo-stepper__button--decrease,
106
+ .mo-stepper--block.is-increase-disabled .mo-stepper__button--increase {
107
+ background-color: var(--mo-color-background-muted, #F2F2F2);
108
+ }
109
+
110
+ .mo-stepper--block.is-input-disabled .mo-stepper__input {
111
+ background-color: transparent;
112
+ }
113
+
114
+ .mo-stepper__block-plus {
115
+ position: relative;
116
+ width: 38rpx;
117
+ height: 38rpx;
118
+ }
119
+
120
+ .mo-stepper__block-plus-vertical {
121
+ position: absolute;
122
+ top: 0;
123
+ left: 0;
124
+ transform: rotate(90deg);
125
+ }
@@ -1,5 +1,9 @@
1
+ /* Generated from design-system/tokens/source. Do not edit. */
1
2
  page,
2
3
  .theme-maooo {
4
+ --mo-border-width-hairline: 1rpx;
5
+ --mo-border-width-selection: 4rpx;
6
+ --mo-border-width-avatar-selection: 3rpx;
3
7
  --mo-color-brand-primary: #FECBE7;
4
8
  --mo-color-brand-primary-active: #FF7688;
5
9
  --mo-color-brand-primary-subtle: #FFC2C2;
@@ -10,6 +14,16 @@ page,
10
14
  --mo-color-brand-blue-soft: #D6ECF9;
11
15
  --mo-color-brand-yellow: #F8BF7E;
12
16
  --mo-color-brand-yellow-strong: #FED75D;
17
+ --mo-color-palette-pink-1: #FFE7E4;
18
+ --mo-color-palette-pink-2: #FDD7C8;
19
+ --mo-color-palette-pink-3: #FFC2C2;
20
+ --mo-color-palette-pink-4: #FECBE7;
21
+ --mo-color-palette-pink-5: #FF7688;
22
+ --mo-color-palette-blue-1: #D6ECF9;
23
+ --mo-color-palette-blue-2: #7EAFF8;
24
+ --mo-color-palette-yellow-1: #F8BF7E;
25
+ --mo-color-palette-yellow-2: #FED75D;
26
+ --mo-color-palette-brown-1: #4A383A;
13
27
  --mo-color-text-primary: #111111;
14
28
  --mo-color-text-input: #3D3D3D;
15
29
  --mo-color-text-secondary: #666666;
@@ -24,26 +38,71 @@ page,
24
38
  --mo-color-background-muted: #F2F2F2;
25
39
  --mo-color-background-tab: #F0F0F0;
26
40
  --mo-color-background-icon: #BBBBBB;
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);
27
46
  --mo-color-accent-amount: #FF3E7A;
28
47
  --mo-color-gender-female: #FF86C9;
29
48
  --mo-color-gender-male: #38A6FF;
30
49
  --mo-color-gender-female-bg: #FFF5FA;
31
50
  --mo-color-gender-male-bg: #F3F8FD;
32
51
  --mo-color-border-default: #CCCCCC;
52
+ --mo-color-border-strong: #c9cdd4;
53
+ --mo-color-border-subtle: #F0F0F0;
33
54
  --mo-color-status-success: #11BF59;
34
55
  --mo-color-status-warning: #FC9517;
35
56
  --mo-color-status-danger: #FA5051;
57
+ --mo-color-tag-gold-background: #FFF0C8;
58
+ --mo-color-tag-purple-background: #E8E3FF;
59
+ --mo-color-tag-gold-text: #DC9416;
60
+ --mo-color-tag-purple-text: #806ED6;
61
+ --mo-color-tag-default-address-background: rgba(255, 134, 201, 0.12);
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);
73
+ --mo-radius-none: 0;
36
74
  --mo-radius-sm: 8rpx;
37
75
  --mo-radius-md: 12rpx;
38
76
  --mo-radius-lg: 24rpx;
39
77
  --mo-radius-xl: 36rpx;
40
78
  --mo-radius-pill: 999rpx;
79
+ --mo-shadow-none: none;
80
+ --mo-shadow-sm: 0 2rpx 8rpx rgba(31, 35, 41, 0.08);
81
+ --mo-shadow-md: 0 8rpx 24rpx rgba(31, 35, 41, 0.10);
82
+ --mo-shadow-floating: 0 12rpx 24rpx rgba(0, 0, 0, 0.047);
83
+ --mo-spacing-0: 0;
84
+ --mo-spacing-1: 4rpx;
41
85
  --mo-spacing-2: 8rpx;
42
86
  --mo-spacing-3: 12rpx;
43
87
  --mo-spacing-4: 16rpx;
44
88
  --mo-spacing-5: 24rpx;
45
89
  --mo-spacing-6: 32rpx;
90
+ --mo-spacing-8: 48rpx;
91
+ --mo-spacing-10: 64rpx;
46
92
  --mo-spacing-page: 38rpx;
93
+ --mo-spacing-field-gap: 20rpx;
94
+ --mo-spacing-card-inset: 30rpx;
95
+ --mo-spacing-section-inset: 40rpx;
96
+ --mo-spacing-section-gap-lg: 60rpx;
97
+ --mo-spacing-page-start: 100rpx;
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;
47
106
  --mo-font-size-headline-lg: 42rpx;
48
107
  --mo-font-size-title-1: 38rpx;
49
108
  --mo-font-size-title-2: 36rpx;
@@ -53,6 +112,12 @@ page,
53
112
  --mo-font-size-body: 24rpx;
54
113
  --mo-font-size-assist: 22rpx;
55
114
  --mo-font-size-caption: 20rpx;
115
+ --mo-font-size-title: 32rpx;
116
+ --mo-font-size-headline: 40rpx;
117
+ --mo-font-size-body-xl: 30rpx;
118
+ --mo-font-size-caption-sm: 18rpx;
119
+ --mo-font-size-display: 50rpx;
120
+ --mo-font-size-amount-lg: 70rpx;
56
121
  --mo-line-height-headline-lg: 59rpx;
57
122
  --mo-line-height-title-1: 53rpx;
58
123
  --mo-line-height-title-2: 50rpx;
@@ -62,6 +127,14 @@ page,
62
127
  --mo-line-height-body: 34rpx;
63
128
  --mo-line-height-assist: 31rpx;
64
129
  --mo-line-height-caption: 28rpx;
130
+ --mo-line-height-title: 46rpx;
131
+ --mo-line-height-headline: 56rpx;
132
+ --mo-line-height-body-loose: 40rpx;
133
+ --mo-line-height-title-compact: 42rpx;
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;
65
138
  --mo-font-weight-regular: 400;
66
139
  --mo-font-weight-medium: 500;
67
140
  --mo-font-weight-semibold: 600;
@@ -17,8 +17,13 @@ function normalizeItemSize(value) {
17
17
  return Number.isFinite(numberValue) && numberValue > 0 ? Math.floor(numberValue) : 160;
18
18
  }
19
19
 
20
+ function normalizeItemAspectRatio(value) {
21
+ const ratio = Number(value);
22
+ return Number.isFinite(ratio) && ratio > 0 ? ratio : 1;
23
+ }
24
+
20
25
  function normalizeTriggerVariant(value) {
21
- return value === "camera" ? "camera" : "default";
26
+ return value === "camera" || value === "photo" ? value : "default";
22
27
  }
23
28
 
24
29
  function normalizeAccept(value) {
@@ -165,6 +170,11 @@ Component({
165
170
  value: 160,
166
171
  observer: "syncFromProps"
167
172
  },
173
+ itemAspectRatio: {
174
+ type: Number,
175
+ value: 1,
176
+ observer: "syncFromProps"
177
+ },
168
178
  triggerVariant: {
169
179
  type: String,
170
180
  value: "default",
@@ -203,10 +213,15 @@ Component({
203
213
  const radius = normalizeRadius(this.data.imageRadius);
204
214
  const itemSize = normalizeItemSize(this.data.itemSize);
205
215
 
216
+ const proposedHeight = itemSize / normalizeItemAspectRatio(this.data.itemAspectRatio);
217
+ const roundedHeight = Number(proposedHeight.toFixed(4));
218
+ const itemHeight = Number.isFinite(roundedHeight) && roundedHeight > 0 ? roundedHeight : itemSize;
219
+
206
220
  this.setData({
207
221
  displayList: fileList.map((file, index) => normalizeDisplayFile(file, index, radius)),
208
222
  canChoose: !this.data.disabled && fileList.length < maxCount,
209
- itemStyle: `width: ${itemSize}rpx; height: ${itemSize}rpx;`,
223
+ itemStyle: `width: ${itemSize}rpx; height: ${itemHeight}rpx;`,
224
+ triggerRadiusStyle: normalizeTriggerVariant(this.data.triggerVariant) === "photo" ? `border-radius: ${radius}rpx;` : "",
210
225
  resolvedTriggerVariant: normalizeTriggerVariant(this.data.triggerVariant)
211
226
  });
212
227
  },
@@ -29,7 +29,7 @@
29
29
  <view
30
30
  wx:if="{{canChoose}}"
31
31
  class="mo-upload__trigger is-{{resolvedTriggerVariant}}"
32
- style="{{itemStyle}}"
32
+ style="{{itemStyle}} {{triggerRadiusStyle}}"
33
33
  bindtap="handleChoose"
34
34
  >
35
35
  <view class="mo-upload__trigger-content">
@@ -39,6 +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
43
  <block wx:else>
43
44
  <slot></slot>
44
45
  <text class="mo-upload__trigger-plus">+</text>
@@ -160,3 +160,8 @@
160
160
  .mo-upload.is-disabled {
161
161
  opacity: 0.56;
162
162
  }
163
+
164
+ .mo-upload__trigger.is-photo {
165
+ border: 0;
166
+ background-color: var(--mo-color-background-page, #F8F8F8);
167
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "maooo-skyline-ui-system",
3
- "version": "0.1.20",
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",