@beppla/tapas-ui 1.0.56 → 1.0.57

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 (36) hide show
  1. package/components/Dropdown/Dropdown.tsx +24 -2
  2. package/components/Dropdown/InputDropdown.tsx +7 -0
  3. package/components/ListItem/ListItem.tsx +16 -0
  4. package/package/CHANGELOG.md +383 -0
  5. package/package/README.md +103 -0
  6. package/package/assets/assets/adaptive-icon.png +0 -0
  7. package/package/assets/assets/favicon.png +0 -0
  8. package/package/assets/assets/fonts/customfont.ttf +0 -0
  9. package/package/assets/assets/icon.png +0 -0
  10. package/package/assets/assets/logo.png +0 -0
  11. package/package/assets/assets/splash.png +0 -0
  12. package/package/assets/assets/svg/customfont.svg +332 -0
  13. package/package/assets/assets/svg/logo.svg +9 -0
  14. package/package/assets/assets/tapas/favicon.png +0 -0
  15. package/package/assets/assets/tapas/logo.png +0 -0
  16. package/package/assets/assets/tapas/logo_no_word.png +0 -0
  17. package/package/assets/assets/tapas/logo_transparent_white.png +0 -0
  18. package/package/commonjs/Dropdown/Dropdown.js +32 -6
  19. package/package/commonjs/Dropdown/Dropdown.js.map +1 -1
  20. package/package/commonjs/Dropdown/InputDropdown.js +7 -1
  21. package/package/commonjs/Dropdown/InputDropdown.js.map +1 -1
  22. package/package/commonjs/ListItem/ListItem.js +13 -1
  23. package/package/commonjs/ListItem/ListItem.js.map +1 -1
  24. package/package/init.js +179 -0
  25. package/package/module/Dropdown/Dropdown.js +32 -6
  26. package/package/module/Dropdown/Dropdown.js.map +1 -1
  27. package/package/module/Dropdown/InputDropdown.js +7 -1
  28. package/package/module/Dropdown/InputDropdown.js.map +1 -1
  29. package/package/module/ListItem/ListItem.js +13 -1
  30. package/package/module/ListItem/ListItem.js.map +1 -1
  31. package/package/package.json +84 -0
  32. package/package/typescript/Dropdown/Dropdown.d.ts.map +1 -1
  33. package/package/typescript/Dropdown/InputDropdown.d.ts.map +1 -1
  34. package/package/typescript/ListItem/ListItem.d.ts +4 -0
  35. package/package/typescript/ListItem/ListItem.d.ts.map +1 -1
  36. package/package.json +1 -1
