@doubao-dev/plugin-app-dev 0.0.0-stage → 0.0.40-canary-dea0ddc73-20261026073950

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 (107) hide show
  1. package/README.md +10 -2
  2. package/dist/147.js +9 -0
  3. package/dist/assets.d.ts +5 -0
  4. package/dist/assets.js +4 -0
  5. package/dist/index.d.ts +43 -0
  6. package/dist/index.js +1378 -0
  7. package/dist/plugin.d.ts +102 -0
  8. package/dist/plugin.js +4995 -0
  9. package/dist/preview.js +16 -0
  10. package/dist/rslib-runtime.js +33 -0
  11. package/dist/skills/doubao-plugin-app/SKILL.md +21 -0
  12. package/dist/skills/doubao-plugin-app/references/app-development.md +85 -0
  13. package/dist/skills/doubao-plugin-app/references/frontend/components/container-overlay.md +131 -0
  14. package/dist/skills/doubao-plugin-app/references/frontend/components/form-controls.md +146 -0
  15. package/dist/skills/doubao-plugin-app/references/frontend/components/interactive-controls.md +120 -0
  16. package/dist/skills/doubao-plugin-app/references/frontend/components/map-canvas.md +107 -0
  17. package/dist/skills/doubao-plugin-app/references/frontend/components/overview.md +43 -0
  18. package/dist/skills/doubao-plugin-app/references/frontend/components/scroll-list.md +149 -0
  19. package/dist/skills/doubao-plugin-app/references/frontend/components/text-media.md +209 -0
  20. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/01-/345/237/272/347/241/200.md +1389 -0
  21. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/02-/347/263/273/347/273/237.md +1376 -0
  22. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/03-/350/207/252/345/256/232/344/271/211/351/200/232/344/277/241.md +127 -0
  23. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/04-/345/256/232/344/275/215.md +784 -0
  24. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/05-/345/255/230/345/202/250.md +1176 -0
  25. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/06-/350/267/257/347/224/261.md +839 -0
  26. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/07-/347/225/214/351/235/242.md +376 -0
  27. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/08-/344/272/244/344/272/222.md +1319 -0
  28. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/09-/350/276/223/345/205/245.md +192 -0
  29. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/10-/347/275/221/347/273/234.md +900 -0
  30. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/11-/345/252/222/344/275/223.md +1496 -0
  31. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/12-/344/270/232/345/212/241/350/203/275/345/212/233.md +1281 -0
  32. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/13-/347/231/273/345/275/225.md +511 -0
  33. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/14-/346/224/257/344/273/230.md +943 -0
  34. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/15-/346/225/260/346/215/256/345/210/206/346/236/220.md +124 -0
  35. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/16-/350/223/235/347/211/231.md +3364 -0
  36. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/17-wi-fi.md +1028 -0
  37. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/18-/345/212/240/351/200/237/345/272/246/350/256/241.md +354 -0
  38. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/19-ibeacon.md +508 -0
  39. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/20-/347/275/227/347/233/230.md +320 -0
  40. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/21-/350/256/276/345/244/207/346/226/271/345/220/221.md +351 -0
  41. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/22-/351/231/200/350/236/272/344/273/252.md +354 -0
  42. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/23-/345/252/222/344/275/223-/350/256/276/345/244/207-/347/275/221/347/273/234.md +264 -0
  43. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/24-/347/237/255/344/277/241.md +155 -0
  44. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/25-/346/227/240/351/232/234/347/242/215.md +144 -0
  45. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/26-/345/237/272/347/241/200/344/277/241/346/201/257.md +238 -0
  46. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/27-/347/224/265/346/261/240.md +235 -0
  47. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/28-/345/211/252/350/264/264/346/235/277.md +303 -0
  48. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/29-/345/212/240/345/257/206.md +126 -0
  49. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/30-/346/227/245/345/216/206.md +417 -0
  50. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/31-/347/224/265/350/257/235.md +144 -0
  51. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/32-/346/211/253/347/240/201.md +236 -0
  52. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/33-/345/261/217/345/271/225.md +747 -0
  53. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/34-/351/234/207/345/212/250.md +277 -0
  54. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/35-/346/226/207/344/273/266/347/263/273/347/273/237.md +431 -0
  55. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/common-errors.md +69 -0
  56. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/groups.md +43 -0
  57. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/quick-reference.md +436 -0
  58. package/dist/skills/doubao-plugin-app/references/frontend/examples/common-patterns.md +590 -0
  59. package/dist/skills/doubao-plugin-app/references/frontend/examples/doubao-agentic-service-api-recipes.md +209 -0
  60. package/dist/skills/doubao-plugin-app/references/frontend/examples/page-widget-basics.md +368 -0
  61. package/dist/skills/doubao-plugin-app/references/frontend/examples/page-widget-recipes.md +65 -0
  62. package/dist/skills/doubao-plugin-app/references/frontend/framework/core.md +283 -0
  63. package/dist/skills/doubao-plugin-app/references/frontend/guides/auth.md +277 -0
  64. package/dist/skills/doubao-plugin-app/references/frontend/guides/best-practices.md +574 -0
  65. package/dist/skills/doubao-plugin-app/references/frontend/guides/client-tools-and-events.md +209 -0
  66. package/dist/skills/doubao-plugin-app/references/frontend/guides/component-development.md +832 -0
  67. package/dist/skills/doubao-plugin-app/references/frontend/guides/debugger-mcp.md +537 -0
  68. package/dist/skills/doubao-plugin-app/references/frontend/guides/expired-widget.md +101 -0
  69. package/dist/skills/doubao-plugin-app/references/frontend/guides/performance-optimization.md +417 -0
  70. package/dist/skills/doubao-plugin-app/references/frontend/guides/troubleshooting.md +278 -0
  71. package/dist/skills/doubao-plugin-app/references/frontend/lynx/best-practices.md +720 -0
  72. package/dist/skills/doubao-plugin-app/references/frontend/lynx/css/pseudo-classes.md +149 -0
  73. package/dist/skills/doubao-plugin-app/references/frontend/lynx/css/selectors.md +224 -0
  74. package/dist/skills/doubao-plugin-app/references/frontend/lynx/css/supported-properties.md +269 -0
  75. package/dist/skills/doubao-plugin-app/references/frontend/lynx/css/values-and-units.md +314 -0
  76. package/dist/skills/doubao-plugin-app/references/frontend/lynx/layout/flex-layout.md +334 -0
  77. package/dist/skills/doubao-plugin-app/references/frontend/lynx/layout/grid-layout.md +408 -0
  78. package/dist/skills/doubao-plugin-app/references/frontend/lynx/layout/linear-layout.md +355 -0
  79. package/dist/skills/doubao-plugin-app/references/frontend/lynx/layout/relative-layout.md +189 -0
  80. package/dist/skills/doubao-plugin-app/references/frontend/lynx/lynx-vs-web/css-differences.md +737 -0
  81. package/dist/skills/doubao-plugin-app/references/frontend/lynx/lynx-vs-web/migration-guide.md +669 -0
  82. package/dist/skills/doubao-plugin-app/references/frontend/lynx/lynx-vs-web/unsupported-features.md +290 -0
  83. package/dist/skills/doubao-plugin-app/references/frontend/lynx/overview.md +60 -0
  84. package/dist/skills/doubao-plugin-app/references/frontend/lynx/patterns/animation.md +243 -0
  85. package/dist/skills/doubao-plugin-app/references/frontend/lynx/patterns/responsive.md +194 -0
  86. package/dist/skills/doubao-plugin-app/references/frontend/lynx/patterns/theming.md +143 -0
  87. package/dist/skills/doubao-plugin-app/references/frontend/lynx/quick-reference.md +229 -0
  88. package/dist/skills/doubao-plugin-app/references/frontend/rules/dos-and-donts.md +479 -0
  89. package/dist/skills/doubao-plugin-app/references/frontend/widget-templates/design-boundary.md +46 -0
  90. package/dist/skills/doubao-plugin-app/references/frontend/widget-templates/overview.md +118 -0
  91. package/dist/skills/doubao-plugin-app/references/frontend/widget-templates/props.md +301 -0
  92. package/dist/skills/doubao-plugin-app/references/mcp-and-cards.md +38 -0
  93. package/dist/templates/README.md.template +11 -0
  94. package/dist/templates/com.doubao/app/manifest.yaml +41 -0
  95. package/dist/templates/com.doubao/app/package.json.template +13 -0
  96. package/dist/templates/com.doubao/app/src/app.config.ts.template +5 -0
  97. package/dist/templates/com.doubao/app/src/app.ts.template +3 -0
  98. package/dist/templates/com.doubao/app/src/pages/home/index.css +14 -0
  99. package/dist/templates/com.doubao/app/src/pages/home/index.tsx.template +14 -0
  100. package/dist/templates/com.doubao/app/src/widgets/example/index.tsx.template +29 -0
  101. package/dist/templates/com.doubao/app/tsconfig.json +19 -0
  102. package/dist/templates/mcp.json +9 -0
  103. package/dist/templates/plugin.json.template +29 -0
  104. package/dist/templates/skills/example/SKILL.md.template +14 -0
  105. package/dist/upload.d.ts +44 -0
  106. package/dist/upload.js +38 -0
  107. package/package.json +60 -3
