feffery_antd_components 0.4.3-rc6 → 0.4.3

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 (462) hide show
  1. package/CONTRIBUTING.md +4 -4
  2. package/DESCRIPTION +1 -1
  3. package/LICENSE +21 -21
  4. package/MANIFEST.in +6 -6
  5. package/Project.toml +1 -1
  6. package/README-en_US.md +73 -73
  7. package/README.md +87 -87
  8. package/bug_fix.py +21 -36
  9. package/fac-logo.svg +151 -151
  10. package/feffery_antd_components/AntdAccordion.py +7 -7
  11. package/feffery_antd_components/AntdAffix.py +2 -2
  12. package/feffery_antd_components/AntdAlert.py +5 -5
  13. package/feffery_antd_components/AntdAnchor.py +5 -5
  14. package/feffery_antd_components/AntdAvatar.py +4 -4
  15. package/feffery_antd_components/AntdAvatarGroup.py +1 -1
  16. package/feffery_antd_components/AntdBackTop.py +4 -4
  17. package/feffery_antd_components/AntdBadge.py +5 -5
  18. package/feffery_antd_components/AntdBreadcrumb.py +4 -4
  19. package/feffery_antd_components/AntdButton.py +14 -14
  20. package/feffery_antd_components/AntdCalendar.py +4 -4
  21. package/feffery_antd_components/AntdCard.py +5 -5
  22. package/feffery_antd_components/AntdCardGrid.py +3 -3
  23. package/feffery_antd_components/AntdCardMeta.py +1 -1
  24. package/feffery_antd_components/AntdCarousel.py +13 -13
  25. package/feffery_antd_components/AntdCascader.py +16 -17
  26. package/feffery_antd_components/AntdCenter.py +3 -3
  27. package/feffery_antd_components/AntdCheckCard.py +7 -7
  28. package/feffery_antd_components/AntdCheckCardGroup.py +9 -9
  29. package/feffery_antd_components/AntdCheckableTag.py +2 -2
  30. package/feffery_antd_components/AntdCheckbox.py +8 -8
  31. package/feffery_antd_components/AntdCheckboxGroup.py +6 -6
  32. package/feffery_antd_components/AntdCol.py +5 -5
  33. package/feffery_antd_components/AntdCollapse.py +8 -8
  34. package/feffery_antd_components/AntdColorPicker.py +13 -13
  35. package/feffery_antd_components/AntdComment.py +7 -7
  36. package/feffery_antd_components/AntdCompact.py +3 -3
  37. package/feffery_antd_components/AntdConfigProvider.py +6 -6
  38. package/feffery_antd_components/AntdContent.py +1 -1
  39. package/feffery_antd_components/AntdCopyText.py +2 -2
  40. package/feffery_antd_components/AntdCountdown.py +1 -1
  41. package/feffery_antd_components/AntdCountup.py +1 -1
  42. package/feffery_antd_components/AntdCustomSkeleton.py +5 -5
  43. package/feffery_antd_components/AntdDatePicker.py +13 -13
  44. package/feffery_antd_components/AntdDateRangePicker.py +12 -12
  45. package/feffery_antd_components/AntdDescriptionItem.py +2 -2
  46. package/feffery_antd_components/AntdDescriptions.py +6 -6
  47. package/feffery_antd_components/AntdDivider.py +5 -5
  48. package/feffery_antd_components/AntdDraggerUpload.py +15 -15
  49. package/feffery_antd_components/AntdDrawer.py +12 -12
  50. package/feffery_antd_components/AntdDropdown.py +18 -18
  51. package/feffery_antd_components/AntdEmpty.py +2 -2
  52. package/feffery_antd_components/AntdFlex.py +6 -6
  53. package/feffery_antd_components/AntdFloatButton.py +5 -5
  54. package/feffery_antd_components/AntdFloatButtonGroup.py +3 -3
  55. package/feffery_antd_components/AntdFooter.py +1 -1
  56. package/feffery_antd_components/AntdForm.py +10 -6
  57. package/feffery_antd_components/AntdFormItem.py +4 -4
  58. package/feffery_antd_components/AntdFormRender.py +2 -2
  59. package/feffery_antd_components/AntdHappyProvider.py +2 -2
  60. package/feffery_antd_components/AntdHeader.py +1 -1
  61. package/feffery_antd_components/AntdIcon.py +3 -3
  62. package/feffery_antd_components/AntdImage.py +6 -6
  63. package/feffery_antd_components/AntdImageGroup.py +6 -6
  64. package/feffery_antd_components/AntdInput.py +17 -17
  65. package/feffery_antd_components/AntdInputNumber.py +12 -12
  66. package/feffery_antd_components/AntdLayout.py +1 -1
  67. package/feffery_antd_components/AntdMentions.py +9 -9
  68. package/feffery_antd_components/AntdMenu.py +9 -9
  69. package/feffery_antd_components/AntdMessage.py +3 -3
  70. package/feffery_antd_components/AntdModal.py +28 -28
  71. package/feffery_antd_components/AntdNotification.py +9 -9
  72. package/feffery_antd_components/AntdOTP.py +7 -7
  73. package/feffery_antd_components/AntdPageHeader.py +5 -5
  74. package/feffery_antd_components/AntdPagination.py +15 -15
  75. package/feffery_antd_components/AntdParagraph.py +2 -2
  76. package/feffery_antd_components/AntdPictureUpload.py +28 -28
  77. package/feffery_antd_components/AntdPopconfirm.py +21 -21
  78. package/feffery_antd_components/AntdPopover.py +9 -9
  79. package/feffery_antd_components/AntdPopupCard.py +9 -9
  80. package/feffery_antd_components/AntdProgress.py +9 -9
  81. package/feffery_antd_components/AntdQRCode.py +10 -10
  82. package/feffery_antd_components/AntdRadioGroup.py +9 -9
  83. package/feffery_antd_components/AntdRate.py +9 -9
  84. package/feffery_antd_components/AntdResult.py +1 -1
  85. package/feffery_antd_components/AntdRibbon.py +2 -2
  86. package/feffery_antd_components/AntdRow.py +3 -3
  87. package/feffery_antd_components/AntdSegmented.py +9 -9
  88. package/feffery_antd_components/AntdSegmentedColoring.py +11 -11
  89. package/feffery_antd_components/AntdSelect.py +19 -19
  90. package/feffery_antd_components/AntdSider.py +6 -6
  91. package/feffery_antd_components/AntdSkeleton.py +11 -11
  92. package/feffery_antd_components/AntdSkeletonAvatar.py +3 -3
  93. package/feffery_antd_components/AntdSkeletonButton.py +5 -5
  94. package/feffery_antd_components/AntdSkeletonImage.py +1 -1
  95. package/feffery_antd_components/AntdSkeletonInput.py +3 -3
  96. package/feffery_antd_components/AntdSlider.py +10 -10
  97. package/feffery_antd_components/AntdSpace.py +4 -4
  98. package/feffery_antd_components/AntdSpin.py +7 -8
  99. package/feffery_antd_components/AntdSplitter.py +5 -5
  100. package/feffery_antd_components/AntdSpoiler.py +5 -5
  101. package/feffery_antd_components/AntdStatistic.py +2 -2
  102. package/feffery_antd_components/AntdSteps.py +8 -8
  103. package/feffery_antd_components/AntdSwitch.py +8 -8
  104. package/feffery_antd_components/AntdTable.py +64 -63
  105. package/feffery_antd_components/AntdTabs.py +13 -14
  106. package/feffery_antd_components/AntdTag.py +4 -4
  107. package/feffery_antd_components/AntdText.py +2 -2
  108. package/feffery_antd_components/AntdTimePicker.py +16 -16
  109. package/feffery_antd_components/AntdTimeRangePicker.py +15 -15
  110. package/feffery_antd_components/AntdTimeline.py +2 -2
  111. package/feffery_antd_components/AntdTitle.py +2 -2
  112. package/feffery_antd_components/AntdTooltip.py +9 -9
  113. package/feffery_antd_components/AntdTour.py +9 -9
  114. package/feffery_antd_components/AntdTransfer.py +11 -11
  115. package/feffery_antd_components/AntdTree.py +17 -17
  116. package/feffery_antd_components/AntdTreeSelect.py +18 -18
  117. package/feffery_antd_components/AntdUpload.py +18 -18
  118. package/feffery_antd_components/AntdWatermark.py +6 -6
  119. package/feffery_antd_components/Fragment.py +1 -1
  120. package/feffery_antd_components/__init__.py +88 -88
  121. package/feffery_antd_components/_icons.py +559 -559
  122. package/feffery_antd_components/alias.py +222 -222
  123. package/feffery_antd_components/async-antd_table.js +2 -2
  124. package/feffery_antd_components/async-data_display.js +1 -1
  125. package/feffery_antd_components/async-data_entry.js +3 -3
  126. package/feffery_antd_components/async-upload.js +2 -2
  127. package/feffery_antd_components/feffery_antd_components.min.js +8 -8
  128. package/feffery_antd_components/metadata.json +1 -1
  129. package/feffery_antd_components/package-info.json +111 -96
  130. package/feffery_antd_components/utils.py +262 -262
  131. package/package.json +111 -96
  132. package/pytest.ini +5 -5
  133. package/release-to-test-pypi.sh +1 -1
  134. package/requirements.txt +2 -2
  135. package/review_checklist.md +47 -47
  136. package/ruff.toml +4 -4
  137. package/setup.py +33 -33
  138. package/src/jl/'feffery'_antdform.jl +2 -1
  139. package/src/jl/'feffery'_antdtable.jl +7 -6
  140. package/src/lib/components/dataDisplay/AntdAccordion.react.js +232 -232
  141. package/src/lib/components/dataDisplay/AntdAvatar.react.js +177 -177
  142. package/src/lib/components/dataDisplay/AntdAvatarGroup.react.js +133 -133
  143. package/src/lib/components/dataDisplay/AntdBadge.react.js +196 -196
  144. package/src/lib/components/dataDisplay/AntdCarousel.react.js +187 -187
  145. package/src/lib/components/dataDisplay/AntdCheckableTag.react.js +105 -105
  146. package/src/lib/components/dataDisplay/AntdCollapse.react.js +239 -239
  147. package/src/lib/components/dataDisplay/AntdComment.react.js +251 -251
  148. package/src/lib/components/dataDisplay/AntdCountdown.react.js +143 -143
  149. package/src/lib/components/dataDisplay/AntdCountup.react.js +133 -133
  150. package/src/lib/components/dataDisplay/AntdEmpty.react.js +162 -162
  151. package/src/lib/components/dataDisplay/AntdImage.react.js +202 -202
  152. package/src/lib/components/dataDisplay/AntdImageGroup.react.js +181 -181
  153. package/src/lib/components/dataDisplay/AntdPopover.react.js +220 -220
  154. package/src/lib/components/dataDisplay/AntdQRCode.react.js +191 -191
  155. package/src/lib/components/dataDisplay/AntdRibbon.react.js +105 -105
  156. package/src/lib/components/dataDisplay/AntdSegmented.react.js +234 -234
  157. package/src/lib/components/dataDisplay/AntdSpoiler.react.js +154 -154
  158. package/src/lib/components/dataDisplay/AntdStatistic.react.js +168 -168
  159. package/src/lib/components/dataDisplay/AntdTable.react.js +1859 -1858
  160. package/src/lib/components/dataDisplay/AntdTabs.react.js +352 -352
  161. package/src/lib/components/dataDisplay/AntdTag.react.js +135 -135
  162. package/src/lib/components/dataDisplay/AntdTimeline.react.js +136 -136
  163. package/src/lib/components/dataDisplay/AntdTooltip.react.js +230 -230
  164. package/src/lib/components/dataDisplay/AntdTree.react.js +641 -641
  165. package/src/lib/components/dataDisplay/card/AntdCard.react.js +249 -249
  166. package/src/lib/components/dataDisplay/card/AntdCardGrid.react.js +99 -99
  167. package/src/lib/components/dataDisplay/card/AntdCardMeta.react.js +97 -97
  168. package/src/lib/components/dataDisplay/descriptions/AntdDescriptionItem.react.js +130 -130
  169. package/src/lib/components/dataDisplay/descriptions/AntdDescriptions.react.js +237 -237
  170. package/src/lib/components/dataEntry/AntdCalendar.react.js +205 -205
  171. package/src/lib/components/dataEntry/AntdCascader.react.js +435 -435
  172. package/src/lib/components/dataEntry/AntdCheckbox.react.js +182 -182
  173. package/src/lib/components/dataEntry/AntdCheckboxGroup.react.js +193 -193
  174. package/src/lib/components/dataEntry/AntdColorPicker.react.js +240 -240
  175. package/src/lib/components/dataEntry/AntdDatePicker.react.js +432 -432
  176. package/src/lib/components/dataEntry/AntdDateRangePicker.react.js +439 -439
  177. package/src/lib/components/dataEntry/AntdInput.react.js +423 -423
  178. package/src/lib/components/dataEntry/AntdInputNumber.react.js +329 -329
  179. package/src/lib/components/dataEntry/AntdMentions.react.js +236 -236
  180. package/src/lib/components/dataEntry/AntdOTP.react.js +186 -186
  181. package/src/lib/components/dataEntry/AntdRadioGroup.react.js +241 -241
  182. package/src/lib/components/dataEntry/AntdRate.react.js +199 -199
  183. package/src/lib/components/dataEntry/AntdSegmentedColoring.react.js +251 -251
  184. package/src/lib/components/dataEntry/AntdSelect.react.js +492 -492
  185. package/src/lib/components/dataEntry/AntdSlider.react.js +325 -325
  186. package/src/lib/components/dataEntry/AntdSwitch.react.js +210 -210
  187. package/src/lib/components/dataEntry/AntdTimePicker.react.js +344 -344
  188. package/src/lib/components/dataEntry/AntdTimeRangePicker.react.js +325 -325
  189. package/src/lib/components/dataEntry/AntdTransfer.react.js +317 -317
  190. package/src/lib/components/dataEntry/AntdTreeSelect.react.js +573 -573
  191. package/src/lib/components/dataEntry/check-card/AntdCheckCard.react.js +186 -186
  192. package/src/lib/components/dataEntry/check-card/AntdCheckCardGroup.react.js +214 -214
  193. package/src/lib/components/dataEntry/form/AntdForm.react.js +201 -194
  194. package/src/lib/components/dataEntry/form/AntdFormItem.react.js +210 -210
  195. package/src/lib/components/dataEntry/upload/AntdDraggerUpload.react.js +504 -504
  196. package/src/lib/components/dataEntry/upload/AntdPictureUpload.react.js +530 -530
  197. package/src/lib/components/dataEntry/upload/AntdUpload.react.js +537 -537
  198. package/src/lib/components/feedback/AntdAlert.react.js +185 -185
  199. package/src/lib/components/feedback/AntdDrawer.react.js +306 -306
  200. package/src/lib/components/feedback/AntdMessage.react.js +143 -143
  201. package/src/lib/components/feedback/AntdModal.react.js +530 -530
  202. package/src/lib/components/feedback/AntdNotification.react.js +211 -211
  203. package/src/lib/components/feedback/AntdPopconfirm.react.js +433 -433
  204. package/src/lib/components/feedback/AntdPopupCard.react.js +362 -362
  205. package/src/lib/components/feedback/AntdProgress.react.js +300 -300
  206. package/src/lib/components/feedback/AntdResult.react.js +125 -125
  207. package/src/lib/components/feedback/AntdSpin.react.js +273 -273
  208. package/src/lib/components/feedback/skeleton/AntdCustomSkeleton.react.js +197 -197
  209. package/src/lib/components/feedback/skeleton/AntdSkeleton.react.js +291 -291
  210. package/src/lib/components/feedback/skeleton/AntdSkeletonAvatar.react.js +109 -109
  211. package/src/lib/components/feedback/skeleton/AntdSkeletonButton.react.js +114 -114
  212. package/src/lib/components/feedback/skeleton/AntdSkeletonImage.react.js +82 -82
  213. package/src/lib/components/feedback/skeleton/AntdSkeletonInput.react.js +98 -98
  214. package/src/lib/components/formRender/AntdFormRender.react.js +945 -945
  215. package/src/lib/components/general/AntdButton.react.js +328 -328
  216. package/src/lib/components/general/AntdFloatButton.react.js +157 -157
  217. package/src/lib/components/general/AntdFloatButtonGroup.react.js +162 -162
  218. package/src/lib/components/general/AntdIcon.react.js +176 -176
  219. package/src/lib/components/general/typography/AntdParagraph.react.js +202 -202
  220. package/src/lib/components/general/typography/AntdText.react.js +194 -194
  221. package/src/lib/components/general/typography/AntdTitle.react.js +186 -186
  222. package/src/lib/components/icons.react.js +1136 -1136
  223. package/src/lib/components/layout/AntdCenter.react.js +122 -122
  224. package/src/lib/components/layout/AntdCompact.react.js +108 -108
  225. package/src/lib/components/layout/AntdContent.react.js +92 -92
  226. package/src/lib/components/layout/AntdDivider.react.js +219 -219
  227. package/src/lib/components/layout/AntdFlex.react.js +143 -143
  228. package/src/lib/components/layout/AntdFooter.react.js +92 -92
  229. package/src/lib/components/layout/AntdHeader.react.js +92 -92
  230. package/src/lib/components/layout/AntdLayout.react.js +90 -90
  231. package/src/lib/components/layout/AntdSider.react.js +162 -162
  232. package/src/lib/components/layout/AntdSpace.react.js +213 -213
  233. package/src/lib/components/layout/AntdSplitter.react.js +173 -173
  234. package/src/lib/components/layout/grid/AntdCol.react.js +349 -349
  235. package/src/lib/components/layout/grid/AntdRow.react.js +152 -152
  236. package/src/lib/components/locales.react.js +197 -197
  237. package/src/lib/components/navigation/AntdAnchor.react.js +208 -208
  238. package/src/lib/components/navigation/AntdBreadcrumb.react.js +270 -270
  239. package/src/lib/components/navigation/AntdDropdown.react.js +469 -469
  240. package/src/lib/components/navigation/AntdMenu.react.js +573 -649
  241. package/src/lib/components/navigation/AntdPageHeader.react.js +139 -139
  242. package/src/lib/components/navigation/AntdPagination.react.js +303 -303
  243. package/src/lib/components/navigation/AntdSteps.react.js +199 -199
  244. package/src/lib/components/other/AntdAffix.react.js +120 -120
  245. package/src/lib/components/other/AntdBackTop.react.js +128 -128
  246. package/src/lib/components/other/AntdConfigProvider.react.js +246 -246
  247. package/src/lib/components/other/AntdCopyText.react.js +138 -138
  248. package/src/lib/components/other/AntdHappyProvider.react.js +50 -50
  249. package/src/lib/components/other/AntdTour.react.js +277 -277
  250. package/src/lib/components/other/AntdWatermark.react.js +179 -179
  251. package/src/lib/components/other/Fragment.react.js +50 -50
  252. package/src/lib/components/styles.css +513 -513
  253. package/src/lib/components/utils.js +51 -51
  254. package/src/lib/contexts/FormContext.js +4 -4
  255. package/src/lib/contexts/FormItemContext.js +4 -4
  256. package/src/lib/contexts/PropsContext.js +4 -4
  257. package/src/lib/fragments/AntdTable.react.js +2215 -2200
  258. package/src/lib/fragments/dataDisplay/AntdAccordion.react.js +101 -101
  259. package/src/lib/fragments/dataDisplay/AntdAvatar.react.js +127 -127
  260. package/src/lib/fragments/dataDisplay/AntdAvatarGroup.react.js +51 -51
  261. package/src/lib/fragments/dataDisplay/AntdBadge.react.js +73 -73
  262. package/src/lib/fragments/dataDisplay/AntdCarousel.react.js +71 -71
  263. package/src/lib/fragments/dataDisplay/AntdCheckableTag.react.js +57 -57
  264. package/src/lib/fragments/dataDisplay/AntdComment.react.js +178 -178
  265. package/src/lib/fragments/dataDisplay/AntdCountdown.react.js +83 -83
  266. package/src/lib/fragments/dataDisplay/AntdCountup.react.js +70 -70
  267. package/src/lib/fragments/dataDisplay/AntdEmpty.react.js +71 -71
  268. package/src/lib/fragments/dataDisplay/AntdImage.react.js +206 -206
  269. package/src/lib/fragments/dataDisplay/AntdImageGroup.react.js +91 -91
  270. package/src/lib/fragments/dataDisplay/AntdPopover.react.js +106 -106
  271. package/src/lib/fragments/dataDisplay/AntdQRCode.react.js +93 -93
  272. package/src/lib/fragments/dataDisplay/AntdRibbon.react.js +53 -53
  273. package/src/lib/fragments/dataDisplay/AntdSegmented.react.js +129 -129
  274. package/src/lib/fragments/dataDisplay/AntdSpoiler.react.js +96 -96
  275. package/src/lib/fragments/dataDisplay/AntdTabs.react.js +211 -211
  276. package/src/lib/fragments/dataDisplay/AntdTag.react.js +66 -66
  277. package/src/lib/fragments/dataDisplay/AntdTimeline.react.js +67 -67
  278. package/src/lib/fragments/dataDisplay/AntdTooltip.react.js +98 -98
  279. package/src/lib/fragments/dataDisplay/AntdTree.react.js +581 -581
  280. package/src/lib/fragments/dataDisplay/card/AntdCard.react.js +104 -104
  281. package/src/lib/fragments/dataDisplay/card/AntdCardGrid.react.js +54 -54
  282. package/src/lib/fragments/dataDisplay/card/AntdCardMeta.react.js +54 -54
  283. package/src/lib/fragments/dataDisplay/descriptions/AntdDescriptionItem.react.js +56 -56
  284. package/src/lib/fragments/dataDisplay/descriptions/AntdDescriptions.react.js +139 -139
  285. package/src/lib/fragments/dataEntry/AntdCalendar.react.js +178 -178
  286. package/src/lib/fragments/dataEntry/AntdCascader.react.js +319 -319
  287. package/src/lib/fragments/dataEntry/AntdCheckbox.react.js +119 -119
  288. package/src/lib/fragments/dataEntry/AntdCheckboxGroup.react.js +122 -122
  289. package/src/lib/fragments/dataEntry/AntdColorPicker.react.js +244 -244
  290. package/src/lib/fragments/dataEntry/AntdDatePicker.react.js +586 -586
  291. package/src/lib/fragments/dataEntry/AntdDateRangePicker.react.js +628 -628
  292. package/src/lib/fragments/dataEntry/AntdInput.react.js +450 -450
  293. package/src/lib/fragments/dataEntry/AntdInputNumber.react.js +194 -194
  294. package/src/lib/fragments/dataEntry/AntdMentions.react.js +180 -180
  295. package/src/lib/fragments/dataEntry/AntdOTP.react.js +127 -127
  296. package/src/lib/fragments/dataEntry/AntdRadioGroup.react.js +203 -203
  297. package/src/lib/fragments/dataEntry/AntdRate.react.js +131 -131
  298. package/src/lib/fragments/dataEntry/AntdSegmentedColoring.react.js +246 -246
  299. package/src/lib/fragments/dataEntry/AntdSelect.react.js +373 -373
  300. package/src/lib/fragments/dataEntry/AntdSlider.react.js +177 -177
  301. package/src/lib/fragments/dataEntry/AntdSwitch.react.js +132 -132
  302. package/src/lib/fragments/dataEntry/AntdTimePicker.react.js +191 -191
  303. package/src/lib/fragments/dataEntry/AntdTimeRangePicker.react.js +213 -213
  304. package/src/lib/fragments/dataEntry/AntdTransfer.react.js +183 -183
  305. package/src/lib/fragments/dataEntry/AntdTreeSelect.react.js +355 -355
  306. package/src/lib/fragments/dataEntry/check-card/AntdCheckCard.react.js +111 -111
  307. package/src/lib/fragments/dataEntry/check-card/AntdCheckCardGroup.react.js +122 -122
  308. package/src/lib/fragments/dataEntry/form/AntdForm.react.js +126 -120
  309. package/src/lib/fragments/dataEntry/form/AntdFormItem.react.js +85 -84
  310. package/src/lib/fragments/formRender/AntdFormRender.react.js +179 -179
  311. package/src/lib/fragments/upload/AntdDraggerUpload.react.js +622 -622
  312. package/src/lib/fragments/upload/AntdPictureUpload.react.js +577 -577
  313. package/src/lib/fragments/upload/AntdUpload.react.js +613 -613
  314. package/src/lib/hooks/useCss.js +28 -28
  315. package/src/lib/hooks/useStickyOffset.js +115 -115
  316. package/src/lib/index.js +240 -240
  317. package/src/lib/internal_components/UtilsLink.react.js +82 -0
  318. package/src/lib/store/formStore.js +54 -47
  319. package/tests/dash3.0tests/AntdQRCode/347/273/204/344/273/266loading/347/212/266/346/200/201/351/207/215/346/236/204/test.py +51 -51
  320. package/tests/dash3.0tests/AntdTable/345/207/275/346/225/260/345/274/217/346/224/271/351/200/240/test.py +62 -62
  321. package/tests/dash3.0tests/_dashprivate_layout/346/224/271/345/212/250/346/265/213/350/257/225/test.py +50 -50
  322. package/tests/dash3.0tests/loading_state/346/224/271/345/212/250/346/265/213/350/257/225/test.py +38 -38
  323. package/tests/dash3.0tests//345/207/275/346/225/260/345/274/217/347/273/204/344/273/266/351/273/230/350/256/244/345/200/274/351/207/215/346/236/204/test.py +30 -30
  324. package/tests/dash3.0tests//345/212/240/350/275/275/345/212/250/347/224/273/347/261/273/347/273/204/344/273/266/351/207/215/346/236/204/346/265/213/350/257/225/test.py +62 -62
  325. package/tests/dash3.0tests//347/273/204/344/273/266/345/261/236/346/200/247/345/237/272/347/241/200/346/214/201/344/271/205/345/214/226/351/207/215/346/236/204/346/265/213/350/257/225/test.py +25 -25
  326. package/tests/dataDisplay/AntdAccordion/feat_size.py +36 -36
  327. package/tests/dataDisplay/AntdAccordion/feat_styles.py +35 -35
  328. package/tests/dataDisplay/AntdCard/refactor_delete_props.py +83 -83
  329. package/tests/dataDisplay/AntdCarousel/feat_auto_play_dot_duration.py +34 -34
  330. package/tests/dataDisplay/AntdCollapse/feat_size.py +30 -30
  331. package/tests/dataDisplay/AntdCollapse/feat_styles.py +29 -29
  332. package/tests/dataDisplay/AntdCountdown/feat_finish_event.py +41 -41
  333. package/tests/dataDisplay/AntdCountdown/refactor_to_timer.py +57 -57
  334. package/tests/dataDisplay/AntdCountup/refactor_to_timer.py +57 -57
  335. package/tests/dataDisplay/AntdDescriptions/feat_span_filled.py +42 -42
  336. package/tests/dataDisplay/AntdImage/debug_preview_toolbar.py +23 -23
  337. package/tests/dataDisplay/AntdSegmented/feat_shape.py +39 -39
  338. package/tests/dataDisplay/AntdSegmented/feat_simple_options.py +43 -43
  339. package/tests/dataDisplay/AntdSegmented/feat_vertical.py +32 -32
  340. package/tests/dataDisplay/AntdTable/feat_button_mode_like_dcc_link.py +125 -0
  341. package/tests/dataDisplay/AntdTable/feat_button_mode_refactor.py +143 -143
  342. package/tests/dataDisplay/AntdTable/feat_button_mode_tooltip.py +47 -47
  343. package/tests/dataDisplay/AntdTable/feat_columns_fixed_bool.py +40 -40
  344. package/tests/dataDisplay/AntdTable/feat_columns_min_width.py +51 -51
  345. package/tests/dataDisplay/AntdTable/feat_columns_sort_order.py +131 -131
  346. package/tests/dataDisplay/AntdTable/feat_editable_disabled_keys.py +71 -71
  347. package/tests/dataDisplay/AntdTable/feat_header_align.py +38 -38
  348. package/tests/dataDisplay/AntdTable/feat_link_mode_like_dcc_link.py +49 -0
  349. package/tests/dataDisplay/AntdTable/feat_loading.py +76 -76
  350. package/tests/dataDisplay/AntdTable/feat_mini_chart_color.py +139 -139
  351. package/tests/dataDisplay/AntdTable/feat_row_class_name.py +39 -39
  352. package/tests/dataDisplay/AntdTable/feat_row_class_name_func.py +41 -41
  353. package/tests/dataDisplay/AntdTable/feat_select_mode_show_search.py +70 -70
  354. package/tests/dataDisplay/AntdTable/feat_sticky_header.py +81 -81
  355. package/tests/dataDisplay/AntdTable/feat_table_scroll.py +54 -54
  356. package/tests/dataDisplay/AntdTable/feat_tag_mode_tooltip.py +88 -88
  357. package/tests/dataDisplay/AntdTable/feat_title_popover_nodes.py +94 -79
  358. package/tests/dataDisplay/AntdTable/fix_context_locale.py +37 -37
  359. package/tests/dataDisplay/AntdTable/fix_field_bool.py +50 -50
  360. package/tests/dataDisplay/AntdTable/fix_nested_editable.py +115 -115
  361. package/tests/dataDisplay/AntdTable/fix_select_with_editable.py +84 -84
  362. package/tests/dataDisplay/AntdTable/fix_server_side_mode_filter_search.py +194 -194
  363. package/tests/dataDisplay/AntdTable/fix_summary.py +474 -474
  364. package/tests/dataDisplay/AntdTable/fix_summary_multi_level_header.py +85 -85
  365. package/tests/dataDisplay/AntdTable/fix_zero_value_filter.py +34 -34
  366. package/tests/dataDisplay/AntdTable/perf_button_mode_auto_wrap.py +39 -39
  367. package/tests/dataDisplay/AntdTable/perf_editable_column_format_constrait_message.py +65 -65
  368. package/tests/dataDisplay/AntdTable/refactor_mini_progress_mode.py +134 -134
  369. package/tests/dataDisplay/AntdTable/rollback_title_popover_info.py +46 -0
  370. package/tests/dataDisplay/AntdTabs/feat_item_icon.py +39 -39
  371. package/tests/dataDisplay/AntdTabs/feat_placeholder.py +124 -124
  372. package/tests/dataDisplay/AntdTabs/feat_tab_bar_style.py +40 -40
  373. package/tests/dataDisplay/AntdTree/feat_async_data_load.py +71 -71
  374. package/tests/dataDisplay/descriptions/AntdDescriptions/feat_extra.py +83 -83
  375. package/tests/dataEntry/AntdCalendar/feat_custom_cells.py +52 -52
  376. package/tests/dataEntry/AntdCascader/feat_prefix.py +62 -62
  377. package/tests/dataEntry/AntdCascader/feat_suffix_icon.py +62 -62
  378. package/tests/dataEntry/AntdCascader/fix_read_only.py +74 -74
  379. package/tests/dataEntry/AntdDatePicker/feat_custom_cells.py +79 -79
  380. package/tests/dataEntry/AntdDatePicker/feat_picker_value.py +38 -38
  381. package/tests/dataEntry/AntdDatePicker/feat_prefix.py +21 -21
  382. package/tests/dataEntry/AntdDatePicker/feat_suffix_icon.py +21 -21
  383. package/tests/dataEntry/AntdDateRangePicker/feat_custom_cells.py +79 -79
  384. package/tests/dataEntry/AntdDateRangePicker/feat_picker_value.py +38 -38
  385. package/tests/dataEntry/AntdDateRangePicker/feat_prefix.py +21 -21
  386. package/tests/dataEntry/AntdDateRangePicker/feat_suffix_icon.py +21 -21
  387. package/tests/dataEntry/AntdForm/feat_batch_control_tooltips.py +35 -0
  388. package/tests/dataEntry/AntdForm/feat_optional_batch_control.py +62 -62
  389. package/tests/dataEntry/AntdForm/fix_checkbox.py +65 -65
  390. package/tests/dataEntry/AntdRadioGroup/feat_block.py +40 -40
  391. package/tests/dataEntry/AntdSelect/feat_locale_ru.py +24 -24
  392. package/tests/dataEntry/AntdSelect/feat_max_count.py +28 -28
  393. package/tests/dataEntry/AntdSelect/feat_prefix.py +26 -26
  394. package/tests/dataEntry/AntdSelect/feat_show_search.py +32 -32
  395. package/tests/dataEntry/AntdSelect/feat_suffix_icon.py +46 -46
  396. package/tests/dataEntry/AntdSelect/fix_read_only.py +50 -50
  397. package/tests/dataEntry/AntdSelect/fix_read_only_with_allow_clear.py +29 -29
  398. package/tests/dataEntry/AntdSlider/feat_range_editable.py +49 -49
  399. package/tests/dataEntry/AntdTimePicker/feat_prefix.py +21 -21
  400. package/tests/dataEntry/AntdTimePicker/feat_suffix_icon.py +21 -21
  401. package/tests/dataEntry/AntdTimeRangePicker/feat_prefix.py +21 -21
  402. package/tests/dataEntry/AntdTimeRangePicker/feat_suffix_icon.py +21 -21
  403. package/tests/dataEntry/AntdTreeSelect/feat_async_data_load.py +69 -69
  404. package/tests/dataEntry/AntdTreeSelect/feat_max_count.py +71 -71
  405. package/tests/dataEntry/AntdTreeSelect/feat_prefix.py +43 -43
  406. package/tests/dataEntry/AntdTreeSelect/fix_read_only.py +50 -50
  407. package/tests/dataEntry/AntdUpload/feat_pastable.py +22 -22
  408. package/tests/dataEntry/AntdUpload/fix_follow_theme.py +28 -28
  409. package/tests/feat_variant_underlined.py +100 -100
  410. package/tests/feedback/AntdAlert/feat_icon.py +35 -35
  411. package/tests/feedback/AntdMessage/fix_follow_config_provider.py +44 -44
  412. package/tests/feedback/AntdModal/feat_force_render.py +57 -57
  413. package/tests/feedback/AntdModal/feat_loading_title.py +92 -92
  414. package/tests/feedback/AntdModal/feat_prevent_close.py +54 -54
  415. package/tests/feedback/AntdModal/feat_responsive_width.py +31 -31
  416. package/tests/feedback/AntdNotification/feat_component_content.py +64 -64
  417. package/tests/feedback/AntdNotification/feat_number_of_stack.py +40 -40
  418. package/tests/feedback/AntdNotification/feat_show_progress.py +40 -40
  419. package/tests/feedback/AntdNotification/fix_follow_config_provider.py +46 -46
  420. package/tests/feedback/AntdPopupCard/feat_force_render.py +61 -61
  421. package/tests/feedback/AntdProgress/feat_percent_position.py +39 -39
  422. package/tests/feedback/AntdProgress/perf_size.py +26 -26
  423. package/tests/feedback/AntdProgress/perf_steps.py +37 -37
  424. package/tests/feedback/AntdProgress/perf_stroke_color.py +58 -58
  425. package/tests/feedback/AntdResult/feat_extra.py +26 -26
  426. package/tests/feedback/AntdSkeleton/fix_dash3.py +43 -43
  427. package/tests/general/AntdButton/feat_color_and_variant.py +40 -40
  428. package/tests/general/AntdButton/feat_preset_color.py +46 -46
  429. package/tests/general/AntdFloatButtonGroup/feat_placement.py +83 -83
  430. package/tests/general/AntdFloatButtonGroup/feat_tooltip.py +34 -34
  431. package/tests/general/AntdIcon/feat_iconfont.py +41 -41
  432. package/tests/layout/AntdCenter/feat_use_token.py +41 -41
  433. package/tests/layout/AntdDivider/feat_plain.py +21 -21
  434. package/tests/layout/AntdDivider/feat_size.py +36 -36
  435. package/tests/layout/AntdSplitter/feat_AntdSplitter.py +210 -210
  436. package/tests/layout/AntdSplitter/feat_lazy.py +56 -56
  437. package/tests/layout/AntdSplitter/refactor.py +303 -303
  438. package/tests/navigation/AntdAnchor/feat_current_anchor.py +43 -43
  439. package/tests/navigation/AntdAnchor/feat_direction.py +43 -43
  440. package/tests/navigation/AntdAnchor/feat_replace.py +43 -43
  441. package/tests/navigation/AntdBreadcrumb/feat_menu_item_event.py +64 -64
  442. package/tests/navigation/AntdBreadcrumb/refactor_items.py +140 -140
  443. package/tests/navigation/AntdDropdown/feat_extra.py +29 -29
  444. package/tests/navigation/AntdMenu/feat_currentItem.py +85 -85
  445. package/tests/navigation/AntdMenu/feat_currentItemPath.py +85 -85
  446. package/tests/navigation/AntdMenu/feat_currentKeyPath.py +85 -85
  447. package/tests/navigation/AntdMenu/feat_custom_icon.py +57 -57
  448. package/tests/navigation/AntdMenu/feat_expandIcon.py +70 -70
  449. package/tests/navigation/AntdMenu/feat_triggerSubMenuAction.py +67 -67
  450. package/tests/navigation/AntdMenu/fix_onlyExpandCurrentSubMenu.py +57 -57
  451. package/tests/navigation/AntdMenu/fix_with_sider.py +71 -71
  452. package/tests/navigation/AntdPagination/feat_align.py +31 -31
  453. package/tests/other/AntdAffix/feat_listen_affixed.py +41 -41
  454. package/tests/other/AntdBackTop/refactor.py +18 -18
  455. package/tests/other/AntdConfigProvider/feat_use_css.py +67 -67
  456. package/tests/other/AntdCopyText/feat_copy_table.py +67 -67
  457. package/tests/other/AntdCopyText/feat_tooltips.py +61 -61
  458. package/tests/other/AntdHappyProvider/feat_component.py +60 -60
  459. package/tests/other/Fragment/feat_use_token.py +32 -32
  460. package/usage.py +34 -34
  461. package/webpack.config.js +181 -181
  462. package/webpack.serve.config.js +12 -12
