maooo-skyline-ui-system 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +157 -0
- package/miniprogram_dist/button/button.js +43 -0
- package/miniprogram_dist/button/button.json +5 -0
- package/miniprogram_dist/button/button.wxml +12 -0
- package/miniprogram_dist/button/button.wxs +23 -0
- package/miniprogram_dist/button/button.wxss +133 -0
- package/miniprogram_dist/calendar/calendar.js +549 -0
- package/miniprogram_dist/calendar/calendar.json +8 -0
- package/miniprogram_dist/calendar/calendar.wxml +79 -0
- package/miniprogram_dist/calendar/calendar.wxss +265 -0
- package/miniprogram_dist/card/card.js +22 -0
- package/miniprogram_dist/card/card.json +5 -0
- package/miniprogram_dist/card/card.wxml +9 -0
- package/miniprogram_dist/card/card.wxss +34 -0
- package/miniprogram_dist/countdown/countdown.js +213 -0
- package/miniprogram_dist/countdown/countdown.json +3 -0
- package/miniprogram_dist/countdown/countdown.wxml +9 -0
- package/miniprogram_dist/countdown/countdown.wxss +33 -0
- package/miniprogram_dist/form/form.js +12 -0
- package/miniprogram_dist/form/form.json +5 -0
- package/miniprogram_dist/form/form.wxml +12 -0
- package/miniprogram_dist/form/form.wxss +35 -0
- package/miniprogram_dist/form-group/form-group.js +53 -0
- package/miniprogram_dist/form-group/form-group.json +5 -0
- package/miniprogram_dist/form-group/form-group.wxml +11 -0
- package/miniprogram_dist/form-group/form-group.wxss +50 -0
- package/miniprogram_dist/form-input/form-input.js +48 -0
- package/miniprogram_dist/form-input/form-input.json +8 -0
- package/miniprogram_dist/form-input/form-input.wxml +28 -0
- package/miniprogram_dist/form-input/form-input.wxss +3 -0
- package/miniprogram_dist/form-textarea/form-textarea.js +34 -0
- package/miniprogram_dist/form-textarea/form-textarea.json +8 -0
- package/miniprogram_dist/form-textarea/form-textarea.wxml +20 -0
- package/miniprogram_dist/form-textarea/form-textarea.wxss +3 -0
- package/miniprogram_dist/icon/_iconfont/iconfont.js +63 -0
- package/miniprogram_dist/icon/_iconfont/iconfont.json +4 -0
- package/miniprogram_dist/icon/_iconfont/iconfont.wxml +8 -0
- package/miniprogram_dist/icon/_iconfont/iconfont.wxss +3 -0
- package/miniprogram_dist/icon/icon.js +41 -0
- package/miniprogram_dist/icon/icon.json +7 -0
- package/miniprogram_dist/icon/icon.wxml +3 -0
- package/miniprogram_dist/icon/icon.wxss +13 -0
- package/miniprogram_dist/image-cropper/image-cropper.js +703 -0
- package/miniprogram_dist/image-cropper/image-cropper.json +3 -0
- package/miniprogram_dist/image-cropper/image-cropper.wxml +58 -0
- package/miniprogram_dist/image-cropper/image-cropper.wxss +195 -0
- package/miniprogram_dist/index.js +4 -0
- package/miniprogram_dist/input/input.js +119 -0
- package/miniprogram_dist/input/input.json +7 -0
- package/miniprogram_dist/input/input.wxml +38 -0
- package/miniprogram_dist/input/input.wxss +52 -0
- package/miniprogram_dist/media-upload/media-upload.js +1108 -0
- package/miniprogram_dist/media-upload/media-upload.json +7 -0
- package/miniprogram_dist/media-upload/media-upload.wxml +98 -0
- package/miniprogram_dist/media-upload/media-upload.wxss +149 -0
- package/miniprogram_dist/navbar/navbar.js +191 -0
- package/miniprogram_dist/navbar/navbar.json +6 -0
- package/miniprogram_dist/navbar/navbar.wxml +25 -0
- package/miniprogram_dist/navbar/navbar.wxss +60 -0
- package/miniprogram_dist/notify/notify.js +342 -0
- package/miniprogram_dist/notify/notify.json +5 -0
- package/miniprogram_dist/notify/notify.wxml +27 -0
- package/miniprogram_dist/notify/notify.wxss +246 -0
- package/miniprogram_dist/notify/service.js +69 -0
- package/miniprogram_dist/oss-upload/oss-upload.js +505 -0
- package/miniprogram_dist/oss-upload/oss-upload.json +6 -0
- package/miniprogram_dist/oss-upload/oss-upload.wxml +20 -0
- package/miniprogram_dist/oss-upload/oss-upload.wxss +5 -0
- package/miniprogram_dist/popup/popup.js +36 -0
- package/miniprogram_dist/popup/popup.json +5 -0
- package/miniprogram_dist/popup/popup.wxml +14 -0
- package/miniprogram_dist/popup/popup.wxss +138 -0
- package/miniprogram_dist/popup-page/popup-page.js +341 -0
- package/miniprogram_dist/popup-page/popup-page.json +8 -0
- package/miniprogram_dist/popup-page/popup-page.wxml +65 -0
- package/miniprogram_dist/popup-page/popup-page.wxss +92 -0
- package/miniprogram_dist/progress/progress.js +161 -0
- package/miniprogram_dist/progress/progress.json +5 -0
- package/miniprogram_dist/progress/progress.wxml +16 -0
- package/miniprogram_dist/progress/progress.wxss +81 -0
- package/miniprogram_dist/rate/rate.js +127 -0
- package/miniprogram_dist/rate/rate.json +5 -0
- package/miniprogram_dist/rate/rate.wxml +32 -0
- package/miniprogram_dist/rate/rate.wxs +21 -0
- package/miniprogram_dist/rate/rate.wxss +126 -0
- package/miniprogram_dist/stepper/stepper.js +153 -0
- package/miniprogram_dist/stepper/stepper.json +5 -0
- package/miniprogram_dist/stepper/stepper.wxml +19 -0
- package/miniprogram_dist/stepper/stepper.wxss +66 -0
- package/miniprogram_dist/switch/switch.js +29 -0
- package/miniprogram_dist/switch/switch.json +3 -0
- package/miniprogram_dist/switch/switch.wxml +10 -0
- package/miniprogram_dist/switch/switch.wxss +71 -0
- package/miniprogram_dist/textarea/textarea.js +83 -0
- package/miniprogram_dist/textarea/textarea.json +5 -0
- package/miniprogram_dist/textarea/textarea.wxml +14 -0
- package/miniprogram_dist/textarea/textarea.wxss +33 -0
- package/miniprogram_dist/theme/theme.wxss +64 -0
- package/miniprogram_dist/toast/toast.js +51 -0
- package/miniprogram_dist/toast/toast.json +5 -0
- package/miniprogram_dist/toast/toast.wxml +13 -0
- package/miniprogram_dist/toast/toast.wxss +143 -0
- package/miniprogram_dist/upload/upload.js +276 -0
- package/miniprogram_dist/upload/upload.json +3 -0
- package/miniprogram_dist/upload/upload.wxml +36 -0
- package/miniprogram_dist/upload/upload.wxss +136 -0
- package/miniprogram_dist/utils/class.js +37 -0
- package/miniprogram_dist/utils/device.js +67 -0
- package/miniprogram_dist/utils/dom.js +51 -0
- package/miniprogram_dist/utils/event.js +28 -0
- package/miniprogram_dist/utils/form.js +39 -0
- package/miniprogram_dist/utils/function.js +63 -0
- package/miniprogram_dist/utils/index.js +21 -0
- package/miniprogram_dist/utils/props.js +51 -0
- package/miniprogram_dist/utils/style.js +52 -0
- package/miniprogram_dist/utils/theme.js +30 -0
- package/package.json +31 -0
package/README.md
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# maooo-design
|
|
2
|
+
|
|
3
|
+
`maooo-design` 是面向微信小程序 Skyline 的 UI 组件库与 AI 设计系统工作区。当前根目录本身就是一个可运行的小程序预览工程,用于在真实 Skyline 环境中验证 `packages/ui` 下的组件、demo 页面和构建产物。
|
|
4
|
+
|
|
5
|
+
当前技术边界:
|
|
6
|
+
|
|
7
|
+
- 微信小程序 Skyline 渲染,`componentFramework: "glass-easel"`。
|
|
8
|
+
- 公共组件标签统一使用 `mo-` 前缀,例如 `<mo-button />`、`<mo-popup-page />`。
|
|
9
|
+
- 单组件公共 API 以各组件的 `schema.json` 为准。
|
|
10
|
+
- 跨组件复用、分层和组合关系以 [`packages/ui/component-registry.json`](./packages/ui/component-registry.json) 为准。
|
|
11
|
+
- 设计源数据、schema、prompt 和 AI 生成约束沉淀在 `design-system`。
|
|
12
|
+
|
|
13
|
+
## 组件能力概览
|
|
14
|
+
|
|
15
|
+
组件源码位于 [`packages/ui`](./packages/ui),每个组件目录通常包含 `README.md`、`schema.json` 和 `src/` 小程序实现文件。
|
|
16
|
+
|
|
17
|
+
### Base 组件
|
|
18
|
+
|
|
19
|
+
基础组件负责稳定、可复用的 UI 原子能力,不绑定具体业务流程:
|
|
20
|
+
|
|
21
|
+
- `mo-button`: 操作按钮,支持多类型、多尺寸、block、disabled、loading 和 icon slot。
|
|
22
|
+
- `mo-card`: 信息容器,支持标题、描述、默认 slot 和可点击状态。
|
|
23
|
+
- `mo-icon`: Iconfont.cn 图标渲染,支持 name、size、固定 color 和外层样式。
|
|
24
|
+
- `mo-input`: 受控单行输入,支持输入类型归一化、清除、确认、搜索、前后缀图标。
|
|
25
|
+
- `mo-textarea`: 受控多行输入,支持高度、字数展示、disabled、input 和 confirm 事件。
|
|
26
|
+
- `mo-form`: 表单区块容器,提供标题、描述、默认内容和 actions slot。
|
|
27
|
+
- `mo-form-group`: 字段标签容器,提供必填、帮助文案、错误文案和默认 slot。
|
|
28
|
+
- `mo-popup`: 基础弹层容器,负责遮罩、层级、显示隐藏、关闭请求和背景滚动锁定。
|
|
29
|
+
- `mo-progress`: 条状或环形进度展示,支持百分比、尺寸、文字和主题颜色。
|
|
30
|
+
- `mo-rate`: 星级评分,支持半星、普通/方块样式、只读、禁用和 change 事件。
|
|
31
|
+
- `mo-countdown`: 秒级倒计时,支持 DD、HH、mm、ss 分段和 change/finish 事件。
|
|
32
|
+
- `mo-switch`: 严格受控布尔开关,支持 checked、disabled、loading 和 change 事件。
|
|
33
|
+
- `mo-stepper`: 数值步进器,支持增减、输入、min/max 限制、disabled 和 input-disabled。
|
|
34
|
+
- `mo-upload`: 基础媒体选择与受控列表展示,支持预览、删除、数量限制和状态遮罩。
|
|
35
|
+
- `mo-image-cropper`: 图片裁剪组件,支持拖拽缩放、固定比例、缩略图状态和 canvas 导出。
|
|
36
|
+
|
|
37
|
+
### Composed 组件
|
|
38
|
+
|
|
39
|
+
组合组件复用基础组件,提供更完整但仍然通用的界面结构:
|
|
40
|
+
|
|
41
|
+
- `mo-calendar`: 基于 `mo-popup-page` 的日历弹层,支持单选/多选日期、日期文案、价格、tag 和确认流程。
|
|
42
|
+
- `mo-form-input`: 组合 `mo-form-group` 与 `mo-input` 的带标签单行表单字段。
|
|
43
|
+
- `mo-form-textarea`: 组合 `mo-form-group` 与 `mo-textarea` 的带标签多行表单字段。
|
|
44
|
+
- `mo-popup-page`: 基于 `mo-popup` 与 `mo-button` 的页面式底部弹层,提供标题、滚动内容区和底部操作。
|
|
45
|
+
- `mo-oss-upload`: 组合 `mo-upload` 的阿里云 OSS 上传组件,负责签名请求、上传、进度、成功和错误事件。
|
|
46
|
+
- `mo-navbar`: Skyline 自定义导航栏,支持状态栏/胶囊安全区测量、占位、标题、返回和首页事件。
|
|
47
|
+
|
|
48
|
+
### Business 组件
|
|
49
|
+
|
|
50
|
+
业务组件封装更完整的业务链路,但仍避免硬编码业务项目依赖:
|
|
51
|
+
|
|
52
|
+
- `mo-media-upload`: 组合 `mo-upload`、`mo-image-cropper` 和 OSS 上传机制,支持图片/视频上传、裁剪、可选审核、视频封面和主图设置。
|
|
53
|
+
|
|
54
|
+
## 目录结构与职责
|
|
55
|
+
|
|
56
|
+
- [`design-system`](./design-system): 设计源数据、tokens、schemas、patterns、prompts、skills、evaluations 和 references。
|
|
57
|
+
- [`packages/ui`](./packages/ui): 微信小程序组件源码、单组件 README、schema 和实现资产。
|
|
58
|
+
- [`packages/theme`](./packages/theme): 设计 token 构建后的运行时主题产物。
|
|
59
|
+
- [`packages/icons`](./packages/icons): 图标同步与 Iconfont 相关说明。
|
|
60
|
+
- [`packages/utils`](./packages/utils): 组件共享工具,构建时会复制到 `miniprogram_dist/utils`。
|
|
61
|
+
- [`packages/renderer`](./packages/renderer): 面向 AI schema 到小程序 UI 的渲染层。
|
|
62
|
+
- [`pages`](./pages): 当前根小程序的组件 demo 页面,统一放在 `pages/<component>/<component>`。
|
|
63
|
+
- [`scripts`](./scripts): 构建、schema、token、docs、icon 同步等脚本。
|
|
64
|
+
- [`docs`](./docs): 架构、目录、组件规范、Skyline 注意事项、发包和贡献文档。
|
|
65
|
+
- [`miniprogram_dist`](./miniprogram_dist): `npm run build:dist` 生成的小程序 npm 产物。
|
|
66
|
+
|
|
67
|
+
更完整的目录说明见 [`docs/directory-guide.zh-CN.md`](./docs/directory-guide.zh-CN.md)。
|
|
68
|
+
|
|
69
|
+
## 快速开始
|
|
70
|
+
|
|
71
|
+
安装依赖:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
npm install
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
用微信开发者工具打开当前仓库根目录,即可作为 Skyline 小程序预览工程使用。根目录的 [`app.json`](./app.json) 已开启 Skyline 和 glass-easel。
|
|
78
|
+
|
|
79
|
+
常用命令:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
npm run build:dist
|
|
83
|
+
npm run pack:dry-run
|
|
84
|
+
npm run sync:icons
|
|
85
|
+
npm run build:schema
|
|
86
|
+
npm run build:token
|
|
87
|
+
npm run build:docs
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
命令说明:
|
|
91
|
+
|
|
92
|
+
- `npm run build:dist`: 构建 `miniprogram_dist`,并同步 `pages/index/index` 与 `app.json` 中的 demo 页面。
|
|
93
|
+
- `npm run pack:dry-run`: 构建后执行 `npm pack --dry-run`,检查实际发包内容。
|
|
94
|
+
- `npm run sync:icons`: 拉取并规范化 Iconfont 产物,更新 icon demo,再构建小程序产物。
|
|
95
|
+
- `npm run build:schema`: 构建或校验 schema 相关产物。
|
|
96
|
+
- `npm run build:token`: 从设计 token 源数据构建主题产物。
|
|
97
|
+
- `npm run build:docs`: 从组件和 schema 构建文档产物。
|
|
98
|
+
|
|
99
|
+
发包与业务接入说明见 [`docs/npm-publish.zh-CN.md`](./docs/npm-publish.zh-CN.md)。
|
|
100
|
+
|
|
101
|
+
## 组件开发约定
|
|
102
|
+
|
|
103
|
+
新增或修改组件时,优先遵守以下约定:
|
|
104
|
+
|
|
105
|
+
- 新增或重写的公共小程序组件使用 `mo-` 前缀,目录名不需要带前缀。
|
|
106
|
+
- 单组件 API 修改以组件目录内的 `schema.json` 为准。
|
|
107
|
+
- 新增、重命名、删除组件,或改变组件公共能力时,同步更新 [`packages/ui/component-registry.json`](./packages/ui/component-registry.json)。
|
|
108
|
+
- 组件 demo 页面放在 `pages/<component>/<component>`,不要放在 `packages/ui/<component>/demo`。
|
|
109
|
+
- 新增或删除 demo 页面后运行 `npm run build:dist`,同步预览入口和 `app.json`。
|
|
110
|
+
- 对外说明中的事件名使用 `onXxx`,运行时 `triggerEvent` 使用小程序小写事件名,demo WXML 使用 `bind:click`、`bind:change` 等小程序绑定语法。
|
|
111
|
+
- 内部 handler 使用 `handleXxx` 命名,公共 utility 使用 `isXxx`、`hasXxx`、`getXxxClass`、`getXxxStyle`、`normalizeXxx`、`emitXxx` 等命名。
|
|
112
|
+
- `<mo-icon />` 的 `color` 必须传 Iconfont 可直接解析的固定色值,例如 `#333333`、`rgb(51,51,51)`、`rgba(51,51,51,0.8)`。
|
|
113
|
+
- Skyline 页面滚动优先使用 `scroll-view`,弹层、手势、动画和复杂滚动需要在真实 Skyline 环境中验证。
|
|
114
|
+
- 组件和 demo WXSS 不写 `color: inherit;`,选中、禁用、激活等状态色应直接作用到可见文本节点。
|
|
115
|
+
|
|
116
|
+
组件目录规范见 [`docs/component-spec.md`](./docs/component-spec.md),Skyline 注意事项见 [`docs/skyline-notes.md`](./docs/skyline-notes.md),贡献流程见 [`docs/contribution.md`](./docs/contribution.md)。
|
|
117
|
+
|
|
118
|
+
## 业务项目使用示例
|
|
119
|
+
|
|
120
|
+
业务小程序安装 npm 包并在微信开发者工具中构建 npm 后,可在页面或组件 `.json` 中注册:
|
|
121
|
+
|
|
122
|
+
```json
|
|
123
|
+
{
|
|
124
|
+
"usingComponents": {
|
|
125
|
+
"mo-card": "maooo-skyline-ui-system/card/card",
|
|
126
|
+
"mo-input": "maooo-skyline-ui-system/input/input",
|
|
127
|
+
"mo-button": "maooo-skyline-ui-system/button/button"
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
页面 `.wxml` 中使用:
|
|
133
|
+
|
|
134
|
+
```xml
|
|
135
|
+
<mo-card title="客户信息" desc="请确认资料">
|
|
136
|
+
<mo-input placeholder="请输入客户姓名" bind:change="handleNameChange" />
|
|
137
|
+
<mo-button label="保存" bind:click="handleSave" />
|
|
138
|
+
</mo-card>
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
主题变量可在业务小程序 `app.wxss` 中引入:
|
|
142
|
+
|
|
143
|
+
```css
|
|
144
|
+
@import "maooo-skyline-ui-system/theme/theme.wxss";
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
组件 API 以各组件的 `schema.json` 和 README 为准,根 README 只维护项目入口信息。
|
|
148
|
+
|
|
149
|
+
## 相关文档
|
|
150
|
+
|
|
151
|
+
- [系统架构](./ARCHITECTURE.md)
|
|
152
|
+
- [目录说明](./docs/directory-guide.zh-CN.md)
|
|
153
|
+
- [组件规范](./docs/component-spec.md)
|
|
154
|
+
- [Skyline Notes](./docs/skyline-notes.md)
|
|
155
|
+
- [npm 发包与业务接入](./docs/npm-publish.zh-CN.md)
|
|
156
|
+
- [贡献说明](./docs/contribution.md)
|
|
157
|
+
- [UI Package](./packages/ui/README.md)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
Component({
|
|
2
|
+
options: {
|
|
3
|
+
multipleSlots: true
|
|
4
|
+
},
|
|
5
|
+
properties: {
|
|
6
|
+
label: {
|
|
7
|
+
type: String,
|
|
8
|
+
value: "按钮"
|
|
9
|
+
},
|
|
10
|
+
variant: {
|
|
11
|
+
type: String,
|
|
12
|
+
value: "primary"
|
|
13
|
+
},
|
|
14
|
+
size: {
|
|
15
|
+
type: String,
|
|
16
|
+
value: "medium"
|
|
17
|
+
},
|
|
18
|
+
block: {
|
|
19
|
+
type: Boolean,
|
|
20
|
+
value: false
|
|
21
|
+
},
|
|
22
|
+
disabled: {
|
|
23
|
+
type: Boolean,
|
|
24
|
+
value: false
|
|
25
|
+
},
|
|
26
|
+
loading: {
|
|
27
|
+
type: Boolean,
|
|
28
|
+
value: false
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
methods: {
|
|
32
|
+
handleClick(event) {
|
|
33
|
+
if (this.data.disabled || this.data.loading) return;
|
|
34
|
+
this.triggerEvent("click", {
|
|
35
|
+
...event.detail,
|
|
36
|
+
label: this.data.label,
|
|
37
|
+
variant: this.data.variant,
|
|
38
|
+
size: this.data.size,
|
|
39
|
+
block: this.data.block
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<wxs src="./button.wxs" module="buttonClass" />
|
|
2
|
+
|
|
3
|
+
<button
|
|
4
|
+
class="{{buttonClass.className(variant, size, block, disabled, loading)}}"
|
|
5
|
+
hover-class="mo-button--active"
|
|
6
|
+
disabled="{{disabled}}"
|
|
7
|
+
bindtap="handleClick"
|
|
8
|
+
>
|
|
9
|
+
<slot name="icon"></slot>
|
|
10
|
+
<view wx:if="{{loading}}" class="mo-button__loading"></view>
|
|
11
|
+
<text class="mo-button__label">{{label}}</text>
|
|
12
|
+
</button>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
function isValid(value, values) {
|
|
2
|
+
for (var i = 0; i < values.length; i += 1) {
|
|
3
|
+
if (value === values[i]) return true;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function className(variant, size, block, disabled, loading) {
|
|
10
|
+
var safeVariant = isValid(variant, ["primary", "secondary", "outline"]) ? variant : "primary";
|
|
11
|
+
var safeSize = isValid(size, ["giant", "large", "medium", "small", "mini"]) ? size : "medium";
|
|
12
|
+
var classes = ["mo-button", "mo-button--" + safeVariant, "mo-button--" + safeSize];
|
|
13
|
+
|
|
14
|
+
if (block) classes.push("mo-button--block");
|
|
15
|
+
if (disabled) classes.push("is-disabled");
|
|
16
|
+
if (loading) classes.push("is-loading");
|
|
17
|
+
|
|
18
|
+
return classes.join(" ");
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
module.exports = {
|
|
22
|
+
className: className
|
|
23
|
+
};
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
.mo-button {
|
|
2
|
+
box-sizing: border-box;
|
|
3
|
+
display: inline-flex;
|
|
4
|
+
align-items: center;
|
|
5
|
+
justify-content: center;
|
|
6
|
+
max-width: 100%;
|
|
7
|
+
margin: 0;
|
|
8
|
+
border: 0;
|
|
9
|
+
border-style: solid;
|
|
10
|
+
border-width: 1rpx;
|
|
11
|
+
border-radius: var(--mo-radius-pill, 999rpx);
|
|
12
|
+
color: var(--mo-color-text-primary, #111111);
|
|
13
|
+
font-weight: var(--mo-font-weight-medium, 500);
|
|
14
|
+
letter-spacing: 0;
|
|
15
|
+
vertical-align: middle;
|
|
16
|
+
transition: opacity 120ms ease;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.mo-button::after {
|
|
20
|
+
border: 0;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.mo-button--block {
|
|
24
|
+
display: flex;
|
|
25
|
+
width: 100% !important;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.mo-button--primary {
|
|
29
|
+
border-color: var(--mo-color-brand-primary, #FECBE7);
|
|
30
|
+
color: var(--mo-color-text-primary, #111111);
|
|
31
|
+
background: var(--mo-color-brand-primary, #FECBE7);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.mo-button--secondary {
|
|
35
|
+
border-color: var(--mo-color-background-muted, #F2F2F2);
|
|
36
|
+
color: var(--mo-color-text-primary, #111111);
|
|
37
|
+
background: var(--mo-color-background-muted, #F2F2F2);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.mo-button--outline {
|
|
41
|
+
border-color: var(--mo-color-brand-primary, #FECBE7);
|
|
42
|
+
color: var(--mo-color-text-primary, #111111);
|
|
43
|
+
background: var(--mo-color-background-surface, #FFFFFF);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.mo-button--giant {
|
|
47
|
+
min-height: 80rpx;
|
|
48
|
+
padding: 0 48rpx;
|
|
49
|
+
font-size: var(--mo-font-size-title-4, 28rpx);
|
|
50
|
+
line-height: var(--mo-line-height-title-4, 39rpx);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.mo-button--large {
|
|
54
|
+
min-height: 88rpx;
|
|
55
|
+
padding: 0 56rpx;
|
|
56
|
+
font-size: var(--mo-font-size-title, 32rpx);
|
|
57
|
+
line-height: 45rpx;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.mo-button--medium {
|
|
61
|
+
min-height: 80rpx;
|
|
62
|
+
padding: 0 40rpx;
|
|
63
|
+
font-size: var(--mo-font-size-title-4, 28rpx);
|
|
64
|
+
line-height: var(--mo-line-height-title-4, 39rpx);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.mo-button--small {
|
|
68
|
+
min-height: 60rpx;
|
|
69
|
+
padding: 0 24rpx;
|
|
70
|
+
font-size: var(--mo-font-size-body, 24rpx);
|
|
71
|
+
line-height: var(--mo-line-height-body, 34rpx);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.mo-button--mini {
|
|
75
|
+
min-height: 60rpx;
|
|
76
|
+
padding: 0 24rpx;
|
|
77
|
+
font-size: var(--mo-font-size-body, 24rpx);
|
|
78
|
+
line-height: var(--mo-line-height-body, 34rpx);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.mo-button--active {
|
|
82
|
+
opacity: 0.82;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.mo-button.is-disabled {
|
|
86
|
+
border-color: var(--mo-color-background-muted, #F2F2F2);
|
|
87
|
+
color: var(--mo-color-text-tertiary, #999999);
|
|
88
|
+
background: var(--mo-color-background-muted, #F2F2F2);
|
|
89
|
+
box-shadow: none;
|
|
90
|
+
opacity: 1;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.mo-button.is-loading {
|
|
94
|
+
opacity: 0.92;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.mo-button__loading {
|
|
98
|
+
box-sizing: border-box;
|
|
99
|
+
width: 28rpx;
|
|
100
|
+
height: 28rpx;
|
|
101
|
+
margin-right: 8rpx;
|
|
102
|
+
border: 3rpx solid currentColor;
|
|
103
|
+
border-top-color: transparent;
|
|
104
|
+
border-radius: 50%;
|
|
105
|
+
animation: mo-button-loading 800ms linear infinite;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.mo-button__label {
|
|
109
|
+
display: block;
|
|
110
|
+
max-width: 100%;
|
|
111
|
+
color: var(--mo-color-text-primary, #111111);
|
|
112
|
+
overflow: hidden;
|
|
113
|
+
text-overflow: ellipsis;
|
|
114
|
+
white-space: nowrap;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.mo-button--outline .mo-button__label {
|
|
118
|
+
color: var(--mo-color-text-primary, #111111);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.mo-button.is-disabled .mo-button__label {
|
|
122
|
+
color: var(--mo-color-text-tertiary, #999999);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
@keyframes mo-button-loading {
|
|
126
|
+
from {
|
|
127
|
+
transform: rotate(0deg);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
to {
|
|
131
|
+
transform: rotate(360deg);
|
|
132
|
+
}
|
|
133
|
+
}
|