@beppla/tapas-ui 1.5.2 → 1.5.6

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 (167) hide show
  1. package/commonjs/Alert/README.md +75 -0
  2. package/commonjs/BarChart/README.md +172 -0
  3. package/commonjs/Button/README.md +108 -0
  4. package/commonjs/Calendar/Calendar.base.js +1 -1
  5. package/commonjs/Calendar/Calendar.base.js.map +1 -1
  6. package/commonjs/Calendar/README.md +410 -0
  7. package/commonjs/Card/README.md +126 -0
  8. package/commonjs/CheckBox/README.md +147 -0
  9. package/commonjs/CircularProgress/README.md +70 -0
  10. package/commonjs/Collapsible/README.md +140 -0
  11. package/commonjs/ComboChart/README.md +124 -0
  12. package/commonjs/DashboardCard/README.md +120 -0
  13. package/commonjs/DataTable/README.md +159 -0
  14. package/commonjs/DeviceSelectionModal/README.md +124 -0
  15. package/commonjs/DraggableFlatList/README.md +35 -0
  16. package/commonjs/Drawer/README.md +175 -0
  17. package/commonjs/Dropdown/README.md +230 -0
  18. package/commonjs/ExternalLink/README.md +81 -0
  19. package/commonjs/Gantt/README.md +155 -0
  20. package/commonjs/Grid/README.md +197 -0
  21. package/commonjs/Header/README.md +109 -0
  22. package/commonjs/HelloWave/README.md +28 -0
  23. package/commonjs/Hoverable/Hoverable.js.map +1 -1
  24. package/commonjs/IconText/README.md +99 -0
  25. package/commonjs/Image/PreviewImg/README.md +100 -0
  26. package/commonjs/Image/README.md +88 -0
  27. package/commonjs/Input/Input.js +60 -4
  28. package/commonjs/Input/Input.js.map +1 -1
  29. package/commonjs/Layout/README.md +174 -0
  30. package/commonjs/LineChart/README.md +181 -0
  31. package/commonjs/ListItem/README.md +122 -0
  32. package/commonjs/MessageBox/MessageBox.js +7 -1
  33. package/commonjs/MessageBox/MessageBox.js.map +1 -1
  34. package/commonjs/MessageBox/README.md +120 -0
  35. package/commonjs/Navigation/README.md +197 -0
  36. package/commonjs/NumericInput/README.md +95 -0
  37. package/commonjs/Overlay/README.md +84 -0
  38. package/commonjs/Pagination/README.md +106 -0
  39. package/commonjs/PieChart/README.md +212 -0
  40. package/commonjs/Popover/README.md +82 -0
  41. package/commonjs/Progress/README.md +106 -0
  42. package/commonjs/RadioButton/README.md +85 -0
  43. package/commonjs/ScanButton/README.md +72 -0
  44. package/commonjs/SearchInput/SearchInput.js.map +1 -1
  45. package/commonjs/SheetTitle/README.md +89 -0
  46. package/commonjs/Shell/README.md +152 -0
  47. package/commonjs/Shell/Shell.js.map +1 -1
  48. package/commonjs/StatisticCard/README.md +129 -0
  49. package/commonjs/Status/README.md +75 -0
  50. package/commonjs/Steps/README.md +76 -0
  51. package/commonjs/Switch/Switch.js +101 -0
  52. package/commonjs/Switch/Switch.js.map +1 -0
  53. package/commonjs/Tab/README.md +161 -0
  54. package/commonjs/Tag/README.md +93 -0
  55. package/commonjs/Task/README.md +110 -0
  56. package/commonjs/Text/README.md +97 -0
  57. package/commonjs/TextArea/README.md +127 -0
  58. package/commonjs/TextArea/TextArea.js +4 -2
  59. package/commonjs/TextArea/TextArea.js.map +1 -1
  60. package/commonjs/Theme/README.md +161 -0
  61. package/commonjs/Theme/makeStyles.js +30 -0
  62. package/commonjs/Theme/makeStyles.js.map +1 -0
  63. package/commonjs/Theme/withTheme.js +91 -0
  64. package/commonjs/Theme/withTheme.js.map +1 -0
  65. package/commonjs/Timeline/README.md +111 -0
  66. package/commonjs/Toast/README.md +96 -0
  67. package/commonjs/Upload/Upload.js +126 -0
  68. package/commonjs/Upload/Upload.js.map +1 -0
  69. package/commonjs/index.js +24 -4
  70. package/commonjs/index.js.map +1 -1
  71. package/module/Alert/README.md +75 -0
  72. package/module/BarChart/README.md +172 -0
  73. package/module/Button/README.md +108 -0
  74. package/module/Calendar/Calendar.base.js +1 -1
  75. package/module/Calendar/Calendar.base.js.map +1 -1
  76. package/module/Calendar/README.md +410 -0
  77. package/module/Card/README.md +126 -0
  78. package/module/CheckBox/README.md +147 -0
  79. package/module/CircularProgress/README.md +70 -0
  80. package/module/Collapsible/README.md +140 -0
  81. package/module/ComboChart/README.md +124 -0
  82. package/module/DashboardCard/README.md +120 -0
  83. package/module/DataTable/README.md +159 -0
  84. package/module/DeviceSelectionModal/README.md +124 -0
  85. package/module/DraggableFlatList/README.md +35 -0
  86. package/module/Drawer/README.md +175 -0
  87. package/module/Dropdown/README.md +230 -0
  88. package/module/ExternalLink/README.md +81 -0
  89. package/module/Gantt/README.md +155 -0
  90. package/module/Grid/README.md +197 -0
  91. package/module/Header/README.md +109 -0
  92. package/module/HelloWave/README.md +28 -0
  93. package/module/Hoverable/Hoverable.js.map +1 -1
  94. package/module/IconText/README.md +99 -0
  95. package/module/Image/PreviewImg/README.md +100 -0
  96. package/module/Image/README.md +88 -0
  97. package/module/Input/Input.js +60 -4
  98. package/module/Input/Input.js.map +1 -1
  99. package/module/Layout/README.md +174 -0
  100. package/module/LineChart/README.md +181 -0
  101. package/module/ListItem/README.md +122 -0
  102. package/module/MessageBox/MessageBox.js +8 -2
  103. package/module/MessageBox/MessageBox.js.map +1 -1
  104. package/module/MessageBox/README.md +120 -0
  105. package/module/Navigation/README.md +197 -0
  106. package/module/NumericInput/README.md +95 -0
  107. package/module/Overlay/README.md +84 -0
  108. package/module/Pagination/README.md +106 -0
  109. package/module/PieChart/README.md +212 -0
  110. package/module/Popover/README.md +82 -0
  111. package/module/Progress/README.md +106 -0
  112. package/module/RadioButton/README.md +85 -0
  113. package/module/ScanButton/README.md +72 -0
  114. package/module/SearchInput/SearchInput.js.map +1 -1
  115. package/module/SheetTitle/README.md +89 -0
  116. package/module/Shell/README.md +152 -0
  117. package/module/Shell/Shell.js.map +1 -1
  118. package/module/StatisticCard/README.md +129 -0
  119. package/module/Status/README.md +75 -0
  120. package/module/Steps/README.md +76 -0
  121. package/module/Switch/Switch.js +96 -0
  122. package/module/Switch/Switch.js.map +1 -0
  123. package/module/Tab/README.md +161 -0
  124. package/module/Tag/README.md +93 -0
  125. package/module/Task/README.md +110 -0
  126. package/module/Text/README.md +97 -0
  127. package/module/TextArea/README.md +127 -0
  128. package/module/TextArea/TextArea.js +4 -2
  129. package/module/TextArea/TextArea.js.map +1 -1
  130. package/module/Theme/README.md +161 -0
  131. package/module/Theme/makeStyles.js +24 -0
  132. package/module/Theme/makeStyles.js.map +1 -0
  133. package/module/Theme/withTheme.js +82 -0
  134. package/module/Theme/withTheme.js.map +1 -0
  135. package/module/Timeline/README.md +111 -0
  136. package/module/Toast/README.md +96 -0
  137. package/module/Upload/Upload.js +121 -0
  138. package/module/Upload/Upload.js.map +1 -0
  139. package/module/index.js +11 -3
  140. package/module/index.js.map +1 -1
  141. package/package.json +1 -1
  142. package/typescript/Grid/FixedSizeGrid.d.ts +1 -3
  143. package/typescript/Grid/FixedSizeGrid.d.ts.map +1 -1
  144. package/typescript/Grid/Grid.base.d.ts +1 -3
  145. package/typescript/Grid/Grid.base.d.ts.map +1 -1
  146. package/typescript/Grid/VariableSizeGrid.d.ts +1 -3
  147. package/typescript/Grid/VariableSizeGrid.d.ts.map +1 -1
  148. package/typescript/Input/Input.d.ts +5 -0
  149. package/typescript/Input/Input.d.ts.map +1 -1
  150. package/typescript/MessageBox/MessageBox.d.ts.map +1 -1
  151. package/typescript/SearchInput/SearchInput.d.ts +4 -0
  152. package/typescript/SearchInput/SearchInput.d.ts.map +1 -1
  153. package/typescript/Switch/Switch.d.ts +15 -0
  154. package/typescript/Switch/Switch.d.ts.map +1 -0
  155. package/typescript/TextArea/TextArea.d.ts +2 -0
  156. package/typescript/TextArea/TextArea.d.ts.map +1 -1
  157. package/typescript/Theme/makeStyles.d.ts +11 -0
  158. package/typescript/Theme/makeStyles.d.ts.map +1 -0
  159. package/typescript/Theme/withTheme.d.ts +12 -0
  160. package/typescript/Theme/withTheme.d.ts.map +1 -0
  161. package/typescript/Upload/Upload.d.ts +25 -0
  162. package/typescript/Upload/Upload.d.ts.map +1 -0
  163. package/typescript/WebViewBridge/useWebViewBridge.d.ts +1 -1
  164. package/typescript/WebViewBridge/useWebViewBridge.d.ts.map +1 -1
  165. package/typescript/common/hooks/useBridgelessFix.d.ts +1 -1
  166. package/typescript/index.d.ts +7 -1
  167. package/typescript/index.d.ts.map +1 -1
