@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,122 @@
1
+ # ListItem
2
+
3
+ 列表项组件,基于 @rneui/themed ListItem 封装,支持选中状态、搜索高亮、描述文本、数量角标等功能,适合构建可交互的选择列表。
4
+
5
+ ## 功能特性
6
+
7
+ - ✅ 选中状态指示(背景色变化 + 勾选图标)
8
+ - ✅ 搜索关键字高亮显示(name 和 desc 同时高亮)
9
+ - ✅ 支持主标题和描述文本
10
+ - ✅ 数量角标(number 属性,圆形背景主题色)
11
+ - ✅ 鼠标悬停效果(Web 端 Hoverable)
12
+ - ✅ 禁用状态,颜色置灰且不可点击
13
+ - ✅ 首末项圆角支持(isFirst / isLast,12px 圆角)
14
+ - ✅ 高度自定义样式:容器、标题、描述、搜索高亮
15
+ - ✅ 文本自适应宽度,自动单行截断
16
+
17
+ ## 安装使用
18
+
19
+ ```tsx
20
+ import ListItem from '@beppla/tapas-ui/components/ListItem/ListItem';
21
+ ```
22
+
23
+ ## Props
24
+
25
+ | 属性 | 类型 | 默认值 | 说明 |
26
+ |------|------|--------|------|
27
+ | item | `ItemProps` | (必填) | 列表项数据 |
28
+ | selected | `ItemProps` | (必填) | 当前选中项(通过 value 比较) |
29
+ | key | `number \| string` | (必填) | 唯一标识 |
30
+ | onItemPress | `(item: ItemProps) => void` | (必填) | 点击回调 |
31
+ | disabled | `boolean` | - | 是否禁用 |
32
+ | isFirst | `boolean` | - | 是否为第一项(添加顶部圆角) |
33
+ | isLast | `boolean` | - | 是否为最后一项(添加底部圆角) |
34
+ | search | `string` | - | 搜索关键字,匹配部分高亮 |
35
+ | containerStyle | `StyleProp<ViewStyle>` | - | 外层容器样式 |
36
+ | itemContainerStyle | `StyleProp<ViewStyle>` | - | 项容器样式 |
37
+ | titleContainerStyle | `StyleProp<ViewStyle>` | - | 标题容器样式 |
38
+ | searchHighlightStyle | `StyleProp<TextStyle>` | - | 搜索高亮文本样式 |
39
+ | titleStyle | `StyleProp<TextStyle>` | - | 标题文本样式 |
40
+ | descStyle | `StyleProp<TextStyle>` | - | 描述文本样式 |
41
+ | testID | `string` | - | 测试标识 |
42
+
43
+ ### ItemProps 接口
44
+
45
+ | 属性 | 类型 | 说明 |
46
+ |------|------|------|
47
+ | name | `string` | 显示名称(必填) |
48
+ | value | `string \| number` | 值(必填),用于比较选中状态 |
49
+ | id | `string \| number` | 唯一标识 |
50
+ | hide | `boolean` | 是否隐藏 |
51
+ | desc | `string` | 描述文本 |
52
+ | number | `number` | 数量角标 |
53
+
54
+ ## 使用示例
55
+
56
+ ### 基础用法
57
+
58
+ ```tsx
59
+ const data = [
60
+ { name: 'Apple', value: 'apple' },
61
+ { name: 'Banana', value: 'banana' },
62
+ { name: 'Cherry', value: 'cherry' },
63
+ ];
64
+
65
+ const [selected, setSelected] = useState(data[0]);
66
+
67
+ {data.map((item, index) => (
68
+ <ListItem
69
+ key={index}
70
+ item={item}
71
+ selected={selected}
72
+ onItemPress={(value) => setSelected(value)}
73
+ isFirst={index === 0}
74
+ isLast={index === data.length - 1}
75
+ />
76
+ ))}
77
+ ```
78
+
79
+ ### 带描述和搜索高亮
80
+
81
+ ```tsx
82
+ <ListItem
83
+ key={0}
84
+ item={{ name: 'John', value: 'john', desc: 'Manager' }}
85
+ selected={selected}
86
+ onItemPress={setSelected}
87
+ search="jo"
88
+ searchHighlightStyle={{ color: 'red' }}
89
+ />
90
+ ```
91
+
92
+ ### 带数量角标
93
+
94
+ ```tsx
95
+ <ListItem
96
+ key={0}
97
+ item={{ name: 'Orders', value: 'orders', number: 5 }}
98
+ selected={selected}
99
+ onItemPress={setSelected}
100
+ />
101
+ ```
102
+
103
+ ### 禁用状态
104
+
105
+ ```tsx
106
+ <ListItem
107
+ key={0}
108
+ item={{ name: 'Unavailable', value: 'unavailable' }}
109
+ selected={selected}
110
+ onItemPress={setSelected}
111
+ disabled
112
+ />
113
+ ```
114
+
115
+ ## 注意事项
116
+
117
+ - 选中状态通过比较 `selected.value === item.value` 判断
118
+ - 当 `item.number` 存在时显示数量角标(白字主题色背景),否则选中时显示勾选图标
119
+ - 禁用状态下点击不会触发 `onItemPress`
120
+ - `isFirst` / `isLast` 用于列表首末项圆角(12px),需手动传入
121
+ - 搜索高亮使用正则分割文本,大小写不敏感,同时作用于 name 和 desc 字段
122
+ - 列表项固定高度 48px
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  import React, { useEffect, useState, useCallback, useMemo } from "react";
4
- import { View, Text, Modal, Pressable } from "react-native";
4
+ import { View, Text, Modal, Pressable, useWindowDimensions } from "react-native";
5
5
  import { withTheme, makeStyles, useTheme } from "@rneui/themed";
6
6
  import TapasIcon from "../Icons/TapasIcon";
