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,537 @@
1
+ import { useMemo } from 'react';
2
+ import { useTheme } from './useTheme';
3
+ import { ThemeConfig } from '../theme';
4
+
5
+ /**
6
+ * 样式工具Hook
7
+ * 提供便捷的样式生成和操作功能
8
+ */
9
+ export const useStyle = () => {
10
+ const { theme, createStyleGenerator } = useTheme();
11
+ const currentTheme = theme;
12
+ const styleGenerator = useMemo(() => createStyleGenerator(), [theme]);
13
+
14
+ /**
15
+ * 创建类名字符串
16
+ * @param classes 类名数组或对象
17
+ * @returns 合并后的类名字符串
18
+ */
19
+ const cn = (...classes: (string | undefined | null | false | { [key: string]: boolean })[]): string => {
20
+ return classes
21
+ .filter(Boolean)
22
+ .map((item) => {
23
+ if (typeof item === 'string') return item;
24
+ if (typeof item === 'object' && item !== null) {
25
+ return Object.entries(item)
26
+ .filter(([, value]) => value)
27
+ .map(([key]) => key)
28
+ .join(' ');
29
+ }
30
+ return '';
31
+ })
32
+ .filter(Boolean)
33
+ .join(' ');
34
+ };
35
+
36
+ /**
37
+ * 创建样式对象
38
+ * @param styles 样式对象或函数
39
+ * @returns 合并后的样式对象
40
+ */
41
+ const css = (
42
+ ...styles: (Record<string, unknown> | undefined | null | ((theme: ThemeConfig) => Record<string, unknown>))[]
43
+ ): Record<string, unknown> => {
44
+ return styles.reduce<Record<string, unknown>>(
45
+ (acc, style) => {
46
+ if (!style) return acc;
47
+
48
+ const resolvedStyle = typeof style === 'function' ? style(currentTheme) : style;
49
+ return { ...acc, ...resolvedStyle };
50
+ },
51
+ {} as Record<string, unknown>,
52
+ );
53
+ };
54
+
55
+ /**
56
+ * 创建响应式样式
57
+ * @param breakpoints 断点配置
58
+ * @returns 响应式样式对象
59
+ */
60
+ const responsive = (breakpoints: {
61
+ base?: Record<string, unknown>;
62
+ sm?: Record<string, unknown>;
63
+ md?: Record<string, unknown>;
64
+ lg?: Record<string, unknown>;
65
+ xl?: Record<string, unknown>;
66
+ xxl?: Record<string, unknown>;
67
+ }): Record<string, unknown> => {
68
+ const result: Record<string, unknown> = {};
69
+
70
+ if (breakpoints.base) {
71
+ Object.assign(result, breakpoints.base);
72
+ }
73
+
74
+ // 添加媒体查询样式
75
+ const mediaQueries = {
76
+ sm: `@media (min-width: ${currentTheme.spacing.breakpoints.sm}px)`,
77
+ md: `@media (min-width: ${currentTheme.spacing.breakpoints.md}px)`,
78
+ lg: `@media (min-width: ${currentTheme.spacing.breakpoints.lg}px)`,
79
+ xl: `@media (min-width: ${currentTheme.spacing.breakpoints.xl}px)`,
80
+ xxl: `@media (min-width: ${currentTheme.spacing.breakpoints.xxl}px)`,
81
+ };
82
+
83
+ Object.entries(mediaQueries).forEach(([key, query]) => {
84
+ const style = breakpoints[key as keyof typeof breakpoints];
85
+ if (style) {
86
+ result[query as keyof Record<string, unknown>] = style;
87
+ }
88
+ });
89
+
90
+ return result;
91
+ };
92
+
93
+ /**
94
+ * 创建条件样式
95
+ * @param condition 条件
96
+ * @param trueStyle 条件为真时的样式
97
+ * @param falseStyle 条件为假时的样式
98
+ * @returns 样式对象
99
+ */
100
+ const conditional = (
101
+ condition: boolean,
102
+ trueStyle: Record<string, unknown>,
103
+ falseStyle?: Record<string, unknown>,
104
+ ): Record<string, unknown> => {
105
+ return condition ? trueStyle : falseStyle || {};
106
+ };
107
+
108
+ /**
109
+ * 创建悬停样式
110
+ * @param hoverStyle 悬停样式
111
+ * @param baseStyle 基础样式
112
+ * @returns 包含悬停效果的样式对象
113
+ */
114
+ const hover = (hoverStyle: Record<string, unknown>, baseStyle?: Record<string, unknown>): Record<string, unknown> => {
115
+ return {
116
+ ...baseStyle,
117
+ '&:hover': hoverStyle,
118
+ };
119
+ };
120
+
121
+ /**
122
+ * 创建焦点样式
123
+ * @param focusStyle 焦点样式
124
+ * @param baseStyle 基础样式
125
+ * @returns 包含焦点效果的样式对象
126
+ */
127
+ const focus = (focusStyle: Record<string, unknown>, baseStyle?: Record<string, unknown>): Record<string, unknown> => {
128
+ return {
129
+ ...baseStyle,
130
+ '&:focus': focusStyle,
131
+ };
132
+ };
133
+
134
+ /**
135
+ * 创建激活样式
136
+ * @param activeStyle 激活样式
137
+ * @param baseStyle 基础样式
138
+ * @returns 包含激活效果的样式对象
139
+ */
140
+ const active = (activeStyle: Record<string, unknown>, baseStyle?: Record<string, unknown>): Record<string, unknown> => {
141
+ return {
142
+ ...baseStyle,
143
+ '&:active': activeStyle,
144
+ };
145
+ };
146
+
147
+ /**
148
+ * 创建禁用样式
149
+ * @param disabledStyle 禁用样式
150
+ * @param baseStyle 基础样式
151
+ * @returns 包含禁用效果的样式对象
152
+ */
153
+ const disabled = (disabledStyle: Record<string, unknown>, baseStyle?: Record<string, unknown>): Record<string, unknown> => {
154
+ return {
155
+ ...baseStyle,
156
+ '&:disabled': disabledStyle,
157
+ };
158
+ };
159
+
160
+ /**
161
+ * 创建组合交互样式
162
+ * @param interactions 交互配置
163
+ * @returns 包含所有交互效果的样式对象
164
+ */
165
+ const interactions = (
166
+ interactions: {
167
+ hover?: Record<string, unknown>;
168
+ focus?: Record<string, unknown>;
169
+ active?: Record<string, unknown>;
170
+ disabled?: Record<string, unknown>;
171
+ },
172
+ baseStyle?: Record<string, unknown>,
173
+ ): Record<string, unknown> => {
174
+ const result: Record<string, unknown> = { ...baseStyle };
175
+
176
+ if (interactions.hover) {
177
+ result['&:hover'] = interactions.hover;
178
+ }
179
+
180
+ if (interactions.focus) {
181
+ result['&:focus'] = interactions.focus;
182
+ }
183
+
184
+ if (interactions.active) {
185
+ result['&:active'] = interactions.active;
186
+ }
187
+
188
+ if (interactions.disabled) {
189
+ result['&:disabled'] = interactions.disabled;
190
+ }
191
+
192
+ return result;
193
+ };
194
+
195
+ /**
196
+ * 创建动画样式
197
+ * @param animation 动画配置
198
+ * @returns 动画样式对象
199
+ */
200
+ const animate = (animation: {
201
+ name: string;
202
+ duration?: string | number;
203
+ delay?: string | number;
204
+ ease?: string;
205
+ iterationCount?: string | number;
206
+ direction?: string;
207
+ fillMode?: string;
208
+ }): Record<string, unknown> => {
209
+ const {
210
+ name,
211
+ duration = currentTheme.animation.duration.normal,
212
+ delay = 0,
213
+ ease = currentTheme.animation.easing.ease,
214
+ iterationCount = 1,
215
+ direction = 'normal',
216
+ fillMode = 'forwards',
217
+ } = animation;
218
+
219
+ return {
220
+ animation: `${name} ${duration} ${ease} ${delay} ${iterationCount} ${direction} ${fillMode}`,
221
+ };
222
+ };
223
+
224
+ /**
225
+ * 创建变换样式
226
+ * @param transforms 变换配置
227
+ * @returns 变换样式对象
228
+ */
229
+ const transform = (transforms: {
230
+ translateX?: number | string;
231
+ translateY?: number | string;
232
+ translateZ?: number | string;
233
+ scale?: number;
234
+ scaleX?: number;
235
+ scaleY?: number;
236
+ rotate?: number | string;
237
+ rotateX?: number | string;
238
+ rotateY?: number | string;
239
+ rotateZ?: number | string;
240
+ skewX?: number | string;
241
+ skewY?: number | string;
242
+ }): Record<string, unknown> => {
243
+ const transformFunctions: string[] = [];
244
+
245
+ if (transforms.translateX !== undefined) {
246
+ transformFunctions.push(
247
+ `translateX(${
248
+ typeof transforms.translateX === 'number' ? `${transforms.translateX}px` : transforms.translateX
249
+ })`,
250
+ );
251
+ }
252
+
253
+ if (transforms.translateY !== undefined) {
254
+ transformFunctions.push(
255
+ `translateY(${
256
+ typeof transforms.translateY === 'number' ? `${transforms.translateY}px` : transforms.translateY
257
+ })`,
258
+ );
259
+ }
260
+
261
+ if (transforms.translateZ !== undefined) {
262
+ transformFunctions.push(
263
+ `translateZ(${
264
+ typeof transforms.translateZ === 'number' ? `${transforms.translateZ}px` : transforms.translateZ
265
+ })`,
266
+ );
267
+ }
268
+
269
+ if (transforms.scale !== undefined) {
270
+ transformFunctions.push(`scale(${transforms.scale})`);
271
+ }
272
+
273
+ if (transforms.scaleX !== undefined) {
274
+ transformFunctions.push(`scaleX(${transforms.scaleX})`);
275
+ }
276
+
277
+ if (transforms.scaleY !== undefined) {
278
+ transformFunctions.push(`scaleY(${transforms.scaleY})`);
279
+ }
280
+
281
+ if (transforms.rotate !== undefined) {
282
+ transformFunctions.push(
283
+ `rotate(${typeof transforms.rotate === 'number' ? `${transforms.rotate}deg` : transforms.rotate})`,
284
+ );
285
+ }
286
+
287
+ if (transforms.rotateX !== undefined) {
288
+ transformFunctions.push(
289
+ `rotateX(${typeof transforms.rotateX === 'number' ? `${transforms.rotateX}deg` : transforms.rotateX})`,
290
+ );
291
+ }
292
+
293
+ if (transforms.rotateY !== undefined) {
294
+ transformFunctions.push(
295
+ `rotateY(${typeof transforms.rotateY === 'number' ? `${transforms.rotateY}deg` : transforms.rotateY})`,
296
+ );
297
+ }
298
+
299
+ if (transforms.rotateZ !== undefined) {
300
+ transformFunctions.push(
301
+ `rotateZ(${typeof transforms.rotateZ === 'number' ? `${transforms.rotateZ}deg` : transforms.rotateZ})`,
302
+ );
303
+ }
304
+
305
+ if (transforms.skewX !== undefined) {
306
+ transformFunctions.push(
307
+ `skewX(${typeof transforms.skewX === 'number' ? `${transforms.skewX}deg` : transforms.skewX})`,
308
+ );
309
+ }
310
+
311
+ if (transforms.skewY !== undefined) {
312
+ transformFunctions.push(
313
+ `skewY(${typeof transforms.skewY === 'number' ? `${transforms.skewY}deg` : transforms.skewY})`,
314
+ );
315
+ }
316
+
317
+ return {
318
+ transform: transformFunctions.join(' '),
319
+ };
320
+ };
321
+
322
+ /**
323
+ * 创建渐变背景
324
+ * @param gradient 渐变配置
325
+ * @returns 渐变样式对象
326
+ */
327
+ const gradient = (gradient: {
328
+ type?: 'linear' | 'radial';
329
+ direction?: string | number;
330
+ colors: string[];
331
+ }): Record<string, unknown> => {
332
+ const { type = 'linear', direction = 'to right', colors } = gradient;
333
+
334
+ const gradientString =
335
+ type === 'linear'
336
+ ? `linear-gradient(${direction}, ${colors.join(', ')})`
337
+ : `radial-gradient(${colors.join(', ')})`;
338
+
339
+ return {
340
+ backgroundImage: gradientString,
341
+ };
342
+ };
343
+
344
+ /**
345
+ * 创建阴影样式
346
+ * @param shadow 阴影配置
347
+ * @returns 阴影样式对象
348
+ */
349
+ const shadow = (shadow: {
350
+ x?: number;
351
+ y?: number;
352
+ blur?: number;
353
+ spread?: number;
354
+ color?: string;
355
+ inset?: boolean;
356
+ }): Record<string, unknown> => {
357
+ const { x = 0, y = 0, blur = 0, spread = 0, color = currentTheme.colors.shadow, inset = false } = shadow;
358
+
359
+ return {
360
+ boxShadow: `${inset ? 'inset ' : ''}${x}px ${y}px ${blur}px ${spread}px ${color}`,
361
+ };
362
+ };
363
+
364
+ /**
365
+ * 创建文本样式
366
+ * @param text 文本配置
367
+ * @returns 文本样式对象
368
+ */
369
+ const text = (text: {
370
+ size?: keyof ThemeConfig['typography']['fontSize'];
371
+ weight?: keyof ThemeConfig['typography']['fontWeight'];
372
+ color?: string | keyof ThemeConfig['colors'];
373
+ align?: 'left' | 'center' | 'right' | 'justify';
374
+ decoration?: 'none' | 'underline' | 'line-through';
375
+ transform?: 'none' | 'uppercase' | 'lowercase' | 'capitalize';
376
+ spacing?: keyof ThemeConfig['typography']['letterSpacing'];
377
+ lineHeight?: keyof ThemeConfig['typography']['lineHeight'];
378
+ }): Record<string, unknown> => {
379
+ const {
380
+ size = 'base',
381
+ weight = 'normal',
382
+ color = 'text',
383
+ align,
384
+ decoration,
385
+ transform,
386
+ spacing,
387
+ lineHeight,
388
+ } = text;
389
+
390
+ return {
391
+ fontSize: `${currentTheme.typography.fontSize[size]}px`,
392
+ fontWeight: currentTheme.typography.fontWeight[weight],
393
+ color: typeof color === 'string' ? color : currentTheme.colors[color],
394
+ textAlign: align,
395
+ textDecoration: decoration,
396
+ textTransform: transform,
397
+ letterSpacing: spacing ? currentTheme.typography.letterSpacing[spacing] : undefined,
398
+ lineHeight: lineHeight ? currentTheme.typography.lineHeight[lineHeight] : undefined,
399
+ };
400
+ };
401
+
402
+ /**
403
+ * 创建布局样式
404
+ * @param layout 布局配置
405
+ * @returns 布局样式对象
406
+ */
407
+ const layout = (layout: {
408
+ display?: 'flex' | 'grid' | 'block' | 'inline' | 'inline-block' | 'none';
409
+ direction?: 'row' | 'column' | 'row-reverse' | 'column-reverse';
410
+ justify?: 'flex-start' | 'flex-end' | 'center' | 'space-between' | 'space-around' | 'space-evenly';
411
+ align?: 'flex-start' | 'flex-end' | 'center' | 'baseline' | 'stretch';
412
+ wrap?: 'nowrap' | 'wrap' | 'wrap-reverse';
413
+ gap?: number | keyof ThemeConfig['spacing'];
414
+ padding?: number | keyof ThemeConfig['spacing'];
415
+ margin?: number | keyof ThemeConfig['spacing'];
416
+ width?: number | string;
417
+ height?: number | string;
418
+ maxWidth?: number | string;
419
+ maxHeight?: number | string;
420
+ minWidth?: number | string;
421
+ minHeight?: number | string;
422
+ }): Record<string, any> => {
423
+ const {
424
+ display = 'block',
425
+ direction,
426
+ justify,
427
+ align,
428
+ wrap,
429
+ gap,
430
+ padding,
431
+ margin,
432
+ width,
433
+ height,
434
+ maxWidth,
435
+ maxHeight,
436
+ minWidth,
437
+ minHeight,
438
+ } = layout;
439
+
440
+ const result: Record<string, unknown> = {
441
+ display,
442
+ width,
443
+ height,
444
+ maxWidth,
445
+ maxHeight,
446
+ minWidth,
447
+ minHeight,
448
+ };
449
+
450
+ if (display === 'flex') {
451
+ result['flexDirection'] = direction;
452
+ result['justifyContent'] = justify;
453
+ result['alignItems'] = align;
454
+ result['flexWrap'] = wrap;
455
+ }
456
+
457
+ if (gap !== undefined) {
458
+ result['gap'] = typeof gap === 'number' ? `${gap}px` : `${currentTheme.spacing[gap]}px`;
459
+ }
460
+
461
+ if (padding !== undefined) {
462
+ result['padding'] = typeof padding === 'number' ? `${padding}px` : `${currentTheme.spacing[padding]}px`;
463
+ }
464
+
465
+ if (margin !== undefined) {
466
+ result['margin'] = typeof margin === 'number' ? `${margin}px` : `${currentTheme.spacing[margin]}px`;
467
+ }
468
+
469
+ return result;
470
+ };
471
+
472
+ /**
473
+ * 创建边框样式
474
+ * @param border 边框配置
475
+ * @returns 边框样式对象
476
+ */
477
+ const border = (border: {
478
+ width?: number;
479
+ style?: 'solid' | 'dashed' | 'dotted' | 'double';
480
+ color?: string | keyof ThemeConfig['colors'];
481
+ radius?: number | keyof ThemeConfig['borderRadius'];
482
+ sides?: 'all' | 'top' | 'right' | 'bottom' | 'left' | 'horizontal' | 'vertical';
483
+ }): Record<string, unknown> => {
484
+ const { width = 1, style = 'solid', color = 'border', radius = 'md', sides = 'all' } = border;
485
+
486
+ const colorValue = typeof color === 'string' ? color : currentTheme.colors[color];
487
+ const radiusValue = typeof radius === 'number' ? radius : currentTheme.borderRadius[radius];
488
+
489
+ const result: Record<string, unknown> = {
490
+ borderRadius: `${radiusValue}px`,
491
+ };
492
+
493
+ if (sides === 'all') {
494
+ result['border'] = `${width}px ${style} ${colorValue}`;
495
+ } else if (sides === 'horizontal') {
496
+ result['borderLeft'] = `${width}px ${style} ${colorValue}`;
497
+ result['borderRight'] = `${width}px ${style} ${colorValue}`;
498
+ } else if (sides === 'vertical') {
499
+ result['borderTop'] = `${width}px ${style} ${colorValue}`;
500
+ result['borderBottom'] = `${width}px ${style} ${colorValue}`;
501
+ } else {
502
+ result[`border${sides.charAt(0).toUpperCase() + sides.slice(1)}` as keyof Record<string, unknown>] =
503
+ `${width}px ${style} ${colorValue}`;
504
+ }
505
+
506
+ return result;
507
+ };
508
+
509
+ return {
510
+ // 基础样式工具
511
+ cn,
512
+ css,
513
+ responsive,
514
+ conditional,
515
+
516
+ // 交互样式
517
+ hover,
518
+ focus,
519
+ active,
520
+ disabled,
521
+ interactions,
522
+
523
+ // 高级样式
524
+ animate,
525
+ transform,
526
+ gradient,
527
+ shadow,
528
+ text,
529
+ layout,
530
+ border,
531
+
532
+ // 样式生成器
533
+ styleGenerator,
534
+ };
535
+ };
536
+
537
+ export default useStyle;