@@ -0,0 +1,194 @@
1
+ # 响应式设计
2
+
3
+ 在 Lynx 中实现响应式布局。
4
+
5
+ ## 使用 rem + vw 自动适配(推荐)
6
+
7
+ > **推荐方案**:使用 `rem` 配合 `vw` 设置根字体大小。`rpx` 是 Lynx 特有单位,功能完整但缺乏 Web 兼容性。
8
+
9
+ ```css
10
+ /* 在根元素设置基准字体大小 */
11
+ page {
12
+ font-size: calc(100vw / 23.4375); /* 1rem = 16px @ 375px 宽度 */
13
+ }
14
+
15
+ /* 使用 rem 进行屏幕适配 */
16
+ .container {
17
+ width: 100%; /* 全宽 */
18
+ padding: 2rem; /* 左右各 2rem ≈ 32px @ 375px */
19
+ }
20
+
21
+ .card {
22
+ width: 21.4rem; /* 约一半宽度,减去间距 */
23
+ margin-bottom: 1.5rem;
24
+ }
25
+
26
+ /* 字体大小 */
27
+ .title {
28
+ font-size: 2.25rem; /* 约 18px @ 375px 屏幕 */
29
+ }
30
+
31
+ .body {
32
+ font-size: 1.75rem; /* 约 14px @ 375px 屏幕 */
33
+ }
34
+ ```
35
+
36
+ ## 使用视口单位(vw/vh)
37
+
38
+ ⚠️ **注意**:Lynx **不支持** CSS `@media` 媒体查询。请使用视口单位实现流式布局。
39
+
40
+ ```css
41
+ /* 使用 vw 代替 @media */
42
+ .container {
43
+ display: flex;
44
+ flex-direction: column;
45
+ padding: 4vw; /* 随视口宽度自动调整 */
46
+ }
47
+
48
+ /* 大屏幕优化 */
49
+ .sidebar {
50
+ width: 26vw; /* 约 200px @ 768px 宽度 */
51
+ }
52
+
53
+ .main {
54
+ flex: 1;
55
+ }
56
+ ```
57
+
58
+ ## 响应式网格
59
+
60
+ 使用 Grid 布局配合百分比或 vw 单位:
61
+
62
+ ```css
63
+ .grid {
64
+ display: grid;
65
+ gap: 16px;
66
+ grid-template-columns: 1fr; /* 移动端:1列 */
67
+ }
68
+
69
+ /* 使用 CSS 变量 + 容器查询思路(如果支持) */
70
+ ```
71
+
72
+ ## Flex 响应式布局
73
+
74
+ ```css
75
+ .flex-container {
76
+ display: flex;
77
+ flex-wrap: wrap;
78
+ gap: 16px;
79
+ }
80
+
81
+ .flex-item {
82
+ flex: 1 1 40vw; /* 随视口宽度自动调整 */
83
+ }
84
+ ```
85
+
86
+ ## 安全区域适配
87
+
88
+ ```css
89
+ /* iPhone 刘海屏适配 */
90
+ .safe-area {
91
+ padding-top: env(safe-area-inset-top);
92
+ padding-bottom: env(safe-area-inset-bottom);
93
+ padding-left: env(safe-area-inset-left);
94
+ padding-right: env(safe-area-inset-right);
95
+ }
96
+
97
+ /* 底部固定按钮 */
98
+ .fixed-bottom {
99
+ position: fixed;
100
+ bottom: 0;
101
+ left: 0;
102
+ right: 0;
103
+ padding-bottom: env(safe-area-inset-bottom);
104
+ background-color: #fff;
105
+ }
106
+ ```
107
+
108
+ ## JavaScript 动态响应式
109
+
110
+ 使用 JavaScript 监听视口变化并动态调整样式:
111
+
112
+ ```javascript
113
+ // 获取视口尺寸
114
+ const viewportWidth = window.screen.width || 375;
115
+ const viewportHeight = window.screen.height || 667;
116
+
117
+ // 根据视口宽度决定布局
118
+ function getLayoutClass(width) {
119
+ if (width >= 1024) return 'desktop-layout';
120
+ if (width >= 768) return 'tablet-layout';
121
+ return 'mobile-layout';
122
+ }
123
+
124
+ // 应用到组件
125
+ const layoutClass = getLayoutClass(viewportWidth);
126
+ ```
127
+
128
+ 配合条件渲染:
129
+
130
+ ```jsx
131
+ <view className={isTablet ? 'tablet-layout' : 'mobile-layout'}>
132
+ {isTablet ? <Sidebar /> : null}
133
+ <MainContent />
134
+ </view>
135
+ ```
136
+
137
+ ```css
138
+ .tablet-layout {
139
+ display: flex;
140
+ flex-direction: row;
141
+ }
142
+
143
+ .mobile-layout {
144
+ display: flex;
145
+ flex-direction: column;
146
+ }
147
+ ```
148
+
149
+ ## 响应式最佳实践
150
+
151
+ 1. **移动优先**: 先写移动端样式,再用 JavaScript 动态调整
152
+ 2. **使用 rem**: 优先使用 rem 进行屏幕适配(配合 vw 设置根字体大小)
153
+ 3. **使用视口单位**: 使用 vw/vh 实现流式布局
154
+ 4. **断点选择**(JavaScript 中处理):
155
+ - 320px - 小屏手机
156
+ - 375px - iPhone 标准
157
+ - 414px - iPhone Plus
158
+ - 768px - iPad 竖屏
159
+ - 1024px - iPad 横屏
160
+ 5. **测试**: 在多种设备上测试
161
+
162
+ ## 常见陷阱
163
+
164
+ ### ❌ 不要使用 @media
165
+
166
+ ```css
167
+ /* ❌ 不支持 - 不会生效 */
168
+ @media (min-width: 768px) {
169
+ .container {
170
+ flex-direction: row;
171
+ }
172
+ }
173
+ ```
174
+
175
+ ### ✅ 使用替代方案
176
+
177
+ ```css
178
+ /* ✅ 使用 rem 和视口单位 */
179
+ .container {
180
+ display: flex;
181
+ flex-direction: column;
182
+ padding: 4vw;
183
+ }
184
+
185
+ /* 在根元素设置基准字体大小 */
186
+ page {
187
+ font-size: calc(100vw / 23.4375); /* 1rem = 16px @ 375px 宽度 */
188
+ }
189
+ ```
190
+
191
+ ```javascript
192
+ // ✅ 使用 JavaScript 动态调整
193
+ const isWide = viewportWidth >= 768;
194
+ ```
@@ -0,0 +1,143 @@
1
+ # 主题和 CSS 变量
2
+
3
+ 使用 CSS 变量实现主题切换。
4
+
5
+ ## 定义 CSS 变量
6
+
7
+ ```css
8
+ /* 默认主题(亮色) */
9
+ :root {
10
+ /* 颜色 */
11
+ --color-primary: #ff351a;
12
+ --color-secondary: #00ebeb;
13
+ --color-background: #ffffff;
14
+ --color-surface: #f5f5f5;
15
+ --color-text: #333333;
16
+ --color-text-secondary: #666666;
17
+ --color-border: #e0e0e0;
18
+
19
+ /* 间距 */
20
+ --spacing-xs: 4px;
21
+ --spacing-sm: 8px;
22
+ --spacing-md: 16px;
23
+ --spacing-lg: 24px;
24
+ --spacing-xl: 32px;
25
+
26
+ /* 字体 */
27
+ --font-size-xs: 10px;
28
+ --font-size-sm: 12px;
29
+ --font-size-md: 14px;
30
+ --font-size-lg: 16px;
31
+ --font-size-xl: 18px;
32
+ --font-size-xxl: 24px;
33
+
34
+ /* 圆角 */
35
+ --radius-sm: 4px;
36
+ --radius-md: 8px;
37
+ --radius-lg: 12px;
38
+ --radius-round: 50%;
39
+
40
+ /* 阴影 */
41
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
42
+ --shadow-md: 0 2px 4px rgba(0, 0, 0, 0.1);
43
+ --shadow-lg: 0 4px 8px rgba(0, 0, 0, 0.15);
44
+ }
45
+ ```
46
+
47
+ ## 暗色主题
48
+
49
+ ```css
50
+ /* 暗色主题 */
51
+ [data-theme='dark'] {
52
+ --color-primary: #ff5c45;
53
+ --color-secondary: #33eeee;
54
+ --color-background: #1a1a2e;
55
+ --color-surface: #252540;
56
+ --color-text: #ffffff;
57
+ --color-text-secondary: #a0a0a0;
58
+ --color-border: #33334d;
59
+
60
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
61
+ --shadow-md: 0 2px 4px rgba(0, 0, 0, 0.4);
62
+ --shadow-lg: 0 4px 8px rgba(0, 0, 0, 0.5);
63
+ }
64
+ ```
65
+
66
+ ## 使用 CSS 变量
67
+
68
+ ```css
69
+ /* 组件样式 */
70
+ .button {
71
+ padding: var(--spacing-sm) var(--spacing-md);
72
+ background-color: var(--color-primary);
73
+ color: #ffffff;
74
+ border-radius: var(--radius-md);
75
+ font-size: var(--font-size-md);
76
+ box-shadow: var(--shadow-sm);
77
+ }
78
+
79
+ .button-secondary {
80
+ background-color: var(--color-secondary);
81
+ }
82
+
83
+ .card {
84
+ background-color: var(--color-surface);
85
+ border: 1px solid var(--color-border);
86
+ border-radius: var(--radius-lg);
87
+ padding: var(--spacing-md);
88
+ }
89
+
90
+ .title {
91
+ color: var(--color-text);
92
+ font-size: var(--font-size-xl);
93
+ }
94
+
95
+ .description {
96
+ color: var(--color-text-secondary);
97
+ font-size: var(--font-size-md);
98
+ }
99
+ ```
100
+
101
+ ## 在 Lynx 中切换主题
102
+
103
+ ```jsx
104
+ // ThemeProvider.jsx
105
+ import { useState, useEffect } from '@lynx-js/react';
106
+
107
+ export function ThemeProvider({ children }) {
108
+ const [theme, setTheme] = useState('light');
109
+
110
+ useEffect(() => {
111
+ // 设置主题属性
112
+ document.documentElement.setAttribute('data-theme', theme);
113
+ }, [theme]);
114
+
115
+ const toggleTheme = () => {
116
+ setTheme((prev) => (prev === 'light' ? 'dark' : 'light'));
117
+ };
118
+
119
+ return (
120
+ <view className={`theme-wrapper ${theme}`}>
121
+ {children}
122
+ <view className="theme-toggle" bindtap={toggleTheme}>
123
+ <text>{theme === 'light' ? '🌙' : '☀️'}</text>
124
+ </view>
125
+ </view>
126
+ );
127
+ }
128
+ ```
129
+
130
+ ## 最佳实践
131
+
132
+ 1. **命名规范**: 使用 `--category-property` 格式
133
+ 2. **分层定义**: 颜色、间距、字体分开定义
134
+ 3. **语义化**: 使用 `--color-primary` 而非 `--color-red`
135
+ 4. **默认值**: 始终提供默认值 `var(--prop, default)`
136
+
137
+ ```css
138
+ .button {
139
+ /* 提供默认值 */
140
+ color: var(--button-color, var(--color-primary));
141
+ padding: var(--button-padding, var(--spacing-md));
142
+ }
143
+ ```
@@ -0,0 +1,229 @@
1
+ # Lynx CSS Quick Reference
2
+
3
+ Quick reference for the most commonly used Lynx CSS and layout system features.
4
+
5
+ ## Layout System Cheat Sheet
6
+
7
+ | Scenario | Recommended Display | Description |
8
+ | ---------------------------------- | ------------------- | -------------------------------------- |
9
+ | Simple list (performance priority) | `linear` | Default layout, similar to Flex Column |
10
+ | Flexible layout | `flex` | Standard CSS Flexbox |
11
+ | 2D grid | `grid` | CSS Grid subset |
12
+ | Relative positioning | `relative` | Android-style relative positioning |
13
+
14
+ ## Display Types
15
+
16
+ | Value | Description | Version |
17
+ | ---------- | --------------------------------- | ------- |
18
+ | `none` | Hide element | 1.0 |
19
+ | `flex` | Flexbox layout | 1.0 |
20
+ | `grid` | Grid layout | 1.0 |
21
+ | `linear` | Linear layout (default) | 1.0 |
22
+ | `relative` | Relative layout | 2.0 |
23
+ | `block` | Block layout (falls back to Flex) | 2.0 |
24
+ | `auto` | Automatic selection | 2.0 |
25
+
26
+ ## Supported CSS Properties (Common)
27
+
28
+ ### Box Model
29
+
30
+ ```css
31
+ width, height, min-width, min-height, max-width, max-height
32
+ margin, margin-top, margin-right, margin-bottom, margin-left
33
+ padding, padding-top, padding-right, padding-bottom, padding-left
34
+ border, border-radius
35
+ box-sizing (default: auto)
36
+ ```
37
+
38
+ ### Flex Layout
39
+
40
+ ```css
41
+ display: flex
42
+ flex-direction: row | column | row-reverse | column-reverse
43
+ flex-wrap: wrap | nowrap | wrap-reverse
44
+ flex-flow: <direction> <wrap> /* shorthand */
45
+ justify-content: flex-start | center | flex-end | space-between | space-around | space-evenly | stretch /* stretch: 2.1+ */
46
+ align-items: flex-start | center | flex-end | stretch | baseline
47
+ align-self: auto | flex-start | center | flex-end | stretch | baseline
48
+ flex-grow, flex-shrink, flex-basis
49
+ flex: <grow> <shrink> <basis> /* shorthand */
50
+ order
51
+ gap, row-gap, column-gap
52
+ ```
53
+
54
+ ### Grid Layout (Subset)
55
+
56
+ ```css
57
+ display: grid
58
+ grid-template-columns, grid-template-rows
59
+ grid-auto-columns, grid-auto-rows
60
+ grid-column-start, grid-column-end
61
+ grid-row-start, grid-row-end
62
+ grid-column-span, grid-row-span
63
+ gap, row-gap, column-gap
64
+ grid-auto-flow: row | column | dense | row dense | column dense
65
+ justify-items, justify-self
66
+ align-items, align-self /* 注意:使用 flex-start/flex-end 而非 start/end */
67
+ ```
68
+
69
+ > ⚠️ **注意**: Lynx 不支持 `grid-column`、`grid-row`、`grid-area` 简写属性。请使用 `*-start/*-end` 替代。
70
+
71
+ ### Linear Layout (Lynx-Specific)
72
+
73
+ ```css
74
+ display: linear
75
+ linear-orientation: horizontal | vertical | row | column | row-reverse | column-reverse
76
+ linear-direction: row | column | row-reverse | column-reverse /* 2.2+ */
77
+ linear-gravity: top | bottom | left | right | center | center-vertical | center-horizontal | start | end | space-between
78
+ linear-layout-gravity: none | top | bottom | left | right | center | fill-vertical | fill-horizontal | stretch
79
+ linear-cross-gravity: none | start | end | center | stretch
80
+ linear-weight: <number>
81
+ linear-weight-sum: <number>
82
+ ```
83
+
84
+ ### Relative Layout (Lynx-Specific)
85
+
86
+ ```css
87
+ display: relative
88
+ relative-id: <number>
89
+ relative-align-top: <id> | parent
90
+ relative-align-bottom: <id> | parent
91
+ relative-align-left: <id> | parent
92
+ relative-align-right: <id> | parent
93
+ relative-align-inline-start: <id> | parent /* RTL support */
94
+ relative-align-inline-end: <id> | parent /* RTL support */
95
+ relative-top-of: <id>
96
+ relative-bottom-of: <id>
97
+ relative-left-of: <id>
98
+ relative-right-of: <id>
99
+ relative-inline-start-of: <id> /* RTL support */
100
+ relative-inline-end-of: <id> /* RTL support */
101
+ relative-center: none | vertical | horizontal | both
102
+ ```
103
+
104
+ ### Positioning
105
+
106
+ ```css
107
+ position: relative | absolute | fixed | sticky top, right, bottom, left
108
+ inset-inline-start, inset-inline-end /* RTL support */ z-index;
109
+ ```
110
+
111
+ > **⚠️ z-index Note**: In scrollable containers like `scroll-view` and `fold-view`, child elements with `z-index` may not follow scroll. **Solution**: Add `z-index: 0` to the parent container to establish the same stacking context.
112
+
113
+ ### Visual
114
+
115
+ ```css
116
+ background, background-color, background-image
117
+ background-size, background-position, background-repeat
118
+ opacity
119
+ transform: translate, scale, rotate
120
+ ```
121
+
122
+ ### Text
123
+
124
+ ```css
125
+ color, font-size, font-weight, font-family, font-style
126
+ line-height, text-align, text-decoration
127
+ white-space: normal | nowrap
128
+ text-overflow: clip | ellipsis
129
+ ```
130
+
131
+ ## Lynx vs Web CSS Key Differences
132
+
133
+ | Web CSS | Lynx Support | Notes |
134
+ | ------------------------- | -------------------------------- | ---------------------------------------------------- |
135
+ | `display: block` | ✅ Supported (2.0+) | Falls back to Flex/Linear |
136
+ | `display: inline` | ❌ Not supported | Use `<text>` component |
137
+ | `display: inline-block` | ❌ Not supported | Use Flex/Grid |
138
+ | `float` | ❌ Not supported | Use Flex/Grid |
139
+ | `position: static` | ❌ Not supported | Use `position: relative` |
140
+ | `box-sizing: content-box` | ⚠️ Supported but not default | Default is `border-box` (Web default is `content-box`) |
141
+ | `min-content` | ⚠️ Partial support | Treated as 0px in flex-basis |
142
+ | `max-content` | ✅ Supported | Available |
143
+ | `fit-content` | ✅ Supported | Available |
144
+ | Margin collapsing | ❌ Not supported | Margins do not collapse |
145
+
146
+ ## Selector Support
147
+
148
+ ### Fully Supported (Parsed + Matched)
149
+
150
+ ```
151
+ ✅ Tag selectors: view, text, image
152
+ ✅ Class selectors: .class-name
153
+ ✅ ID selectors: #id-name
154
+ ✅ Descendant selectors: .parent .child
155
+ ✅ Child selectors: .parent > .child
156
+ ✅ Adjacent sibling: .prev + .next
157
+ ✅ General sibling: .prev ~ .sibling
158
+ ✅ Attribute selectors: [type="text"]
159
+ ✅ Pseudo-classes: :hover, :active, :focus, :not(), :root
160
+ ✅ Pseudo-elements: ::placeholder, ::selection
161
+ ```
162
+
163
+ ### Not Supported (Parsed but NOT Matched)
164
+
165
+ ```
166
+ ❌ Structural pseudo-classes: :first-child, :last-child, :nth-child()
167
+ ❌ Pseudo-elements: ::before, ::after
168
+ ```
169
+
170
+ > **Note:** These selectors are recognized by the CSS parser but lack matching implementation in the selector engine. They will not apply styles.
171
+
172
+ ## Unit Support
173
+
174
+ ```
175
+ ✅ px - Pixels
176
+ ✅ % - Percentage
177
+ ✅ vw, vh - Viewport units
178
+ ✅ rem - Root element font size (recommended for responsive)
179
+ ✅ em - Relative font units
180
+ ⚠️ rpx - Responsive pixels (Lynx-specific, lacks web compatibility)
181
+ ❌ cm, mm, in, pt, pc - Physical units not supported
182
+ ```
183
+
184
+ **Responsive Adaptation (Recommended)**:
185
+
186
+ ```css
187
+ /* Set base font size on root element */
188
+ page {
189
+ font-size: calc(100vw / 23.4375); /* 1rem = 16px @ 375px */
190
+ }
191
+
192
+ /* Use rem for responsive sizing */
193
+ .container {
194
+ padding: 2rem;
195
+ font-size: 1rem;
196
+ }
197
+ ```
198
+
199
+ ## CSS Function Support
200
+
201
+ ### calc() - Partial Support
202
+
203
+ - ✅ **Supported in:** Length properties (width, height, margin, padding, flex-basis, etc.)
204
+ - ❌ **Not supported in:** Enum properties (flex-direction, justify-content, align-items, etc.), colors, or numbers
205
+
206
+ Example:
207
+
208
+ ```css
209
+ /* ✅ Works */
210
+ width: calc(100% - 20px);
211
+ margin: calc(var(--spacing) * 2);
212
+
213
+ /* ❌ Does NOT work */
214
+ flex-direction: calc(row); /* Enum property */
215
+ color: calc(#ff0000); /* Color property */
216
+ ```
217
+
218
+ ### var() - Full Support
219
+
220
+ ```css
221
+ /* Works in all properties */
222
+ color: var(--primary-color);
223
+ width: var(--sidebar-width);
224
+ ```
225
+
226
+ ### env() - Partial Support
227
+
228
+ - ✅ **Supported:** `safe-area-inset-*` for notched devices
229
+ - ❌ **Not supported:** Other environment variables