@@ -0,0 +1,75 @@
1
+ # Status
2
+
3
+ 状态标签组件,用于展示不同类型的状态信息。支持 point(圆点)和 solid(填充)两种显示模式。
4
+
5
+ ## 功能特性
6
+
7
+ - ✅ 支持 6 种状态类型:success、error、warning、waiting、unavailable、disabled
8
+ - ✅ 支持 point 模式(圆点 + 文字)和 solid 模式(带边框文字)
9
+ - ✅ 自动首字母大写显示
10
+ - ✅ 各状态类型使用主题色渲染
11
+ - ✅ 空标签自动返回 null,不渲染
12
+ - ✅ 支持自定义样式覆盖
13
+ - ✅ 支持 testID 属性用于测试
14
+ - ✅ 使用 React.memo 优化渲染性能
15
+
16
+ ## 安装使用
17
+
18
+ ```tsx
19
+ import Status from '@beppla/tapas-ui/components/Status/Status';
20
+ // 或具名导出
21
+ import { StatusTag } from '@beppla/tapas-ui/components/Status/Status';
22
+ ```
23
+
24
+ ## Props
25
+
26
+ | 属性 | 类型 | 默认值 | 说明 |
27
+ |------|------|--------|------|
28
+ | tag | `string` | - | 状态文字 |
29
+ | type | `STATUS_TYPE` | - | 状态类型 |
30
+ | mode | `'point' \| 'solid'` | `'point'` | 显示模式 |
31
+ | testID | `string` | - | 测试标识 |
32
+ | styles | `StyleProp<ViewStyle>` | - | 自定义容器样式 |
33
+
34
+ ### STATUS_TYPE
35
+
36
+ ```ts
37
+ type STATUS_TYPE = 'success' | 'error' | 'warning' | 'waiting' | 'unavailable' | 'disabled';
38
+ ```
39
+
40
+ ## 使用示例
41
+
42
+ ### Point 模式(圆点 + 文字)
43
+
44
+ ```tsx
45
+ <Status tag="Active" type="success" mode="point" />
46
+ <Status tag="Error" type="error" mode="point" />
47
+ <Status tag="Warning" type="warning" mode="point" />
48
+ <Status tag="Waiting" type="waiting" mode="point" />
49
+ ```
50
+
51
+ ### Solid 模式(带边框文字)
52
+
53
+ ```tsx
54
+ <Status tag="Available" type="success" mode="solid" />
55
+ <Status tag="Cancelled" type="error" mode="solid" />
56
+ <Status tag="Pending" type="warning" mode="solid" />
57
+ ```
58
+
59
+ ### 全部状态类型
60
+
61
+ ```tsx
62
+ {(['success', 'error', 'warning', 'waiting', 'unavailable', 'disabled'] as STATUS_TYPE[]).map(
63
+ (type) => (
64
+ <Status key={type} type={type} tag={type} mode="point" />
65
+ )
66
+ )}
67
+ ```
68
+
69
+ ## 注意事项
70
+
71
+ - `tag` 为空字符串时组件不渲染(返回 null)
72
+ - 标签文字会自动首字母大写(通过 `capitalizeFirstLetter` 处理)
73
+ - point 模式下圆点为 8x8 像素,带圆角
74
+ - solid 模式使用边框 + 文字颜色,不填充背景
75
+ - waiting 状态在 point 模式下有特殊样式(使用边框而非背景色)
@@ -0,0 +1,76 @@
1
+ # Steps
2
+
3
+ 步骤条组件,用于展示多步骤流程的当前进度。步骤编号以圆形展示,已完成步骤显示对勾图标,步骤之间以连接线相连,支持点击已完成和当前步骤进行导航。
4
+
5
+ ## 功能特性
6
+
7
+ - ✅ 多步骤流程展示
8
+ - ✅ 三种步骤状态:完成(对勾图标)、当前(高亮)、待完成(灰色编号)
9
+ - ✅ 步骤间连接线颜色跟随状态变化
10
+ - ✅ 支持点击已完成/当前步骤进行导航
11
+ - ✅ 待完成步骤不可点击
12
+ - ✅ 横向排列布局
13
+ - ✅ 主题色适配(品牌色高亮)
14
+ - ✅ React.memo 优化性能
15
+
16
+ ## 安装使用
17
+
18
+ ```tsx
19
+ import { Steps } from '@beppla/tapas-ui';
20
+ ```
21
+
22
+ ## Props
23
+
24
+ | 属性 | 类型 | 默认值 | 说明 |
25
+ |------|------|--------|------|
26
+ | steps | `{ title: string; description?: string }[]` | `[]` | 步骤配置数组(必填) |
27
+ | currentStep | `number` | - | 当前步骤索引,从 0 开始(必填) |
28
+ | onPressStep | `(step: number) => void` | - | 步骤点击回调,参数为步骤编号(从 1 开始)(必填) |
29
+ | testID | `string` | - | 测试标识 |
30
+
31
+ ## 使用示例
32
+
33
+ ### 基础用法
34
+
35
+ ```tsx
36
+ const steps = [
37
+ { title: 'Step 1' },
38
+ { title: 'Step 2' },
39
+ { title: 'Step 3' },
40
+ ];
41
+
42
+ <Steps
43
+ steps={steps}
44
+ currentStep={1}
45
+ onPressStep={(step) => console.log('Navigate to step:', step)}
46
+ />
47
+ ```
48
+
49
+ ### 全部完成
50
+
51
+ ```tsx
52
+ <Steps
53
+ steps={[{ title: 'Info' }, { title: 'Payment' }, { title: 'Done' }]}
54
+ currentStep={3}
55
+ onPressStep={handleStepPress}
56
+ />
57
+ ```
58
+
59
+ ### 第一步
60
+
61
+ ```tsx
62
+ <Steps
63
+ steps={[{ title: 'Cart' }, { title: 'Checkout' }, { title: 'Confirm' }]}
64
+ currentStep={0}
65
+ onPressStep={handleStepPress}
66
+ />
67
+ ```
68
+
69
+ ## 注意事项
70
+
71
+ - `currentStep` 从 0 开始索引,0 表示第一步为当前步骤
72
+ - `onPressStep` 回调参数为步骤编号(从 1 开始),与界面展示一致
73
+ - 仅已完成和当前步骤可点击,待完成步骤点击无响应
74
+ - 步骤圆形尺寸固定 28x28,连接线宽度 76px
75
+ - `title` 和 `description` 在当前实现中仅用于数据传递,界面展示为编号/对勾
76
+ - 需在 `ThemeProvider` 内使用
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _themed = require("@rneui/themed");
10
+ var _jsxRuntime = require("react/jsx-runtime");
11
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
12
+ const TapasSwitch = ({
13
+ trackColor,
14
+ thumbColor,
15
+ width = 56,
16
+ height = 32,
17
+ onValueChange,
18
+ value,
19
+ disabled,
20
+ testID,
21
+ containerStyle
22
+ }) => {
23
+ const styles = useStyles();
24
+ const leftAnim = (0, _react.useRef)(new _reactNative.Animated.Value(value ? width - height - 1 : 3)).current;
25
+ (0, _react.useEffect)(() => {
26
+ _reactNative.Animated.timing(leftAnim, {
27
+ toValue: value ? width - height - 1 : 3,
28
+ duration: 200,
29
+ useNativeDriver: false
30
+ }).start();
31
+ }, [value, width, height, leftAnim]);
32
+ const thumbSize = height - 6;
33
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
34
+ style: [styles.container, containerStyle],
35
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
36
+ testID: testID,
37
+ activeOpacity: 0.8,
38
+ onPress: () => {
39
+ if (!disabled && onValueChange) {
40
+ onValueChange(!value);
41
+ }
42
+ },
43
+ style: [styles.track, {
44
+ width,
45
+ height,
46
+ borderRadius: height / 2,
47
+ backgroundColor: value ? trackColor?.true ?? (disabled ? styles.disabledOnBg.backgroundColor : styles.onBg.backgroundColor) : trackColor?.false ?? (disabled ? styles.disabledOffBg.backgroundColor : styles.offBg.backgroundColor),
48
+ opacity: disabled ? 0.6 : 1
49
+ }],
50
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
51
+ style: [{
52
+ width: thumbSize,
53
+ height: thumbSize,
54
+ borderRadius: thumbSize / 2,
55
+ backgroundColor: thumbColor ?? styles.thumb.backgroundColor,
56
+ transform: [{
57
+ translateX: leftAnim
58
+ }]
59
+ }, !disabled && styles.shadow]
60
+ })
61
+ })
62
+ });
63
+ };
64
+ const useStyles = (0, _themed.makeStyles)(theme => ({
65
+ container: {
66
+ justifyContent: 'center',
67
+ alignItems: 'center'
68
+ },
69
+ track: {
70
+ padding: 3,
71
+ justifyContent: 'center',
72
+ position: 'relative'
73
+ },
74
+ onBg: {
75
+ backgroundColor: theme.colors.success
76
+ },
77
+ offBg: {
78
+ backgroundColor: theme.colors.grey3
79
+ },
80
+ disabledOnBg: {
81
+ backgroundColor: theme.colors.grey3
82
+ },
83
+ disabledOffBg: {
84
+ backgroundColor: theme.colors.grey4
85
+ },
86
+ thumb: {
87
+ backgroundColor: theme.colors.white
88
+ },
89
+ shadow: {
90
+ shadowColor: 'rgba(0, 0, 0, 0.12)',
91
+ shadowOffset: {
92
+ width: 0,
93
+ height: 4
94
+ },
95
+ shadowOpacity: 0.12,
96
+ shadowRadius: 16,
97
+ elevation: 8
98
+ }
99
+ }));
100
+ var _default = exports.default = (0, _themed.withTheme)(/*#__PURE__*/_react.default.memo(TapasSwitch));
101
+ //# sourceMappingURL=Switch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_themed","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","TapasSwitch","trackColor","thumbColor","width","height","onValueChange","value","disabled","testID","containerStyle","styles","useStyles","leftAnim","useRef","Animated","Value","current","useEffect","timing","toValue","duration","useNativeDriver","start","thumbSize","jsx","View","style","container","children","TouchableOpacity","activeOpacity","onPress","track","borderRadius","backgroundColor","true","disabledOnBg","onBg","false","disabledOffBg","offBg","opacity","thumb","transform","translateX","shadow","makeStyles","theme","justifyContent","alignItems","padding","position","colors","success","grey3","grey4","white","shadowColor","shadowOffset","shadowOpacity","shadowRadius","elevation","_default","exports","withTheme","React","memo"],"sourceRoot":"../../../components","sources":["Switch/Switch.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,161 @@
1
+ # TapasTab
2
+
3
+ Tab 标签页组件,扩展 `@rneui/themed` 的 Tab 组件,新增 `content` 宽度模式,支持根据标签文本内容自适应宽度,而非默认的平分容器宽度。
4
+
5
+ ## 功能特性
6
+
7
+ - 两种宽度模式:`fill`(平分容器宽度)和 `content`(内容自适应宽度)
8
+ - `content` 模式下自动启用水平滚动(`scrollable`)
9
+ - 可配置标签最小宽度(`minTabWidth`)和最大宽度(`maxTabWidth`)
10
+ - 可配置内容模式下的水平内边距(`contentPadding`)
11
+ - 底部分隔线显示控制和颜色自定义
12
+ - 文本超出时自动省略号处理(Web 端 `text-overflow: ellipsis`)
13
+ - 完全兼容 `@rneui/themed` Tab 的所有原生属性
14
+ - `TapasTab.Item` 直接复用 `@rneui Tab.Item`
15
+
16
+ ## 安装使用
17
+
18
+ ```tsx
19
+ import { TapasTab } from '@beppla/tapas-ui';
20
+ ```
21
+
22
+ ## Props
23
+
24
+ | 属性 | 类型 | 默认值 | 说明 |
25
+ |------|------|--------|------|
26
+ | value | `number` | - | 当前选中标签索引(受控,必填) |
27
+ | onChange | `(value: number) => void` | - | 标签切换回调(必填) |
28
+ | widthMode | `'fill' \| 'content'` | `'fill'` | 宽度模式 |
29
+ | minTabWidth | `number` | - | content 模式下标签最小宽度(像素) |
30
+ | maxTabWidth | `number` | - | content 模式下标签最大宽度(像素) |
31
+ | contentPadding | `number` | `16` | content 模式下标签水平内边距 |
32
+ | showDivider | `boolean` | `true` | 是否显示底部分隔线(仅 content 模式) |
33
+ | dividerColor | `string` | `'#e0e0e0'` | 底部分隔线颜色 |
34
+ | containerStyle | `StyleProp<ViewStyle>` | - | 容器自定义样式 |
35
+ | buttonStyle | `StyleProp<ViewStyle>` | - | 按钮自定义样式 |
36
+ | indicatorStyle | `StyleProp<ViewStyle>` | - | 指示器自定义样式 |
37
+ | titleStyle | `StyleProp<TextStyle>` | - | 标题文本自定义样式 |
38
+ | children | `React.ReactElement<TabItemProps>[]` | - | TapasTab.Item 子组件 |
39
+
40
+ ## 使用示例
41
+
42
+ ### 基础平分模式(默认)
43
+
44
+ ```tsx
45
+ import { TapasTab } from '@beppla/tapas-ui';
46
+ import { useState } from 'react';
47
+
48
+ export default function App() {
49
+ const [index, setIndex] = useState(0);
50
+
51
+ return (
52
+ <TapasTab value={index} onChange={setIndex}>
53
+ <TapasTab.Item title="Tab 1" />
54
+ <TapasTab.Item title="Tab 2" />
55
+ <TapasTab.Item title="Tab 3" />
56
+ </TapasTab>
57
+ );
58
+ }
59
+ ```
60
+
61
+ ### 内容自适应模式
62
+
63
+ ```tsx
64
+ <TapasTab value={index} onChange={setIndex} widthMode="content">
65
+ <TapasTab.Item title="Short" />
66
+ <TapasTab.Item title="Medium Length" />
67
+ <TapasTab.Item title="This is a very long tab label" />
68
+ </TapasTab>
69
+ ```
70
+
71
+ ### 带最小/最大宽度控制
72
+
73
+ ```tsx
74
+ <TapasTab
75
+ value={index}
76
+ onChange={setIndex}
77
+ widthMode="content"
78
+ minTabWidth={80}
79
+ maxTabWidth={180}
80
+ >
81
+ <TapasTab.Item title="Short" />
82
+ <TapasTab.Item title="Medium" />
83
+ <TapasTab.Item title="Very long label text here" />
84
+ </TapasTab>
85
+ ```
86
+
87
+ ### 自定义内边距
88
+
89
+ ```tsx
90
+ <TapasTab
91
+ value={index}
92
+ onChange={setIndex}
93
+ widthMode="content"
94
+ contentPadding={30}
95
+ >
96
+ <TapasTab.Item title="Home" />
97
+ <TapasTab.Item title="Products" />
98
+ <TapasTab.Item title="Orders" />
99
+ </TapasTab>
100
+ ```
101
+
102
+ ### 实际应用场景(商品管理导航)
103
+
104
+ ```tsx
105
+ import { TapasTab } from '@beppla/tapas-ui';
106
+ import { useState } from 'react';
107
+ import { View, Text } from 'react-native';
108
+
109
+ const tabs = ['All', 'Pending', 'Published', 'Unpublished', 'Low Stock'];
110
+
111
+ export default function ProductTabs() {
112
+ const [index, setIndex] = useState(0);
113
+
114
+ return (
115
+ <View>
116
+ <TapasTab
117
+ value={index}
118
+ onChange={setIndex}
119
+ widthMode="content"
120
+ minTabWidth={60}
121
+ contentPadding={20}
122
+ >
123
+ {tabs.map((tab, i) => (
124
+ <TapasTab.Item key={i} title={tab} />
125
+ ))}
126
+ </TapasTab>
127
+ <View style={{ padding: 16 }}>
128
+ <Text>{tabs[index]} content here</Text>
129
+ </View>
130
+ </View>
131
+ );
132
+ }
133
+ ```
134
+
135
+ ### 自定义样式
136
+
137
+ ```tsx
138
+ <TapasTab
139
+ value={index}
140
+ onChange={setIndex}
141
+ widthMode="fill"
142
+ containerStyle={{ backgroundColor: '#f5f5f5' }}
143
+ buttonStyle={{ paddingVertical: 12 }}
144
+ titleStyle={{ fontSize: 14, fontWeight: '600' }}
145
+ indicatorStyle={{ backgroundColor: '#1976d2', height: 3 }}
146
+ >
147
+ <TapasTab.Item title="Tab 1" />
148
+ <TapasTab.Item title="Tab 2" />
149
+ </TapasTab>
150
+ ```
151
+
152
+ ## 注意事项
153
+
154
+ - `fill` 模式(默认)将标签平均分配容器宽度,与原生 `@rneui Tab` 行为一致
155
+ - `content` 模式根据文本内容动态调整每个标签宽度,自动启用水平滚动
156
+ - `minTabWidth` 和 `maxTabWidth` 仅在 `widthMode='content'` 时生效
157
+ - `content` 模式下,`buttonStyle` 和 `titleStyle` 会自动注入到每个 `TapasTab.Item`
158
+ - `showDivider` 仅在 `content` 模式下生效,通过外层 View 的 `borderBottomWidth` 实现
159
+ - 在 `content` 模式下,文本自动设置为不换行(Web `whiteSpace: nowrap`)并显示省略号
160
+ - `TapasTab.Item` 是 `@rneui Tab.Item` 的直接引用,支持所有 `TabItemProps`
161
+ - `containerStyle` 在 `content` 模式下会自动追加 `width: '100%'`
@@ -0,0 +1,93 @@
1
+ # Tag
2
+
3
+ 标签组件,用于标记和分类信息。支持关闭按钮、多种尺寸和禁用状态。
4
+
5
+ ## 功能特性
6
+
7
+ - ✅ 支持三种尺寸:small(32px)、middle(36px)、large(40px)
8
+ - ✅ 可选的关闭按钮,支持点击关闭回调
9
+ - ✅ 支持禁用状态,禁用时关闭按钮不可点击
10
+ - ✅ 文字超出宽度自动省略(可设置最大宽度)
11
+ - ✅ 胶囊形圆角样式
12
+ - ✅ 灰色背景,主题色文字
13
+ - ✅ 使用 React.memo 优化渲染性能
14
+ - ✅ 支持无障碍标签(accessibilityRole="button")
15
+
16
+ ## 安装使用
17
+
18
+ ```tsx
19
+ import Tag from '@beppla/tapas-ui/components/Tag/Tag';
20
+ ```
21
+
22
+ ## Props
23
+
24
+ | 属性 | 类型 | 默认值 | 说明 |
25
+ |------|------|--------|------|
26
+ | children | `React.ReactNode` | - | 标签内容 |
27
+ | closable | `boolean` | `true` | 是否显示关闭按钮 |
28
+ | onClose | `() => void` | - | 关闭按钮点击回调 |
29
+ | style | `StyleProp<ViewStyle>` | - | 自定义容器样式 |
30
+ | size | `'small' \| 'middle' \| 'large'` | `'large'` | 标签尺寸 |
31
+ | textMaxWidth | `number` | `226` | 文字最大宽度 |
32
+ | disabled | `boolean` | `false` | 是否禁用 |
33
+
34
+ ## 使用示例
35
+
36
+ ### 基础用法
37
+
38
+ ```tsx
39
+ <Tag>标签文字</Tag>
40
+ ```
41
+
42
+ ### 可关闭标签
43
+
44
+ ```tsx
45
+ <Tag closable onClose={() => console.log('closed')}>
46
+ 可关闭
47
+ </Tag>
48
+ ```
49
+
50
+ ### 不同尺寸
51
+
52
+ ```tsx
53
+ <Tag size="small">Small</Tag>
54
+ <Tag size="middle">Middle</Tag>
55
+ <Tag size="large">Large</Tag>
56
+ ```
57
+
58
+ ### 禁用状态
59
+
60
+ ```tsx
61
+ <Tag disabled>禁用标签</Tag>
62
+ ```
63
+
64
+ ### 标签列表(可删除)
65
+
66
+ ```tsx
67
+ const [list, setList] = useState([
68
+ { name: '标签1', value: '1' },
69
+ { name: '标签2', value: '2' },
70
+ ]);
71
+
72
+ <View style={{ flexDirection: 'row' }}>
73
+ {list.map((item, idx) => (
74
+ <Tag
75
+ key={item.value}
76
+ onClose={() => {
77
+ const newList = [...list];
78
+ newList.splice(idx, 1);
79
+ setList(newList);
80
+ }}
81
+ >
82
+ {item.name}
83
+ </Tag>
84
+ ))}
85
+ </View>
86
+ ```
87
+
88
+ ## 注意事项
89
+
90
+ - 默认 `closable` 为 `true`,如不需要关闭按钮请显式设置为 `false`
91
+ - 禁用状态下关闭图标仍然显示,但不可点击
92
+ - `textMaxWidth` 默认为 226,超出文字会被裁剪(overflow: hidden)
93
+ - 标签之间默认有 `marginRight: 8` 和 `marginBottom: 8` 的间距
@@ -0,0 +1,110 @@
1
+ # Task
2
+
3
+ 任务卡片组件(TaskCard),用于在甘特图或看板中展示任务的详细信息。包含标题、描述、状态标签、完成进度和时间范围,四种状态(Waiting / Ongoing / Delay / Completed)各有对应的颜色和样式。
4
+
5
+ ## 功能特性
6
+
7
+ - ✅ 四种任务状态:Waiting(等待)、Ongoing(进行中)、Delay(延迟)、Completed(已完成)
8
+ - ✅ 状态自动匹配颜色和背景(绿色/红色/蓝色/灰色)
9
+ - ✅ 进度条背景色覆盖(左侧彩色边框 + 背景填充)
10
+ - ✅ 多条描述文本展示(description 数组)
11
+ - ✅ 完成百分比显示
12
+ - ✅ 时间范围展示(开始时间 - 结束时间)
13
+ - ✅ Completed 状态自动隐藏时间范围和状态标签
14
+ - ✅ 支持自定义状态文本(statusText)和完成文本(completedText)
15
+ - ✅ 卡片阴影效果
16
+ - ✅ 主题色适配
17
+
18
+ ## 安装使用
19
+
20
+ ```tsx
21
+ import { TaskCard } from '@beppla/tapas-ui';
22
+ ```
23
+
24
+ ## Props
25
+
26
+ | 属性 | 类型 | 默认值 | 说明 |
27
+ |------|------|--------|------|
28
+ | title | `string` | - | 任务标题(必填) |
29
+ | description | `string[]` | - | 描述文本数组(必填) |
30
+ | state | `keyof typeof TaskStatus` | - | 任务状态(必填) |
31
+ | timeRange | `string[]` | - | 时间范围 [start, end](必填) |
32
+ | completion | `number` | - | 完成比例(0-1) |
33
+ | statusText | `Record<keyof typeof TaskStatus, string>` | - | 自定义状态文本映射 |
34
+ | completedText | `string` | - | 完成状态显示文本 |
35
+ | style | `CSSProperties` | `{}` | 自定义外层样式 |
36
+
37
+ ### TaskStatus 枚举
38
+
39
+ ```tsx
40
+ enum TaskStatus {
41
+ Waiting = 'Waiting',
42
+ Ongoing = 'Ongoing',
43
+ Delay = 'Delay',
44
+ Completed = 'Completed',
45
+ }
46
+ ```
47
+
48
+ ## 使用示例
49
+
50
+ ### 进行中的任务
51
+
52
+ ```tsx
53
+ <TaskCard
54
+ title="Kitchen preparation"
55
+ description={['Table 5', 'Main course']}
56
+ state="Ongoing"
57
+ timeRange={['09:00', '10:30']}
58
+ completion={0.6}
59
+ />
60
+ ```
61
+
62
+ ### 延迟任务
63
+
64
+ ```tsx
65
+ <TaskCard
66
+ title="Delivery order #123"
67
+ description={['Customer: John', 'Priority: High']}
68
+ state="Delay"
69
+ timeRange={['14:00', '15:00']}
70
+ completion={0.3}
71
+ />
72
+ ```
73
+
74
+ ### 已完成任务
75
+
76
+ ```tsx
77
+ <TaskCard
78
+ title="Inventory check"
79
+ description={['Warehouse A']}
80
+ state="Completed"
81
+ timeRange={['08:00', '09:00']}
82
+ completedText="Done"
83
+ />
84
+ ```
85
+
86
+ ### 自定义状态文本
87
+
88
+ ```tsx
89
+ <TaskCard
90
+ title="Task"
91
+ description={['Info']}
92
+ state="Waiting"
93
+ timeRange={['10:00', '11:00']}
94
+ statusText={{
95
+ Waiting: 'Pending',
96
+ Ongoing: 'In Progress',
97
+ Delay: 'Overdue',
98
+ Completed: 'Finished',
99
+ }}
100
+ />
101
+ ```
102
+
103
+ ## 注意事项
104
+
105
+ - 组件使用 HTML div + span 元素,仅适用于 Web 平台
106
+ - `completion` 值范围 0-1,Completed 状态自动设为 1,Waiting 状态自动设为 0
107
+ - 进度背景宽度通过 CSS calc 计算:`calc(completion * 100% + 28px)`
108
+ - 描述文本超长会自动省略(text-overflow: ellipsis)
109
+ - 卡片使用 @rneui/themed 的 Card 组件,带有 boxShadow 效果
110
+ - 需在 `ThemeProvider` 内使用