taro-uno-ui 0.9.0-beta

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 (397) hide show
  1. package/LICENSE +100 -0
  2. package/README.md +273 -0
  3. package/dist/js/index-6NJ3A1Dn.js +26535 -0
  4. package/dist/js/index-6NJ3A1Dn.js.map +1 -0
  5. package/dist/js/index-DFdcksbe.js +1165 -0
  6. package/dist/js/index-DFdcksbe.js.map +1 -0
  7. package/dist/js/index-DXRIkWX1.js +1148 -0
  8. package/dist/js/index-DXRIkWX1.js.map +1 -0
  9. package/dist/js/index-DffLRSro.js +26519 -0
  10. package/dist/js/index-DffLRSro.js.map +1 -0
  11. package/package.json +119 -0
  12. package/src/app.config.ts +55 -0
  13. package/src/app.scss +508 -0
  14. package/src/app.tsx +44 -0
  15. package/src/components/basic/Button/Button.styles.ts +130 -0
  16. package/src/components/basic/Button/Button.test.tsx +154 -0
  17. package/src/components/basic/Button/Button.tsx +93 -0
  18. package/src/components/basic/Button/Button.types.ts +45 -0
  19. package/src/components/basic/Button/index.tsx +6 -0
  20. package/src/components/basic/Divider/Divider.styles.ts +488 -0
  21. package/src/components/basic/Divider/Divider.test.tsx +551 -0
  22. package/src/components/basic/Divider/Divider.tsx +361 -0
  23. package/src/components/basic/Divider/Divider.types.ts +261 -0
  24. package/src/components/basic/Divider/index.tsx +25 -0
  25. package/src/components/basic/Icon/Icon.styles.ts +359 -0
  26. package/src/components/basic/Icon/Icon.test.tsx +357 -0
  27. package/src/components/basic/Icon/Icon.tsx +154 -0
  28. package/src/components/basic/Icon/Icon.types.ts +210 -0
  29. package/src/components/basic/Icon/index.tsx +22 -0
  30. package/src/components/basic/Text/Text.styles.ts +500 -0
  31. package/src/components/basic/Text/Text.test.tsx +299 -0
  32. package/src/components/basic/Text/Text.tsx +340 -0
  33. package/src/components/basic/Text/Text.types.ts +319 -0
  34. package/src/components/basic/Text/index.tsx +27 -0
  35. package/src/components/basic/Typography/Typography.styles.ts +346 -0
  36. package/src/components/basic/Typography/Typography.tsx +205 -0
  37. package/src/components/basic/Typography/Typography.types.ts +296 -0
  38. package/src/components/basic/Typography/index.tsx +14 -0
  39. package/src/components/basic/index.tsx +302 -0
  40. package/src/components/common/ErrorBoundary.tsx +87 -0
  41. package/src/components/common/LazyComponent.tsx +246 -0
  42. package/src/components/common/ResponsiveContainer.tsx +93 -0
  43. package/src/components/common/ResponsiveGrid.tsx +183 -0
  44. package/src/components/common/SecurityProvider.tsx +110 -0
  45. package/src/components/common/ThemeProvider.tsx +128 -0
  46. package/src/components/common/VirtualList.tsx +368 -0
  47. package/src/components/common/__tests__/ErrorBoundary.test.tsx +249 -0
  48. package/src/components/common/index.tsx +7 -0
  49. package/src/components/display/Avatar/Avatar.styles.ts +62 -0
  50. package/src/components/display/Avatar/Avatar.test.tsx +390 -0
  51. package/src/components/display/Avatar/Avatar.tsx +79 -0
  52. package/src/components/display/Avatar/Avatar.types.ts +40 -0
  53. package/src/components/display/Avatar/index.ts +3 -0
  54. package/src/components/display/Badge/Badge.tsx +42 -0
  55. package/src/components/display/Badge/Badge.types.ts +29 -0
  56. package/src/components/display/Badge/index.ts +2 -0
  57. package/src/components/display/Calendar/Calendar.styles.ts +255 -0
  58. package/src/components/display/Calendar/Calendar.test.tsx +30 -0
  59. package/src/components/display/Calendar/Calendar.tsx +337 -0
  60. package/src/components/display/Calendar/Calendar.types.ts +91 -0
  61. package/src/components/display/Calendar/index.ts +3 -0
  62. package/src/components/display/Card/Card.styles.ts +89 -0
  63. package/src/components/display/Card/Card.test.tsx +180 -0
  64. package/src/components/display/Card/Card.tsx +135 -0
  65. package/src/components/display/Card/Card.types.ts +55 -0
  66. package/src/components/display/Card/index.ts +3 -0
  67. package/src/components/display/Carousel/Carousel.styles.ts +206 -0
  68. package/src/components/display/Carousel/Carousel.tsx +295 -0
  69. package/src/components/display/Carousel/Carousel.types.ts +57 -0
  70. package/src/components/display/Carousel/index.ts +3 -0
  71. package/src/components/display/List/List.styles.ts +79 -0
  72. package/src/components/display/List/List.tsx +115 -0
  73. package/src/components/display/List/List.types.ts +68 -0
  74. package/src/components/display/List/index.ts +3 -0
  75. package/src/components/display/Rate/Rate.styles.ts +266 -0
  76. package/src/components/display/Rate/Rate.tsx +332 -0
  77. package/src/components/display/Rate/Rate.types.ts +111 -0
  78. package/src/components/display/Rate/index.ts +28 -0
  79. package/src/components/display/Table/Table.styles.ts +269 -0
  80. package/src/components/display/Table/Table.test.tsx +343 -0
  81. package/src/components/display/Table/Table.tsx +430 -0
  82. package/src/components/display/Table/Table.types.ts +255 -0
  83. package/src/components/display/Table/index.tsx +16 -0
  84. package/src/components/display/Tag/Tag.styles.ts +197 -0
  85. package/src/components/display/Tag/Tag.test.tsx +541 -0
  86. package/src/components/display/Tag/Tag.tsx +156 -0
  87. package/src/components/display/Tag/Tag.types.ts +49 -0
  88. package/src/components/display/Tag/index.ts +3 -0
  89. package/src/components/display/Timeline/Timeline.styles.ts +211 -0
  90. package/src/components/display/Timeline/Timeline.tsx +239 -0
  91. package/src/components/display/Timeline/Timeline.types.ts +56 -0
  92. package/src/components/display/Timeline/index.ts +3 -0
  93. package/src/components/display/index.tsx +143 -0
  94. package/src/components/feedback/Loading/Loading.styles.ts +117 -0
  95. package/src/components/feedback/Loading/Loading.test.tsx +534 -0
  96. package/src/components/feedback/Loading/Loading.tsx +127 -0
  97. package/src/components/feedback/Loading/Loading.types.ts +33 -0
  98. package/src/components/feedback/Loading/index.ts +9 -0
  99. package/src/components/feedback/Message/Message.styles.ts +41 -0
  100. package/src/components/feedback/Message/Message.test.tsx +234 -0
  101. package/src/components/feedback/Message/Message.tsx +96 -0
  102. package/src/components/feedback/Message/Message.types.ts +37 -0
  103. package/src/components/feedback/Message/index.ts +9 -0
  104. package/src/components/feedback/Modal/Modal.styles.ts +21 -0
  105. package/src/components/feedback/Modal/Modal.test.tsx +11 -0
  106. package/src/components/feedback/Modal/Modal.tsx +291 -0
  107. package/src/components/feedback/Modal/Modal.types.ts +141 -0
  108. package/src/components/feedback/Modal/index.tsx +11 -0
  109. package/src/components/feedback/Notification/Notification.styles.ts +443 -0
  110. package/src/components/feedback/Notification/Notification.test.tsx +401 -0
  111. package/src/components/feedback/Notification/Notification.tsx +370 -0
  112. package/src/components/feedback/Notification/Notification.types.ts +336 -0
  113. package/src/components/feedback/Notification/NotificationManager.tsx +376 -0
  114. package/src/components/feedback/Notification/index.ts +33 -0
  115. package/src/components/feedback/Notification/index.tsx +164 -0
  116. package/src/components/feedback/Progress/Progress.styles.ts +460 -0
  117. package/src/components/feedback/Progress/Progress.test.simple.tsx +14 -0
  118. package/src/components/feedback/Progress/Progress.test.tsx +312 -0
  119. package/src/components/feedback/Progress/Progress.tsx +508 -0
  120. package/src/components/feedback/Progress/Progress.types.ts +163 -0
  121. package/src/components/feedback/Progress/index.ts +3 -0
  122. package/src/components/feedback/Progress/index.tsx +38 -0
  123. package/src/components/feedback/Progress/utils/animation.ts +204 -0
  124. package/src/components/feedback/Progress/utils/index.ts +26 -0
  125. package/src/components/feedback/Progress/utils/progress-calculator.ts +217 -0
  126. package/src/components/feedback/Result/Result.styles.ts +139 -0
  127. package/src/components/feedback/Result/Result.tsx +233 -0
  128. package/src/components/feedback/Result/Result.types.ts +128 -0
  129. package/src/components/feedback/Result/index.tsx +3 -0
  130. package/src/components/feedback/Toast/Toast.styles.ts +17 -0
  131. package/src/components/feedback/Toast/Toast.test.tsx +10 -0
  132. package/src/components/feedback/Toast/Toast.tsx +372 -0
  133. package/src/components/feedback/Toast/Toast.types.ts +86 -0
  134. package/src/components/feedback/Toast/index.tsx +3 -0
  135. package/src/components/feedback/Tooltip/Tooltip.examples.tsx +458 -0
  136. package/src/components/feedback/Tooltip/Tooltip.styles.ts +346 -0
  137. package/src/components/feedback/Tooltip/Tooltip.test.tsx +446 -0
  138. package/src/components/feedback/Tooltip/Tooltip.tsx +283 -0
  139. package/src/components/feedback/Tooltip/Tooltip.types.ts +172 -0
  140. package/src/components/feedback/Tooltip/index.ts +3 -0
  141. package/src/components/feedback/Tooltip/index.tsx +258 -0
  142. package/src/components/feedback/index.tsx +164 -0
  143. package/src/components/form/Cascader/Cascader.styles.ts +526 -0
  144. package/src/components/form/Cascader/Cascader.test.tsx +77 -0
  145. package/src/components/form/Cascader/Cascader.tsx +585 -0
  146. package/src/components/form/Cascader/Cascader.types.ts +582 -0
  147. package/src/components/form/Cascader/hooks/index.ts +3 -0
  148. package/src/components/form/Cascader/hooks/useCascaderFieldNames.ts +16 -0
  149. package/src/components/form/Cascader/hooks/useCascaderOptions.ts +109 -0
  150. package/src/components/form/Cascader/hooks/useCascaderState.ts +133 -0
  151. package/src/components/form/Cascader/index.ts +25 -0
  152. package/src/components/form/Cascader/utils/formatDisplayValue.ts +19 -0
  153. package/src/components/form/Cascader/utils/index.ts +1 -0
  154. package/src/components/form/Checkbox/Checkbox.styles.ts +608 -0
  155. package/src/components/form/Checkbox/Checkbox.test.tsx +1140 -0
  156. package/src/components/form/Checkbox/Checkbox.tsx +496 -0
  157. package/src/components/form/Checkbox/Checkbox.types.ts +472 -0
  158. package/src/components/form/Checkbox/CheckboxGroup.tsx +444 -0
  159. package/src/components/form/Checkbox/index.tsx +27 -0
  160. package/src/components/form/DatePicker/DatePicker.styles.ts +393 -0
  161. package/src/components/form/DatePicker/DatePicker.test.tsx +407 -0
  162. package/src/components/form/DatePicker/DatePicker.tsx +360 -0
  163. package/src/components/form/DatePicker/DatePicker.types.ts +247 -0
  164. package/src/components/form/DatePicker/index.tsx +15 -0
  165. package/src/components/form/Form/Form.styles.ts +357 -0
  166. package/src/components/form/Form/Form.test.tsx +122 -0
  167. package/src/components/form/Form/Form.tsx +695 -0
  168. package/src/components/form/Form/Form.types.ts +407 -0
  169. package/src/components/form/Form/index.tsx +31 -0
  170. package/src/components/form/Input/Input.enhanced.tsx +732 -0
  171. package/src/components/form/Input/Input.styles.ts +438 -0
  172. package/src/components/form/Input/Input.test.tsx +494 -0
  173. package/src/components/form/Input/Input.tsx +541 -0
  174. package/src/components/form/Input/Input.types.ts +285 -0
  175. package/src/components/form/Input/index.tsx +26 -0
  176. package/src/components/form/InputNumber/InputNumber.styles.ts +665 -0
  177. package/src/components/form/InputNumber/InputNumber.tsx +370 -0
  178. package/src/components/form/InputNumber/InputNumber.types.ts +318 -0
  179. package/src/components/form/InputNumber/components/InputNumberClearButton.tsx +32 -0
  180. package/src/components/form/InputNumber/components/InputNumberControls.tsx +42 -0
  181. package/src/components/form/InputNumber/components/index.ts +2 -0
  182. package/src/components/form/InputNumber/hooks/index.ts +4 -0
  183. package/src/components/form/InputNumber/hooks/useInputNumberState.ts +315 -0
  184. package/src/components/form/InputNumber/hooks/useInputNumberValidation.ts +147 -0
  185. package/src/components/form/InputNumber/index.ts +25 -0
  186. package/src/components/form/Radio/Radio.styles.ts +458 -0
  187. package/src/components/form/Radio/Radio.test.tsx +547 -0
  188. package/src/components/form/Radio/Radio.tsx +283 -0
  189. package/src/components/form/Radio/Radio.types.ts +410 -0
  190. package/src/components/form/Radio/index.tsx +21 -0
  191. package/src/components/form/Select/Select.styles.ts +514 -0
  192. package/src/components/form/Select/Select.test.tsx +648 -0
  193. package/src/components/form/Select/Select.tsx +474 -0
  194. package/src/components/form/Select/Select.types.ts +428 -0
  195. package/src/components/form/Select/index.tsx +30 -0
  196. package/src/components/form/Slider/Slider.styles.ts +139 -0
  197. package/src/components/form/Slider/Slider.test.tsx +553 -0
  198. package/src/components/form/Slider/Slider.tsx +326 -0
  199. package/src/components/form/Slider/Slider.types.ts +108 -0
  200. package/src/components/form/Slider/index.tsx +10 -0
  201. package/src/components/form/Switch/Switch.styles.ts +540 -0
  202. package/src/components/form/Switch/Switch.test.tsx +345 -0
  203. package/src/components/form/Switch/Switch.tsx +464 -0
  204. package/src/components/form/Switch/Switch.types.ts +386 -0
  205. package/src/components/form/Switch/index.tsx +26 -0
  206. package/src/components/form/Textarea/Textarea.styles.ts +592 -0
  207. package/src/components/form/Textarea/Textarea.test.tsx +1075 -0
  208. package/src/components/form/Textarea/Textarea.tsx +602 -0
  209. package/src/components/form/Textarea/Textarea.types.ts +371 -0
  210. package/src/components/form/Textarea/index.tsx +26 -0
  211. package/src/components/form/TimePicker/TimePicker.styles.ts +438 -0
  212. package/src/components/form/TimePicker/TimePicker.test.tsx +306 -0
  213. package/src/components/form/TimePicker/TimePicker.tsx +228 -0
  214. package/src/components/form/TimePicker/TimePicker.types.ts +385 -0
  215. package/src/components/form/TimePicker/index.ts +21 -0
  216. package/src/components/form/Transfer/Transfer.styles.ts +502 -0
  217. package/src/components/form/Transfer/Transfer.test.tsx +316 -0
  218. package/src/components/form/Transfer/Transfer.tsx +402 -0
  219. package/src/components/form/Transfer/Transfer.types.ts +557 -0
  220. package/src/components/form/Transfer/components/TransferItem.tsx +101 -0
  221. package/src/components/form/Transfer/components/TransferList.tsx +285 -0
  222. package/src/components/form/Transfer/components/TransferOperations.tsx +84 -0
  223. package/src/components/form/Transfer/components/TransferPagination.tsx +135 -0
  224. package/src/components/form/Transfer/components/TransferSearch.tsx +88 -0
  225. package/src/components/form/Transfer/components/index.ts +6 -0
  226. package/src/components/form/Transfer/hooks/index.ts +3 -0
  227. package/src/components/form/Transfer/hooks/useTransferData.ts +192 -0
  228. package/src/components/form/Transfer/hooks/useTransferState.ts +114 -0
  229. package/src/components/form/Transfer/index.ts +33 -0
  230. package/src/components/form/Upload/Upload.styles.ts +145 -0
  231. package/src/components/form/Upload/Upload.test.tsx +10 -0
  232. package/src/components/form/Upload/Upload.tsx +451 -0
  233. package/src/components/form/Upload/Upload.types.ts +200 -0
  234. package/src/components/form/Upload/index.tsx +12 -0
  235. package/src/components/form/index.tsx +121 -0
  236. package/src/components/index.tsx +146 -0
  237. package/src/components/layout/Affix/Affix.styles.ts +37 -0
  238. package/src/components/layout/Affix/Affix.test.tsx +10 -0
  239. package/src/components/layout/Affix/Affix.tsx +91 -0
  240. package/src/components/layout/Affix/Affix.types.ts +29 -0
  241. package/src/components/layout/Affix/index.tsx +3 -0
  242. package/src/components/layout/Col/Col.styles.ts +185 -0
  243. package/src/components/layout/Col/Col.test.tsx +535 -0
  244. package/src/components/layout/Col/Col.tsx +115 -0
  245. package/src/components/layout/Col/Col.types.ts +59 -0
  246. package/src/components/layout/Col/index.tsx +3 -0
  247. package/src/components/layout/Container/Container.styles.ts +161 -0
  248. package/src/components/layout/Container/Container.test.tsx +380 -0
  249. package/src/components/layout/Container/Container.tsx +132 -0
  250. package/src/components/layout/Container/Container.types.ts +63 -0
  251. package/src/components/layout/Container/index.tsx +3 -0
  252. package/src/components/layout/Grid/Grid.styles.ts +183 -0
  253. package/src/components/layout/Grid/Grid.test.tsx +637 -0
  254. package/src/components/layout/Grid/Grid.tsx +173 -0
  255. package/src/components/layout/Grid/Grid.types.ts +78 -0
  256. package/src/components/layout/Grid/index.tsx +3 -0
  257. package/src/components/layout/Layout/Content.tsx +38 -0
  258. package/src/components/layout/Layout/Footer.tsx +38 -0
  259. package/src/components/layout/Layout/Header.tsx +38 -0
  260. package/src/components/layout/Layout/Layout.styles.ts +84 -0
  261. package/src/components/layout/Layout/Layout.test.tsx +10 -0
  262. package/src/components/layout/Layout/Layout.tsx +39 -0
  263. package/src/components/layout/Layout/Layout.types.ts +58 -0
  264. package/src/components/layout/Layout/Sider.tsx +56 -0
  265. package/src/components/layout/Layout/index.tsx +8 -0
  266. package/src/components/layout/Row/Row.styles.ts +159 -0
  267. package/src/components/layout/Row/Row.test.tsx +467 -0
  268. package/src/components/layout/Row/Row.tsx +139 -0
  269. package/src/components/layout/Row/Row.types.ts +60 -0
  270. package/src/components/layout/Row/index.tsx +3 -0
  271. package/src/components/layout/Space/Space.styles.ts +255 -0
  272. package/src/components/layout/Space/Space.test.tsx +682 -0
  273. package/src/components/layout/Space/Space.tsx +211 -0
  274. package/src/components/layout/Space/Space.types.ts +92 -0
  275. package/src/components/layout/Space/index.tsx +12 -0
  276. package/src/components/layout/index.tsx +68 -0
  277. package/src/components/navigation/Menu/Menu.styles.ts +779 -0
  278. package/src/components/navigation/Menu/Menu.tsx +355 -0
  279. package/src/components/navigation/Menu/Menu.types.ts +231 -0
  280. package/src/components/navigation/Menu/Menu.utils.ts +187 -0
  281. package/src/components/navigation/Menu/MenuItem.tsx +126 -0
  282. package/src/components/navigation/Menu/SubMenu.tsx +148 -0
  283. package/src/components/navigation/Menu/__tests__/Menu.test.tsx +687 -0
  284. package/src/components/navigation/Menu/index.tsx +124 -0
  285. package/src/components/navigation/NavBar/NavBar.styles.ts +129 -0
  286. package/src/components/navigation/NavBar/NavBar.test.tsx +287 -0
  287. package/src/components/navigation/NavBar/NavBar.tsx +231 -0
  288. package/src/components/navigation/NavBar/NavBar.types.ts +54 -0
  289. package/src/components/navigation/NavBar/index.tsx +3 -0
  290. package/src/components/navigation/Pagination/Pagination.styles.ts +187 -0
  291. package/src/components/navigation/Pagination/Pagination.test.tsx +673 -0
  292. package/src/components/navigation/Pagination/Pagination.tsx +395 -0
  293. package/src/components/navigation/Pagination/Pagination.types.ts +86 -0
  294. package/src/components/navigation/Pagination/index.ts +18 -0
  295. package/src/components/navigation/Pagination/index.tsx +9 -0
  296. package/src/components/navigation/Steps/Step.tsx +56 -0
  297. package/src/components/navigation/Steps/Steps.styles.ts +154 -0
  298. package/src/components/navigation/Steps/Steps.test.tsx +12 -0
  299. package/src/components/navigation/Steps/Steps.tsx +113 -0
  300. package/src/components/navigation/Steps/Steps.types.ts +47 -0
  301. package/src/components/navigation/Steps/index.tsx +3 -0
  302. package/src/components/navigation/Tabs/Tabs.styles.ts +199 -0
  303. package/src/components/navigation/Tabs/Tabs.test.tsx +661 -0
  304. package/src/components/navigation/Tabs/Tabs.tsx +253 -0
  305. package/src/components/navigation/Tabs/Tabs.types.ts +114 -0
  306. package/src/components/navigation/Tabs/index.tsx +3 -0
  307. package/src/components/navigation/Tree/Tree.styles.ts +553 -0
  308. package/src/components/navigation/Tree/Tree.test.basic.tsx +7 -0
  309. package/src/components/navigation/Tree/Tree.test.functional.tsx +496 -0
  310. package/src/components/navigation/Tree/Tree.test.import.check.tsx +6 -0
  311. package/src/components/navigation/Tree/Tree.test.import.tsx +6 -0
  312. package/src/components/navigation/Tree/Tree.test.minimal.tsx +5 -0
  313. package/src/components/navigation/Tree/Tree.test.simple.tsx +30 -0
  314. package/src/components/navigation/Tree/Tree.test.tsx +908 -0
  315. package/src/components/navigation/Tree/Tree.test.working.tsx +673 -0
  316. package/src/components/navigation/Tree/Tree.tsx +600 -0
  317. package/src/components/navigation/Tree/Tree.types.ts +909 -0
  318. package/src/components/navigation/Tree/Tree.utils.ts +452 -0
  319. package/src/components/navigation/Tree/index.ts +33 -0
  320. package/src/components/navigation/Tree/index.tsx +23 -0
  321. package/src/components/navigation/index.tsx +83 -0
  322. package/src/constants/index.ts +785 -0
  323. package/src/hooks/index.ts +110 -0
  324. package/src/hooks/types.ts +10 -0
  325. package/src/hooks/useAsync.ts +65 -0
  326. package/src/hooks/useEventHandling.ts +444 -0
  327. package/src/hooks/useLifecycle.ts +399 -0
  328. package/src/hooks/usePerformance.ts +441 -0
  329. package/src/hooks/usePerformanceMonitor.ts +348 -0
  330. package/src/hooks/usePlatform.ts +62 -0
  331. package/src/hooks/useRequest.test.ts +11 -0
  332. package/src/hooks/useRequest.ts +135 -0
  333. package/src/hooks/useStateManagement.ts +300 -0
  334. package/src/hooks/useStyle.ts +537 -0
  335. package/src/hooks/useTheme.ts +347 -0
  336. package/src/hooks/useVirtualScroll.ts +331 -0
  337. package/src/index.ts +298 -0
  338. package/src/platform/index.ts +1188 -0
  339. package/src/providers/AppProvider.test.tsx +63 -0
  340. package/src/providers/AppProvider.tsx +155 -0
  341. package/src/providers/index.ts +1 -0
  342. package/src/theme/ThemeProvider.tsx +283 -0
  343. package/src/theme/ThemeProvider.types.ts +26 -0
  344. package/src/theme/animations.tsx +660 -0
  345. package/src/theme/defaults.ts +188 -0
  346. package/src/theme/design-system.ts +562 -0
  347. package/src/theme/design-tokens.ts +1136 -0
  348. package/src/theme/generated/dark-theme.scss +120 -0
  349. package/src/theme/generated/tokens.css +441 -0
  350. package/src/theme/generated/tokens.scss +320 -0
  351. package/src/theme/index.ts +120 -0
  352. package/src/theme/responsive.tsx +193 -0
  353. package/src/theme/styles/mixins.scss +612 -0
  354. package/src/theme/styles/variables.scss +295 -0
  355. package/src/theme/styles.ts +403 -0
  356. package/src/theme/tokens/colors.ts +256 -0
  357. package/src/theme/tokens/effects.ts +260 -0
  358. package/src/theme/tokens/index.ts +217 -0
  359. package/src/theme/tokens/spacing.ts +137 -0
  360. package/src/theme/tokens/typography.ts +186 -0
  361. package/src/theme/types.ts +188 -0
  362. package/src/theme/useThemeUtils.ts +313 -0
  363. package/src/theme/utils.ts +501 -0
  364. package/src/theme/variables.ts +583 -0
  365. package/src/types/accessibility.ts +51 -0
  366. package/src/types/button.ts +562 -0
  367. package/src/types/component-props.ts +317 -0
  368. package/src/types/env.d.ts +20 -0
  369. package/src/types/index.ts +427 -0
  370. package/src/types/modules.d.ts +40 -0
  371. package/src/types/standardized-components.ts +544 -0
  372. package/src/types/taro-adapter.d.ts +174 -0
  373. package/src/types/taro-components.d.ts +73 -0
  374. package/src/types/utils.ts +410 -0
  375. package/src/utils/__tests__/inputValidator.test.ts +338 -0
  376. package/src/utils/__tests__/responsiveUtils.test.ts +310 -0
  377. package/src/utils/__tests__/xssProtection.test.ts +268 -0
  378. package/src/utils/cache.ts +83 -0
  379. package/src/utils/createNamespace.ts +24 -0
  380. package/src/utils/environment.ts +95 -0
  381. package/src/utils/error-handler.ts +88 -0
  382. package/src/utils/errorLogger.ts +197 -0
  383. package/src/utils/formatUtils.ts +444 -0
  384. package/src/utils/index.ts +115 -0
  385. package/src/utils/inputValidator.ts +261 -0
  386. package/src/utils/network/http-client.test.ts +18 -0
  387. package/src/utils/network/http-client.ts +151 -0
  388. package/src/utils/performance/performance.ts +850 -0
  389. package/src/utils/responsiveUtils.ts +357 -0
  390. package/src/utils/rtl-support.ts +344 -0
  391. package/src/utils/security/api-security.ts +386 -0
  392. package/src/utils/security/xss-protection.ts +69 -0
  393. package/src/utils/securityHeaders.ts +314 -0
  394. package/src/utils/typeHelpers.ts +16 -0
  395. package/src/utils/types/dataProcessing.ts +543 -0
  396. package/src/utils/types/typeHelpers.ts +187 -0
  397. package/src/utils/xssProtection.ts +420 -0