@@ -136,8 +136,8 @@ const useStyles = makeStyles((theme) => ({
136
136
  // Modal 模式样式
137
137
  modalContainer: {
138
138
  flex: 1,
139
- justifyContent: "center",
140
- alignItems: "center",
139
+ justifyContent: "flex-start", // 改为顶部对齐,与 CustomDropdown 保持一致
140
+ alignItems: "stretch", // 改为拉伸对齐,与 CustomDropdown 保持一致
141
141
  },
142
142
  modalIcon: {
143
143
  color: theme.colors.primary,
@@ -198,6 +198,7 @@ const useStyles = makeStyles((theme) => ({
198
198
  display: "flex",
199
199
  flexDirection: "row",
200
200
  justifyContent: "space-between",
201
+ alignItems: "center", // 确保垂直居中对齐
201
202
  minHeight: 40,
202
203
  width: "100%",
203
204
  overflow: "hidden",
@@ -212,6 +213,7 @@ const useStyles = makeStyles((theme) => ({
212
213
  paddingRight: 12,
213
214
  paddingTop: 9,
214
215
  paddingBottom: 9,
216
+ alignItems: "center", // 确保垂直居中对齐
215
217
  },
216
218
  alignCenter: {
217
219
  alignSelf: "center",
@@ -471,10 +473,13 @@ const Dropdown: React.FC<DropdownProps> = ({
471
473
  (showSelectedValue || (noLabelAnim && label)) ? styles.modalBtn : null,
472
474
  dropdownType === "solid" ? styles.modalSolidBtn : null,
473
475
  dropdownType === "solid" && radius ? { borderRadius: radius } : null,
476
+ // 统一主体容器的位置,无论是否使用 customPopoverContent
474
477
  label && !noLabelAnim ? { marginTop: 7 } : null,
475
478
  noLabelAnim && label && backgroundColor ? { backgroundColor } : null,
476
479
  state === "error" ? { borderColor: theme.theme.colors.error } : null,
477
480
  props.disabled ? { borderColor: theme.theme.colors.grey3 } : null,
481
+ // 确保主体容器始终有统一的垂直对齐
482
+ { alignItems: "center" },
478
483
  ]}
479
484
  disabled={props.disabled}
480
485
  onPress={openDropdown}
@@ -581,6 +586,16 @@ const Dropdown: React.FC<DropdownProps> = ({
581
586
  ? theme.theme.colors.grey4 || "#f0f0f0"
582
587
  : "transparent",
583
588
  },
589
+ // 第一个 item 添加左上和右上圆角
590
+ index === 0 && {
591
+ borderTopLeftRadius: 12,
592
+ borderTopRightRadius: 12,
593
+ },
594
+ // 最后一个 item 添加左下和右下圆角
595
+ index === dropdownItems.length - 1 && {
596
+ borderBottomLeftRadius: 12,
597
+ borderBottomRightRadius: 12,
598
+ },
584
599
  showCheckedStatusInList && selectedItemKey === item.key ? {
585
600
  backgroundColor: theme.theme.colors.grey4 || "#f0f0f0",
586
601
  } : null,
@@ -758,6 +773,11 @@ const Dropdown: React.FC<DropdownProps> = ({
758
773
  </Pressable>
759
774
  <ScrollView style={{width: subWidth, height: subHeight}}>
760
775
  {options?.map((item, index) => {
776
+ const visibleItems = options.filter(item => !item.hide);
777
+ const currentVisibleIndex = visibleItems.findIndex(visibleItem => visibleItem === item);
778
+ const isFirst = currentVisibleIndex === 0;
779
+ const isLast = currentVisibleIndex === visibleItems.length - 1;
780
+
761
781
  return (
762
782
  !item.hide && (
763
783
  <CustomListItem
@@ -773,6 +793,8 @@ const Dropdown: React.FC<DropdownProps> = ({
773
793
  key={index}
774
794
  item={item}
775
795
  selected={selected_old}
796
+ isFirst={isFirst}
797
+ isLast={isLast}
776
798
  />
777
799
  )
778
800
  );
@@ -152,6 +152,11 @@ const InputDropdown: React.FC<InputDropdownProps> = ({
152
152
  {Array.isArray(list) ? (
153
153
  <ScrollView style={{width: subWidth, maxHeight: subHeight}}>
154
154
  {list?.map((item, index) => {
155
+ const visibleItems = list.filter(item => !item.hide);
156
+ const currentVisibleIndex = visibleItems.findIndex(visibleItem => visibleItem === item);
157
+ const isFirst = currentVisibleIndex === 0;
158
+ const isLast = currentVisibleIndex === visibleItems.length - 1;
159
+
155
160
  return (
156
161
  !item.hide && (
157
162
  <CustomListItem
@@ -164,6 +169,8 @@ const InputDropdown: React.FC<InputDropdownProps> = ({
164
169
  key={index}
165
170
  item={item}
166
171
  selected={selected}
172
+ isFirst={isFirst}
173
+ isLast={isLast}
167
174
  />
168
175
  )
169
176
  );
@@ -32,6 +32,10 @@ export interface Props extends ListItemProps {
32
32
  searchHighlightStyle?: StyleProp<TextStyle>;
33
33
  titleStyle?: StyleProp<TextStyle>;
34
34
  descStyle?: StyleProp<TextStyle>;
35
+ /** 是否为第一个 item */
36
+ isFirst?: boolean;
37
+ /** 是否为最后一个 item */
38
+ isLast?: boolean;
35
39
  search?: string;
36
40
  testID?: string;
37
41
  }
@@ -140,6 +144,8 @@ const CustomListItem: React.FC<Props> = ({
140
144
  searchHighlightStyle,
141
145
  titleStyle,
142
146
  descStyle,
147
+ isFirst,
148
+ isLast,
143
149
  testID,
144
150
  ...props
145
151
  }) => {
@@ -184,6 +190,16 @@ const CustomListItem: React.FC<Props> = ({
184
190
  selected?.value === item?.value
185
191
  ? styles.selectedItem
186
192
  : isHovered && styles.hovered,
193
+ // 第一个 item 添加左上和右上圆角
194
+ isFirst && {
195
+ borderTopLeftRadius: 12,
196
+ borderTopRightRadius: 12,
197
+ },
198
+ // 最后一个 item 添加左下和右下圆角
199
+ isLast && {
200
+ borderBottomLeftRadius: 12,
201
+ borderBottomRightRadius: 12,
202
+ },
187
203
  ]}
188
204
  >
189
205
  <Hoverable
@@ -0,0 +1,383 @@
1
+ # 📝 更新日志
2
+
3
+ 所有重要的项目变更都会记录在这个文件中。
4
+
5
+ 格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/),
6
+ 版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。
7
+
8
+ ## [1.0.57] - 2024-12-19
9
+
10
+ ### 修复
11
+ - 🐛 **TapasDropdown 最外层容器对齐模式统一**:修复使用 `customPopoverContent` 和不使用时的对齐不一致问题
12
+ - 将 `modalContainer` 的 `justifyContent` 改为 `flex-start`,`alignItems` 改为 `stretch`
13
+ - 确保两种模式都采用顶部对齐和拉伸对齐,保持视觉一致性
14
+ - 添加 `CustomPopoverContent` Storybook 案例演示修复效果
15
+
16
+ ## [1.0.56] - 2024-12-19
17
+
18
+ ### 新增功能
19
+ - ✨ **DataCell 智能下拉菜单位置计算**:实现基于可用空间的智能位置选择
20
+ - 新增 `onDropdownStateChange` 回调函数,支持父组件监听下拉菜单状态变化
21
+ - 新增 `gridInfo` prop,支持传递 Grid 相关信息用于精确位置计算
22
+ - 智能计算下拉菜单实际显示大小,包括文本长度、边框、内边距等因素
23
+ - 根据可用空间自动选择显示在按钮上方或下方
24
+ - 添加安全边距,确保下拉菜单不会紧贴边界
25
+ - 支持长文本自适应高度和宽度计算
26
+
27
+ ### 修复
28
+ - 🐛 **DataCell 下拉菜单互斥逻辑优化**:修复下拉菜单状态切换问题
29
+ - 改进互斥排它逻辑,避免状态冲突
30
+ - 优化下拉菜单打开/关闭的时序处理
31
+ - 确保同一时间只有一个下拉菜单显示
32
+ - 修复下拉菜单层级和显示问题
33
+
34
+ ### 测试
35
+ - ✅ **DataCell 测试覆盖增强**:添加新功能的全面测试
36
+ - 新增 `onDropdownStateChange` 回调函数测试
37
+ - 新增 `gridInfo` prop 测试
38
+ - 确保新功能向后兼容性
39
+
40
+ ## [1.0.54] - 2024-12-19
41
+
42
+ ### 新增功能
43
+ - ✨ **Grid 条件性 overflow 设置**:实现智能的 overflow 控制机制
44
+ - 新增 `hasActions` prop 到 `StaticFixedSizeGrid` 组件
45
+ - 支持通过函数动态判断哪些单元格需要 `overflow: "visible"`
46
+ - 只在有 actions 按钮的单元格设置 `overflow: "visible"`,其他保持 `overflow: "hidden"`
47
+ - 提供更精确的性能优化和布局控制
48
+ - 向后兼容:不提供 `hasActions` 时默认使用 `overflow: "hidden"`
49
+
50
+ ### 修复
51
+ - 🐛 **Grid 粘性列头 overflow 设置优化**:进一步解决下拉菜单截断问题
52
+ - 修改了 Grid 组件中粘性列头的 `overflow: "hidden"` 为 `overflow: "visible"`
53
+ - 这是 Grid 组件中 5 处 overflow 设置之一,专门针对粘性列头区域
54
+ - 与 DataCell 的 overflow 优化配合,提供更完整的下拉菜单显示支持
55
+ - 确保在粘性列头区域的下拉菜单也能完整显示
56
+
57
+ ## [1.0.53] - 2024-12-19
58
+
59
+ ### 修复
60
+ - 🐛 **Grid 粘性列头 overflow 设置优化**:进一步解决下拉菜单截断问题
61
+ - 修改了 Grid 组件中粘性列头的 `overflow: "hidden"` 为 `overflow: "visible"`
62
+ - 这是 Grid 组件中 5 处 overflow 设置之一,专门针对粘性列头区域
63
+ - 与 DataCell 的 overflow 优化配合,提供更完整的下拉菜单显示支持
64
+ - 确保在粘性列头区域的下拉菜单也能完整显示
65
+
66
+ ## [1.0.52] - 2024-12-19
67
+
68
+ ### 修复
69
+ - 🐛 **DataCell 下拉菜单 Grid overflow 限制修复**:解决了下拉菜单被 Grid 组件 overflow 截断的问题
70
+ - 识别出 Grid 组件中的 5 处 `overflow: "hidden"` 设置是导致下拉菜单被截断的根本原因
71
+ - 优化了下拉菜单的定位策略,使用动态位置计算
72
+ - 增强了 z-index 层级管理,确保下拉菜单显示在最上层
73
+ - 改进了容器 overflow 设置,突破 Grid 的 overflow 限制
74
+ - 修复了 React Native 环境下的定位兼容性问题
75
+
76
+ ## [1.0.51] - 2024-12-19
77
+
78
+ ### 修复
79
+ - 🐛 **DataCell 按钮居中和下拉菜单显示修复**:修复了 TapasDataCell 的两个关键问题
80
+ - 修复了当只有操作按钮没有文本内容时,按钮偏离单元格中心的问题
81
+ - 动态调整按钮 margin,有文本内容时按钮在右侧,无文本内容时按钮居中
82
+ - 修复了下拉菜单被单元格样式截断的问题
83
+ - 增加了下拉菜单的 z-index 和 overflow 设置,确保完整显示
84
+ - 优化了容器样式,确保下拉菜单不被父容器隐藏
85
+
86
+ ## [1.0.50] - 2024-12-19
87
+
88
+ ### 修复
89
+ - 🐛 **DataCell Grid 样式冲突修复**:修复了 TapasDataCell 在 Grid 中的样式冲突问题
90
+ - 移除了 DataCell 容器的边框样式,避免与 Grid 单元格边框冲突
91
+ - 改善了操作按钮在 Grid 单元格中的居中显示
92
+ - 优化了容器布局,确保在 Grid 环境中正确渲染
93
+ - 添加了 Grid Story 测试案例,展示 moreActions 功能
94
+ - 解决了按钮显示不居中和样式冲突的问题
95
+
96
+ ## [1.0.49] - 2024-12-19
97
+
98
+ ### 修复
99
+ - 🐛 **DataCell 更多操作修复**:修复了 TapasDataCell 组件中 moreActions 下拉显示问题
100
+ - 添加了缺失的 `attachMoreAction` 属性到 TapasDataCellProps 接口
101
+ - 修复了多个操作时只触发第一个操作的问题
102
+ - 现在 `attachMoreAction` 回调可以正确处理多个操作项
103
+ - 解决了 tapas-orderly-client 中 Ongoing.tsx 的 moreActions 下拉显示问题
104
+
105
+ ## [1.0.48] - 2024-12-19
106
+
107
+ ### 修复
108
+ - 🐛 **StickyColumn 宽度修复**:修复了 StaticFixedSizeGrid 中 StickyColumn 的宽度问题
109
+ - 将硬编码的 `width: 1` 改为使用计算出的 `stickyColumnsWidth`
110
+ - 修复了 VariableSizeGrid 使用错误的 `style.width` 而不是正确的 `rest.width`
111
+ - 修复了外层容器宽度计算,使用 `rest.width - stickyColumnsWidth`
112
+ - 解决了 sticky column 父容器宽度显示不正确的问题
113
+ - 修复了 tapas-orderly-client 中 Ongoing.tsx 的宽度显示问题
114
+
115
+ ## [1.0.47] - 2024-12-19
116
+
117
+ ### 测试和修复
118
+ - 🧪 **Grid 组件测试完善**:为 StaticFixedSizeGrid 组件添加了全面的测试覆盖
119
+ - 添加了 7 个测试用例,覆盖基本渲染、属性处理、粘性列功能
120
+ - 测试单列、多列、空列、未定义列的粘性列场景
121
+ - 测试自定义样式属性处理
122
+ - 修复了 `rowHeight` 属性类型问题(从数字改为函数)
123
+ - 所有测试通过,确保组件稳定性
124
+
125
+ ### 调试和优化
126
+ - 🔍 **Grid 组件调试**:添加了调试日志来诊断 `column-header-sticky` 父容器宽度问题
127
+ - 确认了 `style` prop 中 `width: 400` 的来源
128
+ - 为后续修复提供了准确的调试信息
129
+
130
+ ## [1.0.46] - 2024-12-19
131
+
132
+ ### 新增功能
133
+ - ✨ **Dropdown 自定义定位**:为 Dropdown 组件添加了自定义定位功能
134
+ - 新增 `subContainerTop` 和 `subContainerLeft` 属性
135
+ - 支持精确控制下拉框的位置
136
+ - 自定义值具有最高优先级,可覆盖 `subContainerPosition` 的默认行为
137
+ - 完美解决不同环境下的定位问题(Storybook、真实 RN、测试环境)
138
+
139
+ ### 测试和文档
140
+ - 🧪 **测试用例更新**:添加了自定义定位功能的测试用例
141
+ - 测试自定义定位属性的接受
142
+ - 测试自定义定位的优先级
143
+ - 📚 **Storybook 故事更新**:新增 `CustomPositioning` 故事
144
+ - 展示默认定位与自定义定位的对比
145
+ - 提供使用示例和视觉对比
146
+
147
+ ## [1.0.45] - 2024-12-19
148
+
149
+ ### 修复
150
+ - 🔧 **Dropdown 组件定位修复**:修复了 Storybook 环境中的下拉框定位问题
151
+ - 调整了 `top` 值以配合 SafeAreaProvider 的 padding
152
+ - 移除了不支持的 CSS 属性(whiteSpace, textOverflow)
153
+ - 优化了 Storybook 装饰器的 padding 设置
154
+ - 🔧 **Storybook 故事修复**:修复了 Dropdown.stories.tsx 中的 ESLint 错误
155
+ - 更新了 Storybook 导入路径
156
+ - 修复了未使用变量警告
157
+ - 替换了颜色字面量为主题颜色
158
+
159
+ ## [1.0.44] - 2024-10-23
160
+
161
+ ### 修复
162
+ - 🔧 **Shell 组件修复**:修复了 react-native-reanimated 中的不可变对象突变错误
163
+ - 改进了 `useSharedValue` 的初始化和更新逻辑
164
+ - 添加了动画配置参数(damping, stiffness)
165
+ - 优化了依赖数组和条件检查
166
+ - **重要**:移除了对 react-native-reanimated 的依赖,改用 React Native 原生 Animated API
167
+ - 解决了在使用组件库的应用中出现的 "Native part of Reanimated doesn't seem to be initialized" 错误
168
+ - 🔧 **HelloWave 组件修复**:移除了对 react-native-reanimated 的依赖
169
+ - 改用 React Native 原生 Animated API 实现挥手动画
170
+ - 保持了相同的动画效果和性能
171
+ - 解决了依赖初始化问题
172
+ - 🔧 **Progress 组件修复**:修复了空引用错误
173
+ - 添加了 `data` 属性的空值检查
174
+ - 移除了不必要的可选链操作符
175
+ - 提高了组件的健壮性
176
+ - 🔧 **错误处理改进**:增强了组件的错误边界处理
177
+
178
+ ### 新增
179
+ - 完整的测试框架和自动化测试生成
180
+ - Storybook 演示文档的自动生成
181
+ - 完整的文档系统和使用指南
182
+
183
+ ### 变更
184
+ - 优化了包配置,支持现代模块系统
185
+ - 改进了 TypeScript 类型定义
186
+
187
+ ### 修复
188
+ - 修复了 Jest 配置问题
189
+ - 解决了 Storybook 构建错误
190
+
191
+ ## [未发布]
192
+
193
+ ### 修复
194
+ - 🔧 **Shell 组件修复**:修复了 react-native-reanimated 中的不可变对象突变错误
195
+ - 改进了 `useSharedValue` 的初始化和更新逻辑
196
+ - 添加了动画配置参数(damping, stiffness)
197
+ - 优化了依赖数组和条件检查
198
+ - **重要**:移除了对 react-native-reanimated 的依赖,改用 React Native 原生 Animated API
199
+ - 解决了在使用组件库的应用中出现的 "Native part of Reanimated doesn't seem to be initialized" 错误
200
+ - 🔧 **HelloWave 组件修复**:移除了对 react-native-reanimated 的依赖
201
+ - 改用 React Native 原生 Animated API 实现挥手动画
202
+ - 保持了相同的动画效果和性能
203
+ - 解决了依赖初始化问题
204
+ - 🔧 **Progress 组件修复**:修复了空引用错误
205
+ - 添加了 `data` 属性的空值检查
206
+ - 移除了不必要的可选链操作符
207
+ - 提高了组件的健壮性
208
+ - 🔧 **错误处理改进**:增强了组件的错误边界处理
209
+
210
+ ### 新增
211
+ - 完整的测试框架和自动化测试生成
212
+ - Storybook 演示文档的自动生成
213
+ - 完整的文档系统和使用指南
214
+
215
+ ### 变更
216
+ - 优化了包配置,支持现代模块系统
217
+ - 改进了 TypeScript 类型定义
218
+
219
+ ### 修复
220
+ - 修复了 Jest 配置问题
221
+ - 解决了 Storybook 构建错误
222
+
223
+ ## [1.0.0] - 2024-01-09
224
+
225
+ ### 新增
226
+ - 🎉 首次发布 Tapas UI 组件库
227
+ - 50+ 个精心设计的 React Native 组件
228
+ - 完整的 TypeScript 支持
229
+ - 主题系统和深色模式支持
230
+ - Storybook 文档和演示
231
+
232
+ #### 基础组件
233
+ - **TapasButton** - 多样式按钮组件
234
+ - **TapasText** - 主题化文本组件
235
+ - **TapasInput** - 功能丰富的输入框
236
+ - **TapasTextArea** - 多行文本输入
237
+
238
+ #### 数据展示组件
239
+ - **TapasCard** - 多功能卡片组件
240
+ - **TapasProgress** - 进度指示器
241
+ - **TapasTimeline** - 时间线组件
242
+ - **TapasTable** - 数据表格
243
+
244
+ #### 表单组件
245
+ - **TapasCheckBox** - 复选框组件
246
+ - **TapasRadioButton** - 单选按钮
247
+ - **TapasDropdown** - 下拉选择器
248
+ - **TapasNumericInput** - 数字输入框
249
+
250
+ #### 布局组件
251
+ - **TapasLayout** - 应用主布局
252
+ - **TapasGrid** - 网格布局
253
+ - **TapasShell** - Shell 容器
254
+ - **TapasDashboardCard** - 仪表板卡片
255
+
256
+ #### 导航组件
257
+ - **TapasNavigation** - 侧边导航栏
258
+ - **TapasHeader** - 页面头部
259
+ - **TapasDrawer** - 抽屉组件
260
+
261
+ #### 反馈组件
262
+ - **TapasAlert** - 警告提示
263
+ - **TapasToast** - 轻量提示
264
+ - **TapasLoading** - 加载指示器
265
+ - **TapasMessageBox** - 消息对话框
266
+
267
+ #### 高级组件
268
+ - **TapasGantt** - 甘特图
269
+ - **TapasCalendar** - 日历组件
270
+ - **TapasCollapsible** - 可折叠面板
271
+ - **TapasDeviceSelectionModal** - 设备选择模态框
272
+
273
+ ### 技术特性
274
+ - ✅ React Native 0.70+ 支持
275
+ - ✅ TypeScript 完整类型定义
276
+ - ✅ iOS、Android、Web 平台兼容
277
+ - ✅ 主题系统和深色模式
278
+ - ✅ 无障碍设计支持
279
+ - ✅ Tree Shaking 优化
280
+ - ✅ 按需导入支持
281
+
282
+ ## [1.0.1] - 2024-01-15
283
+
284
+ ### 新增
285
+ - 新增组件整合功能,从外部项目导入组件
286
+ - 添加了 7 个新组件:
287
+ - **TapasCard** - 增强的卡片组件
288
+ - **TapasCollapsible** - 可折叠内容面板
289
+ - **TapasDeviceSelectionModal** - 设备选择对话框
290
+ - **TapasExternalLink** - 外部链接组件
291
+ - **TapasHelloWave** - 动画问候组件
292
+ - **TapasScanButton** - 扫描按钮
293
+ - **TapasIconText** - 图标文本组合
294
+
295
+ ### 改进
296
+ - 扩展了现有的 SearchInput 和 Loading 组件功能
297
+ - 优化了组件性能,使用 useCallback 和 useMemo
298
+ - 改进了 TypeScript 类型安全性
299
+
300
+ ### 修复
301
+ - 修复了多个组件中的类型错误
302
+ - 解决了 makeStyles 使用中的问题
303
+ - 修复了条件样式应用的 TypeScript 错误
304
+
305
+ ## [1.1.0] - 2024-01-20
306
+
307
+ ### 新增
308
+ - 🏗️ **工程架构优化**
309
+ - 添加了现代化包配置 (main, module, types)
310
+ - 实现了 exports 条件导出
311
+ - 支持 Tree Shaking (sideEffects: false)
312
+
313
+ - 🚀 **性能优化**
314
+ - 新增 `yarn analyze` 命令用于包大小分析
315
+ - 优化构建配置和输出
316
+ - 支持按需导入,减少包体积
317
+
318
+ - 🔧 **开发工具**
319
+ - 新增 `yarn health-check` 全面项目检查
320
+ - 添加 `yarn dev:full` 完整开发环境
321
+ - 实现自动化测试生成脚本
322
+ - 完善的 Git hooks 和质量门禁
323
+
324
+ - 🧪 **测试框架**
325
+ - 为 39 个组件生成了测试文件
326
+ - 完善的 Jest 配置和测试工具
327
+ - 支持覆盖率报告和 CI 集成
328
+
329
+ - 📚 **文档系统**
330
+ - 创建了完整的文档中心
331
+ - 新增 9 个缺失组件的 Storybook 文档
332
+ - 包含安装指南、快速开始、组件文档等
333
+
334
+ ### 技术改进
335
+ - 修复了 Jest 配置中的模块解析问题
336
+ - 优化了 Storybook 构建配置
337
+ - 完善了 TypeScript 项目配置
338
+ - 添加了自动化脚本和工具链
339
+
340
+ ### 构建系统
341
+ - 构建输出优化:5.7MB 总计
342
+ - CommonJS: 2.0MB
343
+ - ES Module: 1.8MB
344
+ - TypeScript: 692KB
345
+ - Assets: 1.1MB
346
+
347
+ ## [计划中] - v1.2.0
348
+
349
+ ### 计划新增
350
+ - 🎨 高级主题定制功能
351
+ - 📱 React Native Web 优化
352
+ - 🔍 组件搜索和过滤功能
353
+ - 📊 使用统计和分析
354
+ - 🌐 国际化支持
355
+
356
+ ### 计划改进
357
+ - 性能监控和优化
358
+ - 更多动画效果
359
+ - 增强的无障碍支持
360
+ - 移动端手势支持
361
+
362
+ ---
363
+
364
+ ## 版本说明
365
+
366
+ ### 版本号规则
367
+ - **主版本号**: 不兼容的 API 修改
368
+ - **次版本号**: 向下兼容的功能性新增
369
+ - **修订号**: 向下兼容的问题修正
370
+
371
+ ### 发布周期
372
+ - **主要版本**: 每季度发布
373
+ - **次要版本**: 每月发布
374
+ - **修订版本**: 根据需要发布
375
+
376
+ ### 支持政策
377
+ - 当前主版本:完全支持
378
+ - 前一主版本:安全更新和关键 bug 修复
379
+ - 更早版本:不再维护
380
+
381
+ ---
382
+
383
+ **感谢所有贡献者让 Tapas UI 变得更好!** 🙏
@@ -0,0 +1,103 @@
1
+ # Tapas UI
2
+ ![image](https://user-images.githubusercontent.com/3481514/145904252-92e3dc1e-591f-410f-88a1-b4250f4ba6f2.png)
3
+
4
+ 一个现代化的 React Native UI 组件库,支持 Web 和移动端。
5
+
6
+ ## 🚀 特性
7
+
8
+ - 🎨 丰富的 UI 组件
9
+ - 📱 React Native 原生支持
10
+ - 🌐 Web 兼容性
11
+ - 🎯 TypeScript 支持
12
+ - 🎭 主题系统
13
+ - 📖 Storybook 文档
14
+
15
+ ## 📦 安装
16
+
17
+ ```bash
18
+ npm install @beppla/tapas-ui
19
+ # 或
20
+ yarn add @beppla/tapas-ui
21
+ ```
22
+
23
+ ## 🔧 依赖要求
24
+
25
+ ### 必需依赖
26
+
27
+ ```json
28
+ {
29
+ "dependencies": {
30
+ "react": "^18.0.0",
31
+ "react-native": "^0.70.0"
32
+ }
33
+ }
34
+ ```
35
+
36
+ ### Web 环境依赖
37
+
38
+ 如果您在 Web 环境中使用,需要安装以下依赖:
39
+
40
+ ```bash
41
+ npm install react-native-web react-native-vector-icons
42
+ # 或
43
+ yarn add react-native-web react-native-vector-icons
44
+ ```
45
+
46
+ ### 图标支持
47
+
48
+ 组件库使用 `react-native-vector-icons` 提供图标支持。在 Web 环境中,您可能需要额外的配置:
49
+
50
+ ```bash
51
+ # 安装字体文件
52
+ npm install @expo/vector-icons
53
+ # 或
54
+ yarn add @expo/vector-icons
55
+ ```
56
+
57
+ ## 🎯 使用方法
58
+
59
+ ```tsx
60
+ import React from 'react';
61
+ import { TapasButton, TapasText } from '@beppla/tapas-ui';
62
+
63
+ const App = () => {
64
+ return (
65
+ <div>
66
+ <TapasText>Hello Tapas UI!</TapasText>
67
+ <TapasButton title="Click me" onPress={() => alert('Hello!')} />
68
+ </div>
69
+ );
70
+ };
71
+ ```
72
+
73
+ ## 🌐 Web 兼容性
74
+
75
+ ### 已知问题
76
+
77
+ 1. **图标组件**: 在 Web 环境中,某些图标可能显示为文本占位符
78
+ 2. **原生模块**: 某些 React Native 特定功能在 Web 中不可用
79
+ 3. **字体文件**: 需要确保字体文件在 Web 环境中正确加载
80
+
81
+ ### 解决方案
82
+
83
+ 1. 安装 `react-native-web` 和相关依赖
84
+ 2. 配置 Webpack 别名和 fallback
85
+ 3. 使用提供的 Web 兼容组件
86
+
87
+ ## 📚 文档
88
+
89
+ 访问 [Storybook](https://your-storybook-url.com) 查看完整的组件文档和示例。
90
+
91
+ ## 🤝 贡献
92
+
93
+ 欢迎提交 Issue 和 Pull Request!
94
+
95
+ ## 📄 许可证
96
+
97
+ MIT License
98
+
99
+ ## 🔗 相关链接
100
+
101
+ - [React Native](https://reactnative.dev/)
102
+ - [React Native Web](https://necolas.github.io/react-native-web/)
103
+ - [Storybook](https://storybook.js.org/)
Binary file
Binary file
Binary file