@para-ui/core 5.0.0-beta.8 → 5.0.0

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 (735) 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/ExpressionInput/component.json +79 -0
  36. package/FieldForm/component.json +196 -0
  37. package/Form/component.json +161 -0
  38. package/FormItem/component.json +171 -0
  39. package/FunctionModal/component.json +197 -0
  40. package/Help/component.json +118 -0
  41. package/HelperText/component.json +126 -0
  42. package/Image/component.json +165 -0
  43. package/InputCode/component.json +191 -0
  44. package/InputLang/component.json +205 -0
  45. package/InputNumber/component.json +162 -0
  46. package/Label/component.json +126 -0
  47. package/Loading/component.json +91 -0
  48. package/Menu/component.json +180 -0
  49. package/Message/component.json +246 -0
  50. package/Modal/component.json +277 -0
  51. package/MultiBox/component.json +216 -0
  52. package/Notification/component.json +184 -0
  53. package/OperateBtn/component.json +134 -0
  54. package/PageHeader/component.json +112 -0
  55. package/Pagination/component.json +181 -0
  56. package/PasswordRules/component.json +105 -0
  57. package/PopConfirm/component.json +227 -0
  58. package/PopMenu/component.json +131 -0
  59. package/Popover/component.json +165 -0
  60. package/Progress/component.json +161 -0
  61. package/Prompt/component.json +144 -0
  62. package/Querying/component.json +96 -0
  63. package/QuickReply/component.json +129 -0
  64. package/README.md +0 -5
  65. package/Radio/component.json +136 -0
  66. package/RadioGroup/component.json +149 -0
  67. package/RangeInput/component.json +198 -0
  68. package/Result/component.json +104 -0
  69. package/ScrollBar/component.json +115 -0
  70. package/Search/component.json +177 -0
  71. package/Select/component.json +244 -0
  72. package/SelectInput/component.json +184 -0
  73. package/Selector/component.json +203 -0
  74. package/SelectorPicker/component.json +179 -0
  75. package/SingleBox/component.json +151 -0
  76. package/Slider/component.json +181 -0
  77. package/SortBox/component.json +108 -0
  78. package/Status/component.json +104 -0
  79. package/Stepper/component.json +129 -0
  80. package/Switch/component.json +207 -0
  81. package/Table/component.json +547 -0
  82. package/Tabs/component.json +227 -0
  83. package/Tag/component.json +221 -0
  84. package/TextEditor/component.json +186 -0
  85. package/TextField/component.json +290 -0
  86. package/TimePicker/component.json +176 -0
  87. package/Timeline/component.json +110 -0
  88. package/Title/component.json +156 -0
  89. package/ToggleButton/component.json +153 -0
  90. package/Tooltip/component.json +176 -0
  91. package/Transfer/component.json +157 -0
  92. package/Tree/component.json +512 -0
  93. package/Upload/component.json +450 -0
  94. package/ai-workflows/01-crud-list-multi-drawer.md +278 -0
  95. package/ai-workflows/02-rbac-operation-buttons.md +290 -0
  96. package/ai-workflows/03-complex-form-async-cascade.md +350 -0
  97. package/ai-workflows/04-array-field-form.md +281 -0
  98. package/ai-workflows/05-popconfirm-async-message-queue.md +333 -0
  99. package/ai-workflows/06-modal-drawer-form-workflow.md +385 -0
  100. package/ai-workflows/07-search-filter-table-trio.md +387 -0
  101. package/ai-workflows/08-table-advanced-features.md +365 -0
  102. package/ai-workflows/09-batch-operation-export-progress.md +367 -0
  103. package/ai-workflows/10-cross-component-state-coordination.md +412 -0
  104. package/es/AlignBox/component.json +89 -0
  105. package/es/AlignBox/index.css +1 -1
  106. package/es/AlignBox/index.d.ts +6 -2
  107. package/es/AlignBox/index.js +1 -1
  108. package/es/AlignBox/style/index.css +1 -1
  109. package/es/Anchor/anchorMenu/index.d.ts +2 -1
  110. package/es/Anchor/anchorMenu/index.js +36 -33
  111. package/es/Anchor/component.json +130 -0
  112. package/es/Anchor/index.js +52 -49
  113. package/es/Anchor/type.d.ts +8 -4
  114. package/es/Argv/batchEdit/index.js +1 -1
  115. package/es/Argv/component.json +216 -0
  116. package/es/Argv/dataGenerator/index.js +1 -1
  117. package/es/Argv/index.d.ts +5 -6
  118. package/es/Argv/index.js +1 -1
  119. package/es/AutoBox/component.json +133 -0
  120. package/es/AutoBox/index.d.ts +3 -3
  121. package/es/AutoBox/index.js +1 -1
  122. package/es/AutoBox/protal.d.ts +2 -2
  123. package/es/AutoBox/protal.js +33 -30
  124. package/es/AutoButton/component.json +109 -0
  125. package/es/AutoButton/index.js +1 -1
  126. package/es/AutoTips/autoTipsMultiline/index.d.ts +1 -1
  127. package/es/AutoTips/autoTipsMultiline/index.js +1 -1
  128. package/es/AutoTips/component.json +121 -0
  129. package/es/AutoTips/index.js +1 -1
  130. package/es/Badge/component.json +92 -0
  131. package/es/Breadcrumbs/component.json +142 -0
  132. package/es/Breadcrumbs/index.js +1 -1
  133. package/es/Button/SplitButton.d.ts +2 -2
  134. package/es/Button/component.json +168 -0
  135. package/es/Button/index.js +44 -44
  136. package/es/ButtonGroup/component.json +132 -0
  137. package/es/ButtonGroup/index.d.ts +1 -1
  138. package/es/Card/component.json +162 -0
  139. package/es/Card/index.d.ts +2 -2
  140. package/es/Card/index.js +2 -2
  141. package/es/Carousel/component.json +142 -0
  142. package/es/Carousel/index.d.ts +1 -1
  143. package/es/Cascader/Cascader.js +1 -1
  144. package/es/Cascader/OptionList/Column.js +1 -1
  145. package/es/Cascader/OptionList/index.js +1 -1
  146. package/es/Cascader/component.json +196 -0
  147. package/es/Cascader/hooks/useEntities.js +7 -7
  148. package/es/Cascader/interface.d.ts +1 -0
  149. package/es/Cascader/utils/commonUtil.d.ts +1 -1
  150. package/es/Cascader/utils/commonUtil.js +16 -16
  151. package/es/Cascader/utils/treeUtil.d.ts +14 -5
  152. package/es/Cascader/utils/treeUtil.js +1 -1
  153. package/es/Checkbox/component.json +138 -0
  154. package/es/CheckboxGroup/component.json +152 -0
  155. package/es/CheckboxGroup/index.js +1 -1
  156. package/es/CodeEditor/component.json +189 -0
  157. package/es/CodeEditor/index.d.ts +11 -10
  158. package/es/CodeEditor/index.js +25 -25
  159. package/es/Collapse/component.json +166 -0
  160. package/es/Collapse/index.d.ts +1 -1
  161. package/es/Collapse/index.js +23 -22
  162. package/es/CollapseBox/component.json +84 -0
  163. package/es/CollapseLayout/component.json +155 -0
  164. package/es/ColorPicker/component.json +142 -0
  165. package/es/ComboSelect/component.json +181 -0
  166. package/es/ComboSelect/index.js +115 -109
  167. package/es/ComboSelect/interface.d.ts +2 -2
  168. package/es/ComboSelect/utils.d.ts +3 -3
  169. package/es/ComboSelect/utils.js +1 -1
  170. package/es/Container/component.json +111 -0
  171. package/es/ContentBox/component.json +81 -0
  172. package/es/CopyText/component.json +118 -0
  173. package/es/CycleSelector/component.json +98 -0
  174. package/es/CycleSelector/index.js +14 -13
  175. package/es/DatePicker/component.json +192 -0
  176. package/es/DatePicker/generatePicker/generateRangePicker.js +11 -11
  177. package/es/DatePicker/generatePicker/generateSinglePicker.js +2 -2
  178. package/es/Descriptions/component.json +142 -0
  179. package/es/Descriptions/index.d.ts +1 -1
  180. package/es/Desktop/component.json +171 -0
  181. package/es/Desktop/index.js +1 -1
  182. package/es/DragVerify/component.json +114 -0
  183. package/es/DragVerify/index.js +19 -19
  184. package/es/Drawer/component.json +200 -0
  185. package/es/Drawer/index.js +86 -86
  186. package/es/Drawer/interface.d.ts +1 -1
  187. package/es/Drawer/util.d.ts +1 -6
  188. package/es/Drawer/util.js +9 -6
  189. package/es/Dropdown/component.json +147 -0
  190. package/es/Dropdown/index.js +1 -1
  191. package/es/DynamicMultiBox/component.json +278 -0
  192. package/es/DynamicMultiBox/formItem.d.ts +1 -1
  193. package/es/DynamicMultiBox/index.d.ts +2 -2
  194. package/es/DynamicMultiBox/index.js +1 -1
  195. package/es/DynamicMultiBox/interface.d.ts +76 -76
  196. package/es/DynamicMultiBox/rowForm.d.ts +2 -2
  197. package/es/Empty/component.json +123 -0
  198. package/es/Empty/index.css +1 -1
  199. package/es/Empty/index.d.ts +2 -2
  200. package/es/Empty/index.js +27 -26
  201. package/es/Empty/style/index.css +1 -1
  202. package/es/ExpressionInput/HighlightOverlay.d.ts +8 -0
  203. package/es/ExpressionInput/HighlightOverlay.js +27 -0
  204. package/es/ExpressionInput/Popup.d.ts +19 -0
  205. package/es/ExpressionInput/Popup.js +93 -0
  206. package/es/ExpressionInput/component.json +79 -0
  207. package/es/ExpressionInput/detectChainAtCursor.d.ts +17 -0
  208. package/es/ExpressionInput/detectChainAtCursor.js +31 -0
  209. package/es/ExpressionInput/filterCandidatesByPartial.d.ts +2 -0
  210. package/es/ExpressionInput/filterCandidatesByPartial.js +15 -0
  211. package/es/ExpressionInput/highlightSegments.d.ts +9 -0
  212. package/es/ExpressionInput/highlightSegments.js +14 -0
  213. package/es/ExpressionInput/index.css +1 -0
  214. package/es/ExpressionInput/index.d.ts +5 -0
  215. package/es/ExpressionInput/index.js +178 -0
  216. package/es/ExpressionInput/interface.d.ts +52 -0
  217. package/es/ExpressionInput/isExpressionValue.d.ts +5 -0
  218. package/es/ExpressionInput/isExpressionValue.js +18 -0
  219. package/es/ExpressionInput/lang/en_US.d.ts +4 -0
  220. package/es/ExpressionInput/lang/en_US.js +7 -0
  221. package/es/ExpressionInput/lang/index.d.ts +9 -0
  222. package/es/ExpressionInput/lang/index.js +10 -0
  223. package/es/ExpressionInput/lang/zh_CN.d.ts +4 -0
  224. package/es/ExpressionInput/lang/zh_CN.js +7 -0
  225. package/es/ExpressionInput/style/css.js +1 -0
  226. package/es/ExpressionInput/style/index.css +1 -0
  227. package/es/ExpressionInput/style/index.js +1 -0
  228. package/es/ExpressionInput/useExpressionInput.d.ts +26 -0
  229. package/es/ExpressionInput/useExpressionInput.js +59 -0
  230. package/es/FieldForm/FieldFormItem/ItemHolder.js +1 -1
  231. package/es/FieldForm/FieldFormItem/MemoInput.d.ts +2 -2
  232. package/es/FieldForm/FieldFormItem/StatusProvider.js +1 -1
  233. package/es/FieldForm/FieldFormItem/index.d.ts +6 -6
  234. package/es/FieldForm/Form.d.ts +2 -2
  235. package/es/FieldForm/Form.js +1 -1
  236. package/es/FieldForm/FormItemInput.js +1 -1
  237. package/es/FieldForm/FormItemLabel.js +1 -1
  238. package/es/FieldForm/FormList.d.ts +2 -2
  239. package/es/FieldForm/component.json +196 -0
  240. package/es/FieldForm/context.d.ts +5 -1
  241. package/es/FieldForm/context.js +2 -2
  242. package/es/FieldForm/hooks/useForm.d.ts +4 -3
  243. package/es/FieldForm/hooks/useFormInstance.d.ts +1 -1
  244. package/es/FieldForm/hooks/useFormItemStatus.d.ts +9 -5
  245. package/es/FieldForm/hooks/useFormItemStatus.js +2 -2
  246. package/es/FieldForm/hooks/useItemRef.d.ts +1 -1
  247. package/es/FieldForm/hooks/useItemRef.js +6 -6
  248. package/es/Form/component.json +161 -0
  249. package/es/Form/index.d.ts +52 -49
  250. package/es/Form/index.js +1 -1
  251. package/es/FormItem/compoments/defaultCompoments/index.d.ts +5 -5
  252. package/es/FormItem/compoments/defaultCompoments/index.js +12 -11
  253. package/es/FormItem/compoments/formCheckboxGroup/index.d.ts +2 -2
  254. package/es/FormItem/compoments/formFile/index.js +8 -8
  255. package/es/FormItem/compoments/formRadioGroup/index.d.ts +1 -1
  256. package/es/FormItem/compoments/formSelect/index.d.ts +1 -1
  257. package/es/FormItem/component.json +171 -0
  258. package/es/FormItem/index.d.ts +5 -5
  259. package/es/FormItem/index.js +23 -23
  260. package/es/FormItem/itemType.js +1 -1
  261. package/es/FunctionModal/component.json +197 -0
  262. package/es/FunctionModal/dialog.d.ts +1 -1
  263. package/es/FunctionModal/modalContext.d.ts +4 -1
  264. package/es/GlobalContext/confirmLocale.js +1 -1
  265. package/es/GlobalContext/index.js +1 -1
  266. package/es/Help/component.json +118 -0
  267. package/es/HelperText/component.json +126 -0
  268. package/es/Image/PreviewGroup.js +1 -1
  269. package/es/Image/component.json +165 -0
  270. package/es/Image/index.js +1 -1
  271. package/es/InputCode/component.json +191 -0
  272. package/es/InputCode/index.d.ts +2 -2
  273. package/es/InputCode/index.js +1 -1
  274. package/es/InputLang/component.json +205 -0
  275. package/es/InputLang/index.js +2 -2
  276. package/es/InputNumber/component.json +162 -0
  277. package/es/InputNumber/index.d.ts +13 -7
  278. package/es/InputNumber/index.js +152 -144
  279. package/es/Label/component.json +126 -0
  280. package/es/Label/index.d.ts +2 -2
  281. package/es/Loading/component.json +91 -0
  282. package/es/Menu/component.json +180 -0
  283. package/es/Menu/verticalMenuList.js +1 -1
  284. package/es/Message/component.json +246 -0
  285. package/es/Message/index.d.ts +2 -2
  286. package/es/Message/index.js +19 -19
  287. package/es/Modal/Confirm/index.d.ts +1 -1
  288. package/es/Modal/Confirm/index.js +1 -1
  289. package/es/Modal/component.json +277 -0
  290. package/es/Modal/index.d.ts +85 -5
  291. package/es/Modal/index.js +159 -122
  292. package/es/Modal/interface.d.ts +1 -0
  293. package/es/MultiBox/component.json +216 -0
  294. package/es/MultiBox/index.js +19 -14
  295. package/es/Notification/component.json +184 -0
  296. package/es/OperateBtn/component.json +134 -0
  297. package/es/OperateBtn/index.d.ts +3 -3
  298. package/es/PageHeader/component.json +112 -0
  299. package/es/PageHeader/horizontalMeun.js +1 -1
  300. package/es/PageHeader/horizontalMeunRight.js +1 -1
  301. package/es/Pagination/component.json +181 -0
  302. package/es/Pagination/index.js +15 -15
  303. package/es/ParauiProvider/index.js +1 -1
  304. package/es/PasswordRules/component.json +105 -0
  305. package/es/PasswordRules/index.d.ts +4 -4
  306. package/es/PopConfirm/component.json +227 -0
  307. package/es/PopConfirm/index.d.ts +1 -1
  308. package/es/PopConfirm/index.js +1 -1
  309. package/es/PopMenu/component.json +131 -0
  310. package/es/PopMenu/hooks.d.ts +1 -1
  311. package/es/PopMenu/index.js +8 -8
  312. package/es/Popover/component.json +165 -0
  313. package/es/Popover/index.js +1 -1
  314. package/es/Progress/component.json +161 -0
  315. package/es/Prompt/component.json +144 -0
  316. package/es/Querying/component.json +96 -0
  317. package/es/Querying/index.css +1 -1
  318. package/es/Querying/index.d.ts +2 -2
  319. package/es/Querying/index.js +20 -19
  320. package/es/Querying/style/index.css +1 -1
  321. package/es/QuickReply/QuickReplyCode/index.js +1 -1
  322. package/es/QuickReply/component.json +129 -0
  323. package/es/QuickReply/index.d.ts +1 -1
  324. package/es/Radio/component.json +136 -0
  325. package/es/RadioGroup/component.json +149 -0
  326. package/es/RangeInput/component.json +198 -0
  327. package/es/RangeInput/index.d.ts +15 -7
  328. package/es/RangeInput/index.js +120 -103
  329. package/es/Result/component.json +104 -0
  330. package/es/ScrollBar/component.json +115 -0
  331. package/es/Search/component.json +177 -0
  332. package/es/Search/index.d.ts +1 -1
  333. package/es/Select/component.json +244 -0
  334. package/es/Select/index.d.ts +11 -8
  335. package/es/Select/index.js +441 -438
  336. package/es/SelectInput/component.json +184 -0
  337. package/es/SelectInput/index.d.ts +4 -4
  338. package/es/SelectInput/index.js +8 -8
  339. package/es/Selector/component.json +203 -0
  340. package/es/Selector/index.js +56 -50
  341. package/es/Selector/interface.d.ts +2 -2
  342. package/es/Selector/selectorData/index.js +1 -1
  343. package/es/Selector/selectorMain/index.js +3 -3
  344. package/es/Selector/selectorNode/index.js +1 -1
  345. package/es/Selector/util.d.ts +3 -3
  346. package/es/Selector/util.js +6 -12
  347. package/es/SelectorPicker/component.json +179 -0
  348. package/es/SelectorPicker/index.d.ts +5 -5
  349. package/es/SelectorPicker/index.js +15 -15
  350. package/es/SingleBox/component.json +151 -0
  351. package/es/SingleBox/index.d.ts +2 -2
  352. package/es/Slider/component.json +181 -0
  353. package/es/SortBox/component.json +108 -0
  354. package/es/Status/component.json +104 -0
  355. package/es/Stepper/component.json +129 -0
  356. package/es/Stepper/index.d.ts +2 -2
  357. package/es/Switch/component.json +207 -0
  358. package/es/Switch/index.css +1 -1
  359. package/es/Switch/index.d.ts +3 -2
  360. package/es/Switch/index.js +60 -59
  361. package/es/Switch/style/index.css +1 -1
  362. package/es/Table/component.json +547 -0
  363. package/es/Table/index.d.ts +2 -2
  364. package/es/Table/index.js +385 -382
  365. package/es/Table/interface.d.ts +30 -0
  366. package/es/Table/tableHead.js +1 -1
  367. package/es/Table/util.d.ts +1 -1
  368. package/es/Table/util.js +3 -12
  369. package/es/Tabs/component.json +227 -0
  370. package/es/Tag/component.json +221 -0
  371. package/es/Tag/index.css +1 -1
  372. package/es/Tag/index.d.ts +1 -1
  373. package/es/Tag/index.js +20 -20
  374. package/es/Tag/style/index.css +1 -1
  375. package/es/TextEditor/component.json +186 -0
  376. package/es/TextEditor/index.d.ts +5 -5
  377. package/es/TextEditor/index.js +1 -1
  378. package/es/TextField/component.json +290 -0
  379. package/es/TextField/index.d.ts +2 -2
  380. package/es/TextField/index.js +1 -1
  381. package/es/TimePicker/component.json +176 -0
  382. package/es/Timeline/component.json +110 -0
  383. package/es/Title/component.json +156 -0
  384. package/es/ToggleButton/component.json +153 -0
  385. package/es/ToggleButton/index.js +1 -1
  386. package/es/Tooltip/component.json +176 -0
  387. package/es/Tooltip/index.js +58 -53
  388. package/es/Tooltip/interface.d.ts +14 -1
  389. package/es/Tooltip/utils.js +6 -6
  390. package/es/Transfer/component.json +157 -0
  391. package/es/Tree/OperateBar/index.js +1 -1
  392. package/es/Tree/Tree.js +3 -3
  393. package/es/Tree/component.json +512 -0
  394. package/es/Tree/interface.d.ts +1 -1
  395. package/es/Upload/component.json +450 -0
  396. package/es/Upload/util.js +1 -1
  397. package/es/Utils/snack-kit-shims.d.ts +18 -0
  398. package/es/Utils/snack-kit-shims.js +19 -0
  399. package/es/Utils/type.d.ts +0 -6
  400. package/es/_virtual/index.js +5 -3
  401. package/es/_virtual/index2.js +2 -5
  402. package/es/index.d.ts +4 -0
  403. package/es/index.js +152 -150
  404. package/es/locale/en-US.d.ts +3 -0
  405. package/es/locale/en-US.js +3 -0
  406. package/es/locale/en_US.d.ts +361 -0
  407. package/es/locale/en_US.js +364 -0
  408. package/es/locale/index.d.ts +1 -723
  409. package/es/locale/index2.js +10 -0
  410. package/es/locale/zh-CN.d.ts +3 -0
  411. package/es/locale/zh-CN.js +3 -0
  412. package/es/locale/zh_CN.d.ts +361 -0
  413. package/es/locale/zh_CN.js +364 -0
  414. package/es/node_modules/classnames/index.js +1 -1
  415. package/lib/AlignBox/component.json +89 -0
  416. package/lib/AlignBox/index.css +1 -1
  417. package/lib/AlignBox/index.d.ts +6 -2
  418. package/lib/AlignBox/index.js +1 -1
  419. package/lib/AlignBox/style/index.css +1 -1
  420. package/lib/Anchor/anchorMenu/index.d.ts +2 -1
  421. package/lib/Anchor/anchorMenu/index.js +1 -1
  422. package/lib/Anchor/component.json +130 -0
  423. package/lib/Anchor/index.js +1 -1
  424. package/lib/Anchor/type.d.ts +8 -4
  425. package/lib/Argv/component.json +216 -0
  426. package/lib/Argv/dataGenerator/index.js +1 -1
  427. package/lib/Argv/index.d.ts +5 -6
  428. package/lib/Argv/index.js +1 -1
  429. package/lib/AutoBox/component.json +133 -0
  430. package/lib/AutoBox/index.d.ts +3 -3
  431. package/lib/AutoBox/index.js +1 -1
  432. package/lib/AutoBox/protal.d.ts +2 -2
  433. package/lib/AutoBox/protal.js +1 -1
  434. package/lib/AutoButton/component.json +109 -0
  435. package/lib/AutoButton/index.js +1 -1
  436. package/lib/AutoTips/autoTipsMultiline/index.d.ts +1 -1
  437. package/lib/AutoTips/autoTipsMultiline/index.js +1 -1
  438. package/lib/AutoTips/component.json +121 -0
  439. package/lib/AutoTips/index.js +1 -1
  440. package/lib/Badge/component.json +92 -0
  441. package/lib/Breadcrumbs/component.json +142 -0
  442. package/lib/Breadcrumbs/index.js +1 -1
  443. package/lib/Button/SplitButton.d.ts +2 -2
  444. package/lib/Button/component.json +168 -0
  445. package/lib/Button/index.js +1 -1
  446. package/lib/ButtonGroup/component.json +132 -0
  447. package/lib/ButtonGroup/index.d.ts +1 -1
  448. package/lib/Card/component.json +162 -0
  449. package/lib/Card/index.d.ts +2 -2
  450. package/lib/Card/index.js +1 -1
  451. package/lib/Carousel/component.json +142 -0
  452. package/lib/Carousel/index.d.ts +1 -1
  453. package/lib/Cascader/Cascader.js +1 -1
  454. package/lib/Cascader/OptionList/Column.js +1 -1
  455. package/lib/Cascader/OptionList/index.js +1 -1
  456. package/lib/Cascader/component.json +196 -0
  457. package/lib/Cascader/hooks/useEntities.js +1 -1
  458. package/lib/Cascader/interface.d.ts +1 -0
  459. package/lib/Cascader/utils/commonUtil.d.ts +1 -1
  460. package/lib/Cascader/utils/commonUtil.js +1 -1
  461. package/lib/Cascader/utils/treeUtil.d.ts +14 -5
  462. package/lib/Cascader/utils/treeUtil.js +1 -1
  463. package/lib/Checkbox/component.json +138 -0
  464. package/lib/CheckboxGroup/component.json +152 -0
  465. package/lib/CheckboxGroup/index.js +1 -1
  466. package/lib/CodeEditor/component.json +189 -0
  467. package/lib/CodeEditor/index.d.ts +11 -10
  468. package/lib/CodeEditor/index.js +1 -1
  469. package/lib/Collapse/component.json +166 -0
  470. package/lib/Collapse/index.d.ts +1 -1
  471. package/lib/Collapse/index.js +1 -1
  472. package/lib/CollapseBox/component.json +84 -0
  473. package/lib/CollapseLayout/component.json +155 -0
  474. package/lib/ColorPicker/component.json +142 -0
  475. package/lib/ComboSelect/component.json +181 -0
  476. package/lib/ComboSelect/index.js +1 -1
  477. package/lib/ComboSelect/interface.d.ts +2 -2
  478. package/lib/ComboSelect/utils.d.ts +3 -3
  479. package/lib/ComboSelect/utils.js +1 -1
  480. package/lib/Container/component.json +111 -0
  481. package/lib/ContentBox/component.json +81 -0
  482. package/lib/CopyText/component.json +118 -0
  483. package/lib/CycleSelector/component.json +98 -0
  484. package/lib/CycleSelector/index.js +1 -1
  485. package/lib/DatePicker/component.json +192 -0
  486. package/lib/DatePicker/generatePicker/generateRangePicker.js +1 -1
  487. package/lib/DatePicker/generatePicker/generateSinglePicker.js +1 -1
  488. package/lib/Descriptions/component.json +142 -0
  489. package/lib/Descriptions/index.d.ts +1 -1
  490. package/lib/Desktop/component.json +171 -0
  491. package/lib/Desktop/index.js +1 -1
  492. package/lib/DragVerify/component.json +114 -0
  493. package/lib/DragVerify/index.js +1 -1
  494. package/lib/Drawer/component.json +200 -0
  495. package/lib/Drawer/index.js +1 -1
  496. package/lib/Drawer/interface.d.ts +1 -1
  497. package/lib/Drawer/util.d.ts +1 -6
  498. package/lib/Drawer/util.js +1 -1
  499. package/lib/Dropdown/component.json +147 -0
  500. package/lib/Dropdown/index.js +1 -1
  501. package/lib/DynamicMultiBox/component.json +278 -0
  502. package/lib/DynamicMultiBox/formItem.d.ts +1 -1
  503. package/lib/DynamicMultiBox/index.d.ts +2 -2
  504. package/lib/DynamicMultiBox/index.js +1 -1
  505. package/lib/DynamicMultiBox/interface.d.ts +76 -76
  506. package/lib/DynamicMultiBox/rowForm.d.ts +2 -2
  507. package/lib/Empty/component.json +123 -0
  508. package/lib/Empty/index.css +1 -1
  509. package/lib/Empty/index.d.ts +2 -2
  510. package/lib/Empty/index.js +1 -1
  511. package/lib/Empty/style/index.css +1 -1
  512. package/lib/ExpressionInput/HighlightOverlay.d.ts +8 -0
  513. package/lib/ExpressionInput/HighlightOverlay.js +2 -0
  514. package/lib/ExpressionInput/Popup.d.ts +19 -0
  515. package/lib/ExpressionInput/Popup.js +2 -0
  516. package/lib/ExpressionInput/component.json +79 -0
  517. package/lib/ExpressionInput/detectChainAtCursor.d.ts +17 -0
  518. package/lib/ExpressionInput/detectChainAtCursor.js +2 -0
  519. package/lib/ExpressionInput/filterCandidatesByPartial.d.ts +2 -0
  520. package/lib/ExpressionInput/filterCandidatesByPartial.js +2 -0
  521. package/lib/ExpressionInput/highlightSegments.d.ts +9 -0
  522. package/lib/ExpressionInput/highlightSegments.js +2 -0
  523. package/lib/ExpressionInput/index.css +1 -0
  524. package/lib/ExpressionInput/index.d.ts +5 -0
  525. package/lib/ExpressionInput/index.js +2 -0
  526. package/lib/ExpressionInput/interface.d.ts +52 -0
  527. package/lib/ExpressionInput/isExpressionValue.d.ts +5 -0
  528. package/lib/ExpressionInput/isExpressionValue.js +2 -0
  529. package/lib/ExpressionInput/lang/en_US.d.ts +4 -0
  530. package/lib/ExpressionInput/lang/en_US.js +2 -0
  531. package/lib/ExpressionInput/lang/index.d.ts +9 -0
  532. package/lib/ExpressionInput/lang/index.js +2 -0
  533. package/lib/ExpressionInput/lang/zh_CN.d.ts +4 -0
  534. package/lib/ExpressionInput/lang/zh_CN.js +2 -0
  535. package/lib/ExpressionInput/style/css.js +1 -0
  536. package/lib/ExpressionInput/style/index.css +1 -0
  537. package/lib/ExpressionInput/style/index.js +1 -0
  538. package/lib/ExpressionInput/useExpressionInput.d.ts +26 -0
  539. package/lib/ExpressionInput/useExpressionInput.js +2 -0
  540. package/lib/FieldForm/FieldFormItem/ItemHolder.js +1 -1
  541. package/lib/FieldForm/FieldFormItem/MemoInput.d.ts +2 -2
  542. package/lib/FieldForm/FieldFormItem/StatusProvider.js +1 -1
  543. package/lib/FieldForm/FieldFormItem/index.d.ts +6 -6
  544. package/lib/FieldForm/Form.d.ts +2 -2
  545. package/lib/FieldForm/Form.js +1 -1
  546. package/lib/FieldForm/FormItemInput.js +1 -1
  547. package/lib/FieldForm/FormItemLabel.js +1 -1
  548. package/lib/FieldForm/FormList.d.ts +2 -2
  549. package/lib/FieldForm/component.json +196 -0
  550. package/lib/FieldForm/context.d.ts +5 -1
  551. package/lib/FieldForm/context.js +1 -1
  552. package/lib/FieldForm/hooks/useForm.d.ts +4 -3
  553. package/lib/FieldForm/hooks/useFormInstance.d.ts +1 -1
  554. package/lib/FieldForm/hooks/useFormItemStatus.d.ts +9 -5
  555. package/lib/FieldForm/hooks/useFormItemStatus.js +1 -1
  556. package/lib/FieldForm/hooks/useItemRef.d.ts +1 -1
  557. package/lib/FieldForm/hooks/useItemRef.js +1 -1
  558. package/lib/Form/component.json +161 -0
  559. package/lib/Form/index.d.ts +52 -49
  560. package/lib/Form/index.js +1 -1
  561. package/lib/FormItem/compoments/defaultCompoments/index.d.ts +5 -5
  562. package/lib/FormItem/compoments/defaultCompoments/index.js +1 -1
  563. package/lib/FormItem/compoments/formCheckboxGroup/index.d.ts +2 -2
  564. package/lib/FormItem/compoments/formFile/index.js +1 -1
  565. package/lib/FormItem/compoments/formRadioGroup/index.d.ts +1 -1
  566. package/lib/FormItem/compoments/formSelect/index.d.ts +1 -1
  567. package/lib/FormItem/component.json +171 -0
  568. package/lib/FormItem/index.d.ts +5 -5
  569. package/lib/FormItem/index.js +1 -1
  570. package/lib/FormItem/itemType.js +1 -1
  571. package/lib/FunctionModal/component.json +197 -0
  572. package/lib/FunctionModal/dialog.d.ts +1 -1
  573. package/lib/FunctionModal/modalContext.d.ts +4 -1
  574. package/lib/GlobalContext/confirmLocale.js +1 -1
  575. package/lib/GlobalContext/index.js +1 -1
  576. package/lib/Help/component.json +118 -0
  577. package/lib/HelperText/component.json +126 -0
  578. package/lib/Image/PreviewGroup.js +1 -1
  579. package/lib/Image/component.json +165 -0
  580. package/lib/Image/index.js +1 -1
  581. package/lib/InputCode/component.json +191 -0
  582. package/lib/InputCode/index.d.ts +2 -2
  583. package/lib/InputLang/component.json +205 -0
  584. package/lib/InputLang/index.js +1 -1
  585. package/lib/InputNumber/component.json +162 -0
  586. package/lib/InputNumber/index.d.ts +13 -7
  587. package/lib/InputNumber/index.js +1 -1
  588. package/lib/Label/component.json +126 -0
  589. package/lib/Label/index.d.ts +2 -2
  590. package/lib/Loading/component.json +91 -0
  591. package/lib/Menu/component.json +180 -0
  592. package/lib/Menu/verticalMenuList.js +1 -1
  593. package/lib/Message/component.json +246 -0
  594. package/lib/Message/index.d.ts +2 -2
  595. package/lib/Message/index.js +1 -1
  596. package/lib/Modal/Confirm/index.d.ts +1 -1
  597. package/lib/Modal/Confirm/index.js +1 -1
  598. package/lib/Modal/component.json +277 -0
  599. package/lib/Modal/index.d.ts +85 -5
  600. package/lib/Modal/index.js +1 -1
  601. package/lib/Modal/interface.d.ts +1 -0
  602. package/lib/MultiBox/component.json +216 -0
  603. package/lib/MultiBox/index.js +1 -1
  604. package/lib/Notification/component.json +184 -0
  605. package/lib/OperateBtn/component.json +134 -0
  606. package/lib/OperateBtn/index.d.ts +3 -3
  607. package/lib/PageHeader/component.json +112 -0
  608. package/lib/PageHeader/horizontalMeun.js +1 -1
  609. package/lib/PageHeader/horizontalMeunRight.js +1 -1
  610. package/lib/Pagination/component.json +181 -0
  611. package/lib/Pagination/index.js +1 -1
  612. package/lib/ParauiProvider/index.js +1 -1
  613. package/lib/PasswordRules/component.json +105 -0
  614. package/lib/PasswordRules/index.d.ts +4 -4
  615. package/lib/PopConfirm/component.json +227 -0
  616. package/lib/PopConfirm/index.d.ts +1 -1
  617. package/lib/PopConfirm/index.js +1 -1
  618. package/lib/PopMenu/component.json +131 -0
  619. package/lib/PopMenu/hooks.d.ts +1 -1
  620. package/lib/PopMenu/index.js +1 -1
  621. package/lib/Popover/component.json +165 -0
  622. package/lib/Popover/index.js +1 -1
  623. package/lib/Progress/component.json +161 -0
  624. package/lib/Prompt/component.json +144 -0
  625. package/lib/Querying/component.json +96 -0
  626. package/lib/Querying/index.css +1 -1
  627. package/lib/Querying/index.d.ts +2 -2
  628. package/lib/Querying/index.js +1 -1
  629. package/lib/Querying/style/index.css +1 -1
  630. package/lib/QuickReply/QuickReplyCode/index.js +1 -1
  631. package/lib/QuickReply/component.json +129 -0
  632. package/lib/QuickReply/index.d.ts +1 -1
  633. package/lib/Radio/component.json +136 -0
  634. package/lib/RadioGroup/component.json +149 -0
  635. package/lib/RangeInput/component.json +198 -0
  636. package/lib/RangeInput/index.d.ts +15 -7
  637. package/lib/RangeInput/index.js +1 -1
  638. package/lib/Result/component.json +104 -0
  639. package/lib/ScrollBar/component.json +115 -0
  640. package/lib/Search/component.json +177 -0
  641. package/lib/Search/index.d.ts +1 -1
  642. package/lib/Select/component.json +244 -0
  643. package/lib/Select/index.d.ts +11 -8
  644. package/lib/Select/index.js +1 -1
  645. package/lib/SelectInput/component.json +184 -0
  646. package/lib/SelectInput/index.d.ts +4 -4
  647. package/lib/SelectInput/index.js +1 -1
  648. package/lib/Selector/component.json +203 -0
  649. package/lib/Selector/index.js +1 -1
  650. package/lib/Selector/interface.d.ts +2 -2
  651. package/lib/Selector/selectorData/index.js +1 -1
  652. package/lib/Selector/selectorMain/index.js +1 -1
  653. package/lib/Selector/selectorNode/index.js +1 -1
  654. package/lib/Selector/util.d.ts +3 -3
  655. package/lib/Selector/util.js +1 -1
  656. package/lib/SelectorPicker/component.json +179 -0
  657. package/lib/SelectorPicker/index.d.ts +5 -5
  658. package/lib/SelectorPicker/index.js +1 -1
  659. package/lib/SingleBox/component.json +151 -0
  660. package/lib/SingleBox/index.d.ts +2 -2
  661. package/lib/Slider/component.json +181 -0
  662. package/lib/SortBox/component.json +108 -0
  663. package/lib/Status/component.json +104 -0
  664. package/lib/Stepper/component.json +129 -0
  665. package/lib/Stepper/index.d.ts +2 -2
  666. package/lib/Switch/component.json +207 -0
  667. package/lib/Switch/index.css +1 -1
  668. package/lib/Switch/index.d.ts +3 -2
  669. package/lib/Switch/index.js +1 -1
  670. package/lib/Switch/style/index.css +1 -1
  671. package/lib/Table/component.json +547 -0
  672. package/lib/Table/index.d.ts +2 -2
  673. package/lib/Table/index.js +1 -1
  674. package/lib/Table/interface.d.ts +30 -0
  675. package/lib/Table/tableHead.js +1 -1
  676. package/lib/Table/util.d.ts +1 -1
  677. package/lib/Table/util.js +1 -1
  678. package/lib/Tabs/component.json +227 -0
  679. package/lib/Tag/component.json +221 -0
  680. package/lib/Tag/index.css +1 -1
  681. package/lib/Tag/index.d.ts +1 -1
  682. package/lib/Tag/index.js +1 -1
  683. package/lib/Tag/style/index.css +1 -1
  684. package/lib/TextEditor/component.json +186 -0
  685. package/lib/TextEditor/index.d.ts +5 -5
  686. package/lib/TextEditor/index.js +1 -1
  687. package/lib/TextField/component.json +290 -0
  688. package/lib/TextField/index.d.ts +2 -2
  689. package/lib/TextField/index.js +1 -1
  690. package/lib/TimePicker/component.json +176 -0
  691. package/lib/Timeline/component.json +110 -0
  692. package/lib/Title/component.json +156 -0
  693. package/lib/ToggleButton/component.json +153 -0
  694. package/lib/ToggleButton/index.js +1 -1
  695. package/lib/Tooltip/component.json +176 -0
  696. package/lib/Tooltip/index.js +1 -1
  697. package/lib/Tooltip/interface.d.ts +14 -1
  698. package/lib/Tooltip/utils.js +1 -1
  699. package/lib/Transfer/component.json +157 -0
  700. package/lib/Tree/OperateBar/index.js +2 -2
  701. package/lib/Tree/Tree.js +1 -1
  702. package/lib/Tree/component.json +512 -0
  703. package/lib/Tree/interface.d.ts +1 -1
  704. package/lib/Upload/component.json +450 -0
  705. package/lib/Upload/util.js +1 -1
  706. package/lib/Utils/snack-kit-shims.d.ts +18 -0
  707. package/lib/Utils/snack-kit-shims.js +2 -0
  708. package/lib/Utils/type.d.ts +0 -6
  709. package/lib/_virtual/index.js +1 -1
  710. package/lib/_virtual/index2.js +1 -1
  711. package/lib/index.d.ts +4 -0
  712. package/lib/index.js +1 -1
  713. package/lib/locale/en-US.d.ts +3 -0
  714. package/lib/locale/en-US.js +1 -1
  715. package/lib/locale/en_US.d.ts +361 -0
  716. package/lib/locale/en_US.js +2 -0
  717. package/lib/locale/index.d.ts +1 -723
  718. package/lib/locale/index2.js +2 -0
  719. package/lib/locale/zh-CN.d.ts +3 -0
  720. package/lib/locale/zh-CN.js +1 -1
  721. package/lib/locale/zh_CN.d.ts +361 -0
  722. package/lib/locale/zh_CN.js +2 -0
  723. package/lib/node_modules/classnames/index.js +1 -1
  724. package/package.json +24 -4
  725. package/es/_virtual/index3.js +0 -5
  726. package/es/_virtual/index4.js +0 -5
  727. package/es/node_modules/@para-snack/core/dist/index.js +0 -5231
  728. package/lib/_virtual/index3.js +0 -2
  729. package/lib/_virtual/index4.js +0 -2
  730. package/lib/node_modules/@para-snack/core/dist/index.js +0 -20
  731. /package/es/{InputCode → CodeEditor}/index.css +0 -0
  732. /package/es/{Utils/Hooks → Hooks}/useResizeObserver.d.ts +0 -0
  733. /package/es/{Utils/Hooks → Hooks}/useResizeObserver.js +0 -0
  734. /package/lib/{Utils/Hooks → Hooks}/useResizeObserver.d.ts +0 -0
  735. /package/lib/{Utils/Hooks → Hooks}/useResizeObserver.js +0 -0