@@ -0,0 +1,430 @@
1
+ import React, { forwardRef, useRef, useState, useEffect, useCallback, useMemo } from 'react';
2
+ import { View, Text, ScrollView } from '@tarojs/components';
3
+ import { TableStyles } from './Table.styles';
4
+ import type {
5
+ TableProps,
6
+ TableRef,
7
+ TableSortOrder,
8
+ } from './Table.types';
9
+
10
+ /** 表格组件 */
11
+ export const TableComponent = forwardRef<TableRef, TableProps>((props, ref) => {
12
+ const {
13
+ columns = [],
14
+ dataSource: initialDataSource = [],
15
+ rowKey = 'key',
16
+ size = 'medium',
17
+ bordered = false,
18
+ striped = false,
19
+ hoverable = true,
20
+ loading = false,
21
+ emptyText = '暂无数据',
22
+ showHeader = true,
23
+ pagination = false,
24
+ rowSelection,
25
+ expandable,
26
+ scroll,
27
+ onChange,
28
+ onRow,
29
+ onHeaderRow,
30
+ className,
31
+ style,
32
+ ...restProps
33
+ } = props;
34
+
35
+ const tableRef = useRef<HTMLDivElement>(null);
36
+ const [data, setData] = useState(initialDataSource);
37
+ const [sortField, setSortField] = useState<string>('');
38
+ const [sortOrder, setSortOrder] = useState<TableSortOrder>(null);
39
+ const [selectedRowKeys, setSelectedRowKeys] = useState<string[]>([]);
40
+ const [expandedRowKeys, setExpandedRowKeys] = useState<string[]>([]);
41
+ const [currentPage, setCurrentPage] = useState(1);
42
+ const [pageSize, setPageSize] = useState(10);
43
+
44
+ // 同步数据状态
45
+ useEffect(() => {
46
+ setData(initialDataSource);
47
+ }, [initialDataSource]);
48
+
49
+ // 处理排序
50
+ const handleSort = useCallback(
51
+ (field: string, order: TableSortOrder) => {
52
+ setSortField(field);
53
+ setSortOrder(order);
54
+ onChange?.({ current: currentPage, pageSize }, {}, { field, order });
55
+ },
56
+ [currentPage, pageSize, onChange],
57
+ );
58
+
59
+ // 处理行选择
60
+ const handleRowSelect = useCallback(
61
+ (key: string, selected: boolean) => {
62
+ const newSelectedKeys = selected ? [...selectedRowKeys, key] : selectedRowKeys.filter((k) => k !== key);
63
+
64
+ setSelectedRowKeys(newSelectedKeys);
65
+ rowSelection?.onChange?.(
66
+ newSelectedKeys,
67
+ data.filter((item) => newSelectedKeys.includes(item[rowKey as keyof typeof item])),
68
+ );
69
+ },
70
+ [selectedRowKeys, data, rowKey, rowSelection],
71
+ );
72
+
73
+ // 处理全选
74
+ const handleSelectAll = useCallback(
75
+ (selected: boolean) => {
76
+ const newSelectedKeys = selected ? data.map((item) => String(item[rowKey as keyof typeof item])) : [];
77
+
78
+ setSelectedRowKeys(newSelectedKeys);
79
+ rowSelection?.onChange?.(
80
+ newSelectedKeys,
81
+ data.filter((item) => newSelectedKeys.includes(String(item[rowKey as keyof typeof item]))),
82
+ );
83
+ },
84
+ [data, rowKey, rowSelection],
85
+ );
86
+
87
+ // 处理展开
88
+ const handleExpand = useCallback(
89
+ (key: string, expanded: boolean) => {
90
+ const newExpandedKeys = expanded ? [...expandedRowKeys, key] : expandedRowKeys.filter((k) => k !== key);
91
+
92
+ setExpandedRowKeys(newExpandedKeys);
93
+
94
+ // 调用外部展开回调
95
+ const record = data.find(item => String(item[rowKey as keyof typeof item]) === key);
96
+ if (record && typeof expandable === 'object' && expandable.onExpand) {
97
+ expandable.onExpand(expanded, record);
98
+ }
99
+ },
100
+ [expandedRowKeys, data, rowKey, expandable],
101
+ );
102
+
103
+ // 处理分页
104
+ const handlePageChange = useCallback(
105
+ (page: number, size?: number) => {
106
+ setCurrentPage(page);
107
+ if (size) setPageSize(size);
108
+ onChange?.({ current: page, pageSize: size || pageSize }, {}, { field: sortField, order: sortOrder });
109
+ },
110
+ [pageSize, sortField, sortOrder, onChange],
111
+ );
112
+
113
+ // 排序和筛选后的数据
114
+ const processedData = useMemo(() => {
115
+ const result = [...data];
116
+
117
+ // 排序处理
118
+ if (sortField && sortOrder) {
119
+ result.sort((a, b) => {
120
+ const aValue = a[sortField as keyof typeof a];
121
+ const bValue = b[sortField as keyof typeof b];
122
+
123
+ if (typeof aValue === 'number' && typeof bValue === 'number') {
124
+ return sortOrder === 'ascend' ? aValue - bValue : bValue - aValue;
125
+ }
126
+
127
+ const aStr = String(aValue || '');
128
+ const bStr = String(bValue || '');
129
+
130
+ return sortOrder === 'ascend' ? aStr.localeCompare(bStr) : bStr.localeCompare(aStr);
131
+ });
132
+ }
133
+
134
+ return result;
135
+ }, [data, sortField, sortOrder]);
136
+
137
+ // 分页后的数据
138
+ const paginatedData = useMemo(() => {
139
+ if (!pagination) return processedData;
140
+
141
+ const startIndex = (currentPage - 1) * pageSize;
142
+ const endIndex = startIndex + pageSize;
143
+ return processedData.slice(startIndex, endIndex);
144
+ }, [processedData, currentPage, pageSize, pagination]);
145
+
146
+ // 渲染表头
147
+ const renderHeader = () => {
148
+ if (!showHeader) return null;
149
+
150
+ const headerProps = onHeaderRow?.(columns, 0) || {};
151
+
152
+ return (
153
+ <View className="taro-uno-table__header" {...headerProps}>
154
+ <View className="taro-uno-table__row">
155
+ {/* 选择列 */}
156
+ {rowSelection && (
157
+ <View className="taro-uno-table__cell taro-uno-table__cell--selection">
158
+ <input
159
+ type="checkbox"
160
+ checked={selectedRowKeys.length > 0 && selectedRowKeys.length === data.length}
161
+ onChange={(e) => handleSelectAll(e.target.checked)}
162
+ disabled={data.length === 0}
163
+ />
164
+ </View>
165
+ )}
166
+
167
+ {/* 展开列 */}
168
+ {expandable && <View className="taro-uno-table__cell taro-uno-table__cell--expand" />}
169
+
170
+ {/* 数据列 */}
171
+ {columns.map((column, index) => {
172
+ const isSortable = column.sortable || column.onSort;
173
+ const currentSort = sortField === column.dataIndex ? sortOrder : null;
174
+
175
+ return (
176
+ <View
177
+ key={column.key || column.dataIndex || index}
178
+ className={`taro-uno-table__cell taro-uno-table__cell--header ${
179
+ column.align ? `taro-uno-table__cell--${column.align}` : ''
180
+ }`}
181
+ style={{ width: column.width }}
182
+ >
183
+ <View className="taro-uno-table__cell-content">
184
+ {column.title}
185
+ {isSortable && (
186
+ <View
187
+ className={`taro-uno-table__sorter ${
188
+ currentSort ? `taro-uno-table__sorter--${currentSort}` : ''
189
+ }`}
190
+ onClick={() => {
191
+ const newOrder = currentSort === 'ascend' ? 'descend' : 'ascend';
192
+ handleSort(column.dataIndex, newOrder);
193
+ }}
194
+ >
195
+ <View className="taro-uno-table__sorter-up" />
196
+ <View className="taro-uno-table__sorter-down" />
197
+ </View>
198
+ )}
199
+ </View>
200
+ </View>
201
+ );
202
+ })}
203
+ </View>
204
+ </View>
205
+ );
206
+ };
207
+
208
+ // 渲染表格行
209
+ const renderRow = (record: any, rowIndex: number) => {
210
+ const key = String(record[rowKey as keyof typeof record]);
211
+ const isSelected = selectedRowKeys.includes(key);
212
+ const isExpanded = expandedRowKeys.includes(key);
213
+
214
+ const rowProps = onRow?.(record, rowIndex) || {};
215
+
216
+ return (
217
+ <View key={key} className="taro-uno-table__body">
218
+ <View
219
+ className={`taro-uno-table__row ${isSelected ? 'taro-uno-table__row--selected' : ''} ${
220
+ striped && rowIndex % 2 === 1 ? 'taro-uno-table__row--striped' : ''
221
+ }`}
222
+ {...rowProps}
223
+ >
224
+ {/* 选择列 */}
225
+ {rowSelection && (
226
+ <View className="taro-uno-table__cell taro-uno-table__cell--selection">
227
+ <input
228
+ type="checkbox"
229
+ checked={isSelected}
230
+ onChange={(e) => handleRowSelect(key, e.target.checked)}
231
+ disabled={rowSelection.getCheckboxProps?.(record)?.disabled}
232
+ />
233
+ </View>
234
+ )}
235
+
236
+ {/* 展开列 */}
237
+ {expandable && (
238
+ <View className="taro-uno-table__cell taro-uno-table__cell--expand">
239
+ {typeof expandable === 'object' && expandable.rowExpandable?.(record) && (
240
+ <View
241
+ className={`taro-uno-table__expand-icon ${isExpanded ? 'taro-uno-table__expand-icon--expanded' : ''}`}
242
+ onClick={() => handleExpand(key, !isExpanded)}
243
+ />
244
+ )}
245
+ </View>
246
+ )}
247
+
248
+ {/* 数据列 */}
249
+ {columns.map((column, colIndex) => {
250
+ const value = record[column.dataIndex as keyof typeof record];
251
+ const render = column.render;
252
+ const cellContent = render ? render(value, record, rowIndex) : String(value || '');
253
+
254
+ return (
255
+ <View
256
+ key={column.key || column.dataIndex || colIndex}
257
+ className={`taro-uno-table__cell ${column.align ? `taro-uno-table__cell--${column.align}` : ''}`}
258
+ style={{ width: column.width }}
259
+ >
260
+ <View className="taro-uno-table__cell-content">{cellContent}</View>
261
+ </View>
262
+ );
263
+ })}
264
+ </View>
265
+
266
+ {/* 展开内容 */}
267
+ {expandable && isExpanded && typeof expandable === 'object' && expandable.rowExpandable?.(record) && (
268
+ <View className="taro-uno-table__expanded-row">
269
+ <View className="taro-uno-table__expanded-cell">
270
+ {typeof expandable === 'object' && expandable.expandedRowRender?.(record, rowIndex)}
271
+ </View>
272
+ </View>
273
+ )}
274
+ </View>
275
+ );
276
+ };
277
+
278
+ // 渲染分页
279
+ const renderPagination = () => {
280
+ if (!pagination) return null;
281
+
282
+ const total = data.length;
283
+ const totalPages = Math.ceil(total / pageSize);
284
+
285
+ return (
286
+ <View className="taro-uno-table__pagination">
287
+ <View className="taro-uno-table__pagination-info">共 {total} 条记录</View>
288
+ <View className="taro-uno-table__pagination-controls">
289
+ <button
290
+ className="taro-uno-table__pagination-btn"
291
+ disabled={currentPage === 1}
292
+ onClick={() => handlePageChange(currentPage - 1)}
293
+ >
294
+ 上一页
295
+ </button>
296
+ <View className="taro-uno-table__pagination-current">
297
+ {currentPage} / {totalPages}
298
+ </View>
299
+ <button
300
+ className="taro-uno-table__pagination-btn"
301
+ disabled={currentPage === totalPages}
302
+ onClick={() => handlePageChange(currentPage + 1)}
303
+ >
304
+ 下一页
305
+ </button>
306
+ </View>
307
+ </View>
308
+ );
309
+ };
310
+
311
+ // 渲染空状态
312
+ const renderEmpty = () => {
313
+ if (data.length > 0) return null;
314
+
315
+ return (
316
+ <View className="taro-uno-table__empty">
317
+ <Text className="taro-uno-table__empty-text">{emptyText}</Text>
318
+ </View>
319
+ );
320
+ };
321
+
322
+ // 渲染加载状态
323
+ const renderLoading = () => {
324
+ if (!loading) return null;
325
+
326
+ return (
327
+ <View className="taro-uno-table__loading">
328
+ <View className="taro-uno-table__loading-spinner" />
329
+ <Text className="taro-uno-table__loading-text">加载中...</Text>
330
+ </View>
331
+ );
332
+ };
333
+
334
+ // 暴露给外部的引用方法
335
+ React.useImperativeHandle(
336
+ ref,
337
+ () => ({
338
+ element: tableRef.current,
339
+ getData: () => data,
340
+ getSelectedRows: () => data.filter(item => selectedRowKeys.includes(item.id as string)),
341
+ getSelectedRowKeys: () => selectedRowKeys,
342
+ getSortField: () => sortField,
343
+ getSortOrder: () => sortOrder,
344
+ getFilterValues: () => ({}),
345
+ setData: (newData) => setData(newData),
346
+ setSelectedRows: (keys: string[]) => setSelectedRowKeys(keys),
347
+ setSelectedRowKeys: (keys: string[]) => setSelectedRowKeys(keys),
348
+ getExpandedRowKeys: () => expandedRowKeys,
349
+ setExpandedRowKeys: (keys: string[]) => setExpandedRowKeys(keys),
350
+ setSort: (field: string, order: TableSortOrder) => {
351
+ setSortField(field);
352
+ setSortOrder(order);
353
+ },
354
+ setFilter: (_field: string, _values: any[]) => {
355
+ // Filter implementation
356
+ },
357
+ refresh: () => {
358
+ // 重新加载数据的逻辑
359
+ handlePageChange(currentPage, pageSize);
360
+ },
361
+ reset: () => {
362
+ setSelectedRowKeys([]);
363
+ setExpandedRowKeys([]);
364
+ setSortField('');
365
+ setSortOrder(null);
366
+ },
367
+ scrollToRow: (_key: string) => {
368
+ // Scroll to row implementation
369
+ },
370
+ scrollTo: (options: any) => {
371
+ tableRef.current?.scrollTo(options);
372
+ },
373
+ }),
374
+ [selectedRowKeys, expandedRowKeys, sortField, sortOrder, currentPage, pageSize, data],
375
+ );
376
+
377
+ // 生成样式
378
+ const tableStyle = TableStyles['getStyle']({
379
+ size,
380
+ bordered,
381
+ striped,
382
+ hoverable,
383
+ scroll,
384
+ style: style || {},
385
+ });
386
+
387
+ // 生成类名
388
+ const tableClassName = TableStyles['getClassName']({
389
+ size,
390
+ bordered,
391
+ striped,
392
+ hoverable,
393
+ loading,
394
+ className: className || '',
395
+ });
396
+
397
+ return (
398
+ <View ref={tableRef} className={tableClassName} style={tableStyle} {...restProps}>
399
+ {renderLoading()}
400
+
401
+ <ScrollView
402
+ className="taro-uno-table__scroll"
403
+ scrollX={scroll?.x !== undefined}
404
+ scrollY={scroll?.y !== undefined}
405
+ style={{
406
+ maxHeight: scroll?.y,
407
+ maxWidth: scroll?.x,
408
+ }}
409
+ >
410
+ <View className="taro-uno-table__container">
411
+ {renderHeader()}
412
+
413
+ <View className="taro-uno-table__body">
414
+ {paginatedData.map((record, index) => renderRow(record, index))}
415
+ {renderEmpty()}
416
+ </View>
417
+ </View>
418
+ </ScrollView>
419
+
420
+ {renderPagination()}
421
+ </View>
422
+ );
423
+ });
424
+
425
+ /** 表格组件显示名称 */
426
+ TableComponent.displayName = 'Table';
427
+
428
+ /** 导出表格组件 */
429
+ export const Table = TableComponent;
430
+ export default TableComponent;
@@ -0,0 +1,255 @@
1
+ import { ReactNode } from 'react';
2
+ import { BaseComponentProps, Size } from '../../../types';
3
+
4
+ /** 表格尺寸 */
5
+ export type TableSize = Size | 'small' | 'medium' | 'large';
6
+
7
+ /** 表格边框 */
8
+ export type TableBorder = 'none' | 'outer' | 'all';
9
+
10
+ /** 表格对齐方式 */
11
+ export type TableAlign = 'left' | 'center' | 'right';
12
+
13
+ /** 表格排序方式 */
14
+ export type TableSortOrder = 'ascend' | 'descend' | null;
15
+
16
+ /** 表格筛选配置 */
17
+ export interface TableFilterConfig {
18
+ /** 筛选项 */
19
+ options: Array<{ label: string; value: any }>;
20
+ /** 是否多选 */
21
+ multiple?: boolean;
22
+ /** 默认值 */
23
+ defaultSelectedValues?: any[];
24
+ /** 筛选回调 */
25
+ onFilter?: (_value: any, record: any) => boolean;
26
+ }
27
+
28
+ /** 表格列配置 */
29
+ export interface TableColumn<T = any> {
30
+ /** 列标题 */
31
+ title: ReactNode;
32
+ /** 数据字段 */
33
+ dataIndex: string;
34
+ /** 列键值 */
35
+ key?: string;
36
+ /** 列宽 */
37
+ width?: number | string;
38
+ /** 对齐方式 */
39
+ align?: TableAlign;
40
+ /** 是否固定 */
41
+ fixed?: 'left' | 'right' | boolean;
42
+ /** 是否可排序 */
43
+ sortable?: boolean;
44
+ /** 排序字段 */
45
+ sortField?: string;
46
+ /** 排序回调 */
47
+ onSort?: (_field: string, order: TableSortOrder) => void;
48
+ /** 筛选配置 */
49
+ filter?: TableFilterConfig;
50
+ /** 自定义渲染 */
51
+ render?: (_value: any, record: T, index: number) => ReactNode;
52
+ /** 自定义标题渲染 */
53
+ titleRender?: (_column: TableColumn<T>) => ReactNode;
54
+ /** 是否显示 */
55
+ visible?: boolean;
56
+ /** 是否省略 */
57
+ ellipsis?: boolean;
58
+ /** 自定义样式 */
59
+ style?: React.CSSProperties;
60
+ /** 自定义类名 */
61
+ className?: string;
62
+ }
63
+
64
+ /** 表格行配置 */
65
+ export interface TableRowConfig<T = any> {
66
+ /** 行键值 */
67
+ key: string;
68
+ /** 行数据 */
69
+ record: T;
70
+ /** 行索引 */
71
+ index: number;
72
+ /** 是否展开 */
73
+ expanded?: boolean;
74
+ /** 是否选中 */
75
+ selected?: boolean;
76
+ /** 是否禁用 */
77
+ disabled?: boolean;
78
+ /** 行样式 */
79
+ style?: React.CSSProperties;
80
+ /** 行类名 */
81
+ className?: string;
82
+ }
83
+
84
+ /** 表格行选择配置 */
85
+ export interface TableRowSelection<T = any> {
86
+ /** 选择类型 */
87
+ type?: 'checkbox' | 'radio';
88
+ /** 选中行键值 */
89
+ selectedRowKeys?: string[];
90
+ /** 行选择变化回调 */
91
+ onChange?: (_selectedRowKeys: string[], selectedRows: T[]) => void;
92
+ /** 行是否可展开 */
93
+ rowExpandable?: (_record: T) => boolean;
94
+ /** 获取复选框属性 */
95
+ getCheckboxProps?: (_record: T) => { disabled?: boolean };
96
+ /** 是否默认选中所有行 */
97
+ defaultSelectedAll?: boolean;
98
+ /** 是否禁用选择 */
99
+ disabled?: boolean;
100
+ }
101
+
102
+ /** 表格展开配置 */
103
+ export interface TableExpandable<T = any> {
104
+ /** 展开行渲染 */
105
+ expandedRowRender?: (_record: T, index: number) => ReactNode;
106
+ /** 行是否可展开 */
107
+ rowExpandable?: (_record: T) => boolean;
108
+ /** 默认展开的行键值 */
109
+ defaultExpandedRowKeys?: string[];
110
+ /** 展开的行键值 */
111
+ expandedRowKeys?: string[];
112
+ /** 展开变化回调 */
113
+ onExpand?: (_expanded: boolean, record: T) => void;
114
+ /** 展开图标 */
115
+ expandIcon?: ReactNode;
116
+ /** 展开图标位置 */
117
+ expandIconPosition?: 'left' | 'right';
118
+ }
119
+
120
+ /** 表格分页配置 */
121
+ export interface TablePaginationConfig {
122
+ /** 当前页码 */
123
+ current?: number;
124
+ /** 每页条数 */
125
+ pageSize?: number;
126
+ /** 总条数 */
127
+ total?: number;
128
+ /** 是否显示分页 */
129
+ show?: boolean;
130
+ /** 分页位置 */
131
+ position?: 'top' | 'bottom' | 'both';
132
+ /** 分页大小选项 */
133
+ pageSizeOptions?: number[];
134
+ /** 显示总数 */
135
+ showTotal?: boolean;
136
+ /** 显示快速跳转 */
137
+ showQuickJumper?: boolean;
138
+ /** 显示页码选择器 */
139
+ showSizeChanger?: boolean;
140
+ /** 页码改变事件 */
141
+ onChange?: (_current: number, pageSize: number) => void;
142
+ /** 每页条数改变事件 */
143
+ onShowSizeChange?: (_current: number, pageSize: number) => void;
144
+ }
145
+
146
+ /** 表格引用 */
147
+ export interface TableRef<T = any> {
148
+ /** 获取元素引用 */
149
+ element: any | null;
150
+ /** 获取当前数据 */
151
+ getData: () => T[];
152
+ /** 获取选中行 */
153
+ getSelectedRows: () => T[];
154
+ /** 获取选中行键值 */
155
+ getSelectedRowKeys: () => string[];
156
+ /** 获取排序字段 */
157
+ getSortField: () => string;
158
+ /** 获取排序方式 */
159
+ getSortOrder: () => TableSortOrder;
160
+ /** 获取筛选值 */
161
+ getFilterValues: () => Record<string, any[]>;
162
+ /** 设置数据 */
163
+ setData: (_data: T[]) => void;
164
+ /** 设置选中行 */
165
+ setSelectedRows: (_keys: string[]) => void;
166
+ /** 设置排序 */
167
+ setSort: (_field: string, order: TableSortOrder) => void;
168
+ /** 设置筛选 */
169
+ setFilter: (_field: string, values: any[]) => void;
170
+ /** 刷新数据 */
171
+ refresh: () => void;
172
+ /** 重置状态 */
173
+ reset: () => void;
174
+ /** 滚动到指定行 */
175
+ scrollToRow: (_key: string) => void;
176
+ }
177
+
178
+ /** 表格组件属性 */
179
+ export interface TableProps<T = any> extends BaseComponentProps {
180
+ /** 表格数据 */
181
+ data?: T[];
182
+ /** 数据源(兼容属性) */
183
+ dataSource?: T[];
184
+ /** 列配置 */
185
+ columns: TableColumn<T>[];
186
+ /** 行键值字段 */
187
+ rowKey?: string | ((_record: T) => string);
188
+ /** 表格尺寸 */
189
+ size?: TableSize;
190
+ /** 表格边框 */
191
+ border?: TableBorder;
192
+ /** 是否有边框(兼容属性) */
193
+ bordered?: boolean;
194
+ /** 是否斑马纹 */
195
+ striped?: boolean;
196
+ /** 是否悬停效果 */
197
+ hoverable?: boolean;
198
+ /** 是否可展开 */
199
+ expandable?: boolean | TableExpandable<T>;
200
+ /** 展开行渲染 */
201
+ expandedRowRender?: (_record: T, index: number) => ReactNode;
202
+ /** 是否可选择 */
203
+ selectable?: boolean;
204
+ /** 选择类型 */
205
+ selectionType?: 'checkbox' | 'radio';
206
+ /** 默认选中行键值 */
207
+ defaultSelectedRowKeys?: string[];
208
+ /** 选中行键值 */
209
+ selectedRowKeys?: string[];
210
+ /** 行选择事件 */
211
+ onRowSelect?: (_selectedRowKeys: string[], selectedRows: T[]) => void;
212
+ /** 行选择配置 */
213
+ rowSelection?: TableRowSelection<T>;
214
+ /** 表格变化事件 */
215
+ onChange?: (_pagination: TablePaginationConfig, filters: any, sorter: any) => void;
216
+ /** 行配置 - Taro.js compatible */
217
+ onRow?: (_record: T, index: number) => Record<string, any>;
218
+ /** 表头行配置 - Taro.js compatible */
219
+ onHeaderRow?: (_columns: TableColumn<T>[], index: number) => Record<string, any>;
220
+ /** 行点击事件 - Taro.js compatible */
221
+ onRowClick?: (_record: T, index: number, event: any) => void;
222
+ /** 行双击事件 - not supported in Taro.js */
223
+ onRowDoubleClick?: (_record: T, index: number, event: any) => void;
224
+ /** 排序事件 */
225
+ onSort?: (_field: string, order: TableSortOrder) => void;
226
+ /** 筛选事件 */
227
+ onFilter?: (_filters: Record<string, any[]>) => void;
228
+ /** 分页配置 */
229
+ pagination?: TablePaginationConfig | boolean;
230
+ /** 是否显示表头 */
231
+ showHeader?: boolean;
232
+ /** 是否显示滚动条 */
233
+ scrollable?: boolean;
234
+ /** 滚动配置 */
235
+ scroll?: { x?: number | string; y?: number | string };
236
+ /** 是否加载中 */
237
+ loading?: boolean;
238
+ /** 空数据渲染 */
239
+ emptyText?: ReactNode;
240
+ /** 行样式 */
241
+ rowStyle?: (_record: T, index: number) => React.CSSProperties;
242
+ /** 行类名 */
243
+ rowClassName?: (_record: T, index: number) => string;
244
+ /** 单元格样式 */
245
+ cellStyle?: (_value: any, record: T, column: TableColumn<T>, index: number) => React.CSSProperties;
246
+ /** 单元格类名 */
247
+ cellClassName?: (_value: any, record: T, column: TableColumn<T>, index: number) => string;
248
+ /** 自定义行渲染 */
249
+ rowRender?: (_record: T, index: number) => ReactNode;
250
+ /** 自定义单元格渲染 */
251
+ cellRender?: (_value: any, record: T, column: TableColumn<T>, index: number) => ReactNode;
252
+ }
253
+
254
+ /** 表格分页类型别名 */
255
+ export type TablePagination = TablePaginationConfig;
@@ -0,0 +1,16 @@
1
+ export { default } from './Table';
2
+ export * from './Table';
3
+ export type {
4
+ TableProps,
5
+ TableRef,
6
+ TableColumn,
7
+ TableSortOrder,
8
+ TableFilterConfig,
9
+ TableAlign,
10
+ TableSize,
11
+ TableBorder,
12
+ TableRowSelection,
13
+ TablePagination,
14
+ TableExpandable,
15
+ } from './Table.types';
16
+ export { tableStyles } from './Table.styles';