7
7
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
@@ -22,6 +22,10 @@ const MessageBox = ({
22
22
  onConfirm
23
23
  }) => {
24
24
  const theme = useTheme();
25
+ const {
26
+ width: windowWidth
27
+ } = useWindowDimensions();
28
+ const isPhone = windowWidth <= 430;
25
29
  const styles = useStyles();
26
30
  const [modalVisible, setModalVisible] = useState(false);
27
31
  useEffect(() => {
@@ -63,7 +67,9 @@ const MessageBox = ({
63
67
  children: /*#__PURE__*/_jsx(View, {
64
68
  style: styles.modalContainer,
65
69
  children: /*#__PURE__*/_jsxs(View, {
66
- style: styles.modalContent,
70
+ style: [styles.modalContent, isPhone && {
71
+ width: windowWidth - 32
72
+ }],
67
73
  children: [/*#__PURE__*/_jsxs(View, {
68
74
  style: styles.messagebox_header,
69
75
  children: [stateIcon ? /*#__PURE__*/_jsx(View, {
@@ -1 +1 @@
1
- {"version":3,"names":["React","useEffect","useState","useCallback","useMemo","View","Text","Modal","Pressable","withTheme","makeStyles","useTheme","TapasIcon","jsx","_jsx","jsxs","_jsxs","MessageBox","state","title","text","icon","visible","confirmBtnText","closeBtnText","hideFooter","hideCloseBtn","hideConfirmBtn","descNumberOfLines","onVisibilityChange","onClose","onConfirm","theme","styles","useStyles","modalVisible","setModalVisible","Boolean","stateIcon","handleClose","handleConfirm","handleRequestClose","animationType","transparent","onRequestClose","children","style","modalContainer","modalContent","messagebox_header","messagebox_header_icon","name","size","color","colors","primary","messagebox_header_txt_con","messagebox_header_txt","numberOfLines","ellipsizeMode","messagebox_main","messagebox_main_txt","messagebox_footer","messagebox_btn","onPress","messagebox_btn_txt","backgroundColor","white","flex","justifyContent","alignItems","zIndex","width","borderRadius","display","flexDirection","padding","gap","height","alignContent","overflow","fontSize","fontWeight","secondary","paddingLeft","paddingRight"],"sourceRoot":"../../../components","sources":["MessageBox/MessageBox.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,QAAQ,EAAEC,WAAW,EAAEC,OAAO,QAAQ,OAAO;AACxE,SAASC,IAAI,EAAEC,IAAI,EAAEC,KAAK,EAAEC,SAAS,QAAQ,cAAc;AAC3D,SAASC,SAAS,EAAEC,UAAU,EAAEC,QAAQ,QAAQ,eAAe;AAC/D,OAAOC,SAAS,MAAM,oBAAoB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAoB3C,MAAMC,UAAqC,GAAGA,CAAC;EAC7CC,KAAK;EACLC,KAAK;EACLC,IAAI;EACJC,IAAI;EACJC,OAAO;EACPC,cAAc;EACdC,YAAY;EACZC,UAAU,GAAG,KAAK;EAClBC,YAAY,GAAG,KAAK;EACpBC,cAAc,GAAG,KAAK;EACtBC,iBAAiB,GAAG,CAAC;EACrBC,kBAAkB;EAClBC,OAAO;EACPC;AACF,CAAC,KAAK;EACJ,MAAMC,KAAK,GAAGrB,QAAQ,CAAC,CAAC;EACxB,MAAMsB,MAAM,GAAGC,SAAS,CAAC,CAAC;EAC1B,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAGlC,QAAQ,CAAC,KAAK,CAAC;EAEvDD,SAAS,CAAC,MAAM;IACdmC,eAAe,CAACC,OAAO,CAACf,OAAO,CAAC,CAAC;EACnC,CAAC,EAAE,CAACA,OAAO,CAAC,CAAC;EAEb,MAAMgB,SAAS,GAAGlC,OAAO,CAAC,MAAM;IAC9B,IAAIiB,IAAI,EAAE,OAAOA,IAAI;IAErB,QAAQH,KAAK;MACX,KAAK,SAAS;QACZ,OAAO,cAAc;MACvB,KAAK,SAAS;QACZ,OAAO,SAAS;MAClB,KAAK,OAAO;QACV,OAAO,OAAO;MAChB;QACE,OAAO,EAAE;IACb;EACF,CAAC,EAAE,CAACA,KAAK,EAAEG,IAAI,CAAC,CAAC;EAEjB,MAAMkB,WAAW,GAAGpC,WAAW,CAAC,MAAM;IACpC,IAAI2B,OAAO,EAAE;MACXA,OAAO,CAAC,CAAC;IACX,CAAC,MAAM,IAAID,kBAAkB,EAAE;MAC7BA,kBAAkB,CAAC,KAAK,CAAC;IAC3B,CAAC,MAAM;MACLO,eAAe,CAAC,KAAK,CAAC;IACxB;EACF,CAAC,EAAE,CAACN,OAAO,EAAED,kBAAkB,CAAC,CAAC;EAEjC,MAAMW,aAAa,GAAGrC,WAAW,CAAC,MAAM;IACtC4B,SAAS,GAAG,CAAC;EACf,CAAC,EAAE,CAACA,SAAS,CAAC,CAAC;EAEf,MAAMU,kBAAkB,GAAGtC,WAAW,CAAC,MAAM;IAC3C0B,kBAAkB,GAAGA,kBAAkB,CAAC,KAAK,CAAC,GAAGO,eAAe,CAAC,KAAK,CAAC;EACzE,CAAC,EAAE,CAACP,kBAAkB,CAAC,CAAC;EAExB,oBACEf,IAAA,CAACP,KAAK;IACJmC,aAAa,EAAC,MAAM;IACpBC,WAAW,EAAE,IAAK;IAClBrB,OAAO,EAAEa,YAAa;IACtBS,cAAc,EAAEH,kBAAmB;IAAAI,QAAA,eAEnC/B,IAAA,CAACT,IAAI;MAACyC,KAAK,EAAEb,MAAM,CAACc,cAAe;MAAAF,QAAA,eACjC7B,KAAA,CAACX,IAAI;QAACyC,KAAK,EAAEb,MAAM,CAACe,YAAa;QAAAH,QAAA,gBAC/B7B,KAAA,CAACX,IAAI;UAACyC,KAAK,EAAEb,MAAM,CAACgB,iBAAkB;UAAAJ,QAAA,GACnCP,SAAS,gBACRxB,IAAA,CAACT,IAAI;YAACyC,KAAK,EAAEb,MAAM,CAACiB,sBAAuB;YAAAL,QAAA,eACzC/B,IAAA,CAACF,SAAS;cACRuC,IAAI,EAAEb,SAAU;cAChBc,IAAI,EAAE,EAAG;cACTC,KAAK,EAAErB,KAAK,CAACA,KAAK,CAACsB,MAAM,CAACC;YAAQ,CACnC;UAAC,CACE,CAAC,GACL,IAAI,eACRzC,IAAA,CAACT,IAAI;YAACyC,KAAK,EAAEb,MAAM,CAACuB,yBAA0B;YAAAX,QAAA,EAC3C1B,KAAK,gBACJL,IAAA,CAACR,IAAI;cACHwC,KAAK,EAAEb,MAAM,CAACwB,qBAAsB;cACpCC,aAAa,EAAE,CAAE;cACjBC,aAAa,EAAC,MAAM;cAAAd,QAAA,EAEnB1B;YAAK,CACF,CAAC,GACL;UAAI,CACJ,CAAC;QAAA,CACH,CAAC,eACPL,IAAA,CAACT,IAAI;UAACyC,KAAK,EAAEb,MAAM,CAAC2B,eAAgB;UAAAf,QAAA,eAClC/B,IAAA,CAACR,IAAI;YACHwC,KAAK,EAAEb,MAAM,CAAC4B,mBAAoB;YAClCH,aAAa,EAAE9B,iBAAkB;YACjC+B,aAAa,EAAC,MAAM;YAAAd,QAAA,EAEnBzB;UAAI,CACD;QAAC,CACH,CAAC,EACN,CAACK,UAAU,gBACVT,KAAA,CAACX,IAAI;UAACyC,KAAK,EAAEb,MAAM,CAAC6B,iBAAkB;UAAAjB,QAAA,GACnC,CAACnB,YAAY,gBACZZ,IAAA,CAACN,SAAS;YACRsC,KAAK,EAAEb,MAAM,CAAC8B,cAAe;YAC7BC,OAAO,EAAEzB,WAAY;YAAAM,QAAA,eAErB/B,IAAA,CAACR,IAAI;cACHwC,KAAK,EAAEb,MAAM,CAACgC,kBAAmB;cACjCP,aAAa,EAAE,CAAE;cACjBC,aAAa,EAAC,MAAM;cAAAd,QAAA,EAEnBrB,YAAY,IAAI;YAAO,CACpB;UAAC,CACE,CAAC,GACV,IAAI,EACP,CAACG,cAAc,gBACdb,IAAA,CAACN,SAAS;YACRsC,KAAK,EAAE,CACLb,MAAM,CAAC8B,cAAc,EACrB;cAAEG,eAAe,EAAElC,KAAK,CAACA,KAAK,CAACsB,MAAM,CAACC;YAAQ,CAAC,CAC/C;YACFS,OAAO,EAAExB,aAAc;YAAAK,QAAA,eAEvB/B,IAAA,CAACR,IAAI;cACHwC,KAAK,EAAE,CACLb,MAAM,CAACgC,kBAAkB,EACzB;gBAAEZ,KAAK,EAAErB,KAAK,CAACA,KAAK,CAACsB,MAAM,CAACa;cAAM,CAAC,CACnC;cACFT,aAAa,EAAE,CAAE;cACjBC,aAAa,EAAC,MAAM;cAAAd,QAAA,EAEnBtB,cAAc,IAAI;YAAS,CACxB;UAAC,CACE,CAAC,GACV,IAAI;QAAA,CACJ,CAAC,GACL,IAAI;MAAA,CACJ;IAAC,CACH;EAAC,CACF,CAAC;AAEZ,CAAC;AAED,MAAMW,SAAS,GAAGxB,UAAU,CAAEsB,KAAK,KAAM;EACvCe,cAAc,EAAE;IACdqB,IAAI,EAAE,CAAC;IACPC,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE,QAAQ;IACpBJ,eAAe,EAAE,oBAAoB;IACrCK,MAAM,EAAE;EACV,CAAC;EACDvB,YAAY,EAAE;IACZwB,KAAK,EAAE,GAAG;IACVC,YAAY,EAAE,EAAE;IAChBP,eAAe,EAAElC,KAAK,EAAEsB,MAAM,EAAEa,KAAK;IACrCO,OAAO,EAAE,MAAM;IACfC,aAAa,EAAE,QAAQ;IACvBC,OAAO,EAAE,EAAE;IACXC,GAAG,EAAE;EACP,CAAC;EACD5B,iBAAiB,EAAE;IACjByB,OAAO,EAAE,MAAM;IACfC,aAAa,EAAE,KAAK;IACpBE,GAAG,EAAE,CAAC;IACNC,MAAM,EAAE;EACV,CAAC;EACD5B,sBAAsB,EAAE;IACtBsB,KAAK,EAAE,EAAE;IACTM,MAAM,EAAE,EAAE;IACVJ,OAAO,EAAE,MAAM;IACfC,aAAa,EAAE,QAAQ;IACvBN,cAAc,EAAE,QAAQ;IACxBU,YAAY,EAAE,QAAQ;IACtBT,UAAU,EAAE;EACd,CAAC;EACDd,yBAAyB,EAAE;IACzBkB,OAAO,EAAE,MAAM;IACfC,aAAa,EAAE,KAAK;IACpBP,IAAI,EAAE,CAAC;IACPY,QAAQ,EAAE;EACZ,CAAC;EACDvB,qBAAqB,EAAE;IACrBwB,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAE,KAAK;IACjB7B,KAAK,EAAErB,KAAK,EAAEsB,MAAM,EAAEC;EACxB,CAAC;EACDK,eAAe,EAAE;IACfc,OAAO,EAAE,MAAM;IACfC,aAAa,EAAE,QAAQ;IACvBP,IAAI,EAAE,CAAC;IACPY,QAAQ,EAAE;EACZ,CAAC;EACDnB,mBAAmB,EAAE;IACnBoB,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAE,KAAK;IACjB7B,KAAK,EAAErB,KAAK,EAAEsB,MAAM,EAAE6B;EACxB,CAAC;EACDrB,iBAAiB,EAAE;IACjBY,OAAO,EAAE,MAAM;IACfC,aAAa,EAAE,KAAK;IACpBN,cAAc,EAAE,UAAU;IAC1BQ,GAAG,EAAE,CAAC;IACNC,MAAM,EAAE;EACV,CAAC;EACDf,cAAc,EAAE;IACde,MAAM,EAAE,EAAE;IACVJ,OAAO,EAAE,MAAM;IACfC,aAAa,EAAE,KAAK;IACpBN,cAAc,EAAE,QAAQ;IACxBU,YAAY,EAAE,QAAQ;IACtBT,UAAU,EAAE,QAAQ;IACpBc,WAAW,EAAE,EAAE;IACfC,YAAY,EAAE,EAAE;IAChBZ,YAAY,EAAE;EAChB,CAAC;EACDR,kBAAkB,EAAE;IAClBgB,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAE;EACd;AACF,CAAC,CAAC,CAAC;AAEH,eAAezE,SAAS,CAACQ,UAAU,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","useEffect","useState","useCallback","useMemo","View","Text","Modal","Pressable","useWindowDimensions","withTheme","makeStyles","useTheme","TapasIcon","jsx","_jsx","jsxs","_jsxs","MessageBox","state","title","text","icon","visible","confirmBtnText","closeBtnText","hideFooter","hideCloseBtn","hideConfirmBtn","descNumberOfLines","onVisibilityChange","onClose","onConfirm","theme","width","windowWidth","isPhone","styles","useStyles","modalVisible","setModalVisible","Boolean","stateIcon","handleClose","handleConfirm","handleRequestClose","animationType","transparent","onRequestClose","children","style","modalContainer","modalContent","messagebox_header","messagebox_header_icon","name","size","color","colors","primary","messagebox_header_txt_con","messagebox_header_txt","numberOfLines","ellipsizeMode","messagebox_main","messagebox_main_txt","messagebox_footer","messagebox_btn","onPress","messagebox_btn_txt","backgroundColor","white","flex","justifyContent","alignItems","zIndex","borderRadius","display","flexDirection","padding","gap","height","alignContent","overflow","fontSize","fontWeight","secondary","paddingLeft","paddingRight"],"sourceRoot":"../../../components","sources":["MessageBox/MessageBox.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,QAAQ,EAAEC,WAAW,EAAEC,OAAO,QAAQ,OAAO;AACxE,SAASC,IAAI,EAAEC,IAAI,EAAEC,KAAK,EAAEC,SAAS,EAAEC,mBAAmB,QAAQ,cAAc;AAChF,SAASC,SAAS,EAAEC,UAAU,EAAEC,QAAQ,QAAQ,eAAe;AAC/D,OAAOC,SAAS,MAAM,oBAAoB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAoB3C,MAAMC,UAAqC,GAAGA,CAAC;EAC7CC,KAAK;EACLC,KAAK;EACLC,IAAI;EACJC,IAAI;EACJC,OAAO;EACPC,cAAc;EACdC,YAAY;EACZC,UAAU,GAAG,KAAK;EAClBC,YAAY,GAAG,KAAK;EACpBC,cAAc,GAAG,KAAK;EACtBC,iBAAiB,GAAG,CAAC;EACrBC,kBAAkB;EAClBC,OAAO;EACPC;AACF,CAAC,KAAK;EACJ,MAAMC,KAAK,GAAGrB,QAAQ,CAAC,CAAC;EACxB,MAAM;IAAEsB,KAAK,EAAEC;EAAY,CAAC,GAAG1B,mBAAmB,CAAC,CAAC;EACpD,MAAM2B,OAAO,GAAGD,WAAW,IAAI,GAAG;EAClC,MAAME,MAAM,GAAGC,SAAS,CAAC,CAAC;EAC1B,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAGtC,QAAQ,CAAC,KAAK,CAAC;EAEvDD,SAAS,CAAC,MAAM;IACduC,eAAe,CAACC,OAAO,CAAClB,OAAO,CAAC,CAAC;EACnC,CAAC,EAAE,CAACA,OAAO,CAAC,CAAC;EAEb,MAAMmB,SAAS,GAAGtC,OAAO,CAAC,MAAM;IAC9B,IAAIkB,IAAI,EAAE,OAAOA,IAAI;IAErB,QAAQH,KAAK;MACX,KAAK,SAAS;QACZ,OAAO,cAAc;MACvB,KAAK,SAAS;QACZ,OAAO,SAAS;MAClB,KAAK,OAAO;QACV,OAAO,OAAO;MAChB;QACE,OAAO,EAAE;IACb;EACF,CAAC,EAAE,CAACA,KAAK,EAAEG,IAAI,CAAC,CAAC;EAEjB,MAAMqB,WAAW,GAAGxC,WAAW,CAAC,MAAM;IACpC,IAAI4B,OAAO,EAAE;MACXA,OAAO,CAAC,CAAC;IACX,CAAC,MAAM,IAAID,kBAAkB,EAAE;MAC7BA,kBAAkB,CAAC,KAAK,CAAC;IAC3B,CAAC,MAAM;MACLU,eAAe,CAAC,KAAK,CAAC;IACxB;EACF,CAAC,EAAE,CAACT,OAAO,EAAED,kBAAkB,CAAC,CAAC;EAEjC,MAAMc,aAAa,GAAGzC,WAAW,CAAC,MAAM;IACtC6B,SAAS,GAAG,CAAC;EACf,CAAC,EAAE,CAACA,SAAS,CAAC,CAAC;EAEf,MAAMa,kBAAkB,GAAG1C,WAAW,CAAC,MAAM;IAC3C2B,kBAAkB,GAAGA,kBAAkB,CAAC,KAAK,CAAC,GAAGU,eAAe,CAAC,KAAK,CAAC;EACzE,CAAC,EAAE,CAACV,kBAAkB,CAAC,CAAC;EAExB,oBACEf,IAAA,CAACR,KAAK;IACJuC,aAAa,EAAC,MAAM;IACpBC,WAAW,EAAE,IAAK;IAClBxB,OAAO,EAAEgB,YAAa;IACtBS,cAAc,EAAEH,kBAAmB;IAAAI,QAAA,eAEnClC,IAAA,CAACV,IAAI;MAAC6C,KAAK,EAAEb,MAAM,CAACc,cAAe;MAAAF,QAAA,eACjChC,KAAA,CAACZ,IAAI;QAAC6C,KAAK,EAAE,CAACb,MAAM,CAACe,YAAY,EAAEhB,OAAO,IAAI;UAAEF,KAAK,EAAEC,WAAW,GAAG;QAAG,CAAC,CAAE;QAAAc,QAAA,gBACzEhC,KAAA,CAACZ,IAAI;UAAC6C,KAAK,EAAEb,MAAM,CAACgB,iBAAkB;UAAAJ,QAAA,GACnCP,SAAS,gBACR3B,IAAA,CAACV,IAAI;YAAC6C,KAAK,EAAEb,MAAM,CAACiB,sBAAuB;YAAAL,QAAA,eACzClC,IAAA,CAACF,SAAS;cACR0C,IAAI,EAAEb,SAAU;cAChBc,IAAI,EAAE,EAAG;cACTC,KAAK,EAAExB,KAAK,CAACA,KAAK,CAACyB,MAAM,CAACC;YAAQ,CACnC;UAAC,CACE,CAAC,GACL,IAAI,eACR5C,IAAA,CAACV,IAAI;YAAC6C,KAAK,EAAEb,MAAM,CAACuB,yBAA0B;YAAAX,QAAA,EAC3C7B,KAAK,gBACJL,IAAA,CAACT,IAAI;cACH4C,KAAK,EAAEb,MAAM,CAACwB,qBAAsB;cACpCC,aAAa,EAAE,CAAE;cACjBC,aAAa,EAAC,MAAM;cAAAd,QAAA,EAEnB7B;YAAK,CACF,CAAC,GACL;UAAI,CACJ,CAAC;QAAA,CACH,CAAC,eACPL,IAAA,CAACV,IAAI;UAAC6C,KAAK,EAAEb,MAAM,CAAC2B,eAAgB;UAAAf,QAAA,eAClClC,IAAA,CAACT,IAAI;YACH4C,KAAK,EAAEb,MAAM,CAAC4B,mBAAoB;YAClCH,aAAa,EAAEjC,iBAAkB;YACjCkC,aAAa,EAAC,MAAM;YAAAd,QAAA,EAEnB5B;UAAI,CACD;QAAC,CACH,CAAC,EACN,CAACK,UAAU,gBACVT,KAAA,CAACZ,IAAI;UAAC6C,KAAK,EAAEb,MAAM,CAAC6B,iBAAkB;UAAAjB,QAAA,GACnC,CAACtB,YAAY,gBACZZ,IAAA,CAACP,SAAS;YACR0C,KAAK,EAAEb,MAAM,CAAC8B,cAAe;YAC7BC,OAAO,EAAEzB,WAAY;YAAAM,QAAA,eAErBlC,IAAA,CAACT,IAAI;cACH4C,KAAK,EAAEb,MAAM,CAACgC,kBAAmB;cACjCP,aAAa,EAAE,CAAE;cACjBC,aAAa,EAAC,MAAM;cAAAd,QAAA,EAEnBxB,YAAY,IAAI;YAAO,CACpB;UAAC,CACE,CAAC,GACV,IAAI,EACP,CAACG,cAAc,gBACdb,IAAA,CAACP,SAAS;YACR0C,KAAK,EAAE,CACLb,MAAM,CAAC8B,cAAc,EACrB;cAAEG,eAAe,EAAErC,KAAK,CAACA,KAAK,CAACyB,MAAM,CAACC;YAAQ,CAAC,CAC/C;YACFS,OAAO,EAAExB,aAAc;YAAAK,QAAA,eAEvBlC,IAAA,CAACT,IAAI;cACH4C,KAAK,EAAE,CACLb,MAAM,CAACgC,kBAAkB,EACzB;gBAAEZ,KAAK,EAAExB,KAAK,CAACA,KAAK,CAACyB,MAAM,CAACa;cAAM,CAAC,CACnC;cACFT,aAAa,EAAE,CAAE;cACjBC,aAAa,EAAC,MAAM;cAAAd,QAAA,EAEnBzB,cAAc,IAAI;YAAS,CACxB;UAAC,CACE,CAAC,GACV,IAAI;QAAA,CACJ,CAAC,GACL,IAAI;MAAA,CACJ;IAAC,CACH;EAAC,CACF,CAAC;AAEZ,CAAC;AAED,MAAMc,SAAS,GAAG3B,UAAU,CAAEsB,KAAK,KAAM;EACvCkB,cAAc,EAAE;IACdqB,IAAI,EAAE,CAAC;IACPC,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE,QAAQ;IACpBJ,eAAe,EAAE,oBAAoB;IACrCK,MAAM,EAAE;EACV,CAAC;EACDvB,YAAY,EAAE;IACZlB,KAAK,EAAE,GAAG;IACV0C,YAAY,EAAE,EAAE;IAChBN,eAAe,EAAErC,KAAK,EAAEyB,MAAM,EAAEa,KAAK;IACrCM,OAAO,EAAE,MAAM;IACfC,aAAa,EAAE,QAAQ;IACvBC,OAAO,EAAE,EAAE;IACXC,GAAG,EAAE;EACP,CAAC;EACD3B,iBAAiB,EAAE;IACjBwB,OAAO,EAAE,MAAM;IACfC,aAAa,EAAE,KAAK;IACpBE,GAAG,EAAE,CAAC;IACNC,MAAM,EAAE;EACV,CAAC;EACD3B,sBAAsB,EAAE;IACtBpB,KAAK,EAAE,EAAE;IACT+C,MAAM,EAAE,EAAE;IACVJ,OAAO,EAAE,MAAM;IACfC,aAAa,EAAE,QAAQ;IACvBL,cAAc,EAAE,QAAQ;IACxBS,YAAY,EAAE,QAAQ;IACtBR,UAAU,EAAE;EACd,CAAC;EACDd,yBAAyB,EAAE;IACzBiB,OAAO,EAAE,MAAM;IACfC,aAAa,EAAE,KAAK;IACpBN,IAAI,EAAE,CAAC;IACPW,QAAQ,EAAE;EACZ,CAAC;EACDtB,qBAAqB,EAAE;IACrBuB,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAE,KAAK;IACjB5B,KAAK,EAAExB,KAAK,EAAEyB,MAAM,EAAEC;EACxB,CAAC;EACDK,eAAe,EAAE;IACfa,OAAO,EAAE,MAAM;IACfC,aAAa,EAAE,QAAQ;IACvBN,IAAI,EAAE,CAAC;IACPW,QAAQ,EAAE;EACZ,CAAC;EACDlB,mBAAmB,EAAE;IACnBmB,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAE,KAAK;IACjB5B,KAAK,EAAExB,KAAK,EAAEyB,MAAM,EAAE4B;EACxB,CAAC;EACDpB,iBAAiB,EAAE;IACjBW,OAAO,EAAE,MAAM;IACfC,aAAa,EAAE,KAAK;IACpBL,cAAc,EAAE,UAAU;IAC1BO,GAAG,EAAE,CAAC;IACNC,MAAM,EAAE;EACV,CAAC;EACDd,cAAc,EAAE;IACdc,MAAM,EAAE,EAAE;IACVJ,OAAO,EAAE,MAAM;IACfC,aAAa,EAAE,KAAK;IACpBL,cAAc,EAAE,QAAQ;IACxBS,YAAY,EAAE,QAAQ;IACtBR,UAAU,EAAE,QAAQ;IACpBa,WAAW,EAAE,EAAE;IACfC,YAAY,EAAE,EAAE;IAChBZ,YAAY,EAAE;EAChB,CAAC;EACDP,kBAAkB,EAAE;IAClBe,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAE;EACd;AACF,CAAC,CAAC,CAAC;AAEH,eAAe3E,SAAS,CAACQ,UAAU,CAAC","ignoreList":[]}
@@ -0,0 +1,120 @@
1
+ # MessageBox
2
+
3
+ 模态对话框组件,用于显示重要信息和获取用户确认。支持 success、warning、error 三种状态,提供灵活的按钮配置(隐藏确认/取消按钮、隐藏整个底部栏),适合操作确认、错误提示、成功反馈等场景。
4
+
5
+ ## 功能特性
6
+
7
+ - ✅ 支持 success、warning、error 三种状态
8
+ - ✅ 状态自动匹配图标(check_circle / warning / error)
9
+ - ✅ 可自定义图标名称覆盖默认状态图标
10
+ - ✅ 灵活的按钮配置:隐藏确认按钮、隐藏取消按钮、隐藏整个底部栏
11
+ - ✅ 自定义确认和取消按钮文本
12
+ - ✅ 描述文本行数限制(descNumberOfLines)
13
+ - ✅ 淡入淡出动画(animationType="fade")
14
+ - ✅ 透明遮罩背景
15
+ - ✅ 支持 onVisibilityChange 双向绑定控制
16
+
17
+ ## 安装使用
18
+
19
+ ```tsx
20
+ import { MessageBox } from '@beppla/tapas-ui';
21
+ ```
22
+
23
+ ## Props
24
+
25
+ | 属性 | 类型 | 默认值 | 说明 |
26
+ |------|------|--------|------|
27
+ | visible | `boolean` | - | 是否显示对话框 |
28
+ | state | `'success' \| 'warning' \| 'error'` | - | 状态类型 |
29
+ | icon | `string` | 根据 state 自动选择 | 自定义图标名称 |
30
+ | title | `string` | - | 标题文本 |
31
+ | text | `string` | - | 描述内容 |
32
+ | hideFooter | `boolean` | `false` | 是否隐藏整个底部按钮栏 |
33
+ | hideCloseBtn | `boolean` | `false` | 是否隐藏取消按钮 |
34
+ | hideConfirmBtn | `boolean` | `false` | 是否隐藏确认按钮 |
35
+ | confirmBtnText | `string` | `'Confirm'` | 确认按钮文本 |
36
+ | closeBtnText | `string` | `'Close'` | 取消按钮文本 |
37
+ | descNumberOfLines | `number` | `3` | 描述文本最大行数 |
38
+ | onVisibilityChange | `(val: boolean) => void` | - | 可见状态变化回调 |
39
+ | onConfirm | `() => void` | - | 确认按钮点击回调 |
40
+ | onClose | `() => void` | - | 取消按钮点击回调 |
41
+
42
+ ## 使用示例
43
+
44
+ ### 基础用法
45
+
46
+ ```tsx
47
+ const [visible, setVisible] = useState(false);
48
+
49
+ <MessageBox
50
+ visible={visible}
51
+ title="Confirm"
52
+ text="Are you sure you want to proceed?"
53
+ confirmBtnText="OK"
54
+ closeBtnText="Cancel"
55
+ onVisibilityChange={setVisible}
56
+ onConfirm={() => {
57
+ handleConfirm();
58
+ setVisible(false);
59
+ }}
60
+ onClose={() => setVisible(false)}
61
+ />
62
+ ```
63
+
64
+ ### 不同状态
65
+
66
+ ```tsx
67
+ <MessageBox
68
+ visible={visible}
69
+ state="success"
70
+ title="Success"
71
+ text="Operation completed!"
72
+ hideCloseBtn
73
+ confirmBtnText="OK"
74
+ onConfirm={() => setVisible(false)}
75
+ />
76
+
77
+ <MessageBox
78
+ visible={visible}
79
+ state="error"
80
+ title="Error"
81
+ text="Operation failed, please retry."
82
+ confirmBtnText="Retry"
83
+ closeBtnText="Close"
84
+ onConfirm={() => handleRetry()}
85
+ onClose={() => setVisible(false)}
86
+ />
87
+ ```
88
+
89
+ ### 仅确认按钮
90
+
91
+ ```tsx
92
+ <MessageBox
93
+ visible={visible}
94
+ title="Notice"
95
+ text="This is a notification."
96
+ hideCloseBtn={true}
97
+ confirmBtnText="Got it"
98
+ onConfirm={() => setVisible(false)}
99
+ />
100
+ ```
101
+
102
+ ### 无按钮(点击遮罩关闭)
103
+
104
+ ```tsx
105
+ <MessageBox
106
+ visible={visible}
107
+ title="Info"
108
+ text="Click backdrop to close."
109
+ hideFooter={true}
110
+ onVisibilityChange={setVisible}
111
+ />
112
+ ```
113
+
114
+ ## 注意事项
115
+
116
+ - 组件内部维护 `modalVisible` 状态,与外部 `visible` 同步
117
+ - 关闭优先级:`onClose` > `onVisibilityChange` > 内部 `setModalVisible(false)`
118
+ - 对话框固定宽度 392px,居中显示
119
+ - 需在 `ThemeProvider` 内使用
120
+ - 确认按钮使用主题 `primary` 色,取消按钮无背景色
@@ -0,0 +1,197 @@
1
+ # Navigation
2
+
3
+ 侧边导航栏组件,提供可展开/折叠的垂直导航菜单。支持导航项(navItems)和系统项(systemItems)两层分组,收起时仅显示图标,展开时显示图标和文本。
4
+
5
+ ## 功能特性
6
+
7
+ - 可展开/折叠的侧边导航(收起 56px,展开 336px)
8
+ - 导航项和系统项两层分组(系统项固定在底部)
9
+ - 点击 Logo 切换展开/折叠状态
10
+ - 选中项高亮显示(展开时背景高亮,收起时图标高亮)
11
+ - 移动端支持背景遮罩层(点击遮罩关闭导航)
12
+ - 可配置权限信息(`permissions` 字段)
13
+ - 支持 `selectedIndex` 受控选中
14
+ - 可选集成 React Navigation 自动路由导航
15
+ - 自定义 Logo 图片
16
+
17
+ ## 安装使用
18
+
19
+ ```tsx
20
+ import { Navigation, NavItem, NavItemType, SelectedItem } from '@beppla/tapas-ui';
21
+ ```
22
+
23
+ ## Props
24
+
25
+ | 属性 | 类型 | 默认值 | 说明 |
26
+ |------|------|--------|------|
27
+ | navItems | `NavItem[]` | - | 导航项数组 |
28
+ | systemItems | `NavItem[]` | - | 系统项数组(显示在底部) |
29
+ | logoImg | `ImageSourcePropType` | - | Logo 图片资源 |
30
+ | expanded | `boolean` | `false` | 是否展开导航菜单 |
31
+ | onItemPress | `(item: NavItem) => void` | - | 导航项点击回调 |
32
+ | onLogoPress | `() => void` | - | Logo 点击回调 |
33
+ | defaultSelectedItem | `SelectedItem` | - | 默认选中项 |
34
+ | selectedIndex | `number` | - | 选中项索引(受控模式,仅匹配 navItems) |
35
+ | visible | `boolean` | `true` | 导航栏是否可见 |
36
+ | onMaskPress | `() => void` | - | 背景遮罩点击回调(移动端) |
37
+ | navigation | `{ navigate: (routeName: string, params?: any) => void }` | - | React Navigation 对象(可选) |
38
+
39
+ ## 类型定义
40
+
41
+ ### NavItem
42
+
43
+ ```tsx
44
+ interface NavItem {
45
+ name: string; // 项目名称(展开时显示)
46
+ iconName: string; // TapasIcon 图标名称
47
+ url?: string; // 链接 URL(可选)
48
+ permissions?: Permissions[]; // 权限要求(可选)
49
+ }
50
+ ```
51
+
52
+ ### Permissions
53
+
54
+ ```tsx
55
+ interface Permissions {
56
+ resource: string; // 资源名
57
+ action: string; // 操作名
58
+ }
59
+ ```
60
+
61
+ ### NavItemType / SelectedItem
62
+
63
+ ```tsx
64
+ enum NavItemType {
65
+ Nav = 'nav', // 导航项
66
+ System = 'system', // 系统项
67
+ }
68
+
69
+ interface SelectedItem {
70
+ type: NavItemType; // 项目类型
71
+ selectedItemIndex: number; // 项目索引
72
+ }
73
+ ```
74
+
75
+ ## 使用示例
76
+
77
+ ### 基础导航
78
+
79
+ ```tsx
80
+ import { Navigation, NavItem, NavItemType } from '@beppla/tapas-ui';
81
+
82
+ const navItems: NavItem[] = [
83
+ { name: 'Dashboard', iconName: 'home' },
84
+ { name: 'Analytics', iconName: 'vector' },
85
+ { name: 'Products', iconName: 'product_items' },
86
+ { name: 'Messages', iconName: 'chat' },
87
+ ];
88
+
89
+ const systemItems: NavItem[] = [
90
+ { name: 'Settings', iconName: 'settings' },
91
+ { name: 'Refresh', iconName: 'refresh' },
92
+ ];
93
+
94
+ export default function App() {
95
+ return (
96
+ <Navigation
97
+ navItems={navItems}
98
+ systemItems={systemItems}
99
+ logoImg={require('./logo.png')}
100
+ defaultSelectedItem={{
101
+ type: NavItemType.Nav,
102
+ selectedItemIndex: 0,
103
+ }}
104
+ />
105
+ );
106
+ }
107
+ ```
108
+
109
+ ### 带点击回调
110
+
111
+ ```tsx
112
+ <Navigation
113
+ navItems={navItems}
114
+ systemItems={systemItems}
115
+ logoImg={require('./logo.png')}
116
+ onItemPress={(item) => {
117
+ console.log('Selected:', item.name);
118
+ setCurrentPage(item.name);
119
+ }}
120
+ />
121
+ ```
122
+
123
+ ### 受控选中索引
124
+
125
+ ```tsx
126
+ const [selectedIdx, setSelectedIdx] = useState(0);
127
+
128
+ <Navigation
129
+ navItems={navItems}
130
+ systemItems={systemItems}
131
+ logoImg={require('./logo.png')}
132
+ selectedIndex={selectedIdx}
133
+ onItemPress={(item) => {
134
+ const idx = navItems.findIndex(n => n.name === item.name);
135
+ if (idx >= 0) setSelectedIdx(idx);
136
+ }}
137
+ />
138
+ ```
139
+
140
+ ### 与 React Navigation 集成
141
+
142
+ ```tsx
143
+ import { useNavigation } from '@react-navigation/native';
144
+
145
+ const navigation = useNavigation();
146
+
147
+ <Navigation
148
+ navItems={[
149
+ { name: 'Home', iconName: 'home' },
150
+ { name: 'Details', iconName: 'info' },
151
+ ]}
152
+ logoImg={require('./logo.png')}
153
+ navigation={navigation}
154
+ />
155
+ ```
156
+
157
+ ### 完整布局示例
158
+
159
+ ```tsx
160
+ import { View, Text } from 'react-native';
161
+ import { Navigation, NavItem } from '@beppla/tapas-ui';
162
+ import { useState } from 'react';
163
+
164
+ const navItems: NavItem[] = [
165
+ { name: 'Dashboard', iconName: 'home' },
166
+ { name: 'Products', iconName: 'product_items' },
167
+ { name: 'Orders', iconName: 'manufacturing' },
168
+ ];
169
+
170
+ export default function App() {
171
+ const [page, setPage] = useState('Dashboard');
172
+
173
+ return (
174
+ <View style={{ flexDirection: 'row', height: '100%' }}>
175
+ <Navigation
176
+ navItems={navItems}
177
+ logoImg={require('./logo.png')}
178
+ onItemPress={(item) => setPage(item.name)}
179
+ />
180
+ <View style={{ flex: 1, padding: 16 }}>
181
+ <Text>{page} Content</Text>
182
+ </View>
183
+ </View>
184
+ );
185
+ }
186
+ ```
187
+
188
+ ## 注意事项
189
+
190
+ - 导航栏默认收起状态(宽度 56px),点击 Logo 切换展开(336px)/折叠
191
+ - 桌面端点击 Logo 触发 `onLogoPress` 并切换展开状态;移动端点击 Logo 触发 `onMaskPress`
192
+ - 展开时会在导航栏外显示半透明遮罩层(`rgba(0,0,0,0.5)`),点击遮罩可关闭
193
+ - `selectedIndex` 仅匹配 `navItems` 数组,不支持直接选中 `systemItems`
194
+ - 设置 `navigation` 属性后,点击导航项会自动调用 `navigation.navigate(item.name)`
195
+ - 导航项图标大小固定 20px,颜色为主题 `white`
196
+ - 选中状态:展开时背景高亮(`secondary` 色),收起时图标容器高亮
197
+ - `visible=false` 时整个导航栏不渲染
@@ -0,0 +1,95 @@
1
+ # NumericInput
2
+
3
+ 数字输入组件,包含加减按钮和文本输入框,适用于数量选择场景。
4
+
5
+ ## 功能特性
6
+
7
+ - ✅ 加减按钮控制数值增减
8
+ - ✅ 支持手动键盘输入数字
9
+ - ✅ 可设置最大值和最小值限制
10
+ - ✅ 到达边界时自动禁用对应按钮
11
+ - ✅ 支持整体禁用状态
12
+ - ✅ 加号按钮使用主题色填充背景
13
+ - ✅ 支持 onReduce 和 onAdd 额外回调
14
+ - ✅ 兼容 RN 0.77 Bridgeless 模式(Android 焦点管理修复)
15
+ - ✅ 支持自定义输入框样式
16
+ - ✅ 支持 testID 属性用于测试
17
+
18
+ ## 安装使用
19
+
20
+ ```tsx
21
+ import NumericInput from '@beppla/tapas-ui/components/NumericInput/NumericInput';
22
+ ```
23
+
24
+ ## Props
25
+
26
+ | 属性 | 类型 | 默认值 | 说明 |
27
+ |------|------|--------|------|
28
+ | value | `number` | - | 当前数值 |
29
+ | max | `number` | - | 最大值 |
30
+ | min | `number` | - | 最小值 |
31
+ | onChange | `(value: number) => void` | - | 数值变化回调 |
32
+ | onReduce | `() => void` | - | 减少按钮点击回调(在数值变化前触发) |
33
+ | onAdd | `() => void` | - | 增加按钮点击回调(在数值变化前触发) |
34
+ | disabled | `boolean` | - | 是否禁用整个组件 |
35
+ | inputStyle | `StyleProp<ViewStyle>` | - | 输入框自定义样式 |
36
+ | testID | `string` | - | 测试标识 |
37
+ | enableBridgelessFix | `boolean` | `true` | 是否启用 RN 0.77 Bridgeless 模式兼容修复 |
38
+
39
+ ## 使用示例
40
+
41
+ ### 基础用法
42
+
43
+ ```tsx
44
+ <NumericInput
45
+ value={0}
46
+ min={0}
47
+ max={99}
48
+ onChange={(value) => console.log('数量:', value)}
49
+ />
50
+ ```
51
+
52
+ ### 设置范围
53
+
54
+ ```tsx
55
+ <NumericInput
56
+ value={5}
57
+ min={1}
58
+ max={10}
59
+ onChange={(value) => setQuantity(value)}
60
+ />
61
+ ```
62
+
63
+ ### 禁用状态
64
+
65
+ ```tsx
66
+ <NumericInput
67
+ value={3}
68
+ min={0}
69
+ max={99}
70
+ disabled
71
+ onChange={() => {}}
72
+ />
73
+ ```
74
+
75
+ ### 带额外回调
76
+
77
+ ```tsx
78
+ <NumericInput
79
+ value={count}
80
+ min={0}
81
+ max={99}
82
+ onChange={(value) => setCount(value)}
83
+ onAdd={() => console.log('点击了增加')}
84
+ onReduce={() => console.log('点击了减少')}
85
+ />
86
+ ```
87
+
88
+ ## 注意事项
89
+
90
+ - `onReduce` 和 `onAdd` 在按钮点击时立即触发,即使数值已到边界也会触发
91
+ - `onChange` 只在数值实际变化时触发(边界处不触发)
92
+ - 手动输入时,超过 `max` 的值会被忽略
93
+ - 失焦时会触发 `onChange` 回调,Android 上有延迟处理以兼容 Bridgeless 模式
94
+ - 组件最小宽度 136px,高度 40px
95
+ - 如果 Android 上遇到焦点问题,可设置 `enableBridgelessFix={false}` 尝试
@@ -0,0 +1,84 @@
1
+ # Overlay
2
+
3
+ 覆盖层组件,基于 `@rneui/themed` 的 Overlay 封装,用于显示底部弹出的模态内容面板。预设从底部弹出、占屏幕 80% 高度的样式,适合底部 Sheet 和弹出菜单场景。
4
+
5
+ ## 功能特性
6
+
7
+ - ✅ 继承 @rneui/themed OverlayProps 的全部能力
8
+ - ✅ 预设底部弹出样式(absolute + bottom: 0)
9
+ - ✅ 半透明遮罩背景(backdropStyle)
10
+ - ✅ 支持点击遮罩关闭(onBackdropPress)
11
+ - ✅ 自定义 overlayStyle 和 backdropStyle 覆盖默认样式
12
+ - ✅ 主题色适配
13
+
14
+ ## 安装使用
15
+
16
+ ```tsx
17
+ import { Overlay } from '@beppla/tapas-ui';
18
+ ```
19
+
20
+ ## Props
21
+
22
+ | 属性 | 类型 | 默认值 | 说明 |
23
+ |------|------|--------|------|
24
+ | isVisible | `boolean` | - | 是否显示覆盖层(必填) |
25
+ | onBackdropPress | `() => void` | - | 点击遮罩回调 |
26
+ | overlayStyle | `StyleProp<ViewStyle>` | 底部弹出,宽100%,高80% | 覆盖层样式 |
27
+ | backdropStyle | `StyleProp<ViewStyle>` | 半透明灰色 | 遮罩样式 |
28
+ | children | `React.ReactNode` | - | 覆盖层内容 |
29
+
30
+ > 继承 `@rneui/themed` OverlayProps 的所有属性
31
+
32
+ ## 使用示例
33
+
34
+ ### 基础用法
35
+
36
+ ```tsx
37
+ const [isVisible, setIsVisible] = useState(false);
38
+
39
+ <Button onPress={() => setIsVisible(true)}>Open Overlay</Button>
40
+ <Overlay
41
+ isVisible={isVisible}
42
+ onBackdropPress={() => setIsVisible(false)}
43
+ >
44
+ <View>
45
+ <Text>Overlay Content</Text>
46
+ </View>
47
+ </Overlay>
48
+ ```
49
+
50
+ ### 自定义高度
51
+
52
+ ```tsx
53
+ <Overlay
54
+ isVisible={isVisible}
55
+ onBackdropPress={() => setIsVisible(false)}
56
+ overlayStyle={{ height: '50%' }}
57
+ >
58
+ <Text>Half screen overlay</Text>
59
+ </Overlay>
60
+ ```
61
+
62
+ ### 居中弹出
63
+
64
+ ```tsx
65
+ <Overlay
66
+ isVisible={isVisible}
67
+ onBackdropPress={() => setIsVisible(false)}
68
+ overlayStyle={{
69
+ width: '80%',
70
+ height: 'auto',
71
+ position: 'relative',
72
+ borderRadius: 12,
73
+ }}
74
+ >
75
+ <Text>Centered modal content</Text>
76
+ </Overlay>
77
+ ```
78
+
79
+ ## 注意事项
80
+
81
+ - 默认样式为底部弹出面板(`position: absolute, bottom: 0, width: 100%, height: 80%`)
82
+ - 传入 `overlayStyle` 会与默认样式合并(数组形式),后者优先级更高
83
+ - 组件需在 `ThemeProvider` 内使用
84
+ - 遮罩背景色使用主题的 `grey4` 颜色