@@ -0,0 +1,278 @@
1
+ {
2
+ "name": "DynamicMultiBox",
3
+ "category": "Data Entry",
4
+ "description": "动态多行表单,支持动态增删行 + 拖拽排序 + 字段级错误反馈。**封装协议:外部以业务对象数组传入,内部维护 valueList + errors 双 state(必须双 state,见 commonPatterns.wrapperPattern)**",
5
+ "semantic": {
6
+ "intent": [
7
+ "动态表单",
8
+ "多行录入",
9
+ "支持拖拽 + 行级错误反馈"
10
+ ],
11
+ "useCases": [
12
+ "批量参数 / 联系人录入",
13
+ "规则配置(条件 → 动作)",
14
+ "可排序步骤配置(工作流)",
15
+ "动态字段表单(字段配置由父组件传入)"
16
+ ],
17
+ "riskLevel": "normal"
18
+ },
19
+ "r23FailingScenarios": {
20
+ "scenario_003_TS2538_undefined_index": {
21
+ "failedRequirement": "DynamicMultiBox-003 可拖拽排序的步骤配置",
22
+ "wrongCode": "const errRow: IErrors = { id: s.id };\nfieldConfig.forEach((cfg: IConfig) => {\n errRow[cfg.name] = ''; // ❌ TS2538 'Type undefined cannot be used as an index type'\n});",
23
+ "rootCause": "**IConfig.name 在 v5.x 类型严格化后是 `string | undefined`**(非必填字段)。直接用 cfg.name 做对象索引时 TS 拒绝(undefined 不能作为索引)",
24
+ "fixedCode": "const errRow: IErrors = { id: s.id };\nfieldConfig.forEach((cfg: IConfig) => {\n if (cfg.name) errRow[cfg.name] = ''; // ✅ narrow 后再索引\n});",
25
+ "alternativeFix": "// 或用 ! 非空断言(已知 config 项必有 name):\nfieldConfig.forEach((cfg: IConfig) => {\n errRow[cfg.name!] = '';\n});"
26
+ },
27
+ "scenario_006_TS2352_rest_spread_unknown": {
28
+ "failedRequirement": "DynamicMultiBox-006 标准联系人录入",
29
+ "wrongCode": "interface Contact { name: string; phone: string; email: string; }\nconst valueListToContacts = (valueList: IValueList[]): Contact[] =>\n valueList.map(({ id, ...rest }) => rest as Contact); // ❌ TS2352",
30
+ "rootCause": "对 IValueList 做 `{id, ...rest}` 解构后,TS 把 rest 推断为 `{[x: string]: unknown}`(索引签名)。**unknown 索引签名 → 具体业务类型** 直接 `as Contact` 被 TS 5.x 拒绝(类型不充分重叠)",
31
+ "fixedCode": "const valueListToContacts = (valueList: IValueList[]): Contact[] =>\n valueList.map(({ id, ...rest }) => rest as unknown as Contact); // ✅ unknown 中转",
32
+ "alternativeFix": "// 或显式字段映射(更类型安全):\nconst valueListToContacts = (valueList: IValueList[]): Contact[] =>\n valueList.map(({ name, phone, email }) => ({ name, phone, email } as Contact));"
33
+ }
34
+ },
35
+ "titleModeBehavior": {
36
+ "all": "**默认值**。每列在表格顶部独立显示 IConfig.label —— '第一数据行上方有列标题'就是 all。典型表格效果",
37
+ "none": "完全隐藏所有标题。所有列单元格直接从表顶开始,无任何 label",
38
+ "single": "**整张表只有 1 个合并标题行**(跨所有列居中显示 singleTitle.label),不是'只在第一行显示列标题'。配合 singleTitle prop = `{ label: ReactNode, required: boolean }` 配置文案。**误解警告**:需求描述'只在第一行显示标题'通常想要的是 all(每列独立标题),不是 single(整表 1 个合并标题)",
39
+ "domStructure": "// all:\n// <thead>列1 label | 列2 label | 列3 label</thead>\n// <tbody>行 1 数据 | 行 2 数据 | ...</tbody>\n//\n// single:\n// <thead>singleTitle.label (跨列居中)</thead>\n// <tbody>行 1 数据 | 行 2 数据 | ...</tbody>\n//\n// none:\n// <tbody>行 1 数据 | 行 2 数据 | ...</tbody>(无 thead)"
40
+ },
41
+ "variants": {
42
+ "default": {
43
+ "meaning": "默认样式"
44
+ }
45
+ },
46
+ "states": [
47
+ "default",
48
+ "error"
49
+ ],
50
+ "idealProps": {
51
+ "config": {
52
+ "type": "IConfig[]",
53
+ "description": "每列配置数组:[{ name, label, inputType, isFixed, required, list?, customRender? }];**name 必须等于 valueList[*][name] —— 否则该列读不到值**。注意 IConfig.name 类型签名是 `string | undefined`(R23 003 fail 根因 —— 见 r23FailingScenarios)。**inputType 是 IInputType 严格 union(必须 PascalCase · 不是 HTML lowercase)**:`'TextField' | 'Select' | 'Switch' | 'InputNumber' | 'InputLang' | 'ComboSelect' | 'DatePicker' | 'custom'`。⚠️ **不要写 inputType: 'text' / 'date' / 'select'(HTML 风格 · TS 编译报错 · runtime 不渲染)**。完整 schema 签名见 `dist/es/DynamicMultiBox/interface.d.ts`(发布产物)",
54
+ "required": true
55
+ },
56
+ "valueList": {
57
+ "type": "IValueList[]",
58
+ "description": "受控值集合 [{ id: string, [name]: any }];初始 id 由调用方维护;点击新增时组件 UUID 自动生成新行 id 并通过 onAdd 回填",
59
+ "required": true
60
+ },
61
+ "errors": {
62
+ "type": "IErrors[]",
63
+ "description": "每行错误集合,结构同 valueList,**按 id 一一对应**;无错误字段留空字符串占位。**调用方必须维护 errors state**,在 onAdd/onDelete 回调里用第二参数同步(见 wrapperPattern)"
64
+ },
65
+ "onChange": {
66
+ "type": "(valueList, currentItem) => void",
67
+ "description": "单元格值变化回调(不在新增/删除/拖拽时触发);currentItem 含 id/name/value/rowIndex 用于行内校验"
68
+ },
69
+ "onAdd": {
70
+ "type": "(valueList, errors) => void",
71
+ "description": "点击新增按钮触发;valueList 已含新行(id 由组件生成);**回调第二参数已是同步后的新 errors(含新行空占位),不要忽略**"
72
+ },
73
+ "onDelete": {
74
+ "type": "(valueList, errors) => void",
75
+ "description": "点击删除按钮触发;valueList 已剔除该行;errors 同步剔除对应行"
76
+ },
77
+ "titleMode": {
78
+ "type": "enum",
79
+ "values": [
80
+ "none",
81
+ "single",
82
+ "all"
83
+ ],
84
+ "default": "all",
85
+ "description": "见 titleModeBehavior:all=每列独立 label(常见表格效果);none=隐藏所有标题;**single=整表 1 个合并标题**(不是'只在第一行显示列标题',此处常被误解)"
86
+ },
87
+ "singleTitle": {
88
+ "type": "{ label: ReactNode, required: boolean }",
89
+ "description": "titleMode='single' 时的合并标题配置(必须传)"
90
+ },
91
+ "isSort": {
92
+ "type": "boolean",
93
+ "default": false,
94
+ "description": "true 启用拖拽排序;需配合 onSort 接收新顺序;拖拽时不触发 onChange"
95
+ },
96
+ "onSort": {
97
+ "type": "(newValueList, swapIds) => void",
98
+ "description": "排序回调;swapIds 是位置变动行的下标集合,非 [from,to] 对"
99
+ },
100
+ "initValue": {
101
+ "type": "Record<string, any>",
102
+ "description": "新增行字段默认值(不含 id)"
103
+ },
104
+ "isFilter": {
105
+ "type": "boolean",
106
+ "default": false,
107
+ "description": "true 启用列筛选下拉(用户可在 UI 中切换显示哪些列)"
108
+ },
109
+ "checkedValue": {
110
+ "type": "string[]",
111
+ "description": "配合 isFilter=true 使用 —— 当前筛选下拉中'已勾选展示'的列 key 数组。`isFilter=false`(默认)时无需传"
112
+ },
113
+ "filterConfig": {
114
+ "type": "IConfig[]",
115
+ "description": "筛选下拉中可勾选的可选列(结构同 IConfig),配合 isFilter=true + checkedValue 使用"
116
+ }
117
+ },
118
+ "commonMisconceptions": {
119
+ "M1": {
120
+ "wrong": "对 IConfig.name 直接做对象索引: `errRow[cfg.name] = ''`",
121
+ "result": "**TS2538 'Type undefined cannot be used as an index type'** —— IConfig.name 类型 `string | undefined`(R23 DynamicMultiBox-003 fail 根因)",
122
+ "fix": "narrow 后再索引: `if (cfg.name) errRow[cfg.name] = ''` 或 `errRow[cfg.name!] = ''`(非空断言)"
123
+ },
124
+ "M2": {
125
+ "wrong": "用 `{id, ...rest} = item; rest as Contact` 把 IValueList 转业务类型",
126
+ "result": "**TS2352 'Conversion may be a mistake because neither type sufficiently overlaps'** —— rest 是 unknown 索引签名,直接 as 业务类型被 TS 5.x 拒绝(R23 DynamicMultiBox-006 fail 根因)",
127
+ "fix": "用 `as unknown as Contact` 中转,或显式字段映射 `({ name, phone, email })`"
128
+ },
129
+ "M3": {
130
+ "wrong": "onAdd / onDelete 只接受单参数 valueList: `onAdd={(valueList) => setValueList(valueList)}`",
131
+ "result": "**errors state 与 valueList 不同步** —— 新行没有对应 errors 占位,该行渲染时查 errors 失败显示异常",
132
+ "fix": "双参数 + 双 setState: `onAdd={(valueList, errors) => { setValueList(valueList); setErrors(errors); }}`"
133
+ },
134
+ "M4": {
135
+ "wrong": "把 titleMode='single' 当成'只在第一行显示列标题',期望第 1 行上方有列标题、其余行无",
136
+ "result": "**single 实际是'整表 1 个合并标题'**(跨所有列居中),不是按行/列粒度的控制",
137
+ "fix": "需要'每列独立标题'(常见表格):用默认的 titleMode='all'(或不传)。需要'整表 1 合并标题':用 single + singleTitle prop"
138
+ },
139
+ "M5": {
140
+ "wrong": "在 fieldConfig 变化时不重置 errors state,继续用旧 errors",
141
+ "result": "字段集合变化后,errors 旧 key 残留,新 key 缺占位 → 渲染异常",
142
+ "fix": "用 useMemo 或 useEffect 监听 fieldConfig 变化,重新调用 buildEmptyErrors(valueList, fieldConfig) 重建 errors"
143
+ }
144
+ },
145
+ "do": [
146
+ "封装包装组件时,valueList + errors 都必须维护 state(双 state 联动 — 见 commonPatterns.wrapperPattern)",
147
+ "**onAdd / onDelete 必须接受双参数**(valueList, errors)并同时 setValueList + setErrors(M3)",
148
+ "**初始化 errors** 时用 narrow 写法: `if (cfg.name) errRow[cfg.name] = ''`(M1,R23 003 fail 修复)",
149
+ "**业务类型转换** rest 解构后用 `as unknown as Contact` 中转(M2,R23 006 fail 修复)",
150
+ "fieldConfig 动态变化时:重新计算 errors,避免 key 不对齐(M5)",
151
+ "需要每列独立标题用 titleMode='all',需要整表合并 1 个标题用 'single' + singleTitle(M4)"
152
+ ],
153
+ "dont": [
154
+ "行数过多时不分页",
155
+ "每行字段过多导致布局拥挤",
156
+ "**onAdd / onDelete 只接受 valueList 一个参数**(M3,errors 不同步)",
157
+ "**直接 `errRow[cfg.name] = ''` 不做 narrow**(M1,TS2538)",
158
+ "**`valueList.map(({ id, ...rest }) => rest as Contact)`** 缺 unknown 中转(M2,TS2352)",
159
+ "**把 titleMode='single' 当作'只第一行有标题'**(M4)"
160
+ ],
161
+ "commonPatterns": {
162
+ "wrapperPattern": {
163
+ "scenario": "封装 DynamicMultiBox 为业务组件(如 SortableStepsForm / ContactsEntryForm),外部以业务对象数组传入,内部维护 valueList + errors 双 state",
164
+ "code": "import React, { FC, useState, useMemo } from 'react';\nimport DynamicMultiBox from '@para-ui/core/DynamicMultiBox';\nimport type { IConfig, IErrors, IValueList } from '@para-ui/core/DynamicMultiBox/interface';\n\ninterface SortableStepsFormProps {\n fieldConfig: IConfig[];\n steps: Array<Record<string, any>>;\n onStepsChange: (next: Array<Record<string, any>>) => void;\n}\n\n// 工具:把 fieldConfig 转为 errors 空占位行(M1 narrow 修法)\nconst buildEmptyErrors = (valueList: IValueList[], fieldConfig: IConfig[]): IErrors[] =>\n valueList.map(row => {\n const errRow: IErrors = { id: row.id };\n fieldConfig.forEach(cfg => {\n if (cfg.name) errRow[cfg.name] = ''; // ⚠️ narrow:cfg.name 是 string | undefined\n });\n return errRow;\n });\n\nconst SortableStepsForm: FC<SortableStepsFormProps> = ({ fieldConfig, steps, onStepsChange }) => {\n const [valueList, setValueList] = useState<IValueList[]>(steps as IValueList[]);\n const [errors, setErrors] = useState<IErrors[]>(\n () => buildEmptyErrors(steps as IValueList[], fieldConfig)\n );\n\n return (\n <DynamicMultiBox\n config={fieldConfig}\n valueList={valueList}\n errors={errors}\n isSort\n onChange={(next) => { setValueList(next); onStepsChange(next); }}\n onAdd={(next, nextErrors) => { // ✅ 必须接受双参数\n setValueList(next);\n setErrors(nextErrors); // ✅ errors 同步\n onStepsChange(next);\n }}\n onDelete={(next, nextErrors) => { // ✅ 必须接受双参数\n setValueList(next);\n setErrors(nextErrors);\n onStepsChange(next);\n }}\n onSort={(newList) => { setValueList(newList); onStepsChange(newList); }}\n />\n );\n};\n"
165
+ },
166
+ "businessTypeMappingPattern": {
167
+ "scenario": "外部以业务 Contact[] 类型受控,IValueList[] 与 Contact[] 双向映射(R23 DynamicMultiBox-006 fail 修复版本)",
168
+ "code": "interface Contact { name: string; phone: string; email: string; }\n\n// IN: Contact[] → IValueList[](补 id)\nconst contactsToValueList = (contacts: Contact[]): IValueList[] =>\n contacts.map((c, i) => ({ id: String(i + 1), ...c }));\n\n// OUT: IValueList[] → Contact[](剔除 id,业务类型转换)\n// ⚠️ 关键:rest 解构后 TS 推断为 { [x: string]: unknown },要 as unknown 中转\nconst valueListToContacts = (valueList: IValueList[]): Contact[] =>\n valueList.map(({ id, ...rest }) => rest as unknown as Contact);\n\n// 替代:显式字段映射(更类型安全,IDE 跳转友好)\nconst valueListToContactsExplicit = (valueList: IValueList[]): Contact[] =>\n valueList.map(({ name, phone, email }) => ({ name, phone, email } as Contact));\n"
169
+ }
170
+ },
171
+ "events": {
172
+ "onChange": {
173
+ "signature": "(valueList: IValueList<T>[], currentItem?: ICurrentItem<T>) => void",
174
+ "asyncSupported": false,
175
+ "examples": [
176
+ "同步整表值:onChange={(list) => setValueList(list)}",
177
+ "利用 currentItem 做行内校验:onChange={(list, cur) => { setValueList(list); validateRow(cur.rowIndex, cur.name, cur.value); }}",
178
+ "currentItem 包含 { name, value, rowIndex, id }——可精确定位是哪行哪字段发生了变化"
179
+ ],
180
+ "commonMistakes": [
181
+ "在 onChange 里同时 setErrors——onChange 只在单元格值变化时触发,不涉及 errors;errors 同步在 onAdd/onDelete 完成",
182
+ "假设 onChange 在新增/删除/拖拽时也触发——这三种操作分别走 onAdd/onDelete/onSort 回调",
183
+ "onChange 第二参数 currentItem 的 name 是 keyof T & string——与 IConfig.name 类型一致,可直接做对象索引"
184
+ ]
185
+ },
186
+ "onAdd": {
187
+ "signature": "(valueList: IValueList<T>[], errors: IErrors<T>[]) => void",
188
+ "asyncSupported": false,
189
+ "examples": [
190
+ "双 state 同步(必须):onAdd={(list, errs) => { setValueList(list); setErrors(errs); }}",
191
+ "同时通知父组件:onAdd={(list, errs) => { setValueList(list); setErrors(errs); onStepsChange(list); }}"
192
+ ],
193
+ "commonMistakes": [
194
+ "只接受一个参数 valueList,忽略 errors——errors 不同步导致新行渲染异常(TS 签名有第二参数)",
195
+ "在 onAdd 里手动构造 errors 新行——组件已帮你构造好新行空占位 errors,直接 setErrors(errs) 即可",
196
+ "期望 onAdd 触发后 valueList 还是旧数据加上新行——onAdd 第一参数已是含新行的新数组"
197
+ ]
198
+ },
199
+ "onDelete": {
200
+ "signature": "(valueList: IValueList<T>[], errors: IErrors<T>[]) => void",
201
+ "asyncSupported": false,
202
+ "examples": [
203
+ "双 state 同步:onDelete={(list, errs) => { setValueList(list); setErrors(errs); }}",
204
+ "配合业务通知:onDelete={(list, errs) => { setValueList(list); setErrors(errs); onStepsChange(list); }}"
205
+ ],
206
+ "commonMistakes": [
207
+ "只接受 valueList 忽略 errors 第二参数——errors 不同步,行对应关系错位(id 对不上)",
208
+ "期望 keepLastItem=true 时最后一行也能删——keepLastItem=true(默认)时只剩 1 行时删除图标隐藏,onDelete 不触发"
209
+ ]
210
+ },
211
+ "onSort": {
212
+ "signature": "(newValueList: IValueList<T>[], swapIds?: number[]) => void",
213
+ "asyncSupported": false,
214
+ "examples": [
215
+ "同步排序后的顺序:onSort={(newList) => setValueList(newList)}",
216
+ "swapIds 是位置变动行的下标集合,不是 [from, to] 对:onSort={(newList, swapIds) => console.log(swapIds)}"
217
+ ],
218
+ "commonMistakes": [
219
+ "把 swapIds 当作 [fromIndex, toIndex] 对使用——实际是所有位置变动行的下标集合",
220
+ "onSort 里同时重建 errors——拖拽排序不改变行数,errors 的行数不变;只需按 newList 顺序重排 errors(用 rowKey 映射)",
221
+ "期望 isSort=true 自动维护排序——isSort 只开启 UI 拖拽,newList 必须通过 onSort 回调同步到父组件 state"
222
+ ]
223
+ },
224
+ "onFilter": {
225
+ "signature": "(data: IFilterParams<T>) => void",
226
+ "asyncSupported": false,
227
+ "examples": [
228
+ "监听筛选变化:onFilter={(data) => console.log(data.checkedVal, data.valueList)}",
229
+ "data 包含 { name, checkedVal, valueList, errors }——列筛选变化时的完整快照"
230
+ ],
231
+ "commonMistakes": [
232
+ "期望 isFilter=false 时 onFilter 也触发——isFilter 必须为 true 才显示筛选 UI",
233
+ "假设 onFilter 替代 onChange——onFilter 只在列筛选器操作时触发,单元格值变化走 onChange"
234
+ ]
235
+ }
236
+ },
237
+ "typescriptPitfalls": [
238
+ {
239
+ "issue": "IConfig.name 类型是 keyof T & string(可能含 undefined),直接用作对象索引报 TS2538",
240
+ "wrong": "const errRow: IErrors = { id: s.id };\nfieldConfig.forEach((cfg: IConfig) => {\n errRow[cfg.name] = ''; // TS2538: 'undefined' cannot be used as an index type\n});",
241
+ "right": "fieldConfig.forEach((cfg: IConfig) => {\n if (cfg.name) errRow[cfg.name] = ''; // narrow 后再索引\n // 或:errRow[cfg.name!] = ''; // 非空断言(已知 name 必有值时)\n});"
242
+ },
243
+ {
244
+ "issue": "IValueList 解构后 rest 是 unknown 索引签名,直接 as 具体类型被 TS 5.x 拒绝",
245
+ "wrong": "const toContact = (item: IValueList): Contact =>\n (({ id, ...rest }) => rest as Contact)(item); // TS2352: not sufficiently overlapping",
246
+ "right": "const toContact = (item: IValueList): Contact =>\n (({ id, ...rest }) => rest as unknown as Contact)(item); // 先转 unknown 再转目标类型"
247
+ },
248
+ {
249
+ "issue": "IConfig.inputType 只接受 PascalCase 严格枚举,不接受 HTML 小写风格",
250
+ "wrong": "{ inputType: 'text' } // 或 'date'、'select'——TS 报错,runtime 不渲染",
251
+ "right": "{ inputType: 'TextField' } // 或 'Select'、'DatePicker'、'Switch'、'InputNumber'——PascalCase"
252
+ },
253
+ {
254
+ "issue": "onAdd/onDelete 是双参数签名,只声明单参数会导致 errors 不同步(TS 不会报错但逻辑错误)",
255
+ "wrong": "onAdd={(valueList) => setValueList(valueList)} // errors 参数丢失,新行无占位",
256
+ "right": "onAdd={(valueList, errors) => { setValueList(valueList); setErrors(errors); }} // 两个 state 同时同步"
257
+ },
258
+ {
259
+ "issue": "IMultiValueProps 是泛型 <T extends Record<string, unknown>>,使用具体业务类型时需传泛型参数",
260
+ "wrong": "// 不传泛型,render/onChange 里 row/currentItem 的字段是 unknown\n<DynamicMultiBox config={config} valueList={valueList} />",
261
+ "right": "// 传泛型,类型推断正确\nconst config: IConfig<Contact>[] = [...];\nconst valueList: IValueList<Contact>[] = [...];\n<DynamicMultiBox<Contact> config={config} valueList={valueList} />"
262
+ },
263
+ {
264
+ "issue": "泛型 T 必须满足 Record<string, unknown> 约束,普通 interface 没有 index signature 会报 TS2344",
265
+ "wrong": "interface Param { foo: string } // 没有 index signature\n<DynamicMultiBox<Param> ... /> // TS2344: Type 'Param' does not satisfy the constraint 'Record<string, unknown>'. Index signature for type 'string' is missing in type 'Param'.",
266
+ "right": "interface Param { foo: string; [key: string]: unknown } // 加 index signature\n// 或用 type 别名: type Param = { foo: string } & Record<string, unknown>\n<DynamicMultiBox<Param> ... /> // 编译通过"
267
+ },
268
+ {
269
+ "issue": "IConfig / IValueList 等类型必须从 @para-ui/core/DynamicMultiBox 导入,不是子路径 /interface",
270
+ "wrong": "import type { IConfig } from '@para-ui/core/DynamicMultiBox/interface'; // TS2307: Cannot find module",
271
+ "right": "import type { IConfig, IValueList } from '@para-ui/core/DynamicMultiBox';"
272
+ }
273
+ ],
274
+ "mapping": {
275
+ "realComponent": "DynamicMultiBox",
276
+ "adapter": null
277
+ }
278
+ }
@@ -5,7 +5,7 @@ export type IFormItem = {
5
5
  /** 错误集合*/
6
6
  errors?: IErrors[];
7
7
  /**回调 */
8
- onChange?: (id: string, value: any) => void;
8
+ onChange?: (id: string, value: unknown) => void;
9
9
  /** 渲染数据*/
10
10
  formItemProps?: IConfig;
11
11
  };
