@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.
Files changed (48) hide show
  1. package/dist/421.js +4 -4
  2. package/dist/cli.js +74 -66
  3. package/dist/index.d.ts +1 -2
  4. package/dist/template-empty/README.md +1 -1
  5. package/dist/template-empty/package.json +2 -2
  6. package/dist/template-starter/README.md +48 -169
  7. package/dist/template-starter/package.json +2 -2
  8. package/dist/template-starter/src/app.config.ts +2 -3
  9. package/dist/template-starter/src/pages/home/index.scss +38 -172
  10. package/dist/template-starter/src/pages/home/index.tsx +20 -78
  11. package/dist/template-starter/src/widgets/hello-world/index.scss +23 -0
  12. package/dist/template-starter/src/widgets/hello-world/index.tsx +29 -0
  13. package/package.json +6 -2
  14. package/dist/template-empty/AGENTS.md +0 -299
  15. package/dist/template-empty/references/examples/common-patterns.md +0 -589
  16. package/dist/template-empty/references/examples/component-basics.md +0 -526
  17. package/dist/template-empty/references/guides/best-practices.md +0 -571
  18. package/dist/template-empty/references/guides/component-development.md +0 -891
  19. package/dist/template-empty/references/guides/performance-optimization.md +0 -402
  20. package/dist/template-empty/references/guides/troubleshooting.md +0 -287
  21. package/dist/template-empty/references/reference/components-quick-ref.md +0 -103
  22. package/dist/template-empty/references/reference/framework-api-quick-ref.md +0 -550
  23. package/dist/template-empty/references/reference/open-api/README.md +0 -8
  24. package/dist/template-empty/references/reference/open-api.md +0 -11
  25. package/dist/template-empty/references/rules/dos-and-donts.md +0 -467
  26. package/dist/template-starter/AGENTS.md +0 -299
  27. package/dist/template-starter/debug-scene/render-home-page-full.json +0 -6
  28. package/dist/template-starter/debug-scene/render-home-page.json +0 -5
  29. package/dist/template-starter/debug-scene/render-react-lynx-page-full.json +0 -6
  30. package/dist/template-starter/references/examples/common-patterns.md +0 -589
  31. package/dist/template-starter/references/examples/component-basics.md +0 -526
  32. package/dist/template-starter/references/guides/best-practices.md +0 -571
  33. package/dist/template-starter/references/guides/component-development.md +0 -891
  34. package/dist/template-starter/references/guides/performance-optimization.md +0 -402
  35. package/dist/template-starter/references/guides/troubleshooting.md +0 -287
  36. package/dist/template-starter/references/reference/components-quick-ref.md +0 -103
  37. package/dist/template-starter/references/reference/framework-api-quick-ref.md +0 -550
  38. package/dist/template-starter/references/reference/open-api/README.md +0 -8
  39. package/dist/template-starter/references/reference/open-api.md +0 -11
  40. package/dist/template-starter/references/rules/dos-and-donts.md +0 -467
  41. package/dist/template-starter/src/pages/applet/index.scss +0 -279
  42. package/dist/template-starter/src/pages/applet/index.tsx +0 -78
  43. package/dist/template-starter/src/pages/lynx/index.scss +0 -249
  44. package/dist/template-starter/src/pages/lynx/index.tsx +0 -78
  45. package/dist/template-starter/src/pages/react-lynx/index.scss +0 -335
  46. package/dist/template-starter/src/pages/react-lynx/index.tsx +0 -132
  47. package/dist/template-starter/src/widgets/weather-card/index.scss +0 -272
  48. 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
- ├── src/
48
- ├── app.config.ts # App / Page / Widget metadata
49
- ├── app.ts # 应用生命周期入口
50
- ├── pages/ # 页面组件目录
51
- │ │ └── home/
52
- │ ├── index.tsx
53
- └── index.scss
54
- └── widgets/ # 卡片组件目录
55
- └── hello-world/
56
- │ ├── index.tsx
57
- │ └── index.scss
58
- └── debug-scene/ # 调试场景配置
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
- ### metadata 配置
62
-
63
- 项目中的 App、Page 和 Widget metadata 统一写在 `src/app.config.ts`,`src/app.ts` 和各页面/卡片入口只负责生命周期与渲染逻辑。
64
-
65
- ---
40
+ ## App 配置
66
41
 
67
- ## 🤖 AI 开发支持
42
+ `src/app.config.ts` 默认只声明 App 信息和 Page / Widget 入口。标题、描述、自定义 id 等业务 metadata 按需再补。
68
43
 
