taro-uno-ui 0.9.0 → 1.0.1

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 (312) hide show
  1. package/README.md +21 -0
  2. package/dist/js/{index-DffLRSro.js → index-CDFsvu80.js} +15369 -10741
  3. package/dist/js/index-CDFsvu80.js.map +1 -0
  4. package/dist/js/index-DFdcksbe.js.map +1 -1
  5. package/dist/js/index-DXRIkWX1.js.map +1 -1
  6. package/dist/js/{index-6NJ3A1Dn.js → index-JffnTUrv.js} +15430 -10801
  7. package/dist/js/index-JffnTUrv.js.map +1 -0
  8. package/dist/utils/http/request.d.ts +280 -0
  9. package/package.json +14 -10
  10. package/src/components/basic/Button/Button.tsx +53 -13
  11. package/src/components/basic/Button/Button.types.ts +45 -9
  12. package/src/components/basic/Divider/Divider.tsx +60 -29
  13. package/src/components/basic/Icon/Icon.data.ts +474 -0
  14. package/src/components/basic/Icon/Icon.test.tsx +2 -2
  15. package/src/components/basic/Icon/Icon.tsx +48 -35
  16. package/src/components/basic/Icon/IconManager.ts +229 -0
  17. package/src/components/basic/Text/Text.styles.ts +3 -3
  18. package/src/components/basic/Text/Text.types.ts +14 -4
  19. package/src/components/basic/Typography/Typography.styles.ts +10 -9
  20. package/src/components/basic/Typography/Typography.tsx +15 -13
  21. package/src/components/basic/Typography/Typography.types.ts +41 -41
  22. package/src/components/basic/Typography/index.tsx +1 -1
  23. package/src/components/basic/Video/Video.styles.ts +777 -0
  24. package/src/components/basic/Video/Video.test.tsx +490 -0
  25. package/src/components/basic/Video/Video.tsx +1468 -0
  26. package/src/components/basic/Video/Video.types.ts +500 -0
  27. package/src/components/basic/Video/index.tsx +26 -0
  28. package/src/components/basic/index.tsx +13 -15
  29. package/src/components/common/ErrorBoundary.tsx +1 -1
  30. package/src/components/common/LazyComponent.tsx +9 -8
  31. package/src/components/common/SecurityProvider.tsx +2 -14
  32. package/src/components/common/ThemeProvider.tsx +43 -56
  33. package/src/components/common/VirtualList.tsx +187 -205
  34. package/src/components/common/index.tsx +25 -0
  35. package/src/components/display/Avatar/Avatar.styles.ts +1 -1
  36. package/src/components/display/Avatar/Avatar.tsx +6 -19
  37. package/src/components/display/Avatar/Avatar.types.ts +1 -1
  38. package/src/components/display/Avatar/index.ts +1 -1
  39. package/src/components/display/Badge/Badge.tsx +3 -16
  40. package/src/components/display/Badge/Badge.types.ts +1 -1
  41. package/src/components/display/Badge/index.ts +1 -1
  42. package/src/components/display/Calendar/Calendar.styles.ts +36 -36
  43. package/src/components/display/Calendar/Calendar.test.tsx +27 -15
  44. package/src/components/display/Calendar/Calendar.tsx +56 -35
  45. package/src/components/display/Calendar/Calendar.types.ts +1 -1
  46. package/src/components/display/Calendar/index.ts +1 -1
  47. package/src/components/display/Card/Card.styles.ts +2 -2
  48. package/src/components/display/Card/Card.test.tsx +6 -4
  49. package/src/components/display/Card/Card.tsx +1 -1
  50. package/src/components/display/Card/Card.types.ts +4 -4
  51. package/src/components/display/Card/index.ts +1 -1
  52. package/src/components/display/Carousel/Carousel.styles.ts +31 -31
  53. package/src/components/display/Carousel/Carousel.tsx +34 -39
  54. package/src/components/display/Carousel/Carousel.types.ts +1 -1
  55. package/src/components/display/Carousel/index.ts +1 -1
  56. package/src/components/display/List/List.styles.ts +3 -3
  57. package/src/components/display/List/List.tsx +0 -1
  58. package/src/components/display/List/index.ts +1 -1
  59. package/src/components/display/Rate/Rate.styles.ts +5 -17
  60. package/src/components/display/Rate/Rate.tsx +6 -14
  61. package/src/components/display/Rate/Rate.types.ts +4 -3
  62. package/src/components/display/Rate/index.ts +3 -11
  63. package/src/components/display/Table/Table.test.tsx +2 -0
  64. package/src/components/display/Table/Table.tsx +3 -7
  65. package/src/components/display/Table/Table.types.ts +3 -2
  66. package/src/components/display/Tag/Tag.styles.ts +31 -31
  67. package/src/components/display/Tag/Tag.tsx +9 -26
  68. package/src/components/display/Tag/Tag.types.ts +1 -1
  69. package/src/components/display/Tag/index.ts +1 -1
  70. package/src/components/display/Timeline/Timeline.styles.ts +32 -32
  71. package/src/components/display/Timeline/Timeline.tsx +23 -42
  72. package/src/components/display/Timeline/Timeline.types.ts +1 -1
  73. package/src/components/display/Timeline/index.ts +1 -1
  74. package/src/components/display/index.tsx +33 -29
  75. package/src/components/feedback/Loading/Loading.tsx +6 -1
  76. package/src/components/feedback/Loading/index.ts +2 -5
  77. package/src/components/feedback/Message/Message.styles.ts +3 -3
  78. package/src/components/feedback/Message/index.ts +2 -5
  79. package/src/components/feedback/Modal/Modal.styles.ts +1 -1
  80. package/src/components/feedback/Modal/Modal.tsx +9 -31
  81. package/src/components/feedback/Modal/Modal.types.ts +12 -2
  82. package/src/components/feedback/Notification/Notification.styles.ts +49 -39
  83. package/src/components/feedback/Notification/Notification.test.tsx +1 -1
  84. package/src/components/feedback/Notification/Notification.tsx +97 -120
  85. package/src/components/feedback/Notification/Notification.types.ts +11 -8
  86. package/src/components/feedback/Notification/NotificationManager.tsx +135 -106
  87. package/src/components/feedback/Notification/index.ts +10 -3
  88. package/src/components/feedback/Notification/index.tsx +16 -26
  89. package/src/components/feedback/Progress/Progress.styles.ts +23 -14
  90. package/src/components/feedback/Progress/Progress.tsx +93 -113
  91. package/src/components/feedback/Progress/Progress.types.ts +1 -1
  92. package/src/components/feedback/Progress/index.ts +1 -1
  93. package/src/components/feedback/Progress/utils/animation.ts +12 -23
  94. package/src/components/feedback/Progress/utils/index.ts +2 -2
  95. package/src/components/feedback/Progress/utils/progress-calculator.ts +14 -32
  96. package/src/components/feedback/Result/Result.styles.ts +29 -29
  97. package/src/components/feedback/Result/Result.tsx +8 -20
  98. package/src/components/feedback/Result/Result.types.ts +7 -7
  99. package/src/components/feedback/Result/index.tsx +1 -1
  100. package/src/components/feedback/Toast/Toast.styles.ts +1 -1
  101. package/src/components/feedback/Toast/Toast.tsx +25 -13
  102. package/src/components/feedback/Tooltip/Tooltip.examples.tsx +21 -44
  103. package/src/components/feedback/Tooltip/Tooltip.styles.ts +16 -22
  104. package/src/components/feedback/Tooltip/Tooltip.test.tsx +1 -1
  105. package/src/components/feedback/Tooltip/Tooltip.tsx +65 -46
  106. package/src/components/feedback/Tooltip/Tooltip.types.ts +14 -20
  107. package/src/components/feedback/Tooltip/index.ts +1 -1
  108. package/src/components/feedback/Tooltip/index.tsx +12 -24
  109. package/src/components/feedback/index.tsx +54 -42
  110. package/src/components/form/Cascader/Cascader.styles.ts +2 -2
  111. package/src/components/form/Cascader/Cascader.tsx +84 -88
  112. package/src/components/form/Cascader/Cascader.types.ts +49 -50
  113. package/src/components/form/Cascader/hooks/useCascaderFieldNames.ts +11 -8
  114. package/src/components/form/Cascader/hooks/useCascaderOptions.ts +73 -55
  115. package/src/components/form/Cascader/hooks/useCascaderState.ts +31 -25
  116. package/src/components/form/Cascader/index.ts +1 -1
  117. package/src/components/form/Cascader/utils/formatDisplayValue.ts +4 -4
  118. package/src/components/form/Checkbox/Checkbox.styles.ts +83 -84
  119. package/src/components/form/Checkbox/Checkbox.tsx +2 -9
  120. package/src/components/form/Checkbox/CheckboxGroup.tsx +7 -7
  121. package/src/components/form/DatePicker/DatePicker.test.tsx +1 -1
  122. package/src/components/form/DatePicker/DatePicker.tsx +91 -75
  123. package/src/components/form/DatePicker/DatePicker.types.ts +4 -1
  124. package/src/components/form/Form/Form.tsx +66 -504
  125. package/src/components/form/Form/Form.types.ts +16 -1
  126. package/src/components/form/Form/useFormLogic.ts +497 -0
  127. package/src/components/form/Input/Input.styles.ts +8 -1
  128. package/src/components/form/Input/Input.tsx +55 -291
  129. package/src/components/form/Input/Input.types.ts +13 -1
  130. package/src/components/form/Input/useInputLogic.test.ts +82 -0
  131. package/src/components/form/Input/useInputLogic.ts +260 -0
  132. package/src/components/form/InputNumber/InputNumber.styles.ts +76 -25
  133. package/src/components/form/InputNumber/InputNumber.tsx +53 -21
  134. package/src/components/form/InputNumber/InputNumber.types.ts +21 -3
  135. package/src/components/form/InputNumber/components/InputNumberClearButton.tsx +3 -11
  136. package/src/components/form/InputNumber/components/InputNumberControls.tsx +3 -12
  137. package/src/components/form/InputNumber/hooks/index.ts +1 -1
  138. package/src/components/form/InputNumber/hooks/useInputNumberState.ts +7 -9
  139. package/src/components/form/InputNumber/hooks/useInputNumberValidation.ts +18 -17
  140. package/src/components/form/InputNumber/index.ts +7 -7
  141. package/src/components/form/Radio/Radio.styles.ts +1 -8
  142. package/src/components/form/Radio/Radio.tsx +3 -9
  143. package/src/components/form/Radio/Radio.types.ts +5 -1
  144. package/src/components/form/Select/Select.styles.ts +5 -1
  145. package/src/components/form/Select/Select.tsx +15 -15
  146. package/src/components/form/Select/Select.types.ts +2 -1
  147. package/src/components/form/Slider/Slider.styles.ts +13 -13
  148. package/src/components/form/Slider/Slider.tsx +19 -33
  149. package/src/components/form/Slider/Slider.types.ts +14 -12
  150. package/src/components/form/Slider/index.tsx +2 -9
  151. package/src/components/form/Switch/Switch.styles.ts +1 -7
  152. package/src/components/form/Switch/Switch.tsx +7 -13
  153. package/src/components/form/Textarea/Textarea.styles.ts +4 -4
  154. package/src/components/form/Textarea/Textarea.tsx +7 -1
  155. package/src/components/form/Textarea/Textarea.types.ts +4 -1
  156. package/src/components/form/TimePicker/TimePicker.styles.ts +8 -12
  157. package/src/components/form/TimePicker/TimePicker.tsx +122 -100
  158. package/src/components/form/TimePicker/TimePicker.types.ts +2 -2
  159. package/src/components/form/TimePicker/index.ts +1 -1
  160. package/src/components/form/Transfer/Transfer.styles.ts +3 -15
  161. package/src/components/form/Transfer/Transfer.tsx +146 -134
  162. package/src/components/form/Transfer/Transfer.types.ts +34 -26
  163. package/src/components/form/Transfer/components/TransferItem.tsx +55 -62
  164. package/src/components/form/Transfer/components/TransferList.tsx +212 -199
  165. package/src/components/form/Transfer/components/TransferOperations.tsx +52 -55
  166. package/src/components/form/Transfer/components/TransferPagination.tsx +115 -111
  167. package/src/components/form/Transfer/components/TransferSearch.tsx +52 -55
  168. package/src/components/form/Transfer/hooks/useTransferData.ts +91 -81
  169. package/src/components/form/Transfer/hooks/useTransferState.ts +22 -16
  170. package/src/components/form/Transfer/index.ts +2 -8
  171. package/src/components/form/Upload/Upload.styles.ts +21 -21
  172. package/src/components/form/Upload/Upload.tsx +189 -142
  173. package/src/components/form/Upload/Upload.types.ts +31 -31
  174. package/src/components/form/Upload/index.tsx +1 -1
  175. package/src/components/form/index.tsx +60 -29
  176. package/src/components/index.tsx +0 -1
  177. package/src/components/layout/Affix/Affix.styles.ts +16 -11
  178. package/src/components/layout/Affix/Affix.tsx +67 -75
  179. package/src/components/layout/Affix/Affix.types.ts +18 -18
  180. package/src/components/layout/Affix/index.tsx +1 -1
  181. package/src/components/layout/Col/Col.styles.ts +17 -17
  182. package/src/components/layout/Col/Col.test.tsx +7 -5
  183. package/src/components/layout/Col/Col.tsx +3 -21
  184. package/src/components/layout/Col/Col.types.ts +1 -1
  185. package/src/components/layout/Container/Container.styles.ts +3 -1
  186. package/src/components/layout/Container/Container.tsx +2 -11
  187. package/src/components/layout/Grid/Grid.tsx +3 -53
  188. package/src/components/layout/Layout/Content.tsx +24 -32
  189. package/src/components/layout/Layout/Footer.tsx +24 -32
  190. package/src/components/layout/Layout/Header.tsx +24 -32
  191. package/src/components/layout/Layout/Layout.styles.ts +17 -17
  192. package/src/components/layout/Layout/Layout.tsx +14 -25
  193. package/src/components/layout/Layout/Layout.types.ts +29 -29
  194. package/src/components/layout/Layout/Sider.tsx +44 -56
  195. package/src/components/layout/Layout/index.tsx +16 -2
  196. package/src/components/layout/Row/Row.tsx +15 -43
  197. package/src/components/layout/Space/Space.tsx +3 -11
  198. package/src/components/layout/Space/Space.types.ts +1 -1
  199. package/src/components/layout/index.tsx +29 -19
  200. package/src/components/navigation/Menu/Menu.constants.ts +69 -0
  201. package/src/components/navigation/Menu/Menu.stories.tsx +107 -0
  202. package/src/components/navigation/Menu/Menu.styles.ts +25 -37
  203. package/src/components/navigation/Menu/Menu.tsx +8 -11
  204. package/src/components/navigation/Menu/Menu.types.ts +2 -2
  205. package/src/components/navigation/Menu/Menu.utils.ts +17 -17
  206. package/src/components/navigation/Menu/MenuItem.tsx +9 -11
  207. package/src/components/navigation/Menu/SubMenu.tsx +8 -6
  208. package/src/components/navigation/Menu/index.tsx +4 -69
  209. package/src/components/navigation/NavBar/NavBar.styles.ts +1 -1
  210. package/src/components/navigation/NavBar/NavBar.tsx +7 -10
  211. package/src/components/navigation/NavBar/NavBar.types.ts +3 -3
  212. package/src/components/navigation/NavBar/index.tsx +1 -1
  213. package/src/components/navigation/Pagination/Pagination.test.tsx +2 -3
  214. package/src/components/navigation/Pagination/Pagination.tsx +3 -3
  215. package/src/components/navigation/Pagination/Pagination.types.ts +3 -2
  216. package/src/components/navigation/Pagination/index.ts +9 -3
  217. package/src/components/navigation/Steps/Step.tsx +24 -44
  218. package/src/components/navigation/Steps/Steps.styles.ts +28 -13
  219. package/src/components/navigation/Steps/Steps.test.tsx +2 -0
  220. package/src/components/navigation/Steps/Steps.tsx +88 -89
  221. package/src/components/navigation/Steps/Steps.types.ts +30 -30
  222. package/src/components/navigation/Steps/index.tsx +1 -1
  223. package/src/components/navigation/Tabs/Tabs.test.tsx +3 -2
  224. package/src/components/navigation/Tabs/Tabs.types.ts +4 -3
  225. package/src/components/navigation/index.tsx +21 -16
  226. package/src/constants/index.ts +1 -1
  227. package/src/hooks/index.ts +52 -102
  228. package/src/hooks/types.ts +4 -5
  229. package/src/hooks/useAsync.ts +46 -47
  230. package/src/hooks/useClickOutside.ts +52 -0
  231. package/src/hooks/useCounter.ts +87 -0
  232. package/src/hooks/useDebounce.ts +150 -0
  233. package/src/hooks/useDeepCompareEffect.ts +88 -0
  234. package/src/hooks/useEventListener.ts +77 -0
  235. package/src/hooks/useMediaQuery.ts +75 -0
  236. package/src/hooks/useMutation.ts +233 -0
  237. package/src/hooks/usePerformance.ts +1 -64
  238. package/src/hooks/usePlatform.ts +3 -1
  239. package/src/hooks/usePrevious.ts +25 -0
  240. package/src/hooks/useRequest.ts +12 -7
  241. package/src/hooks/useStateManagement.ts +1 -1
  242. package/src/hooks/useStorage.ts +169 -0
  243. package/src/hooks/useStyle.ts +8 -2
  244. package/src/hooks/useToggle.ts +54 -0
  245. package/src/index.ts +34 -9
  246. package/src/theme/ThemeProvider.tsx +3 -7
  247. package/src/theme/ThemeProvider.types.ts +1 -1
  248. package/src/theme/defaults.ts +1 -1
  249. package/src/theme/design-system.ts +2 -2
  250. package/src/theme/design-tokens.ts +85 -99
  251. package/src/theme/generated/dark-theme.scss +1 -1
  252. package/src/theme/generated/tokens.scss +82 -18
  253. package/src/theme/index.ts +8 -29
  254. package/src/theme/responsive.tsx +36 -34
  255. package/src/theme/styles.ts +1 -1
  256. package/src/theme/useThemeUtils.ts +43 -43
  257. package/src/theme/utils.ts +32 -32
  258. package/src/theme/variables.ts +70 -51
  259. package/src/types/accessibility.ts +36 -37
  260. package/src/types/button.ts +25 -27
  261. package/src/types/component-props.ts +6 -1
  262. package/src/types/glob.d.ts +4 -0
  263. package/src/types/index.ts +2 -2
  264. package/src/types/standardized-components.ts +9 -3
  265. package/src/types/utils.ts +13 -23
  266. package/src/utils/__tests__/responsiveUtils.test.ts +5 -4
  267. package/src/utils/abort-controller.ts +48 -0
  268. package/src/utils/cache.ts +2 -6
  269. package/src/utils/createNamespace.ts +4 -4
  270. package/src/utils/environment.ts +26 -6
  271. package/src/utils/error-handler.ts +2 -2
  272. package/src/utils/errorLogger.ts +16 -20
  273. package/src/utils/formatUtils.ts +38 -70
  274. package/src/utils/http/error-codes.ts +314 -0
  275. package/src/utils/http/http-client.test.ts +63 -0
  276. package/src/utils/{network → http}/http-client.ts +45 -35
  277. package/src/utils/http/request-cache.ts +127 -0
  278. package/src/utils/http/request.ts +954 -0
  279. package/src/utils/http/taro-adapter.test.ts +74 -0
  280. package/src/utils/http/taro-adapter.ts +24 -0
  281. package/src/utils/http/types.ts +414 -0
  282. package/src/utils/http/web-adapter.ts +33 -0
  283. package/src/utils/index.ts +5 -8
  284. package/src/utils/inputValidator.ts +17 -14
  285. package/src/utils/performance/performance.ts +60 -71
  286. package/src/utils/responsiveUtils.ts +7 -16
  287. package/src/utils/rtl-support.ts +29 -19
  288. package/src/utils/security/api-security.ts +47 -39
  289. package/src/utils/securityHeaders.ts +61 -67
  290. package/src/utils/typeHelpers.ts +10 -10
  291. package/src/utils/types/dataProcessing.ts +93 -92
  292. package/src/utils/types/typeHelpers.ts +31 -21
  293. package/src/utils/xssProtection.ts +96 -48
  294. package/dist/js/index-6NJ3A1Dn.js.map +0 -1
  295. package/dist/js/index-DffLRSro.js.map +0 -1
  296. package/src/components/form/Input/Input.enhanced.tsx +0 -732
  297. package/src/components/navigation/Menu/__tests__/Menu.test.tsx +0 -687
  298. package/src/components/navigation/Tree/Tree.styles.ts +0 -553
  299. package/src/components/navigation/Tree/Tree.test.basic.tsx +0 -7
  300. package/src/components/navigation/Tree/Tree.test.functional.tsx +0 -496
  301. package/src/components/navigation/Tree/Tree.test.import.check.tsx +0 -6
  302. package/src/components/navigation/Tree/Tree.test.import.tsx +0 -6
  303. package/src/components/navigation/Tree/Tree.test.minimal.tsx +0 -5
  304. package/src/components/navigation/Tree/Tree.test.simple.tsx +0 -30
  305. package/src/components/navigation/Tree/Tree.test.tsx +0 -908
  306. package/src/components/navigation/Tree/Tree.test.working.tsx +0 -673
  307. package/src/components/navigation/Tree/Tree.tsx +0 -600
  308. package/src/components/navigation/Tree/Tree.types.ts +0 -909
  309. package/src/components/navigation/Tree/Tree.utils.ts +0 -452
  310. package/src/components/navigation/Tree/index.ts +0 -33
  311. package/src/components/navigation/Tree/index.tsx +0 -23
  312. package/src/utils/network/http-client.test.ts +0 -18
