@para-ui/core 5.0.0-beta.12 → 5.0.0-beta.14

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 (565) hide show
  1. package/AGENTS.md +315 -0
  2. package/AlignBox/component.json +89 -0
  3. package/Anchor/component.json +130 -0
  4. package/Argv/component.json +216 -0
  5. package/AutoBox/component.json +133 -0
  6. package/AutoButton/component.json +109 -0
  7. package/AutoTips/component.json +121 -0
  8. package/Badge/component.json +92 -0
  9. package/Breadcrumbs/component.json +142 -0
  10. package/Button/component.json +168 -0
  11. package/ButtonGroup/component.json +132 -0
  12. package/Card/component.json +162 -0
  13. package/Carousel/component.json +142 -0
  14. package/Cascader/component.json +196 -0
  15. package/Checkbox/component.json +138 -0
  16. package/CheckboxGroup/component.json +152 -0
  17. package/CodeEditor/component.json +189 -0
  18. package/Collapse/component.json +166 -0
  19. package/CollapseBox/component.json +84 -0
  20. package/CollapseLayout/component.json +155 -0
  21. package/ColorPicker/component.json +142 -0
  22. package/ComboSelect/component.json +181 -0
  23. package/Container/component.json +111 -0
  24. package/ContentBox/component.json +81 -0
  25. package/CopyText/component.json +118 -0
  26. package/CycleSelector/component.json +98 -0
  27. package/DatePicker/component.json +192 -0
  28. package/Descriptions/component.json +142 -0
  29. package/Desktop/component.json +171 -0
  30. package/DragVerify/component.json +114 -0
  31. package/Drawer/component.json +200 -0
  32. package/Dropdown/component.json +147 -0
  33. package/DynamicMultiBox/component.json +278 -0
  34. package/Empty/component.json +123 -0
  35. package/FieldForm/component.json +196 -0
  36. package/Form/component.json +161 -0
  37. package/FormItem/component.json +171 -0
  38. package/FunctionModal/component.json +197 -0
  39. package/Help/component.json +118 -0
  40. package/HelperText/component.json +126 -0
  41. package/Image/component.json +165 -0
  42. package/InputCode/component.json +191 -0
  43. package/InputLang/component.json +205 -0
  44. package/InputNumber/component.json +162 -0
  45. package/Label/component.json +126 -0
  46. package/Loading/component.json +91 -0
  47. package/Menu/component.json +180 -0
  48. package/Message/component.json +246 -0
  49. package/Modal/component.json +277 -0
  50. package/MultiBox/component.json +216 -0
  51. package/Notification/component.json +184 -0
  52. package/OperateBtn/component.json +134 -0
  53. package/PageHeader/component.json +112 -0
  54. package/Pagination/component.json +181 -0
  55. package/PasswordRules/component.json +105 -0
  56. package/PopConfirm/component.json +227 -0
  57. package/PopMenu/component.json +131 -0
  58. package/Popover/component.json +165 -0
  59. package/Progress/component.json +161 -0
  60. package/Prompt/component.json +144 -0
  61. package/Querying/component.json +96 -0
  62. package/QuickReply/component.json +129 -0
  63. package/Radio/component.json +136 -0
  64. package/RadioGroup/component.json +149 -0
  65. package/RangeInput/component.json +198 -0
  66. package/Result/component.json +104 -0
  67. package/ScrollBar/component.json +115 -0
  68. package/Search/component.json +177 -0
  69. package/Select/component.json +244 -0
  70. package/SelectInput/component.json +184 -0
  71. package/Selector/component.json +203 -0
  72. package/SelectorPicker/component.json +179 -0
  73. package/SingleBox/component.json +151 -0
  74. package/Slider/component.json +181 -0
  75. package/SortBox/component.json +108 -0
  76. package/Status/component.json +104 -0
  77. package/Stepper/component.json +129 -0
  78. package/Switch/component.json +207 -0
  79. package/Table/component.json +547 -0
  80. package/Tabs/component.json +227 -0
  81. package/Tag/component.json +221 -0
  82. package/TextEditor/component.json +186 -0
  83. package/TextField/component.json +290 -0
  84. package/TimePicker/component.json +176 -0
  85. package/Timeline/component.json +110 -0
  86. package/Title/component.json +156 -0
  87. package/ToggleButton/component.json +153 -0
  88. package/Tooltip/component.json +176 -0
  89. package/Transfer/component.json +157 -0
  90. package/Tree/component.json +512 -0
  91. package/Upload/component.json +450 -0
  92. package/ai-workflows/01-crud-list-multi-drawer.md +278 -0
  93. package/ai-workflows/02-rbac-operation-buttons.md +290 -0
  94. package/ai-workflows/03-complex-form-async-cascade.md +350 -0
  95. package/ai-workflows/04-array-field-form.md +281 -0
  96. package/ai-workflows/05-popconfirm-async-message-queue.md +333 -0
  97. package/ai-workflows/06-modal-drawer-form-workflow.md +385 -0
  98. package/ai-workflows/07-search-filter-table-trio.md +387 -0
  99. package/ai-workflows/08-table-advanced-features.md +365 -0
  100. package/ai-workflows/09-batch-operation-export-progress.md +367 -0
  101. package/ai-workflows/10-cross-component-state-coordination.md +412 -0
  102. package/codemods/modal-onCancel-to-onDismiss.js +69 -0
  103. package/es/AlignBox/component.json +89 -0
  104. package/es/AlignBox/index.css +1 -1
  105. package/es/AlignBox/index.d.ts +6 -2
  106. package/es/AlignBox/index.js +1 -1
  107. package/es/AlignBox/style/index.css +1 -1
  108. package/es/Anchor/anchorMenu/index.d.ts +2 -1
  109. package/es/Anchor/anchorMenu/index.js +36 -33
  110. package/es/Anchor/component.json +130 -0
  111. package/es/Anchor/index.js +50 -47
  112. package/es/Anchor/type.d.ts +8 -4
  113. package/es/Argv/component.json +216 -0
  114. package/es/Argv/index.d.ts +5 -6
  115. package/es/AutoBox/component.json +133 -0
  116. package/es/AutoBox/index.d.ts +3 -3
  117. package/es/AutoBox/index.js +1 -1
  118. package/es/AutoBox/protal.d.ts +2 -2
  119. package/es/AutoBox/protal.js +32 -29
  120. package/es/AutoButton/component.json +109 -0
  121. package/es/AutoButton/index.js +1 -1
  122. package/es/AutoTips/autoTipsMultiline/index.d.ts +1 -1
  123. package/es/AutoTips/autoTipsMultiline/index.js +1 -1
  124. package/es/AutoTips/component.json +121 -0
  125. package/es/Badge/component.json +92 -0
  126. package/es/Breadcrumbs/component.json +142 -0
  127. package/es/Breadcrumbs/index.js +1 -1
  128. package/es/Button/SplitButton.d.ts +2 -2
  129. package/es/Button/component.json +168 -0
  130. package/es/Button/index.js +44 -44
  131. package/es/ButtonGroup/component.json +132 -0
  132. package/es/ButtonGroup/index.d.ts +1 -1
  133. package/es/Card/component.json +162 -0
  134. package/es/Card/index.d.ts +2 -2
  135. package/es/Card/index.js +2 -2
  136. package/es/Carousel/component.json +142 -0
  137. package/es/Carousel/index.d.ts +1 -1
  138. package/es/Cascader/Cascader.js +188 -180
  139. package/es/Cascader/component.json +196 -0
  140. package/es/Cascader/hooks/useEntities.js +7 -7
  141. package/es/Cascader/interface.d.ts +1 -0
  142. package/es/Cascader/utils/commonUtil.d.ts +1 -1
  143. package/es/Cascader/utils/commonUtil.js +16 -16
  144. package/es/Cascader/utils/treeUtil.d.ts +14 -5
  145. package/es/Cascader/utils/treeUtil.js +1 -1
  146. package/es/Checkbox/component.json +138 -0
  147. package/es/CheckboxGroup/component.json +152 -0
  148. package/es/CodeEditor/component.json +189 -0
  149. package/es/CodeEditor/index.d.ts +10 -9
  150. package/es/Collapse/component.json +166 -0
  151. package/es/Collapse/index.d.ts +1 -1
  152. package/es/Collapse/index.js +41 -33
  153. package/es/CollapseBox/component.json +84 -0
  154. package/es/CollapseLayout/component.json +155 -0
  155. package/es/ColorPicker/component.json +142 -0
  156. package/es/ComboSelect/component.json +181 -0
  157. package/es/ComboSelect/index.js +299 -287
  158. package/es/ComboSelect/interface.d.ts +6 -3
  159. package/es/ComboSelect/utils.d.ts +3 -3
  160. package/es/ComboSelect/utils.js +1 -1
  161. package/es/Container/component.json +111 -0
  162. package/es/ContentBox/component.json +81 -0
  163. package/es/CopyText/component.json +118 -0
  164. package/es/CycleSelector/component.json +98 -0
  165. package/es/CycleSelector/index.js +14 -13
  166. package/es/DatePicker/component.json +192 -0
  167. package/es/DatePicker/generatePicker/generateRangePicker.d.ts +0 -8
  168. package/es/DatePicker/generatePicker/generateRangePicker.js +73 -65
  169. package/es/DatePicker/generatePicker/generateSinglePicker.js +1 -1
  170. package/es/DatePicker/generatePicker/index.d.ts +11 -4
  171. package/es/Descriptions/component.json +142 -0
  172. package/es/Descriptions/index.d.ts +1 -1
  173. package/es/Desktop/component.json +171 -0
  174. package/es/DragVerify/component.json +114 -0
  175. package/es/DragVerify/index.js +19 -19
  176. package/es/Drawer/component.json +200 -0
  177. package/es/Drawer/index.js +86 -86
  178. package/es/Drawer/interface.d.ts +1 -1
  179. package/es/Drawer/util.d.ts +1 -6
  180. package/es/Drawer/util.js +9 -6
  181. package/es/Dropdown/component.json +147 -0
  182. package/es/DynamicMultiBox/component.json +278 -0
  183. package/es/DynamicMultiBox/formItem.d.ts +1 -1
  184. package/es/DynamicMultiBox/rowForm.d.ts +2 -2
  185. package/es/Empty/component.json +123 -0
  186. package/es/Empty/index.css +1 -1
  187. package/es/Empty/index.d.ts +2 -2
  188. package/es/Empty/index.js +27 -26
  189. package/es/Empty/style/index.css +1 -1
  190. package/es/FieldForm/FieldFormItem/MemoInput.d.ts +2 -2
  191. package/es/FieldForm/FieldFormItem/index.d.ts +6 -6
  192. package/es/FieldForm/Form.d.ts +2 -2
  193. package/es/FieldForm/FormList.d.ts +2 -2
  194. package/es/FieldForm/component.json +196 -0
  195. package/es/FieldForm/context.d.ts +5 -1
  196. package/es/FieldForm/context.js +2 -2
  197. package/es/FieldForm/hooks/useForm.d.ts +4 -3
  198. package/es/FieldForm/hooks/useFormInstance.d.ts +1 -1
  199. package/es/FieldForm/hooks/useFormItemStatus.d.ts +9 -5
  200. package/es/FieldForm/hooks/useFormItemStatus.js +2 -2
  201. package/es/FieldForm/hooks/useItemRef.d.ts +1 -1
  202. package/es/FieldForm/hooks/useItemRef.js +6 -6
  203. package/es/Form/component.json +161 -0
  204. package/es/Form/index.d.ts +52 -49
  205. package/es/FormItem/compoments/defaultCompoments/index.d.ts +5 -5
  206. package/es/FormItem/compoments/defaultCompoments/index.js +12 -11
  207. package/es/FormItem/compoments/formCheckboxGroup/index.d.ts +2 -2
  208. package/es/FormItem/compoments/formFile/index.js +8 -8
  209. package/es/FormItem/compoments/formRadioGroup/index.d.ts +1 -1
  210. package/es/FormItem/compoments/formSelect/index.d.ts +1 -1
  211. package/es/FormItem/component.json +171 -0
  212. package/es/FormItem/index.d.ts +5 -5
  213. package/es/FormItem/index.js +23 -23
  214. package/es/FormItem/itemType.js +1 -1
  215. package/es/FunctionModal/component.json +197 -0
  216. package/es/FunctionModal/dialog.d.ts +1 -1
  217. package/es/FunctionModal/modalContext.d.ts +4 -1
  218. package/es/Help/component.json +118 -0
  219. package/es/HelperText/component.json +126 -0
  220. package/es/Image/component.json +165 -0
  221. package/es/InputCode/component.json +191 -0
  222. package/es/InputCode/index.d.ts +2 -2
  223. package/es/InputLang/component.json +205 -0
  224. package/es/InputLang/index.js +1 -1
  225. package/es/InputNumber/component.json +162 -0
  226. package/es/Label/component.json +126 -0
  227. package/es/Label/index.d.ts +2 -2
  228. package/es/Loading/component.json +91 -0
  229. package/es/Menu/component.json +180 -0
  230. package/es/Message/component.json +246 -0
  231. package/es/Message/index.d.ts +2 -2
  232. package/es/Message/index.js +2 -2
  233. package/es/Modal/Confirm/index.d.ts +1 -1
  234. package/es/Modal/Confirm/index.js +81 -75
  235. package/es/Modal/component.json +277 -0
  236. package/es/Modal/index.d.ts +97 -6
  237. package/es/Modal/index.js +174 -122
  238. package/es/Modal/interface.d.ts +1 -0
  239. package/es/MultiBox/component.json +216 -0
  240. package/es/MultiBox/index.js +19 -14
  241. package/es/Notification/component.json +184 -0
  242. package/es/OperateBtn/component.json +134 -0
  243. package/es/OperateBtn/index.d.ts +3 -3
  244. package/es/PageHeader/component.json +112 -0
  245. package/es/Pagination/component.json +181 -0
  246. package/es/Pagination/index.js +15 -15
  247. package/es/PasswordRules/component.json +105 -0
  248. package/es/PasswordRules/index.d.ts +4 -4
  249. package/es/PopConfirm/component.json +227 -0
  250. package/es/PopConfirm/index.d.ts +1 -1
  251. package/es/PopConfirm/index.js +1 -1
  252. package/es/PopMenu/component.json +131 -0
  253. package/es/PopMenu/hooks.d.ts +1 -1
  254. package/es/PopMenu/index.js +8 -8
  255. package/es/Popover/component.json +165 -0
  256. package/es/Popover/index.js +1 -1
  257. package/es/Progress/component.json +161 -0
  258. package/es/Prompt/component.json +144 -0
  259. package/es/Querying/component.json +96 -0
  260. package/es/Querying/index.css +1 -1
  261. package/es/Querying/index.d.ts +2 -2
  262. package/es/Querying/index.js +20 -19
  263. package/es/Querying/style/index.css +1 -1
  264. package/es/QuickReply/component.json +129 -0
  265. package/es/QuickReply/index.d.ts +1 -1
  266. package/es/Radio/component.json +136 -0
  267. package/es/RadioGroup/component.json +149 -0
  268. package/es/RangeInput/component.json +198 -0
  269. package/es/RangeInput/index.js +1 -1
  270. package/es/Result/component.json +104 -0
  271. package/es/ScrollBar/component.json +115 -0
  272. package/es/Search/component.json +177 -0
  273. package/es/Search/index.d.ts +1 -1
  274. package/es/Select/component.json +244 -0
  275. package/es/Select/index.js +113 -113
  276. package/es/SelectInput/component.json +184 -0
  277. package/es/Selector/component.json +203 -0
  278. package/es/Selector/index.js +28 -27
  279. package/es/Selector/interface.d.ts +1 -1
  280. package/es/Selector/selectorMain/index.js +2 -2
  281. package/es/Selector/selectorNode/index.js +1 -1
  282. package/es/Selector/util.d.ts +2 -2
  283. package/es/SelectorPicker/component.json +179 -0
  284. package/es/SelectorPicker/index.d.ts +5 -5
  285. package/es/SelectorPicker/index.js +15 -15
  286. package/es/SingleBox/component.json +151 -0
  287. package/es/SingleBox/index.d.ts +2 -2
  288. package/es/Slider/component.json +181 -0
  289. package/es/SortBox/component.json +108 -0
  290. package/es/Status/component.json +104 -0
  291. package/es/Stepper/component.json +129 -0
  292. package/es/Stepper/index.d.ts +2 -2
  293. package/es/Switch/component.json +207 -0
  294. package/es/Switch/index.css +1 -1
  295. package/es/Switch/index.d.ts +3 -2
  296. package/es/Switch/index.js +60 -59
  297. package/es/Switch/style/index.css +1 -1
  298. package/es/Table/component.json +547 -0
  299. package/es/Table/index.d.ts +2 -2
  300. package/es/Table/index.js +414 -414
  301. package/es/Table/interface.d.ts +6 -0
  302. package/es/Tabs/component.json +227 -0
  303. package/es/Tag/component.json +221 -0
  304. package/es/Tag/index.css +1 -1
  305. package/es/Tag/index.d.ts +1 -1
  306. package/es/Tag/index.js +20 -20
  307. package/es/Tag/style/index.css +1 -1
  308. package/es/TextEditor/component.json +186 -0
  309. package/es/TextEditor/index.d.ts +5 -5
  310. package/es/TextField/component.json +290 -0
  311. package/es/TextField/index.d.ts +2 -2
  312. package/es/TimePicker/component.json +176 -0
  313. package/es/Timeline/component.json +110 -0
  314. package/es/Title/component.json +156 -0
  315. package/es/ToggleButton/component.json +153 -0
  316. package/es/Tooltip/component.json +176 -0
  317. package/es/Tooltip/index.js +74 -63
  318. package/es/Tooltip/interface.d.ts +14 -1
  319. package/es/Tooltip/utils.js +6 -6
  320. package/es/Transfer/component.json +157 -0
  321. package/es/Tree/component.json +512 -0
  322. package/es/Upload/component.json +450 -0
  323. package/es/Utils/type.d.ts +0 -2
  324. package/es/index.d.ts +2 -0
  325. package/es/index.js +1 -1
  326. package/es/locale/en_US.d.ts +361 -0
  327. package/es/locale/en_US.js +364 -0
  328. package/es/locale/index.d.ts +1 -723
  329. package/es/locale/index2.js +10 -0
  330. package/es/locale/zh_CN.d.ts +361 -0
  331. package/es/locale/zh_CN.js +364 -0
  332. package/lib/AlignBox/component.json +89 -0
  333. package/lib/AlignBox/index.css +1 -1
  334. package/lib/AlignBox/index.d.ts +6 -2
  335. package/lib/AlignBox/index.js +1 -1
  336. package/lib/AlignBox/style/index.css +1 -1
  337. package/lib/Anchor/anchorMenu/index.d.ts +2 -1
  338. package/lib/Anchor/anchorMenu/index.js +1 -1
  339. package/lib/Anchor/component.json +130 -0
  340. package/lib/Anchor/index.js +1 -1
  341. package/lib/Anchor/type.d.ts +8 -4
  342. package/lib/Argv/component.json +216 -0
  343. package/lib/Argv/index.d.ts +5 -6
  344. package/lib/AutoBox/component.json +133 -0
  345. package/lib/AutoBox/index.d.ts +3 -3
  346. package/lib/AutoBox/index.js +1 -1
  347. package/lib/AutoBox/protal.d.ts +2 -2
  348. package/lib/AutoBox/protal.js +1 -1
  349. package/lib/AutoButton/component.json +109 -0
  350. package/lib/AutoButton/index.js +1 -1
  351. package/lib/AutoTips/autoTipsMultiline/index.d.ts +1 -1
  352. package/lib/AutoTips/autoTipsMultiline/index.js +1 -1
  353. package/lib/AutoTips/component.json +121 -0
  354. package/lib/Badge/component.json +92 -0
  355. package/lib/Breadcrumbs/component.json +142 -0
  356. package/lib/Breadcrumbs/index.js +1 -1
  357. package/lib/Button/SplitButton.d.ts +2 -2
  358. package/lib/Button/component.json +168 -0
  359. package/lib/Button/index.js +1 -1
  360. package/lib/ButtonGroup/component.json +132 -0
  361. package/lib/ButtonGroup/index.d.ts +1 -1
  362. package/lib/Card/component.json +162 -0
  363. package/lib/Card/index.d.ts +2 -2
  364. package/lib/Card/index.js +1 -1
  365. package/lib/Carousel/component.json +142 -0
  366. package/lib/Carousel/index.d.ts +1 -1
  367. package/lib/Cascader/Cascader.js +1 -1
  368. package/lib/Cascader/component.json +196 -0
  369. package/lib/Cascader/hooks/useEntities.js +1 -1
  370. package/lib/Cascader/interface.d.ts +1 -0
  371. package/lib/Cascader/utils/commonUtil.d.ts +1 -1
  372. package/lib/Cascader/utils/commonUtil.js +1 -1
  373. package/lib/Cascader/utils/treeUtil.d.ts +14 -5
  374. package/lib/Cascader/utils/treeUtil.js +1 -1
  375. package/lib/Checkbox/component.json +138 -0
  376. package/lib/CheckboxGroup/component.json +152 -0
  377. package/lib/CodeEditor/component.json +189 -0
  378. package/lib/CodeEditor/index.d.ts +10 -9
  379. package/lib/Collapse/component.json +166 -0
  380. package/lib/Collapse/index.d.ts +1 -1
  381. package/lib/Collapse/index.js +1 -1
  382. package/lib/CollapseBox/component.json +84 -0
  383. package/lib/CollapseLayout/component.json +155 -0
  384. package/lib/ColorPicker/component.json +142 -0
  385. package/lib/ComboSelect/component.json +181 -0
  386. package/lib/ComboSelect/index.js +1 -1
  387. package/lib/ComboSelect/interface.d.ts +6 -3
  388. package/lib/ComboSelect/utils.d.ts +3 -3
  389. package/lib/ComboSelect/utils.js +1 -1
  390. package/lib/Container/component.json +111 -0
  391. package/lib/ContentBox/component.json +81 -0
  392. package/lib/CopyText/component.json +118 -0
  393. package/lib/CycleSelector/component.json +98 -0
  394. package/lib/CycleSelector/index.js +1 -1
  395. package/lib/DatePicker/component.json +192 -0
  396. package/lib/DatePicker/generatePicker/generateRangePicker.d.ts +0 -8
  397. package/lib/DatePicker/generatePicker/generateRangePicker.js +1 -1
  398. package/lib/DatePicker/generatePicker/generateSinglePicker.js +1 -1
  399. package/lib/DatePicker/generatePicker/index.d.ts +11 -4
  400. package/lib/Descriptions/component.json +142 -0
  401. package/lib/Descriptions/index.d.ts +1 -1
  402. package/lib/Desktop/component.json +171 -0
  403. package/lib/DragVerify/component.json +114 -0
  404. package/lib/DragVerify/index.js +1 -1
  405. package/lib/Drawer/component.json +200 -0
  406. package/lib/Drawer/index.js +1 -1
  407. package/lib/Drawer/interface.d.ts +1 -1
  408. package/lib/Drawer/util.d.ts +1 -6
  409. package/lib/Drawer/util.js +1 -1
  410. package/lib/Dropdown/component.json +147 -0
  411. package/lib/DynamicMultiBox/component.json +278 -0
  412. package/lib/DynamicMultiBox/formItem.d.ts +1 -1
  413. package/lib/DynamicMultiBox/rowForm.d.ts +2 -2
  414. package/lib/Empty/component.json +123 -0
  415. package/lib/Empty/index.css +1 -1
  416. package/lib/Empty/index.d.ts +2 -2
  417. package/lib/Empty/index.js +1 -1
  418. package/lib/Empty/style/index.css +1 -1
  419. package/lib/FieldForm/FieldFormItem/MemoInput.d.ts +2 -2
  420. package/lib/FieldForm/FieldFormItem/index.d.ts +6 -6
  421. package/lib/FieldForm/Form.d.ts +2 -2
  422. package/lib/FieldForm/FormList.d.ts +2 -2
  423. package/lib/FieldForm/component.json +196 -0
  424. package/lib/FieldForm/context.d.ts +5 -1
  425. package/lib/FieldForm/context.js +1 -1
  426. package/lib/FieldForm/hooks/useForm.d.ts +4 -3
  427. package/lib/FieldForm/hooks/useFormInstance.d.ts +1 -1
  428. package/lib/FieldForm/hooks/useFormItemStatus.d.ts +9 -5
  429. package/lib/FieldForm/hooks/useFormItemStatus.js +1 -1
  430. package/lib/FieldForm/hooks/useItemRef.d.ts +1 -1
  431. package/lib/FieldForm/hooks/useItemRef.js +1 -1
  432. package/lib/Form/component.json +161 -0
  433. package/lib/Form/index.d.ts +52 -49
  434. package/lib/FormItem/compoments/defaultCompoments/index.d.ts +5 -5
  435. package/lib/FormItem/compoments/defaultCompoments/index.js +1 -1
  436. package/lib/FormItem/compoments/formCheckboxGroup/index.d.ts +2 -2
  437. package/lib/FormItem/compoments/formFile/index.js +1 -1
  438. package/lib/FormItem/compoments/formRadioGroup/index.d.ts +1 -1
  439. package/lib/FormItem/compoments/formSelect/index.d.ts +1 -1
  440. package/lib/FormItem/component.json +171 -0
  441. package/lib/FormItem/index.d.ts +5 -5
  442. package/lib/FormItem/index.js +1 -1
  443. package/lib/FormItem/itemType.js +1 -1
  444. package/lib/FunctionModal/component.json +197 -0
  445. package/lib/FunctionModal/dialog.d.ts +1 -1
  446. package/lib/FunctionModal/modalContext.d.ts +4 -1
  447. package/lib/Help/component.json +118 -0
  448. package/lib/HelperText/component.json +126 -0
  449. package/lib/Image/component.json +165 -0
  450. package/lib/InputCode/component.json +191 -0
  451. package/lib/InputCode/index.d.ts +2 -2
  452. package/lib/InputLang/component.json +205 -0
  453. package/lib/InputLang/index.js +1 -1
  454. package/lib/InputNumber/component.json +162 -0
  455. package/lib/Label/component.json +126 -0
  456. package/lib/Label/index.d.ts +2 -2
  457. package/lib/Loading/component.json +91 -0
  458. package/lib/Menu/component.json +180 -0
  459. package/lib/Message/component.json +246 -0
  460. package/lib/Message/index.d.ts +2 -2
  461. package/lib/Message/index.js +1 -1
  462. package/lib/Modal/Confirm/index.d.ts +1 -1
  463. package/lib/Modal/Confirm/index.js +1 -1
  464. package/lib/Modal/component.json +277 -0
  465. package/lib/Modal/index.d.ts +97 -6
  466. package/lib/Modal/index.js +1 -1
  467. package/lib/Modal/interface.d.ts +1 -0
  468. package/lib/MultiBox/component.json +216 -0
  469. package/lib/MultiBox/index.js +1 -1
  470. package/lib/Notification/component.json +184 -0
  471. package/lib/OperateBtn/component.json +134 -0
  472. package/lib/OperateBtn/index.d.ts +3 -3
  473. package/lib/PageHeader/component.json +112 -0
  474. package/lib/Pagination/component.json +181 -0
  475. package/lib/Pagination/index.js +1 -1
  476. package/lib/PasswordRules/component.json +105 -0
  477. package/lib/PasswordRules/index.d.ts +4 -4
  478. package/lib/PopConfirm/component.json +227 -0
  479. package/lib/PopConfirm/index.d.ts +1 -1
  480. package/lib/PopConfirm/index.js +1 -1
  481. package/lib/PopMenu/component.json +131 -0
  482. package/lib/PopMenu/hooks.d.ts +1 -1
  483. package/lib/PopMenu/index.js +1 -1
  484. package/lib/Popover/component.json +165 -0
  485. package/lib/Popover/index.js +1 -1
  486. package/lib/Progress/component.json +161 -0
  487. package/lib/Prompt/component.json +144 -0
  488. package/lib/Querying/component.json +96 -0
  489. package/lib/Querying/index.css +1 -1
  490. package/lib/Querying/index.d.ts +2 -2
  491. package/lib/Querying/index.js +1 -1
  492. package/lib/Querying/style/index.css +1 -1
  493. package/lib/QuickReply/component.json +129 -0
  494. package/lib/QuickReply/index.d.ts +1 -1
  495. package/lib/Radio/component.json +136 -0
  496. package/lib/RadioGroup/component.json +149 -0
  497. package/lib/RangeInput/component.json +198 -0
  498. package/lib/RangeInput/index.js +1 -1
  499. package/lib/Result/component.json +104 -0
  500. package/lib/ScrollBar/component.json +115 -0
  501. package/lib/Search/component.json +177 -0
  502. package/lib/Search/index.d.ts +1 -1
  503. package/lib/Select/component.json +244 -0
  504. package/lib/Select/index.js +1 -1
  505. package/lib/SelectInput/component.json +184 -0
  506. package/lib/Selector/component.json +203 -0
  507. package/lib/Selector/index.js +1 -1
  508. package/lib/Selector/interface.d.ts +1 -1
  509. package/lib/Selector/selectorMain/index.js +1 -1
  510. package/lib/Selector/selectorNode/index.js +1 -1
  511. package/lib/Selector/util.d.ts +2 -2
  512. package/lib/SelectorPicker/component.json +179 -0
  513. package/lib/SelectorPicker/index.d.ts +5 -5
  514. package/lib/SelectorPicker/index.js +1 -1
  515. package/lib/SingleBox/component.json +151 -0
  516. package/lib/SingleBox/index.d.ts +2 -2
  517. package/lib/Slider/component.json +181 -0
  518. package/lib/SortBox/component.json +108 -0
  519. package/lib/Status/component.json +104 -0
  520. package/lib/Stepper/component.json +129 -0
  521. package/lib/Stepper/index.d.ts +2 -2
  522. package/lib/Switch/component.json +207 -0
  523. package/lib/Switch/index.css +1 -1
  524. package/lib/Switch/index.d.ts +3 -2
  525. package/lib/Switch/index.js +1 -1
  526. package/lib/Switch/style/index.css +1 -1
  527. package/lib/Table/component.json +547 -0
  528. package/lib/Table/index.d.ts +2 -2
  529. package/lib/Table/index.js +1 -1
  530. package/lib/Table/interface.d.ts +6 -0
  531. package/lib/Tabs/component.json +227 -0
  532. package/lib/Tag/component.json +221 -0
  533. package/lib/Tag/index.css +1 -1
  534. package/lib/Tag/index.d.ts +1 -1
  535. package/lib/Tag/index.js +1 -1
  536. package/lib/Tag/style/index.css +1 -1
  537. package/lib/TextEditor/component.json +186 -0
  538. package/lib/TextEditor/index.d.ts +5 -5
  539. package/lib/TextField/component.json +290 -0
  540. package/lib/TextField/index.d.ts +2 -2
  541. package/lib/TimePicker/component.json +176 -0
  542. package/lib/Timeline/component.json +110 -0
  543. package/lib/Title/component.json +156 -0
  544. package/lib/ToggleButton/component.json +153 -0
  545. package/lib/Tooltip/component.json +176 -0
  546. package/lib/Tooltip/index.js +1 -1
  547. package/lib/Tooltip/interface.d.ts +14 -1
  548. package/lib/Tooltip/utils.js +1 -1
  549. package/lib/Transfer/component.json +157 -0
  550. package/lib/Tree/component.json +512 -0
  551. package/lib/Upload/component.json +450 -0
  552. package/lib/Utils/type.d.ts +0 -2
  553. package/lib/index.d.ts +2 -0
  554. package/lib/index.js +1 -1
  555. package/lib/locale/en_US.d.ts +361 -0
  556. package/lib/locale/en_US.js +2 -0
  557. package/lib/locale/index.d.ts +1 -723
  558. package/lib/locale/index2.js +2 -0
  559. package/lib/locale/zh_CN.d.ts +361 -0
  560. package/lib/locale/zh_CN.js +2 -0
  561. package/package.json +10 -3
  562. /package/es/{Utils/Hooks → Hooks}/useResizeObserver.d.ts +0 -0
  563. /package/es/{Utils/Hooks → Hooks}/useResizeObserver.js +0 -0
  564. /package/lib/{Utils/Hooks → Hooks}/useResizeObserver.d.ts +0 -0
  565. /package/lib/{Utils/Hooks → Hooks}/useResizeObserver.js +0 -0
