@doubao-apps/create 0.0.33 → 0.0.34
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/dist/421.js +4 -4
- package/dist/cli.js +74 -66
- package/dist/index.d.ts +1 -2
- package/dist/template-empty/README.md +1 -1
- package/dist/template-empty/package.json +2 -2
- package/dist/template-starter/README.md +48 -169
- package/dist/template-starter/package.json +2 -2
- package/dist/template-starter/src/app.config.ts +2 -3
- package/dist/template-starter/src/pages/home/index.scss +38 -172
- package/dist/template-starter/src/pages/home/index.tsx +20 -78
- package/dist/template-starter/src/widgets/hello-world/index.scss +23 -0
- package/dist/template-starter/src/widgets/hello-world/index.tsx +29 -0
- package/package.json +6 -2
- package/dist/template-empty/AGENTS.md +0 -299
- package/dist/template-empty/references/examples/common-patterns.md +0 -589
- package/dist/template-empty/references/examples/component-basics.md +0 -526
- package/dist/template-empty/references/guides/best-practices.md +0 -571
- package/dist/template-empty/references/guides/component-development.md +0 -891
- package/dist/template-empty/references/guides/performance-optimization.md +0 -402
- package/dist/template-empty/references/guides/troubleshooting.md +0 -287
- package/dist/template-empty/references/reference/components-quick-ref.md +0 -103
- package/dist/template-empty/references/reference/framework-api-quick-ref.md +0 -550
- package/dist/template-empty/references/reference/open-api/README.md +0 -8
- package/dist/template-empty/references/reference/open-api.md +0 -11
- package/dist/template-empty/references/rules/dos-and-donts.md +0 -467
- package/dist/template-starter/AGENTS.md +0 -299
- package/dist/template-starter/debug-scene/render-home-page-full.json +0 -6
- package/dist/template-starter/debug-scene/render-home-page.json +0 -5
- package/dist/template-starter/debug-scene/render-react-lynx-page-full.json +0 -6
- package/dist/template-starter/references/examples/common-patterns.md +0 -589
- package/dist/template-starter/references/examples/component-basics.md +0 -526
- package/dist/template-starter/references/guides/best-practices.md +0 -571
- package/dist/template-starter/references/guides/component-development.md +0 -891
- package/dist/template-starter/references/guides/performance-optimization.md +0 -402
- package/dist/template-starter/references/guides/troubleshooting.md +0 -287
- package/dist/template-starter/references/reference/components-quick-ref.md +0 -103
- package/dist/template-starter/references/reference/framework-api-quick-ref.md +0 -550
- package/dist/template-starter/references/reference/open-api/README.md +0 -8
- package/dist/template-starter/references/reference/open-api.md +0 -11
- package/dist/template-starter/references/rules/dos-and-donts.md +0 -467
- package/dist/template-starter/src/pages/applet/index.scss +0 -279
- package/dist/template-starter/src/pages/applet/index.tsx +0 -78
- package/dist/template-starter/src/pages/lynx/index.scss +0 -249
- package/dist/template-starter/src/pages/lynx/index.tsx +0 -78
- package/dist/template-starter/src/pages/react-lynx/index.scss +0 -335
- package/dist/template-starter/src/pages/react-lynx/index.tsx +0 -132
- package/dist/template-starter/src/widgets/weather-card/index.scss +0 -272
- package/dist/template-starter/src/widgets/weather-card/index.tsx +0 -193
|
@@ -1,204 +1,83 @@
|
|
|
1
|
-
# Doubao Apps SDK
|
|
1
|
+
# Doubao Apps SDK Starter
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
这是一个 Doubao Apps SDK 起始模板,包含一个 Page、一个 Widget 和最小入口配置。
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
## 🚀 快速开始
|
|
8
|
-
|
|
9
|
-
### 安装依赖
|
|
5
|
+
## 快速开始
|
|
10
6
|
|
|
11
7
|
```bash
|
|
12
8
|
pnpm install
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
### 启动开发
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
# 启动开发服务器
|
|
19
9
|
pnpm run dev
|
|
20
10
|
```
|
|
21
11
|
|
|
22
|
-
|
|
23
|
-
- 输入 `d` - 选择场景/页面/卡片运行
|
|
24
|
-
- 输入 `<scene-name>` - 运行指定场景
|
|
25
|
-
- 输入 `<page-id>` - 运行指定页面
|
|
26
|
-
- 输入 `<widget-id>` - 运行指定卡片
|
|
12
|
+
开发服务器启动后,可以输入页面或卡片 id 运行指定视图。
|
|
27
13
|
|
|
28
|
-
|
|
14
|
+
## 构建
|
|
29
15
|
|
|
30
16
|
```bash
|
|
31
|
-
# 构建项目
|
|
32
17
|
pnpm run build
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
# 分析构建产物
|
|
36
|
-
pnpm run analyze
|
|
37
18
|
```
|
|
38
19
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
## 📂 项目结构
|
|
20
|
+
## 项目结构
|
|
42
21
|
|
|
43
|
-
```
|
|
22
|
+
```text
|
|
44
23
|
.
|
|
45
24
|
├── package.json # 依赖管理
|
|
46
25
|
├── tsconfig.json # TypeScript 配置
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
│
|
|
53
|
-
│
|
|
54
|
-
│
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
└──
|
|
26
|
+
└── src/
|
|
27
|
+
├── app.ts # 应用入口
|
|
28
|
+
├── app.config.ts # 应用配置
|
|
29
|
+
├── mcp-ui/ # 可选登录、隐私等协议页面
|
|
30
|
+
├── pages/ # 页面目录
|
|
31
|
+
│ └── home/
|
|
32
|
+
│ ├── index.tsx
|
|
33
|
+
│ └── index.scss
|
|
34
|
+
└── widgets/ # 卡片目录
|
|
35
|
+
└── hello-world/
|
|
36
|
+
├── index.tsx
|
|
37
|
+
└── index.scss
|
|
59
38
|
```
|
|
60
39
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
项目中的 App、Page 和 Widget metadata 统一写在 `src/app.config.ts`,`src/app.ts` 和各页面/卡片入口只负责生命周期与渲染逻辑。
|
|
64
|
-
|
|
65
|
-
---
|
|
40
|
+
## App 配置
|
|
66
41
|
|
|
67
|
-
|
|
42
|
+
`src/app.config.ts` 默认只声明 App 信息和 Page / Widget 入口。标题、描述、自定义 id 等业务 metadata 按需再补。
|
|
68
43
|
|
|
69
|
-
|
|
44
|
+
```ts
|
|
45
|
+
import { defineAppConfig } from '@doubao-apps/kit';
|
|
70
46
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
- `guides/` - 开发指南和最佳实践
|
|
78
|
-
- `examples/` - 代码示例
|
|
79
|
-
- `rules/` - 开发规范
|
|
80
|
-
- `reference/` - API 快速参考
|
|
81
|
-
|
|
82
|
-
### 🎯 使用 AI 工具开发
|
|
83
|
-
|
|
84
|
-
#### 1. 安装 AI 上下文与 Skills(推荐)
|
|
85
|
-
|
|
86
|
-
如果你希望在项目中配套安装 Doubao Apps 的 AI 知识库与技能,可使用 CLI:
|
|
87
|
-
|
|
88
|
-
```bash
|
|
89
|
-
npm install -g @doubao-apps/ai
|
|
90
|
-
|
|
91
|
-
# 安装到指定 Agent 的 skill
|
|
92
|
-
doubao-cli skills add doubao-apps-dev --agent codex
|
|
47
|
+
export default defineAppConfig({
|
|
48
|
+
appId: 'db_xxxxxx',
|
|
49
|
+
name: '我的豆包应用',
|
|
50
|
+
pages: ['pages/home/index'],
|
|
51
|
+
widgets: ['widgets/hello-world/index']
|
|
52
|
+
});
|
|
93
53
|
```
|
|
94
54
|
|
|
95
|
-
|
|
55
|
+
需要页面标题、卡片名称、描述、多级目录或稳定入口顺序时,再把字符串入口改成对象写法。
|
|
96
56
|
|
|
97
|
-
|
|
98
|
-
- `--global`:全局安装到用户目录,而不是当前项目目录
|
|
99
|
-
- `doubao-cli skills list`:查看当前可用的 skills
|
|
100
|
-
- `doubao-cli skills update [--global]`:更新已安装的 skills
|
|
57
|
+
## AI 开发支持
|
|
101
58
|
|
|
102
|
-
|
|
59
|
+
创建项目时如果选择 AI 支持,Create CLI 会在当前项目目录自动安装 `doubao-apps-dev` Skill 到所选 AI Agent。
|
|
103
60
|
|
|
104
|
-
|
|
105
|
-
# 给 Codex 安装 Doubao Apps 开发 skill
|
|
106
|
-
doubao-cli skills add doubao-apps-dev --agent codex
|
|
61
|
+
如果创建时没有选择 AI 支持,或需要给其他 Agent 补装 Skill,可以在当前项目目录执行:
|
|
107
62
|
|
|
108
|
-
|
|
109
|
-
|
|
63
|
+
```bash
|
|
64
|
+
# 给指定 Agent 安装 Doubao Apps 开发 Skill
|
|
65
|
+
npx @doubao-apps/ai skills add doubao-apps-dev --agent claude-code
|
|
110
66
|
|
|
111
67
|
# 全局安装到用户目录
|
|
112
|
-
doubao-
|
|
113
|
-
```
|
|
68
|
+
npx @doubao-apps/ai skills add doubao-apps-dev --agent claude-code --global
|
|
114
69
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
**✅ 清晰明确的问题**:
|
|
120
|
-
- "创建一个天气卡片 Widget,展示温度和天气图标"
|
|
121
|
-
- "如何在 Page 中调用 Bridge API 获取用户信息?"
|
|
122
|
-
- "优化这个组件的渲染性能"
|
|
123
|
-
- "添加错误处理和加载状态"
|
|
124
|
-
|
|
125
|
-
**❌ 模糊的问题**:
|
|
126
|
-
- "帮我写个页面"
|
|
127
|
-
- "这个怎么做"
|
|
128
|
-
- "优化代码"
|
|
129
|
-
- "修复 bug"
|
|
130
|
-
|
|
131
|
-
#### 3. AI 辅助开发流程
|
|
132
|
-
|
|
133
|
-
1. **明确需求** - 清楚描述要实现的功能和预期效果
|
|
134
|
-
2. **查阅文档** - 参考 `AGENTS.md` 和 `references/` 目录下的文档
|
|
135
|
-
3. **请求 AI 生成** - 使用清晰的提示词让 AI 生成代码
|
|
136
|
-
4. **测试验证** - 运行 `pnpm run dev` 查看效果
|
|
137
|
-
5. **迭代优化** - 根据结果调整需求,继续与 AI 协作
|
|
138
|
-
|
|
139
|
-
#### 4. 常用 AI 开发任务
|
|
140
|
-
|
|
141
|
-
| 任务 | 文档参考 | AI 提示词示例 |
|
|
142
|
-
|------|---------|--------------|
|
|
143
|
-
| 创建新页面 | `references/guides/component-development.md` | "创建一个用户资料页面,包含头像、姓名、邮箱和统计数据" |
|
|
144
|
-
| 创建新卡片 | `references/guides/component-development.md` | "创建一个天气卡片 Widget,接收城市名称并展示天气信息" |
|
|
145
|
-
| API 集成 | `references/examples/common-patterns.md` | "调用 Bridge API 获取用户位置信息并展示在地图上" |
|
|
146
|
-
| 状态管理 | `references/examples/common-patterns.md` | "使用 Context 管理全局主题状态(亮色/暗色模式)" |
|
|
147
|
-
| 页面导航 | `references/examples/common-patterns.md` | "打开详情页面并传递商品 ID 参数" |
|
|
148
|
-
| 性能优化 | `references/guides/performance-optimization.md` | "优化列表渲染性能,减少不必要的重新渲染" |
|
|
149
|
-
| 问题排查 | `references/guides/troubleshooting.md` | "调试页面加载缓慢的问题" |
|
|
150
|
-
|
|
151
|
-
### 📚 快速导航
|
|
152
|
-
|
|
153
|
-
**入门学习**:
|
|
154
|
-
- 📖 [AGENTS.md](./AGENTS.md) - 从这里开始
|
|
155
|
-
- 🎯 [组件开发](./references/guides/component-development.md) - Page 和 Widget 完整指南
|
|
156
|
-
- 💡 [组件基础](./references/examples/component-basics.md) - Page vs Widget 对比示例
|
|
157
|
-
|
|
158
|
-
**实战参考**:
|
|
159
|
-
- 🔧 [常用模式](./references/examples/common-patterns.md) - API 集成、状态管理、页面导航
|
|
160
|
-
- 📋 [最佳实践](./references/guides/best-practices.md) - 代码规范和架构设计
|
|
161
|
-
- ⚡ [性能优化](./references/guides/performance-optimization.md) - 渲染优化和内存管理
|
|
162
|
-
|
|
163
|
-
**问题解决**:
|
|
164
|
-
- 🔍 [故障排查](./references/guides/troubleshooting.md) - 调试技巧和常见问题
|
|
165
|
-
- 📖 [API 参考](./references/reference/open-api.md) - Framework + Bridge 完整 API
|
|
166
|
-
|
|
167
|
-
---
|
|
168
|
-
|
|
169
|
-
## 🔧 开发工具
|
|
170
|
-
|
|
171
|
-
### HDT(Hybrid DevTool)
|
|
172
|
-
|
|
173
|
-
推荐使用 HDT 进行调试和预览:
|
|
174
|
-
|
|
175
|
-
**下载地址**:
|
|
176
|
-
- macOS Apple Silicon: [下载 DMG](https://cdn-tos-cn.bytedance.net/obj/hdt2/HybridDevtool3.0/latest/darwin-universal/hdt3-darwin-universal.dmg)
|
|
177
|
-
- macOS Intel: [下载 DMG](https://cdn-tos-cn.bytedance.net/obj/hdt2/HybridDevtool3.0/latest/darwin-x64/hdt3-darwin-x64.dmg)
|
|
178
|
-
- Windows: [下载 EXE](https://cdn-tos-cn.bytedance.net/obj/archi/tiktok/hdt-for-windows/hdt3/latest/x64/HybridDevtool3.0-Setup-x64.exe)
|
|
179
|
-
|
|
180
|
-
**功能**:
|
|
181
|
-
- 实时预览应用效果
|
|
182
|
-
- 调试工具和日志查看
|
|
183
|
-
- 网络请求监控
|
|
184
|
-
- 性能分析
|
|
185
|
-
|
|
186
|
-
---
|
|
187
|
-
|
|
188
|
-
## 📖 相关链接
|
|
189
|
-
|
|
190
|
-
- **框架文档**: [Doubao Apps SDK 文档](https://example.com/docs)
|
|
191
|
-
- **Lynx 官方文档**: [https://lynx.bytedance.net/next/llms.txt](https://lynx.bytedance.net/next/llms.txt)
|
|
192
|
-
- **API 参考**: 查看项目内 `references/reference/open-api.md`
|
|
193
|
-
- **示例代码**: 查看项目内 `references/examples/` 目录
|
|
194
|
-
|
|
195
|
-
---
|
|
70
|
+
# 查看和更新可用 Skills
|
|
71
|
+
npx @doubao-apps/ai skills list
|
|
72
|
+
npx @doubao-apps/ai skills update
|
|
73
|
+
```
|
|
196
74
|
|
|
197
|
-
|
|
75
|
+
- `skills add` 会把指定 Skill 安装到目标 Agent 的 skills 目录。
|
|
76
|
+
- `--agent` 可填写 `codex`、`cursor`、`claude-code`、`opencode`、`github-copilot` 等。
|
|
77
|
+
- `--global` 表示安装到用户目录;不加时安装到当前项目目录。
|
|
198
78
|
|
|
199
|
-
|
|
79
|
+
使用 AI 辅助开发时,建议把目标视图类型、入口路径、viewData 字段、metadata 和需要调用的端能力说清楚,例如:
|
|
200
80
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
4. 联系团队获取支持
|
|
81
|
+
- “创建一个订单摘要 Widget,入口为 `src/widgets/order-summary/index.tsx`,从 `getViewData<T>()` 读取订单号、金额和状态。”
|
|
82
|
+
- “创建一个账号设置 Page,注册到 `src/app.config.ts`,包含 `switch` 和 `slider` 的受控状态。”
|
|
83
|
+
- “在页面按钮点击时调用 `showToast`,并处理 loading、success、error 状态。”
|
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
"build": "doubao build"
|
|
7
7
|
},
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"@doubao-apps/framework": "^0.0.
|
|
9
|
+
"@doubao-apps/framework": "^0.0.34"
|
|
10
10
|
},
|
|
11
11
|
"devDependencies": {
|
|
12
|
-
"@doubao-apps/kit": "^0.0.
|
|
12
|
+
"@doubao-apps/kit": "^0.0.34",
|
|
13
13
|
"typescript": "6.0.3"
|
|
14
14
|
},
|
|
15
15
|
"version": "0.0.16"
|
|
@@ -1,197 +1,63 @@
|
|
|
1
|
-
|
|
2
|
-
--primary-bg: #0a0a0a;
|
|
3
|
-
--secondary-bg: #1a1a1a;
|
|
4
|
-
--card-bg: #161616;
|
|
5
|
-
--primary-text: #ffffff;
|
|
6
|
-
--secondary-text: #a0a0a0;
|
|
7
|
-
--accent-text: #00d4ff;
|
|
8
|
-
--border-color: #2a2a2a;
|
|
9
|
-
--success-color: #00ff88;
|
|
10
|
-
--warning-color: #ffaa00;
|
|
11
|
-
--error-color: #ff4444;
|
|
12
|
-
|
|
13
|
-
--space-xs: 8rpx;
|
|
14
|
-
--space-sm: 16rpx;
|
|
15
|
-
--space-md: 24rpx;
|
|
16
|
-
--space-lg: 32rpx;
|
|
17
|
-
--space-xl: 48rpx;
|
|
18
|
-
--space-xxl: 64rpx;
|
|
19
|
-
--space-xxxl: 96rpx;
|
|
20
|
-
|
|
21
|
-
--border-radius-sm: 12rpx;
|
|
22
|
-
--border-radius-md: 16rpx;
|
|
23
|
-
--border-radius-lg: 24rpx;
|
|
24
|
-
--border-radius-xl: 32rpx;
|
|
25
|
-
|
|
26
|
-
--shadow-sm: 0 2rpx 8rpx rgba(0, 0, 0, 0.4);
|
|
27
|
-
--shadow-md: 0 4rpx 16rpx rgba(0, 0, 0, 0.6);
|
|
28
|
-
--shadow-lg: 0 8rpx 32rpx rgba(0, 0, 0, 0.8);
|
|
29
|
-
--shadow-xl: 0 16rpx 48rpx rgba(0, 0, 0, 0.9);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
.home {
|
|
1
|
+
.home-page {
|
|
33
2
|
min-height: 100vh;
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
position: fixed;
|
|
39
|
-
top: 0;
|
|
40
|
-
left: 0;
|
|
41
|
-
right: 0;
|
|
42
|
-
bottom: 0;
|
|
43
|
-
background-image:
|
|
44
|
-
radial-gradient(circle at 20% 20%, rgba(102, 126, 234, 0.1) 0%, transparent 50%),
|
|
45
|
-
radial-gradient(circle at 80% 80%, rgba(118, 75, 162, 0.1) 0%, transparent 50%),
|
|
46
|
-
radial-gradient(circle at 40% 60%, rgba(240, 147, 251, 0.05) 0%, transparent 50%);
|
|
47
|
-
z-index: 0;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
&__container {
|
|
51
|
-
position: relative;
|
|
52
|
-
z-index: 1;
|
|
53
|
-
min-height: 100vh;
|
|
54
|
-
padding: var(--space-xl) var(--space-lg);
|
|
55
|
-
box-sizing: border-box;
|
|
56
|
-
}
|
|
3
|
+
padding: 48rpx 32rpx;
|
|
4
|
+
box-sizing: border-box;
|
|
5
|
+
background: #f7f8fc;
|
|
6
|
+
color: #171a24;
|
|
57
7
|
|
|
58
8
|
&__header {
|
|
59
|
-
|
|
60
|
-
margin-bottom: var(--space-xxxl);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
&__logo {
|
|
64
|
-
margin-bottom: var(--space-lg);
|
|
9
|
+
margin-bottom: 40rpx;
|
|
65
10
|
}
|
|
66
11
|
|
|
67
|
-
&
|
|
68
|
-
|
|
69
|
-
|
|
12
|
+
&__eyebrow {
|
|
13
|
+
display: block;
|
|
14
|
+
margin-bottom: 16rpx;
|
|
15
|
+
color: #3d67ff;
|
|
16
|
+
font-size: 24rpx;
|
|
17
|
+
font-weight: 600;
|
|
70
18
|
}
|
|
71
19
|
|
|
72
20
|
&__title {
|
|
73
|
-
font-size: 64rpx;
|
|
74
|
-
font-weight: 700;
|
|
75
|
-
color: var(--primary-text);
|
|
76
|
-
margin-bottom: var(--space-sm);
|
|
77
21
|
display: block;
|
|
78
|
-
|
|
79
|
-
|
|
22
|
+
margin-bottom: 20rpx;
|
|
23
|
+
color: #171a24;
|
|
24
|
+
font-size: 44rpx;
|
|
25
|
+
font-weight: 700;
|
|
26
|
+
line-height: 1.2;
|
|
80
27
|
}
|
|
81
28
|
|
|
82
|
-
&
|
|
83
|
-
font-size: 28rpx;
|
|
84
|
-
color: var(--secondary-text);
|
|
29
|
+
&__description {
|
|
85
30
|
display: block;
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
&__divider {
|
|
91
|
-
width: 120rpx;
|
|
92
|
-
height: 4rpx;
|
|
93
|
-
background: linear-gradient(90deg, var(--accent-text), transparent);
|
|
94
|
-
margin: var(--space-xl) 0;
|
|
95
|
-
border-radius: 2rpx;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
&__list {
|
|
99
|
-
display: flex;
|
|
100
|
-
flex-direction: column;
|
|
101
|
-
gap: var(--space-lg);
|
|
102
|
-
margin-bottom: var(--space-xxl);
|
|
103
|
-
box-sizing: border-box;
|
|
104
|
-
|
|
105
|
-
.card {
|
|
106
|
-
min-height: 160rpx;
|
|
107
|
-
}
|
|
31
|
+
color: #5d6475;
|
|
32
|
+
font-size: 28rpx;
|
|
33
|
+
line-height: 1.5;
|
|
108
34
|
}
|
|
109
35
|
|
|
110
|
-
&
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
border-
|
|
36
|
+
&__section {
|
|
37
|
+
padding: 28rpx;
|
|
38
|
+
border: 1rpx solid #dfe3ef;
|
|
39
|
+
border-radius: 16rpx;
|
|
40
|
+
background: #ffffff;
|
|
114
41
|
}
|
|
115
42
|
|
|
116
|
-
&
|
|
117
|
-
font-size: 20rpx;
|
|
118
|
-
color: var(--secondary-text);
|
|
43
|
+
&__section-title {
|
|
119
44
|
display: block;
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
.card {
|
|
125
|
-
position: relative;
|
|
126
|
-
border-radius: var(--border-radius-xl);
|
|
127
|
-
overflow: hidden;
|
|
128
|
-
min-height: 160rpx;
|
|
129
|
-
cursor: pointer;
|
|
130
|
-
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
|
|
131
|
-
box-sizing: border-box;
|
|
132
|
-
|
|
133
|
-
&:active {
|
|
134
|
-
transform: translateY(-4rpx) scale(0.98);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
&__inner {
|
|
138
|
-
height: 100%;
|
|
139
|
-
padding: var(--space-lg);
|
|
140
|
-
display: flex;
|
|
141
|
-
flex-direction: row;
|
|
142
|
-
align-items: center;
|
|
143
|
-
text-align: left;
|
|
144
|
-
position: relative;
|
|
145
|
-
border-radius: var(--border-radius-xl);
|
|
146
|
-
background: var(--card-bg);
|
|
147
|
-
border: 1rpx solid rgba(255, 255, 255, 0.1);
|
|
148
|
-
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
|
|
149
|
-
box-shadow: var(--shadow-lg);
|
|
150
|
-
box-sizing: border-box;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
&:active &__inner {
|
|
154
|
-
box-shadow: var(--shadow-xl);
|
|
155
|
-
transform: translateY(-4rpx) scale(0.98);
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
&__icon-wrapper {
|
|
159
|
-
margin-right: var(--space-lg);
|
|
160
|
-
position: relative;
|
|
161
|
-
flex-shrink: 0;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
&__icon {
|
|
165
|
-
font-size: 48rpx;
|
|
166
|
-
line-height: 1;
|
|
45
|
+
margin-bottom: 20rpx;
|
|
46
|
+
color: #171a24;
|
|
47
|
+
font-size: 30rpx;
|
|
48
|
+
font-weight: 600;
|
|
167
49
|
}
|
|
168
50
|
|
|
169
|
-
&
|
|
170
|
-
flex: 1;
|
|
51
|
+
&__list {
|
|
171
52
|
display: flex;
|
|
172
53
|
flex-direction: column;
|
|
173
|
-
|
|
174
|
-
z-index: 2;
|
|
175
|
-
min-width: 0;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
&__title {
|
|
179
|
-
font-size: 28rpx;
|
|
180
|
-
font-weight: 600;
|
|
181
|
-
color: #ffffff;
|
|
182
|
-
margin-bottom: var(--space-xs);
|
|
183
|
-
display: block;
|
|
184
|
-
text-shadow: 0 1rpx 4rpx rgba(0, 0, 0, 0.3);
|
|
185
|
-
letter-spacing: 0.5rpx;
|
|
54
|
+
gap: 16rpx;
|
|
186
55
|
}
|
|
187
56
|
|
|
188
|
-
&
|
|
189
|
-
font-size: 20rpx;
|
|
190
|
-
color: rgba(255, 255, 255, 0.8);
|
|
191
|
-
line-height: 1.4;
|
|
57
|
+
&__item {
|
|
192
58
|
display: block;
|
|
193
|
-
|
|
194
|
-
|
|
59
|
+
color: #3c4252;
|
|
60
|
+
font-size: 24rpx;
|
|
61
|
+
line-height: 1.5;
|
|
195
62
|
}
|
|
196
|
-
|
|
197
|
-
}
|
|
63
|
+
}
|
|
@@ -1,87 +1,32 @@
|
|
|
1
|
-
import { definePage } from '@doubao-apps/framework';
|
|
2
|
-
|
|
1
|
+
import { definePage, getViewData } from '@doubao-apps/framework';
|
|
3
2
|
import './index.scss';
|
|
4
3
|
|
|
5
|
-
interface
|
|
6
|
-
title
|
|
7
|
-
description
|
|
8
|
-
icon: string;
|
|
9
|
-
gradient?: string;
|
|
10
|
-
onTap: () => void;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
function Card({ title, description, icon, gradient, onTap }: CardProps) {
|
|
14
|
-
return (
|
|
15
|
-
<view className="card" bindtap={onTap}>
|
|
16
|
-
<view className="card__inner" style={gradient ? { background: gradient } : {}}>
|
|
17
|
-
<view className="card__icon-wrapper">
|
|
18
|
-
<text className="card__icon">{icon}</text>
|
|
19
|
-
</view>
|
|
20
|
-
<view className="card__content">
|
|
21
|
-
<text className="card__title">{title}</text>
|
|
22
|
-
<text className="card__description">{description}</text>
|
|
23
|
-
</view>
|
|
24
|
-
<view className="card__glow" />
|
|
25
|
-
</view>
|
|
26
|
-
</view>
|
|
27
|
-
);
|
|
4
|
+
interface HomePageData {
|
|
5
|
+
title?: string;
|
|
6
|
+
description?: string;
|
|
28
7
|
}
|
|
29
8
|
|
|
30
9
|
function HomePage() {
|
|
31
|
-
const
|
|
32
|
-
console.log('Navigate to React Lynx');
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
const handleNavigateToLynx = () => {
|
|
36
|
-
console.log('Navigate to Lynx');
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
const handleNavigateToApplet = () => {
|
|
40
|
-
console.log('Navigate to Applet');
|
|
41
|
-
};
|
|
10
|
+
const viewData = getViewData<HomePageData>();
|
|
42
11
|
|
|
43
12
|
return (
|
|
44
|
-
<view className="home">
|
|
45
|
-
<view className="
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
<
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
<text className="home__title">Doubao Apps SDK</text>
|
|
53
|
-
<text className="home__subtitle">豆包小程序开发框架</text>
|
|
54
|
-
<view className="home__divider" />
|
|
55
|
-
</view>
|
|
56
|
-
|
|
57
|
-
<view className="home__list">
|
|
58
|
-
<Card
|
|
59
|
-
title="React Lynx"
|
|
60
|
-
description="现代化的 React UI 开发框架,基于 Lynx 渲染引擎,提供熟悉的 React 开发体验"
|
|
61
|
-
icon="⚛️"
|
|
62
|
-
gradient="linear-gradient(135deg, #667eea 0%, #764ba2 100%)"
|
|
63
|
-
onTap={handleNavigateToReactLynx}
|
|
64
|
-
/>
|
|
65
|
-
<Card
|
|
66
|
-
title="Lynx"
|
|
67
|
-
description="高性能跨平台渲染引擎,提供原生级别的渲染性能和流畅体验"
|
|
68
|
-
icon="🚀"
|
|
69
|
-
gradient="linear-gradient(135deg, #f093fb 0%, #f5576c 100%)"
|
|
70
|
-
onTap={handleNavigateToLynx}
|
|
71
|
-
/>
|
|
72
|
-
<Card
|
|
73
|
-
title="Applet"
|
|
74
|
-
description="小程序运行环境,提供完整的小程序开发、构建、部署能力"
|
|
75
|
-
icon="📱"
|
|
76
|
-
gradient="linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)"
|
|
77
|
-
onTap={handleNavigateToApplet}
|
|
78
|
-
/>
|
|
79
|
-
</view>
|
|
13
|
+
<view className="home-page">
|
|
14
|
+
<view className="home-page__header">
|
|
15
|
+
<text className="home-page__eyebrow">Doubao Apps SDK</text>
|
|
16
|
+
<text className="home-page__title">{viewData.title || '欢迎使用豆包应用'}</text>
|
|
17
|
+
<text className="home-page__description">
|
|
18
|
+
{viewData.description || '这是 starter 模板中的首页,你可以从这里开始开发 Page 和 Widget。'}
|
|
19
|
+
</text>
|
|
20
|
+
</view>
|
|
80
21
|
|
|
81
|
-
|
|
82
|
-
|
|
22
|
+
<view className="home-page__section">
|
|
23
|
+
<text className="home-page__section-title">下一步</text>
|
|
24
|
+
<view className="home-page__list">
|
|
25
|
+
<text className="home-page__item">1. 编辑 src/pages/home/index.tsx 创建页面内容</text>
|
|
26
|
+
<text className="home-page__item">2. 编辑 src/widgets/hello-world/index.tsx 创建卡片内容</text>
|
|
27
|
+
<text className="home-page__item">3. 在 src/app.config.ts 中维护入口和 metadata</text>
|
|
83
28
|
</view>
|
|
84
|
-
</
|
|
29
|
+
</view>
|
|
85
30
|
</view>
|
|
86
31
|
);
|
|
87
32
|
}
|
|
@@ -90,9 +35,6 @@ export default definePage({
|
|
|
90
35
|
onShow() {
|
|
91
36
|
console.log('Home page shown');
|
|
92
37
|
},
|
|
93
|
-
onHide() {
|
|
94
|
-
console.log('Home page hidden');
|
|
95
|
-
},
|
|
96
38
|
render() {
|
|
97
39
|
return <HomePage />;
|
|
98
40
|
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
.hello-world-widget {
|
|
2
|
+
padding: 28rpx;
|
|
3
|
+
border: 1rpx solid #dfe3ef;
|
|
4
|
+
border-radius: 16rpx;
|
|
5
|
+
background: #ffffff;
|
|
6
|
+
color: #171a24;
|
|
7
|
+
|
|
8
|
+
&__title {
|
|
9
|
+
display: block;
|
|
10
|
+
margin-bottom: 12rpx;
|
|
11
|
+
color: #171a24;
|
|
12
|
+
font-size: 32rpx;
|
|
13
|
+
font-weight: 700;
|
|
14
|
+
line-height: 1.3;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
&__message {
|
|
18
|
+
display: block;
|
|
19
|
+
color: #5d6475;
|
|
20
|
+
font-size: 24rpx;
|
|
21
|
+
line-height: 1.5;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { defineWidget, getViewData } from '@doubao-apps/framework';
|
|
2
|
+
import './index.scss';
|
|
3
|
+
|
|
4
|
+
interface HelloWorldData {
|
|
5
|
+
title?: string;
|
|
6
|
+
message?: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function HelloWorldWidget() {
|
|
10
|
+
const viewData = getViewData<HelloWorldData>();
|
|
11
|
+
|
|
12
|
+
return (
|
|
13
|
+
<view className="hello-world-widget">
|
|
14
|
+
<text className="hello-world-widget__title">{viewData.title || 'Hello World'}</text>
|
|
15
|
+
<text className="hello-world-widget__message">
|
|
16
|
+
{viewData.message || '这是 starter 模板中的示例卡片。'}
|
|
17
|
+
</text>
|
|
18
|
+
</view>
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export default defineWidget({
|
|
23
|
+
onShow() {
|
|
24
|
+
console.log('Hello World widget shown');
|
|
25
|
+
},
|
|
26
|
+
render() {
|
|
27
|
+
return <HelloWorldWidget />;
|
|
28
|
+
}
|
|
29
|
+
});
|