@@ -46,7 +46,7 @@ export class MemoryManager {
46
46
  }
47
47
 
48
48
  static cleanup(): void {
49
- this.cleanupCallbacks.forEach(callback => callback());
49
+ this.cleanupCallbacks.forEach((callback) => callback());
50
50
  this.cleanupCallbacks.clear();
51
51
  }
52
52
 
@@ -65,29 +65,17 @@ export class MemoryManager {
65
65
  }
66
66
 
67
67
  // 性能优化Hooks
68
- export function useDebounce<T extends (...args: unknown[]) => unknown>(
69
- callback: T,
70
- delay: number
71
- ): T {
72
- return useMemo(
73
- () => debounce(callback, delay) as unknown as T,
74
- [callback, delay]
75
- );
68
+ export function useDebounce<T extends (...args: unknown[]) => unknown>(callback: T, delay: number): T {
69
+ return useMemo(() => debounce(callback, delay) as unknown as T, [callback, delay]);
76
70
  }
77
71
 
78
- export function useThrottle<T extends (...args: unknown[]) => unknown>(
79
- callback: T,
80
- delay: number
81
- ): T {
82
- return useMemo(
83
- () => throttle(callback, delay) as unknown as T,
84
- [callback, delay]
85
- );
72
+ export function useThrottle<T extends (...args: unknown[]) => unknown>(callback: T, delay: number): T {
73
+ return useMemo(() => throttle(callback, delay) as unknown as T, [callback, delay]);
86
74
  }
87
75
 
88
76
  export function useLazyLoad<T>(
89
77
  loader: () => Promise<T>,
90
- deps: any[] = []
78
+ deps: any[] = [],
91
79
  ): { data: T | null; loading: boolean; error: Error | null; reload: () => void } {
92
80
  const [data, setData] = useState<T | null>(null);
93
81
  const [loading, setLoading] = useState(false);
@@ -116,7 +104,7 @@ export function useLazyLoad<T>(
116
104
 
117
105
  export function useIntersectionObserver(
118
106
  callback: (entry: IntersectionObserverEntry) => void,
119
- options: IntersectionObserverInit = {}
107
+ options: IntersectionObserverInit = {},
120
108
  ): (node: Element | null) => void {
121
109
  const [node, setNode] = useState<Element | null>(null);
122
110
 
@@ -137,9 +125,7 @@ export function useIntersectionObserver(
137
125
  return setNode;
138
126
  }
139
127
 
140
- export function useResizeObserver(
141
- callback: (entry: ResizeObserverEntry) => void
142
- ): (node: Element | null) => void {
128
+ export function useResizeObserver(callback: (entry: ResizeObserverEntry) => void): (node: Element | null) => void {
143
129
  const [node, setNode] = useState<Element | null>(null);
144
130
 
145
131
  useEffect(() => {
@@ -190,9 +176,7 @@ export function usePerformanceMonitor({
190
176
  const navigation = performance.getEntriesByType('navigation')[0] as PerformanceNavigationTiming;
191
177
  const loadTime = navigation ? navigation.loadEventEnd - navigation.fetchStart : 0;
192
178
 
193
- const isHealthy =
194
- fps >= (thresholds.fps || 30) &&
195
- memory <= (thresholds.memory || 80);
179
+ const isHealthy = fps >= (thresholds.fps || 30) && memory <= (thresholds.memory || 80);
196
180
 
197
181
  setMetrics({
198
182
  fps,
@@ -241,17 +225,20 @@ export function useBatch<T>(callback: (items: T[]) => void, delay: number = 100)
241
225
  }
242
226
  }, [callback]);
243
227
 
244
- const addItem = useCallback((item: T) => {
245
- batchRef.current.push(item);
228
+ const addItem = useCallback(
229
+ (item: T) => {
230
+ batchRef.current.push(item);
246
231
 
247
- if (timeoutRef.current) {
248
- clearTimeout(timeoutRef.current);
249
- }
232
+ if (timeoutRef.current) {
233
+ clearTimeout(timeoutRef.current);
234
+ }
250
235
 
251
- timeoutRef.current = setTimeout(() => {
252
- flush();
253
- }, delay);
254
- }, [flush, delay]);
236
+ timeoutRef.current = setTimeout(() => {
237
+ flush();
238
+ }, delay);
239
+ },
240
+ [flush, delay],
241
+ );
255
242
 
256
243
  useEffect(() => {
257
244
  return () => {
@@ -271,10 +258,13 @@ export function useCache<T>(key: string, initialValue: T, deps: any[] = []): [T,
271
258
  return cached ? JSON.parse(cached) : initialValue;
272
259
  });
273
260
 
274
- const updateValue = useCallback((newValue: T) => {
275
- setValue(newValue);
276
- localStorage.setItem(`cache_${key}`, JSON.stringify(newValue));
277
- }, [key]);
261
+ const updateValue = useCallback(
262
+ (newValue: T) => {
263
+ setValue(newValue);
264
+ localStorage.setItem(`cache_${key}`, JSON.stringify(newValue));
265
+ },
266
+ [key],
267
+ );
278
268
 
279
269
  useEffect(() => {
280
270
  const cached = localStorage.getItem(`cache_${key}`);
@@ -295,7 +285,7 @@ export function useOptimizedRequest<T>(
295
285
  retryDelay?: number;
296
286
  debounceTime?: number;
297
287
  throttleTime?: number;
298
- } = {}
288
+ } = {},
299
289
  ) {
300
290
  const {
301
291
  cacheKey,
@@ -336,7 +326,7 @@ export function useOptimizedRequest<T>(
336
326
  attempts++;
337
327
 
338
328
  if (attempts < retryCount) {
339
- await new Promise(resolve => setTimeout(resolve, retryDelay));
329
+ await new Promise((resolve) => setTimeout(resolve, retryDelay));
340
330
  }
341
331
  }
342
332
  }
@@ -393,7 +383,7 @@ export function debounce<T extends (...args: unknown[]) => unknown>(
393
383
  leading?: boolean;
394
384
  trailing?: boolean;
395
385
  maxWait?: number;
396
- } = {}
386
+ } = {},
397
387
  ): (...args: Parameters<T>) => void {
398
388
  const { leading = false, trailing = true, maxWait } = options;
399
389
  let timeoutId: NodeJS.Timeout | null = null;
@@ -409,17 +399,17 @@ export function debounce<T extends (...args: unknown[]) => unknown>(
409
399
  lastArgs = null;
410
400
  lastThis = null;
411
401
  lastCallTime = time;
412
-
402
+
413
403
  if (args) {
414
404
  result = func.apply(thisArg as any, args) as ReturnType<T>;
415
405
  }
416
-
406
+
417
407
  return result;
418
408
  };
419
409
 
420
410
  const shouldInvoke = (time: number) => {
421
411
  const timeSinceLastCall = time - lastCallTime;
422
-
412
+
423
413
  return (
424
414
  lastCallTime === 0 || // 首次调用
425
415
  timeSinceLastCall >= delay || // 超过延迟时间
@@ -429,11 +419,11 @@ export function debounce<T extends (...args: unknown[]) => unknown>(
429
419
 
430
420
  const trailingEdge = (time: number) => {
431
421
  timeoutId = null;
432
-
422
+
433
423
  if (trailing && lastArgs) {
434
424
  return invokeFunc(time);
435
425
  }
436
-
426
+
437
427
  lastArgs = null;
438
428
  lastThis = null;
439
429
  return result;
@@ -441,21 +431,21 @@ export function debounce<T extends (...args: unknown[]) => unknown>(
441
431
 
442
432
  const timerExpired = (): ReturnType<T> | null => {
443
433
  const time = Date.now();
444
-
434
+
445
435
  if (shouldInvoke(time)) {
446
436
  return trailingEdge(time);
447
437
  }
448
-
438
+
449
439
  // 重新计算剩余时间
450
440
  const timeSinceLastCall = time - lastCallTime;
451
441
  const timeWaiting = delay - timeSinceLastCall;
452
442
  const remainingWait = maxWait !== undefined ? Math.min(timeWaiting, maxWait - timeSinceLastCall) : timeWaiting;
453
-
443
+
454
444
  timeoutId = setTimeout(timerExpired, remainingWait);
455
445
  return null;
456
446
  };
457
447
 
458
- const debounced = function(this: unknown, ...args: Parameters<T>) {
448
+ const debounced = function (this: unknown, ...args: Parameters<T>) {
459
449
  const time = Date.now();
460
450
  lastArgs = args;
461
451
  lastThis = this;
@@ -508,7 +498,7 @@ export function throttle<T extends (...args: unknown[]) => unknown>(
508
498
  options: {
509
499
  leading?: boolean;
510
500
  trailing?: boolean;
511
- } = {}
501
+ } = {},
512
502
  ): (...args: Parameters<T>) => void {
513
503
  const { leading = true, trailing = true } = options;
514
504
  let lastCallTime = 0;
@@ -516,7 +506,7 @@ export function throttle<T extends (...args: unknown[]) => unknown>(
516
506
  let lastArgs: Parameters<T> | null = null;
517
507
  let lastThis: unknown = null;
518
508
 
519
- const throttled = function(this: unknown, ...args: Parameters<T>) {
509
+ const throttled = function (this: unknown, ...args: Parameters<T>) {
520
510
  const now = Date.now();
521
511
  const timeSinceLastCall = now - lastCallTime;
522
512
 
@@ -533,14 +523,14 @@ export function throttle<T extends (...args: unknown[]) => unknown>(
533
523
  clearTimeout(timeoutId);
534
524
  timeoutId = null;
535
525
  }
536
-
526
+
537
527
  lastCallTime = now;
538
528
  func.apply(this, args);
539
529
  } else if (trailing && !timeoutId) {
540
530
  timeoutId = setTimeout(() => {
541
531
  lastCallTime = leading ? Date.now() : 0;
542
532
  timeoutId = null;
543
-
533
+
544
534
  if (lastArgs && trailing) {
545
535
  func.apply(lastThis, lastArgs);
546
536
  }
@@ -572,7 +562,7 @@ export function rafThrottle<T extends (...args: unknown[]) => unknown>(func: T):
572
562
  let lastArgs: Parameters<T> | null = null;
573
563
  let lastThis: unknown = null;
574
564
 
575
- const throttled = function(this: unknown, ...args: Parameters<T>) {
565
+ const throttled = function (this: unknown, ...args: Parameters<T>) {
576
566
  lastArgs = args;
577
567
  lastThis = this;
578
568
 
@@ -612,7 +602,7 @@ export function lazyLoad<T>(
612
602
  timeout?: number;
613
603
  retryCount?: number;
614
604
  retryDelay?: number;
615
- } = {}
605
+ } = {},
616
606
  ): Promise<T> {
617
607
  const { timeout = 5000, retryCount = 3, retryDelay = 1000 } = options;
618
608
  let retries = 0;
@@ -630,7 +620,7 @@ export function lazyLoad<T>(
630
620
  })
631
621
  .catch((error) => {
632
622
  clearTimeout(timeoutId);
633
-
623
+
634
624
  if (retries < retryCount) {
635
625
  retries++;
636
626
  setTimeout(() => {
@@ -661,7 +651,7 @@ export function lazyLoadImage(
661
651
  placeholder?: string;
662
652
  onLoad?: () => void;
663
653
  onError?: () => void;
664
- } = {}
654
+ } = {},
665
655
  ): void {
666
656
  const {
667
657
  threshold = 0.1,
@@ -700,7 +690,7 @@ export function lazyLoadImage(
700
690
  }
701
691
  });
702
692
  },
703
- { threshold, rootMargin }
693
+ { threshold, rootMargin },
704
694
  );
705
695
 
706
696
  observer.observe(element);
@@ -714,7 +704,7 @@ export function lazyLoadImage(
714
704
  */
715
705
  export function batch<T extends (...args: any[]) => any>(
716
706
  func: (items: Parameters<T>[]) => void,
717
- wait: number
707
+ wait: number,
718
708
  ): (...args: Parameters<T>) => void {
719
709
  let batch: Parameters<T>[] = [];
720
710
  let timeoutId: NodeJS.Timeout | null = null;
@@ -744,13 +734,13 @@ export function batch<T extends (...args: any[]) => any>(
744
734
  */
745
735
  export function memoize<T extends (...args: unknown[]) => unknown>(
746
736
  func: T,
747
- keyGenerator?: (...args: Parameters<T>) => string
737
+ keyGenerator?: (...args: Parameters<T>) => string,
748
738
  ): T {
749
739
  const cache = new Map<string, ReturnType<T>>();
750
740
 
751
741
  return ((...args: Parameters<T>) => {
752
742
  const key = keyGenerator ? keyGenerator(...args) : JSON.stringify(args);
753
-
743
+
754
744
  if (cache.has(key)) {
755
745
  return cache.get(key)!;
756
746
  }
@@ -765,11 +755,13 @@ export function memoize<T extends (...args: unknown[]) => unknown>(
765
755
  * 性能监控装饰器
766
756
  * @param options 选项
767
757
  */
768
- export function performanceMonitor(options: {
769
- name?: string;
770
- threshold?: number;
771
- logLevel?: 'warn' | 'error' | 'info';
772
- } = {}) {
758
+ export function performanceMonitor(
759
+ options: {
760
+ name?: string;
761
+ threshold?: number;
762
+ logLevel?: 'warn' | 'error' | 'info';
763
+ } = {},
764
+ ) {
773
765
  return function (_target: unknown, propertyKey: string, descriptor: PropertyDescriptor) {
774
766
  const originalMethod = descriptor.value;
775
767
  const { name = propertyKey, threshold = 16, logLevel = 'warn' } = options;
@@ -814,10 +806,7 @@ export function raf(callback: () => void): () => void {
814
806
  * @param callback 回调函数
815
807
  * @param options 选项
816
808
  */
817
- export function idleCallback(
818
- callback: () => void,
819
- options: { timeout?: number } = {}
820
- ): () => void {
809
+ export function idleCallback(callback: () => void, options: { timeout?: number } = {}): () => void {
821
810
  let handle: number;
822
811
 
823
812
  if ('requestIdleCallback' in window) {
@@ -113,7 +113,7 @@ class ResponsiveUtils {
113
113
  }
114
114
 
115
115
  // 如果没有找到,返回默认值(确保不会返回undefined)
116
- return (responsiveValue.xs || value as T) as T;
116
+ return (responsiveValue.xs || (value as T)) as T;
117
117
  }
118
118
 
119
119
  /**
@@ -142,11 +142,7 @@ class ResponsiveUtils {
142
142
  * @param otherStyles 其他平台样式
143
143
  * @returns 当前平台的样式
144
144
  */
145
- getPlatformStyles<T>(
146
- webStyles: T,
147
- weappStyles: T,
148
- otherStyles?: Partial<Record<Platform, T>>
149
- ): T {
145
+ getPlatformStyles<T>(webStyles: T, weappStyles: T, otherStyles?: Partial<Record<Platform, T>>): T {
150
146
  if (this.platform === 'web' || this.platform === 'h5') {
151
147
  return webStyles;
152
148
  }
@@ -274,7 +270,7 @@ export const useResponsive = () => {
274
270
  const systemInfo = Taro.getSystemInfoSync();
275
271
  setWindowSize({
276
272
  windowWidth: systemInfo.windowWidth || 375,
277
- windowHeight: systemInfo.windowHeight || 667
273
+ windowHeight: systemInfo.windowHeight || 667,
278
274
  });
279
275
  } catch (e) {
280
276
  // 如果获取失败,使用默认值
@@ -320,14 +316,12 @@ export const useResponsive = () => {
320
316
  safeArea,
321
317
  statusBarHeight,
322
318
  navigationBarHeight,
323
- getResponsiveValue: <T>(value: ResponsiveValue<T>) =>
324
- responsiveUtils.getResponsiveValue(value, windowWidth),
319
+ getResponsiveValue: <T>(value: ResponsiveValue<T>) => responsiveUtils.getResponsiveValue(value, windowWidth),
325
320
  generateResponsiveStyles: (styles: ResponsiveStyle) =>
326
321
  responsiveUtils.generateResponsiveStyles(styles, windowWidth),
327
322
  getPlatformStyles: <T>(webStyles: T, weappStyles: T, otherStyles?: Partial<Record<Platform, T>>) =>
328
323
  responsiveUtils.getPlatformStyles(webStyles, weappStyles, otherStyles),
329
- matchScreenSize: (size: ScreenSize) =>
330
- responsiveUtils.matchScreenSize(size, windowWidth),
324
+ matchScreenSize: (size: ScreenSize) => responsiveUtils.matchScreenSize(size, windowWidth),
331
325
  };
332
326
  };
333
327
 
@@ -338,11 +332,8 @@ export const getResponsiveValue = <T>(value: ResponsiveValue<T>, width: number)
338
332
  responsiveUtils.getResponsiveValue(value, width);
339
333
  export const generateResponsiveStyles = (styles: ResponsiveStyle, width: number) =>
340
334
  responsiveUtils.generateResponsiveStyles(styles, width);
341
- export const getPlatformStyles = <T>(
342
- webStyles: T,
343
- weappStyles: T,
344
- otherStyles?: Partial<Record<Platform, T>>
345
- ) => responsiveUtils.getPlatformStyles(webStyles, weappStyles, otherStyles);
335
+ export const getPlatformStyles = <T>(webStyles: T, weappStyles: T, otherStyles?: Partial<Record<Platform, T>>) =>
336
+ responsiveUtils.getPlatformStyles(webStyles, weappStyles, otherStyles);
346
337
  export const getPlatform = () => responsiveUtils.getPlatform();
347
338
  export const isMobile = (width: number) => responsiveUtils.isMobile(width);
348
339
  export const isTablet = (width: number) => responsiveUtils.isTablet(width);
@@ -8,13 +8,13 @@ type SupportedLanguage = 'ar-SA' | 'he-IL' | 'fa-IR' | 'ur-PK' | string;
8
8
 
9
9
  // RTL语言列表
10
10
  export const RTL_LANGUAGES: SupportedLanguage[] = [
11
- 'ar-SA', // 阿拉伯语
12
- 'he-IL', // 希伯来语
13
- 'fa-IR', // 波斯语
14
- 'ur-PK', // 乌尔都语
15
- 'yi', // 意第绪语
16
- 'ps', // 普什图语
17
- 'sd', // 信德语
11
+ 'ar-SA', // 阿拉伯语
12
+ 'he-IL', // 希伯来语
13
+ 'fa-IR', // 波斯语
14
+ 'ur-PK', // 乌尔都语
15
+ 'yi', // 意第绪语
16
+ 'ps', // 普什图语
17
+ 'sd', // 信德语
18
18
  ];
19
19
 
20
20
  // 扩展RTL语言配置
@@ -38,7 +38,8 @@ export const RTL_CONFIGS: Record<string, RTLConfig> = {
38
38
  language: 'ar-SA',
39
39
  name: 'Arabic (Saudi Arabia)',
40
40
  rtl: true,
41
- fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", "Tahoma", "Arial Unicode MS", "Traditional Arabic"',
41
+ fontFamily:
42
+ '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", "Tahoma", "Arial Unicode MS", "Traditional Arabic"',
42
43
  textAlign: 'right',
43
44
  direction: 'rtl',
44
45
  flipProperties: true,
@@ -50,7 +51,8 @@ export const RTL_CONFIGS: Record<string, RTLConfig> = {
50
51
  language: 'he-IL',
51
52
  name: 'Hebrew (Israel)',
52
53
  rtl: true,
53
- fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", "David", "Arial Hebrew", "Arial"',
54
+ fontFamily:
55
+ '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", "David", "Arial Hebrew", "Arial"',
54
56
  textAlign: 'right',
55
57
  direction: 'rtl',
56
58
  flipProperties: true,
@@ -62,7 +64,8 @@ export const RTL_CONFIGS: Record<string, RTLConfig> = {
62
64
  language: 'fa-IR',
63
65
  name: 'Persian (Iran)',
64
66
  rtl: true,
65
- fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", "Tahoma", "Arial Unicode MS", "IRANSans", "Vazir"',
67
+ fontFamily:
68
+ '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", "Tahoma", "Arial Unicode MS", "IRANSans", "Vazir"',
66
69
  textAlign: 'right',
67
70
  direction: 'rtl',
68
71
  flipProperties: true,
@@ -74,7 +77,8 @@ export const RTL_CONFIGS: Record<string, RTLConfig> = {
74
77
  language: 'ur-PK',
75
78
  name: 'Urdu (Pakistan)',
76
79
  rtl: true,
77
- fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", "Noto Nastaliq Urdu", "Arial Unicode MS", "Tahoma"',
80
+ fontFamily:
81
+ '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", "Noto Nastaliq Urdu", "Arial Unicode MS", "Tahoma"',
78
82
  textAlign: 'right',
79
83
  direction: 'rtl',
80
84
  flipProperties: true,
@@ -86,11 +90,13 @@ export const RTL_CONFIGS: Record<string, RTLConfig> = {
86
90
 
87
91
  // 检查是否为RTL语言
88
92
  export const isRTL = (language: string): boolean => {
89
- return RTL_LANGUAGES.includes(language as SupportedLanguage) ||
90
- language.startsWith('ar') ||
91
- language.startsWith('he') ||
92
- language.startsWith('fa') ||
93
- language.startsWith('ur');
93
+ return (
94
+ RTL_LANGUAGES.includes(language as SupportedLanguage) ||
95
+ language.startsWith('ar') ||
96
+ language.startsWith('he') ||
97
+ language.startsWith('fa') ||
98
+ language.startsWith('ur')
99
+ );
94
100
  };
95
101
 
96
102
  // 应用RTL样式
@@ -129,7 +135,9 @@ export const applyRTLStyles = (language: string): void => {
129
135
  transform: scaleX(-1);
130
136
  }
131
137
  .rtl .flip-property {
132
- ${config.flipProperties ? `
138
+ ${
139
+ config.flipProperties
140
+ ? `
133
141
  margin-left: initial;
134
142
  margin-right: initial;
135
143
  padding-left: initial;
@@ -137,7 +145,9 @@ export const applyRTLStyles = (language: string): void => {
137
145
  border-left: initial;
138
146
  border-right: initial;
139
147
  border-radius: initial;
140
- ` : ''}
148
+ `
149
+ : ''
150
+ }
141
151
  }
142
152
  `;
143
153
 
@@ -322,7 +332,7 @@ export const createRTLCSS = (css: string, language: string): string => {
322
332
  ];
323
333
 
324
334
  let rtlCSS = css;
325
- rtlRules.forEach(rule => {
335
+ rtlRules.forEach((rule) => {
326
336
  rtlCSS = rtlCSS.replace(rule.pattern, rule.replacement);
327
337
  });
328
338