@@ -1,451 +1,451 @@
1
- // react核心
2
- import React, { useState, useEffect, useContext } from 'react';
3
- // antd核心
4
- import { Input } from 'antd';
5
- // 辅助库
6
- import md5 from 'md5';
7
- import { useRequest } from 'ahooks';
8
- import { isString, isUndefined } from 'lodash';
9
- import { pickBy } from 'ramda';
10
- import { useLoading } from '../../components/utils';
11
- // 自定义hooks
12
- import useCss from '../../hooks/useCss';
13
- // 上下文
14
- import PropsContext from '../../contexts/PropsContext';
15
- import FormContext from '../../contexts/FormContext';
16
- // 状态管理
17
- import useFormStore from '../../store/formStore';
18
- // 参数类型
19
- import { propTypes, defaultProps } from '../../components/dataEntry/AntdInput.react';
20
-
21
- const { Search, TextArea } = Input;
22
-
23
- /**
24
- * 输入框组件AntdInput
25
- */
26
- const AntdInput = (props) => {
27
- let {
28
- id,
29
- className,
30
- style,
31
- styles,
32
- classNames,
33
- key,
34
- name,
35
- enableBatchControl,
36
- mode,
37
- passwordUseMd5,
38
- autoComplete,
39
- placeholder,
40
- value,
41
- size,
42
- addonBefore,
43
- addonAfter,
44
- prefix,
45
- suffix,
46
- allowClear,
47
- autoFocus,
48
- bordered,
49
- variant,
50
- defaultValue,
51
- disabled,
52
- maxLength,
53
- showCount,
54
- countFormat,
55
- nClicksSearch,
56
- nSubmit,
57
- status,
58
- autoSize,
59
- debounceWait,
60
- readOnly,
61
- emptyAsNone,
62
- setProps,
63
- persistence,
64
- persisted_props,
65
- persistence_type,
66
- batchPropsNames,
67
- ...others
68
- } = props;
69
-
70
- // 解决受控value卡部分中文输入法问题
71
- const [rawValue, setRawValue] = useState(value);
72
-
73
- // 批属性监听
74
- useEffect(() => {
75
- if (batchPropsNames && batchPropsNames.length !== 0) {
76
- let _batchPropsValues = {};
77
- for (let propName of batchPropsNames) {
78
- _batchPropsValues[propName] = props[propName];
79
- }
80
- setProps({
81
- batchPropsValues: _batchPropsValues
82
- })
83
- }
84
- })
85
-
86
- const context = useContext(PropsContext)
87
- const formId = useContext(FormContext)
88
-
89
- const updateItemValue = useFormStore((state) => state.updateItemValue)
90
- const deleteItemValue = useFormStore((state) => state.deleteItemValue)
91
-
92
- // 收集当前组件相关表单值
93
- const currentFormValue = useFormStore(state => state.values?.[formId]?.[name || id])
94
-
95
- // 处理组件卸载后,对应表单项值的清除
96
- useEffect(() => {
97
- return () => {
98
- // 若上文中存在有效表单id
99
- if (formId && (name || id) && enableBatchControl) {
100
- // 表单值更新
101
- deleteItemValue(formId, name || id)
102
- }
103
- }
104
- }, [name, id])
105
-
106
- useEffect(() => {
107
- // 初始化value
108
- if (defaultValue && !value) {
109
- // 当defaultValue不为空且value为空时,为value初始化defaultValue对应的value值
110
- setProps({
111
- value: defaultValue,
112
- md5Value: md5(defaultValue)
113
- })
114
- }
115
- // 在value存在时,初始化md5Value
116
- if (value) {
117
- setProps({
118
- md5Value: md5(value)
119
- })
120
- }
121
- }, [])
122
-
123
- // 监听输入内容变化事件
124
- const onChange = e => {
125
- // AntdForm表单批量控制
126
- if (formId && (name || id) && enableBatchControl) {
127
- // 表单值更新
128
- updateItemValue(formId, name || id, e.target.value)
129
- }
130
- // 若启用md5加密且为密码模式
131
- if (passwordUseMd5 && mode === 'password') {
132
- setProps({
133
- md5Value: e.target.value ? md5(e.target.value) : null,
134
- value: (
135
- emptyAsNone ?
136
- (
137
- e.target.value === '' ?
138
- null :
139
- e.target.value
140
- ) :
141
- e.target.value
142
- )
143
- })
144
- } else {
145
- setProps({
146
- value: (
147
- emptyAsNone ?
148
- (
149
- e.target.value === '' ?
150
- null :
151
- e.target.value
152
- ) :
153
- e.target.value
154
- )
155
- })
156
- }
157
- setRawValue(e.target.value);
158
- }
159
-
160
- // 解决value经回调更新后,rawValue未更新的问题
161
- useEffect(() => {
162
- // AntdForm表单批量控制
163
- if (formId && (name || id) && enableBatchControl) {
164
- setRawValue(currentFormValue);
165
- } else {
166
- setRawValue(value);
167
- }
168
- }, [value, currentFormValue])
169
-
170
- const { run: onDebounceChange } = useRequest(
171
- (e) => {
172
- setProps({
173
- debounceValue: (
174
- emptyAsNone ?
175
- (
176
- e === '' ?
177
- null :
178
- e
179
- ) :
180
- e
181
- )
182
- })
183
- },
184
- {
185
- debounceWait: debounceWait,
186
- manual: true
187
- }
188
- )
189
-
190
- // 监听聚焦到输入框时enter键点按次数
191
- const onPressEnter = e => {
192
- setProps({ nSubmit: nSubmit + 1 })
193
- }
194
-
195
- // 监听搜索按钮点按事件
196
- const onSearch = e => {
197
- setProps({ nClicksSearch: nClicksSearch + 1 })
198
- }
199
-
200
- // 不同的mode模式下渲染不同的组件
201
- if (mode === 'default') {
202
- return (
203
- <Input
204
- // 提取具有data-*或aria-*通配格式的属性
205
- {...pickBy((_, k) => k.startsWith('data-') || k.startsWith('aria-'), others)}
206
- id={id}
207
- className={
208
- isString(className) ?
209
- className :
210
- (className ? useCss(className) : undefined)
211
- }
212
- style={style}
213
- styles={styles}
214
- classNames={classNames}
215
- key={key}
216
- placeholder={placeholder}
217
- autoComplete={autoComplete}
218
- defaultValue={
219
- formId && (name || id) && enableBatchControl ?
220
- undefined :
221
- defaultValue
222
- }
223
- value={
224
- formId && (name || id) && enableBatchControl ?
225
- currentFormValue :
226
- rawValue || value
227
- }
228
- size={
229
- context && !isUndefined(context.componentSize) ?
230
- context.componentSize :
231
- size
232
- }
233
- addonBefore={addonBefore}
234
- addonAfter={addonAfter}
235
- prefix={prefix}
236
- suffix={suffix}
237
- allowClear={allowClear}
238
- autoFocus={autoFocus}
239
- variant={(
240
- !variant ?
241
- (bordered ? 'outlined' : 'borderless') :
242
- variant
243
- )}
244
- disabled={
245
- context && !isUndefined(context.componentDisabled) ?
246
- context.componentDisabled :
247
- disabled
248
- }
249
- maxLength={maxLength}
250
- status={status}
251
- readOnly={readOnly}
252
- onChange={(e) => {
253
- onChange(e)
254
- onDebounceChange(e.target.value)
255
- }}
256
- onPressEnter={onPressEnter}
257
- onFocus={() => setProps({ focusing: true })}
258
- onBlur={() => setProps({ focusing: false })}
259
- data-dash-is-loading={useLoading()} />
260
- );
261
- } else if (mode === 'search') {
262
- return (
263
- <Search
264
- // 提取具有data-*或aria-*通配格式的属性
265
- {...pickBy((_, k) => k.startsWith('data-') || k.startsWith('aria-'), others)}
266
- id={id}
267
- className={
268
- isString(className) ?
269
- className :
270
- (className ? useCss(className) : undefined)
271
- }
272
- style={style}
273
- styles={styles}
274
- classNames={classNames}
275
- key={key}
276
- placeholder={placeholder}
277
- autoComplete={autoComplete}
278
- size={
279
- context && !isUndefined(context.componentSize) ?
280
- context.componentSize :
281
- size
282
- }
283
- addonBefore={addonBefore}
284
- prefix={prefix}
285
- suffix={suffix}
286
- allowClear={allowClear}
287
- autoFocus={autoFocus}
288
- variant={(
289
- !variant ?
290
- (bordered ? 'outlined' : 'borderless') :
291
- variant
292
- )}
293
- defaultValue={
294
- formId && (name || id) && enableBatchControl ?
295
- undefined :
296
- defaultValue
297
- }
298
- value={
299
- formId && (name || id) && enableBatchControl ?
300
- currentFormValue :
301
- rawValue || value
302
- }
303
- disabled={
304
- context && !isUndefined(context.componentDisabled) ?
305
- context.componentDisabled :
306
- disabled
307
- }
308
- maxLength={maxLength}
309
- status={status}
310
- readOnly={readOnly}
311
- onSearch={onSearch}
312
- onChange={(e) => {
313
- onChange(e)
314
- onDebounceChange(e.target.value)
315
- }}
316
- onPressEnter={onPressEnter}
317
- onFocus={() => setProps({ focusing: true })}
318
- onBlur={() => setProps({ focusing: false })}
319
- data-dash-is-loading={useLoading()} />
320
- );
321
- } else if (mode === 'text-area') {
322
- return (
323
- <TextArea
324
- // 提取具有data-*或aria-*通配格式的属性
325
- {...pickBy((_, k) => k.startsWith('data-') || k.startsWith('aria-'), others)}
326
- id={id}
327
- className={
328
- isString(className) ?
329
- className :
330
- (className ? useCss(className) : undefined)
331
- }
332
- style={style}
333
- styles={styles}
334
- classNames={classNames}
335
- key={key}
336
- placeholder={placeholder}
337
- autoComplete={autoComplete}
338
- size={
339
- context && !isUndefined(context.componentSize) ?
340
- context.componentSize :
341
- size
342
- }
343
- allowClear={allowClear}
344
- autoFocus={autoFocus}
345
- variant={(
346
- !variant ?
347
- (bordered ? 'outlined' : 'borderless') :
348
- variant
349
- )}
350
- defaultValue={
351
- formId && (name || id) && enableBatchControl ?
352
- undefined :
353
- defaultValue
354
- }
355
- value={
356
- formId && (name || id) && enableBatchControl ?
357
- currentFormValue :
358
- rawValue || value
359
- }
360
- disabled={
361
- context && !isUndefined(context.componentDisabled) ?
362
- context.componentDisabled :
363
- disabled
364
- }
365
- maxLength={maxLength}
366
- showCount={
367
- showCount && countFormat && !maxLength ?
368
- {
369
- // 基于countFormat所定义的正则规则来自定义计算字符数
370
- formatter: ({ value }) => {
371
- return value.match(eval(`/${countFormat}/g`))?.length || 0;
372
- }
373
- } :
374
- showCount
375
- }
376
- status={status}
377
- autoSize={autoSize}
378
- readOnly={readOnly}
379
- onChange={(e) => {
380
- onChange(e)
381
- onDebounceChange(e.target.value)
382
- }}
383
- onPressEnter={onPressEnter}
384
- onFocus={() => setProps({ focusing: true })}
385
- onBlur={() => setProps({ focusing: false })}
386
- data-dash-is-loading={useLoading()} />
387
- );
388
- } else if (mode === 'password') {
389
- return (
390
- <Input.Password
391
- // 提取具有data-*或aria-*通配格式的属性
392
- {...pickBy((_, k) => k.startsWith('data-') || k.startsWith('aria-'), others)}
393
- id={id}
394
- className={
395
- isString(className) ?
396
- className :
397
- (className ? useCss(className) : undefined)
398
- }
399
- style={style}
400
- styles={styles}
401
- classNames={classNames}
402
- key={key}
403
- placeholder={placeholder}
404
- autoComplete={autoComplete}
405
- size={
406
- context && !isUndefined(context.componentSize) ?
407
- context.componentSize :
408
- size
409
- }
410
- variant={(
411
- !variant ?
412
- (bordered ? 'outlined' : 'borderless') :
413
- variant
414
- )}
415
- disabled={
416
- context && !isUndefined(context.componentDisabled) ?
417
- context.componentDisabled :
418
- disabled
419
- }
420
- defaultValue={
421
- formId && (name || id) && enableBatchControl ?
422
- undefined :
423
- defaultValue
424
- }
425
- value={
426
- formId && (name || id) && enableBatchControl ?
427
- currentFormValue :
428
- rawValue || value
429
- }
430
- maxLength={maxLength}
431
- status={status}
432
- addonBefore={addonBefore}
433
- addonAfter={addonAfter}
434
- prefix={prefix}
435
- readOnly={readOnly}
436
- onChange={(e) => {
437
- onChange(e)
438
- onDebounceChange(e.target.value)
439
- }}
440
- onPressEnter={onPressEnter}
441
- onFocus={() => setProps({ focusing: true })}
442
- onBlur={() => setProps({ focusing: false })}
443
- data-dash-is-loading={useLoading()} />
444
- );
445
- }
446
- }
447
-
448
- export default AntdInput;
449
-
450
- AntdInput.defaultProps = defaultProps;
1
+ // react核心
2
+ import React, { useState, useEffect, useContext } from 'react';
3
+ // antd核心
4
+ import { Input } from 'antd';
5
+ // 辅助库
6
+ import md5 from 'md5';
7
+ import { useRequest } from 'ahooks';
8
+ import { isString, isUndefined } from 'lodash';
9
+ import { pickBy } from 'ramda';
10
+ import { useLoading } from '../../components/utils';
11
+ // 自定义hooks
12
+ import useCss from '../../hooks/useCss';
13
+ // 上下文
14
+ import PropsContext from '../../contexts/PropsContext';
15
+ import FormContext from '../../contexts/FormContext';
16
+ // 状态管理
17
+ import useFormStore from '../../store/formStore';
18
+ // 参数类型
19
+ import { propTypes, defaultProps } from '../../components/dataEntry/AntdInput.react';
20
+
21
+ const { Search, TextArea } = Input;
22
+
23
+ /**
24
+ * 输入框组件AntdInput
25
+ */
26
+ const AntdInput = (props) => {
27
+ let {
28
+ id,
29
+ className,
30
+ style,
31
+ styles,
32
+ classNames,
33
+ key,
34
+ name,
35
+ enableBatchControl,
36
+ mode,
37
+ passwordUseMd5,
38
+ autoComplete,
39
+ placeholder,
40
+ value,
41
+ size,
42
+ addonBefore,
43
+ addonAfter,
44
+ prefix,
45
+ suffix,
46
+ allowClear,
47
+ autoFocus,
48
+ bordered,
49
+ variant,
50
+ defaultValue,
51
+ disabled,
52
+ maxLength,
53
+ showCount,
54
+ countFormat,
55
+ nClicksSearch,
56
+ nSubmit,
57
+ status,
58
+ autoSize,
59
+ debounceWait,
60
+ readOnly,
61
+ emptyAsNone,
62
+ setProps,
63
+ persistence,
64
+ persisted_props,
65
+ persistence_type,
66
+ batchPropsNames,
67
+ ...others
68
+ } = props;
69
+
70
+ // 解决受控value卡部分中文输入法问题
71
+ const [rawValue, setRawValue] = useState(value);
72
+
73
+ // 批属性监听
74
+ useEffect(() => {
75
+ if (batchPropsNames && batchPropsNames.length !== 0) {
76
+ let _batchPropsValues = {};
77
+ for (let propName of batchPropsNames) {
78
+ _batchPropsValues[propName] = props[propName];
79
+ }
80
+ setProps({
81
+ batchPropsValues: _batchPropsValues
82
+ })
83
+ }
84
+ })
85
+
86
+ const context = useContext(PropsContext)
87
+ const formId = useContext(FormContext)
88
+
89
+ const updateItemValue = useFormStore((state) => state.updateItemValue)
90
+ const deleteItemValue = useFormStore((state) => state.deleteItemValue)
91
+
92
+ // 收集当前组件相关表单值
93
+ const currentFormValue = useFormStore(state => state.values?.[formId]?.[name || id])
94
+
95
+ // 处理组件卸载后,对应表单项值的清除
96
+ useEffect(() => {
97
+ return () => {
98
+ // 若上文中存在有效表单id
99
+ if (formId && (name || id) && enableBatchControl) {
100
+ // 表单值更新
101
+ deleteItemValue(formId, name || id)
102
+ }
103
+ }
104
+ }, [name, id])
105
+
106
+ useEffect(() => {
107
+ // 初始化value
108
+ if (defaultValue && !value) {
109
+ // 当defaultValue不为空且value为空时,为value初始化defaultValue对应的value值
110
+ setProps({
111
+ value: defaultValue,
112
+ md5Value: md5(defaultValue)
113
+ })
114
+ }
115
+ // 在value存在时,初始化md5Value
116
+ if (value) {
117
+ setProps({
118
+ md5Value: md5(value)
119
+ })
120
+ }
121
+ }, [])
122
+
123
+ // 监听输入内容变化事件
124
+ const onChange = e => {
125
+ // AntdForm表单批量控制
126
+ if (formId && (name || id) && enableBatchControl) {
127
+ // 表单值更新
128
+ updateItemValue(formId, name || id, e.target.value)
129
+ }
130
+ // 若启用md5加密且为密码模式
131
+ if (passwordUseMd5 && mode === 'password') {
132
+ setProps({
133
+ md5Value: e.target.value ? md5(e.target.value) : null,
134
+ value: (
135
+ emptyAsNone ?
136
+ (
137
+ e.target.value === '' ?
138
+ null :
139
+ e.target.value
140
+ ) :
141
+ e.target.value
142
+ )
143
+ })
144
+ } else {
145
+ setProps({
146
+ value: (
147
+ emptyAsNone ?
148
+ (
149
+ e.target.value === '' ?
150
+ null :
151
+ e.target.value
152
+ ) :
153
+ e.target.value
154
+ )
155
+ })
156
+ }
157
+ setRawValue(e.target.value);
158
+ }
159
+
160
+ // 解决value经回调更新后,rawValue未更新的问题
161
+ useEffect(() => {
162
+ // AntdForm表单批量控制
163
+ if (formId && (name || id) && enableBatchControl) {
164
+ setRawValue(currentFormValue);
165
+ } else {
166
+ setRawValue(value);
167
+ }
168
+ }, [value, currentFormValue])
169
+
170
+ const { run: onDebounceChange } = useRequest(
171
+ (e) => {
172
+ setProps({
173
+ debounceValue: (
174
+ emptyAsNone ?
175
+ (
176
+ e === '' ?
177
+ null :
178
+ e
179
+ ) :
180
+ e
181
+ )
182
+ })
183
+ },
184
+ {
185
+ debounceWait: debounceWait,
186
+ manual: true
187
+ }
188
+ )
189
+
190
+ // 监听聚焦到输入框时enter键点按次数
191
+ const onPressEnter = e => {
192
+ setProps({ nSubmit: nSubmit + 1 })
193
+ }
194
+
195
+ // 监听搜索按钮点按事件
196
+ const onSearch = e => {
197
+ setProps({ nClicksSearch: nClicksSearch + 1 })
198
+ }
199
+
200
+ // 不同的mode模式下渲染不同的组件
201
+ if (mode === 'default') {
202
+ return (
203
+ <Input
204
+ // 提取具有data-*或aria-*通配格式的属性
205
+ {...pickBy((_, k) => k.startsWith('data-') || k.startsWith('aria-'), others)}
206
+ id={id}
207
+ className={
208
+ isString(className) ?
209
+ className :
210
+ (className ? useCss(className) : undefined)
211
+ }
212
+ style={style}
213
+ styles={styles}
214
+ classNames={classNames}
215
+ key={key}
216
+ placeholder={placeholder}
217
+ autoComplete={autoComplete}
218
+ defaultValue={
219
+ formId && (name || id) && enableBatchControl ?
220
+ undefined :
221
+ defaultValue
222
+ }
223
+ value={
224
+ formId && (name || id) && enableBatchControl ?
225
+ currentFormValue :
226
+ rawValue || value
227
+ }
228
+ size={
229
+ context && !isUndefined(context.componentSize) ?
230
+ context.componentSize :
231
+ size
232
+ }
233
+ addonBefore={addonBefore}
234
+ addonAfter={addonAfter}
235
+ prefix={prefix}
236
+ suffix={suffix}
237
+ allowClear={allowClear}
238
+ autoFocus={autoFocus}
239
+ variant={(
240
+ !variant ?
241
+ (bordered ? 'outlined' : 'borderless') :
242
+ variant
243
+ )}
244
+ disabled={
245
+ context && !isUndefined(context.componentDisabled) ?
246
+ context.componentDisabled :
247
+ disabled
248
+ }
249
+ maxLength={maxLength}
250
+ status={status}
251
+ readOnly={readOnly}
252
+ onChange={(e) => {
253
+ onChange(e)
254
+ onDebounceChange(e.target.value)
255
+ }}
256
+ onPressEnter={onPressEnter}
257
+ onFocus={() => setProps({ focusing: true })}
258
+ onBlur={() => setProps({ focusing: false })}
259
+ data-dash-is-loading={useLoading()} />
260
+ );
261
+ } else if (mode === 'search') {
262
+ return (
263
+ <Search
264
+ // 提取具有data-*或aria-*通配格式的属性
265
+ {...pickBy((_, k) => k.startsWith('data-') || k.startsWith('aria-'), others)}
266
+ id={id}
267
+ className={
268
+ isString(className) ?
269
+ className :
270
+ (className ? useCss(className) : undefined)
271
+ }
272
+ style={style}
273
+ styles={styles}
274
+ classNames={classNames}
275
+ key={key}
276
+ placeholder={placeholder}
277
+ autoComplete={autoComplete}
278
+ size={
279
+ context && !isUndefined(context.componentSize) ?
280
+ context.componentSize :
281
+ size
282
+ }
283
+ addonBefore={addonBefore}
284
+ prefix={prefix}
285
+ suffix={suffix}
286
+ allowClear={allowClear}
287
+ autoFocus={autoFocus}
288
+ variant={(
289
+ !variant ?
290
+ (bordered ? 'outlined' : 'borderless') :
291
+ variant
292
+ )}
293
+ defaultValue={
294
+ formId && (name || id) && enableBatchControl ?
295
+ undefined :
296
+ defaultValue
297
+ }
298
+ value={
299
+ formId && (name || id) && enableBatchControl ?
300
+ currentFormValue :
301
+ rawValue || value
302
+ }
303
+ disabled={
304
+ context && !isUndefined(context.componentDisabled) ?
305
+ context.componentDisabled :
306
+ disabled
307
+ }
308
+ maxLength={maxLength}
309
+ status={status}
310
+ readOnly={readOnly}
311
+ onSearch={onSearch}
312
+ onChange={(e) => {
313
+ onChange(e)
314
+ onDebounceChange(e.target.value)
315
+ }}
316
+ onPressEnter={onPressEnter}
317
+ onFocus={() => setProps({ focusing: true })}
318
+ onBlur={() => setProps({ focusing: false })}
319
+ data-dash-is-loading={useLoading()} />
320
+ );
321
+ } else if (mode === 'text-area') {
322
+ return (
323
+ <TextArea
324
+ // 提取具有data-*或aria-*通配格式的属性
325
+ {...pickBy((_, k) => k.startsWith('data-') || k.startsWith('aria-'), others)}
326
+ id={id}
327
+ className={
328
+ isString(className) ?
329
+ className :
330
+ (className ? useCss(className) : undefined)
331
+ }
332
+ style={style}
333
+ styles={styles}
334
+ classNames={classNames}
335
+ key={key}
336
+ placeholder={placeholder}
337
+ autoComplete={autoComplete}
338
+ size={
339
+ context && !isUndefined(context.componentSize) ?
340
+ context.componentSize :
341
+ size
342
+ }
343
+ allowClear={allowClear}
344
+ autoFocus={autoFocus}
345
+ variant={(
346
+ !variant ?
347
+ (bordered ? 'outlined' : 'borderless') :
348
+ variant
349
+ )}
350
+ defaultValue={
351
+ formId && (name || id) && enableBatchControl ?
352
+ undefined :
353
+ defaultValue
354
+ }
355
+ value={
356
+ formId && (name || id) && enableBatchControl ?
357
+ currentFormValue :
358
+ rawValue || value
359
+ }
360
+ disabled={
361
+ context && !isUndefined(context.componentDisabled) ?
362
+ context.componentDisabled :
363
+ disabled
364
+ }
365
+ maxLength={maxLength}
366
+ showCount={
367
+ showCount && countFormat && !maxLength ?
368
+ {
369
+ // 基于countFormat所定义的正则规则来自定义计算字符数
370
+ formatter: ({ value }) => {
371
+ return value.match(eval(`/${countFormat}/g`))?.length || 0;
372
+ }
373
+ } :
374
+ showCount
375
+ }
376
+ status={status}
377
+ autoSize={autoSize}
378
+ readOnly={readOnly}
379
+ onChange={(e) => {
380
+ onChange(e)
381
+ onDebounceChange(e.target.value)
382
+ }}
383
+ onPressEnter={onPressEnter}
384
+ onFocus={() => setProps({ focusing: true })}
385
+ onBlur={() => setProps({ focusing: false })}
386
+ data-dash-is-loading={useLoading()} />
387
+ );
388
+ } else if (mode === 'password') {
389
+ return (
390
+ <Input.Password
391
+ // 提取具有data-*或aria-*通配格式的属性
392
+ {...pickBy((_, k) => k.startsWith('data-') || k.startsWith('aria-'), others)}
393
+ id={id}
394
+ className={
395
+ isString(className) ?
396
+ className :
397
+ (className ? useCss(className) : undefined)
398
+ }
399
+ style={style}
400
+ styles={styles}
401
+ classNames={classNames}
402
+ key={key}
403
+ placeholder={placeholder}
404
+ autoComplete={autoComplete}
405
+ size={
406
+ context && !isUndefined(context.componentSize) ?
407
+ context.componentSize :
408
+ size
409
+ }
410
+ variant={(
411
+ !variant ?
412
+ (bordered ? 'outlined' : 'borderless') :
413
+ variant
414
+ )}
415
+ disabled={
416
+ context && !isUndefined(context.componentDisabled) ?
417
+ context.componentDisabled :
418
+ disabled
419
+ }
420
+ defaultValue={
421
+ formId && (name || id) && enableBatchControl ?
422
+ undefined :
423
+ defaultValue
424
+ }
425
+ value={
426
+ formId && (name || id) && enableBatchControl ?
427
+ currentFormValue :
428
+ rawValue || value
429
+ }
430
+ maxLength={maxLength}
431
+ status={status}
432
+ addonBefore={addonBefore}
433
+ addonAfter={addonAfter}
434
+ prefix={prefix}
435
+ readOnly={readOnly}
436
+ onChange={(e) => {
437
+ onChange(e)
438
+ onDebounceChange(e.target.value)
439
+ }}
440
+ onPressEnter={onPressEnter}
441
+ onFocus={() => setProps({ focusing: true })}
442
+ onBlur={() => setProps({ focusing: false })}
443
+ data-dash-is-loading={useLoading()} />
444
+ );
445
+ }
446
+ }
447
+
448
+ export default AntdInput;
449
+
450
+ AntdInput.defaultProps = defaultProps;
451
451
  AntdInput.propTypes = propTypes;