@@ -0,0 +1,181 @@
1
+ {
2
+ "name": "ComboSelect",
3
+ "category": "Data Entry",
4
+ "description": "组合选择器,支持表格、树、列表多种模式",
5
+ "semantic": {
6
+ "intent": [
7
+ "复杂选择",
8
+ "多模式选择"
9
+ ],
10
+ "useCases": [
11
+ "人员选择",
12
+ "组织架构",
13
+ "资源选择"
14
+ ],
15
+ "riskLevel": "normal"
16
+ },
17
+ "variants": {
18
+ "table": {
19
+ "meaning": "表格模式"
20
+ },
21
+ "tree": {
22
+ "meaning": "树形模式"
23
+ },
24
+ "list": {
25
+ "meaning": "列表模式"
26
+ }
27
+ },
28
+ "states": [
29
+ "default",
30
+ "disabled",
31
+ "error"
32
+ ],
33
+ "idealProps": {
34
+ "mode": {
35
+ "type": "enum",
36
+ "values": [
37
+ "table",
38
+ "tree",
39
+ "list"
40
+ ],
41
+ "default": "table",
42
+ "description": "选择器模式;tree 启用 fullPath*,table 接受 TableProps,list 无 Table/Tree props"
43
+ },
44
+ "value": {
45
+ "type": "SelectOpt[] | SelectOpt",
46
+ "description": "受控值;checkable=true 数组(多选),checkable=false 单值(单选);字段名遵循 replaceFields"
47
+ },
48
+ "defaultValue": {
49
+ "type": "SelectOpt[] | SelectOpt",
50
+ "description": "非受控默认值,与 value 互斥;类型规则同 value"
51
+ },
52
+ "onChange": {
53
+ "type": "function",
54
+ "signature": "(options: SelectOpt[] | SelectOpt, originData?: TreeNodeProps[] | TreeNodeProps) => void",
55
+ "description": "value 变更回调;第二参 originData 是底层原数据透传(replaceFields 映射前的形态)"
56
+ },
57
+ "checkable": {
58
+ "type": "boolean",
59
+ "default": true,
60
+ "description": "单选 / 多选模式开关;直接影响 value/defaultValue/onChange 类型"
61
+ },
62
+ "replaceFields": {
63
+ "type": "object",
64
+ "default": "{ key: 'key', title: 'title', children: 'children' }",
65
+ "description": "入参字段映射;决定 value 里对象用什么字段名"
66
+ },
67
+ "outputFields": {
68
+ "type": "object",
69
+ "default": "{ outputKey: 'key', outputTitle: 'label' }",
70
+ "description": "出参字段映射(独立于 replaceFields);决定 onChange options 里字段名"
71
+ },
72
+ "showSearch": {
73
+ "type": "boolean",
74
+ "default": false,
75
+ "description": "显示搜索框;配合 realTimeSearch/searchPlaceholder/onSearch 使用"
76
+ },
77
+ "allowClear": {
78
+ "type": "boolean",
79
+ "default": false,
80
+ "description": "允许清空;触发 onClear 后组件自动清内部 state,父端需同步父 state"
81
+ },
82
+ "url": {
83
+ "type": "string",
84
+ "description": "远程数据源 URL;配合 ctx/method/params 一组使用,替代 TableProps.data / TreeProps.treeData"
85
+ },
86
+ "method": {
87
+ "type": "enum",
88
+ "values": [
89
+ "Get",
90
+ "Post"
91
+ ],
92
+ "default": "Get",
93
+ "description": "请求方法;注意首字母大写,不是 GET/POST"
94
+ }
95
+ },
96
+ "epics": [
97
+ "ComboSelect-api-rework-epic.md (R20 W-3 起草 · 议题 A 泛型化 / 议题 B 字段映射对称 / R21 user 评审)"
98
+ ],
99
+ "do": [
100
+ "用于需要复杂选择逻辑的场景(人员选择、组织架构、资源选择),简单场景用 Select",
101
+ "配合服务端搜索减少数据量(url + params + showSearch + onSearch)",
102
+ "checkable=false 单选时,value/onChange 的 options 是 SelectOpt 对象而非数组——不要用数组 API",
103
+ "replaceFields 和 outputFields 独立控制:replaceFields 控制入参字段映射,outputFields 控制 onChange 出参字段映射,两者不互通"
104
+ ],
105
+ "dont": [
106
+ "简单选择场景使用(应使用 Select,ComboSelect 引入了 Table/Tree 等重依赖)",
107
+ "数据量极大时不分页(远程模式需配合 TableProps.pagination 或分页参数控制)",
108
+ "不要假设 onOk 和 onChange 触发时机相同——showPopoverActions=true 时用 onOk/onCancel;不显示 footer 时只有 onChange"
109
+ ],
110
+ "events": {
111
+ "onChange": {
112
+ "signature": "(options: SelectOpt[] | SelectOpt, originData?: TreeNodeProps[] | TreeNodeProps) => void",
113
+ "asyncSupported": false,
114
+ "examples": [
115
+ "多选(checkable=true):options 是 SelectOpt[] 数组,每项含 outputFields 指定的字段",
116
+ "单选(checkable=false):options 是单个 SelectOpt 对象(不是数组),originData 是原始树节点",
117
+ "清空时(allowClear=true 触发 onClear):onChange 额外触发,checkable=true 时 options=[],checkable=false 时 options={}"
118
+ ],
119
+ "commonMistakes": [
120
+ "checkable=false 时把 options 当数组处理——单选模式 options 是 SelectOpt 对象,直接 .key 取值,不能 .map()",
121
+ "忽略 outputFields 对出参字段的影响——默认 outputFields={ outputKey:'key', outputTitle:'label' },出参对象的 key 名是 outputKey/outputTitle,不是原始的 replaceFields 字段名",
122
+ "假设 onOk 等价 onChange——showPopoverActions=false 时没有 onOk,所有变更走 onChange;showPopoverActions=true 时点「确定」才触发 onOk",
123
+ "onTagRemove 返回 false 阻止删除后仍期望 onChange 触发——src 实证(index.tsx:236)返回 false 时直接 return,不会触发 onChange"
124
+ ]
125
+ },
126
+ "onOk": {
127
+ "signature": "(options: SelectedOptions) => void",
128
+ "asyncSupported": false,
129
+ "examples": [
130
+ "showPopoverActions=true 时用户点「确定」按钮触发,options 为当前选中列表",
131
+ "适合「选择后需要二次确认」场景——弹框有确认/取消按钮"
132
+ ],
133
+ "commonMistakes": [
134
+ "showPopoverActions=false 时期望 onOk 触发——不会,此时直接监听 onChange",
135
+ "onOk 和 onChange 同时监听导致重复处理——showPopoverActions=true 时推荐只用 onOk,不依赖 onChange"
136
+ ]
137
+ },
138
+ "onSearch": {
139
+ "signature": "(searchKey: string) => void",
140
+ "asyncSupported": false,
141
+ "examples": [
142
+ "showSearch=true 时用户输入触发,searchKey 为当前输入字符串",
143
+ "服务端搜索:在 onSearch 中更新请求参数,配合 params 刷新数据"
144
+ ],
145
+ "commonMistakes": [
146
+ "不传 onSearch 时期望服务端搜索——不传则组件做客户端过滤(realTimeSearch=true 时),服务端搜索必须传 onSearch"
147
+ ]
148
+ }
149
+ },
150
+ "typescriptPitfalls": [
151
+ {
152
+ "issue": "checkable=false 单选时 onChange 的 options 是 SelectOpt 对象而非数组,直接用数组方法报错",
153
+ "wrong": "onChange={(options) => options.map(o => o.key)} // checkable=false 时 options 是对象,没有 .map()",
154
+ "right": "onChange={(options) => { if (Array.isArray(options)) { /* 多选 */ } else { /* 单选,options 是 SelectOpt */ } }}"
155
+ },
156
+ {
157
+ "issue": "method 字段首字母大写('Get'|'Post'),传 'GET'/'POST' 会被忽略",
158
+ "wrong": "method='GET' // 源码 interface 定义是 'Get' | 'Post',大小写不同",
159
+ "right": "method='Get' // 或 method='Post'(src/ComboSelect/interface.tsx 实证)"
160
+ },
161
+ {
162
+ "issue": "SelectOpt 是 { disabled?: boolean; closable?: boolean; [key: string]: any },索引签名允许任意字段,但不应假设 key/title 字段名——取决于 outputFields",
163
+ "wrong": "const key = options[0].key // 假设出参字段名是 key,实际由 outputFields.outputKey 决定",
164
+ "right": "const { outputKey = 'key' } = outputFields || {}; const key = options[0][outputKey];"
165
+ },
166
+ {
167
+ "issue": "value 类型随 checkable 变化,单独声明 useState 类型需要联合",
168
+ "wrong": "const [val, setVal] = useState<SelectOpt[]>() // checkable=false 时 value 是 SelectOpt,不是数组",
169
+ "right": "const [val, setVal] = useState<SelectOpt[] | SelectOpt | undefined>()"
170
+ },
171
+ {
172
+ "issue": "嵌套 TableProps 时必须用 Para UI 的 headData(不是 antd 的 columns),字段结构也不同",
173
+ "wrong": "TableProps={{ columns: [{ title: '姓名', dataIndex: 'title' }] }} // TS2353: 'columns' does not exist in type TableProps",
174
+ "right": "TableProps={{ headData: [{ name: 'title', label: '姓名', width: 200 }] }} // headData 每项用 { name, label, width? },name 对应数据字段 key,label 是表头显示文字"
175
+ }
176
+ ],
177
+ "mapping": {
178
+ "realComponent": "ComboSelect",
179
+ "adapter": null
180
+ }
181
+ }
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./index.css');require('../Tree/style/index.css');const t=require("../_virtual/jsx-runtime.js"),o=require("react"),Ht=require("../node_modules/@para-ui/icons/Down/index.js"),Wt=require("../node_modules/@para-ui/icons/Search/index.js"),et=require("../node_modules/@para-ui/icons/Close/index.js"),Bt=require("../node_modules/@para-ui/icons/CloseCircleF/index.js"),Gt=require("../Table/index.js"),Ut=require("../Tree/Tree.js");;/* empty css */const tt=require("../Button/index.js"),Jt=require("../Dropdown/index.js"),st=require("../Popover/index.js"),be=require("../AutoTips/index.js"),Qt=require("../Tooltip/index.js"),F=require("clsx"),S=require("./utils.js"),Xt=require("@snack-kit/lib"),Yt=require("../Utils/snack-kit-shims.js"),Zt=require("../GlobalContext/index.js"),es=require("../Hooks/useGlobalProps.js"),ts=require("../GlobalContext/useFormatMessage.js"),ss=require("./lang/index.js"),rs=require("../Label/index.js"),os=require("../HelperText/index.js"),d=require("../GlobalContext/constant.js"),ns=require("../Search/index.js"),ls=require("../node_modules/@para-ui/icons/LoadingF/index.js");;/* empty css */const rt=ot=>{const{mode:m="table",placeholder:je,searchPlaceholder:nt,overLine:K=!1,disabled:Re=!1,allowClear:lt=!1,className:ct,style:it,maxHeight:at,height:ut,placement:dt="bottomLeft",popoverClassName:mt,size:pt="large",popoverActions:ve=null,showPopoverActions:ge=!1,defaultOpen:Z=!1,defaultValue:Ee,replaceFields:xt={key:"key",title:"title",children:"children"},outputFields:ft={outputKey:"key",outputTitle:"label"},value:ee,onClear:te,onCancel:ht,onOk:bt,onClose:jt,onChange:C,onSearch:se,refresh:y,TableProps:re,TreeProps:k,checkable:a=!0,url:Ce,ctx:ye,params:$,method:we="Get",showSearch:_=!1,realTimeSearch:Rt=!1,error:Se=!1,hideErrorDom:vt,helperText:oe,paramsCallback:gt,fullPathKey:Et,fullPathRender:$e,disablePopup:x=!1,tagRender:ne,onTagRemove:Ne,action:Ct,label:Te="",labelTooltip:yt,required:ke=!1,emptyProps:Pe,toggleSelectedOnSingle:wt=!1,optionRender:qe,getOptionLabel:Me,dropdownMatchSelectWidth:le=!0,getPopupContainer:St,maxTagTextLength:A,renderInputContent:I,renderTagLabel:ce,renderMoreTagLabel:Le}=es.default(ot,"ComboSelect"),{language:Oe,locale:De}=o.useContext(Zt.default),N=o.useRef(null),[f,ie]=o.useState(!1),[j,V]=o.useState([]),H=o.useRef(new Map),[u,W]=o.useState([]),[B,ze]=o.useState(""),G=o.useRef(void 0),[P,Fe]=o.useState(null),[q,$t]=o.useState(!1),[T,Nt]=o.useState(0),[M,L]=o.useState(!1),ae=o.useRef([]),O=o.useRef(!1),U=o.useRef(null),Ke=o.useRef({}),_e=S.getReplaceField(m,xt,re,k),{key:D="",title:Ae=""}=_e,{outputKey:R="key",outputTitle:g="label"}=ft||{},w=ts.default("ComboSelect",ss.default),Ie=o.useRef(S.isRemoteLoad(m,m==="table"?re:k)),[ue,Tt]=o.useState(),h=o.useRef({list:[]}),[E,de]=o.useState(null),me=o.useRef(null);h.current.openMore=M,h.current.list=[...u];const kt=()=>{h.current.openMore&&L(!1)},Ve=e=>{if(e===null||e===0||(e===void 0&&(e=h.current.list.length),!me.current))return;const s=me.current.querySelector(".comboselect-overflow-list");if(s)if(s.scrollHeight>s.clientHeight){const r=Number(e)-1;de(r),Ve(r)}else h.current.list.length<=e&&kt()},J=()=>{if(h.current.list.length===0)return de(null);clearTimeout(h.current.resizeTimer),h.current.resizeTimer=setTimeout(()=>{de(h.current.list.length),Ve()},50)};o.useEffect(()=>(J(),()=>{clearTimeout(h.current.resizeTimer)}),[u]),o.useEffect(()=>(!K&&a?window.addEventListener("resize",J):window.removeEventListener("resize",J),()=>{window.removeEventListener("resize",J)}),[K,a]);const Pt=e=>{if(!x&&!Re){if(O.current){v();return}O.current=!0,ie(!0)}},v=(e,s)=>{O.current=!1,G.current=void 0,Ke.current={},ie(!1),Fe(null),ze(""),jt?.(),s==="cancel"&&He()},He=()=>{V([]),W([])},pe=(e,s)=>{V(e),Dt(s,e)},qt=e=>{V(s=>{const r=s.findIndex(l=>l===e[R]);return r>-1&&s.splice(r,1),[...s]})},We=(e,s)=>{if(e.stopPropagation(),s.closable===!1||Ne?.(s)===!1)return;const r=[...u],l=r.findIndex(n=>n[R]===s[R]);l>-1&&r.splice(l,1),W(r),qt(s),C?.(r)},Mt=o.useMemo(()=>S.debounce(async e=>{Q(e)},400),[]),Lt=e=>{ze(e),Rt&&Mt(e)},Q=e=>{const s=e??B;se?se(s):(G.current=s?.trim(),Nt(Math.random())),Ie.current&&Tt([])},Be=(e,s)=>{s?(bt?.(u),v(null,"ok")):(ht?.(),v(null,"cancel"))},Ge=()=>{let e="auto";N.current&&(e=`${N.current.offsetWidth}px`);const s=S.getOverlaySize(m,Ie.current,at,ut),r={minWidth:e,maxWidth:960};return typeof le=="number"?r.width=le:le&&(r.width=e),{overflow:"auto",...r,...s}},Ot=()=>F(`${d.$prefixCls}-comboselect`,ct,{[`${d.$prefixCls}-comboselect-focused`]:f&&!x,[`${d.$prefixCls}-comboselect-disabled`]:Re,[`${d.$prefixCls}-comboselect-radioable`]:!a,[`${d.$prefixCls}-comboselect-error`]:Se,[`${d.$prefixCls}-comboselect-clear`]:q,[`${d.$prefixCls}-comboselect-non-popup`]:x,[`${d.$prefixCls}-comboselect-overLine`]:K},`${d.$prefixCls}-comboselect-${pt}`),Dt=(e,s)=>{let r=[];if(e?.length&&(r=e.map(n=>{const i={};i[R]=n[D]||"",Me?i[g]=Me(n)||"":i[g]=n[Ae]||"";const c=ae.current?.find(p=>p[R]===i[R]);return c&&(c.disabled!==void 0&&(i.disabled=c.disabled),c.closable!==void 0&&(i.closable=c.closable)),i})),s?.length&&e){const n=s.filter(c=>e.findIndex(p=>p[D]===c)===-1),i=ae.current?.filter(c=>n?.includes(c[R]));i&&r.push(...i)}W(r);const l=Xt.DeepClone(e||[]);a?C?.(r,l):C?.(r[0],l[0])},Ue=e=>{const s=e.map(r=>r[R]);W(e),V(s),ae.current=e},zt=(e,s)=>{Fe(s.node)},Je=()=>{let e={};if(!x){const{width:s,minWidth:r,maxWidth:l}=Ge();e={width:s,minWidth:r,maxWidth:l}}return t.jsxRuntimeExports.jsx("div",{className:"comboselect-search",style:e,children:t.jsxRuntimeExports.jsx(ns.Search,{className:"comboselect-search-input",rightIconExist:!0,showBtn:!1,rightIcon:t.jsxRuntimeExports.jsx(Wt.Search,{}),btnType:"inside",value:B,onChange:Lt,placeholder:nt??w({id:"searchPlaceholder"}),onClickBtn:()=>{Q()},onEnter:()=>{Q()},onClear:()=>{Q("")}})})},Qe=()=>ve?t.jsxRuntimeExports.jsx("div",{className:"comboselect-actions",children:ve}):t.jsxRuntimeExports.jsxs("div",{className:"comboselect-actions",children:[t.jsxRuntimeExports.jsx(tt.Button,{onClick:e=>Be(e,!1),variant:"outlined",size:"small",children:w({id:"cancel"})}),t.jsxRuntimeExports.jsx(tt.Button,{variant:"outlined",onClick:e=>Be(e,!0),size:"small",children:w({id:"ok"})})]}),Xe=()=>m!=="tree"||!P?null:$e?t.jsxRuntimeExports.jsx("div",{className:"comboselect-fullPath",children:$e(P??{})}):t.jsxRuntimeExports.jsxs("div",{className:"comboselect-fullPath",children:[t.jsxRuntimeExports.jsx("span",{children:w({id:"fullPath"})}),P?.[Et]??""]}),Ft=e=>{e.stopPropagation(),He(),v(),L(!1),te?.(),C?.(a?[]:{})},Kt=e=>{e.stopPropagation(),L(!0),v()};o.useImperativeHandle(Ct,()=>({closePopup:()=>v()})),o.useEffect(()=>{!x&&Z&&(O.current=!0,ie(Z))},[Z]),o.useEffect(()=>{Ee&&Ue(S.toArray(Ee))},[]),o.useEffect(()=>{ee&&Ue(S.toArray(ee))},[ee]),o.useEffect(()=>{lt&&$t(!!u?.length)},[u]),o.useEffect(()=>{const e=r=>r&&r.ownerDocument||document,s=r=>{const l=e(N.current),n=r.target,i=!l.documentElement.contains(n)||U.current?.contains(n)||N.current?.contains(n)||!1;if(m==="table"){const c=`.${d.$prefixCls}-select-popover`,p=`.${d.$prefixCls}-table-show-colums-popover`,b=`.${d.$prefixCls}-filter-popover`;if(S.closest(n,`${c}, ${p}, ${b}`))return}O.current&&!i&&v()};if(f&&setTimeout(()=>{if(!U.current)return;const r=U.current.querySelector(".comboselect-search-input input");r&&r.focus()},200),!x&&f){const r=e(N.current);return r.addEventListener("mousedown",s),()=>{r.removeEventListener("mousedown",s)}}},[f]);const Ye=o.useMemo(()=>{if(!u?.length)return null;if(I)return I(a?u:u[0]);if(!a)return t.jsxRuntimeExports.jsx("span",{className:"comboselect-single-content",children:t.jsxRuntimeExports.jsx(be.default,{children:u[0]?.[g]})});if(!u.length)return;const e=l=>{if(ne)return ne(l);const{disabled:n,closable:i=!0}=l??{};let c=l[g];ce&&(c=ce(l));let p=!1;if(typeof A=="number"&&(typeof c=="string"||typeof c=="number")){const b=String(c);b.length>A&&(c=`${b.slice(0,A)}...`,p=!0)}return t.jsxRuntimeExports.jsxs("span",{className:F("comboselect-item",{"comboselect-item--disabled":n,"comboselect-item--unclosable":!i}),children:[p?t.jsxRuntimeExports.jsx(Qt.Tooltip,{title:t.jsxRuntimeExports.jsx("div",{onClick:b=>b.stopPropagation(),children:l[g]}),arrow:!1,placement:"bottomLeft",children:t.jsxRuntimeExports.jsx("span",{className:"comboselect-item-content",children:c})}):t.jsxRuntimeExports.jsx("span",{className:"comboselect-item-content",children:t.jsxRuntimeExports.jsx(be.default,{children:c})}),i===!0&&t.jsxRuntimeExports.jsx("span",{className:"comboselect-item-remove",onClick:b=>We(b,l),onMouseDown:b=>b.stopPropagation(),children:t.jsxRuntimeExports.jsx(et.Close,{})})]})},s=()=>E!==null&&h.current.list.length>E?t.jsxRuntimeExports.jsx("div",{className:"comboselect-overflow-item",children:t.jsxRuntimeExports.jsx("span",{className:"comboselect-item",onClick:Kt,children:t.jsxRuntimeExports.jsxs("span",{className:"comboselect-item-content",children:["+",h.current.list.length-E]})})}):null,r=u.map((l,n)=>E!==null&&E<=n?null:t.jsxRuntimeExports.jsx("div",{className:"comboselect-overflow-item",children:e(l)},n));return t.jsxRuntimeExports.jsxs("div",{className:"comboselect-overflow-list",children:[r,s()]})},[u,C,a,E,A,g,ne,I,ce,K]),X=o.useMemo(()=>{let e=$||Ke.current;return _&&!se&&G.current!==void 0&&(e={...e,searchKey:G.current}),gt?.(e)||e},[$,T,y,f]),xe=o.useMemo(()=>{if(!x&&!f||m!=="table")return null;const e={url:Ce,ctx:ye,search:X,method:we},s=(r,l)=>{!a&&(v(),j.includes(r))||pe([r],[l])};return t.jsxRuntimeExports.jsx("div",{className:"comboselect-table",children:t.jsxRuntimeExports.jsx(Gt.default,{...e,...re,emptyProps:Pe,check:a,radio:!a,rowKey:D,setCheck:pe,setRadio:s,checkDefaultValue:j,radioDefaultValue:j[0],refresh:y??T,autoSize:!1,refreshInside:!1,checkCount:!1,paginationType:"simple"})})},[j,y,$,T,x,f,X,D,a]),fe=o.useMemo(()=>{if(!x&&!f||!["tree","list"].includes(m))return null;const e={url:Ce,ctx:ye,params:X,method:we},s=(n,i)=>{if(!i.checked){const p={};if(p[R]=i.node[D]||"",p[g]=i.node[Ae]||"",Ne?.(p)===!1)return}if(!a&&(v(),!wt&&j.includes(i.node?.key)))return;let c=i.checkedNodes;if(a||n?.length&&(c=[i.node]),a){const p=Yt.ArrayToObject("key",c);Array.from(H.current.keys()).forEach(z=>{n.includes(z)||H.current.delete(z)}),n.forEach(z=>{const he=String(z);p[he]&&H.current.set(he,p[he])}),c=Array.from(H.current.values())}pe(n,c)},r=n=>k?.titleRender?k.titleRender(n):qe?qe(n):n.title,l=F("comboselect-tree",{"comboselect-list":m==="list","comboselect-list-single":m==="list"&&!a});return t.jsxRuntimeExports.jsx("div",{className:l,children:t.jsxRuntimeExports.jsx(Ut.default,{blockNode:!0,...e,...k,wrapperStyle:{position:"static"},emptyProps:{size:"small",...Pe},replaceFields:_e,checkable:a,radioable:!a,showRadio:!1,selectable:m!=="list",loadedKeys:ue,checkedKeys:j,onCheck:s,onSelect:zt,titleRender:r,refresh:y??T,loadingNode:t.jsxRuntimeExports.jsxs("div",{className:"loading-node-content",children:[t.jsxRuntimeExports.jsx("div",{className:"loading-icon",children:t.jsxRuntimeExports.jsx(ls.LoadingF,{})}),w({id:"searching"})]})})})},[j,y,$,T,x,f,ue,m,X,a]),Y=o.useMemo(()=>t.jsxRuntimeExports.jsxs("div",{className:"comboselect-wrapper",ref:N,onClick:Pt,children:[t.jsxRuntimeExports.jsx("div",{className:F("comboselect-overflow",!a&&"comboselect-overflow-single"),children:Ye}),!x&&t.jsxRuntimeExports.jsx("span",{className:"comboselect-arrow",children:t.jsxRuntimeExports.jsx(Ht.Down,{})}),q&&t.jsxRuntimeExports.jsx("span",{className:"comboselect-clear",onClick:Ft,children:t.jsxRuntimeExports.jsx(Bt.CloseCircleF,{})}),!u?.length&&t.jsxRuntimeExports.jsx("span",{className:"comboselect-placeholder",children:je??w({id:"pleaseSelect"})})]}),[u,Ye,a,q,x,je]),_t=()=>Te||ke?t.jsxRuntimeExports.jsx(rs.default,{label:Te,required:ke,...yt}):null,At=()=>t.jsxRuntimeExports.jsx("div",{ref:U,className:`comboselect-dropdown-wrapper ${_?"show-search":""} mode-${m}`,children:t.jsxRuntimeExports.jsxs("div",{style:Ge(),className:`${d.$prefixCls}-scrollbar-small dropdown-content`,children:[_&&Je(),m==="table"?xe:fe,f&&Xe(),ge&&Qe()]})}),Ze=()=>{const e=()=>u.map((s,r)=>{if(E!==null&&E>r)return null;let l=s[g];return Le&&(l=Le(s)),t.jsxRuntimeExports.jsxs("div",{className:"comboselect-more-item",children:[t.jsxRuntimeExports.jsx("span",{className:"comboselect-more-item-text",children:t.jsxRuntimeExports.jsx(be.default,{children:l})}),t.jsxRuntimeExports.jsx("span",{className:"comboselect-more-item-remove",onClick:n=>We(n,s),children:t.jsxRuntimeExports.jsx(et.Close,{})})]},r)});return t.jsxRuntimeExports.jsxs("div",{className:"comboselect-more-wrapper",children:[t.jsxRuntimeExports.jsx("span",{className:"comboselect-more-title",children:t.jsxRuntimeExports.jsx("span",{children:w({id:"more"})})}),t.jsxRuntimeExports.jsx("div",{className:"comboselect-more-content",children:e()})]})},It=o.useMemo(()=>t.jsxRuntimeExports.jsx(Jt.Dropdown,{overlay:At(),visible:f,placement:dt,trigger:["click"],overlayClassName:F(`${d.$prefixCls}-comboselect-dropdown`,mt),getPopupContainer:St,children:t.jsxRuntimeExports.jsx(st.Popover,{visible:M,destroyTooltipOnHide:!0,placement:"rightTop",content:Ze(),onVisibleChange:()=>L(!1),overlayClassName:`${d.$prefixCls}-comboselect-more-popover`,children:Y})}),[f,j,B,y,$,P,T,q,oe,Oe,De,M,ue,C,te,Y,u]),Vt=o.useMemo(()=>t.jsxRuntimeExports.jsxs(t.jsxRuntimeExports.Fragment,{children:[t.jsxRuntimeExports.jsx(st.Popover,{visible:M,destroyTooltipOnHide:!0,placement:"rightTop",content:Ze(),onVisibleChange:()=>L(!1),overlayClassName:`${d.$prefixCls}-comboselect-more-popover`,children:Y}),t.jsxRuntimeExports.jsxs("div",{className:"comboselect-non-popup-content",children:[_&&Je(),m==="table"?xe:fe,Xe(),ge&&Qe()]})]}),[j,B,y,$,P,q,oe,Oe,De,C,te,xe,fe,Y,M,u]);return t.jsxRuntimeExports.jsxs("div",{className:Ot(),style:it,ref:me,children:[_t(),x?Vt:It,x?null:t.jsxRuntimeExports.jsx(os.default,{error:Se,helperText:oe,hideErrorDom:vt})]})};exports.ComboSelect=rt;exports.default=rt;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./index.css');require('../Tree/style/index.css');const t=require("../_virtual/jsx-runtime.js"),o=require("react"),Ut=require("../node_modules/@para-ui/icons/Down/index.js"),Jt=require("../node_modules/@para-ui/icons/Search/index.js"),st=require("../node_modules/@para-ui/icons/Close/index.js"),Qt=require("../node_modules/@para-ui/icons/CloseCircleF/index.js"),Xt=require("../Table/index.js"),Yt=require("../Tree/Tree.js");;/* empty css */const rt=require("../Button/index.js"),Zt=require("../Dropdown/index.js"),ot=require("../Popover/index.js"),be=require("../AutoTips/index.js"),es=require("../Tooltip/index.js"),_=require("clsx"),S=require("./utils.js"),ts=require("@snack-kit/lib"),ss=require("../Utils/snack-kit-shims.js"),rs=require("../GlobalContext/index.js"),os=require("../Hooks/useGlobalProps.js"),ns=require("../GlobalContext/useFormatMessage.js"),ls=require("./lang/index.js"),cs=require("../Label/index.js"),is=require("../HelperText/index.js"),d=require("../GlobalContext/constant.js"),as=require("../Search/index.js"),us=require("../node_modules/@para-ui/icons/LoadingF/index.js");;/* empty css */const nt=lt=>{const{mode:m="table",placeholder:je,searchPlaceholder:ct,maxCount:Re,overLine:z=!1,disabled:ve=!1,allowClear:it=!1,className:at,style:ut,maxHeight:dt,height:mt,placement:pt="bottomLeft",popoverClassName:ft,size:xt="large",popoverActions:ge=null,showPopoverActions:Ce=!1,defaultOpen:Z=!1,defaultValue:Ee,replaceFields:ht={key:"key",title:"title",children:"children"},outputFields:bt={outputKey:"key",outputTitle:"label"},value:ee,onClear:te,onCancel:jt,onOk:Rt,onClose:vt,onChange:E,onSearch:se,refresh:y,TableProps:re,TreeProps:k,checkable:a=!0,url:ye,ctx:we,params:N,method:Se="Get",showSearch:F=!1,realTimeSearch:gt=!1,error:Ne=!1,hideErrorDom:Ct,helperText:oe,paramsCallback:Et,fullPathKey:yt,fullPathRender:$e,disablePopup:f=!1,tagRender:ne,onTagRemove:Te,action:wt,label:ke="",labelTooltip:St,required:Pe=!1,emptyProps:qe,toggleSelectedOnSingle:Nt=!1,optionRender:Me,getOptionLabel:Le,dropdownMatchSelectWidth:le=!0,getPopupContainer:$t,maxTagTextLength:A,renderInputContent:V,renderTagLabel:ce,renderMoreTagLabel:Oe}=os.default(lt,"ComboSelect"),{language:De,locale:Ke}=o.useContext(rs.default),$=o.useRef(null),_e=o.useRef(!1);o.useEffect(()=>{process.env.NODE_ENV!=="production"&&Re!==void 0&&!_e.current&&(_e.current=!0,console.warn("[ComboSelect] maxCount 已在 v5.x 标记为 @deprecated 且自当前版本起 runtime 完全不生效(原代码 dead field)。请从 props 中移除 maxCount;tag 显示数量由 overLine 控制是否换行。v6.0 将移除该字段。"))},[Re]);const[x,ie]=o.useState(!1),[j,I]=o.useState([]),H=o.useRef(new Map),[u,W]=o.useState([]),[B,ze]=o.useState(""),G=o.useRef(void 0),[P,Fe]=o.useState(null),[q,Tt]=o.useState(!1),[T,kt]=o.useState(0),[M,L]=o.useState(!1),ae=o.useRef([]),O=o.useRef(!1),U=o.useRef(null),Ae=o.useRef({}),Ve=S.getReplaceField(m,ht,re,k),{key:Pt,title:qt}=Ve,D=Pt||"",Ie=qt||"",{outputKey:R="key",outputTitle:g="label"}=bt||{},w=ns.default("ComboSelect",ls.default),He=o.useRef(S.isRemoteLoad(m,m==="table"?re:k)),[ue,Mt]=o.useState(),h=o.useRef({list:[]}),[C,de]=o.useState(null),me=o.useRef(null);h.current.openMore=M,h.current.list=[...u];const Lt=()=>{h.current.openMore&&L(!1)},We=e=>{if(e===null||e===0||(e===void 0&&(e=h.current.list.length),!me.current))return;const s=me.current.querySelector(".comboselect-overflow-list");if(s)if(s.scrollHeight>s.clientHeight){const r=Number(e)-1;de(r),We(r)}else h.current.list.length<=e&&Lt()},J=()=>{if(h.current.list.length===0)return de(null);clearTimeout(h.current.resizeTimer),h.current.resizeTimer=setTimeout(()=>{de(h.current.list.length),We()},50)};o.useEffect(()=>(J(),()=>{clearTimeout(h.current.resizeTimer)}),[u]),o.useEffect(()=>(!z&&a?window.addEventListener("resize",J):window.removeEventListener("resize",J),()=>{window.removeEventListener("resize",J)}),[z,a]);const Ot=e=>{if(!f&&!ve){if(O.current){v();return}O.current=!0,ie(!0)}},v=(e,s)=>{O.current=!1,G.current=void 0,Ae.current={},ie(!1),Fe(null),ze(""),vt?.(),s==="cancel"&&Be()},Be=()=>{I([]),W([])},pe=(e,s)=>{I(e),Ft(s,e)},Dt=e=>{I(s=>{const r=s.findIndex(l=>l===e[R]);return r>-1&&s.splice(r,1),[...s]})},Ge=(e,s)=>{if(e.stopPropagation(),s.closable===!1||Te?.(s)===!1)return;const r=[...u],l=r.findIndex(n=>n[R]===s[R]);l>-1&&r.splice(l,1),W(r),Dt(s),E?.(r)},Kt=o.useMemo(()=>S.debounce(async e=>{Q(e)},400),[]),_t=e=>{ze(e),gt&&Kt(e)},Q=e=>{const s=e??B;se?se(s):(G.current=s?.trim(),kt(Math.random())),He.current&&Mt([])},Ue=(e,s)=>{s?(Rt?.(u),v(null,"ok")):(jt?.(),v(null,"cancel"))},Je=()=>{let e="auto";$.current&&(e=`${$.current.offsetWidth}px`);const s=S.getOverlaySize(m,He.current,dt,mt),r={minWidth:e,maxWidth:960};return typeof le=="number"?r.width=le:le&&(r.width=e),{overflow:"auto",...r,...s}},zt=()=>_(`${d.$prefixCls}-comboselect`,at,{[`${d.$prefixCls}-comboselect-focused`]:x&&!f,[`${d.$prefixCls}-comboselect-disabled`]:ve,[`${d.$prefixCls}-comboselect-radioable`]:!a,[`${d.$prefixCls}-comboselect-error`]:Ne,[`${d.$prefixCls}-comboselect-clear`]:q,[`${d.$prefixCls}-comboselect-non-popup`]:f,[`${d.$prefixCls}-comboselect-overLine`]:z},`${d.$prefixCls}-comboselect-${xt}`),Ft=(e,s)=>{let r=[];if(e?.length&&(r=e.map(n=>{const i={};i[R]=n[D]||"",Le?i[g]=Le(n)||"":i[g]=n[Ie]||"";const c=ae.current?.find(p=>p[R]===i[R]);return c&&(c.disabled!==void 0&&(i.disabled=c.disabled),c.closable!==void 0&&(i.closable=c.closable)),i})),s?.length&&e){const n=s.filter(c=>e.findIndex(p=>p[D]===c)===-1),i=ae.current?.filter(c=>n?.includes(c[R]));i&&r.push(...i)}W(r);const l=ts.DeepClone(e||[]);a?E?.(r,l):E?.(r[0],l[0])},Qe=e=>{const s=e.map(r=>r[R]);W(e),I(s),ae.current=e},At=(e,s)=>{Fe(s.node)},Xe=()=>{let e={};if(!f){const{width:s,minWidth:r,maxWidth:l}=Je();e={width:s,minWidth:r,maxWidth:l}}return t.jsxRuntimeExports.jsx("div",{className:"comboselect-search",style:e,children:t.jsxRuntimeExports.jsx(as.Search,{className:"comboselect-search-input",rightIconExist:!0,showBtn:!1,rightIcon:t.jsxRuntimeExports.jsx(Jt.Search,{}),btnType:"inside",value:B,onChange:_t,placeholder:ct??w({id:"searchPlaceholder"}),onClickBtn:()=>{Q()},onEnter:()=>{Q()},onClear:()=>{Q("")}})})},Ye=()=>ge?t.jsxRuntimeExports.jsx("div",{className:"comboselect-actions",children:ge}):t.jsxRuntimeExports.jsxs("div",{className:"comboselect-actions",children:[t.jsxRuntimeExports.jsx(rt.Button,{onClick:e=>Ue(e,!1),variant:"outlined",size:"small",children:w({id:"cancel"})}),t.jsxRuntimeExports.jsx(rt.Button,{variant:"outlined",onClick:e=>Ue(e,!0),size:"small",children:w({id:"ok"})})]}),Ze=()=>m!=="tree"||!P?null:$e?t.jsxRuntimeExports.jsx("div",{className:"comboselect-fullPath",children:$e(P??{})}):t.jsxRuntimeExports.jsxs("div",{className:"comboselect-fullPath",children:[t.jsxRuntimeExports.jsx("span",{children:w({id:"fullPath"})}),P?.[yt]??""]}),Vt=e=>{e.stopPropagation(),Be(),v(),L(!1),te?.(),E?.(a?[]:{})},It=e=>{e.stopPropagation(),L(!0),v()};o.useImperativeHandle(wt,()=>({closePopup:()=>v()})),o.useEffect(()=>{!f&&Z&&(O.current=!0,ie(Z))},[Z]),o.useEffect(()=>{Ee&&Qe(S.toArray(Ee))},[]),o.useEffect(()=>{ee&&Qe(S.toArray(ee))},[ee]),o.useEffect(()=>{it&&Tt(!!u?.length)},[u]),o.useEffect(()=>{const e=r=>r&&r.ownerDocument||document,s=r=>{const l=e($.current),n=r.target,i=!l.documentElement.contains(n)||U.current?.contains(n)||$.current?.contains(n)||!1;if(m==="table"){const c=`.${d.$prefixCls}-select-popover`,p=`.${d.$prefixCls}-table-show-colums-popover`,b=`.${d.$prefixCls}-filter-popover`;if(S.closest(n,`${c}, ${p}, ${b}`))return}O.current&&!i&&v()};if(x&&setTimeout(()=>{if(!U.current)return;const r=U.current.querySelector(".comboselect-search-input input");r&&r.focus()},200),!f&&x){const r=e($.current);return r.addEventListener("mousedown",s),()=>{r.removeEventListener("mousedown",s)}}},[x]);const et=o.useMemo(()=>{if(!u?.length)return null;if(V)return V(a?u:u[0]);if(!a)return t.jsxRuntimeExports.jsx("span",{className:"comboselect-single-content",children:t.jsxRuntimeExports.jsx(be.default,{children:u[0]?.[g]})});if(!u.length)return;const e=l=>{if(ne)return ne(l);const{disabled:n,closable:i=!0}=l??{};let c=l[g];ce&&(c=ce(l));let p=!1;if(typeof A=="number"&&(typeof c=="string"||typeof c=="number")){const b=String(c);b.length>A&&(c=`${b.slice(0,A)}...`,p=!0)}return t.jsxRuntimeExports.jsxs("span",{className:_("comboselect-item",{"comboselect-item--disabled":n,"comboselect-item--unclosable":!i}),children:[p?t.jsxRuntimeExports.jsx(es.Tooltip,{title:t.jsxRuntimeExports.jsx("div",{onClick:b=>b.stopPropagation(),children:l[g]}),arrow:!1,placement:"bottomLeft",children:t.jsxRuntimeExports.jsx("span",{className:"comboselect-item-content",children:c})}):t.jsxRuntimeExports.jsx("span",{className:"comboselect-item-content",children:t.jsxRuntimeExports.jsx(be.default,{children:c})}),i===!0&&t.jsxRuntimeExports.jsx("span",{className:"comboselect-item-remove",onClick:b=>Ge(b,l),onMouseDown:b=>b.stopPropagation(),children:t.jsxRuntimeExports.jsx(st.Close,{})})]})},s=()=>C!==null&&h.current.list.length>C?t.jsxRuntimeExports.jsx("div",{className:"comboselect-overflow-item",children:t.jsxRuntimeExports.jsx("span",{className:"comboselect-item",onClick:It,children:t.jsxRuntimeExports.jsxs("span",{className:"comboselect-item-content",children:["+",h.current.list.length-C]})})}):null,r=u.map((l,n)=>C!==null&&C<=n?null:t.jsxRuntimeExports.jsx("div",{className:"comboselect-overflow-item",children:e(l)},n));return t.jsxRuntimeExports.jsxs("div",{className:"comboselect-overflow-list",children:[r,s()]})},[u,E,a,C,A,g,ne,V,ce,z]),X=o.useMemo(()=>{let e=N||Ae.current;return F&&!se&&G.current!==void 0&&(e={...e,searchKey:G.current}),Et?.(e)||e},[N,T,y,x]),fe=o.useMemo(()=>{if(!f&&!x||m!=="table")return null;const e={url:ye,ctx:we,search:X,method:Se},s=(r,l)=>{!a&&(v(),j.includes(r))||pe([r],[l])};return t.jsxRuntimeExports.jsx("div",{className:"comboselect-table",children:t.jsxRuntimeExports.jsx(Xt.default,{...e,...re,emptyProps:qe,check:a,radio:!a,rowKey:D,setCheck:pe,setRadio:s,checkDefaultValue:j,radioDefaultValue:j[0],refresh:y??T,autoSize:!1,refreshInside:!1,checkCount:!1,paginationType:"simple"})})},[j,y,N,T,f,x,X,D,a]),xe=o.useMemo(()=>{if(!f&&!x||!["tree","list"].includes(m))return null;const e={url:ye,ctx:we,params:X,method:Se},s=(n,i)=>{if(!i.checked){const p={};if(p[R]=i.node[D]||"",p[g]=i.node[Ie]||"",Te?.(p)===!1)return}if(!a&&(v(),!Nt&&j.includes(i.node?.key)))return;let c=i.checkedNodes;if(a||n?.length&&(c=[i.node]),a){const p=ss.ArrayToObject("key",c);Array.from(H.current.keys()).forEach(K=>{n.includes(K)||H.current.delete(K)}),n.forEach(K=>{const he=String(K);p[he]&&H.current.set(he,p[he])}),c=Array.from(H.current.values())}pe(n,c)},r=n=>k?.titleRender?k.titleRender(n):Me?Me(n):n.title,l=_("comboselect-tree",{"comboselect-list":m==="list","comboselect-list-single":m==="list"&&!a});return t.jsxRuntimeExports.jsx("div",{className:l,children:t.jsxRuntimeExports.jsx(Yt.default,{blockNode:!0,...e,...k,wrapperStyle:{position:"static"},emptyProps:{size:"small",...qe},replaceFields:Ve,checkable:a,radioable:!a,showRadio:!1,selectable:m!=="list",loadedKeys:ue,checkedKeys:j,onCheck:s,onSelect:At,titleRender:r,refresh:y??T,loadingNode:t.jsxRuntimeExports.jsxs("div",{className:"loading-node-content",children:[t.jsxRuntimeExports.jsx("div",{className:"loading-icon",children:t.jsxRuntimeExports.jsx(us.LoadingF,{})}),w({id:"searching"})]})})})},[j,y,N,T,f,x,ue,m,X,a]),Y=o.useMemo(()=>t.jsxRuntimeExports.jsxs("div",{className:"comboselect-wrapper",ref:$,onClick:Ot,children:[t.jsxRuntimeExports.jsx("div",{className:_("comboselect-overflow",!a&&"comboselect-overflow-single"),children:et}),!f&&t.jsxRuntimeExports.jsx("span",{className:"comboselect-arrow",children:t.jsxRuntimeExports.jsx(Ut.Down,{})}),q&&t.jsxRuntimeExports.jsx("span",{className:"comboselect-clear",onClick:Vt,children:t.jsxRuntimeExports.jsx(Qt.CloseCircleF,{})}),!u?.length&&t.jsxRuntimeExports.jsx("span",{className:"comboselect-placeholder",children:je??w({id:"pleaseSelect"})})]}),[u,et,a,q,f,je]),Ht=()=>ke||Pe?t.jsxRuntimeExports.jsx(cs.default,{label:ke,required:Pe,...St}):null,Wt=()=>t.jsxRuntimeExports.jsx("div",{ref:U,className:`comboselect-dropdown-wrapper ${F?"show-search":""} mode-${m}`,children:t.jsxRuntimeExports.jsxs("div",{style:Je(),className:`${d.$prefixCls}-scrollbar-small dropdown-content`,children:[F&&Xe(),m==="table"?fe:xe,x&&Ze(),Ce&&Ye()]})}),tt=()=>{const e=()=>u.map((s,r)=>{if(C!==null&&C>r)return null;let l=s[g];return Oe&&(l=Oe(s)),t.jsxRuntimeExports.jsxs("div",{className:"comboselect-more-item",children:[t.jsxRuntimeExports.jsx("span",{className:"comboselect-more-item-text",children:t.jsxRuntimeExports.jsx(be.default,{children:l})}),t.jsxRuntimeExports.jsx("span",{className:"comboselect-more-item-remove",onClick:n=>Ge(n,s),children:t.jsxRuntimeExports.jsx(st.Close,{})})]},r)});return t.jsxRuntimeExports.jsxs("div",{className:"comboselect-more-wrapper",children:[t.jsxRuntimeExports.jsx("span",{className:"comboselect-more-title",children:t.jsxRuntimeExports.jsx("span",{children:w({id:"more"})})}),t.jsxRuntimeExports.jsx("div",{className:"comboselect-more-content",children:e()})]})},Bt=o.useMemo(()=>t.jsxRuntimeExports.jsx(Zt.Dropdown,{overlay:Wt(),visible:x,placement:pt,trigger:["click"],overlayClassName:_(`${d.$prefixCls}-comboselect-dropdown`,ft),getPopupContainer:$t,children:t.jsxRuntimeExports.jsx(ot.Popover,{visible:M,destroyTooltipOnHide:!0,placement:"rightTop",content:tt(),onVisibleChange:()=>L(!1),overlayClassName:`${d.$prefixCls}-comboselect-more-popover`,children:Y})}),[x,j,B,y,N,P,T,q,oe,De,Ke,M,ue,E,te,Y,u]),Gt=o.useMemo(()=>t.jsxRuntimeExports.jsxs(t.jsxRuntimeExports.Fragment,{children:[t.jsxRuntimeExports.jsx(ot.Popover,{visible:M,destroyTooltipOnHide:!0,placement:"rightTop",content:tt(),onVisibleChange:()=>L(!1),overlayClassName:`${d.$prefixCls}-comboselect-more-popover`,children:Y}),t.jsxRuntimeExports.jsxs("div",{className:"comboselect-non-popup-content",children:[F&&Xe(),m==="table"?fe:xe,Ze(),Ce&&Ye()]})]}),[j,B,y,N,P,q,oe,De,Ke,E,te,fe,xe,Y,M,u]);return t.jsxRuntimeExports.jsxs("div",{className:zt(),style:ut,ref:me,children:[Ht(),f?Gt:Bt,f?null:t.jsxRuntimeExports.jsx(is.default,{error:Ne,helperText:oe,hideErrorDom:Ct})]})};exports.ComboSelect=nt;exports.default=nt;
2
2
  //# sourceMappingURL=index.js.map