69
- 本项目已集成 AI 开发知识库,帮助 AI 工具(Claude、Copilot、Cursor)更好地理解框架并辅助开发。
44
+ ```ts
45
+ import { defineAppConfig } from '@doubao-apps/kit';
70
46
 
71
- ### 📖 知识库文档
72
-
73
- 项目包含以下 AI 友好的文档:
74
-
75
- - **AGENTS.md** - AI Agent 主入口,包含框架概览和导航
76
- - **references/** - 详细开发文档目录
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
- 其中 `doubao-cli skills add <skill1> [skill2...] --agent <agent>` 用于将一个或多个 skills 安装到指定 AI Agent 的 skills 目录中,适合补充项目开发规范、最佳实践和 API 参考。
55
+ 需要页面标题、卡片名称、描述、多级目录或稳定入口顺序时,再把字符串入口改成对象写法。
96
56
 
97
- - `--agent`:指定目标 Agent,例如 `codex`、`cursor`、`claude-code`
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
- ```bash
105
- # 给 Codex 安装 Doubao Apps 开发 skill
106
- doubao-cli skills add doubao-apps-dev --agent codex
61
+ 如果创建时没有选择 AI 支持,或需要给其他 Agent 补装 Skill,可以在当前项目目录执行:
107
62
 
108
- # 一次安装多个 skills
109
- doubao-cli skills add doubao-apps-dev quality-gate --agent claude-code
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-cli skills add doubao-apps-dev --agent claude-code --global
113
- ```
68
+ npx @doubao-apps/ai skills add doubao-apps-dev --agent claude-code --global
114
69
 
115
- 安装后会生成 Agent 对应的 skills 目录,用于提供开发规则、示例和 API 参考。
116
-
117
- #### 2. 高效提问技巧
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
- 1. 查看 **[故障排查指南](./references/guides/troubleshooting.md)**
202
- 2. 查阅 **[AGENTS.md](./AGENTS.md)** 获取完整文档导航
203
- 3. 使用 AI 工具并参考 **系统提示词**配置
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.33"
9
+ "@doubao-apps/framework": "^0.0.34"
10
10
  },
11
11
  "devDependencies": {
12
- "@doubao-apps/kit": "^0.0.33",
12
+ "@doubao-apps/kit": "^0.0.34",
13
13
  "typescript": "6.0.3"
14
14
  },
15
15
  "version": "0.0.16"
@@ -3,7 +3,6 @@ import { defineAppConfig } from '@doubao-apps/kit';
3
3
  export default defineAppConfig({
4
4
  appId: '<%= appId %>',
5
5
  name: '<%= name %>',
6
- pages: [
7
- 'pages/home/index' // 首页入口
8
- ]
6
+ pages: ['pages/home/index'],
7
+ widgets: ['widgets/hello-world/index']
9
8
  });
@@ -1,197 +1,63 @@
1
- :root {
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
- background: var(--primary-bg);
35
- position: relative;
36
-
37
- &__background-pattern {
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
- text-align: center;
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
- &__logo-icon {
68
- font-size: 80rpx;
69
- line-height: 1;
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
- letter-spacing: 2rpx;
79
- text-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.3);
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
- &__subtitle {
83
- font-size: 28rpx;
84
- color: var(--secondary-text);
29
+ &__description {
85
30
  display: block;
86
- font-weight: 400;
87
- letter-spacing: 1rpx;
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
- &__footer {
111
- text-align: center;
112
- padding-top: var(--space-lg);
113
- border-top: 1rpx solid var(--border-color);
36
+ &__section {
37
+ padding: 28rpx;
38
+ border: 1rpx solid #dfe3ef;
39
+ border-radius: 16rpx;
40
+ background: #ffffff;
114
41
  }
115
42
 
116
- &__copyright {
117
- font-size: 20rpx;
118
- color: var(--secondary-text);
43
+ &__section-title {
119
44
  display: block;
120
- opacity: 0.7;
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
- &__content {
170
- flex: 1;
51
+ &__list {
171
52
  display: flex;
172
53
  flex-direction: column;
173
- justify-content: center;
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
- &__description {
189
- font-size: 20rpx;
190
- color: rgba(255, 255, 255, 0.8);
191
- line-height: 1.4;
57
+ &__item {
192
58
  display: block;
193
- font-weight: 400;
194
- text-shadow: 0 1rpx 2rpx rgba(0, 0, 0, 0.3);
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 CardProps {
6
- title: string;
7
- description: string;
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 handleNavigateToReactLynx = () => {
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="home__background-pattern" />
46
-
47
- <scroll-view className="home__container" scroll-orientation="vertical" enable-scroll={true}>
48
- <view className="home__header">
49
- <view className="home__logo">
50
- <text className="home__logo-icon">🔷</text>
51
- </view>
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
- <view className="home__footer">
82
- <text className="home__copyright">© 2024 ByteDance</text>
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
- </scroll-view>
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
+ });