@@ -1,5 +1,5 @@
1
- import { FunctionComponent } from 'react';
1
+ import { default as React } from 'react';
2
2
  import { IMultiValueProps } from './interface';
3
- declare const DynamicMultiBox: FunctionComponent<IMultiValueProps>;
3
+ declare const DynamicMultiBox: <T extends Record<string, unknown> = Record<string, unknown>>(props: IMultiValueProps<T>) => React.ReactElement | null;
4
4
  export default DynamicMultiBox;
5
5
  export type * from './interface';
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./index.css');const r=require("../_virtual/jsx-runtime.js"),m=require("react"),Ne=require("../Popover/index.js"),ne=require("../Label/index.js"),Ae=require("../CheckboxGroup/index.js"),ke=require("../node_modules/@para-ui/icons/Panel/index.js"),qe=require("../node_modules/@para-ui/icons/PlusCircleF/index.js"),ye=require("../node_modules/@para-ui/icons/Delete/index.js"),De=require("../node_modules/@para-ui/icons/Drag/index.js"),Se=require("./rowForm.js"),$e=require("@paraview/lib"),Be=require("react-sortablejs"),oe=require("../GlobalContext/constant.js"),Fe=require("../GlobalContext/useFormatMessage.js"),Te=require("./lang/index.js");;/* empty css */const ie=require("../Tooltip/index.js"),we=le=>{const{rowKey:u="id",valueList:i=[],config:g=[],errors:R=[],isSort:v=!1,isFilter:S=!1,className:P,disabledAdd:H=!1,disabledAddTooltip:$,titleMode:B="all",checkedValue:F,icon:ce,deleteDisable:b=[],singleTitle:O,initValue:ae,popoverClassName:_,operationButtons:C=[],onChange:U,onAdd:z,onFilter:q,onDelete:G,deleteRender:T,onSort:K,keepLastItem:N=!0}=le,y=Fe.default("DynamicMultiBox",Te.default),[p,w]=m.useState([]),W=m.useRef(null),V=m.useRef(null),[A,ue]=m.useState([]),[k,J]=m.useState([]),L=m.useRef({});m.useEffect(()=>(window.addEventListener("resize",D),()=>{window.removeEventListener("resize",D),clearTimeout(L.current.timerScroll)}),[]),m.useEffect(()=>{F&&w(F)},[F]),m.useEffect(()=>{if(!g?.length)return;const e=g?.filter(t=>t.isFixed)||[];ue(e)},[g]),m.useEffect(()=>{if(!g?.length)return;const e=g?.filter(t=>!t.isFixed&&p?.includes(t.name))||[];J(e)},[g,p]);const Q=e=>{const t=e?.length>p?.length,s=ve(e,p);let n=[...i],o=[...R];t?(n=I(n,s),o=I(o,s)):(Z(n,s),Z(o,s)),w(e),q&&q({name:s,checkedVal:e,valueList:n,errors:o}),D()},D=()=>{const e=W?.current;if(!e)return;const t=e.querySelector(".multi-value-content");if(!t)return;const s=e.querySelector(".add-button");s&&(clearTimeout(L.current.timerScroll),L.current.timerScroll=setTimeout(()=>{t.offsetWidth<t.scrollWidth?s.classList.add("add-button-scroll"):s.classList.remove("add-button-scroll")},50))},X=()=>{if(!p?.length)return;const e=[...i],t=[...R];Y(e,p),Y(t,p),w([]),J([]),q&&q({valueList:e,errors:t}),D()},Y=(e,t)=>{e.forEach(s=>{for(const n in s)t.includes(n)&&delete s[n]})},Z=(e=[],t)=>{e.forEach(s=>{for(const n in s)n===t&&delete s[n]})},I=(e,t)=>e.map(s=>({...s,[t]:""})),de=()=>{const e=g.filter(t=>!t.isFixed);return r.jsxRuntimeExports.jsx(r.jsxRuntimeExports.Fragment,{children:e&&e?.length>0?r.jsxRuntimeExports.jsxs("div",{className:"filter-config",children:[r.jsxRuntimeExports.jsxs("div",{className:"check-list",children:[r.jsxRuntimeExports.jsx("div",{className:"title",children:y({id:"titleForm"})}),r.jsxRuntimeExports.jsx(Ae.CheckboxGroup,{list:e,row:!1,value:p,onChange:Q})]}),r.jsxRuntimeExports.jsx("div",{className:"restore-default",onClick:X,children:y({id:"default"})})]}):r.jsxRuntimeExports.jsx("div",{className:"no-other-property",children:y({id:"noData"})})})},xe=()=>{let e=`${oe.$prefixCls}-dynamic-multi-box-popover`;return _&&(e+=` ${_}`),e},ee=()=>{let e=!0;if(i.length>b.length)return!1;for(let t=0,s=i?.length;t<s;t++){const n=i[t]?.[u];if(n&&b.indexOf(n)===-1){e=!1;break}}return e},me=(e,t,s)=>{const{key:n,icon:o,text:a,disabled:c,onClick:E,render:d,className:h,tooltip:f}=e;if(d)return r.jsxRuntimeExports.jsx("div",{className:`operator-column-icon operation-button ${h||""}`,children:d(t,s,i)},n);const j=typeof c=="function"?c(t,s,i):c,l=r.jsxRuntimeExports.jsxs("div",{className:`operator-column-icon operation-button ${h||""} ${j?"disabled-operation":""}`,onClick:()=>!j&&E(t,s,i),children:[o,a&&r.jsxRuntimeExports.jsx("span",{className:"operation-text",children:a})]});return f?r.jsxRuntimeExports.jsx(ie.Tooltip,{disabled:j,placement:f.placement||"top",...f,children:l},n):l},fe=(e,t,s,n)=>{const o=[],a=[...C].sort((l,x)=>(l.order||3)-(x.order||3)),c=[],E=[],d=[],h=[];a.forEach(l=>{const x=me(l,e,t);switch(l.order!==void 0?l.order:3){case 0:c.push(x);break;case 1:E.push(x);break;case 2:d.push(x);break;default:h.push(x);break}}),c.forEach(l=>{o.push(l)});const f=r.jsxRuntimeExports.jsx("div",{className:`operator-column-icon delete-icon ${!s||b.includes(t?.[u]||"")?"hidden-icon":""}`,onClick:()=>je(e),children:T?T(e,t,i):r.jsxRuntimeExports.jsx(ye.Delete,{})},"delete-button");if(s&&!b.includes(t[u])&&o.push(f),E.forEach(l=>{o.push(l)}),v&&s){const l=r.jsxRuntimeExports.jsx("div",{className:`sort-handler operator-column-icon ${s?"":"hidden-icon"}`,children:r.jsxRuntimeExports.jsx(De.Drag,{})},"sort-handler");o.push(l)}d.forEach(l=>{o.push(l)}),h.forEach(l=>{o.push(l)});const j=[];return o.forEach((l,x)=>{j.push(l),x<o.length-1&&j.push(r.jsxRuntimeExports.jsx("div",{className:"center-line",children:r.jsxRuntimeExports.jsx("div",{className:"line"})},`divider-${x}`))}),r.jsxRuntimeExports.jsx(r.jsxRuntimeExports.Fragment,{children:j})},M=(e,t,s,n,o=!1)=>{const a=i.length===1&&s===0;let c=0;return o||!a?((!N||i.length>1)&&c++,v&&c++,c+=C?.length||0):(e&&!b.includes(n[u]||"")&&c++,v&&e&&c++,c+=C?.length||0),pe(c)},pe=e=>{switch(e){case 0:case 1:return"operator-column-40";case 2:return"operator-column-80";case 3:return"operator-column-120";case 4:return"operator-column-160";default:return"operator-column-200"}},he=m.useMemo(()=>{const e=[...A,...k];if(!e?.length)return null;const t=N?i.length>1:!0,s=ee();let n="operator-column-40";return i.length===1?n=M(t,s,0,i[0],!1):n=M(t,s,0,i[0],!0),r.jsxRuntimeExports.jsxs("div",{className:"title-config",children:[B==="all"?r.jsxRuntimeExports.jsx("div",{className:"title-config-row",children:e?.map((o,a)=>{const{label:c,required:E,className:d,inputType:h,style:f,labelProps:j}=o;let l="title-config-row-item";h==="Switch"&&(l+=" row-form-switch"),d&&(l+=` ${d}`);const x={...f};return!f?.width&&!f?.flex&&(x.flex=1),r.jsxRuntimeExports.jsx("div",{className:l,style:x,children:r.jsxRuntimeExports.jsx(ne.default,{required:E,label:c,...j})},a)})}):B==="single"?r.jsxRuntimeExports.jsx(ne.default,{required:O?.required,label:O?.label}):null,r.jsxRuntimeExports.jsxs("div",{className:n,children:[v&&r.jsxRuntimeExports.jsx("div",{className:"blank-block"}),S&&r.jsxRuntimeExports.jsx(Ne.Popover,{placement:"bottom-end",content:de(),getPopupContainer:()=>V.current||document.body,overlayClassName:xe(),children:r.jsxRuntimeExports.jsx("div",{className:"operator-column-icon-panel",ref:V,children:r.jsxRuntimeExports.jsx("div",{className:"svg-box",children:r.jsxRuntimeExports.jsx(ke.Panel,{})})})})]})]})},[B,A,k,v,S,p,Q,X,u,N,i,b,C]),te=m.useMemo(()=>{if(i&&i?.length>0){const e=N?i.length>1:!0,t=[...A,...k],s=ee();return r.jsxRuntimeExports.jsx(r.jsxRuntimeExports.Fragment,{children:i.map((n,o)=>{const a=n[u],c=R?.filter(d=>d[u]===a)?.[0],E=M(e,s,o,n);return r.jsxRuntimeExports.jsxs("div",{className:"content-row-form",children:[r.jsxRuntimeExports.jsx(Se.default,{rowIndex:o,valueList:i,errors:R,rowError:c,onFormItemChange:(d,h,f)=>Ee(d,h,f,o),icon:ce,config:t}),r.jsxRuntimeExports.jsx("div",{className:E,children:fe(o,n,e)})]},a)})})}},[i,v,S,R,A,k,N,T,u,b,C]),je=e=>{const t=[...i],s=[...R];t.splice(e,1),s.splice(e,1),G&&G(t,s)},Ee=(e,t,s,n)=>{const o=[...i];Object.keys(o[n]).forEach(a=>{e===a&&(o[n][a]=s)}),U&&U(o,{name:e,id:t,value:s,rowIndex:n})},ge=()=>{if(H)return;const e=[...i||[]],t=[...R],s=$e.UUID(),n=[...A,...k];e.push({...se(n,"value"),[u]:s}),t.push({...se(n,"error"),[u]:s}),z&&z(e,t)},se=(e,t)=>e.reduce((s,n)=>({...s,[n.name]:t==="value"?ae?.[n.name]:""}),{}),Re=e=>{const t=e.reduce((n,o,a)=>({...n,[o[u]]:a}),{}),s=[];i.forEach((n,o)=>{o!==t[n[u]]&&s.push(o)}),K&&K(e,s)},ve=(e,t)=>e.concat(t).filter(s=>!e.includes(s)||!t.includes(s))[0],re=()=>r.jsxRuntimeExports.jsxs("div",{className:`add-button ${H?"disabled-add":"normal-button"}`,onClick:ge,children:[r.jsxRuntimeExports.jsx(qe.PlusCircleF,{}),r.jsxRuntimeExports.jsx("span",{className:"text",children:y({id:"add"})})]}),be=()=>$?r.jsxRuntimeExports.jsx(ie.Tooltip,{disabled:!0,placement:$.placement||"top",...$,children:re()}):re(),Ce=()=>{let e=`${oe.$prefixCls}-dynamic-multi-box`;return P&&(e+=` ${P}`),e};return r.jsxRuntimeExports.jsxs("div",{className:Ce(),ref:W,children:[r.jsxRuntimeExports.jsxs("div",{className:"multi-value-content",children:[he,v&&Array.isArray(i)&&i.length>0?r.jsxRuntimeExports.jsx(Be.ReactSortable,{id:u,list:i,handle:".sort-handler",animation:150,setList:Re,children:te}):te]}),be()]})};exports.default=we;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./index.css');const n=require("../_virtual/jsx-runtime.js"),m=require("react"),Ne=require("../Popover/index.js"),re=require("../Label/index.js"),Ae=require("../CheckboxGroup/index.js"),ke=require("../node_modules/@para-ui/icons/Panel/index.js"),qe=require("../node_modules/@para-ui/icons/PlusCircleF/index.js"),ye=require("../node_modules/@para-ui/icons/Delete/index.js"),De=require("../node_modules/@para-ui/icons/Drag/index.js"),Se=require("./rowForm.js"),Be=require("@snack-kit/lib"),$e=require("react-sortablejs"),oe=require("../GlobalContext/constant.js"),Fe=require("../GlobalContext/useFormatMessage.js"),Te=require("./lang/index.js");;/* empty css */const ie=require("../Tooltip/index.js"),we=le=>{const{rowKey:u="id",valueList:i=[],config:g=[],errors:R=[],isSort:v=!1,isFilter:S=!1,className:P,disabledAdd:H=!1,disabledAddTooltip:B,titleMode:$="all",checkedValue:F,icon:ce,deleteDisable:b=[],singleTitle:O,initValue:ae,popoverClassName:_,operationButtons:C=[],onChange:U,onAdd:z,onFilter:q,onDelete:G,deleteRender:T,onSort:K,keepLastItem:N=!0}=le,y=Fe.default("DynamicMultiBox",Te.default),[p,w]=m.useState([]),W=m.useRef(null),V=m.useRef(null),[A,ue]=m.useState([]),[k,J]=m.useState([]),L=m.useRef({});m.useEffect(()=>(window.addEventListener("resize",D),()=>{window.removeEventListener("resize",D),clearTimeout(L.current.timerScroll)}),[]),m.useEffect(()=>{F&&w(F)},[F]),m.useEffect(()=>{if(!g?.length)return;const e=g?.filter(t=>t.isFixed)||[];ue(e)},[g]),m.useEffect(()=>{if(!g?.length)return;const e=g?.filter(t=>!t.isFixed&&p?.includes(t.name))||[];J(e)},[g,p]);const Q=e=>{const t=e?.length>p?.length,s=ve(e,p);let r=[...i],o=[...R];t?(r=I(r,s),o=I(o,s)):(Z(r,s),Z(o,s)),w(e),q&&q({name:s,checkedVal:e,valueList:r,errors:o}),D()},D=()=>{const e=W?.current;if(!e)return;const t=e.querySelector(".multi-value-content");if(!t)return;const s=e.querySelector(".add-button");s&&(clearTimeout(L.current.timerScroll),L.current.timerScroll=setTimeout(()=>{t.offsetWidth<t.scrollWidth?s.classList.add("add-button-scroll"):s.classList.remove("add-button-scroll")},50))},X=()=>{if(!p?.length)return;const e=[...i],t=[...R];Y(e,p),Y(t,p),w([]),J([]),q&&q({valueList:e,errors:t}),D()},Y=(e,t)=>{e.forEach(s=>{for(const r in s)t.includes(r)&&delete s[r]})},Z=(e=[],t)=>{e.forEach(s=>{for(const r in s)r===t&&delete s[r]})},I=(e,t)=>e.map(s=>({...s,[t]:""})),de=()=>{const e=g.filter(t=>!t.isFixed);return n.jsxRuntimeExports.jsx(n.jsxRuntimeExports.Fragment,{children:e&&e?.length>0?n.jsxRuntimeExports.jsxs("div",{className:"filter-config",children:[n.jsxRuntimeExports.jsxs("div",{className:"check-list",children:[n.jsxRuntimeExports.jsx("div",{className:"title",children:y({id:"titleForm"})}),n.jsxRuntimeExports.jsx(Ae.CheckboxGroup,{list:e,row:!1,value:p,onChange:Q})]}),n.jsxRuntimeExports.jsx("div",{className:"restore-default",onClick:X,children:y({id:"default"})})]}):n.jsxRuntimeExports.jsx("div",{className:"no-other-property",children:y({id:"noData"})})})},xe=()=>{let e=`${oe.$prefixCls}-dynamic-multi-box-popover`;return _&&(e+=` ${_}`),e},ee=()=>{let e=!0;if(i.length>b.length)return!1;for(let t=0,s=i?.length;t<s;t++){const r=i[t]?.[u];if(r&&b.indexOf(r)===-1){e=!1;break}}return e},me=(e,t,s)=>{const{key:r,icon:o,text:a,disabled:c,onClick:E,render:d,className:h,tooltip:f}=e;if(d)return n.jsxRuntimeExports.jsx("div",{className:`operator-column-icon operation-button ${h||""}`,children:d(t,s,i)},r);const j=typeof c=="function"?c(t,s,i):c,l=n.jsxRuntimeExports.jsxs("div",{className:`operator-column-icon operation-button ${h||""} ${j?"disabled-operation":""}`,onClick:()=>!j&&E(t,s,i),children:[o,a&&n.jsxRuntimeExports.jsx("span",{className:"operation-text",children:a})]});return f?n.jsxRuntimeExports.jsx(ie.Tooltip,{disabled:j,placement:f.placement||"top",...f,children:l},r):l},fe=(e,t,s,r)=>{const o=[],a=[...C].sort((l,x)=>(l.order||3)-(x.order||3)),c=[],E=[],d=[],h=[];a.forEach(l=>{const x=me(l,e,t);switch(l.order!==void 0?l.order:3){case 0:c.push(x);break;case 1:E.push(x);break;case 2:d.push(x);break;default:h.push(x);break}}),c.forEach(l=>{o.push(l)});const f=n.jsxRuntimeExports.jsx("div",{className:`operator-column-icon delete-icon ${!s||b.includes(t?.[u]||"")?"hidden-icon":""}`,onClick:()=>je(e),children:T?T(e,t,i):n.jsxRuntimeExports.jsx(ye.Delete,{})},"delete-button");if(s&&!b.includes(t[u])&&o.push(f),E.forEach(l=>{o.push(l)}),v&&s){const l=n.jsxRuntimeExports.jsx("div",{className:`sort-handler operator-column-icon ${s?"":"hidden-icon"}`,children:n.jsxRuntimeExports.jsx(De.Drag,{})},"sort-handler");o.push(l)}d.forEach(l=>{o.push(l)}),h.forEach(l=>{o.push(l)});const j=[];return o.forEach((l,x)=>{j.push(l),x<o.length-1&&j.push(n.jsxRuntimeExports.jsx("div",{className:"center-line",children:n.jsxRuntimeExports.jsx("div",{className:"line"})},`divider-${x}`))}),n.jsxRuntimeExports.jsx(n.jsxRuntimeExports.Fragment,{children:j})},M=(e,t,s,r,o=!1)=>{const a=i.length===1&&s===0;let c=0;return o||!a?((!N||i.length>1)&&c++,v&&c++,c+=C?.length||0):(e&&!b.includes(r[u]||"")&&c++,v&&e&&c++,c+=C?.length||0),pe(c)},pe=e=>{switch(e){case 0:case 1:return"operator-column-40";case 2:return"operator-column-80";case 3:return"operator-column-120";case 4:return"operator-column-160";default:return"operator-column-200"}},he=m.useMemo(()=>{const e=[...A,...k];if(!e?.length)return null;const t=N?i.length>1:!0,s=ee();let r="operator-column-40";return i.length===1?r=M(t,s,0,i[0],!1):r=M(t,s,0,i[0],!0),n.jsxRuntimeExports.jsxs("div",{className:"title-config",children:[$==="all"?n.jsxRuntimeExports.jsx("div",{className:"title-config-row",children:e?.map((o,a)=>{const{label:c,required:E,className:d,inputType:h,style:f,labelProps:j}=o;let l="title-config-row-item";h==="Switch"&&(l+=" row-form-switch"),d&&(l+=` ${d}`);const x={...f};return!f?.width&&!f?.flex&&(x.flex=1),n.jsxRuntimeExports.jsx("div",{className:l,style:x,children:n.jsxRuntimeExports.jsx(re.default,{required:E,label:c,...j})},a)})}):$==="single"?n.jsxRuntimeExports.jsx(re.default,{required:O?.required,label:O?.label}):null,n.jsxRuntimeExports.jsxs("div",{className:r,children:[v&&n.jsxRuntimeExports.jsx("div",{className:"blank-block"}),S&&n.jsxRuntimeExports.jsx(Ne.Popover,{placement:"bottom-end",content:de(),getPopupContainer:()=>V.current||document.body,overlayClassName:xe(),children:n.jsxRuntimeExports.jsx("div",{className:"operator-column-icon-panel",ref:V,children:n.jsxRuntimeExports.jsx("div",{className:"svg-box",children:n.jsxRuntimeExports.jsx(ke.Panel,{})})})})]})]})},[$,A,k,v,S,p,Q,X,u,N,i,b,C]),te=m.useMemo(()=>{if(i&&i?.length>0){const e=N?i.length>1:!0,t=[...A,...k],s=ee();return n.jsxRuntimeExports.jsx(n.jsxRuntimeExports.Fragment,{children:i.map((r,o)=>{const a=r[u],c=R?.filter(d=>d[u]===a)?.[0],E=M(e,s,o,r);return n.jsxRuntimeExports.jsxs("div",{className:"content-row-form",children:[n.jsxRuntimeExports.jsx(Se.default,{rowIndex:o,valueList:i,errors:R,rowError:c,onFormItemChange:(d,h,f)=>Ee(d,h,f,o),icon:ce,config:t}),n.jsxRuntimeExports.jsx("div",{className:E,children:fe(o,r,e)})]},a)})})}},[i,v,S,R,A,k,N,T,u,b,C]),je=e=>{const t=[...i],s=[...R];t.splice(e,1),s.splice(e,1),G&&G(t,s)},Ee=(e,t,s,r)=>{const o=[...i];Object.keys(o[r]).forEach(a=>{e===a&&(o[r][a]=s)}),U&&U(o,{name:e,id:t,value:s,rowIndex:r})},ge=()=>{if(H)return;const e=[...i||[]],t=[...R],s=Be.UUID(),r=[...A,...k];e.push({...se(r,"value"),[u]:s}),t.push({...se(r,"error"),[u]:s}),z&&z(e,t)},se=(e,t)=>e.reduce((s,r)=>({...s,[r.name]:t==="value"?ae?.[r.name]:""}),{}),Re=e=>{const t=e.reduce((r,o,a)=>({...r,[o[u]]:a}),{}),s=[];i.forEach((r,o)=>{o!==t[r[u]]&&s.push(o)}),K&&K(e,s)},ve=(e,t)=>e.concat(t).filter(s=>!e.includes(s)||!t.includes(s))[0],ne=()=>n.jsxRuntimeExports.jsxs("div",{className:`add-button ${H?"disabled-add":"normal-button"}`,onClick:ge,children:[n.jsxRuntimeExports.jsx(qe.PlusCircleF,{}),n.jsxRuntimeExports.jsx("span",{className:"text",children:y({id:"add"})})]}),be=()=>B?n.jsxRuntimeExports.jsx(ie.Tooltip,{disabled:!0,placement:B.placement||"top",...B,children:ne()}):ne(),Ce=()=>{let e=`${oe.$prefixCls}-dynamic-multi-box`;return P&&(e+=` ${P}`),e};return n.jsxRuntimeExports.jsxs("div",{className:Ce(),ref:W,children:[n.jsxRuntimeExports.jsxs("div",{className:"multi-value-content",children:[he,v&&Array.isArray(i)&&i.length>0?n.jsxRuntimeExports.jsx($e.ReactSortable,{id:u,list:i,handle:".sort-handler",animation:150,setList:Re,children:te}):te]}),be()]})};exports.default=we;
2
2
  //# sourceMappingURL=index.js.map