@@ -18,7 +18,7 @@ export type { TableProps, TreeProps };
18
18
  export type SelectOpt = {
19
19
  disabled?: boolean;
20
20
  closable?: boolean;
21
- [key: string]: any;
21
+ [key: string]: unknown;
22
22
  };
23
23
  export type SelectedOptions = Array<SelectOpt>;
24
24
  export type { TreeNodeProps };
@@ -30,7 +30,10 @@ export interface ComboSelectProps extends HelperTextDetailProps {
30
30
  /**search 占位符*/
31
31
  searchPlaceholder?: string;
32
32
  /**最大显示数*/
33
- /** @deprecated This attribute has been deprecated */
33
+ /**
34
+ * @deprecated v5.x dead field — 该字段历史遗留,代码内仅解构未引用,runtime 完全不生效。v5.0.0-beta.14 起 dev 模式抛 warn,v6.0 移除字段。
35
+ * 迁移:从 props 中移除 maxCount;tag 换行行为请用 `overLine` 控制。
36
+ */
34
37
  maxCount?: number;
35
38
  /** 超出换行 */
36
39
  overLine?: boolean;
@@ -107,7 +110,7 @@ export interface ComboSelectProps extends HelperTextDetailProps {
107
110
  realTimeSearch?: boolean;
108
111
  /**参数处理回调*/
109
112
  paramsCallback?: (params: {
110
- [name: string]: any;
113
+ [name: string]: unknown;
111
114
  }) => any;
112
115
  /**路径字段*/
113
116
  fullPathKey?: string;
@@ -1,8 +1,8 @@
1
- export declare const getReplaceField: (mode: string, repl: Record<string, unknown>, tableP?: Record<string, any>, treeP?: Record<string, any>) => any;
1
+ export declare const getReplaceField: (mode: string, repl: Record<string, unknown>, tableP?: Record<string, unknown>, treeP?: Record<string, unknown>) => Record<string, unknown>;
2
2
  export declare const toArray: (list: unknown) => unknown[];
3
3
  export declare const isRemoteLoad: (mode: string, props?: {
4
- data?: any;
5
- treeData?: any;
4
+ data?: unknown;
5
+ treeData?: unknown;
6
6
  }) => boolean;
7
7
  export declare const getOverlaySize: (mode: string, isRemoteLoad?: boolean, maxHeight?: number, height?: number) => {
8
8
  height: string;
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=(t,r,e,n)=>{let l={};return t==="tree"?l=n?.replaceFields:l=e?.replaceFields,{...r,...l}},f=t=>t?Array.isArray(t)?t:JSON.stringify(t)==="{}"?[]:[t]:[],h=(t,r)=>t==="table"?!(r&&Array.isArray(r.data)):!(r&&Array.isArray(r.treeData)),g=(t,r=!1,e,n)=>{const i=`${e||254}px`,s=`${e||232}px`,a=`${e||338}px`,o=`${e||304}px`,u=document.documentElement.clientHeight,c=n!==void 0?"height":"maxHeight";return t==="tree"?u<=720?r?{height:i}:{[c]:i}:r?{height:a}:{[c]:a}:t==="list"?u<=720?r?{[c]:s}:{[c]:s}:r?{[c]:o}:{[c]:o}:{height:`${e??n??380}px`}};function d(t,r){let e;return function(...n){e&&clearTimeout(e),e=setTimeout(()=>{t.apply(this,n)},r)}}const S=(t,r)=>{let e=t;const n=e.matches||e.webkitMatchesSelector||e.mozMatchesSelector||e.msMatchesSelector;for(;e&&!n.call(e,r);)e=e.parentElement;return e};exports.closest=S;exports.debounce=d;exports.getOverlaySize=g;exports.getReplaceField=y;exports.isRemoteLoad=h;exports.toArray=f;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=(t,r,e,n)=>{let l={};return t==="tree"?l=n?.replaceFields??{}:l=e?.replaceFields??{},{...r,...l}},f=t=>t?Array.isArray(t)?t:JSON.stringify(t)==="{}"?[]:[t]:[],h=(t,r)=>t==="table"?!(r&&Array.isArray(r.data)):!(r&&Array.isArray(r.treeData)),g=(t,r=!1,e,n)=>{const i=`${e||254}px`,s=`${e||232}px`,a=`${e||338}px`,o=`${e||304}px`,u=document.documentElement.clientHeight,c=n!==void 0?"height":"maxHeight";return t==="tree"?u<=720?r?{height:i}:{[c]:i}:r?{height:a}:{[c]:a}:t==="list"?u<=720?r?{[c]:s}:{[c]:s}:r?{[c]:o}:{[c]:o}:{height:`${e??n??380}px`}};function d(t,r){let e;return function(...n){e&&clearTimeout(e),e=setTimeout(()=>{t.apply(this,n)},r)}}const S=(t,r)=>{let e=t;const n=e.matches||e.webkitMatchesSelector||e.mozMatchesSelector||e.msMatchesSelector;for(;e&&!n.call(e,r);)e=e.parentElement;return e};exports.closest=S;exports.debounce=d;exports.getOverlaySize=g;exports.getReplaceField=y;exports.isRemoteLoad=h;exports.toArray=f;
2
2
  //# sourceMappingURL=utils.js.map
@@ -0,0 +1,111 @@
1
+ {
2
+ "name": "Container",
3
+ "category": "Layout",
4
+ "description": "容器布局,支持上下左右四区域布局",
5
+ "semantic": {
6
+ "intent": [
7
+ "页面布局",
8
+ "分区容器"
9
+ ],
10
+ "useCases": [
11
+ "经典布局",
12
+ "管理后台",
13
+ "工作台"
14
+ ],
15
+ "riskLevel": "low"
16
+ },
17
+ "variants": {
18
+ "tlr": {
19
+ "meaning": "上左右布局"
20
+ },
21
+ "tlrb": {
22
+ "meaning": "上左右下布局"
23
+ },
24
+ "ltrb": {
25
+ "meaning": "左上右下布局"
26
+ },
27
+ "trb": {
28
+ "meaning": "上右下布局"
29
+ }
30
+ },
31
+ "states": [
32
+ "default"
33
+ ],
34
+ "idealProps": {
35
+ "type": {
36
+ "type": "enum",
37
+ "values": [
38
+ "tlrb",
39
+ "ltrb",
40
+ "trb",
41
+ "tlr"
42
+ ],
43
+ "default": "tlr",
44
+ "description": "布局类型;tlr=上左右、tlrb=上左右下、ltrb=左+上右下(左侧贯通顶部到底部)、trb=上右下(无左侧)"
45
+ },
46
+ "top": {
47
+ "type": "JSX.Element",
48
+ "description": "顶部容器内容;不传则顶部区域高度自动收缩为 0(src/Container/index.tsx:100 `height: top ? '50px' : '0'`)。注:类型是 JSX.Element 而非 ReactNode,传 string / null / number 会被 TS2322 阻断,需用 <div>{node}</div> 包裹"
49
+ },
50
+ "topStyle": {
51
+ "type": "React.CSSProperties",
52
+ "description": "顶部容器样式(背景色/高度等)"
53
+ },
54
+ "left": {
55
+ "type": "JSX.Element",
56
+ "description": "左侧容器内容;不传则左侧区域宽度自动收缩为 0。类型同 top"
57
+ },
58
+ "leftStyle": {
59
+ "type": "React.CSSProperties",
60
+ "description": "左侧容器样式(背景色/宽度等)"
61
+ },
62
+ "right": {
63
+ "type": "JSX.Element",
64
+ "description": "右侧/主体容器内容(在所有 type 下都是主显示区);类型同 top"
65
+ },
66
+ "rightStyle": {
67
+ "type": "React.CSSProperties",
68
+ "description": "右侧/主体容器样式"
69
+ },
70
+ "bottom": {
71
+ "type": "JSX.Element",
72
+ "description": "底部容器内容;不传则底部区域高度自动收缩为 0。类型同 top"
73
+ },
74
+ "bottomStyle": {
75
+ "type": "React.CSSProperties",
76
+ "description": "底部容器样式(背景色/高度等)"
77
+ }
78
+ },
79
+ "do": [
80
+ "用于快速搭建经典管理后台布局(tlr=顶部导航+左侧菜单+主区域,tlrb=四区域,trb=无侧边栏)",
81
+ "配合 CollapseLayout 实现可折叠侧边栏:leftStyle={{ width: 200 }} + 内嵌 CollapseLayout",
82
+ "顶部/左侧/底部区域的高宽默认值(如 top 默认 50px)可通过 topStyle/leftStyle 等覆盖"
83
+ ],
84
+ "dont": [
85
+ "嵌套过深的 Container(布局嵌套超过 2 层时改用 Flex/Grid 自实现,Container 本身不支持响应式断点)",
86
+ "复杂自适应布局硬用 Container——Container 是固定区域布局,响应式场景改用 Grid/Flex",
87
+ "把 string / null / number 直接传给 top/left/right/bottom——类型是 JSX.Element,需 <div> 包裹"
88
+ ],
89
+ "events": {},
90
+ "typescriptPitfalls": [
91
+ {
92
+ "issue": "top/left/right/bottom 的类型是 JSX.Element,不接受 string 或 ReactNode",
93
+ "wrong": "top={'首页标题'} // TS 报错:string 不是 JSX.Element",
94
+ "right": "top={<div>首页标题</div>} // 必须是 JSX 元素"
95
+ },
96
+ {
97
+ "issue": "type='trb' 时没有 left 区域,传 left/leftStyle 无效",
98
+ "wrong": "<Container type='trb' left={<Sidebar />} /> // trb 布局无 left 区域,Sidebar 不渲染",
99
+ "right": "<Container type='tlr' left={<Sidebar />} right={<Main />} /> // 需要侧边栏用 tlr/tlrb/ltrb"
100
+ },
101
+ {
102
+ "issue": "topStyle/leftStyle 等 Style prop 覆盖默认尺寸,需显式传 width/height",
103
+ "wrong": "leftStyle={{ background: '#f0f0f0' }} // 背景色覆盖但宽度未设置,左侧宽度可能不符合预期",
104
+ "right": "leftStyle={{ background: '#f0f0f0', width: 200 }} // 显式指定宽度"
105
+ }
106
+ ],
107
+ "mapping": {
108
+ "realComponent": "Container",
109
+ "adapter": null
110
+ }
111
+ }
@@ -0,0 +1,81 @@
1
+ {
2
+ "name": "ContentBox",
3
+ "category": "Layout",
4
+ "description": "内容容器,支持 Loading 和 Empty 状态",
5
+ "semantic": {
6
+ "intent": [
7
+ "状态容器",
8
+ "内容包装"
9
+ ],
10
+ "useCases": [
11
+ "数据列表",
12
+ "详情页",
13
+ "异步内容"
14
+ ],
15
+ "riskLevel": "low"
16
+ },
17
+ "variants": {
18
+ "default": {
19
+ "meaning": "默认样式"
20
+ }
21
+ },
22
+ "states": [
23
+ "loading",
24
+ "empty",
25
+ "default"
26
+ ],
27
+ "idealProps": {
28
+ "loading": {
29
+ "type": "boolean",
30
+ "description": "是否正在加载"
31
+ },
32
+ "empty": {
33
+ "type": "boolean",
34
+ "description": "是否为空"
35
+ },
36
+ "scroll": {
37
+ "type": "boolean",
38
+ "description": "是否支持滚动"
39
+ },
40
+ "loadingOverlay": {
41
+ "type": "boolean",
42
+ "description": "loading 是否覆盖内容"
43
+ },
44
+ "children": {
45
+ "type": "ReactNode",
46
+ "description": "子组件"
47
+ }
48
+ },
49
+ "do": [
50
+ "统一处理异步数据的三种状态(loading/empty/正常内容)——避免在每个页面重复写 if-else 状态判断",
51
+ "loadingOverlay=true(默认)时 loading 覆盖在内容之上;loadingOverlay=false 时隐藏内容只显示 Loading——根据业务场景选择",
52
+ "需要自定义 Loading/Empty 样式:传 loadingComponent 或 emptyComponent 覆盖默认组件"
53
+ ],
54
+ "dont": [
55
+ "在简单静态内容中使用 ContentBox——无异步状态的场景无需 ContentBox,直接渲染内容性能更好",
56
+ "empty=true 时仍期望 children 渲染——empty 状态下 children 被 Empty 组件替换(src/ContentBox/index.tsx:78-86 实证)",
57
+ "loading 和 empty 同时为 true——src 优先处理 loading,empty 判断有 !loading 前置条件,两者同时为 true 时只显示 Loading"
58
+ ],
59
+ "events": {},
60
+ "typescriptPitfalls": [
61
+ {
62
+ "issue": "emptyProps 只对默认 Empty 组件生效,传了 emptyComponent 后 emptyProps 被忽略",
63
+ "wrong": "// emptyComponent 和 emptyProps 同时传,期望 emptyProps 能影响自定义 emptyComponent\n<ContentBox empty emptyComponent={<MyEmpty />} emptyProps={{ description: '暂无数据' }} />",
64
+ "right": "// 自定义组件时 emptyProps 无效,直接在 emptyComponent 内传 props\n<ContentBox empty emptyComponent={<MyEmpty description='暂无数据' />} />"
65
+ },
66
+ {
67
+ "issue": "loadingComponent 不接受 null/undefined,传 null 时 tsc 报类型错误",
68
+ "wrong": "loadingComponent={null} // ReactNode 可以是 null,但 ContentBox 内部 if(loadingComponent) 判断",
69
+ "right": "// 不传 loadingComponent 或传自定义 JSX 元素(不传时使用默认 Loading 组件)"
70
+ },
71
+ {
72
+ "issue": "ContentBox 使用 forwardRef,ref 类型是 HTMLDivElement",
73
+ "wrong": "const ref = useRef<HTMLElement>(null); <ContentBox ref={ref} /> // 类型不匹配",
74
+ "right": "const ref = useRef<HTMLDivElement>(null); <ContentBox ref={ref} />"
75
+ }
76
+ ],
77
+ "mapping": {
78
+ "realComponent": "ContentBox",
79
+ "adapter": null
80
+ }
81
+ }
@@ -0,0 +1,118 @@
1
+ {
2
+ "name": "CopyText",
3
+ "category": "Data Display",
4
+ "description": "复制文本,点击图标复制内容",
5
+ "semantic": {
6
+ "intent": [
7
+ "一键复制",
8
+ "信息展示"
9
+ ],
10
+ "useCases": [
11
+ "密钥展示",
12
+ "链接分享",
13
+ "代码片段"
14
+ ],
15
+ "riskLevel": "low"
16
+ },
17
+ "variants": {
18
+ "input": {
19
+ "meaning": "输入框模式"
20
+ },
21
+ "text": {
22
+ "meaning": "纯文本模式"
23
+ }
24
+ },
25
+ "states": [
26
+ "default",
27
+ "copied"
28
+ ],
29
+ "idealProps": {
30
+ "type": {
31
+ "type": "enum",
32
+ "values": [
33
+ "input",
34
+ "text"
35
+ ],
36
+ "default": "text",
37
+ "description": "类型('text' 纯文本展示 + 复制图标 / 'input' 输入框模式 + 复制图标 — 配合 textFieldProps 透传 TextField 配置)"
38
+ },
39
+ "value": {
40
+ "type": "ReactNode",
41
+ "description": "显示值;text 模式既是显示内容又是复制源(.toString() 兜底);input 模式必须 string(api.ts 类型 ReactNode 但 src:57 .toString() 兜底);**复制源优先级**:copyValue > valueCom(input 模式用户键入值) > value?.toString()"
42
+ },
43
+ "copyValue": {
44
+ "type": "string",
45
+ "description": "**显式指定写入剪贴板的内容,优先级最高**;适合'显示 ABC 但复制 ABC-with-prefix'或'显示掩码但复制真值'场景;不传则用 value/valueCom 兜底"
46
+ },
47
+ "textFieldProps": {
48
+ "type": "Omit<TextFieldProps, 'label'>",
49
+ "description": "**仅 type='input' 模式生效**;透传给内部 TextField — 可设 placeholder / readOnly / 自定义 onChange 等;text 模式下此 prop 被忽略"
50
+ },
51
+ "label": {
52
+ "type": "ReactNode",
53
+ "description": "组件标题(显示在 value 前)"
54
+ },
55
+ "copyIcon": {
56
+ "type": "ReactNode",
57
+ "description": "复制图标(默认 @para-ui/icons/Copy);复制成功后短暂切换为 CheckS,timeout 后切回"
58
+ },
59
+ "timeout": {
60
+ "type": "number",
61
+ "default": "800",
62
+ "description": "复制成功后图标切回原图的延时(ms);**仅控制状态指示视觉,不影响实际复制行为**(execCommand 已同步完成)"
63
+ },
64
+ "onCopy": {
65
+ "type": "function",
66
+ "description": "**复制前 hook**(点击时立即触发,await 后再 execCommand — src/CopyText/index.tsx:64-72);**不是复制成功回调**;**返回值语义**:返回 string 覆盖默认复制值,返回 undefined/void 用默认值;**组件已自动写剪贴板,不要在此调 navigator.clipboard.writeText**(会重复)"
67
+ }
68
+ },
69
+ "do": [
70
+ "在需要用户复制内容的场景使用——密钥/Token 展示、链接分享、代码片段等",
71
+ "提供复制成功反馈(copyIcon 切换为 CheckS,timeout 毫秒后切回)",
72
+ "显示内容与复制内容不同时(如掩码显示、真值复制):传 copyValue 指定真实复制内容",
73
+ "input 模式下用户可编辑内容并复制:type='input' + textFieldProps 配置输入框属性"
74
+ ],
75
+ "dont": [
76
+ "复制敏感信息(密码/私钥)时不做视觉遮罩——显示 value 但复制内容不同时用 copyValue 隔离",
77
+ "在 onCopy 内调 navigator.clipboard.writeText——组件已自动 execCommand 写剪贴板,会重复写入",
78
+ "把 onCopy 当作复制成功后的回调——onCopy 是复制前 hook(在 execCommand 前 await),若需成功后 toast 在 onCopy 返回前自行触发",
79
+ "text 模式下传 textFieldProps 期待 placeholder 生效——textFieldProps 仅 type='input' 模式有效"
80
+ ],
81
+ "events": {
82
+ "onCopy": {
83
+ "signature": "() => Promise<string | void> | string | void",
84
+ "asyncSupported": true,
85
+ "examples": [
86
+ "动态获取复制值:onCopy={async () => { const token = await fetchToken(); return token; }}(返回 string 覆盖默认复制值)",
87
+ "仅做副作用(不改变复制值):onCopy={() => { analytics.track('copy'); }}(返回 void 时用默认 value)",
88
+ "显示成功 toast:onCopy={async () => { const val = await getVal(); message.success('已复制'); return val; }}"
89
+ ],
90
+ "commonMistakes": [
91
+ "把 onCopy 当复制成功回调——onCopy 在 execCommand 之前触发(复制前 hook),不是复制成功后",
92
+ "在 onCopy 内调 navigator.clipboard.writeText——组件已自动写剪贴板(execCommand),调用后会重复写入",
93
+ "onCopy 返回 undefined 以为会阻止复制——返回 undefined 时组件用默认 value 复制,无法阻止复制行为"
94
+ ]
95
+ }
96
+ },
97
+ "typescriptPitfalls": [
98
+ {
99
+ "issue": "type='input' 时 value 必须是 string 类型(src 内部 .toString() 兜底但 TS 类型声明为 ReactNode)",
100
+ "wrong": "type='input' value={<span>复杂内容</span>} // input 模式内部 setValueCom(value?.toString()) 导致 [object Object]",
101
+ "right": "type='input' value='plain string' // input 模式只传 string"
102
+ },
103
+ {
104
+ "issue": "textFieldProps 类型是 Omit<TextFieldProps, 'label'>,label 已被剔除,不能在此传 label",
105
+ "wrong": "textFieldProps={{ label: '字段名', placeholder: '请输入' }} // TS 报错:label 已被 Omit 剔除",
106
+ "right": "// label 通过 CopyText.label prop 传,textFieldProps 只传 TextField 其他属性\n<CopyText label='字段名' textFieldProps={{ placeholder: '请输入' }} />"
107
+ },
108
+ {
109
+ "issue": "copyValue 优先级最高,传了 copyValue 后 value 仅用于显示,不参与复制",
110
+ "wrong": "// 期望 copyValue 只在某些情况覆盖,平时还用 value:\n<CopyText value={displayText} copyValue={undefined} /> // copyValue=undefined 时自动 fallback 到 value,OK",
111
+ "right": "// 需要按条件切换:\ncopyValue={shouldOverride ? realValue : undefined} // undefined 时组件用 value,string 时用 copyValue"
112
+ }
113
+ ],
114
+ "mapping": {
115
+ "realComponent": "CopyText",
116
+ "adapter": null
117
+ }
118
+ }