@@ -1,38 +1,48 @@
1
- import { ReactNode } from 'react';
1
+ import { ReactNode, CSSProperties } from 'react';
2
2
  import { TextFieldProps, SelectProps, SwitchProps, InputNumberProps, InputLangProps, ComboSelectProps, DatePickerProps } from '../index';
3
3
  import { LabelProps } from '../Label';
4
4
  import { TooltipProps } from '../Tooltip';
5
5
  /**组件类型:输入框,下拉框,开关,数字输入框,国际化输入框,日期框,时间选择框,组合选择器,自定义组件*/
6
6
  export type IInputType = 'TextField' | 'Select' | 'Switch' | 'InputNumber' | 'InputLang' | 'ComboSelect' | 'DatePicker' | 'custom';
7
- /** 配置项*/
8
- export type IConfig = {
9
- /** 字段名,用于匹配*/
10
- name?: string;
11
- /** 组件类型*/
7
+ /** value集合 —— 单行 value 值集合,name 映射 configItem 中的 name */
8
+ export type IValueList<T extends Record<string, unknown> = Record<string, unknown>> = T;
9
+ /** error集合 —— 单行错误集合,name 映射 configItem 中的 name;按 keyof T 精确收窄,rowKey 字段通过 cast 访问 */
10
+ export type IErrors<T extends Record<string, unknown> = Record<string, unknown>> = {
11
+ [K in keyof T]?: unknown;
12
+ };
13
+ /** 配置项 */
14
+ export type IConfig<T extends Record<string, unknown> = Record<string, unknown>> = {
15
+ /** 字段名,用于匹配 valueList 中的 key */
16
+ name?: keyof T & string;
17
+ /** 组件类型 */
12
18
  inputType?: IInputType;
13
- /** 渲染自定义组件*/
14
- customRender?: (name: string, rowIndex: number, valueList: IValueList[], errors?: IErrors[]) => ReactNode;
15
- /** 禁用置灰组件*/
16
- isDisabled?: boolean | ((rowIndex: number, name: string, valueList: IValueList[]) => boolean);
17
- /** 固定字段,不需要显示在筛选器中的需要设置为true, 若不设置无法显示表单*/
19
+ /** 渲染自定义组件 */
20
+ customRender?: (name: keyof T & string, rowIndex: number, valueList: IValueList<T>[], errors?: IErrors<T>[]) => ReactNode;
21
+ /** 禁用置灰组件 */
22
+ isDisabled?: boolean | ((rowIndex: number, name: keyof T & string, valueList: IValueList<T>[]) => boolean);
23
+ /** 固定字段,不需要显示在筛选器中的需要设置为 true,若不设置无法显示表单 */
18
24
  isFixed?: boolean;
19
- /** 用于switch*/
20
- text?: ReactNode | ((rowIndex: number, name: string, valueList: IValueList[]) => ReactNode);
21
- /** 是否必填*/
25
+ /** 用于 switch */
26
+ text?: ReactNode | ((rowIndex: number, name: keyof T & string, valueList: IValueList<T>[]) => ReactNode);
27
+ /** 是否必填 */
22
28
  required?: boolean;
23
- /** 下拉列表数据,若某一列的每一行的下拉列表数据一致, 则只需传入数组,若需要自定义任意下拉列表数据,则传入函数*/
24
- list?: ((rowIndex: number, id: string, name: string, valueList: IValueList[]) => unknown[]) | unknown[];
29
+ /** 下拉列表数据,若某一列的每一行的下拉列表数据一致,则只需传入数组;若需要自定义任意下拉列表数据,则传入函数 */
30
+ list?: ((rowIndex: number, id: string, name: keyof T & string, valueList: IValueList<T>[]) => unknown[]) | unknown[];
25
31
  /** 样式 */
26
- style?: React.CSSProperties;
32
+ style?: CSSProperties;
27
33
  /** 标题样式 */
28
34
  labelProps?: LabelProps;
29
- /** 组件其他样式,返回每个组件的样式 */
30
- otherProps?: (rowIndex: number, name: string, valueList: IValueList[]) => Record<string, unknown>;
31
- /** 其他*/
35
+ /** 组件其他样式,返回每个组件的样式 */
36
+ otherProps?: (rowIndex: number, name: keyof T & string, valueList: IValueList<T>[]) => Record<string, unknown>;
37
+ /**
38
+ * 其他字段
39
+ * 索引签名保留:IConfig 与 (TextFieldProps | SelectProps | ...) 多态子组件 props 交叉,
40
+ * 业务方需要透传不同子组件的 props(如 placeholder、suffix 等),与 Tabs/Table/Button 移除索引签名的情境不同
41
+ */
32
42
  [name: string]: unknown;
33
43
  } & (TextFieldProps | SelectProps | SwitchProps | InputNumberProps | InputLangProps | ComboSelectProps | DatePickerProps);
34
44
  /** 操作按钮配置项 */
35
- export interface IOperationButton {
45
+ export interface IOperationButton<T extends Record<string, unknown> = Record<string, unknown>> {
36
46
  /** 按钮标识 */
37
47
  key: string;
38
48
  /** 按钮图标 */
@@ -40,11 +50,11 @@ export interface IOperationButton {
40
50
  /** 按钮文本 */
41
51
  text?: string;
42
52
  /** 是否禁用 */
43
- disabled?: boolean | ((rowIndex: number, item: IValueList, valueList: IValueList[]) => boolean);
53
+ disabled?: boolean | ((rowIndex: number, item: IValueList<T>, valueList: IValueList<T>[]) => boolean);
44
54
  /** 点击事件 */
45
- onClick: (rowIndex: number, item: IValueList, valueList: IValueList[]) => void;
55
+ onClick: (rowIndex: number, item: IValueList<T>, valueList: IValueList<T>[]) => void;
46
56
  /** 自定义渲染 */
47
- render?: (rowIndex: number, item: IValueList, valueList: IValueList[]) => ReactNode;
57
+ render?: (rowIndex: number, item: IValueList<T>, valueList: IValueList<T>[]) => ReactNode;
48
58
  /** 样式 */
49
59
  className?: string;
50
60
  /** 提示 */
@@ -57,96 +67,86 @@ export interface IOperationButton {
57
67
  */
58
68
  order?: number;
59
69
  }
60
- /** value集合*/
61
- export interface IValueList {
62
- /** 每行value值集合, name映射configItem中的name*/
63
- [name: string]: unknown;
64
- }
65
- export interface IErrors {
66
- /** 每行错误集合,name映射configItem中的name*/
67
- [name: string]: unknown;
68
- }
69
- export interface ICurrentItem {
70
- /** 表单名*/
71
- name?: string;
72
- /** 表单值*/
73
- value?: unknown;
74
- /** 表单所处下标*/
70
+ /** 当前操作表单项;显式声明字段,禁止挂未声明字段 */
71
+ export interface ICurrentItem<T extends Record<string, unknown> = Record<string, unknown>> {
72
+ /** 表单名 */
73
+ name?: keyof T & string;
74
+ /** 表单值 */
75
+ value?: T[keyof T];
76
+ /** 表单所处下标 */
75
77
  rowIndex?: number;
76
- [name: string]: unknown;
78
+ /** 表单所处行的 rowKey 值(默认 rowKey 为 'id') */
79
+ id?: string;
77
80
  }
78
- /** 过滤回调出参*/
79
- export interface IFilterParams {
80
- /** 当前过滤操作项*/
81
+ /** 过滤回调出参 */
82
+ export interface IFilterParams<T extends Record<string, unknown> = Record<string, unknown>> {
83
+ /** 当前过滤操作项 */
81
84
  name?: string;
82
- /** 是否选中*/
85
+ /** 是否选中 */
83
86
  checkedVal?: string[];
84
- /** 更新后的valueList*/
85
- valueList?: IValueList[];
86
- /** 更新后的错误信息*/
87
- errors?: IErrors[];
87
+ /** 更新后的 valueList */
88
+ valueList?: IValueList<T>[];
89
+ /** 更新后的错误信息 */
90
+ errors?: IErrors<T>[];
88
91
  }
89
- /** 主体接口定义*/
90
- export interface IMultiValueProps {
91
- /** 指定每行key */
92
+ /** 主体接口定义 */
93
+ export interface IMultiValueProps<T extends Record<string, unknown> = Record<string, unknown>> {
94
+ /** 指定每行 key */
92
95
  rowKey?: string;
93
96
  /**
94
97
  * 组件配置项
95
98
  */
96
- config?: IConfig[];
99
+ config?: IConfig<T>[];
97
100
  /**
98
101
  * 筛选配置
99
102
  */
100
- filterConfig?: IConfig[];
103
+ filterConfig?: IConfig<T>[];
101
104
  /**
102
105
  * @desc 回调
103
- * @param valueList 整个value值集合
106
+ * @param valueList 整个 value 值集合
104
107
  * @param currentItem 当前操作表单项
105
108
  * */
106
- onChange?: (valueList: IValueList[], currentItem?: ICurrentItem) => void;
109
+ onChange?: (valueList: IValueList<T>[], currentItem?: ICurrentItem<T>) => void;
107
110
  /**
108
111
  * @desc 新增
109
- * @param valueList 新增前valueList值集合
112
+ * @param valueList 新增前 valueList 值集合
110
113
  * @param errors 新增后错误集合
111
114
  * */
112
- onAdd?: (valueList: IValueList[], errors: IErrors[]) => void;
115
+ onAdd?: (valueList: IValueList<T>[], errors: IErrors<T>[]) => void;
113
116
  /**
114
117
  * 自定义删除
115
118
  * */
116
- deleteRender?: (index: number, item: IValueList, valueList: IValueList[]) => ReactNode;
119
+ deleteRender?: (index: number, item: IValueList<T>, valueList: IValueList<T>[]) => ReactNode;
117
120
  /**
118
- * @desc 删除,
119
- * @param valueList 删除后整个valueList值集合
120
- * @param deleteItem 删除项
121
+ * @desc 删除
122
+ * @param valueList 删除后整个 valueList 值集合
123
+ * @param errors 删除后错误集合
121
124
  */
122
- onDelete?: (valueList: IValueList[], errors: IErrors[]) => void;
125
+ onDelete?: (valueList: IValueList<T>[], errors: IErrors<T>[]) => void;
123
126
  /**
124
127
  * @desc 筛选函数
125
- * @param name 当前筛选项的name
126
- * @param checked 是否选中, true选中, false反选
127
- * @param valueList 筛选后的value
128
128
  * */
129
- onFilter?: (data: IFilterParams) => void;
129
+ onFilter?: (data: IFilterParams<T>) => void;
130
130
  /**
131
131
  * @desc 排序
132
132
  * @param newValueList
133
133
  * @param swapIds 交换顺序的两个下标
134
134
  * */
135
- onSort?: (newValueList: IValueList[], swapIds?: number[]) => void;
135
+ onSort?: (newValueList: IValueList<T>[], swapIds?: number[]) => void;
136
136
  /**
137
137
  * @desc 筛选值的集合
138
138
  * */
139
139
  checkedValue?: string[];
140
140
  /**
141
- * 表单value集合
141
+ * 表单 value 集合
142
142
  */
143
- valueList?: IValueList[];
143
+ valueList?: IValueList<T>[];
144
144
  /**
145
145
  * 表单错误集合
146
146
  */
147
- errors?: IErrors[];
147
+ errors?: IErrors<T>[];
148
148
  /**
149
- * 是否需要支持排序,默认不支持
149
+ * 是否需要支持排序,默认不支持
150
150
  */
151
151
  isSort?: boolean;
152
152
  /**
@@ -154,7 +154,7 @@ export interface IMultiValueProps {
154
154
  */
155
155
  isFilter?: boolean;
156
156
  /**
157
- * 标题模式 none 不显示, single 只有第一列才显示, all 每列都显示
157
+ * 标题模式 none 不显示,single 只有第一列才显示,all 每列都显示
158
158
  */
159
159
  titleMode?: 'none' | 'single' | 'all';
160
160
  /**
@@ -166,11 +166,11 @@ export interface IMultiValueProps {
166
166
  */
167
167
  disabledAddTooltip?: TooltipProps;
168
168
  /**
169
- * 列之间icon
169
+ * 列之间 icon
170
170
  * */
171
171
  icon?: ReactNode;
172
172
  /**
173
- * 隐藏删除icon, string[] 指定某些行隐藏删除按钮, 入参为valueList中的id集合
173
+ * 隐藏删除 iconstring[] 指定某些行隐藏删除按钮,入参为 valueList 中的 id 集合
174
174
  * */
175
175
  deleteDisable?: string[];
176
176
  /**
@@ -187,7 +187,7 @@ export interface IMultiValueProps {
187
187
  /**
188
188
  * 新增项行表单的默认值
189
189
  */
190
- initValue?: Record<string, unknown>;
190
+ initValue?: Partial<T>;
191
191
  /**
192
192
  * 筛选器弹出框样式
193
193
  */
@@ -199,5 +199,5 @@ export interface IMultiValueProps {
199
199
  /**
200
200
  * 自定义操作按钮,支持每行配置多个操作按钮
201
201
  */
202
- operationButtons?: IOperationButton[];
202
+ operationButtons?: IOperationButton<T>[];
203
203
  }
@@ -18,9 +18,9 @@ export interface IRowForm {
18
18
  * @param value 当前组件value值
19
19
  * @param name 当前组件name
20
20
  * */
21
- onFormItemChange?: (name: string, id: string, value: any) => void;
21
+ onFormItemChange?: (name: string, id: string, value: unknown) => void;
22
22
  /**其他*/
23
- [name: string]: any;
23
+ [name: string]: unknown;
24
24
  }
25
25
  declare const RowForm: (props: IRowForm) => import("react/jsx-runtime").JSX.Element;
26
26
  export default RowForm;